2002 -0926 ver 0.10 第1草稿 -0927 ver 0.20 第2草稿 -0927 ver 1.00 発行版予定 -0927 ver 1.10 private 間違い修正 -1001 ver 1.11 誤字修正 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃.&&&& **** %%%%.  JavaScript&Javaで目指そう!基本情報技術者試験  ┃ ┃&&&&&&******%%%%%%  執筆&編集 斎藤末広 suehiro@he.mirai.ne.jp  ┃ ┃'&┃&''*┃*''%┃%'  発行    江口昌宏 jmaga@yscon.co.jp    ┃ ┗━┻━━┻━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ★解除・登録 :http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html ★広告募集  :http://www2.odn.ne.jp/~egu33/jmaga/jmaga-ad.html ★発行済み  :http://www.yscon.co.jp/j/java/jmaga/ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  第29号 2002/09/27  オブジェクト指向 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  プログラムを作成する上での注意事項:  Windows98SE, SDK(JDK) 1.3.1,IE 5.5 を前提としています。  拡張子を表示するに設定してください。 ------------------------------------------------------------------------ ▼ 午前に出るオブジェクト指向  今回は,情報処理技術者試験の午前問題に出題された問題を解きながら,オブ ジェクト指向を勉強しましょう。  では,さっそく3問解いてみて下さい。 ------------------------------------------------------------------------ ▼ 問1 クラスとインスタンス 問1  オブジェクト指向に関する記述として,適切なものはどれか。  ア オブジェクトは,クラスのテンプレートである。  イ カプセル化とは,クラスをライブラリ化することである。  ウ クラスは,必ず一つ以上のインスタンスをもつ。  エ クラスは,その親のクラスから属性とメソッドを継承できる。 ------------------------------------------------------------------------ ▼ 問2 振る舞い 問2  オブジェクト指向開発において,オブジェクトのもつ振る舞いを記述したもの を何というか。  ア インスタンス  イ クラス  ウ メソッド  エ メッセージ ------------------------------------------------------------------------ ▼ 問3 情報隠ぺい 問3  オブジェクト指向における情報隠ぺいの説明として,適切なものはどれか。  ア オブジェクトは,そのデータに対して定義されたメソッドによってだけ,   アクセス可能である。  イ オブジェクトは,抽象データ型の要素でなければならない。  ウ 親クラスに定義されたメソッドは,実行時に子クラスだけに引き継がれる。  エ 同一メッセージでも,実行時には受信クラスに基づきメソッドが束縛され   る。 ------------------------------------------------------------------------ ▼ 解説 問1 クラスとインスタンス  では,順に解説をしながら,オブジェクト指向を勉強しましょう。 問1  オブジェクト指向に関する記述として,適切なものはどれか。  ア オブジェクトは,クラスのテンプレートである。  イ カプセル化とは,クラスをライブラリ化することである。  ウ クラスは,必ず一つ以上のインスタンスをもつ。  エ クラスは,その親のクラスから属性とメソッドを継承できる。 ■キーワード■ オブジェクト指向 ■解答■   二種午前平成12年秋問53  エ クラスは,その親のクラスから属性とメソッドを継承できる。  まず,オブジェクト指向を一言で説明すると,オブジェクトを指向する,です。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃   オブジェクト指向は,オブジェクトを指向する。          ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  こんな説明はひどいと思われた方もいるでしょうね。いったい,オブジェクトを 指向するとはどういうことでしょうか? これは,オブジェクトの方向に顔を向 ける,注意を向けるということです。  まず,次のプログラムを見てみて下さい。 xSmpObj00.java ソース http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj00.java 動作  http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj00.htm 1: /* オブジェクト指向サンプル 2: もっともシンプル 3: */ 4: import java.applet.Applet; 5: import java.awt.Graphics; 6: 7: public class xSmpObj00 extends Applet { 8: 9: int a, b, c, d; 10: 11: public void init(){ 12: a = 0; 13: b = 0; 14: c = 100; 15: d = 100; 16: } 17: 18: public void paint(Graphics xg){ 19: xg.drawLine(a, b, c, d); 20: } 21: }  動作させるとすぐに分ります。線を引くプログラムです。線を引く動作は, 19: xg.drawLine(a, b, c, d);  のところです。drawLine という関数(メソッド)は,この例で,いうと,(a,b) の点から (c, d) の点に線を引くという仕事をします。アプレットの座標の数字 はは,左片が,(0,0)で,右下が一番がx,yの値が一番大きくなります。縦方向, すなわち,y 軸の方向は,下にいくほど大きくなるところが,数学の x, y 軸と 違います。  ここで,a,b は,一つの点の x, y 座標の値でした。また,c, d は,別の点の x, y 座標の値でした。これは,19 行目の drawLine の使い方を知っていれば, 分ります。もし,drawLine の使い方を知っていなければ,分かりません。  そこで, 9: int a, b, c, d;  の変数の名前を宣言するところで,2つの点と分るように名前を付けてみまし しょう。 xSmpObj01.java ソース http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj01.java 動作  http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj01.htm 1: /* オブジェクト指向サンプル 2: 名前で工夫 3: */ 4: import java.applet.Applet; 5: import java.awt.Graphics; 6: 7: public class xSmpObj01 extends Applet { 8: 9: int x1, y1; 10: int x2, y2; 11: 12: public void init(){ 13: 14: x1 = 0; 15: y1 = 0; 16: 17: x2 = 100; 18: y2 = 100; 19: 20: } 21: 22: public void paint(Graphics xg){ 23: xg.drawLine(x1, y1, x2, y2); 24: } 25: }  x1, y1 という名前で,いかにも点の x, y の値のであることが分りました。 23: xg.drawLine(x1, y1, x2, y2);  をみると,drawLine という名前,x1, y1, x2, y2 という変数の並びから,前の 点(x1, y1)から次の点(x2, y2)に線を引くということが容易に想像できます。  このように,drawLine という仕事の対象に注目する,対象を明確に表すという のが,「オブジェクト(対象)を指向する」ということです。  このプログラムでは,名前の付け方で,オブジェクト指向をしました。オブジェ クト指向言語では,これを言語の文法レベルで実現できます。 ------------------------------------------------------------------------ ▼ オブジェクト言語の3大特色  オブジェクト指向言語のオブジェクト指向を実現する文法的なからくりは,い つかなありますが,代表的なものは3つです。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ オブジェクト指向言語の3大特色    ┃ ┃   1 クラス(とインスタンス)   ┃ ┃   2 カプセル化   ┃ ┃   3 継承   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  クラス,カプセル化,継承を順に説明してましょう。 ------------------------------------------------------------------------ ▼ その1 クラスを使ってオブジェクトを明確にする  xSmpObj01 のプログラムを「クラス」を利用してオブジェクトを明確にします。 次の例を見て下さい。 xSmpObj02.java ソース http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj02.java 動作  http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj02.htm 1: /* オブジェクト指向サンプル 2: クラス追加 3: */ 4: import java.applet.Applet; 5: import java.awt.Graphics; 6: 7: public class xSmpObj02 extends Applet { 8: 9: xPoint xa = new xPoint(); 10: xPoint xb = new xPoint(); 11: 12: public void init(){ 13: 14: xa.ix = 0; 15: xa.iy = 0; 16: 17: xb.ix = 100; 18: xb.iy = 100; 19: 20: } 21: 22: public void paint(Graphics xg){ 23: xg.drawLine(xa.ix, xa.iy, xb.ix, xb.iy); 24: } 25: } 26: 27: class xPoint{ 28: public int ix, iy; 29: }  このプログラムの最後を見て下さい。 27: class xPoint{ 28: public int ix, iy; 29: }  この xPoint というクラスのプログラムを追加することで,点の存在が明確に なります。 9: xPoint xa = new xPoint(); 10: xPoint xb = new xPoint();  のところで,点xa, xb を用意しています。  点xa, 点xb は,xPointクラスのインスタンス(具体値)と呼ばれます。点xa, 点xb がともに,xPoint に所属しているところということで,xPoint は,クラス と呼ばれます。クラス,インスタンスどちらもオブジェクトといいます。とくに, インスタンスの方をオブジェクトという場合が多いです。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃  クラスもインスタンスもオブジェクト     ┃ ┃   たいていは,インスタンス=オブジェクト   ┃ ┃   (文脈で判断)   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  xPoint クラスの定義は, 27: class xPoint{ 28: public int ix, iy; 29: }  で,このように,ix と iy を定義すると,これから,new した,xa, xb は, それぞれ,xa.ix,xa.iy,xb,ix, xb.iy の変数を持ちます。  実際は,インスタンスが持つ変数となりますので,i から始めるという規則を Jマガでは採用することにします。インスタンス変数といいます。  クラスに定義されたものが,インスタンスの性質を決めますので,クラスは, テンプレート(=型紙)で,インスタンスがそれから作られたものと言われます。  問1の「ア オブジェクトは,クラスのテンプレートである。」は,間違いです。 「クラスは,オブジェクト(=インスタンス)のテンプレート(=型紙)である」だと, 正しいです。 ------------------------------------------------------------------------ ▼ カプセル化  カプセル化について,説明します。次の例をみて下さい。 xSmpObj03.java ソース http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj03.java 動作  http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj03.htm 1: /* オブジェクト指向サンプル 2: カプセル化,メソッド追加 3: */ 4: import java.applet.Applet; 5: import java.awt.Graphics; 6: 7: public class xSmpObj03 extends Applet { 8: 9: xPoint xa = new xPoint(); 10: xPoint xb = new xPoint(); 11: 12: public void init(){ 13: 14: xa.ix = 0; 15: xa.iy = 0; 16: 17: xb.ix = 100; 18: xb.iy = 100; 19: } 20: 21: public void paint(Graphics xg){ 22: xa.tunagu(xg, xb); 23: } 24: } 25: 26: class xPoint{ 27: 28: // インスタンス変数 29: public int ix, iy; 30: 31: //メソッド 32: public void tunagu(Graphics xg, xPoint xaite){ 33: xg.drawLine(ix, iy, xaite.x, xaite.y); 34: } 35: }  xSmpObj03.java で,xSmpObj02.java から変ったところは, xSmpObj02.java 22: public void paint(Graphics xg){ 23: xg.drawLine(xa.ix, xa.iy, xb.ix, xb.iy); 24: } が, xSmpObj03.java 21: public void paint(Graphics xg){ 22: xa.tunagu(xg, xb); 23: } 24: } です。  xg.drawLine では,2の点を xg がつなぎました。これは,xg がペンの働き をして,線を引くという仕事でした。ここで,点がもし,自立的に自分で移動し てその軌跡が線となったらと考えます。点みずから,仕事をさせると,よりオブ ジェクト指向になります。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃    オブジェクトをロボットのよう動かす     ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  点のクラスを拡張して,xPointの中に,tunagu という仕事を定義します。それが, 25: class xPoint{ 26: 27: // インスタンス変数 28: public int ix, iy; 29: 30: //メソッド 31: public void tunagu(Graphics xg, xPoint xaite){ 32: xg.drawLine(ix, iy, xaite.x, xaite.y); 33: } 34: }  です。仕事は関数(メソッド)の形で定義します。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃  オブジェクトの仕事は,関数の形で定義。メソッドと言われる   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  点を表すクラス,xPoint に,tunagu というメソッド(仕事)を追加し,そのメ ソッドを使うときは,xa.tunagu(xg, xb) でした。  点に関する座標の値,さらにそれがする仕事をクラスに固めて記述することを カプセル化といいます。  問1の「イ カプセル化とは,クラスをライブラリ化することである。」を 正しい言い回しにすると「カプセル化とは,クラスに関連するデータとメソッドを 定義することである。」です。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃      (関連するデータ+仕事)をカプセル化=クラス   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ------------------------------------------------------------------------ ▼ カプセル化で隠ぺい  xSmpObj03.java の 12: public void init(){ 13: 14: xa.ix = 0; 15: xa.iy = 0; 16: 17: xb.ix = 100; 18: xb.iy = 100; 19: }  をみると,点の値は,ix, iy という変数で保持していることがが分ります。 しかし,この点を利用する,xSmpObj03 からみると,ix,iy という名前の変数名 であろうがなかろうが,座標の値を2つ記憶してもらえばかまいません。xSmpObj03 の中にこの ix, iy が登場しない方が,その文,単純なプログラムになります。  ix, iy の変数を xSmpObj03 から見えないようにします。xPoint クラスの中 に隠すことにしましょう。 xSmpObj04.java ソース http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj04.java 動作  http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj04.htm 1: /* オブジェクト指向サンプル 2: コンストラクタ追加 3: */ 4: import java.applet.Applet; 5: import java.awt.Graphics; 6: 7: public class xSmpObj04 extends Applet { 8: 9: xPoint xa = new xPoint(0, 0); 10: xPoint xb = new xPoint(100, 100); 11: 12: public void paint(Graphics xg){ 13: xa.tunagu(xg, xb); 14: } 15: } 16: 17: class xPoint{ 18: 19: // インスタンス変数 20: private int ix, iy; 21: 22: // コンストラクタ 23: public xPoint(int x, int y){ 24: ix = x; 25: iy = y; 26: } 27: 28: //メソッド 29: public void tunagu(Graphics xg, xPoint xaite){ 30: xg.drawLine(this.ix, this.iy, xaite.ix, xaite.iy); 31: } 32: }  xSmpObj03.java と比較してみます。 xSmpObj03.java 7: public class xSmpObj03 extends Applet { 8: 9: xPoint xa = new xPoint(); 10: xPoint xb = new xPoint(); 11: 12: public void init(){ 13: 14: xa.ix = 0; 15: xa.iy = 0; 16: 17: xb.ix = 100; 18: xb.iy = 100; 19: } 20: 21: public void paint(Graphics xg){ 22: xa.tunagu(xg, xb); 23: } 24: } は, xSmpObj04.java 7: public class xSmpObj04 extends Applet { 8: 9: xPoint xa = new xPoint(0, 0); 10: xPoint xb = new xPoint(100, 100); 11: 12: public void paint(Graphics xg){ 13: xa.tunagu(xg, xb); 14: } 15: }  となり,xa と xb がより点らしく見えるようになりました。また,ix,iy という 点が持っている変数は,登場しなくなりました。  xPoint クラスがどう変ったかみてみましょう。 xSmpObj03.java の xPoint クラス 25: class xPoint{ 26: 27: // インスタンス変数 28: public int ix, iy; 29: 30: //メソッド 31: public void tunagu(Graphics xg, xPoint xaite){ 32: xg.drawLine(ix, iy, xaite.x, xaite.y); 33: } 34: } が xSmpObj04.java では 17: class xPoint{ 18: 19: // インスタンス変数 20: private int ix, iy; 21: 22: // コンストラクタ 23: public xPoint(int x, int y){ 24: ix = x; 25: iy = y; 26: } 27: 28: //メソッド 29: public void tunagu(Graphics xg, xPoint xaite){ 30: xg.drawLine(this.ix, this.iy, xaite.ix, xaite.iy); 31: } 32: }  となりなした。  xSmpObj03.java の方の xPoint クラスのインスタンス変数は,public 付きで, xSmpObj04.java の方の xPoint クラスのインスタンス変数には,public の変わ りに private が付いています。 public が付いていると xPoint クラスの外部から直接利用できますが,private が付いていると xPoint の外部から,直接利用することができません。このプロ グラムは,xPoint のコンストラクタによってのみ,ix, iy に値を代入できます。 これを,インスタンス変数 が隠ぺいされたといいます。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃      カプセル化のメリットの一つ,隠ぺい   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ------------------------------------------------------------------------ ▼ 隠ぺいとアクセスメソッド  xSmpObj04 では。ix と iy が隠ぺいされて,それに代入するには,コンストラ クタを利用しました。このように,隠ぺいされているものを外部からアクセスす るメソッド(コンストラクタはメソッドの一種)を,アクセスメソッドといいます。  隠ぺいとアクセスメソッドの例を説明するために,この次のプログラムを作成 しました。点の大きさを表す変数を新たに作って xPoint クラスに隠ぺいして, それを変更するアクセスメソッドを追加してあります。点のインスタンスも一つ 追加しました。 xSmpObj05.java ソース http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj05.java 動作  http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj05.htm 1: /* オブジェクト指向サンプル 2: クラス拡張(太さ追加) 3: アクセスメソッド追加 4: */ 5: import java.applet.Applet; 6: import java.awt.Graphics; 7: 8: public class xSmpObj05 extends Applet { 9: 10: xPoint xa = new xPoint(0, 0); 11: xPoint xb = new xPoint(100, 100); 12: xPoint xc = new xPoint(200, 100); 13: 14: public void paint(Graphics xg){ 15: xa.tunagu(xg, xb); 16: xc.setOokisa(10); 17: xc.tunagu(xg, xb); 18: } 19: } 20: 21: class xPoint{ 22: 23: // インスタンス変数 24: private int ix, iy, ir; 25: 26: // コンストラクタ 27: public xPoint(int x, int y){ 28: ix = x; 29: iy = y; 30: ir = 3; 31: } 32: 33: // アクセスメソッド 34: public void setOokisa(int xr){ 35: ir = xr; 36: } 37: 38: //メソッド 39: public void tunagu(Graphics xg, xPoint xaite){ 40: xg.fillOval(ix-ir, iy-ir, ir*2, ir*2); 41: xg.fillOval(xaite.ix-ir, xaite.iy - ir, ir*2, ir*2); 42: for(int i=ir; i>=-ir; i--){ 43: xg.drawLine(ix, iy+i, xaite.ix, xaite.iy+i); 44: } 45: } 46: }  点を大きくしましたので,それをつないだ線も太くなっています。  大きさ3の点を移動させて線を先に引いて,次に,大きさ10の点を移動させて 線を引いています。  xPoint クラスの中の tunaguメッソドは,線を太くするために,プログラムが 大きく変っています。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃    隠ぺいされたものは,アクセスメソッドでアクセス   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ------------------------------------------------------------------------ ▼ 継承  最後の継承を説明しましょう。  xPoint は点は黒でした。これに色を付けてみましょう。点と点のつなぐ線も 色がつきます。  これを実現するのに,xPoint を触らずに,これとの差を定義する形で書くこと にします。 xSmpObj06.java ソース http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj06.java 動作  http://www.yscon.co.jp/j/java/jmaga/j29/xSmpObj06.htm 1: /* オブジェクト指向サンプル 2: 継承 3: */ 4: import java.applet.Applet; 5: import java.awt.Graphics; 6: import java.awt.Color; 7: 8: public class xSmpObj06 extends Applet { 9: 10: xPoint xa = new xPoint ( 0, 0); 11: xPoint xb = new xPoint (100, 100); 12: xPoint xc = new xPoint (200, 100); 13: xCPoint xd = new xCPoint(200, 200); 14: 15: public void paint(Graphics xg){ 16: xa.tunagu(xg, xb); 17: xc.setFutosa(10); 18: xc.tunagu(xg, xb); 19: xd.setColor(xg, Color.red); 20: xd.tunagu(xg, xb); 21: } 22: } 23: 24: // 継承 25: class xCPoint extends xPoint{ 26: 27: public xCPoint(int x, int y){ 28: super(x, y); // 親クラスのコンストラクタ呼び出し 29: } 30: 31: public void setColor(Graphics xg, Color xc){ 32: xg.setColor(xc); 33: } 34: } 35: 36: class xPoint{ 37: 38: // インスタンス変数 39: private int ix, iy, ir; 40: 41: // コンストラクタ 42: public xPoint(int x, int y){ 43: ix = x; 44: iy = y; 45: ir = 3; 46: } 47: 48: // アクセスメソッド 49: public void setFutosa(int r){ 50: ir = r; 51: } 52: 53: //メソッド 54: public void tunagu(Graphics xg, xPoint xaite){ 55: xg.fillOval(ix-ir, iy-ir, ir*2, ir*2); 56: xg.fillOval(xaite.ix-ir, xaite.iy - ir, ir*2, ir*2); 57: for(int i=ir; i>=-ir; i--){ 58: xg.drawLine(ix, iy+i, xaite.ix, xaite.iy+i); 59: } 60: } 61: }  xPoint クラスはそのままに,色を付けるメソッド setColor() を,25 行目 24: // 継承 25: class xCPoint extends xPoint{  と,新たに xCPoint とクラスを xPoint から extends(=拡張)しました。これ は,xPoint クラスの定義をそのまま xCPoint にもらうという意味です。そのた め,「継承」という用語が使われます。英語では,インヘリタンスといいます。  この継承のメリットは,新たに機能を付け加えるときに,元のクラスをそのま まに,付け加えて部分だけを別(のクラス)に書けるとことです。  問1の「エ クラスは,その親のクラスから属性とメソッドを継承できる。」 が正解でした。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃     子クラスは,親クラスをまるごと継承   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃     継承のメリット,差分プログラムの実現   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃     継承は,クラスの親子関係,インスタンスは,クラスの分身   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ------------------------------------------------------------------------ ▼ 解説 問2 振る舞い  もう一度,問2をみてみましょう。 問2  オブジェクト指向開発において,オブジェクトのもつ振る舞いを記述したもの を何というか。  ア インスタンス  イ クラス  ウ メソッド  エ メッセージ ■キーワード■ 振る舞い ■解答■   ネットワークスペシャリスト午前平成12年問70  ウ メソッド  例のプログラムで,点は,自ら他の点と線を結ぶことができました。これが, この「結ぶ」という行為が振る舞いです。メソッド(=仕事)のことです。  メッセージとは, 20: public void paint(Graphics xg){ 21: xa.tunagu(xg, xb); 22: }  において,xa.tunagu(xg, xb) がメッセージです。xb とつなげとプログラム本体 xSmpObj03 がxaにメッセージを送っていると見ます。このメッセージを xa が受け 取って,tunagu()を実行します。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃     メッセージ=オブジェクト.メソッド()   ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ------------------------------------------------------------------------ ▼ 解説 問3 情報隠ぺい  問3を見てみましょう。 問3  オブジェクト指向における情報隠ぺいの説明として,適切なものはどれか。  ア オブジェクトは,そのデータに対して定義されたメソッドによってだけ,   アクセス可能である。  イ オブジェクトは,抽象データ型の要素でなければならない。  ウ 親クラスに定義されたメソッドは,実行時に子クラスだけに引き継がれる。  エ 同一メッセージでも,実行時には受信クラスに基づきメソッドが束縛され   る。 ■キーワード■ アクセスメソッド ■解答■   システム監査技術者午前平成11年問36  ア オブジェクトは,そのデータに対して定義されたメソッドによってだけ,   アクセス可能である。  アクセスメソッドの説明です。アが正解です。  抽象データ型とは,例の xSmpObj04.java 以降の xPoint クラスです。xPoint がどういうデータ構造であるかは,利用側からみると,隠ぺいされています。具 体的なデータ構造が外部から不明ということで,抽象データ型と言われます。  「ウ 親クラスに定義されたメソッドは,実行時に子クラスだけに引き継がれ る。」は,継承のことで,「情報隠ぺい」ではありません。  「エ 同一メッセージでも,実行時には受信クラスに基づきメソッドが束縛され   る。」は,メッセージは,送られた側のメソッド定義によって,動作が決まり まります。それを束縛と表現しています。正しい文ですが,「情報隠ぺい」とは 関係がありません。 ------------------------------------------------------------------------ ▼ まとめ  オブジェクト指向は,オブジェクトを明確にして,そこ(クラス)にできるだけ プログラムを書こうという気持ち表します。オブジェクト指向は,オブジェクト 指向言語でなくても実現ができます。オブジェクト指向言語を使うとそれが, 用意に実現できます。  オブジェクト指向のかなめは,クラスとインスタンス,カプセル化,継承です。 ------------------------------------------------------------------------ ▼ 次号の予定  次号は,Robocode を扱います。  感想は,斎藤まで,suehiro@he.mirai.ne.jp  広告等のお問い合わせ:jmaga@yscon.co.jp ------------------------------------------------------------------------ ▼ 当メールマガジン情報 当メールマガジン Jマガ情報  http://www.yscon.co.jp/j/java/jmaga/ 登録・削除  http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html 広告受付  http://www2.odn.ne.jp/~egu33/jmaga/jmaga-ad.html ------------------------------------------------------------------------ ▼ 著作権について  このメールマガジンで公開しているプログラムソースは,著作権を当方スタッ フが所有しますが,商用を含めて,再利用,改変,発表を制限しません。  本文に関しては,斎藤末広が著作権を所有します。再利用に関しては,承諾を 必要とします。 ------------------------------------------------------------------------ ▼アンケート(以下を返信してください)  この号のJマガに対するご意見をお待ちしてます。ぜひ,ご返信下さい。 内容のレベルは 1 難しいのでもっと簡単にしてほしい 2 ちょうどよい 3 もっと難しくてもよい その他ご要望