<?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>9</revnumber><date>2010-11-24 00:58:06</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2010-11-22 07:24:45</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-11-22 07:20:09</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-11-22 07:17:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-11-22 07:11:35</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-11-22 07:10:31</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-11-22 07:03:39</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-11-22 06:56:25</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2010-11-22 06:54:50</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>オブジェクトをつなぐメソッド</title><para>オブジェクトを沢山つなげることができました。 </para><para>うまい方法を使うと、新しいオブジェクトを先頭に追加する方が楽にできます。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>例１</title><para>変数aが、いくつかつながったオブジェクトを参照しており、 変数tempが１つのオブジェクトを参照している場合です。 </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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain30.png"/></imageobject><textobject><phrase>chain30.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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain31.png"/></imageobject><textobject><phrase>chain31.png</phrase></textobject></inlinemediaobject> </para></listitem><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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain32.png"/></imageobject><textobject><phrase>chain32.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>この処理はこのように書けます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[temp.next = a;
a = temp;]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>例２</title><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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain33.png"/></imageobject><textobject><phrase>chain33.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>追加したい位置の直前にあるオブジェクトを参照できなければなりません。 </para><para>変数pがその位置を指しているとします。 </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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain34.png"/></imageobject><textobject><phrase>chain34.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>pが指しているオブジェクトの直後に、 tempが示している１つのオブジェクトを追加する処理はこのように書けます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[temp.next = p.next;
p.next = temp;]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>例３</title><para>例２の処理はchainが沢山つながった途中をpが指している場合でも正しく動作します。 </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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain35.png"/></imageobject><textobject><phrase>chain35.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>オブジェクトをつなぐメソッド</title><para>例２、例３と同じ処理をするメソッドを作ります。 </para><para>このような形で呼び出されるものとします。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><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[        ...]]>
<![CDATA[        ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[add]]></methodname><![CDATA[(]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[());]]>
<![CDATA[        ...]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>Chain型の引数を１つとるので、メソッドはこのような形になります。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[add]]></methodname><![CDATA[(]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[c]]></methodname><![CDATA[)]]>
<![CDATA[{]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>mainメソッドから上のように呼び出された場合は </para><itemizedlist><listitem><para>aの値がthisに </para></listitem><listitem><para>引数の値がcに </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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain36.png"/></imageobject><textobject><phrase>chain36.png</phrase></textobject></inlinemediaobject> </para></listitem><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%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain37.png"/></imageobject><textobject><phrase>chain37.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist></section></section></article>