Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'mdt/uml2/docs/articles/Defining_Generics_with_UML_Templates/article.html')
-rw-r--r--mdt/uml2/docs/articles/Defining_Generics_with_UML_Templates/article.html2616
1 files changed, 0 insertions, 2616 deletions
diff --git a/mdt/uml2/docs/articles/Defining_Generics_with_UML_Templates/article.html b/mdt/uml2/docs/articles/Defining_Generics_with_UML_Templates/article.html
deleted file mode 100644
index 292994b6..00000000
--- a/mdt/uml2/docs/articles/Defining_Generics_with_UML_Templates/article.html
+++ /dev/null
@@ -1,2616 +0,0 @@
-<html xmlns:v="urn:schemas-microsoft-com:vml"
-xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 10">
-<meta name=Originator content="Microsoft Word 10">
-<link rel=File-List href="article_files/filelist.xml">
-<link rel=Edit-Time-Data href="article_files/editdata.mso">
-<!--[if !mso]>
-<style>
-v\:* {behavior:url(#default#VML);}
-o\:* {behavior:url(#default#VML);}
-w\:* {behavior:url(#default#VML);}
-.shape {behavior:url(#default#VML);}
-</style>
-<![endif]-->
-<title>Generics in UML</title>
-<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
- name="country-region"/>
-<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
- name="place"/>
-<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
- name="date"/>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
- <o:Author>jbruck</o:Author>
- <o:Template>Normal</o:Template>
- <o:LastAuthor>jbruck</o:LastAuthor>
- <o:Revision>742</o:Revision>
- <o:TotalTime>24748</o:TotalTime>
- <o:LastPrinted>2006-09-12T15:08:00Z</o:LastPrinted>
- <o:Created>2004-07-06T14:17:00Z</o:Created>
- <o:LastSaved>2007-10-05T14:35:00Z</o:LastSaved>
- <o:Pages>1</o:Pages>
- <o:Words>2895</o:Words>
- <o:Characters>16504</o:Characters>
- <o:Company>IBM</o:Company>
- <o:Lines>137</o:Lines>
- <o:Paragraphs>38</o:Paragraphs>
- <o:CharactersWithSpaces>19361</o:CharactersWithSpaces>
- <o:Version>10.6830</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
- <w:ActiveWritingStyle Lang="EN-US" VendorID="64" DLLVersion="131078"
- NLCheck="1">1</w:ActiveWritingStyle>
- <w:SpellingState>Clean</w:SpellingState>
- <w:GrammarState>Clean</w:GrammarState>
- <w:Compatibility>
- <w:ApplyBreakingRules/>
- </w:Compatibility>
- <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
- </w:WordDocument>
-</xml><![endif]--><!--[if !mso]><object
- classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
-<style>
-st1\:*{behavior:url(#ieooui) }
-</style>
-<![endif]-->
-<link rel=Stylesheet type="text/css" media=all href="default_style.css">
-<style>
-<!--
- /* Font Definitions */
- @font-face
- {font-family:"Tms Rmn";
- panose-1:2 2 6 3 4 5 5 2 3 4;
- mso-font-alt:"Times New Roman";
- mso-font-charset:0;
- mso-generic-font-family:roman;
- mso-font-format:other;
- mso-font-pitch:variable;
- mso-font-signature:3 0 0 0 1 0;}
-@font-face
- {font-family:"MS Mincho";
- panose-1:2 2 6 9 4 2 5 8 3 4;
- mso-font-alt:"\FF2D\FF33 \660E\671D";
- mso-font-charset:128;
- mso-generic-font-family:modern;
- mso-font-pitch:fixed;
- mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
-@font-face
- {font-family:"Arial Unicode MS";
- panose-1:2 11 6 4 2 2 2 2 2 4;
- mso-font-charset:128;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:-1 -369098753 63 0 4129279 0;}
-@font-face
- {font-family:Tahoma;
- panose-1:2 11 6 4 3 5 4 4 2 4;
- mso-font-charset:0;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:1627421319 -2147483648 8 0 66047 0;}
-@font-face
- {font-family:Verdana;
- panose-1:2 11 6 4 3 5 4 4 2 4;
- mso-font-charset:0;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:536871559 0 0 0 415 0;}
-@font-face
- {font-family:"\@MS Mincho";
- panose-1:2 2 6 9 4 2 5 8 3 4;
- mso-font-charset:128;
- mso-generic-font-family:modern;
- mso-font-pitch:fixed;
- mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
-@font-face
- {font-family:"\@Arial Unicode MS";
- panose-1:2 11 6 4 2 2 2 2 2 4;
- mso-font-charset:128;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:-1 -369098753 63 0 4129279 0;}
- /* Style Definitions */
- p.MsoNormal, li.MsoNormal, div.MsoNormal
- {mso-style-parent:"";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:12.0pt;
- font-family:"Times New Roman";
- mso-fareast-font-family:"Times New Roman";
- mso-believe-normal-left:yes;}
-h1
- {mso-margin-top-alt:auto;
- margin-right:0in;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-pagination:widow-orphan;
- mso-outline-level:1;
- font-size:21.0pt;
- mso-fareast-font-family:"MS Mincho";
- font-weight:bold;}
-h2
- {mso-margin-top-alt:auto;
- margin-right:0in;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-line-height-alt:10.5pt;
- mso-pagination:widow-orphan;
- mso-outline-level:2;
- font-size:18.0pt;
- mso-fareast-font-family:"MS Mincho";
- font-weight:bold;}
-h3
- {mso-margin-top-alt:auto;
- margin-right:0in;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-pagination:widow-orphan;
- mso-outline-level:3;
- font-size:14.0pt;
- mso-fareast-font-family:"MS Mincho";
- font-weight:bold;}
-h4
- {mso-style-next:Normal;
- margin-top:12.0pt;
- margin-right:0in;
- margin-bottom:3.0pt;
- margin-left:0in;
- mso-pagination:widow-orphan;
- page-break-after:avoid;
- mso-outline-level:4;
- font-size:12.0pt;
- mso-bidi-font-size:14.0pt;
- font-family:Arial;
- mso-bidi-font-family:"Times New Roman";
- font-weight:bold;}
-p.MsoCaption, li.MsoCaption, div.MsoCaption
- {mso-style-noshow:yes;
- mso-style-next:Normal;
- margin-top:6.0pt;
- margin-right:0in;
- margin-bottom:6.0pt;
- margin-left:0in;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Times New Roman";
- mso-fareast-font-family:"Times New Roman";
- font-weight:bold;}
-a:link, span.MsoHyperlink
- {color:blue;
- text-decoration:underline;
- text-underline:single;}
-a:visited, span.MsoHyperlinkFollowed
- {color:purple;
- text-decoration:underline;
- text-underline:single;}
-p.MsoDocumentMap, li.MsoDocumentMap, div.MsoDocumentMap
- {mso-style-noshow:yes;
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- background:navy;
- font-size:12.0pt;
- font-family:Tahoma;
- mso-fareast-font-family:"Times New Roman";}
-p
- {mso-margin-top-alt:auto;
- margin-right:0in;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- mso-fareast-font-family:"Times New Roman";}
-code
- {mso-fareast-font-family:"Times New Roman";}
-pre
- {margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- font-size:10.0pt;
- mso-fareast-font-family:"Times New Roman";}
-tt
- {font-family:"Arial Unicode MS";
- mso-ascii-font-family:"Arial Unicode MS";
- mso-fareast-font-family:"Arial Unicode MS";
- mso-hansi-font-family:"Arial Unicode MS";
- mso-bidi-font-family:"Arial Unicode MS";}
-p.indextop, li.indextop, div.indextop
- {mso-style-name:indextop;
- mso-margin-top-alt:auto;
- margin-right:0in;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-pagination:widow-orphan;
- font-size:24.0pt;
- mso-fareast-font-family:"Times New Roman";
- font-weight:bold;}
-p.indexsub, li.indexsub, div.indexsub
- {mso-style-name:indexsub;
- mso-margin-top-alt:auto;
- margin-right:0in;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-pagination:widow-orphan;
- font-size:7.5pt;
- mso-fareast-font-family:"Times New Roman";}
-span.SpellE
- {mso-style-name:"";
- mso-spl-e:yes;}
-span.GramE
- {mso-style-name:"";
- mso-gram-e:yes;}
-@page Section1
- {size:8.5in 11.0in;
- margin:1.0in 1.25in 1.0in 1.25in;
- mso-header-margin:.5in;
- mso-footer-margin:.5in;
- mso-paper-source:0;}
-div.Section1
- {page:Section1;}
- /* List Definitions */
- @list l0
- {mso-list-id:80419148;
- mso-list-type:hybrid;
- mso-list-template-ids:998395232 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
-@list l0:level1
- {mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l0:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l1
- {mso-list-id:93326361;
- mso-list-template-ids:-1930790778;}
-@list l2
- {mso-list-id:267591677;
- mso-list-template-ids:-665690670;}
-@list l3
- {mso-list-id:297878226;
- mso-list-type:hybrid;
- mso-list-template-ids:1290409668 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
-@list l3:level1
- {mso-level-number-format:bullet;
- mso-level-text:o;
- mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:"Courier New";}
-@list l3:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l3:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l3:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l3:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l3:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l3:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l3:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l3:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l4
- {mso-list-id:974219966;
- mso-list-template-ids:2113853940;}
-@list l5
- {mso-list-id:985623800;
- mso-list-type:hybrid;
- mso-list-template-ids:1387151514 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
-@list l5:level1
- {mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l5:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l6
- {mso-list-id:1029720438;
- mso-list-template-ids:355487190;}
-@list l7
- {mso-list-id:1184899670;
- mso-list-type:hybrid;
- mso-list-template-ids:-45207776 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
-@list l7:level1
- {mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l7:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8
- {mso-list-id:1224634209;
- mso-list-type:hybrid;
- mso-list-template-ids:1234604792 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
-@list l8:level1
- {mso-level-number-format:bullet;
- mso-level-text:o;
- mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:"Courier New";}
-@list l8:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l8:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9
- {mso-list-id:1356535618;
- mso-list-type:hybrid;
- mso-list-template-ids:-556531444 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
-@list l9:level1
- {mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l9:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10
- {mso-list-id:1490828746;
- mso-list-type:hybrid;
- mso-list-template-ids:2099921038 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
-@list l10:level1
- {mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l10:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l11
- {mso-list-id:1512450557;
- mso-list-template-ids:236911118;}
-@list l12
- {mso-list-id:1669483133;
- mso-list-template-ids:-941987204;}
-@list l13
- {mso-list-id:1969629405;
- mso-list-type:hybrid;
- mso-list-template-ids:-1313463162 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
-@list l13:level1
- {mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l13:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14
- {mso-list-id:1975402694;
- mso-list-type:hybrid;
- mso-list-template-ids:1530842176 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
-@list l14:level1
- {mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l14:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15
- {mso-list-id:2054108931;
- mso-list-type:hybrid;
- mso-list-template-ids:1688889934 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
-@list l15:level1
- {mso-level-number-format:bullet;
- mso-level-text:o;
- mso-level-tab-stop:.5in;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:"Courier New";}
-@list l15:level2
- {mso-level-tab-stop:1.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15:level3
- {mso-level-tab-stop:1.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15:level4
- {mso-level-tab-stop:2.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15:level5
- {mso-level-tab-stop:2.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15:level6
- {mso-level-tab-stop:3.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15:level7
- {mso-level-tab-stop:3.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15:level8
- {mso-level-tab-stop:4.0in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-@list l15:level9
- {mso-level-tab-stop:4.5in;
- mso-level-number-position:left;
- text-indent:-.25in;}
-ol
- {margin-bottom:0in;}
-ul
- {margin-bottom:0in;}
--->
-</style>
-<!--[if gte mso 10]>
-<style>
- /* Style Definitions */
- table.MsoNormalTable
- {mso-style-name:"Table Normal";
- mso-tstyle-rowband-size:0;
- mso-tstyle-colband-size:0;
- mso-style-noshow:yes;
- mso-style-parent:"";
- mso-padding-alt:0in 5.4pt 0in 5.4pt;
- mso-para-margin:0in;
- mso-para-margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Times New Roman";}
-table.MsoTableSimple2
- {mso-style-name:"Table Simple 2";
- mso-tstyle-rowband-size:0;
- mso-tstyle-colband-size:0;
- mso-padding-alt:0in 5.4pt 0in 5.4pt;
- mso-para-margin:0in;
- mso-para-margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Times New Roman";}
-table.MsoTableSimple2FirstRow
- {mso-style-name:"Table Simple 2";
- mso-table-condition:first-row;
- mso-tstyle-border-bottom:1.5pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableSimple2LastRow
- {mso-style-name:"Table Simple 2";
- mso-table-condition:last-row;
- mso-tstyle-border-top:.75pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- color:windowtext;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableSimple2FirstCol
- {mso-style-name:"Table Simple 2";
- mso-table-condition:first-column;
- mso-tstyle-border-right:1.5pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableSimple2LastCol
- {mso-style-name:"Table Simple 2";
- mso-table-condition:last-column;
- mso-tstyle-border-left:.75pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableSimple2NECell
- {mso-style-name:"Table Simple 2";
- mso-table-condition:ne-cell;
- mso-tstyle-border-left:0in none windowtext;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableSimple2SWCell
- {mso-style-name:"Table Simple 2";
- mso-table-condition:sw-cell;
- mso-tstyle-border-top:0in none windowtext;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableClassic1
- {mso-style-name:"Table Classic 1";
- mso-tstyle-rowband-size:0;
- mso-tstyle-colband-size:0;
- border-top:solid black 1.5pt;
- border-left:none;
- border-bottom:solid black 1.5pt;
- border-right:none;
- mso-padding-alt:0in 5.4pt 0in 5.4pt;
- mso-para-margin:0in;
- mso-para-margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Times New Roman";}
-table.MsoTableClassic1FirstRow
- {mso-style-name:"Table Classic 1";
- mso-table-condition:first-row;
- mso-tstyle-border-bottom:.75pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-style:italic;
- mso-bidi-font-style:italic;}
-table.MsoTableClassic1LastRow
- {mso-style-name:"Table Classic 1";
- mso-table-condition:last-row;
- mso-tstyle-border-top:.75pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- color:windowtext;}
-table.MsoTableClassic1FirstCol
- {mso-style-name:"Table Classic 1";
- mso-table-condition:first-column;
- mso-tstyle-border-right:.75pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;}
-table.MsoTableClassic1NECell
- {mso-style-name:"Table Classic 1";
- mso-table-condition:ne-cell;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;
- mso-ansi-font-style:normal;
- mso-bidi-font-style:normal;}
-table.MsoTableClassic1SWCell
- {mso-style-name:"Table Classic 1";
- mso-table-condition:sw-cell;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableList1
- {mso-style-name:"Table List 1";
- mso-tstyle-rowband-size:1;
- mso-tstyle-colband-size:0;
- border-top:1.5pt;
- border-left:1.0pt;
- border-bottom:1.5pt;
- border-right:1.0pt;
- border-color:teal;
- border-style:solid;
- mso-border-top-alt:1.5pt;
- mso-border-left-alt:.75pt;
- mso-border-bottom-alt:1.5pt;
- mso-border-right-alt:.75pt;
- mso-border-color-alt:teal;
- mso-border-style-alt:solid;
- mso-padding-alt:0in 5.4pt 0in 5.4pt;
- mso-para-margin:0in;
- mso-para-margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Times New Roman";}
-table.MsoTableList1FirstRow
- {mso-style-name:"Table List 1";
- mso-table-condition:first-row;
- mso-tstyle-shading:white;
- mso-tstyle-pattern:solid silver;
- mso-tstyle-border-bottom:.75pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- color:maroon;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;
- mso-ansi-font-style:italic;
- mso-bidi-font-style:italic;}
-table.MsoTableList1LastRow
- {mso-style-name:"Table List 1";
- mso-table-condition:last-row;
- mso-tstyle-border-top:.75pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;}
-table.MsoTableList1OddRow
- {mso-style-name:"Table List 1";
- mso-table-condition:odd-row;
- mso-tstyle-shading:white;
- mso-tstyle-pattern:solid silver;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- color:windowtext;}
-table.MsoTableList1EvenRow
- {mso-style-name:"Table List 1";
- mso-table-condition:even-row;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- color:windowtext;}
-table.MsoTableList1SWCell
- {mso-style-name:"Table List 1";
- mso-table-condition:sw-cell;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableList4
- {mso-style-name:"Table List 4";
- mso-tstyle-rowband-size:0;
- mso-tstyle-colband-size:0;
- border:solid black 1.5pt;
- mso-padding-alt:0in 5.4pt 0in 5.4pt;
- mso-border-insideh:.75pt solid black;
- mso-para-margin:0in;
- mso-para-margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Times New Roman";}
-table.MsoTableList4FirstRow
- {mso-style-name:"Table List 4";
- mso-table-condition:first-row;
- mso-tstyle-shading:white;
- mso-tstyle-pattern:solid gray;
- mso-tstyle-border-bottom:1.5pt solid black;
- mso-tstyle-diagonal-down:0in none windowtext;
- mso-tstyle-diagonal-up:0in none windowtext;
- font-size:10.0pt;
- mso-ansi-font-size:10.0pt;
- mso-bidi-font-size:10.0pt;
- font-family:Arial;
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:Arial;
- color:white;
- mso-ansi-font-weight:bold;
- mso-bidi-font-weight:bold;}
-table.MsoTableGrid
- {mso-style-name:"Table Grid";
- mso-tstyle-rowband-size:0;
- mso-tstyle-colband-size:0;
- border:solid windowtext 1.0pt;
- mso-border-alt:solid windowtext .5pt;
- mso-padding-alt:0in 5.4pt 0in 5.4pt;
- mso-border-insideh:.5pt solid windowtext;
- mso-border-insidev:.5pt solid windowtext;
- mso-para-margin:0in;
- mso-para-margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Times New Roman";}
-</style>
-<![endif]--><![if mso 9]>
-<style>
-p.MsoNormal
- {margin-left:8.5pt;}
-</style>
-<![endif]><!--[if gte mso 9]><xml>
- <o:shapedefaults v:ext="edit" spidmax="66562"/>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <o:shapelayout v:ext="edit">
- <o:idmap v:ext="edit" data="1"/>
- </o:shapelayout></xml><![endif]-->
-</head>
-
-<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in;margin-left:
-8.5pt;margin-top:14.2pt'>
-
-<div class=Section1>
-
-<p class=MsoNormal align=right style='text-align:right'><span style='font-size:
-10.0pt'>Copyright © 2007 International Business Machines Corp.</span><span
-style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>
-
-<div align=right>
-
-<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width="100%"
- style='width:100.0%;mso-cellspacing:0in;mso-padding-alt:1.5pt 1.5pt 1.5pt 1.5pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td valign=top style='background:#0080C0;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
- <p class=MsoNormal><b><span style='font-size:10.0pt;font-family:Arial;
- color:white'>&nbsp;</span></b><span style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>
- </td>
- </tr>
-</table>
-
-</div>
-
-<h1><img width=120 height=86 id="_x0000_i1025" src="../../../../images/Idea.jpg"
-align=CENTER></h1>
-
-<p>&nbsp;</p>
-
-<h1 align=center style='text-align:center'>Defining Generics with UML Templates</h1>
-
-<h1 align=center style='text-align:center'><o:p>&nbsp;</o:p></h1>
-
-<blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'>
-
-<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:Arial'>Summary</span></b><span
-style='font-size:10.0pt;font-family:Arial'><br style='mso-special-character:
-line-break'>
-<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
-<![endif]><o:p></o:p></span></p>
-
-<p>Generics in Java have been around for a while but support for mapping
-generically specified artifacts in UML to their Ecore representation is new to
-UML2 2.1.<span style='mso-spacerun:yes'>  </span>This article will walk the
-reader through the details of the mapping process with the end goal of
-producing generically specified code. This article assumes some level of
-familiarity with generics and is not intended as a tutorial in Java
-generics.<span style='mso-spacerun:yes'>  </span></p>
-
-<p>This article might also be useful to readers who are only interested in how
-generics can be specified with UML.<span style='mso-spacerun:yes'>  </span>In
-such cases, the reader can simply ignore the Ecore mapping and focus on the UML
-and Java representations.</p>
-
-<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
-
-<p><b>By James Bruck, IBM </b><br>
-<st1:date Month="9" Day="12" Year="2007">September 12, 2007</st1:date> </p>
-
-</blockquote>
-
-<div class=MsoNormal align=center style='text-align:center'><span
-style='font-size:10.0pt;font-family:Arial'>
-
-<hr size=2 width="100%" align=center>
-
-</span></div>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h2>Glossary</h2>
-
-<p>A few terms and abbreviations will be used throughout this document.</p>
-
-<table class=MsoTableList4 border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none;mso-border-alt:solid black 1.5pt;
- mso-yfti-tbllook:160;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
- .75pt solid black'>
- <tr style='mso-yfti-irow:-1'>
- <td width=168 valign=top style='width:125.75pt;border:solid black 1.5pt;
- border-right:none;background:gray;mso-shading:white;mso-pattern:solid gray;
- padding:0in 5.4pt 0in 5.4pt'>
- <p style='mso-yfti-cnfc:1'><b><span style='color:white'>Term<o:p></o:p></span></b></p>
- </td>
- <td width=684 valign=top style='width:513.0pt;border:solid black 1.5pt;
- border-left:none;background:gray;mso-shading:white;mso-pattern:solid gray;
- padding:0in 5.4pt 0in 5.4pt'>
- <p style='mso-yfti-cnfc:1'><b><span style='color:white'>Definition<o:p></o:p></span></b></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=168 valign=top style='width:125.75pt;border-top:none;border-left:
- solid black 1.5pt;border-bottom:solid black 1.5pt;border-right:none;
- mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'>
- <p><b style='mso-bidi-font-weight:normal'>UML specification<o:p></o:p></b></p>
- </td>
- <td width=684 valign=top style='width:513.0pt;border-top:none;border-left:
- none;border-bottom:solid black 1.5pt;border-right:solid black 1.5pt;
- mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'>
- <p>This refers to the latest version of the UML API which is based on the UML
- 2.1.1 specification defined by OMG</p>
- <p>The latest draft of the UML Superstructure Specification can be found at: <a
- href="http://www.omg.org/docs/formal/07-02-05.pdf">http://www.omg.org/docs/formal/07-02-05.pdf</a></p>
- <p><o:p>&nbsp;</o:p></p>
- </td>
- </tr>
-</table>
-
-<h2>Introduction</h2>
-
-<p>There are two main benefits in familiarizing yourself with UML templates:
-firstly, you can express and communicate your ideas more accurately, and
-secondly, code generated via conversion through Ecore will result in
-generically specified Java.<span style='mso-spacerun:yes'>  </span>Through a
-series of examples, this article attempts to explain how templates in UML map
-to generics in Ecore and Java.<span style='mso-spacerun:yes'>  </span></p>
-
-<p>Some concepts involving generics in UML do not map directly to Java (or
-Ecore).<span style='mso-spacerun:yes'>   </span>In general, UML is more verbose
-and requires a modeler to create more constructs to convey ideas that would
-otherwise be more simply described in Java (or Ecore).</p>
-
-<p>Consider template bindings for example: template bindings are constructs
-that do not explicitly exist in Java (or Ecore).<span
-style='mso-spacerun:yes'>   </span>The template binding concept in UML can be
-considered to be a “merging” of <span class=SpellE>templateable</span> items
-into the bound item where actual parameters are substituted for formal
-parameters.<span style='mso-spacerun:yes'>  </span>More about this in the
-section entitled “<a href="#_Some_UML_Basics">Some UML Basics</a>”.</p>
-
-<p>Concrete classifiers that result from applying template bindings to a <span
-class=SpellE>templated</span> classifier can also be considered an “artificial”
-construct required by UML.<span style='mso-spacerun:yes'>  </span>Such
-additional classifiers are not needed when describing generics in Java (or
-Ecore).<span style='mso-spacerun:yes'>  </span>The examples listed later in
-this document will explain these ideas in detail.</p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h2>Enhanced Ecore Profile</h2>
-
-<p>The mapping from UML to Ecore as implemented in the UML2 2.1 API is intended
-to be a lossless conversion.<span style='mso-spacerun:yes'>  </span>Round
-tripping from UML to Ecore and back again should produce the original UML
-model.<span style='mso-spacerun:yes'>  </span>To achieve this lossless
-conversion, concepts present in Ecore, but not in UML have been added to an
-enhanced Ecore profile.<span style='mso-spacerun:yes'>   </span>The information
-added to stereotyped items will be reapplied when converting back.</p>
-
-<p>What UML does not capture that Ecore does:</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l8 level1 lfo2;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Multiple
-bounds on <span class=SpellE>ETypeParameters</span>.<span
-style='mso-spacerun:yes'>  </span>The &lt;&lt;<span class=SpellE>eTypeParameter</span>&gt;&gt;
-stereotype has been created for this purpose.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l8 level1 lfo2;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Upper
-and lower bounds on <span class=SpellE>EGenericTypes</span>. (It should be
-pointed out that it is possible to specify a single bound on type parameters in
-UML via the <span class=SpellE>ClassifierTemplateParameter::constrainingClassifier</span>
-property but this is currently a scalar value).<span style='mso-spacerun:yes'> 
-</span>The &lt;&lt;<span class=SpellE>eGenericType</span>&gt;&gt; stereotype
-has been created for this purpose.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l8 level1 lfo2;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>UML
-requires “additional” classifiers to specify bound generic types.<span
-style='mso-spacerun:yes'>  </span>These need to be marked in order to remove
-them when converting from UML to Ecore.<span style='mso-spacerun:yes'> 
-</span>The &lt;&lt;<span class=SpellE>eGenericType</span>&gt;&gt; stereotype is
-used as a marker so that conversion from UML to Ecore will result in dropping
-elements with such stereotypes.</p>
-
-<p>The subset of newly added stereotypes to the Ecore profile is shown in the
-following diagram:</p>
-
-<p><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
- o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
- stroked="f">
- <v:stroke joinstyle="miter"/>
- <v:formulas>
- <v:f eqn="if lineDrawn pixelLineWidth 0"/>
- <v:f eqn="sum @0 1 0"/>
- <v:f eqn="sum 0 0 @1"/>
- <v:f eqn="prod @2 1 2"/>
- <v:f eqn="prod @3 21600 pixelWidth"/>
- <v:f eqn="prod @3 21600 pixelHeight"/>
- <v:f eqn="sum @0 0 1"/>
- <v:f eqn="prod @6 1 2"/>
- <v:f eqn="prod @7 21600 pixelWidth"/>
- <v:f eqn="sum @8 21600 0"/>
- <v:f eqn="prod @7 21600 pixelHeight"/>
- <v:f eqn="sum @10 21600 0"/>
- </v:formulas>
- <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
- <o:lock v:ext="edit" aspectratio="t"/>
-</v:shapetype><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:573.75pt;
- height:230.25pt'>
- <v:imagedata src="article_files/image001.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=765 height=307
-src="article_files/image002.jpg" v:shapes="_x0000_i1027"><![endif]></p>
-
-<p>While we are on the topic of differences between Ecore and UML we should
-mention that UML has some ‘quirkiness’ in the area of templates.<span
-style='mso-spacerun:yes'>  </span>In the current version of the UML
-specification, UML has multiple actual parameters per formal parameter.<span
-style='mso-spacerun:yes'>   </span>It is unclear how multiple parameters could
-be substituted for one formal parameter.<span style='mso-spacerun:yes'> 
-</span>The conversion process therefore considers only one actual per formal
-parameter.<span style='mso-spacerun:yes'>  </span>An <a
-href="http://www.omg.org/issues/uml2-rtf.open.html#Issue9398">issue</a> for this
-has been raised at OMG and should be resolved by the next revision of the UML
-specification.</p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h2><a name="_Some_UML_Basics"></a>Some UML Basics</h2>
-
-<p>UML allows users to model generics via templates and template bindings.<span
-style='mso-spacerun:yes'>   </span>Section 17.5 of the UML superstructure
-specification describes all the constructs required to describe templates.</p>
-
-<p>Quoting from the UML superstructure specification…</p>
-
-<p><i style='mso-bidi-font-style:normal'>A <span class=SpellE>TemplateableElement</span>
-that has a template signature is a specification of a template.<span
-style='mso-spacerun:yes'>  </span>A template is a parameterized element that
-can be used to generate other model elements using <span class=SpellE>TemplateBinding</span>
-relationships.<span style='mso-spacerun:yes'>   </span><span class=SpellE>TemplateableElements</span>
-can have template signatures and template bindings.<span
-style='mso-spacerun:yes'>  </span>Thus a <span class=SpellE>templateable</span>
-element may be both a template and a bound element.<span
-style='mso-spacerun:yes'>    </span>The template parameters for the template
-signature specify the formal parameters that will be substituted by actual
-parameters in a binding.<o:p></o:p></i></p>
-
-<p><i style='mso-bidi-font-style:normal'>A template cannot be used in the same
-manner as a non-template element of the same kind.<span
-style='mso-spacerun:yes'>   </span>The template element can only be used to
-generate bound elements or as part of the specification of another
-template.<span style='mso-spacerun:yes'>  </span>A bound element is an ordinary
-element and can be used in the same manner as a non-bound element of the same
-kind.<span style='mso-spacerun:yes'>  </span></i>This is an important point
-since it means that a template class cannot be used as the type of a typed
-element.</p>
-
-<p><span class=SpellE><i style='mso-bidi-font-style:normal'>ParameterableElement</i></span><i
-style='mso-bidi-font-style:normal'> is an element that can be exposed as a
-formal template parameter for a template or specified as an actual parameter in
-a binding of a template.<span style='mso-spacerun:yes'>  </span>A <span
-class=SpellE>ParameterableElement</span> may be part of the definition of a template
-parameter.<span style='mso-spacerun:yes'>  </span>In an element bound to the
-template, any use of the template parameter will be substituted by the use of
-the actual parameter.<span style='mso-spacerun:yes'>  </span>If a <span
-class=SpellE>ParameterableElement</span> is exposed as a template parameter,
-then <span class=SpellE>parameterable</span> element is only meaningful within
-the template.<o:p></o:p></i></p>
-
-<p><i style='mso-bidi-font-style:normal'>A <span class=SpellE>TemplateBinding</span>
-represents a relationship between a <span class=SpellE>templateable</span>
-element and a template.<span style='mso-spacerun:yes'>   </span>A template
-binding specifies the substitutions of actual parameters for the formal
-parameters of the template.<span style='mso-spacerun:yes'>  </span>The presence
-of a template binding relationship implies the same semantics as if the
-contents of the template owning the target template signature were copied into
-the bound element, substituting and elements exposed as formal template
-parameters by the corresponding elements specified as actual parameters in the
-binding.<o:p></o:p></i></p>
-
-<p>The kinds of UML metatypes that can be <span class=SpellE>templateable</span>
-are Classifier (Class, Component etc.), Operation, Package and less commonly,
-Property, and <span class=SpellE>StringExpression</span>.</p>
-
-<p>Neither <span class=SpellE>Ecore</span> nor Java has this template binding
-concept so having a firm grasp of the UML metamodel is important if you are
-only familiar with generics in Java.</p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h2>The Ecore Meta-Model</h2>
-
-<p>The following diagram showing a subset of the Ecore metamodel (highlighting
-generics) will be used as a reference when describing the UML to Ecore
-mapping.<span style='mso-spacerun:yes'>   </span></p>
-
-<h2 style='margin-left:8.5pt;page-break-after:avoid'><span style='font-size:
-10.0pt;mso-bidi-font-size:18.0pt;font-family:"Tms Rmn"'><!--[if gte vml 1]><v:shape
- id="_x0000_i1028" type="#_x0000_t75" style='width:420.75pt;height:411pt'>
- <v:imagedata src="article_files/image003.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=561 height=548
-src="article_files/image004.jpg" v:shapes="_x0000_i1028"><![endif]></span></h2>
-
-<p class=MsoCaption>Figure <!--[if supportFields]><span style='mso-element:
-field-begin'></span><span style='mso-spacerun:yes'> </span>SEQ Figure \* ARABIC
-<span style='mso-element:field-separator'></span><![endif]--><span
-style='mso-no-proof:yes'>1</span><!--[if supportFields]><span style='mso-element:
-field-end'></span><![endif]-->: Ecore meta-model</p>
-
-<p>With this metamodel in mind, we can mention several interesting points:</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l3 level1 lfo4;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
-class=SpellE>ETypeParameter</span> correspond roughly to <span class=SpellE>TemplateParameter</span>
-in UML.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l3 level1 lfo4;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
-class=SpellE>EGenericType</span> has no direct mapping to UML</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l3 level1 lfo4;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
-class=SpellE>EGenericType</span> can be specified by setting its <span
-class=SpellE>eClassifier</span> or <span class=SpellE>eTypeParameter</span>
-property.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l3 level1 lfo4;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
-class=SpellE>EOperation</span> and <span class=SpellE>EClassifier</span> can be
-parameterized with <span class=SpellE>ETypeParameter</span>.<span
-style='mso-spacerun:yes'>   </span>Similarly, Operation and Classifier in UML
-can have a template signature with parameters.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l3 level1 lfo4;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
-class=SpellE>EClass</span> can have <span class=SpellE>eGenericSuperTypes</span>.<span
-style='mso-spacerun:yes'>  </span>That is, <span class=SpellE>supertypes</span>
-of some <span class=SpellE>EClass</span> can be represented by some <span
-class=SpellE>EGenericType</span>.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l3 level1 lfo4;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
-class=SpellE>ETypedElement</span> can have some <span class=SpellE>EGenericType</span>
-as a type.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l3 level1 lfo4;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
-class=SpellE>ETypeParameter</span> can have bounds which are of type <span
-class=SpellE>EGenericType</span>.</p>
-
-<p>If you wish to follow along with the examples and experiment on your own,
-you should first enable the showing of generics for your Ecore model.</p>
-
-<p>Showing of generics is enabled from the “Sample Ecore Editor” menu when the
-Ecore editor is being used:<span style='mso-spacerun:yes'>  </span>From the
-toolbar, select “<b style='mso-bidi-font-weight:normal'>Sample Ecore Editor
-&gt; Show Generics</b>”.</p>
-
-<p><span style='mso-tab-count:1'>         </span><!--[if gte vml 1]><v:shape
- id="_x0000_i1029" type="#_x0000_t75" style='width:110.25pt;height:114pt'>
- <v:imagedata src="article_files/image005.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=147 height=152
-src="article_files/image006.jpg" v:shapes="_x0000_i1029"><![endif]></p>
-
-<p>Further details on working with generics in EMF can be found at <a
-href="http://wiki.eclipse.org/EMF_2.3_Generics">http://wiki.eclipse.org/EMF_2.3_Generics</a>.</p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h2>Case Studies</h2>
-
-<p><img border=0 width=63 height=14 id="_x0000_i1030"
-src="../../../../images/tip.gif"><span style='mso-spacerun:yes'> </span>If you
-are familiar with generics in Java and you just want to discover how to create
-the equivalent UML representation, I would recommend starting with the Ecore
-representation of your generically specified model.<span
-style='mso-spacerun:yes'>   </span>Then, convert your Ecore model to UML.<span
-style='mso-spacerun:yes'>  </span>The resulting UML model will have expanded
-all bindings, and any required stereotypes will be applied.<span
-style='mso-spacerun:yes'>  </span>The reason for starting with Ecore is that it
-is much easier to specify generics using Ecore and requires fewer constructs.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l10 level1 lfo6;
-tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
-Arial'><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>
-</span></span></span><![endif]>In your development environment, ensure you have
-the UML examples plug-ins installed.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l10 level1 lfo6;
-tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
-Arial'><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>
-</span></span></span><![endif]>Create an Ecore model using generics in
-Ecore.<span style='mso-spacerun:yes'>  </span>The resulting Ecore model should
-closely match the Java representation.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l10 level1 lfo6;
-tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
-Arial'><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>
-</span></span></span><![endif]>From the sample Ecore editor, select the root
-package of your Ecore model.</p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l10 level1 lfo6;
-tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
-Arial'><span style='mso-list:Ignore'>4.<span style='font:7.0pt "Times New Roman"'>
-</span></span></span><![endif]>From the toolbar select “<b style='mso-bidi-font-weight:
-normal'>Sample Ecore Editor &gt; Convert to UML Model …”</b></p>
-
-<p><span style='mso-spacerun:yes'>  </span></p>
-
-<div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'>
-
-<h3 style='border:none;mso-border-bottom-alt:solid windowtext 1.5pt;padding:
-0in;mso-padding-alt:0in 0in 1.0pt 0in'>Baby steps: Simple type parameter</h3>
-
-</div>
-
-<p>Consider a simple case where we define a generic class with one property of
-some generic type.</p>
-
-<h4>Visually</h4>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75" style='width:132.75pt;
- height:60pt'>
- <v:imagedata src="article_files/image007.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=177 height=80
-src="article_files/image008.jpg" v:shapes="_x0000_i1031"><![endif]></p>
-
-<h4>Java</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- class=SpellE><span style='color:black'>MyClass</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObject</span></span><span
- style='color:black'>&nbsp;{</span></code><span style='font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- style='color:black'>E&nbsp;<span class=SpellE>getMyProperty</span>();</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>void&nbsp;</span></b><span class=SpellE><span
- style='color:black'>setMyProperty</span></span><span style='color:black'>(E&nbsp;value);</span></code><br>
- <code><span style='color:gray'>4</span>&nbsp;<span style='color:black'>}</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=598 valign=top style='width:448.8pt;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><code><span style='font-size:10.0pt;color:gray'>1</span></code><code><span
- style='font-size:10.0pt'>&nbsp;<b><span style='color:#7F0055'>public&nbsp;class&nbsp;</span></b><span
- class=SpellE><span style='color:black'>MyClassImpl</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObjectImpl</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>implements&nbsp;</span></b><span
- class=SpellE><span style='color:black'>MyClass</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;{</span></span></code><span
- style='font-size:10.0pt;font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>protected&nbsp;</span></b><span style='color:black'>E&nbsp;<span
- class=SpellE>myProperty</span>;</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:black'>}</span></code></span>
- </p>
- </td>
-<!-- end source code -->
- </tr>
-</table>
-
-<h4>Ecore</h4>
-
-<p>The Ecore representation would look like the following:</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
- mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
- .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=216 valign=top style='width:162.1pt;border:solid windowtext 1.0pt;
- mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75"
- style='width:138pt;height:80.25pt;mso-position-horizontal:left;
- mso-position-horizontal-relative:text;mso-position-vertical:top;
- mso-position-vertical-relative:line' o:allowoverlap="f">
- <v:imagedata src="article_files/image009.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img border=0 width=184 height=107
- src="article_files/image010.jpg" v:shapes="_x0000_i1032"><![endif]></p>
- </td>
- <td width=612 style='width:459.0pt;border:solid windowtext 1.0pt;border-left:
- none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
- padding:0in 5.4pt 0in 5.4pt'>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='mso-list:l9 level1 lfo9;tab-stops:list .5in'>We
- create a simple <span class=SpellE>EClass</span> with an <span
- class=SpellE>ETypeParameter</span> <i style='mso-bidi-font-style:normal'>E</i>.</li>
- <li class=MsoNormal style='mso-list:l9 level1 lfo9;tab-stops:list .5in'>We
- create an <span class=SpellE>EReference</span> whose type is an <span
- class=SpellE>EGenericType</span> with <span class=SpellE>eTypeParameter</span>
- set to <i style='mso-bidi-font-style:normal'>E</i>.</li>
- </ol>
- <p class=MsoNormal style='margin-left:.25in'><o:p>&nbsp;</o:p></p>
- </td>
- </tr>
-</table>
-
-<h4>UML</h4>
-
-<p>As you can see, the UML representation is more verbose than the Ecore
-representation. </p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l15 level1 lfo11;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>The
-UML representation creates a template by constructing a template signature
-owned by <span class=SpellE><i style='mso-bidi-font-style:normal'>MyClass</i></span>.<span
-style='mso-spacerun:yes'>  </span></p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l15 level1 lfo11;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>The
-signature in this case has one template parameter <i style='mso-bidi-font-style:
-normal'>E</i>.<span style='mso-spacerun:yes'>  </span></p>
-
-<p style='margin-left:.5in;text-indent:-.25in;mso-list:l15 level1 lfo11;
-tab-stops:list .5in'><![if !supportLists]><span style='font-family:"Courier New";
-mso-fareast-font-family:"Courier New"'><span style='mso-list:Ignore'>o<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>The
-template parameter directly owns another class <i style='mso-bidi-font-style:
-normal'>E</i> and uses that class as its <span class=SpellE>parametered</span>
-element.<span style='mso-spacerun:yes'>  </span></p>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1033" type="#_x0000_t75" style='width:294.75pt;
- height:90.75pt'>
- <v:imagedata src="article_files/image011.gif" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=393 height=121
-src="article_files/image011.gif" v:shapes="_x0000_i1033"><![endif]><span
-style='mso-spacerun:yes'>      </span></p>
-
-<p>The class <i style='mso-bidi-font-style:normal'>E</i> is the <span
-class=SpellE>parametered</span> element that will be the focus of bindings when
-we replace formal parameters with actual parameters.<span
-style='mso-spacerun:yes'>    </span>We can say that the template parameter
-‘exposes’ the <span class=SpellE>parametered</span> element (<i
-style='mso-bidi-font-style:normal'>E</i> in this case) as a formal
-parameter.<span style='mso-spacerun:yes'>  </span></p>
-
-<p>You may have also noticed the &lt;&lt;<span class=SpellE><i
-style='mso-bidi-font-style:normal'>eTypeParameter</i></span>&gt;&gt;
-stereotype.<span style='mso-spacerun:yes'>  </span>The &lt;&lt;<span
-class=SpellE><i style='mso-bidi-font-style:normal'>eTypeParameter</i></span>&gt;&gt;
-stereotype contributes the concept of “bounds” to UML template parameters.<span
-style='mso-spacerun:yes'>  </span>In Ecore, generic bound types allow one to
-place constraints on the types of allowable substitutions.<span
-style='mso-spacerun:yes'>   </span>For example, one could express that substitutions
-for the template parameter must extend some particular classifier such as <span
-class=SpellE><i style='mso-bidi-font-style:normal'>MyClass</i></span><i
-style='mso-bidi-font-style:normal'>&lt;? <span class=GramE>extends</span> <span
-class=SpellE>MyOtherClass</span>&gt;.</i><span style='mso-spacerun:yes'>  
-</span>This will be explored more in the following examples.</p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'>
-
-<h3 style='border:none;mso-border-bottom-alt:solid windowtext 1.5pt;padding:
-0in;mso-padding-alt:0in 0in 1.0pt 0in'>Baby steps: Creating a generic type</h3>
-
-</div>
-
-<p>In a little more realistic example, we might have something like the
-following.</p>
-
-<h4>Visually</h4>
-
-<p><span style='mso-bidi-font-size:14.0pt'><!--[if gte vml 1]><v:shape id="_x0000_i1034"
- type="#_x0000_t75" style='width:279pt;height:88.5pt'>
- <v:imagedata src="article_files/image012.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=372 height=118
-src="article_files/image013.jpg" v:shapes="_x0000_i1034"><![endif]></span><span
-style='mso-spacerun:yes'>  </span><span style='mso-bidi-font-size:14.0pt'><!--[if gte vml 1]><v:shape
- id="_x0000_i1035" type="#_x0000_t75" style='width:255.75pt;height:93pt'>
- <v:imagedata src="article_files/image014.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=341 height=124
-src="article_files/image015.jpg" v:shapes="_x0000_i1035"><![endif]></span></p>
-
-<h4><span lang=FR style='mso-ansi-language:FR'>Java<o:p></o:p></span></h4>
-
-<p class=MsoNormal><span lang=FR style='mso-ansi-language:FR'><o:p>&nbsp;</o:p></span></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><code><span style='font-size:10.0pt;color:gray'>1</span></code><code><span
- style='font-size:10.0pt'>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- style='color:black'>List&lt;E&gt;&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObject</span></span><span
- style='color:black'>&nbsp;{</span></span></code><span style='font-size:10.0pt;
- font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>void&nbsp;</span></b><span style='color:black'>add(E&nbsp;x);</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- class=SpellE><span style='color:black'>Iterator</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;<span class=SpellE>iterator</span>();</span></code><br>
- <code><span style='color:gray'>4</span>&nbsp;<span style='color:black'>}&nbsp;</span></code></span>
- </p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><code><span style='font-size:10.0pt;color:gray'>1</span></code><code><span
- style='font-size:10.0pt'>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- class=SpellE><span style='color:black'>Iterator</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObject</span></span><span
- style='color:black'>&nbsp;{</span></span></code><span style='font-size:10.0pt;
- font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- style='color:black'>E&nbsp;next();</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- class=SpellE><b><span style='color:#7F0055'>boolean</span></b></span><b><span
- style='color:#7F0055'>&nbsp;</span></b><span class=SpellE><span
- style='color:black'>hasNext</span></span><span style='color:black'>();</span></code><br>
- <code><span style='color:gray'>4</span>&nbsp;<span style='color:black'>}&nbsp;</span></code></span>
- </p>
- </td>
- </tr>
-</table>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h4>Ecore</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
- mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
- .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=216 valign=top style='width:162.1pt;border:solid windowtext 1.0pt;
- mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1036" type="#_x0000_t75"
- style='width:139.5pt;height:182.25pt'>
- <v:imagedata src="article_files/image016.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img border=0 width=186 height=243
- src="article_files/image017.jpg" v:shapes="_x0000_i1036"><![endif]></p>
- </td>
- <td width=612 style='width:459.0pt;border:solid windowtext 1.0pt;border-left:
- none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
- padding:0in 5.4pt 0in 5.4pt'>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='mso-list:l14 level1 lfo14;tab-stops:list .5in'>We
- create an <span class=SpellE>ETypeParameter</span> for the <span
- class=SpellE>EClass</span> <i style='mso-bidi-font-style:normal'>List</i></li>
- <li class=MsoNormal style='mso-list:l14 level1 lfo14;tab-stops:list .5in'>We
- create an <span class=SpellE>EOperation</span> <span class=GramE><i
- style='mso-bidi-font-style:normal'>add(</i></span><i style='mso-bidi-font-style:
- normal'>)</i> with a parameter <i style='mso-bidi-font-style:normal'>x</i>
- of <span class=SpellE>EGenericType</span> <i style='mso-bidi-font-style:
- normal'>E</i>.</li>
- <li class=MsoNormal style='mso-list:l14 level1 lfo14;tab-stops:list .5in'>We
- create another <span class=SpellE>EOperation</span> <span class=SpellE><span
- class=GramE><i style='mso-bidi-font-style:normal'>iterator</i></span></span><span
- class=GramE><i style='mso-bidi-font-style:normal'>(</i></span><i
- style='mso-bidi-font-style:normal'>) </i>of return type <span
- class=SpellE><i style='mso-bidi-font-style:normal'>Iterator</i></span><i
- style='mso-bidi-font-style:normal'>&lt;E&gt;.<span
- style='mso-spacerun:yes'>  </span></i>Here the return type is an <span
- class=SpellE>EGenericType</span> whose <span class=SpellE>eClassifier</span>
- is set to <span class=SpellE><i style='mso-bidi-font-style:normal'>Iterator</i></span><i
- style='mso-bidi-font-style:normal'>&lt;E&gt;.</i><span
- style='mso-spacerun:yes'>  </span>The <span class=SpellE>EGenericType</span>
- has an <span class=SpellE>eTypeAgrument</span> (<span class=SpellE>EGenericType</span>)
- whose <span class=SpellE>eTypeParameter</span> is set to <i
- style='mso-bidi-font-style:normal'>E</i>.</li>
- <li class=MsoNormal style='mso-list:l14 level1 lfo14;tab-stops:list .5in'>The
- <span class=SpellE><i style='mso-bidi-font-style:normal'>Iterator</i></span>
- is similarly specified.</li>
- </ol>
- </td>
- </tr>
-</table>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h4>UML</h4>
-
-<p>The main elements in the UML representation are: a class called <i
-style='mso-bidi-font-style:normal'>List</i>, a class called <span class=SpellE><i
-style='mso-bidi-font-style:normal'>Iterator</i></span> and a newly introduced
-class called <span class=SpellE><i style='mso-bidi-font-style:normal'>Iterator_E</i></span>,
-see below.</p>
-
-<h4><!--[if gte vml 1]><v:shape id="_x0000_i1037" type="#_x0000_t75" style='width:297pt;
- height:267.75pt'>
- <v:imagedata src="article_files/image018.gif" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=396 height=357
-src="article_files/image018.gif" v:shapes="_x0000_i1037"><![endif]></h4>
-
-<p>You might be scratching your head about <span class=SpellE><i
-style='mso-bidi-font-style:normal'>Iterator_E</i></span>.<span
-style='mso-spacerun:yes'>    </span>This construct is required because the
-class <i style='mso-bidi-font-style:normal'>List</i> has an operation that
-returns an <span class=SpellE>iterator</span> that is bound to the same element
-passed as an argument to “List” itself.<span style='mso-spacerun:yes'>  
-</span>UML does not allow us to use templates as the type of an <span
-class=GramE>element,</span> therefore we need to create a new bound class: <span
-class=SpellE><i style='mso-bidi-font-style:normal'>Iterator_E</i></span>.</p>
-
-<p>The template parameter substitution for <span class=SpellE><i
-style='mso-bidi-font-style:normal'>Iterator_<span class=GramE>E</span></i></span><span
-class=GramE><span style='mso-spacerun:yes'>  </span>above</span> has the
-following binding:</p>
-
-<p><span style='mso-spacerun:yes'> </span><!--[if gte vml 1]><v:shape id="_x0000_i1038"
- type="#_x0000_t75" style='width:288.75pt;height:24.75pt'>
- <v:imagedata src="article_files/image019.gif" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=385 height=33
-src="article_files/image019.gif" v:shapes="_x0000_i1038"><![endif]>.<span
-style='mso-spacerun:yes'>  </span></p>
-
-<p>The formal template parameter for <span class=SpellE><i style='mso-bidi-font-style:
-normal'>Iterator</i></span><i style='mso-bidi-font-style:normal'>&lt;E&gt;</i>
-is bound to the actual parameter <i style='mso-bidi-font-style:normal'>E</i> of
-<i style='mso-bidi-font-style:normal'>List</i>.</p>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'>
-
-<h3 style='border:none;mso-border-bottom-alt:solid windowtext 1.5pt;padding:
-0in;mso-padding-alt:0in 0in 1.0pt 0in'>Basics: Binding to a generic class</h3>
-
-</div>
-
-<p>Let’s put together some of the basic ideas we have already explored.<span
-style='mso-spacerun:yes'>  </span>In this example, <span class=SpellE><i
-style='mso-bidi-font-style:normal'>ArrayList</i></span><i style='mso-bidi-font-style:
-normal'>&lt;E&gt;</i> is a generic array list whose super type is the generic <i
-style='mso-bidi-font-style:normal'>List&lt;E&gt;.</i><span
-style='mso-spacerun:yes'>  </span>In UML we require the creation of the
-concrete type <span class=SpellE><i style='mso-bidi-font-style:normal'>List_E</i></span>
-with its bindings set up.<span style='mso-spacerun:yes'>  </span>In addition, <span
-class=SpellE><i style='mso-bidi-font-style:normal'>TestClass</i></span> has a
-property which is an <span class=SpellE><i style='mso-bidi-font-style:normal'>ArrayList</i></span>
-of Cars.<span style='mso-spacerun:yes'>   </span>Again, we create a new class <span
-class=SpellE><i style='mso-bidi-font-style:normal'>ArrayList</i>_<i
-style='mso-bidi-font-style:normal'>Car</i></span> with bindings set up to the
-class <i style='mso-bidi-font-style:normal'>Car</i>.</p>
-
-<h4>Visually</h4>
-
-<h4><span style='font-weight:normal'><!--[if gte vml 1]><v:shape id="_x0000_i1039"
- type="#_x0000_t75" style='width:740.25pt;height:221.25pt'>
- <v:imagedata src="article_files/image020.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=987 height=295
-src="article_files/image021.jpg" v:shapes="_x0000_i1039"><![endif]></span></h4>
-
-<h4>Java</h4>
-
-<p>The <span class=SpellE><i style='mso-bidi-font-style:normal'>TestClass</i></span>
-class:</p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><code><span style='font-size:10.0pt;color:gray'>1</span></code><code><span
- style='font-size:10.0pt'>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- class=SpellE><span style='color:black'>TestClass</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObject</span></span><span
- style='color:black'>&nbsp;{</span></span></code><span style='font-size:10.0pt;
- font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- class=SpellE><span style='color:black'>ArrayList</span></span><span
- style='color:black'>&lt;Car&gt;&nbsp;<span class=SpellE>getMyCars</span>();</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:black'>}&nbsp;</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;class&nbsp;</span></b><span
- class=SpellE><span style='color:black'>TestClassImpl</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObjectImpl</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>implements&nbsp;</span></b><span
- class=SpellE><span style='color:black'>TestClass</span></span><span
- style='color:black'>&nbsp;{</span></code><span style='font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>protected&nbsp;</span></b><span class=SpellE><span
- style='color:black'>ArrayList</span></span><span style='color:black'>&lt;Car&gt;&nbsp;<span
- class=SpellE>myCars</span>;</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:black'>}</span></code></span>
- </p>
- </td>
-<!-- end source code -->
- </tr>
-<!-- start Java2Html link -->
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<p>The <span class=SpellE><i style='mso-bidi-font-style:normal'>ArrayList</i></span>
-class:</p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- class=SpellE><span style='color:black'>ArrayList</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- style='color:black'>List&lt;E&gt;&nbsp;{</span></code><span style='font-family:
- "Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:black'>}&nbsp;</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;class&nbsp;</span></b><span
- class=SpellE><span style='color:black'>ArrayListImpl</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>ListImpl</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;</span><b><span style='color:#7F0055'>implements&nbsp;</span></b><span
- class=SpellE><span style='color:black'>ArrayList</span></span><span
- style='color:black'>&lt;E&gt;&nbsp;{</span></code><span style='font-family:
- "Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>protected&nbsp;</span></b><span class=SpellE><span
- style='color:black'>ArrayListImpl</span></span><span style='color:black'>()&nbsp;{</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>super</span></b><span style='color:black'>();</span></code><br>
- <code><span style='color:gray'>4</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- style='color:black'>}</span></code><br>
- <code><span style='color:gray'>5</span>&nbsp;<span style='color:black'>}&nbsp;</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h4>Ecore</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1040" type="#_x0000_t75"
- style='width:137.25pt;height:101.25pt' o:bordertopcolor="this"
- o:borderleftcolor="this" o:borderbottomcolor="this" o:borderrightcolor="this">
- <v:imagedata src="article_files/image022.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=183 height=135
-src="article_files/image023.jpg" v:shapes="_x0000_i1040"><![endif]><span
-style='mso-spacerun:yes'>      </span><!--[if gte vml 1]><v:shape id="_x0000_i1041"
- type="#_x0000_t75" style='width:127.5pt;height:76.5pt' o:bordertopcolor="this"
- o:borderleftcolor="this" o:borderbottomcolor="this" o:borderrightcolor="this">
- <v:imagedata src="article_files/image024.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=170 height=102
-src="article_files/image025.jpg" v:shapes="_x0000_i1041"><![endif]><span
-style='mso-spacerun:yes'>        </span><!--[if gte vml 1]><v:shape id="_x0000_i1042"
- type="#_x0000_t75" style='width:124.5pt;height:51pt' o:bordertopcolor="this"
- o:borderleftcolor="this" o:borderbottomcolor="this" o:borderrightcolor="this">
- <v:imagedata src="article_files/image026.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=166 height=68
-src="article_files/image027.jpg" v:shapes="_x0000_i1042"><![endif]><span
-style='mso-spacerun:yes'>        </span><!--[if gte vml 1]><v:shape id="_x0000_i1043"
- type="#_x0000_t75" style='width:146.25pt;height:53.25pt' o:bordertopcolor="this"
- o:borderleftcolor="this" o:borderbottomcolor="this" o:borderrightcolor="this">
- <v:imagedata src="article_files/image028.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=195 height=71
-src="article_files/image029.jpg" v:shapes="_x0000_i1043"><![endif]><span
-style='mso-spacerun:yes'>     </span><!--[if gte vml 1]><v:shape id="_x0000_i1044"
- type="#_x0000_t75" style='width:69pt;height:14.25pt' o:bordertopcolor="this"
- o:borderleftcolor="this" o:borderbottomcolor="this" o:borderrightcolor="this">
- <v:imagedata src="article_files/image030.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=92 height=19
-src="article_files/image031.jpg" v:shapes="_x0000_i1044"><![endif]></p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h4>UML</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1045" type="#_x0000_t75"
- style='width:279.75pt;height:78pt' o:bordertopcolor="this" o:borderleftcolor="this"
- o:borderbottomcolor="this" o:borderrightcolor="this">
- <v:imagedata src="article_files/image032.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=373 height=104
-src="article_files/image033.jpg" v:shapes="_x0000_i1045"><![endif]><span
-style='mso-spacerun:yes'>               </span><!--[if gte vml 1]><v:shape
- id="_x0000_i1046" type="#_x0000_t75" style='width:280.5pt;height:65.25pt'
- o:bordertopcolor="this" o:borderleftcolor="this" o:borderbottomcolor="this"
- o:borderrightcolor="this">
- <v:imagedata src="article_files/image034.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=374 height=87
-src="article_files/image035.jpg" v:shapes="_x0000_i1046"><![endif]></p>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1047" type="#_x0000_t75"
- style='width:281.25pt;height:102pt'>
- <v:imagedata src="article_files/image036.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=375 height=136
-src="article_files/image037.jpg" v:shapes="_x0000_i1047"><![endif]><span
-style='mso-spacerun:yes'>                </span><!--[if gte vml 1]><v:shape
- id="_x0000_i1048" type="#_x0000_t75" style='width:273pt;height:65.25pt'>
- <v:imagedata src="article_files/image038.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=364 height=87
-src="article_files/image039.jpg" v:shapes="_x0000_i1048"><![endif]><span
-style='mso-spacerun:yes'>     </span><!--[if gte vml 1]><v:shape id="_x0000_i1049"
- type="#_x0000_t75" style='width:118.5pt;height:15pt' o:bordertopcolor="this"
- o:borderleftcolor="this" o:borderbottomcolor="this" o:borderrightcolor="this">
- <v:imagedata src="article_files/image040.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=158 height=20
-src="article_files/image041.jpg" v:shapes="_x0000_i1049"><![endif]></p>
-
-<p><span class=SpellE><i style='mso-bidi-font-style:normal'>ArrayList</i></span>
-is the specialization of the concrete <span class=SpellE><i style='mso-bidi-font-style:
-normal'>List_E</i></span> class where the formal template parameter <i
-style='mso-bidi-font-style:normal'>E</i> of <i style='mso-bidi-font-style:normal'>List</i>
-is substituted for the actual <span class=SpellE>parameterable</span> element <i
-style='mso-bidi-font-style:normal'>E</i> of <span class=SpellE><i
-style='mso-bidi-font-style:normal'>ArrayList</i></span>.<span
-style='mso-spacerun:yes'>  </span>These are the substitutions for the binding
-of <span class=SpellE><i style='mso-bidi-font-style:normal'>List_E</i></span>: </p>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1050" type="#_x0000_t75" style='width:292.5pt;
- height:28.5pt'>
- <v:imagedata src="article_files/image042.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=390 height=38
-src="article_files/image043.jpg" v:shapes="_x0000_i1050"><![endif]></p>
-
-<p>The class <span class=SpellE><i style='mso-bidi-font-style:normal'>ArrayList_Car</i></span>
-substitutes the actual parameter Car for the exposed template parameter of <i
-style='mso-bidi-font-style:normal'>E</i> of <span class=SpellE><i
-style='mso-bidi-font-style:normal'>ArrayList</i></span>.<span
-style='mso-spacerun:yes'>  </span>These are the substitutions for the <span
-class=SpellE><i style='mso-bidi-font-style:normal'>ArrayList_Car</i></span>:</p>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1051" type="#_x0000_t75" style='width:289.5pt;
- height:33pt'>
- <v:imagedata src="article_files/image044.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=386 height=44
-src="article_files/image045.jpg" v:shapes="_x0000_i1051"><![endif]></p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'>
-
-<h3 style='border:none;mso-border-bottom-alt:solid windowtext 1.5pt;padding:
-0in;mso-padding-alt:0in 0in 1.0pt 0in'>Basics: Operation with template
-parameter </h3>
-
-</div>
-
-<p>In UML, operations are <span class=SpellE>templateable</span> elements.<span
-style='mso-spacerun:yes'>   </span>In this next example we will have a look at
-adding template parameters to an operation.<span style='mso-spacerun:yes'> 
-</span>The operation will have a template parameter <i style='mso-bidi-font-style:
-normal'>T</i>, and will return elements of type <i style='mso-bidi-font-style:
-normal'>T</i>.<span style='mso-spacerun:yes'>  </span>The operation will also
-have a parameter <i style='mso-bidi-font-style:normal'>p1</i> of type <i
-style='mso-bidi-font-style:normal'>T</i>.</p>
-
-<h4>Visually</h4>
-
-<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1052" type="#_x0000_t75"
- style='width:226.5pt;height:78pt'>
- <v:imagedata src="article_files/image046.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=302 height=104
-src="article_files/image047.jpg" v:shapes="_x0000_i1052"><![endif]></p>
-
-<h4>Java</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- class=SpellE><span style='color:black'>MyClass</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObject</span></span><span
- style='color:black'>&nbsp;{</span></code><span style='font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- style='color:black'>&lt;T&gt;&nbsp;T&nbsp;<span class=SpellE>someOperation</span>(T&nbsp;p1);</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:black'>}</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><code><span style='font-size:10.0pt;color:gray'>1</span></code><code><span
- style='font-size:10.0pt'>&nbsp;<b><span style='color:#7F0055'>public&nbsp;class&nbsp;</span></b><span
- class=SpellE><span style='color:black'>MyClassImpl</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObjectImpl</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>implements&nbsp;</span></b><span
- class=SpellE><span style='color:black'>MyClass</span></span><span
- style='color:black'>&nbsp;{</span></span></code><span style='font-size:10.0pt;
- font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>public&nbsp;</span></b><span style='color:black'>&lt;T&gt;&nbsp;T&nbsp;<span
- class=SpellE>someOperation</span>(T&nbsp;p1)&nbsp;{</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
- style='color:#3F7F5F'>//...</span></code><br>
- <code><span style='color:gray'>4</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- style='color:black'>}</span></code><br>
- <code><span style='color:gray'>5</span>&nbsp;<span style='color:black'>}</span></code></span><tt><span
- style='font-size:10.0pt'><o:p></o:p></span></tt></p>
- </td>
- </tr>
-</table>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h4>Ecore</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
- mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
- .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=240 valign=top style='width:180.1pt;border:solid windowtext 1.0pt;
- mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1053" type="#_x0000_t75"
- style='width:153pt;height:79.5pt'>
- <v:imagedata src="article_files/image048.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img border=0 width=204 height=106
- src="article_files/image049.jpg" v:shapes="_x0000_i1053"><![endif]></p>
- </td>
- <td width=767 style='width:575.1pt;border:solid windowtext 1.0pt;border-left:
- none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
- padding:0in 5.4pt 0in 5.4pt'>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='mso-list:l13 level1 lfo17;tab-stops:list .5in'><span
- class=SpellE><i style='mso-bidi-font-style:normal'>MyClass</i></span>
- has an <span class=SpellE>EOperation</span> called <span class=SpellE><i
- style='mso-bidi-font-style:normal'>someOperation</i></span>.</li>
- <li class=MsoNormal style='mso-list:l13 level1 lfo17;tab-stops:list .5in'>The
- <span class=SpellE>EOperation</span> <span class=SpellE>someOperation</span>
- has an <span class=SpellE>ETypeParameter</span> <i style='mso-bidi-font-style:
- normal'>T</i>.</li>
- <li class=MsoNormal style='mso-list:l13 level1 lfo17;tab-stops:list .5in'>The
- <span class=SpellE>EOperation</span> has a parameter <i
- style='mso-bidi-font-style:normal'>p1</i> whose type is an <span
- class=SpellE>EGenericType</span> whose <span class=SpellE>eTypeParameter</span>
- is <i style='mso-bidi-font-style:normal'>T</i>.</li>
- <li class=MsoNormal style='mso-list:l13 level1 lfo17;tab-stops:list .5in'>The
- <span class=SpellE>EOperation</span><span style='mso-spacerun:yes'> 
- </span>has an <span class=SpellE>EGenericType</span> as its type, whose <span
- class=SpellE>eTypeParameter</span> is <i style='mso-bidi-font-style:
- normal'>T</i>.</li>
- </ol>
- </td>
- </tr>
-</table>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h4>UML</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial Unicode MS"'><!--[if gte vml 1]><v:shape
- id="_x0000_i1054" type="#_x0000_t75" style='width:311.25pt;height:90.75pt'>
- <v:imagedata src="article_files/image050.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=415 height=121
-src="article_files/image051.jpg" v:shapes="_x0000_i1054"><![endif]></span></p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'>
-
-<h3 style='border:none;mso-border-bottom-alt:solid windowtext 1.5pt;padding:
-0in;mso-padding-alt:0in 0in 1.0pt 0in'>Basics: Bound operation parameters </h3>
-
-</div>
-
-<p>In this example we show an operation with two parameters that are lists of
-cars.<span style='mso-spacerun:yes'>  </span>As you might have guessed, the UML
-version will require an extra bound class.</p>
-
-<h4>Visually</h4>
-
-<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1055" type="#_x0000_t75"
- style='width:450.75pt;height:255pt'>
- <v:imagedata src="article_files/image052.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=601 height=340
-src="article_files/image053.jpg" v:shapes="_x0000_i1055"><![endif]></p>
-
-<h4>Java</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- style='color:black'>MyClass2&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObject</span></span><span
- style='color:black'>&nbsp;{</span></code><span style='font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>void&nbsp;</span></b><span style='color:black'>op1(List&lt;Car&gt;&nbsp;p1,&nbsp;List&lt;Car&gt;&nbsp;p2);</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:black'>}</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><code><span style='font-size:10.0pt;color:gray'>1</span></code><code><span
- style='font-size:10.0pt'>&nbsp;<b><span style='color:#7F0055'>public&nbsp;class&nbsp;</span></b><span
- style='color:black'>MyClass2Impl&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObjectImpl</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>implements&nbsp;</span></b><span
- style='color:black'>MyClass2&nbsp;{</span></span></code><span
- style='font-size:10.0pt;font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>public&nbsp;void&nbsp;</span></b><span
- style='color:black'>op1(List&lt;Car&gt;&nbsp;p1,&nbsp;List&lt;Car&gt;&nbsp;p2)&nbsp;{</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;&nbsp;&nbsp;</span><span
- style='color:#3F7F5F'>//...&nbsp;&nbsp;&nbsp;&nbsp;</span></code><br>
- <code><span style='color:gray'>4</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><span
- style='color:black'>}</span></code><br>
- <code><span style='color:gray'>5</span>&nbsp;<span style='color:black'>}</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<h4>Ecore</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
- mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
- .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=228 valign=top style='width:171.1pt;border:solid windowtext 1.0pt;
- mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1056" type="#_x0000_t75"
- style='width:154.5pt;height:102.75pt'>
- <v:imagedata src="article_files/image054.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img border=0 width=206 height=137
- src="article_files/image055.jpg" v:shapes="_x0000_i1056"><![endif]></p>
- </td>
- <td width=779 style='width:584.1pt;border:solid windowtext 1.0pt;border-left:
- none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
- padding:0in 5.4pt 0in 5.4pt'>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='mso-list:l0 level1 lfo20;tab-stops:list .5in'>We
- create an operation with parameter <i style='mso-bidi-font-style:normal'>p1</i>.</li>
- <li class=MsoNormal style='mso-list:l0 level1 lfo20;tab-stops:list .5in'>Parameter<i
- style='mso-bidi-font-style:normal'> p1</i> has as its type an <span
- class=SpellE>EGenericType</span> whose <span class=SpellE>eClassifier</span>
- is <i style='mso-bidi-font-style:normal'>List&lt;E&gt;.</i></li>
- <li class=MsoNormal style='mso-list:l0 level1 lfo20;tab-stops:list .5in'>The
- <span class=SpellE>EGenericType</span> of <i style='mso-bidi-font-style:
- normal'>p1</i> has a type argument (<span class=SpellE>EGenericType</span>)
- whose <span class=SpellE>eClassifier</span> is set to <i
- style='mso-bidi-font-style:normal'>Car</i>.</li>
- </ol>
- </td>
- </tr>
-</table>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h4>UML</h4>
-
-<h4><!--[if gte vml 1]><v:shape id="_x0000_i1057" type="#_x0000_t75" style='width:5in;
- height:102.75pt'>
- <v:imagedata src="article_files/image056.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=480 height=137
-src="article_files/image057.jpg" v:shapes="_x0000_i1057"><![endif]></h4>
-
-<p>The only important thing to point out here is that the bound <span
-class=SpellE><i style='mso-bidi-font-style:normal'>List_Car</i></span> is not
-duplicated in the UML representation. The bound <span class=SpellE><i
-style='mso-bidi-font-style:normal'>List_Car</i></span> is used in the context
-of MyClass2.</p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'>
-
-<h3 style='border:none;mso-border-bottom-alt:solid windowtext 1.5pt;padding:
-0in;mso-padding-alt:0in 0in 1.0pt 0in'>Advanced: Wildcards (specifying upper
-and lower bounds on parameters)</h3>
-
-</div>
-
-<p>It is possible to specify wildcards when using parameters in Ecore and
-Java.<span style='mso-spacerun:yes'>   </span>Wildcards are represented <span
-class=GramE>by <b style='mso-bidi-font-weight:normal'>?</b>.</span><span
-style='mso-spacerun:yes'>   </span><span class=GramE>The <b style='mso-bidi-font-weight:
-normal'>?</b></span><b style='mso-bidi-font-weight:normal'> </b><span
-class=GramE>stands</span> for an unknown type.<span style='mso-spacerun:yes'> 
-</span>It is possible to specify upper and lower bounds on such wildcards.<span
-style='mso-spacerun:yes'>   </span>When we talk about bounds, we refer to the
-ability to specify that bindings to a generic type parameter must either be the
-super type of some classifier or extend some classifier.<span
-style='mso-spacerun:yes'>   </span>In this way, tighter restrictions can be
-placed on acceptable bindings.<span style='mso-spacerun:yes'>  </span>In
-addition to tightening restrictions, upper bounds (extends) are particularly
-useful for ensuring that substitutions will have features that are required by
-the template for its behavior.<span style='mso-spacerun:yes'>  </span>For
-example, one might have <i style='mso-bidi-font-style:normal'>List&lt;E extends
-Comparable&gt;</i> because the list actually needs to be able to compare E’s
-using the <span class=SpellE><i style='mso-bidi-font-style:normal'>Comparable::<span
-class=GramE>compareTo</span></i></span><span class=GramE><i style='mso-bidi-font-style:
-normal'>(</i></span><i style='mso-bidi-font-style:normal'>…)</i> operation.</p>
-
-<h4>Visually</h4>
-
-<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1058" type="#_x0000_t75"
- style='width:471pt;height:405.75pt'>
- <v:imagedata src="article_files/image058.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=628 height=541
-src="article_files/image059.jpg" v:shapes="_x0000_i1058"><![endif]></p>
-
-<h4>Java</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;class&nbsp;</span></b><span
- style='color:black'>MyClass3Impl&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- class=SpellE><span style='color:black'>EObjectImpl</span></span><span
- style='color:black'>&nbsp;</span><b><span style='color:#7F0055'>implements&nbsp;</span></b><span
- style='color:black'>MyClass3&nbsp;{</span></code><span style='font-family:
- "Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>protected&nbsp;</span></b><span style='color:black'>List&lt;?&nbsp;</span><b><span
- style='color:#7F0055'>extends&nbsp;</span></b><span style='color:black'>Car&gt;&nbsp;<span
- class=SpellE>someReference</span>;</span></code><br>
- <code><span style='color:gray'>3</span>&nbsp;<span style='color:white'>&nbsp;&nbsp;</span><b><span
- style='color:#7F0055'>protected&nbsp;</span></b><span style='color:black'>List&lt;?&nbsp;</span><b><span
- style='color:#7F0055'>super&nbsp;</span></b><span style='color:black'>Car&gt;&nbsp;<span
- class=SpellE>anotherReference</span>;</span></code><br>
- <code><span style='color:gray'>4</span>&nbsp;<span style='color:black'>}</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<h4>Ecore</h4>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
- mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
- .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=276 valign=top style='width:207.1pt;border:solid windowtext 1.0pt;
- mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1059" type="#_x0000_t75"
- style='width:194.25pt;height:114.75pt'>
- <v:imagedata src="article_files/image060.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img border=0 width=259 height=153
- src="article_files/image061.jpg" v:shapes="_x0000_i1059"><![endif]></p>
- </td>
- <td width=576 style='width:6.0in;border:solid windowtext 1.0pt;border-left:
- none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
- padding:0in 5.4pt 0in 5.4pt'>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='mso-list:l5 level1 lfo23;tab-stops:list .5in'>We
- create an <span class=SpellE>EReference</span> for <span class=SpellE><i
- style='mso-bidi-font-style:normal'>someReference</i></span><i
- style='mso-bidi-font-style:normal'>.</i></li>
- <li class=MsoNormal style='mso-list:l5 level1 lfo23;tab-stops:list .5in'>We
- create an <span class=SpellE>EGenericType</span> for the type of <span
- class=SpellE><i style='mso-bidi-font-style:normal'>someReference</i></span>
- whose <span class=SpellE>eClassifier</span> is set to <i
- style='mso-bidi-font-style:normal'>List&lt;E&gt;</i></li>
- <li class=MsoNormal style='mso-list:l5 level1 lfo23;tab-stops:list .5in'>The
- generic type of <span class=SpellE><i style='mso-bidi-font-style:normal'>someReference</i></span>
- has an <span class=SpellE>eTypeArgument</span> (an <span class=SpellE>EGenericType</span>)
- whose upper bound is set to <i style='mso-bidi-font-style:normal'>Car</i>.</li>
- </ol>
- </td>
- </tr>
-</table>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h4>UML</h4>
-
-<h4><span style='font-weight:normal'><!--[if gte vml 1]><v:shape id="_x0000_i1060"
- type="#_x0000_t75" style='width:351pt;height:141pt'>
- <v:imagedata src="article_files/image062.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=468 height=188
-src="article_files/image063.jpg" v:shapes="_x0000_i1060"><![endif]><o:p></o:p></span></h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p>If we focus on the “<span class=SpellE>someReference</span>” property, we
-see that we need to create a new class called “<span class=SpellE>Wildcard_extends_Car</span>”.<span
-style='mso-spacerun:yes'>   </span>This particular class has its stereotype
-property for the upper bound set to <i style='mso-bidi-font-style:normal'>Car</i>:
-</p>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1061" type="#_x0000_t75" style='width:204.75pt;
- height:36pt'>
- <v:imagedata src="article_files/image064.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=273 height=48
-src="article_files/image065.jpg" v:shapes="_x0000_i1061"><![endif]></p>
-
-<p><span style='mso-spacerun:yes'> </span>Next, we see that another new class
-is created in order to bind the formal parameter of the generic <i
-style='mso-bidi-font-style:normal'>List</i> to classes of <span class=SpellE><i
-style='mso-bidi-font-style:normal'>Wildcard_extends_Car</i></span><i
-style='mso-bidi-font-style:normal'>:<o:p></o:p></i></p>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1062" type="#_x0000_t75" style='width:310.5pt;
- height:39pt'>
- <v:imagedata src="article_files/image066.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=414 height=52
-src="article_files/image067.jpg" v:shapes="_x0000_i1062"><![endif]></p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'>
-
-<h3 style='border:none;mso-border-bottom-alt:solid windowtext 1.5pt;padding:
-0in;mso-padding-alt:0in 0in 1.0pt 0in'>Advanced: Type parameters that extend
-multiple classifiers</h3>
-
-</div>
-
-<p>Type parameters in Ecore can also have bounds and in such cases it is
-possible to specify multiple upper bounds. </p>
-
-<h4>Visually</h4>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1063" type="#_x0000_t75" style='width:185.25pt;
- height:1in'>
- <v:imagedata src="article_files/image068.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=247 height=96
-src="article_files/image069.jpg" v:shapes="_x0000_i1063"><![endif]></p>
-
-<p>The interesting part is the bounds information stored in the stereotype (see
-below).</p>
-
-<h4>Java</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p><code><span style='color:gray'>1</span>&nbsp;<b><span style='color:#7F0055'>public&nbsp;interface&nbsp;</span></b><span
- style='color:black'>MyClass4&lt;P1&nbsp;</span><b><span style='color:#7F0055'>extends&nbsp;</span></b><span
- style='color:black'>A&nbsp;&amp;&nbsp;B&gt;&nbsp;</span><b><span
- style='color:#7F0055'>extends&nbsp;</span></b><span class=SpellE><span
- style='color:black'>EObject</span></span><span style='color:black'>&nbsp;{</span></code><span
- style='font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:black'>}</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
- style='background:#F3F3F3;border-collapse:collapse;mso-yfti-tbllook:480;
- mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><code><span style='font-size:10.0pt;color:gray'>1</span></code><code><span
- style='font-size:10.0pt'>&nbsp;<b><span style='color:#7F0055'>public&nbsp;class&nbsp;</span></b><span
- style='color:black'>MyClass4Impl&lt;P1&nbsp;</span><b><span style='color:
- #7F0055'>extends&nbsp;</span></b><span style='color:black'>A&nbsp;&amp;&nbsp;B&gt;&nbsp;</span><b><span
- style='color:#7F0055'>extends&nbsp;</span></b><span class=SpellE><span
- style='color:black'>EObjectImpl</span></span><span style='color:black'>&nbsp;</span><b><span
- style='color:#7F0055'>implements&nbsp;</span></b><span style='color:black'>MyClass4&lt;P1&gt;&nbsp;{</span></span></code><span
- style='font-size:10.0pt;font-family:"Courier New"'><br>
- <code><span style='color:gray'>2</span>&nbsp;<span style='color:black'>}&nbsp;</span></code></span></p>
- </td>
- </tr>
-</table>
-
-<h4>Ecore</h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
- mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
- .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
- <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
- <td width=240 valign=top style='width:180.1pt;border:solid windowtext 1.0pt;
- mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1064" type="#_x0000_t75"
- style='width:145.5pt;height:51pt'>
- <v:imagedata src="article_files/image070.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img border=0 width=194 height=68
- src="article_files/image071.jpg" v:shapes="_x0000_i1064"><![endif]></p>
- </td>
- <td width=767 valign=top style='width:575.1pt;border:solid windowtext 1.0pt;
- border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
- solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='mso-list:l7 level1 lfo26;tab-stops:list .5in'><i
- style='mso-bidi-font-style:normal'>MyClass4</i> has an <span
- class=SpellE>ETypeParameter</span> <i style='mso-bidi-font-style:normal'>P1</i>.</li>
- <li class=MsoNormal style='mso-list:l7 level1 lfo26;tab-stops:list .5in'>The
- <span class=SpellE>ETypeParameter</span> of <i style='mso-bidi-font-style:
- normal'>P1</i> has its <span class=SpellE>eBounds</span> set to an <span
- class=SpellE>EGenericType</span> whose <span class=SpellE>eClassifer</span>
- is <i style='mso-bidi-font-style:normal'>A</i> and another <span
- class=SpellE>EGenericType</span> whose <span class=SpellE>eClassifier</span>
- is set to <i style='mso-bidi-font-style:normal'>B</i>.</li>
- </ol>
- </td>
- </tr>
-</table>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h4>UML</h4>
-
-<h4><!--[if gte vml 1]><v:shape id="_x0000_i1065" type="#_x0000_t75" style='width:278.25pt;
- height:52.5pt'>
- <v:imagedata src="article_files/image072.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=371 height=70
-src="article_files/image073.jpg" v:shapes="_x0000_i1065"><![endif]><span
-style='font-weight:normal'><o:p></o:p></span></h4>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<p>For the template parameter <i style='mso-bidi-font-style:normal'>P1</i> we
-have to specify the bounds using the stereotype since multiple bounds on such
-parameters are not possible using UML:</p>
-
-<p><!--[if gte vml 1]><v:shape id="_x0000_i1066" type="#_x0000_t75" style='width:312pt;
- height:36pt'>
- <v:imagedata src="article_files/image074.png" o:title=""/>
-</v:shape><![endif]--><![if !vml]><img border=0 width=416 height=48
-src="article_files/image075.jpg" v:shapes="_x0000_i1066"><![endif]>.</p>
-
-<p class=MsoNormal><o:p>&nbsp;</o:p></p>
-
-<h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Conclusion</h2>
-
-<p>Congratulations! You’ve made it this far, if you’ve followed through the
-examples, you will no doubt have discovered that the UML representation is
-verbose and intricate in comparison to Ecore or Java.<span
-style='mso-spacerun:yes'>   </span>Hopefully, with a bit of practice, the UML
-representation will become second nature.<span style='mso-spacerun:yes'>  
-</span>This article really only scratches the surface of the intricate possible
-scenarios one may create when working with generics.<span
-style='mso-spacerun:yes'>   </span>By using templates in UML you can express
-and communicate your ideas more accurately, and code generated via conversion
-through Ecore will result in generically specified Java.</p>
-
-<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>For
-more information on UML2, visit the <a
-href="http://www.eclipse.org/modeling/mdt/?project=uml2">home page</a> or join
-the <a href="news://news.eclipse.org/eclipse.modeling.mdt.uml2">newsgroup</a>.</p>
-
-<p><o:p>&nbsp;</o:p></p>
-
-<h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Acknowledgements</h2>
-
-<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Thanks
-to Kenn Hussey, Ed <span class=SpellE>Merks</span> and Christian <span
-class=SpellE>Damus</span> for their thorough and careful reviews.</p>
-
-<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><o:p>&nbsp;</o:p></p>
-
-<h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>References</h2>
-
-<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
-style='mso-spacerun:yes'> </span><span class=GramE>[1] Unified Modeling Language:
-Superstructure, version 2.1.1; formal/2007-02-05.</span> <span class=GramE>OMG.</span></p>
-
-<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
-style='mso-spacerun:yes'> </span>[2] RTF Issue <a
-href="http://www.omg.org/issues/uml2-rtf.open.html#Issue9398">9398</a></p>
-
-<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><o:p>&nbsp;</o:p></p>
-
-<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
-style='font-size:7.5pt'>Java and all Java-based trademarks and logos are
-trademarks or registered trademarks of Sun Microsystems, Inc. in the </span><st1:country-region><st1:place><span
- style='font-size:7.5pt'>United States</span></st1:place></st1:country-region><span
-style='font-size:7.5pt'>, other countries, or both.</span></p>
-
-</div>
-
-</body>
-
-</html>

Back to the top