blob: 501043ce0a2bf5788cf9c4cffbcb3d4a990433ec [file] [log] [blame]
<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">
<link rel=OLE-Object-Data href="article_files/oledata.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>Customizing 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, khussey</o:Author>
<o:Template>Normal</o:Template>
<o:LastAuthor>jbruck</o:LastAuthor>
<o:Revision>606</o:Revision>
<o:TotalTime>21545</o:TotalTime>
<o:LastPrinted>2006-09-12T15:08:00Z</o:LastPrinted>
<o:Created>2004-07-06T14:17:00Z</o:Created>
<o:LastSaved>2008-06-23T17:59:00Z</o:LastSaved>
<o:Pages>1</o:Pages>
<o:Words>4747</o:Words>
<o:Characters>27058</o:Characters>
<o:Company>IBM</o:Company>
<o:Lines>225</o:Lines>
<o:Paragraphs>63</o:Paragraphs>
<o:CharactersWithSpaces>31742</o:CharactersWithSpaces>
<o:Version>10.6830</o:Version>
</o:DocumentProperties>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<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:"MS Mincho";
panose-1:2 2 6 9 4 2 5 8 3 4;
mso-font-alt:"MS Mincho";
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:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;
mso-font-charset:238;
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:238;
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;}
/* 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-link:"Heading 4 Char";
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";}
span.Heading4Char
{mso-style-name:"Heading 4 Char";
mso-style-link:"Heading 4";
mso-ansi-font-size:12.0pt;
mso-bidi-font-size:14.0pt;
font-family:Arial;
mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;
mso-ansi-language:EN-US;
mso-fareast-language:EN-US;
mso-bidi-language:AR-SA;
font-weight:bold;}
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";}
p.NormalWeb20, li.NormalWeb20, div.NormalWeb20
{mso-style-name:"Normal \(Web\)20";
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";}
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;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
padding:24.0pt 24.0pt 24.0pt 24.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:144593442;
mso-list-template-ids:1135626828;}
@list l1
{mso-list-id:255553693;
mso-list-type:hybrid;
mso-list-template-ids:-267987446 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l2
{mso-list-id:478545422;
mso-list-template-ids:74583296;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3
{mso-list-id:517741502;
mso-list-type:hybrid;
mso-list-template-ids:-162223636 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l3:level1
{mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@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:529877076;
mso-list-template-ids:108792314;}
@list l4:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l5
{mso-list-id:532773372;
mso-list-template-ids:-19074778;}
@list l5:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l6
{mso-list-id:549002421;
mso-list-type:hybrid;
mso-list-template-ids:1286779964 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l6:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l6:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l6:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l6:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l6:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l6:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l6:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l6:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l6:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l7
{mso-list-id:589234754;
mso-list-type:hybrid;
mso-list-template-ids:-1596542860 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l7:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@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:685324530;
mso-list-template-ids:-978666272;}
@list l8:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l9
{mso-list-id:719548679;
mso-list-template-ids:-797676954;}
@list l9:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l10
{mso-list-id:728964541;
mso-list-type:hybrid;
mso-list-template-ids:690360822 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l10:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@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:771710111;
mso-list-type:hybrid;
mso-list-template-ids:556288082 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l11:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l11:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l11:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l11:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l11:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l11:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l11:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l11:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l11:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12
{mso-list-id:799109081;
mso-list-type:hybrid;
mso-list-template-ids:1868734138 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l12:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l12:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l12:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l13
{mso-list-id:811143652;
mso-list-type:hybrid;
mso-list-template-ids:328496344 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l13:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@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:847869548;
mso-list-type:hybrid;
mso-list-template-ids:-1267585690 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l14:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@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:853154983;
mso-list-template-ids:-988006538;}
@list l16
{mso-list-id:904529610;
mso-list-type:hybrid;
mso-list-template-ids:1076248554 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l16:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l16:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l16:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l16:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l16:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l16:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l16:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l16:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l16:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17
{mso-list-id:1007514218;
mso-list-type:hybrid;
mso-list-template-ids:539417408 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l17:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l17:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l17:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l18
{mso-list-id:1027103804;
mso-list-template-ids:1984749596;}
@list l18:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l19
{mso-list-id:1034844399;
mso-list-template-ids:1746536754;}
@list l19:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l20
{mso-list-id:1125197649;
mso-list-template-ids:333978974;}
@list l20:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l21
{mso-list-id:1143425324;
mso-list-type:hybrid;
mso-list-template-ids:-793502586 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l21:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l21:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l21:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l21:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l21:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l21:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l21:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l21:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l21:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l22
{mso-list-id:1236545736;
mso-list-template-ids:999078962;}
@list l22:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l23
{mso-list-id:1286883312;
mso-list-template-ids:277090318;}
@list l24
{mso-list-id:1331255473;
mso-list-template-ids:-1595142070;}
@list l24:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l25
{mso-list-id:1374891901;
mso-list-template-ids:384856622;}
@list l25:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l26
{mso-list-id:1470051823;
mso-list-template-ids:-1612799752;}
@list l26:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l27
{mso-list-id:1494178132;
mso-list-template-ids:1552964670;}
@list l27:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l28
{mso-list-id:1515462140;
mso-list-template-ids:-337994500;}
@list l28:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l29
{mso-list-id:1597405131;
mso-list-type:hybrid;
mso-list-template-ids:-464640288 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l29:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l29:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l29:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l29:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l29:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l29:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l29:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l29:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l29:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l30
{mso-list-id:1708675427;
mso-list-template-ids:297816472;}
@list l30:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l31
{mso-list-id:1755127003;
mso-list-template-ids:1305669862;}
@list l31:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l32
{mso-list-id:1760832891;
mso-list-type:hybrid;
mso-list-template-ids:-40578748 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l32:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l32:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l32:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l32:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l32:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l32:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l32:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l32:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l32:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33
{mso-list-id:1786540090;
mso-list-type:hybrid;
mso-list-template-ids:-171164678 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l33:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l33:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l33:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34
{mso-list-id:1812405428;
mso-list-type:hybrid;
mso-list-template-ids:-643256280 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l34:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l34:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l34:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l35
{mso-list-id:1875536204;
mso-list-template-ids:-952757150;}
@list l35:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l36
{mso-list-id:1927689794;
mso-list-type:hybrid;
mso-list-template-ids:-1847530706 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l36:level1
{mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l36:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l37
{mso-list-id:1941181149;
mso-list-template-ids:-1179713952;}
@list l37:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l38
{mso-list-id:2007048353;
mso-list-type:hybrid;
mso-list-template-ids:-875133158 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l38:level1
{mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l38:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39
{mso-list-id:2065056820;
mso-list-type:hybrid;
mso-list-template-ids:1923922954 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l39:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l39:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l39:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l40
{mso-list-id:2114591223;
mso-list-template-ids:-2066551808;}
@list l40:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
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;}
</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="59394"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in;margin-left:
8.5pt;margin-top:14.2pt'>
<div class=Section1>
<p class=MsoNormal align=right style='text-align:right'><span style='font-size:
10.0pt'>Copyright © 2007 International Business Machines Corp.</span><span
style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>
<div align=right>
<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width="100%"
style='width:100.0%;mso-cellspacing:0in;mso-padding-alt:1.5pt 1.5pt 1.5pt 1.5pt'>
<tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
<td valign=top style='background:#0080C0;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:Arial;
color:white'>&nbsp;</span></b><span style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>
</td>
</tr>
</table>
</div>
<h1><img width=120 height=86 id="_x0000_i1025" src="../../../../images/Idea.jpg"
align=CENTER></h1>
<p>&nbsp;</p>
<h1 align=center style='text-align:center'>Customizing UML: </h1>
<h1 align=center style='text-align:center'>Which Technique is Right for You?</h1>
<h1 align=center style='text-align:center'><o:p>&nbsp;</o:p></h1>
<blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:Arial'>Summary</span></b><span
style='font-size:10.0pt;font-family:Arial'><br style='mso-special-character:
line-break'>
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
<![endif]><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Extending
or restricting UML to suit a particular domain is not a simple task.<span
style='mso-spacerun:yes'>  </span>Several different options are available, each
of which presents its own set of challenges.<span style='mso-spacerun:yes'> 
</span>This article walks the reader through the decision making process of
figuring out which technique to use.<span style='mso-spacerun:yes'>  </span>The
mechanics of actually extending UML to suit a domain will be handled in future
articles.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p><b>By James <span class=SpellE>Bruck</span> and <span class=SpellE>Kenn</span>
Hussey, IBM</b><br>
<st1:date Month="6" Day="19" Year="2008">June 19, 2008</st1:date> </p>
</blockquote>
<div class=MsoNormal align=center style='text-align:center'><span
style='font-size:10.0pt;font-family:Arial'>
<hr size=2 width="100%" align=center>
</span></div>
<p><o:p>&nbsp;</o:p></p>
<h2>Glossary</h2>
<p>A few terms and abbreviations will be used throughout this document.</p>
<table class=MsoTableList4 border=1 cellspacing=0 cellpadding=0
style='border-collapse:collapse;border:none;mso-border-alt:solid black 1.5pt;
mso-yfti-tbllook:160;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
.75pt solid black'>
<tr style='mso-yfti-irow:-1'>
<td width=168 valign=top style='width:125.75pt;border:solid black 1.5pt;
border-right:none;background:gray;mso-shading:white;mso-pattern:solid gray;
padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:1'><b><span style='color:white'>Term<o:p></o:p></span></b></p>
</td>
<td width=684 valign=top style='width:513.0pt;border:solid black 1.5pt;
border-left:none;background:gray;mso-shading:white;mso-pattern:solid gray;
padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:1'><b><span style='color:white'>Definition<o:p></o:p></span></b></p>
</td>
</tr>
<tr style='mso-yfti-irow:0'>
<td width=168 valign=top style='width:125.75pt;border-top:none;border-left:
solid black 1.5pt;border-bottom:solid black 1.0pt;border-right:none;
mso-border-top-alt:solid black .75pt;mso-border-top-alt:solid black .75pt;
mso-border-left-alt:solid black 1.5pt;mso-border-bottom-alt:solid black .75pt;
padding:0in 5.4pt 0in 5.4pt'>
<p><b style='mso-bidi-font-weight:normal'>DSL <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.0pt;border-right:solid black 1.5pt;
mso-border-top-alt:solid black .75pt;mso-border-top-alt:solid black .75pt;
mso-border-bottom-alt:solid black .75pt;mso-border-right-alt:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt'>
<p>Domain Specific Language.<span style='mso-spacerun:yes'>   </span>A
language designed to be useful for a specific set of tasks.<span
style='mso-spacerun:yes'>  </span>This is in contrast to a general-purpose modeling
language such as UML.<span style='mso-spacerun:yes'>  </span>A DSL is created
specifically to solve problems in a particular domain and is not intended to
be able to solve problems outside of it.<span style='mso-spacerun:yes'> 
</span>DSL’s are usually small, more declarative and less expressive than a
general-purpose language.</p>
<p><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:1'>
<td width=168 valign=top style='width:125.75pt;border-top:none;border-left:
solid black 1.5pt;border-bottom:solid black 1.0pt;border-right:none;
mso-border-top-alt:solid black .75pt;mso-border-top-alt:solid black .75pt;
mso-border-left-alt:solid black 1.5pt;mso-border-bottom-alt:solid black .75pt;
padding:0in 5.4pt 0in 5.4pt'>
<p><b style='mso-bidi-font-weight:normal'>MOF<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.0pt;border-right:solid black 1.5pt;
mso-border-top-alt:solid black .75pt;mso-border-top-alt:solid black .75pt;
mso-border-bottom-alt:solid black .75pt;mso-border-right-alt:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt'>
<p><st1:place>Meta</st1:place> Object Facility.<span
style='mso-spacerun:yes'>  </span>MOF is an OMG standard for Model Driven
Engineering.<span style='mso-spacerun:yes'>  </span>MOF is designed as a four
level architecture.<span style='mso-spacerun:yes'>   </span>UML is considered
a layer 2 MOF model.<span style='mso-spacerun:yes'>  </span>M3 is the
language used by MOF to build meta-models.</p>
<p><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:2'>
<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'>OMG<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>Object Management Group.<span style='mso-spacerun:yes'>  </span>A
consortium that promotes the adoptions of standards.</p>
<p><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:3'>
<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 Testing Profile<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>The UML testing profile can be found at: <a
href="http://www.omg.org/technology/documents/formal/test_profile.htm">http://www.omg.org/technology/documents/formal/test_profile.htm</a>.<span
style='mso-spacerun:yes'>  </span>It is a demonstration of creating a DSL
using both a profile and MOF based approach.</p>
<p><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:4;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<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>UML2 2.1. This refers to the latest version of the UML API which is based
on the UML 2.1.2 specification defined by OMG</p>
<p>The latest draft of the UML Superstructure Specification can be found at: <a
href="http://www.omg.org/technology/documents/formal/uml.htm">http://www.omg.org/technology/documents/formal/uml.htm</a></p>
<p><o:p>&nbsp;</o:p></p>
</td>
</tr>
</table>
<p><o:p>&nbsp;</o:p></p>
<h2>Introduction</h2>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The ability
to customize UML to a specific domain is one of the great features of UML.<span
style='mso-spacerun:yes'>  </span>Creating customizations allows one to
leverage existing modeling tools and conventions defined by the UML
specification while making modeling easier for the end user (and possibly less
abstract).<span style='mso-spacerun:yes'>   </span>The type of customizations
required often depends on the nature of the domain and how the extended model
is intended to be used.<span style='mso-spacerun:yes'>  </span>If one wants to
make simple customizations, by adding new properties to existing UML
meta-classes, then a light-weight extension is the way to go.<span
style='mso-spacerun:yes'>  </span>However, if one wants to extend the behavior
of UML, add restrictions on certain collections, or, take advantage of the more
complex features of UML such as redefinition, then a heavy weight extension is
the way to go.<span style='mso-spacerun:yes'>  </span>As the <a
href="http://www.omg.org/technology/documents/formal/uml.htm">superstructure
specification</a> further points out, there are several reasons why one may
want to customize a meta-model: <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l29 level1 lfo3;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Give a terminology that is
adapted to a particular domain.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l29 level1 lfo3;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Give a syntax for constructs
that do not have a notation.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l29 level1 lfo3;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Give a different notation for
already existing symbols<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l29 level1 lfo3;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Add semantics that is left
unspecified in the meta-model.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l29 level1 lfo3;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Add semantics that do not exist
in the meta-model.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l29 level1 lfo3;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Add constraints that restrict
the way you use the meta-model.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l29 level1 lfo3;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Add information that can be
used when transforming a model to another model or code.<o:p></o:p></span></li>
</ul>
<h2>Decisions, Decisions …</h2>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Creating
your own Domain Specific Language has several advantages:<span
style='mso-spacerun:yes'>    </span><o:p></o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>DSL’s allow solutions to be
expressed at the level of abstraction of the problem domain.<span
style='mso-spacerun:yes'>  </span>Therefore domain experts can understand,
validate and modify them easily.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>DSL’s enhance quality,
productivity, maintainability, reusability.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>And some
disadvantages:<o:p></o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l33 level1 lfo9;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Cost of designing, implementing
and maintaining a DSL.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l33 level1 lfo9;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Difficulty in balancing between
domain-specific and general-purpose language constructs.<o:p></o:p></span></li>
</ul>
<p><o:p>&nbsp;</o:p></p>
<h3>Where do you go from here?</h3>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The first
decision that will have to be made will be to decide if you want to build on
top of existing UML concepts or not.<span style='mso-spacerun:yes'>   
</span>That is to say, do you intend on extending or restrict existing UML
concepts and meta-types, or not.<span style='mso-spacerun:yes'>  </span>This
can be answered by analyzing the domain space of your DSL.<span
style='mso-spacerun:yes'>  </span>If there is much overlap between the concepts
in UML and those within your DSL then favor extending UML.<span
style='mso-spacerun:yes'>  </span>If there is little overlap then favor a MOF
based solution.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p style='margin-left:8.5pt;page-break-after:avoid'><!--[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:449.25pt;
height:137.25pt' o:bordertopcolor="this" o:borderleftcolor="this"
o:borderbottomcolor="this" o:borderrightcolor="this">
<v:imagedata src="article_files/image001.jpg" o:title="venndiagram"/>
</v:shape><![endif]--><![if !vml]><img border=0 width=599 height=183
src="article_files/image001.jpg" v:shapes="_x0000_i1027"><![endif]></p>
<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]-->:<span style='mso-spacerun:yes'>  </span>UML
Extension vs. MOF based</p>
<p><o:p>&nbsp;</o:p></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>An example
of MOF based vs. profile based approaches to developing a DSL is demonstrated with
the UML <a href="http://www.omg.org/docs/formal/05-07-07.pdf">testing profile</a>.<span
style='mso-spacerun:yes'>   </span>In that specification, the same DSL is
developed using two different techniques.<span style='mso-spacerun:yes'> 
</span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><!--[if gte vml 1]><v:shape
id="_x0000_i1028" type="#_x0000_t75" style='width:45.75pt;height:9.75pt'>
<v:imagedata src="article_files/image006.gif" o:title="tryit"/>
</v:shape><![endif]--><![if !vml]><img border=0 width=61 height=13
src="article_files/image006.gif" v:shapes="_x0000_i1028"><![endif]><span
style='mso-spacerun:yes'> </span>Have a look at the UML <a
href="http://www.omg.org/docs/formal/05-07-07.pdf">testing profile</a>.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>This
article focuses on extending concepts from UML.<span
style='mso-spacerun:yes'>   </span>If you wish to take the MOF based approach,
you can stop reading here and have a look at the <span class=SpellE>OMG’s</span>
MOF standard.<span style='mso-spacerun:yes'>    </span>Although the preferred
approach in the modeling of languages involves using UML with customizations, it
should be noted that, there is great value in creation of custom languages in
specialized circumstances.<span style='mso-spacerun:yes'>   </span>UML itself
is defined using MOF and there exist many other languages that are defined in
MOF terms.<span style='mso-spacerun:yes'>   </span>In fact, the Eclipse
Modeling Framework (EMF), the component on which UML2 component is based, has
the ability to generate a Java implementation for working with MOF-defined
languages.<span style='mso-spacerun:yes'>   </span><o:p></o:p></span></p>
<h2><o:p>&nbsp;</o:p></h2>
<h2>Techniques for extending UML</h2>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>You have
several options when it comes to extending/constraining UML in your quest to
create a DSL.<span style='mso-spacerun:yes'>  </span>Choosing the correct
method is critical for the success of your project because you will have to
commit to your decision and invest time and effort addressing the hurdles associated
with each.<span style='mso-spacerun:yes'>  </span>To that end, a general
description of each technique and then a table summarizing the features of each
approach will be provided. <o:p></o:p></span></p>
<p><img border=0 width=64 height=15 id="_x0000_i1029"
src="../../../../images/tip.gif"><span style='mso-spacerun:yes'> </span>As you
continue to read about the techniques for extending UML, you should keep the
following in mind:<span style='mso-spacerun:yes'>  </span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l7 level1 lfo12;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>As much as possible, you should
be favoring the “lightweight approach” or the use of profiles.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l7 level1 lfo12;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>As much as possible, you should
be leaning away from the use of “middleweight” extensions.<o:p></o:p></span></li>
</ul>
<p style='margin-left:.25in'><o:p>&nbsp;</o:p></p>
<h3><a name="_Featherweight_extension"></a>Featherweight extension</h3>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Featherweight
extensions involve the use of adding keywords.<span
style='mso-spacerun:yes'>    </span>Keywords are reserved words that normally
appear as text annotations attached to a UML element.<span
style='mso-spacerun:yes'>  </span><span style='mso-spacerun:yes'> </span>The
superstructure specification describes the use of keywords and maintains a list
of predefined keywords (see <a
href="http://www.omg.org/technology/documents/formal/uml.htm">Superstructure
Specification</a> Annex B).<span style='mso-spacerun:yes'>   </span>Keywords
are always enclosed in guillemots which serve as visual cues to more readily
distinguish when a keyword is being used.<span style='mso-spacerun:yes'> 
</span><o:p></o:p></span></p>
<p><img border=0 width=64 height=15 id="_x0000_i1030"
src="../../../../images/tip.gif"><span
style='mso-spacerun:yes'> </span>Keywords are case sensitive.</p>
<p><i style='mso-bidi-font-style:normal'><u>Example</u></i>: </p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The meta-<span
class=GramE>type<span style='mso-spacerun:yes'>  </span><span class=SpellE><i>uml</i></span></span><span
class=SpellE><i>::Interface</i></span> has a similar appearance to <span
class=SpellE><i>uml::Class</i></span>.<span style='mso-spacerun:yes'>  
</span>For this reason, the keyword &lt;&lt;interface&gt;&gt; is used to
distinguish interfaces from other classifiers.<o:p></o:p></span></p>
<p style='margin-left:8.5pt;page-break-after:avoid'><span
style='mso-spacerun:yes'>         </span><!--[if gte vml 1]><v:shape id="_x0000_i1031"
type="#_x0000_t75" style='width:81pt;height:51pt'>
<v:imagedata src="article_files/image014.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=108 height=68
src="article_files/image007.jpg" v:shapes="_x0000_i1031"><![endif]></p>
<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'>2</span><!--[if supportFields]><span style='mso-element:
field-end'></span><![endif]-->: Use of keywords on meta-type</p>
<p><i style='mso-bidi-font-style:normal'><u>Example</u></i>: </p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>In the
following example, it becomes immediately obvious that keywords are critical
for distinguishing between different types of relationships.<o:p></o:p></span></p>
<p style='margin-left:8.5pt;page-break-after:avoid'><!--[if gte vml 1]><v:shape
id="_x0000_i1032" type="#_x0000_t75" style='width:215.25pt;height:221.25pt'>
<v:imagedata src="article_files/image010.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=287 height=295
src="article_files/image005.jpg" v:shapes="_x0000_i1032"><![endif]></p>
<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'>3</span><!--[if supportFields]><span style='mso-element:
field-end'></span><![endif]-->: Use of keyword on relationships</p>
<p>Keywords are used for four different purposes:</p>
<ol style='margin-top:0in' start=1 type=1>
<li class=MsoNormal style='mso-list:l38 level1 lfo15;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>To distinguish a particular UML
concept (meta-class) from others sharing the same general graphical form.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l38 level1 lfo15;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>To distinguish a particular
kind of relationship between UML concepts from other relationships sharing
the same graphical form. <o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l38 level1 lfo15;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>To specify the value of some
modifier attached to a UML concept (meta-attribute value).<span
style='mso-spacerun:yes'>   </span>Thus the keyword &lt;&lt;<span
class=SpellE>singleExecution</span>&gt;&gt; appearing within an Activity
signifies that the <span class=SpellE>isSingleExecution</span> attribute
of the Activity is true.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l38 level1 lfo15;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>To indicate standard
stereotype.<span style='mso-spacerun:yes'>  </span>For example the
&lt;&lt;<span class=SpellE>modelLibrary</span>&gt;&gt; keyword attached to
a package identify that the package contains a set of model elements
intended to be shared by multiple models.<o:p></o:p></span></li>
</ol>
<p>Keywords created in this manner will appear in the labels of the item when
viewed with the existing UML editor.<span style='mso-spacerun:yes'> 
</span>When keywords get created, they are added as an annotation as shown
below.<span style='mso-spacerun:yes'>  </span></p>
<p style='margin-left:8.5pt;page-break-after:avoid'><!--[if gte vml 1]><v:shape
id="_x0000_i1033" type="#_x0000_t75" style='width:588pt;height:62.25pt'
o:bordertopcolor="this" o:borderleftcolor="this" o:borderbottomcolor="this"
o:borderrightcolor="this">
<v:imagedata src="article_files/image002.jpg" o:title="keyword"/>
<w:bordertop type="single" width="4" shadow="t"/>
<w:borderleft type="single" width="4" shadow="t"/>
<w:borderbottom type="single" width="4" shadow="t"/>
<w:borderright type="single" width="4" shadow="t"/>
</v:shape><![endif]--><![if !vml]><img border=0 width=788 height=87
src="article_files/image003.jpg" v:shapes="_x0000_i1033"><![endif]></p>
<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'>4</span><!--[if supportFields]><span style='mso-element:
field-end'></span><![endif]-->: Keywords in a model</p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>It is important
to note that the use of annotations in this manner is non-standard and
therefore not directly supported by the UML editor.<span
style='mso-spacerun:yes'>   </span>If you decide to export your model with
keywords to XMI, the annotations would be moved into an XMI extension.<span
style='mso-spacerun:yes'>   </span>Consumers of the XMI format could
conceivably continue to use your keywords if they know how to work with the
newly created XMI elements.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The UML2
API does support the use a keywords through the API:<o:p></o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l13 level1 lfo18;tab-stops:list .5in'><span
class=SpellE><span style='font-size:10.0pt;font-family:Arial'>Element#addKeyword</span></span><span
style='font-size:10.0pt;font-family:Arial'>()<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l13 level1 lfo18;tab-stops:list .5in'><span
class=SpellE><span style='font-size:10.0pt;font-family:Arial'>Element#getKeyword</span></span><span
style='font-size:10.0pt;font-family:Arial'>()<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l13 level1 lfo18;tab-stops:list .5in'><span
class=SpellE><span style='font-size:10.0pt;font-family:Arial'>Element#removeKeyword</span></span><span
style='font-size:10.0pt;font-family:Arial'>()<o:p></o:p></span></li>
</ul>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The use of
keywords is somewhat limited in that one cannot attach constraints or add
properties to existing meta-types.<span style='mso-spacerun:yes'>  
</span>Keywords are strictly used as a tag to visually distinguish similar
items.<span style='mso-spacerun:yes'>  </span>Another downside to keywords is
that there is no formally defined concept of a dictionary of keywords.<span
style='mso-spacerun:yes'>   </span>The implication of this is that if one
defines some keywords for a particular domain, he cannot directly share them
with others.<span style='mso-spacerun:yes'>   </span>The set of appropriate
keywords would have to be agreed upon and applied by the end user.<span
style='mso-spacerun:yes'>   </span>A means of consistently displaying keywords
would also have to be supported by the modeling tool you are using.<span
style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p><o:p>&nbsp;</o:p></p>
<table class=MsoTableList1 border=1 cellspacing=0 cellpadding=0
style='border-collapse:collapse;border:none;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-yfti-tbllook:
128;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
<tr style='mso-yfti-irow:0'>
<td width=84 valign=top style='width:63.1pt;border-top:solid teal 1.5pt;
border-left:solid teal 1.0pt;border-bottom:none;border-right:none;mso-border-top-alt:
solid teal 1.5pt;mso-border-left-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:64'><b style='mso-bidi-font-weight:normal'>Pros<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:solid teal 1.5pt;
border-left:none;border-bottom:none;border-right:solid teal 1.0pt;mso-border-top-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l16 level1 lfo21;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Adding
keywords is trivial<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l16 level1 lfo21;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Great
to visually distinguish between similar looking items.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:64'><span style='font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
<td width=84 valign=top style='width:63.1pt;border-top:none;border-left:solid teal 1.0pt;
border-bottom:solid teal 1.5pt;border-right:none;mso-border-left-alt:solid teal .75pt;
mso-border-bottom-alt:solid teal 1.5pt;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:128'><b style='mso-bidi-font-weight:normal'>Cons<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:none;border-left:
none;border-bottom:solid teal 1.5pt;border-right:solid teal 1.0pt;mso-border-bottom-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l21 level1 lfo24;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Limited
functionality.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l21 level1 lfo24;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>No
concept of dictionary of keywords to share common keywords.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l21 level1 lfo24;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>No
way to validate application of keywords.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l21 level1 lfo24;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Not
standardized or formally defined by superstructure specification.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l21 level1 lfo24;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>No
way to truly extend existing meta-types by adding attributes or
operations<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:128'><span style='font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
</table>
<p><o:p>&nbsp;</o:p></p>
<h3><a name="_Lightweight_extension"></a>Lightweight extension<span
style='font-size:10.0pt'><o:p></o:p></span></h3>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Lightweight
extensions involve using profiles.<span style='mso-spacerun:yes'> 
</span>Profiles are described in detail in the <a
href="http://www.omg.org/technology/documents/formal/uml.htm">UML
Superstructure specification</a> chapter 18. <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Profiles should
be your first instinctive choice when deciding to extend or customize UML.<span
style='mso-spacerun:yes'>  </span>A profile defines limited extensions to a
reference meta-model with the purpose of adapting the meta-model to a specific
platform domain.<span style='mso-spacerun:yes'>  </span>The primary extension
construct is the Stereotype, which is defined as part of a Profile.<span
style='mso-spacerun:yes'>  </span>Stereotypes can be used to add:<span
style='mso-spacerun:yes'>  </span>keywords, constraints, images, and properties
(tagged values) to model elements.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The profile
mechanism is not a first-class mechanism, that is to say, it does not allow for
specialization through inheritance of meta-types from the referenced
meta-model.<span style='mso-spacerun:yes'>  </span>Rather, the intention of a
profile is to give a straight-forward mechanism for adapting an existing
meta-model with constructs that are specific to a particular domain.<span
style='mso-spacerun:yes'>  </span>Each such adaptation is grouped in a
profile.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p style='margin-left:8.5pt;page-break-after:avoid'><!--[if gte vml 1]><v:shape
id="_x0000_i1034" type="#_x0000_t75" style='width:712.5pt;height:279.75pt'
o:ole="">
<v:imagedata src="article_files/image012.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=950 height=373
src="article_files/image013.jpg" v:shapes="_x0000_i1034"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="MSPhotoEd.3" ShapeID="_x0000_i1034"
DrawAspect="Content" ObjectID="_1275734745">
</o:OLEObject>
</xml><![endif]--></p>
<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'>5</span><!--[if supportFields]><span style='mso-element:
field-end'></span><![endif]-->: Profile as defined by UML meta-model</p>
<p>Two new concepts have been introduced into the UML2 2.1 API.<span
style='mso-spacerun:yes'>  </span>These concepts will be mentioned here but
will be explored in more detail in future articles.<span
style='mso-spacerun:yes'>     </span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l12 level1 lfo27;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Static Profile Definition:<span
style='mso-spacerun:yes'>   </span>Newly introduced in UML2 2.1 is the
ability to create statically defined profiles.<span
style='mso-spacerun:yes'>   </span>Users now have the option to generate
code from their profile and provide implementations for operations and
derived features.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l12 level1 lfo27;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>OCL Integration:<span
style='mso-spacerun:yes'>  </span>Users can specify invariant constraints
or operation bodies in OCL and have code generated from the expressions
entered in the UML model.<span style='mso-spacerun:yes'>  
</span>Validation of constraints created on stereotypes is possible after
the stereotype has been applied.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='margin-left:.25in'><span style='font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Newly
introduced in UML 2.0 is the notion of “strict” application of a profile.<span
style='mso-spacerun:yes'>  </span>This is a means of specifying the kinds of
meta-types that your DSL is concerned with.<span style='mso-spacerun:yes'>  
</span>For example, say you were really only interested in Classes, Properties
and Operations but you only wanted to specify a stereotype for Class.<span
style='mso-spacerun:yes'>   </span>You could create meta-class reference to
Property and Operation.<span style='mso-spacerun:yes'>  </span>Then when
applying your profile, you could specify a “strict” application.<span
style='mso-spacerun:yes'>    </span>UML editors should respect the strict
attribute of the profile application and remove all other UML concepts from
palettes etc and just leave those that your DSL is concerned with.<span
style='mso-spacerun:yes'>  </span>This is a feature that may or may not be
supported by a given tool.<span style='mso-spacerun:yes'>   </span>Without a
strict application of a profile, all other UML concepts would be available.<o:p></o:p></span></p>
<p><o:p>&nbsp;</o:p></p>
<table class=MsoTableList1 border=1 cellspacing=0 cellpadding=0
style='border-collapse:collapse;border:none;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-yfti-tbllook:
128;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
<tr style='mso-yfti-irow:0'>
<td width=84 valign=top style='width:63.1pt;border-top:solid teal 1.5pt;
border-left:solid teal 1.0pt;border-bottom:none;border-right:none;mso-border-top-alt:
solid teal 1.5pt;mso-border-left-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:64'><b style='mso-bidi-font-weight:normal'>Pros<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:solid teal 1.5pt;
border-left:none;border-bottom:none;border-right:solid teal 1.0pt;mso-border-top-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Easy
to create such extensions<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Well
described with documentation in Superstructure Specification<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Standard
means to define icons<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Well
defined display options.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Application
of profiles and how to use them is well defined.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Can
add structure<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Low
development cost<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Leverage
existing UML editors<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l11 level1 lfo31;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Ease
of deployment.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:64'><span style='font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
<td width=84 valign=top style='width:63.1pt;border-top:none;border-left:solid teal 1.0pt;
border-bottom:solid teal 1.5pt;border-right:none;mso-border-left-alt:solid teal .75pt;
mso-border-bottom-alt:solid teal 1.5pt;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:128'><b style='mso-bidi-font-weight:normal'>Cons<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:none;border-left:
none;border-bottom:solid teal 1.5pt;border-right:solid teal 1.0pt;mso-border-bottom-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l34 level1 lfo34;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Cannot
specify behavior<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l34 level1 lfo34;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Only
possibly to add new constraints, not to remove constraints.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l34 level1 lfo34;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Clumsy
programmatic usage<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l34 level1 lfo34;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Cannot
modify existing structures<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:128'><span style='font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
</table>
<p><o:p>&nbsp;</o:p></p>
<h3><a name="_Hlt174419544"></a><a name="_Middleweight_extension"></a>Middleweight
extension</h3>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The
middleweight extension mechanism extends UML through specialization of UML
meta-types.<span style='mso-spacerun:yes'>  </span>Middleweight extensions can
be considered a first class extension mechanism and as such expose advanced
building block concepts such as sub-setting and redefinition (concepts explored
later in this document).<o:p></o:p></span></p>
<p>Middleweight extensions have two main components: </p>
<ol style='margin-top:0in' start=1 type=1>
<li class=MsoNormal style='mso-list:l3 level1 lfo37;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Extend by referencing <span
class=SpellE><i>UML.metamodel.uml</i></span> (the merged UML <span
class=SpellE>metamodel</span>).<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l3 level1 lfo37;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>To that merged set of
meta-types, add your own domain specific types.<o:p></o:p></span></li>
</ol>
<p>We make the distinction between middleweight and heavyweight based on what
gets extended.</p>
<p>Even though middleweight extensions are initially easier to create (because
you omit the Language unit merge step in heavyweight extensions) middleweight
extensions are discouraged for two main reasons.<span
style='mso-spacerun:yes'>   </span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l14 level1 lfo40;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>You create dependency on a
specific version of UML.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l14 level1 lfo40;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>You extend all of UML even if
you may only be interested in certain aspects of it.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l14 level1 lfo40;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Implementation classes in the
specialized meta-model reference internal UML implementation classes and
result in compiler warnings.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>If you
require the flexibility of defining behavior, sub-classing or redefining
existing collections, then you should favor <a href="#_Heavyweight_extension">heavyweight
extensions</a>.<span style='mso-spacerun:yes'>   </span>If your DSL on the
other hand has much overlap with UML, you could consider using middleweight
extensions.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>It is
important to stress that when using such extensions,<span
style='mso-spacerun:yes'>  </span>you will be creating a dependency on
open-source UML implementation and the internal .implementation classes.<span
style='mso-spacerun:yes'>  </span>That is to say, if UML changes in some way,
your newly introduced model elements that extend them might also have to change
<o:p></o:p></span></p>
<p><o:p>&nbsp;</o:p></p>
<table class=MsoTableList1 border=1 cellspacing=0 cellpadding=0
style='border-collapse:collapse;border:none;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-yfti-tbllook:
128;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
<tr style='mso-yfti-irow:0'>
<td width=84 valign=top style='width:63.1pt;border-top:solid teal 1.5pt;
border-left:solid teal 1.0pt;border-bottom:none;border-right:none;mso-border-top-alt:
solid teal 1.5pt;mso-border-left-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:64'><b style='mso-bidi-font-weight:normal'>Pros<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:solid teal 1.5pt;
border-left:none;border-bottom:none;border-right:solid teal 1.0pt;mso-border-top-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l32 level1 lfo43;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Easier
than heavyweight to create initially.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l32 level1 lfo43;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Easy
for end user to use programmatically.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l32 level1 lfo43;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Can
add and modify behavior<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l32 level1 lfo43;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Can
add and modify structure<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l32 level1 lfo43;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Can
add and modify constraints<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l32 level1 lfo43;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>API
is domain specific<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l32 level1 lfo43;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>First
class extension mechanism<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:64'><span style='font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
<td width=84 valign=top style='width:63.1pt;border-top:none;border-left:solid teal 1.0pt;
border-bottom:solid teal 1.5pt;border-right:none;mso-border-left-alt:solid teal .75pt;
mso-border-bottom-alt:solid teal 1.5pt;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:128'><b style='mso-bidi-font-weight:normal'>Cons<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:none;border-left:
none;border-bottom:solid teal 1.5pt;border-right:solid teal 1.0pt;mso-border-bottom-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l17 level1 lfo46;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Creates
dependence on specific version of UML.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l17 level1 lfo46;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Difficult
to maintain especially if UML specification changes.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l17 level1 lfo46;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>High
development cost<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l17 level1 lfo46;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>File
format is non-standard<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l17 level1 lfo46;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>End users
must know about 2 factories for creating elements: One factory for
creating types from the extended meta-model and one defined by the
extension.</span><span style='font-family:Arial'><o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:128'><span style='font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
</table>
<p><o:p>&nbsp;</o:p></p>
<h3><a name="_Heavyweight_extension"></a>Heavyweight extension</h3>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Heavyweight
extensions involve reuse by copy and merge instead of reuse by specializing
types from a referenced meta-model as with middleweight extensions.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Creating
heavyweight extensions involve 2 steps: <o:p></o:p></span></p>
<ol style='margin-top:0in' start=1 type=1>
<li class=MsoNormal style='mso-list:l36 level1 lfo49;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Select the language units you
wish to extend and merge them. <span style='mso-spacerun:yes'> </span><o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l36 level1 lfo49;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>To that merged set of
meta-types, add your own domain specific types.<o:p></o:p></span></li>
</ol>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Although
the concept and terminology for “heavyweight” extension is not mentioned in the
official UML specification, the notion of using package merge to define languages
is mentioned and forms the bases for constructing UML itself.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>So why
exactly would you even consider a heavyweight extension?<span
style='mso-spacerun:yes'>  </span>The simple answer is: “ability to customize
and specify behavior”.<span style='mso-spacerun:yes'>    </span>With
heavyweight extensions you have access to advanced concepts such as sub-setting
and redefinition that are used to create UML itself.<span
style='mso-spacerun:yes'>   </span>Support for these concepts is handled
through the customized UML code generator.<span style='mso-spacerun:yes'> 
</span>The details of these concepts will be explored in a future article but
the basics are as follows:</span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Heavyweight
extensions are great if you want to allow users to work programmatically with
your code by presenting a very clean API or if you want to add or customize
behavior.<span style='mso-spacerun:yes'>  </span>The downside to heavyweight
extension is that it is the most costly approach:<span
style='mso-spacerun:yes'>  </span>it is the most difficult to develop and its
overall usefulness might be limited to those who have intimate knowledge of
your API and customizations.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Deploying
heavyweight extensions so that user may programmatically create instances of your
DSL involve deploying all the <span class=SpellE>plugins</span> involved as
opposed to a deploying a single profile as with lightweight extensions.<span
style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<table class=MsoTableList1 border=1 cellspacing=0 cellpadding=0
style='border-collapse:collapse;border:none;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-yfti-tbllook:
128;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
<tr style='mso-yfti-irow:0'>
<td width=84 valign=top style='width:63.1pt;border-top:solid teal 1.5pt;
border-left:solid teal 1.0pt;border-bottom:none;border-right:none;mso-border-top-alt:
solid teal 1.5pt;mso-border-left-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:64'><b style='mso-bidi-font-weight:normal'>Pros<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:solid teal 1.5pt;
border-left:none;border-bottom:none;border-right:solid teal 1.0pt;mso-border-top-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;background:silver;
mso-shading:white;mso-pattern:solid silver;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Easy
for end users to use programmatically (only 1 meta-model in the end)<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Ability
to override or customize operations and behavior<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Selectively
reuse UML concepts as required.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Constraints
are enforced at compile time ( type safety )<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>API
is domain specific<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Can
add behavior/constraints/structure<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>Isolate
yourself from changes to UML meta-model (you merge a copy into your
meta-model)<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l1 level1 lfo52;tab-stops:list .5in;
mso-yfti-cnfc:64'><span style='font-size:10.0pt;font-family:Arial'>You
can stratify your own specialized meta-model for different levels of
abstraction and DSL concerns.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:64'><span style='font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
<td width=84 valign=top style='width:63.1pt;border-top:none;border-left:solid teal 1.0pt;
border-bottom:solid teal 1.5pt;border-right:none;mso-border-left-alt:solid teal .75pt;
mso-border-bottom-alt:solid teal 1.5pt;padding:0in 5.4pt 0in 5.4pt'>
<p style='mso-yfti-cnfc:128'><b style='mso-bidi-font-weight:normal'>Cons<o:p></o:p></b></p>
</td>
<td width=756 valign=top style='width:567.0pt;border-top:none;border-left:
none;border-bottom:solid teal 1.5pt;border-right:solid teal 1.0pt;mso-border-bottom-alt:
solid teal 1.5pt;mso-border-right-alt:solid teal .75pt;padding:0in 5.4pt 0in 5.4pt'>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l39 level1 lfo55;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Costly
development (more complex than profiles)<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l39 level1 lfo55;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Difficult
to develop such an extension <o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l39 level1 lfo55;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Difficult
to maintain (re-merge)<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l39 level1 lfo55;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Slightly
more difficult to deploy.<span style='mso-spacerun:yes'> 
</span>Involves deploying all <span class=SpellE>plugins</span>
involved.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l39 level1 lfo55;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Cannot
modify existing behavior<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l39 level1 lfo55;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>File
format is non-standard<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l39 level1 lfo55;tab-stops:list .5in;
mso-yfti-cnfc:128'><span style='font-size:10.0pt;font-family:Arial'>Lose
interoperability with other UML based tools since we have a new
meta-model.<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='mso-yfti-cnfc:128'><span style='font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></p>
</td>
</tr>
</table>
<p><o:p>&nbsp;</o:p></p>
<h3>“First Class” extension concepts</h3>
<h4>Subsets</h4>
<p class=MsoNormal>The UML specification describes <span class=SpellE>subsetting</span>
in the following way: </p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>“<span
class=SpellE>Subsetting</span> represents the familiar set-theoretic concept.
It is applicable to the collections represented by association ends, not to the
association itself. It means that the <span class=SpellE>subsetting</span>
association end is a collection that is either equal to the collection that it
is <span class=SpellE>subsetting</span> or a proper subset of that collection.
(Proper <span class=SpellE>subsetting</span> implies that the superset is not
empty and that the subset has fewer members.) <span class=SpellE>Subsetting</span>
is a relationship in the domain of extensional semantics. <i>Specialization </i>is,
in contrast to <span class=SpellE>subsetting</span>, a relationship in the
domain of intentional semantics, which is to say it characterized the criteria
whereby membership in the collection is defined, not by the membership. One
classifier may specialize another by adding or redefining features; a set
cannot specialize another set. A naïve but popular and useful view has it that
as the classifier becomes more specialized, the extent of the collection(s) of
classified objects narrows. In the case of associations, <span class=SpellE>subsetting</span>
ends, according to this view, correlates positively with specializing the
association. This view falls down because it ignores the case of classifiers which,
for whatever reason, denote the empty set. Adding new criteria for membership
does not narrow the extent if the classifier already has a null denotation.”<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>A property
may be marked as the subset of another, as long as every element in the context
of the <span class=SpellE>subsetting</span> property conforms to the
corresponding element in the context of the <span class=SpellE>subsetted</span>
property.<span style='mso-spacerun:yes'>  </span>The UML2 API and code
generator provide support for Java code to enforce subset constraints.<o:p></o:p></span></p>
<p><span class=SpellE>Subsetting</span> comes in two basic flavors: </p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l6 level1 lfo58;tab-stops:list .5in'><b><span
style='font-size:10.0pt;font-family:Arial'>Derived subsets<o:p></o:p></span></b></li>
</ul>
<p class=MsoNormal style='margin-left:25.5pt'><span style='font-size:10.0pt;
font-family:Arial'>If a property is a derived subset, then its value or values
can be computed from the value of one or more other properties.<span
style='mso-spacerun:yes'>  </span>That is to say that the values exist in some
form somewhere else in the meta-model and that those values can be
computed.<span style='mso-spacerun:yes'>  </span>Since the values for derived
subsets are calculated, users cannot add directly to such collections.<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:8.5pt'><span
style='font-size:10.0pt;font-family:Arial'><img border=0 width=64 height=15
id="_x0000_i1035" src="../../../../images/tip.gif">Derived properties are often
specified to be read-only.<span style='mso-spacerun:yes'>   </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:17.0pt'><i
style='mso-bidi-font-style:normal'><u><span style='font-size:10.0pt;font-family:
Arial'>Example:</span></u></i><span style='font-size:10.0pt;font-family:Arial'>
<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:53.0pt'><span class=SpellE><i><span
style='font-size:10.0pt;font-family:Arial'>Package.nestedPackage</span></i></span><span
style='font-size:10.0pt;font-family:Arial'> is a derived subset of <span
class=SpellE><i>Package.packageableElement</i></span>.<span
style='mso-spacerun:yes'>   </span>In this case derivation is based on some
aspect of the property, namely, the type.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l6 level1 lfo58;tab-stops:list .5in'><b><span
style='font-size:10.0pt;font-family:Arial'>Non-derived subsets<o:p></o:p></span></b></li>
</ul>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Arial'>Non-derived subsets also apply to properties
but such properties contain values that cannot be calculated directly from
existing features.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:8.5pt'><span
style='font-size:10.0pt;font-family:Arial'><img border=0 width=64 height=15
id="_x0000_i1036" src="../../../../images/tip.gif"><span
style='mso-spacerun:yes'> </span>Non-derived subsets must be writable.<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:8.5pt'><span
style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='margin-left:8.5pt;text-indent:8.5pt'><i
style='mso-bidi-font-style:normal'><u><span style='font-size:10.0pt;font-family:
Arial'>Example:</span></u></i><span style='font-size:10.0pt;font-family:Arial'><span
style='mso-spacerun:yes'>   </span><o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:.5in;text-indent:19.0pt'><span
class=SpellE><i><span style='font-size:10.0pt;font-family:Arial'>Operation::precondition</span></i></span><span
style='font-size:10.0pt;font-family:Arial'> subset <span class=SpellE><i>Namespace::ownedRule</i></span>
but must be populated explicitly.<span style='mso-spacerun:yes'>  </span>Newly
added items to <span class=SpellE><i>Operation::precondition</i></span> also
get added to the <span class=SpellE><i>Namespace::ownedRule</i></span>
collection.<span style='mso-spacerun:yes'>   </span>A precondition has a “subset-superset”
implementation meaning that if a constraint was added to the owned rule
collection that it would not be added to the precondition list.<span
style='mso-spacerun:yes'>   </span>However, adding to the precondition
collection does mean that it gets added to the owned rule collection.<o:p></o:p></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'><o:p>&nbsp;</o:p></p>
<h4>Redefinition</h4>
<p class=MsoNormal>The UML specification defines redefinition in the following
way:</p>
<p class=MsoNormal><i><span style='font-size:10.0pt;font-family:Arial'>“Redefinition
</span></i><span style='font-size:10.0pt;font-family:Arial'>is a relationship
between features of classifiers within a specialization hierarchy. Redefinition
may be used to change the definition of a feature, and thereby introduce a
specialized classifier in place of the original featuring classifier, but this
usage is incidental. The difference in domain (that redefinition applies to
features) differentiates redefinition from specialization.”<o:p></o:p></span></p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal>More simply put, r<span style='font-size:10.0pt;font-family:
Arial'>edefinition is a way to narrow the scope of a property or to constrain
it.<span style='mso-spacerun:yes'>  </span>If you wish to restrict what can be
added to an existing collection, you should use redefinition.<span
style='mso-spacerun:yes'>  </span>In effect, redefinition replaces an existing
property.<span style='mso-spacerun:yes'>  </span>You cannot widen the scope of
a property with redefinition.<span style='mso-spacerun:yes'> 
</span>Redefinition only makes sense in the context of specialization.<span
style='mso-spacerun:yes'>  </span>That is to say, for example, that a
redefining property must be owned by a <span class=SpellE><i>uml::Class</i></span>
that is a specialization of another <span class=SpellE><i>uml::Class</i></span>
which owns the redefined property. <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Redefinition
can be used to narrow the type of a property by referring to a more specific
type.<span style='mso-spacerun:yes'>  </span>Redefinition of features which are
lists of items replaces the entire list.<span style='mso-spacerun:yes'> 
</span>That is, any items contributed via inheritance will be disregarded and
the redefined list will be recalculated.<span style='mso-spacerun:yes'>  
</span>If you wish to contribute items to an existing list, you can use a
derived union. The name and visibility of a property are not required to match
those of any property it redefines.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>It should
be pointed out that the detailed semantics of redefinition vary for each
specialization of <span class=SpellE><i>RedefinableElement</i></span> in UML,
and that the name of a property which as been redefined does not have to match
the one redefining it.<o:p></o:p></span></p>
<p><i style='mso-bidi-font-style:normal'><u>Example</u></i>: </p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>In the
following example, <span class=SpellE><i>Class::superClass</i></span> redefines
<span class=SpellE><i>Classifier::general</i></span><i>.<span
style='mso-spacerun:yes'>  </span></i>In this case, the name of the redefining
property has changed as well as the type!<o:p></o:p></span></p>
<p style='margin-left:8.5pt;page-break-after:avoid'><!--[if gte vml 1]><v:shape
id="_x0000_i1037" type="#_x0000_t75" style='width:460.5pt;height:286.5pt'>
<v:imagedata src="article_files/image004.gif" o:title="Redefinition"/>
</v:shape><![endif]--><![if !vml]><img border=0 width=614 height=382
src="article_files/image004.gif" v:shapes="_x0000_i1037"><![endif]></p>
<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'>6</span><!--[if supportFields]><span style='mso-element:
field-end'></span><![endif]-->: Redefinition</p>
<p><o:p>&nbsp;</o:p></p>
<h4>Derived Unions</h4>
<p class=MsoNormal>The UML specification defines derived unions in the
following way:</p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>“A property
may be marked as being a derived union. This means that the collection of
values denoted by the property in some context is derived by being the strict
union of all of the values denoted, in the same context, by properties defined
to subset it. If the property has a multiplicity upper bound of 1, then this
means that the values of all the subsets must be null or the same.”<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>More simply
put, derived unions indicate that a feature is the union of one or more
collections or scalar. Derived unions are analogous to abstract methods in
Java.<span style='mso-spacerun:yes'>  </span>As with abstract methods, derived
unions really only make sense in the context of a concrete type defining what
is contributed.<span style='mso-spacerun:yes'>   </span>Derived unions are
useful if you wish to indicate that a particular meta-type defines a feature
but that feature is to be defined within the context of other meta-types.<span
style='mso-spacerun:yes'>   </span>Users of derived unions would create a
property which subsets the property marked as a derived union and then
contributes more objects to the collection.<span style='mso-spacerun:yes'> 
</span>A derived union is typically applied to properties on abstract types
high up in the inheritance hierarchy.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l6 level1 lfo58;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>A derived union is read
only.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l6 level1 lfo58;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>A derived union is derived.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l6 level1 lfo58;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>A derived union is a derived
subset but not vice versa necessarily.<o:p></o:p></span></li>
<li class=MsoNormal style='mso-list:l6 level1 lfo58;tab-stops:list .5in'><span
style='font-size:10.0pt;font-family:Arial'>Concrete types make derived
unions useful by contributing subsets.<o:p></o:p></span></li>
</ul>
<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'><i
style='mso-bidi-font-style:normal'><u>Example</u></i>:</p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>In this
example we see that <span class=SpellE><i>Element::ownedElement</i></span> is a
derived union.<span style='mso-spacerun:yes'>  </span>Element contributes <span
class=SpellE><i>Element::ownedComment</i></span> to that collection.<span
style='mso-spacerun:yes'>  </span>Package contributes <span class=SpellE><i>Package::ownedTemplateSignature</i></span>
and <span class=SpellE><i>Package::profileApplication</i></span> amongst
others.<o:p></o:p></span></p>
<p><!--[if gte vml 1]><v:shape id="_x0000_i1038" type="#_x0000_t75" style='width:464.25pt;
height:461.25pt'>
<v:imagedata src="article_files/image008.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=619 height=615
src="article_files/image009.jpg" v:shapes="_x0000_i1038"><![endif]></p>
<h2>Option summary</h2>
<p>If you have stuck with this document this far you have a sense that the
decision making process of how to extend UML is not straightforward or
simple.<span style='mso-spacerun:yes'>  </span>The following is a table
summarizing the various options.</p>
<p><o:p>&nbsp;</o:p></p>
<table class=MsoTableSimple2 border=0 cellspacing=0 cellpadding=0
style='border-collapse:collapse;mso-yfti-tbllook:160;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
<tr style='mso-yfti-irow:-1;height:47.75pt'>
<td width=168 valign=top style='width:126.1pt;border:solid windowtext 1.0pt;
border-bottom:solid black 1.5pt;mso-border-alt:solid windowtext .5pt;
mso-border-bottom-alt:solid black 1.5pt;padding:0in 5.4pt 0in 5.4pt;
height:47.75pt'>
<p class=MsoNormal style='mso-yfti-cnfc:5'><b><o:p>&nbsp;</o:p></b></p>
<p style='mso-yfti-cnfc:5'><b><o:p>&nbsp;</o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;border:none;border-bottom:solid black 1.5pt;
mso-border-left-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;
height:47.75pt'>
<p align=center style='text-align:center;mso-yfti-cnfc:1'><b><a
href="#_Featherweight_extension"><span style='font-weight:normal'>Featherweight</span></a>
<o:p></o:p></b></p>
</td>
<td width=191 valign=top style='width:143.5pt;border:none;border-bottom:solid black 1.5pt;
background:white;padding:0in 5.4pt 0in 5.4pt;height:47.75pt'>
<p align=center style='text-align:center;mso-yfti-cnfc:1'><b><a
href="#_Lightweight_extension"><span style='font-weight:normal'>Lightweight</span></a><o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;border:none;border-bottom:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt;height:47.75pt'>
<p align=center style='text-align:center;mso-yfti-cnfc:1'><b><a
href="#_Middleweight_extension"><span style='font-weight:normal'>Middleweight</span></a><o:p></o:p></b></p>
</td>
<td width=191 valign=top style='width:143.5pt;border:none;border-bottom:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt;height:47.75pt'>
<p align=center style='text-align:center;mso-yfti-cnfc:1'><b><a
href="#_Heavyweight_extension"><span style='font-weight:normal'>Heavyweight</span></a><o:p></o:p></b></p>
</td>
</tr>
<tr style='mso-yfti-irow:0;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;
mso-border-right-alt:solid windowtext .5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Keyword support<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;border:none;mso-border-top-alt:
solid black 1.5pt;mso-border-left-alt:solid windowtext .5pt;background:#E6E6E6;
padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Simply used as a tag to highlight
certain characteristics</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
<p align=center style='text-align:center'>Part of Stereotype definition in
Superstructure Specification.</p>
</td>
<td width=205 valign=top style='width:153.5pt;border:none;mso-border-top-alt:
solid black 1.5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes*</p>
<p align=center style='text-align:center'>Not directly supported although can
be accomplished if implementer customizes display code.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;border:none;mso-border-top-alt:
solid black 1.5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes*</p>
<p align=center style='text-align:center'>Not directly supported although can
be accomplished if implementer customizes display code.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:white;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Icon support<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
<p align=center style='text-align:center'>Profiles directly support applying
and displaying icons.</p>
</td>
<td width=205 valign=top style='width:153.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes*</p>
<p align=center style='text-align:center'>Not directly supported although can
be accomplished if implementer customizes display code</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes*</p>
<p align=center style='text-align:center'>Not directly supported although can
be accomplished if implementer customizes display code.</p>
</td>
</tr>
<tr style='mso-yfti-irow:2;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid windowtext 1.0pt;
mso-border-right-alt:solid windowtext .5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Restrict or constrain existing types<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;border:none;mso-border-left-alt:
solid windowtext .5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes <o:p></o:p></b></p>
<p align=center style='text-align:center'>Add additional OCL
constraints.<span style='mso-spacerun:yes'>  </span>Some OCL integration
support.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Add additional OCL
constraints.<span style='mso-spacerun:yes'>  </span>Some OCL integration
support.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Add additional OCL
constraints.<span style='mso-spacerun:yes'>  </span>Some OCL integration
support</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:3;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid windowtext 1.0pt;
mso-border-right-alt:solid windowtext .5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Extend existing types<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;border:none;mso-border-left-alt:
solid windowtext .5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
<p align=center style='text-align:center'>Extend existing types through Stereotype
Generalization</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Extend existing types through
generalizations</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Extend existing types through
generalizations</p>
</td>
</tr>
<tr style='mso-yfti-irow:4;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid windowtext 1.0pt;
mso-border-right-alt:solid windowtext .5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Add new types that do not extend an existing
type<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;border:none;mso-border-left-alt:
solid windowtext .5pt;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No<o:p></o:p></b></p>
<p align=center style='text-align:center'>Stereotypes must be applied to some
existing UML concept to come into existence</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Create any type you want without
generalization and use freely.</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Create any type you want without
generalization and use freely.</p>
</td>
</tr>
<tr style='mso-yfti-irow:5;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Remove existing type<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No</b> *</p>
<p align=center style='text-align:center'>You are applying your newly created
Stereotypes to the UML domain.</p>
<p align=center style='text-align:center'>Use of “strict” application of
profile.</p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
<p align=center style='text-align:center'>All of UML pulled in.<span
style='mso-spacerun:yes'>  </span>Your DSL extends all of UML.</p>
<p align=center style='text-align:center'>Simply extend <span class=SpellE>uml.metamodel.uml</span></p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Your DSL extension would extend
only the merged language units that you would be interested in.</p>
<p align=center style='text-align:center'>Development is complicated because
of this merge step.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:6;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:white;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Add new properties<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
<p align=center style='text-align:center'>Apply Profile, apply Stereotype
that adds property. Use <span class=SpellE>setValue</span>() to get and set
property. </p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Getters and setters for newly added
properties are created automatically.</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Getters and setters for newly added
properties are created automatically.</p>
</td>
</tr>
<tr style='mso-yfti-irow:7;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:white;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Remove existing properties<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No<o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No*</p>
<p align=center style='text-align:center'>Can only exclude entire types
depending on granularity of Language Unit.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
</tr>
<tr style='mso-yfti-irow:8;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:white;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Restrict/constrain existing properties<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
<p align=center style='text-align:center'>OCL constraints.</p>
</td>
<td width=205 valign=top style='width:153.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Directly by use of Sub-setting and
Redefinition.<span style='mso-spacerun:yes'>  </span>Indirectly by adding
additional constraints in which case code is generated.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Directly by use of Sub-setting and
Redefinition.<span style='mso-spacerun:yes'>  </span>Indirectly by adding
additional constraints in which case code is generated.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:9;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Add new operations<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No<o:p></o:p></b></p>
<p align=center style='text-align:center'>Not able to specify behavior in a
profile currently.<span style='mso-spacerun:yes'>   </span>In the future, you
might be able to add behavior through OCL constraints.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>You can specify operations and
behavior.</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>You can specify operations and
behavior.</p>
</td>
</tr>
<tr style='mso-yfti-irow:10;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Remove existing operations<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No<o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No*</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes*</p>
<p align=center style='text-align:center'>Since the merged language unit code
gets regenerated it is possible to completely customize.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:11;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Restrict/constrain existing operations<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
<p align=center style='text-align:center'>OCL constraints can be attached to
operations</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
</td>
</tr>
<tr style='mso-yfti-irow:12;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:white;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Reuse UML concepts<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Possible to customize exactly which
concepts to reuse by merging your own Language Units</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:13;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Restrict multiplicity<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
</td>
</tr>
<tr style='mso-yfti-irow:14;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Remove existing constraints<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No<o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
</td>
</tr>
<tr style='mso-yfti-irow:15;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Add new constraints<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Yes<o:p></o:p></b></p>
<p align=center style='text-align:center'>Add OCL constraints.<span
style='mso-spacerun:yes'>  </span>Currently no runtime checks</p>
</td>
<td width=205 valign=top style='width:153.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Add operations that directly
restrict operations.<span style='mso-spacerun:yes'>  </span>Type safety at
compile time.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Add operations that directly
restrict operations.<span style='mso-spacerun:yes'>  </span>Type safety at
compile time.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:16;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>First class extensibility<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No<o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E6E6E6;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
</td>
</tr>
<tr style='mso-yfti-irow:17;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Validation<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No<o:p></o:p></b></p>
</td>
<td width=205 valign=top style='width:153.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Custom validation stubs are
automatically generated.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Custom validation stubs are
automatically generated.</p>
</td>
</tr>
<tr style='mso-yfti-irow:18;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E0E0E0;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Programmatic usage<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Easy</p>
<p align=center style='text-align:center'>Simply apply tag.</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Awkward<o:p></o:p></b></p>
<p align=center style='text-align:center'>*Programmatic usage covered in
future document</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Easy</p>
<p align=center style='text-align:center'>Concepts are straight forward and
familiar to developers.</p>
<p align=center style='text-align:center'>*Programmatic usage covered in
future document</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Easy</p>
</td>
</tr>
<tr style='mso-yfti-irow:19;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E0E0E0;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Efficiency of running code<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Very efficient</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Not optimal</p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Very efficient</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Very efficient</p>
</td>
</tr>
<tr style='mso-yfti-irow:20;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Cost of development<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Low</p>
<p align=center style='text-align:center'>Trivial development</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Medium<o:p></o:p></b></p>
<p align=center style='text-align:center'>Extension technique is well defined
and documented.</p>
</td>
<td width=205 valign=top style='width:153.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>High</p>
<p align=center style='text-align:center'>Developer must understand complex
concepts such as redefinition, <span class=SpellE>subsetting</span>, derived
unions</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Highest</p>
<p align=center style='text-align:center'>Must merge language units and
developer must understand complex concepts such as redefinition, <span
class=SpellE>subsetting</span>, derived unions</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:21;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E0E0E0;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Ability to evolve<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Easy</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Easy<o:p></o:p></b></p>
<p align=center style='text-align:center'>Just modify profile and reapply</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Difficult</p>
<p align=center style='text-align:center'>Regenerate code</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Difficult</p>
<p align=center style='text-align:center'>Regenerate code</p>
</td>
</tr>
<tr style='mso-yfti-irow:22;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Deploy so end users can work with<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>N/A</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:white;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>Easy<o:p></o:p></b></p>
<p align=center style='text-align:center'>Deploy profile, user must apply
profile and apply stereotype.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=205 valign=top style='width:153.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Easy</p>
<p align=center style='text-align:center'>Deploy <span class=SpellE>plugins</span></p>
</td>
<td width=191 valign=top style='width:143.5pt;padding:0in 5.4pt 0in 5.4pt;
height:13.85pt'>
<p align=center style='text-align:center'>Easy</p>
<p align=center style='text-align:center'>Deploy <span class=SpellE>plugins</span></p>
</td>
</tr>
<tr style='mso-yfti-irow:23;mso-yfti-lastrow:yes;height:13.85pt'>
<td width=168 valign=top style='width:126.1pt;border:none;border-right:solid black 1.5pt;
background:#E0E0E0;padding:0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p style='mso-yfti-cnfc:4'><b>Dependency on UML implementation<o:p></o:p></b></p>
</td>
<td width=145 valign=top style='width:108.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No</p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'>No</b> *</p>
<p align=center style='text-align:center'>Unless the meta-type is removed
altogether your extension will be valid.</p>
</td>
<td width=205 valign=top style='width:153.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>Yes</p>
<p align=center style='text-align:center'>Generator model references <span
class=SpellE>uml.metamodel.uml</span> which causes dependency on a particular
version of UML2.<span style='mso-spacerun:yes'>  </span>Depends on uml2
implementation</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
<td width=191 valign=top style='width:143.5pt;background:#E0E0E0;padding:
0in 5.4pt 0in 5.4pt;height:13.85pt'>
<p align=center style='text-align:center'>No *</p>
<p align=center style='text-align:center'>You will be dependent on your
merged model based on language units but you control that.</p>
<p align=center style='text-align:center'><o:p>&nbsp;</o:p></p>
</td>
</tr>
</table>
<p><o:p>&nbsp;</o:p></p>
<h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Conclusion</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'>Congratulations!
You’ve made it this far, so you’ve gone through the thought process of
selecting the extension technique that is right for you.<span
style='mso-spacerun:yes'>  </span>Hopefully enough information has been provided
to enable you to decisively conclude the right approach for you.</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'>We
have explored some of the pros and cons of each type of extension as well as
provided a summary of all the techniques.<span style='mso-spacerun:yes'> 
</span>Detailed information of how to create heavy-weight extensions will be
explored in more detail in future articles.</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'><img
border=0 width=63 height=14 id="_x0000_i1039" src="../../../../images/tip.gif">The
main conclusion of this article is: The use of <a href="#_Hlt174419544">Middleweight
extensions</a> is discouraged and <a href="#_Lightweight_extension">Lightweight
extensions</a> should be your first instinct.<span style='mso-spacerun:yes'>  
</span>Heavyweight extensions should be used in rare cases where much control
is required.</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/uml2">home
page</a> or join the <a href="news://news.eclipse.org/eclipse.modeling.mdt.uml2">newsgroup</a>.</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'>[1]
K. Hussey. “Getting Started with UML2”. International Business Machines Corp.,
2004, 2006.</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'>[2]
K. Hussey. “Introduction to UML2 Profiles”. International Business Machines
Corp., 2004, 2006.</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'>[3]
UML Testing Profile. Version 1.0, formal/05-07-07. OMG., July 2005.</p>
<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><o:p>&nbsp;</o:p></p>
<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><o:p>&nbsp;</o:p></p>
<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
style='font-size:7.5pt'>Java and all Java-based trademarks and logos are trademarks
or registered trademarks of Sun Microsystems, Inc. in the </span><st1:country-region><st1:place><span
style='font-size:7.5pt'>United States</span></st1:place></st1:country-region><span
style='font-size:7.5pt'>, other countries, or both.</span></p>
</div>
</body>
</html>