- PR -

なぜオブジェクト指向を使うのか?

投稿者投稿内容
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2004-01-25 10:41
>コブラさんへ

失礼ですが、貴方は全く見当はずれの発言をされています。
参加者には少なくとも話題に即した議論ができる程度の分別と知識が求められます(※)。このスレッドで扱うテーマに関して、貴方にはそれが欠けています。
※もちろんここ(@IT会議室)に限ったことではないです。

プログラミングで困っているのなら、
「unsignedが無くて困っています」
「いつでも・どこでも端末の標準出力に欲しい値を表示したい」
「ユーザー定義のメソッドなのか、スーパークラスのメソッドなのか区別し辛いです」
「JVM 確立の為一番最初の実行時には信じられないパフォーマンス低下が見られます」
「JDK1.3 で開発して上手く動いていた Java Applet のソースをJ2SDK1.4 の環境でコンパイルすると、ブラウザの方が対応してなくて画面に何も描画されなくなってしまう 」
等の、別の質問スレッドを立ててください。そうすれば適切な回答がもらえるでしょう。

ただ、このスレッドでのコブラさんの発言は貴方自身にとっても、他の人にとっても有益なものにはならないと思います。もっとはっきり言えば、このスレッドにはこれ以上書き込まないでください、ということです。よろしくお願いします。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-01-25 11:22

「やめときます」と言っておきながらなんですが、
リクエストがあったので再度書き込みします。

引用:

コブラさんの書き込み (2004-01-25 00:27) より:
>誰もソースを変更するとは言ってないように思いますが。

じゃ、取り敢えず解っておられるらしいあなたが、具体的に

「古いバージョンのアプリ」とは?
「新しいバージョンのアプリ」とは?

提示してくれますか?
アプリってそもそもソースコードをコンパイルして動くものだと認識してますが。




つまり、ターゲットとしているJVMのバージョンが古いか新しいかだと思います。
例えば
「新しいアプリ」・・・J2SE1.4.x をターゲットに。
「古いアプリ」・・・J2SE1.2.xをターゲットに。
という事かと。

J2SE1.4.xから追加されたAPIを使ったアプリがJ2SE1.2.xのJVMで動くわけがないですよね。
これが悪夢を統べるものさんが指摘されている問題だと思います。

逆にコブラさんが言われているのは、J2SE1.2.xをターゲットに作った
アプリがJ2SE1.4.xでうまく動かなかった、という事ですよね。
Javaは基本的に下位互換性が保たれていますが、それでも実装の詳細が
変更されることで動作に不具合が出る可能性はあると思いますので、
確かにコブラさんが言われる問題もあると思います。

特にAppletではJava Plug-inのバージョン等もあるので
その辺の話が余計にややこしいのかもしれません。

引用:

コブラさんの書き込み (2004-01-25 06:22) より:
「もう少し知的な表現」これ、余りにも抽象的過ぎて頭の悪い我々「普通の人間」には
ピンときませんね。

具体的には、どういう表現を指しますか?



要は(笑)と言ったほかの投稿者を侮辱するような書き込みはしないで頂きたいと言う事です。

聖域とは言いませんが、ここは非常にマナーと言うかモラルが保たれた
場所だと思っています。
他の投稿者の方は紳士的に書き込みしていますし、@ITが他の某掲示板は
某JavaMLに比較して比較的穏やかな雰囲気を保っているのは、投稿者全員が
そういうマナーを守っているからだと思っています。

(笑)なんていう事を書き出すと売り言葉に買い言葉で収拾がつかなくなり、
スレッド本来の主旨・価値がなくなってしまうでしょう。
そうなってしまうのは悲しいじゃないですか。
アイティメディア藤村
@ITスタッフ
会議室デビュー日: 2001/07/27
投稿数: 244
お住まい・勤務地: 飯能<->丸の内
投稿日時: 2004-01-25 11:51
藤村です。午前中の、投稿が静まっている時を狙って顔を出してみました(笑)。
どなたかに気をつかって書いていただきましたが、「@ITの会議室」は、特別な会議室ではありません。

レギュレーション(お約束)は、こちらの下部にひっそりと書かせていただいていますが、一般的なのものです。

投稿者同士が、そしてそれを読んでいる方々にとって気持ちが良く、かつ役に立てば、それでいいと思います。高級な議論だけでなくてもOKです。
兄弟サイトの「@IT自分戦略研究所 会議室」では、なまなましい話題が飛び交っていますし。

で、このスレッドですが、議論が少々熱くなっていますが、スレッド起点の「るるる」さんが冷静に繰り返されているように、「なぜオブジェクト指向を使うのか」ということがテーマのようです。ちょうど見合った会議室がないので「Java Solution」の会議室を使われただけでしょう。これが若干の混乱の元と。

ぴったりの「会議室」をご用意できていないのは手前どもの不手際ということでお許しを(笑)。

そんなわけで、特定言語の善し悪しの議論は、このスレッドでは捨象されてもいいのではないでしょうか。
スレッドオーナー(そんな概念あり?)の「るるる」さんも、それをお望みのようです。

ちなみに、特定言語の色を避けて「オブジェクト指向」を語ってみようかということで、やはり常連の投稿者の方が、@IT自分戦略研究所のほうで、一連の「オブジェクト講座」を立てられています。こんなスタイルもあるのですね。

気取る必要はありませんが、お互いに投稿して良かった、読んで良かったという雰囲気づくりには協力していただければと思います。

お邪魔しました。

_________________
アイティメディアの藤村からでした。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-01-25 12:19
はにまるです。

”なぜオブジェクト指向を使うのか?”
の問いについては、

 正直なところ、物件で上司やお客がオブジェクト指向言語を使うと決めたから
 それに従っている。で、オブジェクト指向言語を使うからオブジェクト指向を
 使うが、本音ベースでは無いでしょうか?

 書籍を見ると、オブジェクト指向が凄いらしい、
 ベンダーの話でも、オブジェクト思考が凄いらしい、
 これが、技術者の好奇心を煽り立て、”じゃー使ってみたいね〜!”
 ってヤラレテいる感じです。(自分も含め^^)

 でも、ここまで広がるという事は、
 オブジェクト指向の非利用者(私)からして無視出来ない状態です。
 
技術的な話は別として業務的な利点(求めている恩恵)として、

 業務やコンピュータシステムの複雑な知識、深い知識を知らずとも、
 欲しい機能、サービスを特定オブジェクトの存在と利用方法さえ知っていれば、
 機能とサービスを受けることが出来る。
 これが最大の利点です。
 
 つまり、より”一層の分業”が出来ると言う事です。
 これは管理者の心を引きます!

 もち、いち技術者として高度な部品化も惹かれます。

# 追記-開始
 分業について

 ”サブシステム”、”インフラと業務アプリ”で担当を分けた場合
 設計上の各インタフェースで検証時にバグや出戻りが多発します。
 これはコミュニケーション上の問題として一般的に捕らえるのですが、
 私は、責任の擦り付け合いに寄る無責任心が要因と考えています。

 オブジェクト指向の場合、オブジェクトの境界線を明確にする必要性が
 ある為、検証フェーズで問題が発覚する率が大幅に減ると思います。
 その分、設計フェーズで責任分担が揉める伺いましたが...
 全体的に見れば、その方が良いと思います。
# 追記-終了

[ メッセージ編集済み 編集者: はにまる 編集日時 2004-01-25 13:31 ]
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-01-25 13:35
Cしか書けない、化石プログラマの立場から言いますと...

Cでも大規模なプログラム、数万行あるサーバとかOSカーネルとかに
なると動的束縛を用いたオブジェクト指向の書き方がなされている
なんてことはよくあります。
# 私自身はごく短いプログラムしか書かないのですが
この場合のメリットは、
・コードの見通しがよくなること
・メンテナンス性(拡張性)にすぐれていること
です。

引用:

英-Ranさんの書き込み (2004-01-24 18:46) より:
オブジェクト指向の有効性を理解したいのであれば、C言語のような構造体+関数ベースの言語とJavaやC#のようなオブジェクトベースの言語でスタックを作成してみてください。すぐにオブジェクト指向の(ボトムアップ的な)有効性が理解できるはずです。


んーと、これは「Cだと相互作用が生じないようにプログラマが
気を使う必要があるが、オブジェクト指向言語だとそんなことを
考えなくてもよい」という話でしょうか。
Cで書くときも、ある程度オブジェクト指向的に書くでしょうね。
そこで、プログラマが面倒をみなきゃならない部分がオブジェクト
指向言語と比べると大きい、とゆー。
英-Ran
ベテラン
会議室デビュー日: 2002/06/12
投稿数: 55
投稿日時: 2004-01-25 14:46
引用:

引用:

英-Ranさんの書き込み (2004-01-24 18:46) より:
オブジェクト指向の有効性を理解したいのであれば、C言語のような構造体+関数ベースの言語とJavaやC#のようなオブジェクトベースの言語でスタックを作成してみてください。すぐにオブジェクト指向の(ボトムアップ的な)有効性が理解できるはずです。


んーと、これは「Cだと相互作用が生じないようにプログラマが
気を使う必要があるが、オブジェクト指向言語だとそんなことを
考えなくてもよい」という話でしょうか。
Cで書くときも、ある程度オブジェクト指向的に書くでしょうね。
そこで、プログラマが面倒をみなきゃならない部分がオブジェクト
指向言語と比べると大きい、とゆー。



スタックを書いてみればわかることですが、C言語のような構造体+関数ベースの言語ではアルゴリズムとデータ構造が分離せざるを得ません。オブジェクト指向のプログラマ側から見た重要なメリットは「アルゴリズム+データ構造」をひとつの塊として記述可能なことだと私は理解しています。

# ただ、知ってのとおりクラスベースの分割でもアルゴリズムとデータ構造が
# 分離する場合が出てくる。そのために用意されているのがpackageやinner class
# アスペクト指向などといった技術なのだと私は理解しています。

オブジェクト指向の有効性を考えるときには「すべてをオブジェクトとして考えることができる」といったトップダウンアプローチもあり、これもこれで重要だとは思いますが、初心者のプログラマには実益が理解しにくいので初心者向けの本でこの話が良く出てくる現状を余りよいとは(私は)思っていません。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-01-25 15:13
特にオブジェクト指向に限った話ではないですが、プログラミングする上でLow Coupling、
High Cohesionという原則があります。これは要するにモジュール間の依存関係を減らすこと、
関連する機能を一つのモジュールに凝縮することです。

ぽんすさんの書かれた、
引用:

・コードの見通しがよくなること
・メンテナンス性(拡張性)にすぐれていること


これらのメリットもLow Coupling、High Cohesionなコーディングでもたらされるものです。
これを実現する手段としてオブジェクト指向的な考え方が現状では優れているから、

引用:

Cでも大規模なプログラム、数万行あるサーバとかOSカーネルとかに
なると動的束縛を用いたオブジェクト指向の書き方がなされている
なんてことはよくあります。


このように非OOPLでもオブジェクト指向的なプログラミングをすることになるのだと思います。
ただし非OOPLでオブジェクト指向的なプログラミングを行うと、どうしてもトリッキーな
部分が出てきてしまい、

引用:

Cで書くときも、ある程度オブジェクト指向的に書くでしょうね。
そこで、プログラマが面倒をみなきゃならない部分がオブジェクト
指向言語と比べると大きい、とゆー。


こういうことになっているのではないでしょうか。オブジェクト指向のアプローチが有効なら
OOPLを使うのが自然ですし適切ですね。
#もちろんそういうわけにはいかない場合があるのは理解しています
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2004-01-25 16:36
コブラさんの書き込みから
引用:

>必要条件と十分条件についてきっちり理解してみることをお勧めします。
>あるいは、集合の包含関係とかでもいいですが。

この場合、そんな大げさに構えなくても、ただ「含まれるか、含まれないか」だけで
考えれば良いかと。物事はなるべくシンプルに考えましょう。


大げさも何も、言ってることは同じこと(同値)ですので。
そこがシンプルに見えないのでしたら知識の幅を広げましょう。


引用:

>importの話はCだって変わりませんよ。
>どのヘッダファイルが必要なのか注意しないとすぐにわからなくなります。

ならば、「何が何でも Java」でなくてもよろしいのかと。大して変わらんのでしょう?
後、どんな複雑なシステムでも処理された値を確認する為に結果を見ながら修正するんじゃ
ないでしょうかね。


言いたいことが伝わっていないですね・・・
OOだからでてくる欠点ではないのですよ。なので、このスレッドでこの話が出てくるのは筋違いです。


引用:

しかし、枝葉末節に拘って論う割りに、 signed, unsigned の件だけは誰も触れようと
しませんな(笑) 真の弱点には触れるな という事でしょうか・・・


それこそOOとは一切関係ない話ですからね。
unsigned intがなくて苦労している人は多いでしょうが、それはJavaの欠点です。


ああ、そういえば。
最近のperlってオブジェクト指向サポートではなかったですか?>識者のみなさま


もう面倒なのでやめておきます。


本題に戻って。

ぽんすさんの
引用:

Cで書くときも、ある程度オブジェクト指向的に書くでしょうね。
そこで、プログラマが面倒をみなきゃならない部分がオブジェクト
指向言語と比べると大きい、とゆー。


っていうのは、オブジェクト指向開発をするとなったら
オブジェクト指向言語を選べと言う傍証ではありますが、
るるるさんの、
引用:

さて、そもそもなんでソフトウェア開発にオブジェクト指向が利用・必要とされる
ようになったのでしょうか?


に対する答えではないですよね。

ただ、CでもOOPを目指すことがあるというのはこの理由を
追求するのにいい例になりそうな気がしています。

従来のやり方ではカバーしきれなくなってきたところへ
あたらしい方法論が飛び込んできたのでみんなうれしくなって
使おうと考え始めた、という感じなんでしょうかね。

スキルアップ/キャリアアップ(JOB@IT)