<html xmlns="http://www.w3.org/1999/xhtml" a0:Name="SuikaWikiImage" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:Version="0.9"><head><a0:parameter name="image-type"><a0:value>image/png</a0:value></a0:parameter><a0:parameter name="image-alt"><a0:value>継承関係の例</a0:value></a0:parameter></head><body><p><a0:anchor-end a0:anchor="1">[1]</a0:anchor-end> 図: 次のような継承関係に、更に <code class="math"><var>a</var> -&gt; <var>b</var></code> を足すところ。<ul><li><code class="math"><var>b</var> -&gt; <var>c</var></code>, <code class="math"><var>b</var> -&gt; <var>d</var></code>, <code class="math"><var>b</var> -&gt; <var>e</var></code></li><li><code class="math"><var>d</var> -&gt; <var>f</var></code>, <code class="math"><var>d</var> -&gt; <var>g</var></code></li><li><code class="math"><var>j</var> -&gt; <var>i</var></code></li><li><code class="math"><var>k</var> -&gt; <var>i</var></code></li><li><code class="math"><var>i</var> -&gt; <var>a</var></code></li><li><code class="math"><var>h</var> -&gt; <var>a</var></code></li></ul></p><p><a0:anchor-end a0:anchor="2">[2]</a0:anchor-end> 推移的閉包のようなものを考えると、次の継承関係が存在していることになる。<ul><li><code class="math"><var>b</var> -&gt; <var>c</var></code>, <code class="math"><var>b</var> -&gt; <var>d</var></code>, <code class="math"><var>b</var> -&gt; <var>e</var></code>, <code class="math"><var>b</var> -&gt; <var>f</var></code>, <code class="math"><var>b</var> -&gt; <var>g</var></code></li><li><code class="math"><var>d</var> -&gt; <var>f</var></code>, <code class="math"><var>d</var> -&gt; <var>g</var></code></li><li><code class="math"><var>j</var> -&gt; <var>i</var></code>, <code class="math"><var>j</var> -&gt; <var>a</var></code></li><li><code class="math"><var>k</var> -&gt; <var>i</var></code>, <code class="math"><var>k</var> -&gt; <var>a</var></code></li><li><code class="math"><var>i</var> -&gt; <var>a</var></code></li><li><code class="math"><var>h</var> -&gt; <var>a</var></code></li></ul></p><p>継承関係 <code class="math"><var>a</var> -&gt; <var>b</var></code> の追加によって新たに次の関係が生じる。</p><ul><li><code class="math"><var>j</var> -&gt; <var>b</var></code>, <code class="math"><var>j</var> -&gt; <var>c</var></code>, <code class="math"><var>j</var> -&gt; <var>d</var></code>, <code class="math"><var>j</var> -&gt; <var>e</var></code>, <code class="math"><var>j</var> -&gt; <var>f</var></code>, <code class="math"><var>j</var> -&gt; <var>g</var></code></li><li><code class="math"><var>k</var> -&gt; <var>b</var></code>, <code class="math"><var>k</var> -&gt; <var>c</var></code>, <code class="math"><var>k</var> -&gt; <var>d</var></code>, <code class="math"><var>k</var> -&gt; <var>e</var></code>, <code class="math"><var>k</var> -&gt; <var>f</var></code>, <code class="math"><var>k</var> -&gt; <var>g</var></code></li><li><code class="math"><var>i</var> -&gt; <var>b</var></code>, <code class="math"><var>i</var> -&gt; <var>c</var></code>, <code class="math"><var>i</var> -&gt; <var>d</var></code>, <code class="math"><var>i</var> -&gt; <var>e</var></code>, <code class="math"><var>i</var> -&gt; <var>f</var></code>, <code class="math"><var>i</var> -&gt; <var>g</var></code></li><li><code class="math"><var>h</var> -&gt; <var>b</var></code>, <code class="math"><var>h</var> -&gt; <var>c</var></code>, <code class="math"><var>h</var> -&gt; <var>d, h</var> -&gt; <var>e</var></code>, <code class="math"><var>h</var> -&gt; <var>f</var></code>, <code class="math"><var>h</var> -&gt; <var>g</var></code></li><li><code class="math"><var>a</var> -&gt; <var>b</var></code>, <code class="math"><var>a</var> -&gt; <var>c</var></code>, <code class="math"><var>a</var> -&gt; <var>d</var></code>, <code class="math"><var>a</var> -&gt; <var>e</var></code>, <code class="math"><var>a</var> -&gt; <var>f</var></code>, <code class="math"><var>a</var> -&gt; <var>g</var></code></li></ul><p><a0:anchor-end a0:anchor="3">[3]</a0:anchor-end> つまり、 <code class="math"><var>a</var></code> へ向かう逆向きの木の各節点すべてに、
その節点から <code class="math"><var>b</var></code> の全節点への継承関係を追加すればいい
(あたりまえ)。</p><p>追加する矢印の先の節点の一覧は、すなわち <code class="math"><var>b</var></code> の節点の継承先リストそのもの
(および <code class="math"><var>b</var></code> 自体)。追加する矢印の前の節点の一覧は、
全節点を探索して継承先リストに <code class="math"><var>a</var></code>
が含まれているものを見つければいい。んな悠長なことはやっていられないので、
逆方向の関係のリストも各節点に持たせれば実現できる。</p><p><a0:anchor-end a0:anchor="4">[4]</a0:anchor-end> 継承関係 <code class="math"><var>a</var> -&gt; <var>b</var></code> を追加するアルゴリズム:<ol><li><code class="math"><var>F</var> := {<code class="math"><var>a</var></code>} ∪ <code class="math"><var>a</var></code> の継承逆方向リスト</code></li><li><code class="math"><var>T</var> := {<code class="math"><var>b</var></code>} ∪ <code class="math"><var>b</var></code> の継承順方向リスト</code></li><li><code class="math"><var>F</var></code> の各節点 <code class="math"><var>f</var></code> に対して<ol><li><code class="math"><var>T</var></code> の各節点 <code class="math"><var>t</var></code> に対して<ol><li><code class="math"><var>f</var></code> の継承順方向リストに <code class="math"><var>t</var></code> を追加。</li><li><code class="math"><var>t</var></code> の継承逆方向リストに <code class="math"><var>f</var></code> を追加。</li></ol></li></ol></li></ol></p><p>ただし、循環や重複に注意すること。</p></body><a0:image>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</a0:image></html>