blob: 100cc6c3a96697ddfba46ff11a66512ba0de9415 [file] [log] [blame]
<!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">&lt;&lt;&nbsp;&sect;1.2.2&nbsp;Externalized roles</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="s1.2.4.html" rel="next">&sect;1.2.4&nbsp;Type tests and casts&nbsp;&gt;&gt;</a></td>
</tr>
</table>
<div class="breadcrumb"><a class="nav" href="s1.html" rel="section">&sect;1&nbsp;Teams and Roles</a>&nbsp;&gt;&nbsp;<a class="nav" href="s1.2.html" rel="section">&sect;1.2&nbsp;Role classes and objects</a></div>
<div class="sect depth3" id="s1.2.3">
<h3 class="sect">&sect;1.2.3&nbsp;Protected roles<a class="img" href="s1.2.3.html"
title="PermaLink to &sect;1.2.3&nbsp;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)&nbsp;<span class="title">Importing role classes</span><a class="img" href="s1.2.3.a.html"
title="PermaLink to (a)&nbsp;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="&sect;1.2.2.(i)&nbsp;No import" class="sect">&sect;1.2.2.(i)</a></i></p>
</div>
<div class="subsect depth4" id="s1.2.3.b">
<h4 class="subsect">(b)&nbsp;<span class="title">Qualified role types</span><a class="img" href="s1.2.3.b.html"
title="PermaLink to (b)&nbsp;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="&sect;1.2.2.(a)&nbsp;Visibility" class="sect">&sect;1.2.2.(a)</a>).
</p>
</div>
<div class="subsect depth4" id="s1.2.3.c">
<h4 class="subsect">(c)&nbsp;<span class="title">Mixing qualified and unqualified types</span><a class="img" href="s1.2.3.c.html"
title="PermaLink to (c)&nbsp;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="&sect;1.2.2.(f)&nbsp;Substitutions for type anchors"
class="sect">&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)&nbsp;<span class="title">Levels of encapsulation</span><a class="img" href="s1.2.3.d.html"
title="PermaLink to (d)&nbsp;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="&sect;7&nbsp;Role Encapsulation" class="sect">&sect;7</a>.
</p>
</div>
</div>
<table class="nav">
<tr>
<td class="back"><a href="s1.2.2.html" rel="prev">&lt;&lt;&nbsp;&sect;1.2.2&nbsp;Externalized roles</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="s1.2.4.html" rel="next">&sect;1.2.4&nbsp;Type tests and casts&nbsp;&gt;&gt;</a></td>
</tr>
</table>
<div class="breadcrumb"><a class="nav" href="s1.html" rel="section">&sect;1&nbsp;Teams and Roles</a>&nbsp;&gt;&nbsp;<a class="nav" href="s1.2.html" rel="section">&sect;1.2&nbsp;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>&copy; Stephan Herrmann, Christine Hundt, Marco Mosconi</address>
OT/J version 1.3 &mdash; last modified: 2011-05-12
</div>
</body>
</html>