- PR -

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

投稿者投稿内容
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-01-24 14:24
引用:

るるるさんの書き込み (2004-01-24 12:31) より:
私はソフトウェアの規模という視点も含めたものとして「ソフトウェアの複雑性」
という視点を入れて考えると、なにか糸口が見つかるのではないかと考えています。
つまり、私たちソフトウェア開発者はソフトウェアの複雑性といつもお付き合いを
しているのですが、オブジェクト指向は複雑性とのお付き合いという点で
他の方法達より優れているところがある!(と私は考えている。)

という意見はどうでしょう。



とてもよい視点だと思います。ソフトウェアを設計するときには、複雑なものをいかに
単純にできるか、ということに神経を使います。単純であればバグも出にくいし、保守も
しやすいし、大抵の場合はパフォーマンスもよいからです。

複雑なものを単純に表現するには、複雑なものを抽象化する手段が必要です。そのための
手段としていろいろな方法が考えられましたが、現在のところオブジェクト指向がもっとも
優れていると考えられているわけです。

複雑なものを何も考えずに複雑なまま実装しているのであれば、OOのメリットはなかなか理解
されないでしょうね。また抽象化の能力に欠けている人は、OOの各種手法そのものを理解でき
ないかもしれません。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2004-01-24 15:20
>・ ユーザー定義のメソッドなのか、スーパークラスのメソッドなのか区別し辛い。
>遡るのに時間が掛かってしまう。
それはクラスの設計ミスです.「さかのぼる必要がある」こと自体が間違ってます.
そういう必要がないように設計するものです.

>・ JVM 確立の為一番最初の実行時には信じられないパフォーマンス低下が見られる事。
>パフォーマンス低下と再利用の関係がよく分からないが、起動が遅いのは大量のクラス
>をロードするからであり、JVMが悪いわけではありません。実際、SWTの場合、外部
>リソースをロードしなければ、これがJavaか?と疑いたくなるくらい起動が早いです。
起動時に遅いのはWordだろうがIEだろうが同じなんですけどね...

>はっきり言って、「どのOSでも同じソースで動く」環境なら私は Java よりも
>Perl を選びますし、
Perlは起動も別に早いわけじゃないし,起動後も遅い.
また大規模プログラムの生産性,再利用性は最悪です.

>開発言語は C が一番小慣れてます。
結局はここなんでしょうね.
オブジェクト指向のことをまだ全然理解できてないから,そのメリットが生かせて
ない.それだけのことです.
英-Ran
ベテラン
会議室デビュー日: 2002/06/12
投稿数: 55
投稿日時: 2004-01-24 18:46
引用:

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



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

[ メッセージ編集済み 編集者: 英-Ran 編集日時 2004-01-24 18:46 ]
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2004-01-24 20:12
>・ 特に Java Applet の場合、ブラウザ側から見た「開発時の Java の"最新バージョン"」
>に束縛されている為、JDK1.3 で開発して上手く動いていた Java Applet のソースを
>J2SDK1.4 の環境でコンパイルすると、ブラウザの方が対応してなくて画面に何も
>描画されなくなってしまう。
問題とされているのは,
「新しいバージョンのアプリが古い環境上で動かないこと」
ではなくて,
「古いバージョンのアプリが新しい環境上で動かないこと」
の方です.

たとえば,Windows2000 SP1用のアプリがWindowsXPやWindows2000 SP3の上で
動かなくなることなどがこれです.せっかく作ったアプリケーションがOSや
ランタイムの旧バージョンのサポート打ち切りや,場合によってはサービスパック
を当てただけで使えなくなるというリスクは可能な限り避けたいものです.

これに対し新しいアプリを古い環境上で動かす方については,古い環境には新しい
環境にあるはずの機能がそもそも無かったりするので,その機能を利用している
新しいバージョンのアプリが動かないのは当然です.Javaは魔法や銀の弾丸では
ないので,万能ではありません.

これって基本中の基本では?
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2004-01-24 20:17
>さて、そもそもなんでソフトウェア開発にオブジェクト指向が利用・必要とされる
>ようになったのでしょうか?
別に昨日今日に始まったことではなく,再利用性や生産性向上はプログラマーの
永遠の課題です.常にそのための挑戦が行われてきたでしょうし,数多くの
失敗事例とほんの僅かな成功事例を生み出してきました.

そのような進歩の中で生まれて来たものの一つが,そして現在最も強力なのが
Javaなどのオブジェクト指向というだけのこと.

>オブジェクト指向は他の方法に比べ優先する理由が本当にあるのだろうか?
単に完成度の問題だと思います.他の技術を使ってJava以上の生産性向上が
実現できるようになれば,Javaも過去の遺物と呼ばれるようになるでしょう.
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-01-24 22:42
>コブラさんの意見は「なぜJava言語を使うのか?」という問いかけになってしまって
>いると感じます。

Java が オブジェクト指向と一般に言われる以上、オブジェクト指向というカテゴリーの
集合には当然含まれるからな。

>それはクラスの設計ミスです.「さかのぼる必要がある」こと自体が間違ってます.
>そういう必要がないように設計するものです.

ひょっとして、使いたいメソッドがどのスーパークラスに属するのか、どのスーパークラス
を import すれば良いか知らずして目的のメソッドを呼び出せる超能力者の方ですか?

>欲しい値を取り出せるよう、インターフェースを拡張し、そのインターフェースを介してアク
>セスすればよいのでは?

Java ではそこまで面倒臭い手続きが必要でも、Cなら printf(), printk(), syslog() で
即座に確認できますな。

>Perlは起動も別に早いわけじゃないし,起動後も遅い.
>また大規模プログラムの生産性,再利用性は最悪です.

これは、Perl という言語を余り理解しておらっしゃらない方の発言かと御見受けします
が・・・(笑) 少なくとも、JVM 初起動時の重さよりははるかに軽いかと。

>問題とされているのは,
>「新しいバージョンのアプリが古い環境上で動かないこと」
>ではなくて,
>「古いバージョンのアプリが新しい環境上で動かないこと」
>の方です.

いや、残念ながら、ソースコード(あんたの言うアプリ?)を古いバージョンにしたり、
新しいバージョンにしたりするのは効率が悪過ぎるので、そういう変更は一切してません。
新しい環境でも、古い環境でも同じソースコードで動かす事が目的の一つであるので。

>これって基本中の基本では?

うむ。そういう事って開発者である以上必ずついて回る問題やと。。。
だから必要以上に Java ≒ OOPL に固執する必要も無い訳ですな?
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-01-24 23:13

> ひょっとして、使いたいメソッドがどのスーパークラスに属するのか、
> どのスーパークラスを import すれば良いか知らずして
> 目的のメソッドを呼び出せる超能力者の方ですか?
悪夢を統べるものさんがおっしゃっているのは、そもそもどのクラスが
使いたいメソッドを実装しているのか、を考慮しなければならないと言う
時点でクラスの設計が間違っていると言うことだと思います。

あるスーパークラスが持つメソッドをサブクラスが実装あるいは
オーバーライドしたとしても、そのメソッドの本質的な部分は
変らないのでそんなことを気にする必要はないはずです。

> Java ではそこまで面倒臭い手続きが必要でも、
> Cなら printf(), printk(), syslog() で 即座に確認できますな。
ちょっと意図していることがよくわかりませんが、
Javaで言うSystem.out.println()他の事ではないですか?

> これは、Perl という言語を余り理解しておらっしゃらない方の
> 発言かと御見受けします が・・・(笑)
> 少なくとも、JVM 初起動時の重さよりははるかに軽いかと。
初回起動以降は早いですよね。
ついでに(笑)の意味がわかりません。別に笑うところではないでしょう。
投稿する場所を間違えてませんか?ここは@ITですよ。

> いや、残念ながら、ソースコード(あんたの言うアプリ?)を古いバージョンにしたり、
> 新しいバージョンにしたりするのは効率が悪過ぎるので、
> そういう変更は一切してません。
> 新しい環境でも、古い環境でも同じソースコードで動かす事が目的の一つであるので。
誰もソースを変更するとは言ってないように思いますが。
あとブラウザが対応していないと言うのは単にJava Plug-inが古いだけではないですか?
あと画面が描画されないとの事ですが、Javaコンソールなりを見て原因を追究すれば
解決できるのではないでしょうか?

とりあえずコブラさんの投稿を見ていると、どうもAppletで相当苦労されたようですね。
ただAppletだけでJavaが欠点だらけのように発言するのはいかがなものかと思います。

# スレッドの主旨から外れるのでこれ以上はやめときます。



まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2004-01-24 23:33
引用:

コブラさんの書き込み (2004-01-24 22:42) より:
>コブラさんの意見は「なぜJava言語を使うのか?」という問いかけになってしまって
>いると感じます。

Java が オブジェクト指向と一般に言われる以上、オブジェクト指向というカテゴリーの
集合には当然含まれるからな。


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

引用:

>それはクラスの設計ミスです.「さかのぼる必要がある」こと自体が間違ってます.
>そういう必要がないように設計するものです.

ひょっとして、使いたいメソッドがどのスーパークラスに属するのか、どのスーパークラス
を import すれば良いか知らずして目的のメソッドを呼び出せる超能力者の方ですか?


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

意識したことないですか?
それ考えたら、パッケージとクラス名であるはVMが解決してくれる
Javaの便利さが良くわかるかと。

でも、この話はオブジェクト指向とまったく関係ありません。


引用:

>欲しい値を取り出せるよう、インターフェースを拡張し、そのインターフェースを介してアク
>セスすればよいのでは?

Java ではそこまで面倒臭い手続きが必要でも、Cなら printf(), printk(), syslog() で
即座に確認できますな。


そんな単純なことしかしたくないのならCなんかではなく
それこそperlでも使っていたらよいだけの話です。
(手続き、といってしまうところがOOに向かない部分でしょうか?)

通常システム開発で必要とされるアプリケーションは
そんな単純なものではないはずです。

引用:

>問題とされているのは,
>「新しいバージョンのアプリが古い環境上で動かないこと」
>ではなくて,
>「古いバージョンのアプリが新しい環境上で動かないこと」
>の方です.

いや、残念ながら、ソースコード(あんたの言うアプリ?)を古いバージョンにしたり、
新しいバージョンにしたりするのは効率が悪過ぎるので、そういう変更は一切してません。
新しい環境でも、古い環境でも同じソースコードで動かす事が目的の一つであるので。


これもOOは関係ありませんね。

そもそも古い環境で動かしたいんなら古いバージョンのAPIで
ものを作ればよいだけのこと。
新しい機能のメリットを捨てるだけです。

引用:

うむ。そういう事って開発者である以上必ずついて回る問題やと。。。
だから必要以上に Java ≒ OOPL に固執する必要も無い訳ですな?


これは何を言ってるのかわかりませんが。
Javaはいろいろあげたようにダメだから、当然OOもダメだと?
JavaがOO言語だからといってOODしなくてもいいだろうって?


それはともかく。

私の考えるOOのメリットはシステム化したい対象をわりと
自然にモデル化できるという点です。
システムが扱うべきデータには何かしらの使命があるはずですが
それがすんなりまとめられる。

おかげで最初からコンピュータ向きだった処理が扱いにくくは
なってるんでしょうけれど、開発の規模が大きくなれば十分
相殺される範囲です。

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