| <!DOCTYPE html |
| PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "../xhtml1-strict.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| <link rel="stylesheet" type="text/css" href="../css/ot.css" /> |
| <link rel="stylesheet" type="text/css" href="../css/otjld.css" /> |
| <title>OT/J Language Definition v1.3</title> |
| </head> |
| <body class="otdt"> |
| <div id="content"> |
| <table class="nav"> |
| <tr> |
| <td class="back"><a id="top"></a><a href="s1.2.2.html" rel="prev"><< §1.2.2 Externalized roles</a></td> |
| <td class="top"><a href="index.html" rel="contents">↑ Table of Contents ↑</a></td> |
| <td class="next"><a href="s1.2.4.html" rel="next">§1.2.4 Type tests and casts >></a></td> |
| </tr> |
| </table> |
| <div class="breadcrumb"><a class="nav" href="s1.html" rel="section">§1 Teams and Roles</a> > <a class="nav" href="s1.2.html" rel="section">§1.2 Role classes and objects</a></div> |
| <div class="sect depth3" id="s1.2.3"> |
| <h3 class="sect">§1.2.3 Protected roles<a class="img" href="s1.2.3.html" |
| title="PermaLink to §1.2.3 Protected roles"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png" |
| alt="" /></a></h3> |
| <p>Roles can only be <code>public</code> or <code>protected</code>. |
| A <code>protected</code> role is encapsulated |
| by its enclosing team instance. This is enforced by these rules: |
| |
| </p> |
| <div class="subsect depth4" id="s1.2.3.a"> |
| <h4 class="subsect">(a) <span class="title">Importing role classes</span><a class="img" href="s1.2.3.a.html" |
| title="PermaLink to (a) Importing role classes"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png" |
| alt="" /></a></h4> |
| <p><i>This rule is superseded by <a href="s1.2.2.i.html" title="§1.2.2.(i) No import" class="sect">§1.2.2.(i)</a></i></p> |
| </div> |
| <div class="subsect depth4" id="s1.2.3.b"> |
| <h4 class="subsect">(b) <span class="title">Qualified role types</span><a class="img" href="s1.2.3.b.html" |
| title="PermaLink to (b) Qualified role types"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png" |
| alt="" /></a></h4> |
| <p>The name of a <code>protected</code> role class may never be used qualified, neither |
| prefixed by its <em>enclosing type</em> nor parameterized by a <em>variable as type anchor</em> (cf. <a href="s1.2.2.a.html" title="§1.2.2.(a) Visibility" class="sect">§1.2.2.(a)</a>). |
| |
| </p> |
| </div> |
| <div class="subsect depth4" id="s1.2.3.c"> |
| <h4 class="subsect">(c) <span class="title">Mixing qualified and unqualified types</span><a class="img" href="s1.2.3.c.html" |
| title="PermaLink to (c) Mixing qualified and unqualified types"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png" |
| alt="" /></a></h4> |
| <p>An externalized role type is never compatible to an unqualified role type, |
| except for the substitutions in <a href="s1.2.2.f.html" |
| title="§1.2.2.(f) Substitutions for type anchors" |
| class="sect">§1.2.2.(f)</a>, where |
| an explicit anchor can be matched with the implicit anchor <code>this</code>. |
| |
| </p> |
| </div> |
| <p>Rules (a) and (b) ensure that the name of a protected role class cannot be used |
| outside the lexical scope of its enclosing team. Rule (c) ensures that team methods |
| containing unqualified role types in their signature cannot be invoked on a team other |
| than the current team. Accordingly, for role methods the team context must be the |
| enclosing team instance. |
| |
| </p> |
| <div class="subsect depth4" id="s1.2.3.d"> |
| <h4 class="subsect">(d) <span class="title">Levels of encapsulation</span><a class="img" href="s1.2.3.d.html" |
| title="PermaLink to (d) Levels of encapsulation"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png" |
| alt="" /></a></h4> |
| <p>Since protected role types can not be used for externalization, instances of these types are already quite effectively encapsulated |
| by their enclosing team. |
| Based on this concept, encapsulation for protected roles can be made even stricter by the rules of <em>role confinement</em>. |
| On the contrary, even protected roles can be externalized as <em>opaque roles</em> which still expose (almost) no information. |
| Confinement and opaque roles are subject of <a href="s7.html" title="§7 Role Encapsulation" class="sect">§7</a>. |
| |
| </p> |
| </div> |
| </div> |
| <table class="nav"> |
| <tr> |
| <td class="back"><a href="s1.2.2.html" rel="prev"><< §1.2.2 Externalized roles</a></td> |
| <td class="top"><a href="index.html" rel="contents">↑ Table of Contents ↑</a></td> |
| <td class="next"><a href="s1.2.4.html" rel="next">§1.2.4 Type tests and casts >></a></td> |
| </tr> |
| </table> |
| <div class="breadcrumb"><a class="nav" href="s1.html" rel="section">§1 Teams and Roles</a> > <a class="nav" href="s1.2.html" rel="section">§1.2 Role classes and objects</a></div> |
| </div> |
| <div id="footer"> |
| <hr /><a class="w3c img" href="http://jigsaw.w3.org/css-validator/check/referer" |
| shape="rect"><img src="../images/valid-css2-blue.png" alt="Valid CSS!" height="31" width="88" /></a><a class="w3c img" href="http://validator.w3.org/check?uri=referer" shape="rect"><img src="../images/valid-xhtml10-blue.png" alt="Valid XHTML 1.0 Strict" height="31" |
| width="88" /></a><address>© Stephan Herrmann, Christine Hundt, Marco Mosconi</address> |
| OT/J version 1.3 — last modified: 2011-05-12 |
| </div> |
| </body> |
| </html> |