<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>Migration Guide from XOTcl 1 to XOTcl 2</title>
<style>
body	{
        font-family: Verdana, Arial, Helvetica, sans-serif;
    	font-weight: normal;
	background-color : white;
	color: black;
}
table i {
       font-size: 80%;
}
table td code i {
      font-style: italic;
       color: green;
}

th {color: #888888;}
td hr {
  color: #FFFFFF;
  border-bottom-style: none;
  border-left-style: none;
  border-right-style: none;
  border-top-style: dashed;
  border-color: #AAAAAA;
  margin: 10 10 10 10;
}


/*table {font-size: 80%;}*/
table {
   width: 900;
   border-collapse:collapse;
}
table th {
   width: 400;
   border:1px solid black;
}
table td {
   width: 400;
   border:1px solid #AAAAAA;
}

</style>
</head>

<body>
<h1>Introduction</h1>

... general text, maybe partly from slides/paper ....

<h2>Supporting XOTcl 1 in XOTcl 2</h2>

<p>
... multiple object systems ....
<p>
<code>::xotcl::use xotcl1</code>
<p>
<code>::xotcl::use xotcl2</code>
<p>
describe, what <code>::xotcl::use</code> does

<h1>XOTcl 1 Idioms in XOTcl 2</h1>

<h2>Defining Objects and Classes</h2>
<table>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code>Class <i>ClassName</i></code></td>
    <td><code>Class create <i>ClassName</i></code></td>
  </tr>
  <tr>
    <td><code>Object <i>ObjectName</i></code></td>
    <td><code>Object create <i>ObjectName</i></code></td>
  </tr>
  <tr>
    <td><code>::xotcl::Class <i>ClassName</i></code></td>
    <td><code>::xotcl2::Class create <i>ClassName</i></code></td>
  </tr>
  <tr>
    <td><code>::xotcl::Object <i>ObjectName</i></code></td>
    <td><code>::xotcl2::Object create <i>ObjectName</i></code></td>
  </tr>
</table>

<h2>Defining Methods</h2>
<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code>Class <i>C</i><br>
      <i>C</i> instproc <i>foo args</i> {...}<br>
      <i>C</i> proc <i>bar args</i> {...}<br>
      </code></td>
    <td><code>Class create <i>C</i> {<br>
      &nbsp;&nbsp;.method <i>foo args</i> {...}<br>
      &nbsp;&nbsp;.object method <i>bar args</i> {...}<br>
      }<br></code><hr>
      <code>Class create <i>C</i><br>
      <i>C</i> method <i>foo args</i> {...}<br>
      <i>C</i> object method <i>bar args</i> {...}<br>
     </code></td>
  </tr>
    <tr>
    <td><code>Object <i>o</i><br>
      <i>o</i> set <i>x 1</i><br>
      <i>o</i> proc <i>foo args</i> {...}<br>
      </code></td>
    <td><code>Object create <i>o</i> {<br>
      &nbsp;&nbsp;set .<i>x 1</i><br>
      &nbsp;&nbsp;.method <i>foo args</i> {...}<br>
     }<br></code><hr>
      <code>Object create <i>o</i><br>
      <i>o</i> eval {set <i>.x 1</i>}</i><br>
      <i># &nbsp;&nbsp; ::xotcl::setinstvar o x 1</i><br>
      <i>o</i> method <i>foo args</i> {...}<br>
     </code></td>
  </tr>
</table>


<h2>Invoking Methods</h2>
<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code>Class <i>C</i><br>
      <i>C</i> instproc <i>foo args</i> {...}<br>
      <i>C</i> instproc <i>bar args</i> {<br>
      &nbsp;&nbsp;my <i>foo 1 2 3</i> ;# invoke own method<br>
      &nbsp;&nbsp;<i>o baz</i> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;# invoke others method<br>
      }<br>
      Object <i>o</i><br>
      <i>o</i> proc <i>baz</i> {} {...}<br>
     </code></td>
     <td><code>Class create <i>C</i> {<br>
      &nbsp;&nbsp;.method <i>foo args</i> {...}<br>
      &nbsp;&nbsp;.method <i>bar args</i> {<br>
      &nbsp;&nbsp;&nbsp;&nbsp; .<i>foo 1 2 3</i>  ;# invoke own method<br>
      &nbsp;&nbsp;&nbsp;&nbsp; <i>o baz</i> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;# invoke others method<br>
      &nbsp;&nbsp;}<br>
      }</br>
      Object create <i>o</i> {<br>
      &nbsp;&nbsp;.method <i>baz</i> {} {...}<br>
      }</br>
      </code></td>
    </tr>
</table>


<h2>Accessing Instance Variables from Method Bodies</h2>
<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code>my set <i>varname value</i></code></td>
    <td><code>set .<i>varname value</i></code></td>
  </tr>
    <tr>
    <td><code>set <i>newVar</i> [my set <i>otherVar</i>]</code></td>
    <td><code>set <i>newVar</i> [set <i>.otherVar</i>]</code><br><hr>
      <code>set <i>newVar</i> ${.otherVar}</i></code><br>
    </td>
  </tr>
  <tr>
    <td><code>my instvar <i>newVar</i><br>
      set <i>newVar value</i> </code>
    </td>
    <td><code>set <i>.newVar value</i></td>
 </tr>
  <tr>
    <td><code>my exists <i>varname</i></code></td>
    <td><code>info .<i>varname</i></code></td>
  </tr>
</table>

<h2>Accessing Instance Variables of other Objects</h2>
<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code><i>obj</i> set <i>varname value</i></code></td>
    <td><code><i>obj</i> eval [list set <i>.varname value</i>]</code></td>
  </tr>
    <tr>
    <td><code>set <i>newVar</i> [<i>obj</i> set <i>otherVar</i>]</code></td>
    <td><code>set <i>newVar</i> [<i>obj</i> eval {set <i>.otherVar</i>}]</code><br>
    </td>
  </tr>
  <tr>
    <td><code><i>obj</i> instvar <i>newVar</i><br>
      set <i>newVar value</i> </code>
    </td>
    <td><code>::xotcl::importvar <i>obj newVar</i><br>
      set <i>newVar value</i></td>
 </tr>
  <tr>
    <td><code><i>obj</i> exists <i>varname</i></code></td>
    <td><code><i>obj</i> eval {info exists <i>.varname</i>}</code></td>
  </tr>
</table>


<h2>Object Parameters</h2>
<h2>Method Parameters</h2>
<h2>Introspection</h2>

<h4>List methods defined by objects</h4>
<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code><i>obj</i> info commands <i>?pattern?</i></code></td>
    <td><code><i>obj</i> info methods <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><code><i>obj</i> info parametercmd <i>?pattern?</i></code></td>
    <td><code><i>obj</i> info methods -methodtype setter <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><code><i>obj</i> info procs <i>?pattern?</i></code></td>
    <td><code><i>obj</i> info methods -methodtype scripted <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>obj</i> info methods -methodtype alias <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>obj</i> info methods -methodtype forwarder <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>obj</i> info methods -methodtype object <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>obj</i> info methods -callprotection <i>public|protected ...</i></code></td>
  </tr>
</table>
<h4>List methods defined by classes</h4>
<table>
  <tr>
    <td><code><i>cls</i> info instcommands <i>?pattern?</i></code></td>
    <td><code><i>cls</i> info methods <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><code><i>cls</i> info instparametercmd <i>?pattern?</i></code></td>
    <td><code><i>cls</i> info methods -methodtype setter <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><code><i>cls</i> info instprocs <i>?pattern?</i></code></td>
    <td><code><i>cls</i> info methods -methodtype scripted <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> info methods -methodtype alias <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> info methods -methodtype forwarder <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> info methods -methodtype object <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> info methods -callprotection <i>public|protected ...</i></code></td>
  </tr>  
</table>

<h4>List class object specific methods</h4>
<table>
  <tr>
    <td><code><i>cls</i> info commands <i>?pattern?</i></code></td>
    <td><code><i>cls</i> object info methods <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><code><i>cls</i> info parametercmd <i>?pattern?</i></code></td>
    <td><code><i>cls</i> object info methods -methodtype setter <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><code><i>cls</i> info procs <i>?pattern?</i></code></td>
    <td><code><i>cls</i> object info methods -methodtype scripted <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> object info methods -methodtype alias <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> object info methods -methodtype forwarder <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> object info methods -methodtype object <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i>cls</i> object info methods -callprotection <i>public|protected ...</i></code></td>
  </tr> 
</table>

<h4>List callable methods</h4>
<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code><i>obj</i> info methods <i>?pattern?</i></code></td>
    <td><code><i>obj</i> info callable <i>?pattern?</i></code></td>
  </tr>
  <tr>
    <td><i>n.a.</i></td>
    <td><code><i># list only application specific methods</i></code><br>
      <code><i>obj</i> info callable -application</code></td>
  </tr>
</table>

<h4>List object/class where some method is defined</h4>

<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code><i>obj</i> procsearch <i>methodName</i></code></td>
    <td><code><i>obj</i> info callable -which <i>methodName</i></code></td>
  </tr>
</table>
 
<h2>Predefined Methods</h2>
<h2>Dispatch, Aliases, etc.</h2>
<h2>Assertions</h2>
<table border=1>
  <tr><th>XOTcl 1</th><th>XOTcl 2</th></tr>
  <tr>
    <td><code><i>obj</i> check <i>checkptions</i></code></td>
    <td><code>::xotcl::assertion <i>obj</i> check <i>checkptions</i></code></td>
  </tr>
  <tr>
    <td><code><i>obj</i> info check</code></td>
    <td><code>::xotcl::assertion <i>obj</i> check</code></td>
  </tr>
  
  <tr>
    <td><code><i>obj</i> invar <i>conditions</i></code></td>
    <td><code>::xotcl::assertion <i>obj</i> object-invar <i>conditions</i></code></td>
  </tr>
  <tr>
    <td><code><i>obj</i> info invar</code></td>
    <td><code>::xotcl::assertion <i>obj</i> object-invar</code></td>
  </tr>
  
  <tr>
    <td><code><i>cls</i> instinvar <i>conditions</i></code></td>
    <td><code>::xotcl::assertion <i>cls</i> class-invar <i>conditions</i></code></td>
  </tr>
  <tr>
    <td><code><i>cls</i> info instinvar</code></td>
    <td><code>::xotcl::assertion <i>cls</i> class-invar</code></td>
  </tr>

    <tr>
    <td><code><i>cls</i> invar <i>conditions</i></code></td>
    <td><code>::xotcl::assertion <i>cls</i> object-invar <i>conditions</i></code></td>
  </tr>
  <tr>
    <td><code><i>cls</i> info invar</code></td>
    <td><code>::xotcl::assertion <i>cls</i> object-invar</code></td>
  </tr
  
</table>
<h2>Method Protection</h2>


<hr>
<address></address>
<!-- hhmts start --> Last modified: Tue Jan  5 18:26:03 CET 2010 <!-- hhmts end -->
</body> </html>