<!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> .method <i>foo args</i> {...}<br> .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> set .<i>x 1</i><br> .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># ::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> my <i>foo 1 2 3</i> ;# invoke own method<br> <i>o baz</i> ;# 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> .method <i>foo args</i> {...}<br> .method <i>bar args</i> {<br> .<i>foo 1 2 3</i> ;# invoke own method<br> <i>o baz</i> ;# invoke others method<br> }<br> }</br> Object create <i>o</i> {<br> .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>