2009/06/19
メルマガJava超入門
2009年6月19日発行 マガジンID:0000065214 ◆Java超入門Vol.084 =============================3738部発行◆ 超入門から使えるJavaを説明します。 http://www1.odn.ne.jp/sapost (バックナンバーもあります) ◆=========================================================◆ ●学習会参加者募集中(初心者大歓迎です) Javaを学習してみようと思っている方ならどなたでも大歓迎です。 わかりやすく説明しますので、ぜひ参加ください。 ・名古屋 7月 6日 (日) 9:30より 8月 2日 (日) 9:30より 下記の名古屋のホームページでご確認ください。 参加費 500円(当日徴収) 中生涯学習センター集会室 名古屋市中区橘1-7-11 (地下鉄名城線上前津下車6号出口南1つ目の信号右) http://www.mask.co.jp/java00/java01.htm ・東京 主催者多忙のため、お休みさせていただいています。ボランティア の方がおられましたら、ご連絡ください。 メーリングリストで分からないところや、いろんな質問が出来ます ので活用してください。 javachounyumon@freeml.com ※投稿メールアドレス(投稿される前に登録を済ませてください) http://www.freeml.com そのほか、mixi、GREE、フレパでも「Java超入門」コミュニティー あります。 ●プログラマー募集 ***** 急募 ***** C C++ Javaの出来る方募集しています。そのほかのスキルのある 方もご相談ください。在宅勤務、県外の方でも可能です。詳しく はお気軽にお問い合わせください。会社は、JR八王子駅から 徒歩2分です。遠方の方でもお願いできると思いますので、お問い 合わせください。 株式会社 マイソフト http://mysoft.co.jp Tel.042-656-1023 tohsawa@mysoft.co.jp 大澤まで ●ご無沙汰していました。 定期的に発刊できなくて申し訳ありません。出来る限り、発刊して いきますので、よろしくお願いします。 ●前回の手続き型プログラミング 前回は、Campusのdrawメソッドの問題点を指摘して終わりました。 「えっ、このdrawメソッド、何の問題もないじゃん。これでいいじゃん。」 と思った方は、従来の手続き型プログラミングの考え方がどっぷりと沁み ついている方かもしれません(手続き型プログラミングが悪いと言っている のではありません。誤解のなきよう)。 ●オブジェクト指向の拡張性 オブジェクト指向の観点から前回のプログラムの問題点を一言で言うなら、 拡張性に乏しいということです。オブジェクト指向設計では、いろいろな 部品(クラス)を組み合わせてシステムを作ります。部品は、差し替えが 自由で、新規の部品(今までにない新しい部品)を作ったとしても、差し 込まれる本体には、ほとんど影響がない(変更箇所がない)のが望ましいの です。 ●オブジェクト指向との違いについて この例では、Campusが本体です。差し込まれた部品(RectangleやTriangle) によって、さまざまな図形を描きます。問題は、Campus自身が図形を描いて いることです。そのためには、Campusは提供された(引数で渡された)オブ ジェクトが何の図形であるかを知らねばなりません。 もし、ここでCircle(円)のオブジェクトが新しく作られCampusに提供され たらどうなるでしょう。Campusは円を描くことができませんね。Campusが円 を描くためにはdrawメソッドを変更しなくてはなりません。つまり、本体を 変更しなくてはならなくなってしまうのです。 オブジェクト指向的なプログラムを紹介しましょう。 ●オブジェクト指向プログラミング class Figure { void draw() {} } class Rectangle extends Figure { void draw() { // 四角形を描くプログラムをここに書く System.out.println("とりあえず四角形と表示。"); } } class Triangle extends Figure { void draw() { // 三角形を描くプログラムをここに書く System.out.println("とりあえず三角形と表示。"); } } class Campus { void draw(Figure obj) { obj.draw(); } } class Sample { public static void main(String[] args) { Figure r = new Rectangle(); Figure t = new Triangle(); Campus c = new Campus(); c.draw(r); // 四角形が描かれる c.draw(t); // 三角形が描かれる } } ●オーバーライドとは 前回のプログラムとは、いくつかの違いがあります。 まず、Figureとそのサブクラスにdrawメソッドを持たせたこと。 もう少し正確に言うなら、Figureのdrawメソッドを、そのサブ クラスでオーバーライドさせたことです。オーバーライドとは、 スーパークラスのメソッドの、メソッド名・引数・返値が全く 同じメソッドをサブクラスで定義することです。違っているのは、 処理の中身だけです。図形を描くのは、Figureのサブクラスの責任 としたのです。 ●多態性とは 次に、Campusは図形の描き方を、全く知る必要がなくなりました。 Campusのdrawは、提供された部品がFigureのサブクラスであること 以外、何も知らないのです。RectangleとかTriangleとか、そんなこと は全く知りません。 黙って、提供された部品のdrawメソッドを呼べばいいのです (obj.draw();)。 これによって、objの実体がRectangleの場合は、Rectangleのdrawメソ ッドが実行され、Triangleの場合はTriangleのdrawメソッドが実行され ます。このような機能を多態性(ポリモーフィズム)といいます。 さらにこの設計の良いところは、将来、新しい部品、例えば円のクラス が作成されたとしても、本体であるCampusは何の影響も受けないという ことです。 ●新しい部品の作成 class Circle extends Figure { void draw() { // 円を描くプログラムをここに書く System.out.println("とりあえず円と表示。"); } } class Sample { public static void main(String[] args) { Figure f = new Circle(); Campus c = new Campus(); c.draw(f); // 円が描かれる } } 次回は、この話をもう少し発展させましょう。 ●編集後記 なかなか厳しい時代になっているようです。いろいろ仕掛けていま すが、なかなかうまくいきません。ただ、ひとつ救いがあるのは、 歴史的に見ても、いいときも悪いときも、それほど長くは続かない ということはわかっています。 今回の世界恐慌は、人為的な原因が大きく、金銭欲に走った一部の おろかな人間達が起こしたことです。この人たちは自分だけの私利 私欲のために情報操作し、それによって多くの人たちが苦しんで います。 どんな時代であれ、生きていかなければなりません。私達は、今の 非生産性の金の流れでなく、生産性のある金の流れを考えていか ないといけないのかもしれません。坂本 ===========================================================◆ ご意見や改良点などがありましたらメール下さい。 javaclub@netsakka.com -----------------------------------------------------------◆ ※話題の竹酢水を製造販売しています。代理店募集中! http://www.takesu.com ============================================================= ■登録/解除の方法 http://www1.odn.ne.jp/sapost/mag.html 「JAVA超入門」は、上記URLよりいつでも登録/解除可能です ------------------------------------------------------------- このメールマガジンは、インターネットの本屋さん『まぐまぐ』を 利用して発行しています。(http://www.mag2.com/ ) ------------------------------------------------------------- ◎掲載されている会社名・製品名は、各社の登録商標または商標です。 掲載された記事及びコンテンツを許可なく転載することを禁じます。 執筆・編集者および発行者は掲載された内容に起因するトラブルには 一切関与いたしませんので、あらかじめご了承ください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 執筆・編集 Sakamoto


