diff options
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.html | 2616 |
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'> </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> </p> - -<h1 align=center style='text-align:center'>Defining Generics with UML Templates</h1> - -<h1 align=center style='text-align:center'><o:p> </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> </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> </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> </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> </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"'> </span></span></span><![endif]>Multiple -bounds on <span class=SpellE>ETypeParameters</span>.<span -style='mso-spacerun:yes'> </span>The <<<span class=SpellE>eTypeParameter</span>>> -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"'> </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 <<<span class=SpellE>eGenericType</span>>> 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"'> </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 <<<span class=SpellE>eGenericType</span>>> 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> </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> </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"'> </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"'> </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"'> </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"'> </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"'> </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"'> </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"'> </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 -> 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> </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 > 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> </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> <b><span style='color:#7F0055'>public interface </span></b><span - class=SpellE><span style='color:black'>MyClass</span></span><span - style='color:black'><E> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObject</span></span><span - style='color:black'> {</span></code><span style='font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><span - style='color:black'>E <span class=SpellE>getMyProperty</span>();</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>void </span></b><span class=SpellE><span - style='color:black'>setMyProperty</span></span><span style='color:black'>(E value);</span></code><br> - <code><span style='color:gray'>4</span> <span style='color:black'>}</span></code></span></p> - </td> - </tr> -</table> - -<p><o:p> </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'> <b><span style='color:#7F0055'>public class </span></b><span - class=SpellE><span style='color:black'>MyClassImpl</span></span><span - style='color:black'><E> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObjectImpl</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>implements </span></b><span - class=SpellE><span style='color:black'>MyClass</span></span><span - style='color:black'><E> {</span></span></code><span - style='font-size:10.0pt;font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>protected </span></b><span style='color:black'>E <span - class=SpellE>myProperty</span>;</span></code><br> - <code><span style='color:gray'>3</span> <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> </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"'> </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"'> </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"'> </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 <<<span class=SpellE><i -style='mso-bidi-font-style:normal'>eTypeParameter</i></span>>> -stereotype.<span style='mso-spacerun:yes'> </span>The <<<span -class=SpellE><i style='mso-bidi-font-style:normal'>eTypeParameter</i></span>>> -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'><? <span class=GramE>extends</span> <span -class=SpellE>MyOtherClass</span>>.</i><span style='mso-spacerun:yes'> -</span>This will be explored more in the following examples.</p> - -<p><o:p> </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> </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'> <b><span style='color:#7F0055'>public interface </span></b><span - style='color:black'>List<E> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObject</span></span><span - style='color:black'> {</span></span></code><span style='font-size:10.0pt; - font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>void </span></b><span style='color:black'>add(E x);</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:white'> </span><span - class=SpellE><span style='color:black'>Iterator</span></span><span - style='color:black'><E> <span class=SpellE>iterator</span>();</span></code><br> - <code><span style='color:gray'>4</span> <span style='color:black'>} </span></code></span> - </p> - </td> - </tr> -</table> - -<p><o:p> </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'> <b><span style='color:#7F0055'>public interface </span></b><span - class=SpellE><span style='color:black'>Iterator</span></span><span - style='color:black'><E> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObject</span></span><span - style='color:black'> {</span></span></code><span style='font-size:10.0pt; - font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><span - style='color:black'>E next();</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:white'> </span><span - class=SpellE><b><span style='color:#7F0055'>boolean</span></b></span><b><span - style='color:#7F0055'> </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> <span style='color:black'>} </span></code></span> - </p> - </td> - </tr> -</table> - -<p class=MsoNormal><o:p> </o:p></p> - -<h4>Ecore</h4> - -<p class=MsoNormal><o:p> </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'><E>.<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'><E>.</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> </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'><E></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> </o:p></p> - -<p class=MsoNormal><o:p> </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'><E></i> is a generic array list whose super type is the generic <i -style='mso-bidi-font-style:normal'>List<E>.</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'> <b><span style='color:#7F0055'>public interface </span></b><span - class=SpellE><span style='color:black'>TestClass</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObject</span></span><span - style='color:black'> {</span></span></code><span style='font-size:10.0pt; - font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><span - class=SpellE><span style='color:black'>ArrayList</span></span><span - style='color:black'><Car> <span class=SpellE>getMyCars</span>();</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:black'>} </span></code></span></p> - </td> - </tr> -</table> - -<p><o:p> </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> <b><span style='color:#7F0055'>public class </span></b><span - class=SpellE><span style='color:black'>TestClassImpl</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObjectImpl</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>implements </span></b><span - class=SpellE><span style='color:black'>TestClass</span></span><span - style='color:black'> {</span></code><span style='font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>protected </span></b><span class=SpellE><span - style='color:black'>ArrayList</span></span><span style='color:black'><Car> <span - class=SpellE>myCars</span>;</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:black'>}</span></code></span> - </p> - </td> -<!-- end source code --> - </tr> -<!-- start Java2Html link --> -</table> - -<p><o:p> </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> <b><span style='color:#7F0055'>public interface </span></b><span - class=SpellE><span style='color:black'>ArrayList</span></span><span - style='color:black'><E> </span><b><span style='color:#7F0055'>extends </span></b><span - style='color:black'>List<E> {</span></code><span style='font-family: - "Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:black'>} </span></code></span></p> - </td> - </tr> -</table> - -<p><o:p> </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> <b><span style='color:#7F0055'>public class </span></b><span - class=SpellE><span style='color:black'>ArrayListImpl</span></span><span - style='color:black'><E> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>ListImpl</span></span><span - style='color:black'><E> </span><b><span style='color:#7F0055'>implements </span></b><span - class=SpellE><span style='color:black'>ArrayList</span></span><span - style='color:black'><E> {</span></code><span style='font-family: - "Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>protected </span></b><span class=SpellE><span - style='color:black'>ArrayListImpl</span></span><span style='color:black'>() {</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>super</span></b><span style='color:black'>();</span></code><br> - <code><span style='color:gray'>4</span> <span style='color:white'> </span><span - style='color:black'>}</span></code><br> - <code><span style='color:gray'>5</span> <span style='color:black'>} </span></code></span></p> - </td> - </tr> -</table> - -<p><o:p> </o:p></p> - -<h4>Ecore</h4> - -<p class=MsoNormal><o:p> </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> </o:p></p> - -<h4>UML</h4> - -<p class=MsoNormal><o:p> </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> </o:p></p> - -<p class=MsoNormal><o:p> </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> </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> </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> <b><span style='color:#7F0055'>public interface </span></b><span - class=SpellE><span style='color:black'>MyClass</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObject</span></span><span - style='color:black'> {</span></code><span style='font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><span - style='color:black'><T> T <span class=SpellE>someOperation</span>(T p1);</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:black'>}</span></code></span></p> - </td> - </tr> -</table> - -<p><o:p> </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'> <b><span style='color:#7F0055'>public class </span></b><span - class=SpellE><span style='color:black'>MyClassImpl</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObjectImpl</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>implements </span></b><span - class=SpellE><span style='color:black'>MyClass</span></span><span - style='color:black'> {</span></span></code><span style='font-size:10.0pt; - font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>public </span></b><span style='color:black'><T> T <span - class=SpellE>someOperation</span>(T p1) {</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:white'> </span><span - style='color:#3F7F5F'>//...</span></code><br> - <code><span style='color:gray'>4</span> <span style='color:white'> </span><span - style='color:black'>}</span></code><br> - <code><span style='color:gray'>5</span> <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> </o:p></p> - -<h4>Ecore</h4> - -<p class=MsoNormal><o:p> </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> </o:p></p> - -<h4>UML</h4> - -<p class=MsoNormal><o:p> </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> </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> </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> <b><span style='color:#7F0055'>public interface </span></b><span - style='color:black'>MyClass2 </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObject</span></span><span - style='color:black'> {</span></code><span style='font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>void </span></b><span style='color:black'>op1(List<Car> p1, List<Car> p2);</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:black'>}</span></code></span></p> - </td> - </tr> -</table> - -<p><o:p> </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'> <b><span style='color:#7F0055'>public class </span></b><span - style='color:black'>MyClass2Impl </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObjectImpl</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>implements </span></b><span - style='color:black'>MyClass2 {</span></span></code><span - style='font-size:10.0pt;font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>public void </span></b><span - style='color:black'>op1(List<Car> p1, List<Car> p2) {</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:white'> </span><span - style='color:#3F7F5F'>//... </span></code><br> - <code><span style='color:gray'>4</span> <span style='color:white'> </span><span - style='color:black'>}</span></code><br> - <code><span style='color:gray'>5</span> <span style='color:black'>}</span></code></span></p> - </td> - </tr> -</table> - -<h4>Ecore</h4> - -<p class=MsoNormal><o:p> </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<E>.</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> </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> </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<E extends -Comparable></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> </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> <b><span style='color:#7F0055'>public class </span></b><span - style='color:black'>MyClass3Impl </span><b><span style='color:#7F0055'>extends </span></b><span - class=SpellE><span style='color:black'>EObjectImpl</span></span><span - style='color:black'> </span><b><span style='color:#7F0055'>implements </span></b><span - style='color:black'>MyClass3 {</span></code><span style='font-family: - "Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>protected </span></b><span style='color:black'>List<? </span><b><span - style='color:#7F0055'>extends </span></b><span style='color:black'>Car> <span - class=SpellE>someReference</span>;</span></code><br> - <code><span style='color:gray'>3</span> <span style='color:white'> </span><b><span - style='color:#7F0055'>protected </span></b><span style='color:black'>List<? </span><b><span - style='color:#7F0055'>super </span></b><span style='color:black'>Car> <span - class=SpellE>anotherReference</span>;</span></code><br> - <code><span style='color:gray'>4</span> <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<E></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> </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> </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> </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> </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> <b><span style='color:#7F0055'>public interface </span></b><span - style='color:black'>MyClass4<P1 </span><b><span style='color:#7F0055'>extends </span></b><span - style='color:black'>A & B> </span><b><span - style='color:#7F0055'>extends </span></b><span class=SpellE><span - style='color:black'>EObject</span></span><span style='color:black'> {</span></code><span - style='font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:black'>}</span></code></span></p> - </td> - </tr> -</table> - -<p><o:p> </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'> <b><span style='color:#7F0055'>public class </span></b><span - style='color:black'>MyClass4Impl<P1 </span><b><span style='color: - #7F0055'>extends </span></b><span style='color:black'>A & B> </span><b><span - style='color:#7F0055'>extends </span></b><span class=SpellE><span - style='color:black'>EObjectImpl</span></span><span style='color:black'> </span><b><span - style='color:#7F0055'>implements </span></b><span style='color:black'>MyClass4<P1> {</span></span></code><span - style='font-size:10.0pt;font-family:"Courier New"'><br> - <code><span style='color:gray'>2</span> <span style='color:black'>} </span></code></span></p> - </td> - </tr> -</table> - -<h4>Ecore</h4> - -<p class=MsoNormal><o:p> </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> </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> </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> </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> </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> </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> </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> |