blob: 4adc55c6f3c6ef2029e02afc8849c4ad40c75175 [file] [log] [blame]
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=PowerPoint.Slide>
<meta name=Generator content="Microsoft PowerPoint 10">
<link id=Main-File rel=Main-File
href="../EclipseCon2008_LongTalk_NewFeaturesOfUML2.htm">
<link rel=Preview href=preview.wmf>
<meta name=Robots content=NoIndex>
<script src=script.js></script><script><!--
if( !(IsWin("PPTOtl")||IsWin("PPTNav")||IsWin("PPTOtlNav")) )
{
obj = GetObj("Main-File")
parent.location.href=obj.href
}
var gOtlHiliteClr="#ffffff",gOtlNormalClr="#000000",gOtlActiveClr="#ffff00",gSelected="",gTxtState=false,gChildEntryTable=new Array()
function Load()
{
if( IsWin("PPTOtl" ) ){ LoadOtl(); parent.gOtlLoaded=true; return }
if( g_supportsPPTHTML ) {
if( IsWin("PPTNav" ) ){ LoadNav("NavObj",UpdNav); parent.gNavLoaded=true; return }
if( IsWin("PPTOtlNav" ) ){ LoadNav("OtlNavObj",UpdOtlNav); parent.gOtlNavLoaded=true; return }
}
}
function Upd(){ if( IsWin("PPTNav") ) LoadNav("NavObj",UpdNav) }
function LoadNav( oId,UpdFunc )
{
document.ondragstart=CancelDrag
document.onselectstart=CancelDrag
document.body.style.margin=2
UpdFunc()
obj=document.all.item(oId)
obj.style.display="block"
obj.style.visibility="visible"
document.bgColor="threedface"
if( parent.frames["PPTNts"] )
notesBtn.style.display = ""
if( parent.gHasNarration )
nb_voiceBorder.style.display = ""
}
function LoadOtl()
{
var otl=GetObj("OtlObj")
otl.style.display="block"
otl.style.visibility="visible"
if( gOtlActiveClr == "" ) gOtlActiveClr=document.linkColor
if( gOtlHiliteClr == "" ) gOtlHiliteClr=document.fgColor
if( gOtlNormalClr == "" )
gOtlNormalClr=document.bgColor
else
document.bgColor=gOtlNormalClr
InitArray()
if( ObjExists( parent.gCurSld ) ) {
ChangeState( parent.gCurSld,gOtlNormalClr,gOtlHiliteClr )
gSelected=parent.gCurSld
}
else gSelected = -1
UpdOtl()
}
function UpdOtl(){ UpdIdx(parent.gCurSld) }
function UpdIdx( idx )
{
if( gSelected != idx ) {
if( gSelected > 0 )
ChangeState( gSelected,gOtlHiliteClr,gOtlNormalClr )
if( ObjExists( idx ) ) {
gSelected = idx
ChangeState( gSelected,gOtlNormalClr,gOtlHiliteClr )
}
else gSelected = -1
}
if( gTxtState != parent.gOtlTxtExp ) {
state = "block"
if( !parent.gOtlTxtExp )
state="none"
for(ii=0; ii<gChildEntryTable.length; ii++) {
obj=gChildEntryTable[ii];
if( obj.id == null ) continue;
if( obj.id.indexOf("PPTC") >= 0 )
obj.style.display=state;
}
gTxtState=parent.gOtlTxtExp
if( ObjExists( gSelected ) )
ChangeState( gSelected,gOtlNormalClr,gOtlHiliteClr )
}
}
function InitArray()
{
count=0
var list=GetTags(document,"DIV");
for(ii=0; ii<list.length; ii++) {
obj=list.item(ii)
if( obj.id == null ) continue
if( obj.id.indexOf("PPTC") >= 0 )
gChildEntryTable[count++]=obj
}
}
function ChangeState( idx,fgColor,bgColor )
{
obj=GetObj("PPTL"+idx)
obj.style.color=fgColor
obj=GetObj("PPTP"+idx)
obj.style.backgroundColor=bgColor
}
function ChgClr( o,clr ){ if( o.id != "PPTL"+gSelected ) o.style.color=clr }
function Over( src ){ ChgClr(GetLink(src),gOtlActiveClr) }
function Out( src ){ ChgClr(GetLink(src),gOtlHiliteClr) }
function Follow(src){ window.location.href = GetLink(src).href; }
function ObjExists( ii ) { obj=GetObj("PPTP"+ii ); return( obj ) }
function GoToSld( href ){ UpdIdx(parent.GetSldNum(href)); parent.GoToSld( href ) }
function CancelDrag(){ window.event.cancelBubble=true;window.event.returnValue=false}
function GetLink(src)
{
if(src.tagName=="A") return src
else return GetTags(src,"A").item(0)
}
function UpdNav()
{
txt = "<center>";
if( parent.GetHrefObj( parent.gCurSld ).mOrigVis == 1 )
txt += "Slide " + parent.GetCurSldNum() + " of " + parent.GetNumSlds()
else
txt += "Hidden Slide"
txt += "</center>";
nav_text.innerHTML = txt;
if( !parent.HasPrevSld() )
gBtnArr["nb_prev"].Enabled(0)
else
gBtnArr["nb_prev"].Enabled(1)
if( !parent.HasNextSld() )
gBtnArr["nb_next"].Enabled(0)
else
gBtnArr["nb_next"].Enabled(1)
gBtnArr["nb_nts"].SetEnabled()
gBtnArr["nb_nts"].SetFlag( parent.gHasNts )
gBtnArr["nb_sldshw"].Enabled(1)
gBtnArr["nb_voice"].Enabled(1)
}
function UpdOtlNav()
{
gBtnArr["nb_otl"].SetEnabled();
if( parent.gOtlOpen )
gBtnArr["nb_otlTxt"].Enabled( true );
else
document.all.item("nb_otlTxtBorder").style.visibility = "hidden";
}
//--></script>
<style>
<!--.PTxt
{position:relative;
width:100%;
margin-top:5px;
padding-left:2px;
font-weight:bold;}
.CTxt
{position:relative;
width:100%;
margin-top:5px;}
a
{color:white;
text-decoration:none;}
ul
{color:white;
margin-bottom:0px;
margin-left:20px;}
.sldNum
{margin-top:5px;
color:white;}
.button
{position:absolute;
width:32px;
height:20px;
border-style:solid;
border-width:1px;
border-color:threedface;}
-->
</style>
</head>
<body onload="Load()" style='margin:2px'>
<div id=NavObj onload="Load()" onmouseover="BtnOnOver()"
onmousedown="BtnOnDown()" onmouseout="BtnOnOut()" onmouseup="BtnOnUp()"
onkeypress="_KPH()" style='display:none;visibility:hidden'>
<table id="notesBtn" style='position:absolute;display:none;width:70px' align=left cellpadding=0
cellspacing=0>
<td nowrap>
<div id="nb_ntsElem" align=center style='position:relative;padding:3px;
font-family:Arial;color:buttontext;font-size:9pt'><img src="notes_flag.gif"
border=0 id="notes_flag" style='display:none'><span
style='mso-spacerun:yes'>  </span>Notes</div>
<div title="Show/Hide Notes" id="nb_nts" style='position:absolute;top:0%;
left:0%;width:100%;height:100%'></div>
</td>
</table>
<table style='position:relative;width:70px' align=right cellpadding=0 cellspacing=0>
<td nowrap>
<div id="nb_sldshwText" title="Full
Screen Slide Show" align=center style='position:relative;margin-left:20px;padding:3px;
font-family:Arial;color:buttontext;font-size:9pt;cursor:default'>Slide
Show</div>
<div id="nb_sldshwBorder" title="Full Screen Slide Show" style='position:absolute;top:0%;left:0%;width:100%;height:20px'>
<div style='position:absolute;clip:rect(0px, 18px, 18px, 0px)'><img
src="buttons.gif" id="nb_sldshw" style='position:relative;left:-254px'></div>
</div>
</td>
<td>
<div id="nb_voiceBorder" style='display:none;position:absolute;top:0;left:-40px;
width:20px;height:20px'>
<div style='position:absolute;clip:rect(0px, 18px, 18px, 0px)'><img
src="buttons.gif" id="nb_voice" title="Pause/Play Narration" style='position:
relative;left:-290px'></div>
</div>
</td>
</table>
<table style='position:relative' align=center cellpadding=0 cellspacing=0>
<td nowrap>
<div id="nb_prevBorder" class=button style='left:-30px'>
<div style='position:absolute;clip:rect(0px, 30px, 18px, 0px)'><img
src="buttons.gif" id="nb_prev" title="Previous Slide" style='position:relative;
left:0px'></div>
</div>
<span id="nav_text" style='position:relative;top:3px;width:100px;font-family:
Arial;color:buttontext;font-size:9pt'></span>
<div id="nb_nextBorder" class=button>
<div style='position:absolute;clip:rect(0px, 30px, 18px, 0px)'><img
src="buttons.gif" id="nb_next" title="Next Slide" style='position:relative;
left:-90px'></div>
</div>
</td>
</table>
</div>
<div id=OtlNavObj onload="Load()" onmouseover="BtnOnOver()"
onmousedown="BtnOnDown()" onmouseout="BtnOnOut()" onmouseup="BtnOnUp()"
onkeypress="_KPH()" style='display:none;visibility:hidden'>
<table style='position:relative;width:70px' align=left cellpadding=0 cellspacing=0>
<td nowrap><div title="Show/Hide
Outline" id="nb_otl"
style='position:absolute;top:0%;left:0%;width:100%;height:100%;cursor:default'>
<div id="nb_otlElem" align=center style='position:relative;padding:3px;font-family:Arial;
color:buttontext;font-size:9pt'>Outline</div></div>
</td>
</table>
<table style='position:relative' align=center cellpadding=0 cellspacing=0>
<td>
<div style='position:absolute;left:-18px;width:24px;height:20px;border-style:
solid;border-width:1px;border-color:threedface' id="nb_otlTxtBorder">
<div style='position:absolute;clip:rect(0px, 22px, 18px, 0px)'><img
src=buttons.gif id="nb_otlTxt" title="Expand/Collapse Outline"
style='position:relative;left:-157px'></div>
</div>
</td>
</table>
</div>
<div id=OtlObj style='display:none;visibility:hidden;'>
<table width="100%" style='font-family:Arial;font-size:9pt'>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>1</font></div>
</td>
<td width="100%">
<div id=PPTP1 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0001.htm');" id=PPTL1>New Features of UML2:
Generics, Static Profile Definition and OCL integration</a></font></div>
<div id=PPTC1 class=CTxt style='display:none'><font size=2>
<ul>
<li>Long Talk</li>
<li>(170)</li>
<br>
<br>
<li>James Bruck</li>
<li>IBM Rational Software</li>
<li>UML2 Committer</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>2</font></div>
</td>
<td>
<div id=PPTP2 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0010.htm');" id=PPTL2>Agenda</a></font></div>
<div id=PPTC2 class=CTxt style='display:none'><font size=2>
<ul>
<li>Introduction</li>
<br>
<br>
<li>New Features:</li>
<br>
<br>
<ul>
<li>Generics</li>
</ul>
<br>
<ul>
<li>Static Profile Definition</li>
</ul>
<br>
<ul>
<li>OCL Integration</li>
<br>
<br>
</ul>
<li>Summary</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>3</font></div>
</td>
<td>
<div id=PPTP3 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0011.htm');" id=PPTL3>Introduction: Fill up
your Toolbox</a></font></div>
<div id=PPTC3 class=CTxt style='display:none'><font size=2>
<ul>
<li>Creating architectures using basic modeling techniques (Class diagrams,
Sequence diagrams etc.) is just the first step.</li>
<ul>
<br>
<br>
</ul>
<li>Expand your toolbox by adding:</li>
<ul>
<li>Generics/Templates</li>
<ul>
<li>Ability to express generic reusable behavior.</li>
<br>
<br>
</ul>
<li>Static profile definition</li>
<ul>
<li>Generate code from profile</li>
<li>Now you can specify behavior in your profiles.</li>
<br>
<br>
</ul>
<li>OCL Integration</li>
<ul>
<li>Ability to create constraints, attach them to your model and have all
the code necessary to evaluate the constraints using the MDT-OCL
project.</li>
<br>
<br>
</ul>
</ul>
<li>Combination of these tools allows you to make practical use of your
models.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>4</font></div>
</td>
<td>
<div id=PPTP4 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0012.htm');" id=PPTL4>Agenda</a></font></div>
<div id=PPTC4 class=CTxt style='display:none'><font size=2>
<ul>
<li>Introduction</li>
<br>
<br>
<li>New Features</li>
<br>
<br>
<ul>
<li>Generics</li>
</ul>
<br>
<ul>
<li>Static Profile Definition</li>
</ul>
<br>
<ul>
<li>OCL Integration</li>
<br>
<br>
</ul>
<li>Summary</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>5</font></div>
</td>
<td>
<div id=PPTP5 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0013.htm');" id=PPTL5>Generics: Why Bother?</a></font></div>
<div id=PPTC5 class=CTxt style='display:none'><font size=2>
<ul>
<li>Generics in Java™.</li>
<ul>
<li>Enhance reusability of an API by isolating generic behavior.</li>
<li>Lists and Maps are commonly used since the implementation doesn’t care
about the types contained – their clients do.</li>
<ul>
<br>
<br>
</ul>
</ul>
<li>Generics in UML®.</li>
<ul>
<li>Practical Uses</li>
<ul>
<li>In an EMF-based modeling world, a practical end-goal of modeling is to
generate code.</li>
<li>Understanding how to express templates and model precisely using UML
constructs is useful.</li>
</ul>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>6</font></div>
</td>
<td>
<div id=PPTP6 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0014.htm');" id=PPTL6>Generics: Overview</a></font></div>
<div id=PPTC6 class=CTxt style='display:none'><font size=2>
<ul>
<li>The code generation process from UML to Java uses EMF.</li>
<ul>
<li><span style='mso-spacerun:yes'>  </span>An intermediate Ecore
representation is created.</li>
<li><span style='mso-spacerun:yes'>  </span>Behind the scenes, MDT-UML2
converts from UML to Ecore.</li>
</ul>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>7</font></div>
</td>
<td>
<div id=PPTP7 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0015.htm');" id=PPTL7>Generics: Concepts – The
Players</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>8</font></div>
</td>
<td>
<div id=PPTP8 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0016.htm');" id=PPTL8>Generics: Concepts - UML</a></font></div>
<div id=PPTC8 class=CTxt style='display:none'><font size=2>
<ul>
<li>A TemplateableElement that contains a TemplateSignature is referred to
as a Template.</li>
<br>
<br>
<li><span style='mso-spacerun:yes'> </span>If a TemplateableElement has
template parameters, a small dashed rectangle is superimposed.</li>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>9</font></div>
</td>
<td>
<div id=PPTP9 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0017.htm');" id=PPTL9>Generics: Concepts - UML</a></font></div>
<div id=PPTC9 class=CTxt style='display:none'><font size=2>
<ul>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>10</font></div>
</td>
<td>
<div id=PPTP10 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0018.htm');" id=PPTL10>Generics: Concepts –
The Players</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>11</font></div>
</td>
<td>
<div id=PPTP11 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0063.htm');" id=PPTL11>Generics: Concepts -
Java</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>12</font></div>
</td>
<td>
<div id=PPTP12 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0019.htm');" id=PPTL12>Generics: Concepts -
UML</a></font></div>
<div id=PPTC12 class=CTxt style='display:none'><font size=2>
<ul>
<li>TemplateBinding</li>
<ul>
<li>Substitution of actual parameters for the formal template parameters.</li>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>13</font></div>
</td>
<td>
<div id=PPTP13 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0021.htm');" id=PPTL13>Generics: Examples –
Generic Operations</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>14</font></div>
</td>
<td>
<div id=PPTP14 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0022.htm');" id=PPTL14>Generics: Examples -
Wildcards</a></font></div>
<div id=PPTC14 class=CTxt style='display:none'><font size=2>
<ul>
<li>In Java, wildcards are represented by ? which stands for an unknown
type.</li>
<br>
<br>
<li>When we talk about bounds we refer to the ability to specify that
bindings must either be the super type of some classifier or extend some
classifier.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>15</font></div>
</td>
<td>
<div id=PPTP15 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0023.htm');" id=PPTL15>Generics: Examples -
Wildcards</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>16</font></div>
</td>
<td>
<div id=PPTP16 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0024.htm');" id=PPTL16>Generics: Enhanced
Profile</a></font></div>
<div id=PPTC16 class=CTxt style='display:none'><font size=2>
<ul>
<li>UML cannot capture everything.</li>
<li>&lt;&lt;eGenericType&gt;&gt;</li>
<ul>
<li>For code generation, we want to mark classes as intermediary constructs
(not included in final Java representation).</li>
<li>Introduce upper and lower bounds.</li>
</ul>
<li>&lt;&lt;eTypeParameter&gt;&gt;</li>
<ul>
<li>Introduce multiple bounds.</li>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>17</font></div>
</td>
<td>
<div id=PPTP17 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0025.htm');" id=PPTL17>Generics: Examples -
Wildcards</a></font></div>
<div id=PPTC17 class=CTxt style='display:none'><font size=2>
<ul>
<li>Let’s revisit our previous example with wildcards and now consider
stereotype properties.</li>
<ul>
<li>We can set the ‘upper’ and ‘lower’ bounds on our
&lt;&lt;EGeneric&gt;&gt; stereotype.</li>
<li>In the case of our Wildcard_extends_Car, we have the following:</li>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>18</font></div>
</td>
<td>
<div id=PPTP18 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0026.htm');" id=PPTL18>Generics: Examples –
Multiple Constraining Classifiers</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>19</font></div>
</td>
<td>
<div id=PPTP19 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0078.htm');" id=PPTL19>Generics: Demo</a></font></div>
<div id=PPTC19 class=CTxt style='display:none'><font size=2>
<ul>
<li>Code generation from a model with generics specified.</li>
<br>
<br>
<ul>
<br>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>20</font></div>
</td>
<td>
<div id=PPTP20 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0028.htm');" id=PPTL20>Generics: Tips &amp;
Resources</a></font></div>
<div id=PPTC20 class=CTxt style='display:none'><font size=2>
<ul>
<li>Anything that can be expressed in Java can be represented with UML
constructs.</li>
<br>
<br>
<li>Remember that in UML, you need concrete representations of your generic
classes (bound classes) in order to use them.</li>
<ul>
<li>These extra constructs are not required in Java or EMF.</li>
</ul>
<br>
<li>If you get stuck</li>
<ul>
<li>Use the Ecore to UML2 converter.<span style='mso-spacerun:yes'> 
</span>Start with EMF representation and then generate UML
representation.</li>
<li>Can be simpler for those who understand EMF.</li>
<ul>
<br>
<br>
</ul>
</ul>
<li>Changes to upcoming version of UML meta-model.</li>
<ul>
<li>RTF issue: http://www.omg.org/issues/uml2-rtf.html#Issue11243</li>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>21</font></div>
</td>
<td>
<div id=PPTP21 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0029.htm');" id=PPTL21>Generics: References</a></font></div>
<div id=PPTC21 class=CTxt style='display:none'><font size=2>
<ul>
<li>More in-depth articles can be found on the UML2 wiki</li>
<ul>
<li><span style='mso-spacerun:yes'> </span>http://wiki.eclipse.org/MDT-UML2</li>
</ul>
<br>
<li>UML superstructure specification</li>
<ul>
<li><span style='mso-spacerun:yes'> </span>http://www.omg.org/cgi-bin/doc?formal/07-02-05</li>
</ul>
<br>
<li>The generics tutorial</li>
<ul>
<li>http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf</li>
<br>
<br>
</ul>
<li>Java Generics FAQ by Angelika Langer</li>
<ul>
<li>http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html</li>
<br>
<br>
</ul>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>22</font></div>
</td>
<td>
<div id=PPTP22 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0030.htm');" id=PPTL22>Agenda</a></font></div>
<div id=PPTC22 class=CTxt style='display:none'><font size=2>
<ul>
<li>Introduction</li>
<br>
<br>
<li>New Features:</li>
<br>
<br>
<ul>
<li>Generics</li>
</ul>
<br>
<ul>
<li>Static Profile Definition</li>
</ul>
<br>
<ul>
<li>OCL Integration</li>
<br>
<br>
</ul>
<li>Summary</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>23</font></div>
</td>
<td>
<div id=PPTP23 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0031.htm');" id=PPTL23>Static Profile
Definition: What is a profile?</a></font></div>
<div id=PPTC23 class=CTxt style='display:none'><font size=2>
<ul>
<li>A profile is a lightweight extension mechanism for UML.</li>
<ul>
<li>Does not specialize meta-types from UML, rather uses meta-class
extensions.</li>
</ul>
<br>
<li>It enables customization of UML for a specific domain to make modeling
easier.</li>
<br>
<br>
<li>Primary extension construct is the Stereotype.</li>
<br>
<br>
<li>Stereotypes can be used to add:</li>
<ul>
<li>Keywords</li>
<li>Constraints</li>
<li>Images</li>
<li>Properties</li>
<li>Behavior</li>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>24</font></div>
</td>
<td>
<div id=PPTP24 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0067.htm');" id=PPTL24>Static Profile
Definition: Example</a></font></div>
<div id=PPTC24 class=CTxt style='display:none'><font size=2>
<ul>
<li>Stereotype extending Class meta-class from UML.</li>
<ul>
<br>
<br>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>25</font></div>
</td>
<td>
<div id=PPTP25 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0074.htm');" id=PPTL25>Static Profile
Definition: Workflow - Current</a></font></div>
<div id=PPTC25 class=CTxt style='display:none'><font size=2>
<ul>
<li>We create our profile using UML.</li>
<li>Define our profile.</li>
<li>Use our profile by setting applying profile and stereotypes.</li>
<li>Get and set properties of the stereotype.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>26</font></div>
</td>
<td>
<div id=PPTP26 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0071.htm');" id=PPTL26>Static Profile
Definition: Current Workflow</a></font></div>
<div id=PPTC26 class=CTxt style='display:none'><font size=2>
<ul>
<li>The current workflow involves “defining” our profiles.</li>
<ul>
<li>Generates an Ecore representation.</li>
<li>Makes use of dynamic EMF.</li>
<ul>
<br>
<br>
</ul>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>27</font></div>
</td>
<td>
<div id=PPTP27 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0066.htm');" id=PPTL27>Static Profile
Definition: What is it?</a></font></div>
<div id=PPTC27 class=CTxt style='display:none'><font size=2>
<ul>
<li>When we talk about “Static Profile Definition” we are talking about
generating code from our profile.</li>
<br>
<br>
<li>The “define” step is therefore no longer necessary.<span
style='mso-spacerun:yes'>  </span>It is replaced by a code generation
step.</li>
<ul>
<br>
<br>
</ul>
<li>Both workflows will be supported going forward.</li>
<ul>
<li>Older workflow can be useful for rapid testing.</li>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>28</font></div>
</td>
<td>
<div id=PPTP28 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0035.htm');" id=PPTL28>Static Profile
Definition: Workflow (New)</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>29</font></div>
</td>
<td>
<div id=PPTP29 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0037.htm');" id=PPTL29>Static Profile
Definition: Setting nsURI.</a></font></div>
<div id=PPTC29 class=CTxt style='display:none'><font size=2>
<ul>
<li>Set the nsURI of the &lt;&lt;EPackage&gt;&gt; stereotype applied to the
profile root.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>30</font></div>
</td>
<td>
<div id=PPTP30 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0038.htm');" id=PPTL30>Static Profile
Definition: Code Generation.</a></font></div>
<div id=PPTC30 class=CTxt style='display:none'><font size=2>
<ul>
<li>Generating Code for your Profile.</li>
<li>Reference UML and Ecore generator models since you do not need to
regenerate code for them.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>31</font></div>
</td>
<td>
<div id=PPTP31 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0039.htm');" id=PPTL31>Static Profile
Definition: Extension Point.</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>32</font></div>
</td>
<td>
<div id=PPTP32 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0076.htm');" id=PPTL32>Static Profile
Definition: Demo</a></font></div>
<div id=PPTC32 class=CTxt style='display:none'><font size=2>
<ul>
<li>Code generation.</li>
<li>Derived properties in profiles.</li>
<br>
<br>
<ul>
<br>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>33</font></div>
</td>
<td>
<div id=PPTP33 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0075.htm');" id=PPTL33>Static Profile
Definition: Why Bother?</a></font></div>
<div id=PPTC33 class=CTxt style='display:none'><font size=2>
<ul>
<li>Introduce behavior.</li>
<br>
<br>
<li>Customize generated code.</li>
<br>
<br>
<li>Opens up possibilities for derived constraints.</li>
<br>
<br>
<li>Getting and setting values are easier and more intuitive since an
instance of the object is returned.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>34</font></div>
</td>
<td>
<div id=PPTP34 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0064.htm');" id=PPTL34>Static Profile
Definition: Examples - Current</a></font></div>
<div id=PPTC34 class=CTxt style='display:none'><font size=2>
<ul>
<li>Applying stereotype.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>35</font></div>
</td>
<td>
<div id=PPTP35 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0040.htm');" id=PPTL35>Static Profile
Definition: Examples - New</a></font></div>
<div id=PPTC35 class=CTxt style='display:none'><font size=2>
<ul>
<li>Applying stereotype.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>36</font></div>
</td>
<td>
<div id=PPTP36 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0041.htm');" id=PPTL36>Static Profile
Definition: Versioning Issues</a></font></div>
<div id=PPTC36 class=CTxt style='display:none'><font size=2>
<ul>
<li>With the older way of working with profiles, when changes are made, we
must re-define the profile.</li>
<ul>
<li>We are left with multiple Ecore representations.</li>
<li>These representations can be difficult to maintain.</li>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>37</font></div>
</td>
<td>
<div id=PPTP37 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0072.htm');" id=PPTL37>Static Profile
Definition: Versioning Issues</a></font></div>
<div id=PPTC37 class=CTxt style='display:none'><font size=2>
<ul>
<li>With Static Profile Definition, if we introduce API breaking changes, we
would have to update the nsURI.</li>
<ul>
<li>Similar to how meta-models change.</li>
<br>
<br>
</ul>
<li>We don’t have to change the nsURI if the changes are backward
compatible.</li>
<ul>
<br>
<br>
</ul>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>38</font></div>
</td>
<td>
<div id=PPTP38 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0058.htm');" id=PPTL38>Static Profile
Definition: Summary</a></font></div>
<div id=PPTC38 class=CTxt style='display:none'><font size=2>
<ul>
<li>Preferred approach going forward.</li>
<br>
<br>
<li>Easier to work with.</li>
<br>
<br>
<li>Introduce behavior.</li>
<br>
<br>
<li>Combine with our next topic: OCL Integration.</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>39</font></div>
</td>
<td>
<div id=PPTP39 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0042.htm');" id=PPTL39>Static Profile
Definition: References</a></font></div>
<div id=PPTC39 class=CTxt style='display:none'><font size=2>
<ul>
<li>More in-depth articles can be found on the UML2 wiki: http://wiki.eclipse.org/MDT-UML2</li>
<br>
<br>
<li>New and Noteworthy section: http://wiki.eclipse.org/index.php/MDT_1.0_New_and_Noteworthy#Static_Profile_Definition</li>
<br>
<br>
<br>
<ul>
<br>
</ul>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>40</font></div>
</td>
<td>
<div id=PPTP40 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0043.htm');" id=PPTL40>Agenda</a></font></div>
<div id=PPTC40 class=CTxt style='display:none'><font size=2>
<ul>
<li>Introduction</li>
<br>
<br>
<li>New Features:</li>
<br>
<br>
<ul>
<li>Generics</li>
</ul>
<br>
<ul>
<li>Static Profile Definition</li>
</ul>
<br>
<ul>
<li>OCL Integration</li>
<br>
<br>
</ul>
<li>Summary</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>41</font></div>
</td>
<td>
<div id=PPTP41 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0044.htm');" id=PPTL41>OCL Integration: What
is it?</a></font></div>
<div id=PPTC41 class=CTxt style='display:none'><font size=2>
<ul>
<li>OCL is designed to be a simple language for specification of constraints
and queries in models.</li>
<br>
<br>
<li>Specifying Constraints</li>
<br>
<br>
<ul>
<li>Invariant constraint – condition on attributes (or any feature of
context classifier) must always be true.</li>
</ul>
<br>
<ul>
<li>Query – specified as the body expression of an operation.</li>
</ul>
<br>
<li>Have code generated from the expressions entered in the UML model.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>42</font></div>
</td>
<td>
<div id=PPTP42 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0045.htm');" id=PPTL42>OCL Integration: Why
Bother?</a></font></div>
<div id=PPTC42 class=CTxt style='display:none'><font size=2>
<ul>
<li>Constraints can be evaluated at runtime.</li>
<ul>
<li>Automated constraint checking allows greater integrity of the model.</li>
</ul>
<br>
<li>Catch errors early.</li>
<br>
<br>
<li>Embellish your code with doc tags containing OCL.</li>
<br>
<br>
<li>UML is not enough.</li>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>43</font></div>
</td>
<td>
<div id=PPTP43 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0046.htm');" id=PPTL43>OCL Integration:
Example</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>44</font></div>
</td>
<td>
<div id=PPTP44 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0047.htm');" id=PPTL44>OCL Integration:
Example-Invariant Constraint</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>45</font></div>
</td>
<td>
<div id=PPTP45 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0061.htm');" id=PPTL45>OCL Integration:
Example-Invariant Constraint</a></font></div>
<div id=PPTC45 class=CTxt style='display:none'><font size=2>
<ul>
<li>OCL dependencies automatically added.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>46</font></div>
</td>
<td>
<div id=PPTP46 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0048.htm');" id=PPTL46>OCL Integration:
Example-Invariant Constraint</a></font></div>
<div id=PPTC46 class=CTxt style='display:none'><font size=2>
<ul>
<li>context: Specifies the element we are referring to.</li>
<ul>
<li>Context in this example is Car</li>
</ul>
<li>self: Keyword that indicates the current object.</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>47</font></div>
</td>
<td>
<div id=PPTP47 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0073.htm');" id=PPTL47>OCL Integration:
Example-Body Condition</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>48</font></div>
</td>
<td>
<div id=PPTP48 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0049.htm');" id=PPTL48>OCL Integration:
Example-Body Condition</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>49</font></div>
</td>
<td>
<div id=PPTP49 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0050.htm');" id=PPTL49>OCL Integration:
Example-Body Condition</a></font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>50</font></div>
</td>
<td>
<div id=PPTP50 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0051.htm');" id=PPTL50>OCL Integration: Code
Generation</a></font></div>
<div id=PPTC50 class=CTxt style='display:none'><font size=2>
<ul>
<br>
<li>Specify that you would like ‘Invariant Constraints’ processed.</li>
<br>
<br>
<li>Specify ‘Operation Bodies’ to be added.</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>51</font></div>
</td>
<td>
<div id=PPTP51 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0077.htm');" id=PPTL51>OCL Integration: Demo</a></font></div>
<div id=PPTC51 class=CTxt style='display:none'><font size=2>
<ul>
<li>Code generation.</li>
<li>Validation.</li>
<ul>
<br>
<br>
</ul>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>52</font></div>
</td>
<td>
<div id=PPTP52 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0062.htm');" id=PPTL52>OCL Integration: Try it
out.</a></font></div>
<div id=PPTC52 class=CTxt style='display:none'><font size=2>
<ul>
<li>Output</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>53</font></div>
</td>
<td>
<div id=PPTP53 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0053.htm');" id=PPTL53>OCL Integration: Tips</a></font></div>
<div id=PPTC53 class=CTxt style='display:none'><font size=2>
<ul>
<li>Have a look at bugzilla https://bugs.eclipse.org/bugs/show_bug.cgi?id=105199
for an example of how to hook in validation of your model</li>
<ul>
<br>
<br>
</ul>
<li>Refer to OCL article at: http://www.eclipse.org/articles/article.php?file=Article-EMF-Codegen-with-OCL/index.html</li>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>54</font></div>
</td>
<td>
<div id=PPTP54 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0054.htm');" id=PPTL54>Agenda</a></font></div>
<div id=PPTC54 class=CTxt style='display:none'><font size=2>
<ul>
<li>Introduction</li>
<br>
<br>
<li>New Features:</li>
<br>
<br>
<ul>
<li>Generics</li>
</ul>
<br>
<ul>
<li>Static Profile Definition</li>
</ul>
<br>
<ul>
<li>OCL Integration</li>
<br>
<br>
</ul>
<li>Summary</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>55</font></div>
</td>
<td>
<div id=PPTP55 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0055.htm');" id=PPTL55>Summary</a></font></div>
<div id=PPTC55 class=CTxt style='display:none'><font size=2>
<ul>
<li>We’ve looked at:</li>
<ul>
<li>Generics</li>
<li>Static Profile Definition</li>
<li>OCL Integration</li>
<br>
<br>
</ul>
<li>Tooling should make it easy for you to use these features.</li>
<br>
<br>
<li>Try it out and report issues.</li>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>56</font></div>
</td>
<td>
<div id=PPTP56 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0057.htm');" id=PPTL56>&quot;Thank You!&quot;</a></font></div>
<div id=PPTC56 class=CTxt style='display:none'><font size=2>
<ul>
<li>Thank You!</li>
</ul>
</font></div>
</td>
</tr>
<tr onmouseover="Over(this)" onmouseout="Out(this)" onclick="Follow(this)"
style='cursor:hand'>
<td align=right valign=top>
<div class=sldNum><font size=2>57</font></div>
</td>
<td>
<div id=PPTP57 class=PTxt><font size=2><a
href="javascript:GoToSld('slide0059.htm');" id=PPTL57>Legal Notices</a></font></div>
<div id=PPTC57 class=CTxt style='display:none'><font size=2>
<ul>
<br>
<li>Copyright © IBM Corp., 2007-2008.<span style='mso-spacerun:yes'> 
</span>All rights reserved.<span style='mso-spacerun:yes'> 
</span>Source code in this presentation is made available under the EPL,
v1.0; remainder of the presentation is licensed under Creative Commons
Att. Nc Nd 2.5 license.</li>
<br>
<br>
<li>IBM and the IBM logo are trademarks or registered trademarks of IBM
Corporation in the United States, other countries, or both.</li>
<br>
<br>
<li>Rational and the Rational logo are trademarks or registered trademarks
of International Business Corporation in the United States, other
countries, or both.</li>
<br>
<br>
<li>UML, Unified Modeling Language, and MOF are trademarks or registered
trademarks of Object Management Group, Inc.</li>
<br>
<br>
<li>Java and all Java-based trademarks, among others, are trademarks or
registered trademarks of Sun Microsystems in the United States, other
countries, or both</li>
<br>
<br>
<li>Eclipse and the Eclipse logo are trademarks of the Eclipse Foundation,
Inc.</li>
<br>
<br>
<li>Other company, product, and service names may be trademarks or service
marks of others.</li>
<br>
<br>
<li>THE INFORMATION DISCUSSED IN THIS PRESENTATION IS PROVIDED FOR
INFORMATIONAL PURPOSES ONLY.<span style='mso-spacerun:yes'> 
</span>WHILE EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY
OF THE INFORMATION, IT IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, AND IBM SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES
ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, SUCH
INFORMATION.<span style='mso-spacerun:yes'>  </span>ANY INFORMATION
CONCERNING IBM’S PRODUCT PLANS OR STRATEGY IS SUBJECT TO CHANGE BY IBM
WITHOUT NOTICE.</li>
<br>
<br>
<br>
</ul>
</font></div>
</td>
</tr>
</table>
</div>
</body>
</html>