ネタつつき16−オブジェクト指向の難しさと、実装を知らない設計者が駄目な訳(その逆も真なり)。2008-12-18 Thu 11:06
今回はオブジェクト指向の難しさについて囀ります。オブジェクト指向は難しいとよくいわれますし実際問題難しいです。では、何が難しいのでしょうか?それは、私が思うに
分析・設計・実装の三つが異なる上に不可分だからでしょう。オブジェクト指向と一言で言っても、オブジェクト分析(OOA)、オブジェクト思考方法論(OMT)、オブジェクト指向プログラミングはそれぞれ抽象度が違う概念です。これを詳細に述べると、1000ページあっても足りないと思いますので、簡単にそれぞれを説明します。
先ずはオブジェクト指向分析(OOA)について簡単に述べます。これは問題領域を知るための分析法です。ソフトウェアを開発する際に一番最初にしなくてはならないのは、問題領域を知ることです。知らないものを開発できるはずが無いのです。そこで必要なのがオブジェクト指向分析なのです。この分析法を簡単に言うと、問題領域の事象をオブジェクトして捉えて考えます。何故このような事をするのかと言いますと、 現実は境目が無い状態だからです。例として人間を考えてみます。人間が持つ情報量は膨大です。よくあるオブジェクト指向の例では、移動する・思考する・食べるなどと表現されていますが、そんな単純なものではありません。医学的に考えると、その様な特徴で人間をあらわしきれ無い事からもそれが窺い知れます。そもそも、人間は人間の全てを知らないので例として問題があります。これが初心者がオブジェクト指向を理解できない一番の原因だと私は考えております。この 繋ぎ目の無い現実の膨大な情報を整理するのがオブジェクト指向分析です。少々乱暴な纏め方ですが、細かい事を言えばきりがありませんので、ひとまずこのように考えてください。 次はオブジェクト指向方法論(OMT)に代表される設計法を説明します。オブジェクト設計では、オブジェクト分析から得た情報から、 作成するソフトウェアに関連する情報を抜き出します。あくまでもソフトウェア開発に関係する事に着目する点に注意してください。先ほどの例で言いますと、人間が持つ情報を整理するために医学書を読み漁るのは懸命だと言えません。私たちはあくまでも開発者であり、医者ではないのです。そこで設計技法では事象をオブジェクトとして捉えて、さらに問題領域の情報を整理整頓します。この設計技法と現実との違いは、 現実には存在しない事象がオブジェクトになる事が多いと言う点です。色々な特徴がありますが、この特徴はオブジェクト指向設計で重要なものだと私は思います。 最後にオブジェクト指向プログラミングについて軽く説明します。オブジェクト指向プログラミングでは、今までの段階で得た情報を オブジェクトとして実装します。この段階がこれまた厄介です。それは何故かと言いますと、使用言語に影響されるからです。誤解している人が多々居ますが、言語の設計思想に影響されているので、各言語のオブジェクト指向の概念は違うのです。おかしなことだと思われるでしょうが、我々はあくまでも情報機器を使用している事を思い返してください。思想を具体化する必要があるので、どうしても言語設計者の思想の影響を受けます。人は十人十色なのです。ですからこの記事では詳細に論じません。 以上の様にオブジェクト指向は三つの段階を経て無駄な情報をそぎ落としてく為の思考法/技法です。ここまで読んだ人の中には、「じゃあ三つのオブジェクト指向は全くの別物なの?」と疑問に思った人も居るでしょうが、これまた厄介な事にそれは違います。オブジェクト指向は三位一体なのです。どれがかけても上手くいきませんし、それぞれは独立した存在ではなく各々相互関連しております。この業界ではよく、実装を知らない設計者(SE)は駄目だと言われております。その答えがこれなのです。よく考えれば分かってもらえると思いますが、オブジェクト指向とは現実から情報を整理整頓するためのものであり、各段階はぶつ切りに出来ないので各段階の知識が要るのです。それを考慮すれば、全く見当違いの分析や設計をすれば実装が出来ないのは当たり前です。しかし、だからと言って、始めから実装だけを考えて分析・設計をしても上手くいきません。何故ならば、問題領域の正確な把握が出来なくなるからです。ですから私はよくプログラマやSEという区切り自体がソフトウェアの品質を悪くすると主張しています。私は様々なデスマーチを経験してきましたが多くはこれが原因です。役割分担もいいのですが、この単純な事実を考慮して欲しいものです。そうしないと、日本のソフトウェア産業は壊滅するでしょう。 |
この記事のコメント> オブジェクト分析(OOA)、オブジェクト思考方法論(OMT)、オブジェクト指向プログラミングはそれぞれ抽象度が違う概念です。
でも、 3つとも、 オブジェクト指向のプログラムを作るための技術です。 そのことを見失ってるか、 あるいは、 「実装とは切り離して分析するんだ」 ってことを誤解してるのか、 オブジェクト指向分析だけ、 あるいはオブジェクト指向設計だけを (オブジェクト指向プログラムとは無関係だというスタンスで) 語ろうとして、 意味不明な解説をしていることが多いように感じています。 # そりゃ、 OOA, OMT の結果から手続き志向のプログラムを作ったり、 業務マニュアルを作ったり、 家を建てちゃったりしても、 構わないっちゃ構わないんだけど。 なんのためのものだったっけ、 ってことを見失っちゃうと… DOA が良いんだっていう年寄りや、 POA (Process Oriented Approach) が分かりやすくていいじゃんっていうエライシトやらの、 「OOA DOA POA 似たようなもんだから、 上流はどれでもいいじゃん」 攻撃をかわすのがタイヘンです。 f(^^; biacさんコメント有難う♪
コメントの内容、まったくもって同感です。 困った事に、biacさんが言及している様な人沢山居ますよねw 特にデスマーチでそういった人が多く見受けられます
2008-12-18 Thu 20:11 | URL | インドリ #-[ 内容変更]
|
コメントの投稿 |
||
|
||
管理者だけに閲覧 | ||
|
この記事のトラックバック |
| 無差別に技術をついばむ鳥 |
|