- PR -

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

投稿者投稿内容
ジャンボカレー
会議室デビュー日: 2003/05/26
投稿数: 17
投稿日時: 2004-01-24 02:49
私達ソフトウェア開発者の仕事場にはオブジェクト指向にまつわる
キーワードが日々増えつづけています。
「仕事で使わなくてはならん。」「必要とされている技術だから。」
それぞれの理由があって、勉強し身につけてきたけれど。
さて、そもそもなんでソフトウェア開発にオブジェクト指向が利用・必要とされる
ようになったのでしょうか?
よく言われる生産性・再利用性・保守性の向上といった理由は、別段オブジェクト
指向でなくても実現可能だ。そう思った事はないですか?(私はあります)
オブジェクト指向は他の方法に比べ優先する理由が本当にあるのだろうか?
皆さん(私を含め)の持っているその答えは初心者を納得させるに足るものだろうか?
きっと十人十色の考えがあると思います。

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

という問いかけから始めてみてはどうでしょう?
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-01-24 08:06
大きな企業システムでは手続き型の設計では生産性、保守性の面で限界があるからです。
アーキテクトやコンサルタントはその限界を知っているから強くオブジェクト指向を勧めるのです。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-01-24 10:16
いや、オブジェクト指向と言えば、特に Java の場合?

・ signed と unsigned の区別が無いばっかりに、余計なビットシフトで MSB いじって
開発側で signed と unsigned を作り出してやらねばならない。

・ インターフェースに束縛されて、特に Canvas 継承して描画する場合、いつでも・どこでも
端末の標準出力に欲しい値を表示できない。

・ ユーザー定義のメソッドなのか、スーパークラスのメソッドなのか区別し辛い。遡るのに
時間が掛かってしまう。

これだけでも相当開発過程に支障あると思いますが。
余計な手間を掛ける事になります。

はっきり言って、「どのOSでも同じソースで動く」環境なら私は Java よりも Perl を
選びますし、開発言語は C が一番小慣れてます。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-01-24 10:26
Java の「再利用性」という謳い文句が最早機能していないと、最も体感できる現象、
それは、

・ JVM 確立の為一番最初の実行時には信じられないパフォーマンス低下が見られる事。

・ 特に Java Applet の場合、ブラウザ側から見た「開発時の Java の"最新バージョン"」
に束縛されている為、JDK1.3 で開発して上手く動いていた Java Applet のソースを
J2SDK1.4 の環境でコンパイルすると、ブラウザの方が対応してなくて画面に何も描画され
なくなってしまう。

こんな現象で、何が「再利用性」ですか?(笑)
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-01-24 11:40
私にとって、オブジェクト指向のメリットは

  • インスタンス、クラススコープで責務をまとめるとができること。さらにJavaの場合、パッケージスコープでの管理ができることがうれしい。
  • マルチプルインスタンス化が容易なこと。
    # マルチプルインスタンス化はオブジェクト指向ではなく生成プログラミングのパラダイムではあるが。

といったところです。

OOPLは再利用に向いているといわれるが、再利用を前提に設計しなければ再利用はできないでしょう。これは、OOPLに限った話ではなく、どんな言語を使っていてもいえることでしょう。ただ、やりやすさの点では、OOPLのほうが楽といえば楽。

引用:

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


G.Booch(Three Amigosの一人)曰く、オブジェクト指向はソフトウェアの複雑さを分解し、より扱いやすいレベルに組織化できるから。

大物に使ってみて便利だからって言われちゃー、言葉の返しようがないですわ。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-01-24 12:08
引用:

・ インターフェースに束縛されて、特に Canvas 継承して描画する場合、いつでも・どこでも端末の標準出力に欲しい値を表示できない。


Canvasと標準出力の関係がよく分からないですが、欲しい値を取り出せるよう、インターフェースを拡張し、そのインターフェースを介してアクセスすればよいのでは?

引用:

・ ユーザー定義のメソッドなのか、スーパークラスのメソッドなのか区別し辛い。遡るのに時間が掛かってしまう。


クラス階層が深いからでしょう。クラス階層を浅くし、また一つのクラスに対する責務を小さくすればよいことだと思います。
私は、インターフェース <-- 実装、または、インターフェース <-- 骨格抽象実装 <-- 実装、とし階層が深くならないよう意識しています。
さらに深くなりそうなときは、コンポジションで解決できないか検討します。

引用:

・ JVM 確立の為一番最初の実行時には信じられないパフォーマンス低下が見られる事。


パフォーマンス低下と再利用の関係がよく分からないが、起動が遅いのは大量のクラスをロードするからであり、JVMが悪いわけではありません。実際、SWTの場合、外部リソースをロードしなければ、これがJavaか?と疑いたくなるくらい起動が早いです。

引用:

・ 特に Java Applet の場合、ブラウザ側から見た「開発時の Java の"最新バージョン"」に束縛されている為、JDK1.3 で開発して上手く動いていた Java Applet のソースを
J2SDK1.4 の環境でコンパイルすると、ブラウザの方が対応してなくて画面に何も描画され
なくなってしまう。


ライブラリの最新機能を使用していないのであれば、-target 1.3とすれば済む問題なのでは?
ジャンボカレー
会議室デビュー日: 2003/05/26
投稿数: 17
投稿日時: 2004-01-24 12:31
ども。るるるです。
コブラさんの意見は「なぜJava言語を使うのか?」という問いかけになってしまって
いると感じます。Javaの会議室なのであたりまえなんですが、あえて今は実装言語
の詳細はおいといて。。。。(必要に応じて別スレにしてみたり)
オブジェクト指向という方法について考えてみませんか?

Anthyhimeさんの意見は「ソフトウェアの規模」という視点から出てきていると
思います。では中・小規模のソフトウェア開発ではオブジェクト指向を優先
して使う必要はないのでしょうか?

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

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

m.ku
大ベテラン
会議室デビュー日: 2002/09/15
投稿数: 184
投稿日時: 2004-01-24 13:48
まあオブジェクト指向は、作るソフトが難しくなってきたから簡単・シンプルにしたい
という要求から生まれたものと理解していますが、確かに簡単になったり、直感的に
なった部分はあります。ただ、より難しいものを簡単に、という難易度が高いものを
相手にしていることと、古い皮袋に新しい酒みたいな表記・概念の説明がなされている
のが「オブジェクト指向は難しい」という現実になっていると思います。

それを端的に現しているのが「まともに理解しているのはほんの一握り」というセリフが
日常的にも非常に多く見受けられること。オブジェクト指向の基本はそう難しくはない
のですが、ちょっと応用的になると現在の習得or教育方法では破綻してますね。それが
根本的な原因かと思います。開発環境を含め、技術者の習得すべき部分が多すぎるのと
難解なのを世界的に改善している最中でしょうが、まだ道のりは遠いと感じます。

ただ、使える部分で使っていけば便利な道具ではあると思います、オブジェクト指向は。

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