<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>オブジェクトをつなぐ</title><revhistory><revision><revnumber>14</revnumber><date>2010-11-17 00:30:20</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>13</revnumber><date>2010-11-12 13:31:53</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2010-11-12 13:26:41</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2010-11-12 13:22:12</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2010-11-12 13:21:44</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2010-11-12 05:17:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2010-11-12 05:04:48</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-11-12 05:01:49</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-11-12 04:59:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-11-12 04:53:15</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-11-12 04:52:57</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-11-12 04:32:40</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-11-12 04:32:18</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2010-11-12 04:28:24</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>オブジェクトをつなぐ</title><para>たくさんのオブジェクトを扱う方法の１つを学びます。 </para><para>このような Chainクラスを考えましょう。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[class]]></token><![CDATA[ ]]><methodname><![CDATA[Chain]]></methodname>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[next]]></methodname><![CDATA[;]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>クラス図は </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%81%A4%E3%81%AA%E3%81%90?action=AttachFile&amp;do=get&amp;target=chain1.png"/></imageobject><textobject><phrase>chain1.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>クラスのインスタンスはこのように表せます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%81%A4%E3%81%AA%E3%81%90?action=AttachFile&amp;do=get&amp;target=chain2.png"/></imageobject><textobject><phrase>chain2.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--><section><title>例１</title><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[        ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[static]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[main]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[[] ]]><methodname><![CDATA[args]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[;]]>

<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[(]]><methodname><![CDATA[a]]></methodname><![CDATA[);]]>
<![CDATA[        }]]>
</programlisting></listitem></itemizedlist><para>このmainメソッドを実行すると、例えばこのように表示されます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%81%A4%E3%81%AA%E3%81%90?action=AttachFile&amp;do=get&amp;target=chain5.png"/></imageobject><textobject><phrase>chain5.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>このときの変数やオブジェクトの対応は次のように表せます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%81%A4%E3%81%AA%E3%81%90?action=AttachFile&amp;do=get&amp;target=chain3.png"/></imageobject><textobject><phrase>chain3.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>chain型(クラス)の変数aは、42e816番地にあるchainクラスのインスタンスを指しています。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>練習</title><para>変数aの指しているインスタンス内にある変数nextについて考えます。 </para><para>nextもまたchain型(クラス)の変数ですから、 nextを使って他のインスタンスを指すことができます。 </para><para>図のようにするための処理を書きましょう。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%81%A4%E3%81%AA%E3%81%90?action=AttachFile&amp;do=get&amp;target=chain4.png"/></imageobject><textobject><phrase>chain4.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>後ろにつながれるほうのインスタンスがbで参照できるときは、 このように書けます。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[                ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[, ]]><methodname><![CDATA[b]]></methodname><![CDATA[;]]>

<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[();]]>
<![CDATA[                ...]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[next]]></methodname><![CDATA[ = ]]><methodname><![CDATA[b]]></methodname><![CDATA[;]]>
<![CDATA[                ...]]>
</programlisting></listitem></itemizedlist><para>後ろにつながれるインスタンスをその場で作成してよいときは、 このようもに書けます。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[                ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[;]]>

<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[();]]>
<![CDATA[                ...]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[next]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[();]]>
<![CDATA[                ...]]>
</programlisting></listitem></itemizedlist><para>こうしていくつものインスタンスをチェーンのようにつなぐことができます。 </para></section></section></article>