[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[b-free: 967] Re: Programing style Issue.
三原@東工大といいます。このスレッドでは初めまして。
# MLのまとめの作業してなくてごめん。
# でもメールを書く暇は作るの。
From: jc5m-ootk@asahi-net.or.jp (Masaya Ohtsuki)
Subject: [b-free: 966] Programing style Issue.
Date: Wed, 21 Jan 98 18:15:53 +0900
> まさやくん@あさひねっとです。
> なにかにつけてオブジェクト指向設計が云々って、記事がよく流れてくるけど・・・
> 一体全体、今まで通りの複合化設計と比べてオブジェクト指向は、どこがどのように
> 優れているのか、又は劣っているのだろうか。
もっと詳しい人のフォローがあるといいのですが、
Java と C++ だけ見た人間がソースコードを書くときのことだけを考えると、
オブジェクト指向言語の良さは、
1.変数のスコープが狭くて広い。
クラスの動作を記述するときには、変数や関数のスコープはクラスの中しかな
いので、変数や関数の重複をあまり心配しなくて済みます。
インスタンスを操作するときには、関数名がインスタンスについて回るために
他のインスタンスを操作する関数ことを考える必要がありません。
例えば、ファイルを表現する File クラスがあったとします。このクラスに
write() を記述するとき、中に現れる変数や関数は、File クラスで定義され
たものしか見えません(他のクラスのインスタンスを操作するものは別)。
File クラスの write() を呼び出すときには、どのクラスの中であろうとも
File クラスのインスタンス f があれば、f.write() としてやれば File クラ
スの write() が呼び出されます。
別のクラスに同名の変数や関数があったとしても衝突しないんです。
違うクラスが同じ名前の関数(method)を持てることを活かすため、コンパイル
時型チェックのない(緩い) Smalltalk や Objective-C といった言語があり
ます。同じ名前の関数を持つクラスの操作に使い回せるコードを書くことがで
きるのです。ただし、これをすると、何かあったときには実行時エラーを発生
するようになっているのですが、コンパイル時型チェックというバグ減らしの
切り札を放棄することになるので、これらの言語はあまり一般に広まっていま
せん。しかし、同様の考え方は OpenDoc や JavaBeans などコンポーネントを
寄せ集めて使うシステムに生きています。
2.コンパイル時型チェックが厳しくて緩い
C++ や Java などコンパイル時型チェックがある言語に限ります。
クラスは構造体と同様に定義できるので、コンパイル時に型チェックできます。
でも、オブジェクト指向言語には、あるクラスの機能を受け継ぎ別の機能まで
持たせる「継承」という仕組みがあります。B クラスを、 A クラスを継承す
る形で作ったとします。すると、B クラスのインスタンスは B クラスのイン
スタンスである(反復同義)であると同時に、A クラスの機能を持つ A クラ
スのインスタンスでもあります。A を含む B を A として扱うことが、キャス
トなしに、できます。
3.差分プログラミングが容易
すでにあるクラスと似たような動作をするクラスを書くとき、前のクラスを継
承してやるか前のクラスのインスタンスを作るかすれば、前に書いたコードを
そっくりそのまま再利用できます。
「オブジェクト指向は差分プログラミングではない」と入門書にはありますが、
実際のところは差分プログラミングができることで救われている部分が目立ち
ます。
複合化設計という言葉は初めて聞いたので分かりませんが、構造化設計と比較
するならオブジェクト指向が劣るところはないと思っています。オブジェクト
指向で構造化設計をまったく模倣することができるからです。その上で問題を
より細分化できます。構造化言語の型チェックと構造体とスコープを理解でき
ればオブジェクト指向は理解できると信じているので、オブジェクト指向を敬
遠する理由はないと思っています。
強いて言えば、いくつかの機能のために実行時のオーバーヘッドが大きくなる
点でしょう。
オブジェクト指向言語でもスパゲッティを書くことはできますが、その敗因は
構造化言語でスパゲッティを書くときと同じなので、オブジェクト指向特有の
問題というわけではないと思っています。
--
三原 克大 (Katsuhiro MIHARA)
東京工業大学理学部情報科学科
mailto:mihara@is.titech.ac.jp
http://www.is.titech.ac.jp/%7Emihara/index-j.html