優れたオブジェクト指向設計に関しては、シンプルに保つ

私の元学生はかつて、「オブジェクト指向(OO)設計はできないだろう。お金がない!」というとんでもない発言を口にしたことがあります。さらに調べてみると、彼の考えでは、オブジェクト指向設計にはRational Roseという製品が必要であり、当時は1シートあたり約500.00の費用がかかりました。彼の考えでは、Rational Roseがなければ、デザインは不可能でした。残念ながら、この種のバルダーダッシュは広く普及しています。あまりにも多くの人々が、OOはハイテクツールを必要とするハイテクプロセスであると考えています。実際には、法外な価格のツールは棚に未使用のままです(または大幅に使用されていません)。

そのことを念頭に置いて、この記事では、さまざまなオブジェクト指向設計ツール、それらがどのように機能するか、そしてなぜそれらが役に立たないと思うのかについて説明します。また、私がどのように働いているか、そして何が役立つかについても説明します(少なくとも私にとっては、同意しないことを歓迎します)。

ツールはプロセスをガイドしません

私が思いついたすべての成功したオブジェクト指向設計は、ほぼ同じプロセスに従いました。

  • 問題の領域(会計、授業計画など)について学びます
  • ライブユーザーと緊密に協議して、ユーザーの問題を徹底的に説明する問題ステートメントと、ドメインレベルのソリューションを作成します。このドキュメントでは、コンピュータプログラムについては説明していません。
  • 正式なユースケース分析を実行します。この分析では、ユーザーの問題を解決するために必要なタスクを決定し、実際のエンドユーザーと緊密に連携します。通常、私は重要なユースケースごとにUML(統一モデリング言語)アクティビティ図を作成します。(UMLは、ソフトウェアを画像として象徴的に表現したものです。)
  • 特定のユースケースが実行されている間に、システム内のオブジェクトと、それらのオブジェクトが相互に送信するメッセージを示す動的モデルの構築を開始します。この目的のためにUMLシーケンス図を使用します。
  • 同時に、静的モデル図で役立つ情報を取得します。注:最初に静的モデル(クラス図)を実行することはありません。動的モデルを作成し始めると役に立たないことが判明した静的モデルをあまりにも多く捨ててしまいました。真空中で静的モデルを作成するのに必要な時間を無駄にすることはもうありません。
  • 前述の手順では、通常2つまたは3つのユースケースが生成されます。その後、コーディングを開始し、必要に応じてモデルを修正します。
  • 最後に、説明したように別のユースケースに取り組み、新しいケースに対応するために必要に応じて設計とコードをリファクタリングします。

今日の設計ツールはどれも、このプロセスをガイドしていません。ほとんどの場合、それらは高額な描画プログラムであり、描画ツールとしても特にうまく機能しません。(私が多くの能力が最も低いと考えるRational Roseは、UMLのすべてをサポートしているわけではありません。)

往復エンジニアリングは根本的に欠陥のあるプロセスです

これらのツールがうまく機能しないだけでなく、これらのツールが実行する1つのトリック(コードの生成)は価値がありません。ほとんどすべてのオブジェクト指向設計ツールは、UMLで設計を指定することにより、設計ツールから開始するラウンドトリップエンジニアリングの概念に従います。 2つの重要な図のセットを作成します。設計内のクラス、それらの相互関係、およびそれらに含まれるメソッドを示す静的モデルです。動的モデルは、実行時にさまざまなタスクを実行するシステム内のオブジェクトを示す図のスタックです。

モデルが完成したら、魔法のボタンを押すと、ツールがコードを生成します。ただし、ツールで生成されたコードは2つの理由で特に適切ではありません。まず、多くのツールでクラス定義のスケルトンが作成されますが、メソッドは単に空のスタブです。動的モデルは無視されます。次に、UMLを完全にサポートするツールはありません。これは、主にサポートできないためです。 UMLはそれ自体が言語であり、即興を奨励します。実際の設計コンテンツの多くは、設計ツールでは通常無視されるコメントで表現されます。

その結果、生成されたコードをハックします(ほとんどのショップは実際にそれをハックします)。数週間以内に、コードは通常、元の設計とはほとんどまたはまったく関係がありません。実際、あなたは効果的にあなたのデザインを捨てて、WHISKEY症候群に陥ります(なぜ誰かがまだ「コーディング」していないのですか?)。何年にもわたって失敗したプログラムは、設計なしでコーディングすると、全体的な開発時間が少なくとも3倍になり、コードのバグが多くなることを私に証明しています。

次に、ラウンドトリッププロセスが実行されます。ツールを開き、マジックボタンを押してコードをインポートし、理論的には、コードの実際の状態を反映するようにデザインを再構築します。ただし、このようなリバースエンジニアリングは機能しません。ツールは通常、新しいクラス図を作成しますが、動的モデルを更新することはありません。動的モデルはプロセスの中心であるため、手作業でモデルを更新しない限り、設計は無価値になります。これはめったに行われません。

繰り返しになるリスクを冒して、ラウンドトリッププロセスでは、プログラマーが設計を完全に無視してコードだけを作成し、コードをリバースエンジニアリングして画像にすることを頻繁に奨励しています。ただし、この状況では、プログラマーは設計を行っていません。彼らはコードをハッキングし、結果として生じる混乱の写真を作成しています。ハッキングはデザインと同じではありません。

デザインは確かに反復プロセスですが(コードの開発に伴ってデザインが変更されます)、最初にデザインを変更してから、新しいデザインを反映するようにコードをリファクタリングすることで、反復を開始する必要があります。これを行うには、ツール内でソフトウェア製品全体を指定できる必要があり(マジックボタンを押すと、完全に機能するプログラムが出力されます)、プロセスはリバースエンジニアリングなしで一方向になります。機構。

CASEツール

Rational RoseのようなCASE(コンピューター支援ソフトウェアエンジニアリング)ツールは、通常、ラウンドトリップエンジニアリングを製品の中核に置きます。ただし、ラウンドトリップエンジニアリングでは何の役にも立たないため、多くの開発者はツールを高価な描画プログラムとして使用しています。利用可能なツールのうち、3つを検討する価値があると思います(私はそれらのいずれも使用していませんが):

  • Javaで書かれた無料のオープンソースArgoUMLツールは、UMLダイアグラム作成にかなり適しています。最新バージョンでは、プロセスをガイドしようとさえしています(これまでのところわずかな成功ですが、良いスタートです)。
  • 以前はAdvancedSoftwareによって配布されていたEmbarcaderoのGDProは、単一のソフトウェア設計に取り組んでいるグループに優れたサポートを提供しますが、この部門にも欠陥があります。たとえば、設計者は、動的モデル上のオブジェクトに関連付けられたクラスを自動的にロックしている間は、動的モデル図をチェックアウトできません。
  • TogetherSoftのTogetherControlCenterは、リバーストリップの問題を回避することで回避します。コードとデザインが同時に画面に表示され、一方を変更すると、もう一方が自動的に変更されます。ただし、Together ControlCenterは、プログラマーのグループを適切にサポートしていません。
  • MicrosoftのVisioについても簡単に触れておきます。Visioは、流行後のUMLをサポートする描画プログラムですが、そのサポートはRationalRoseの惨めなUIを模倣しています。VisioのUML図形のさまざまな描画テンプレートは、私のWebサイトの「Goodies」セクションにあるものを含め、組み込みのUMLサポートよりもうまく機能します。

それで、私がこれらのツールについてあまりよく考えていない場合、私は何を使用しますか?最も生産性の高いOO設計ツールは、ホワイトボード(壁から壁、床から天井までのホワイトボードが理想的です)とフリップチャートサイズのポストイットパッドで、シートを剥がして壁に貼り付けます。私はこれらを使用して、大きな成功を収めた重要なプロジェクトを設計しました。さらに、ホワイトボードでの作業は、OOCASEツールで取り組むよりもはるかに短い時間で済みます。

ホワイトボードアプローチの唯一の難しさは、ボード上の情報をキャプチャすることです。印刷するホワイトボードは存在しますが、高価で、手に負えず、小さすぎます。ホワイトボード上でのペンの動きを追跡し、コンピューターでペンのストロークをキャプチャする1つの優れたハードウェア製品。他のホワイトボードは、巨大なデジタイザータブレットのように機能します。ただし、これらのソリューションは制限が多すぎることがわかります。デザインは、複数のオフィスのホワイトボード、ナプキン、紙切れなどで同時に行われます。300ポンドの印刷ホワイトボードを地元のカフェに運ぶことはできません。

だから何がうまくいくか

それで、母親は何をするのですか?これらのアーティファクトをキャプチャしてコンピュータ内にアーカイブし、描画プログラムに転送することなく、そのままの状態で妥当なドキュメントを作成するにはどうすればよいですか?

ソリューション:

  1. デジタルカメラ
  2. Pixidのホワイトボードフォトと呼ばれる素晴らしいソフトウェア製品

残念ながら、デジタル写真は、文書化に不十分な画像を生成することがよくあります。これを補うために、ホワイトボードフォトはデジタル写真を何か便利なものに変えます。ここで、写真は本当に千の言葉の価値があります。図1は、ホワイトボードの典型的なデジタル写真を示しています。

図2に別の例を示します。

図3は、ホワイトボード写真が図1をどのように変換するかを示しています。

ホワイトボードフォトが魔法をかけた後の図2の様子は次のとおりです。

画像が示すように、違いは驚くべきものです。元の画像をクリーンアップされたバージョンに変換するには、を押すだけCtrl-Lです。ソフトウェアは自動的にホワイトボードの境界を見つけ、斜めから写真を撮ることによって引き起こされる歪みを補正し(フラッシュからのまぶしさを避けるために必要)、デザインの線を選び出し、それらを描きました。完璧を実現するために必要な製品は手書き認識だけですが、現状ではピンク色にくすぐられています。これで、CASEツールの不十分な言い訳に図面を入力する時間を無駄にすることなく、元のホワイトボードから直接ドキュメント品質の図面を作成できます。

複雑にしないでおく

私の経験では、オブジェクト指向設計に関しては、ローテクツールが最適です。実際、これらはより高速で使いやすく、コラボレーション環境で優れたパフォーマンスを発揮します。これまでのところ、ホワイトボード、デジタルカメラ、ホワイトボードフォトの組み合わせが、プログラムの設計をマシンに組み込むための最良の方法であることがわかりました。

Allen Holubは、オブジェクト指向設計、オブジェクト指向プロセス、およびJavaプログラミングに関するコンサルティングサービス、トレーニング、およびメンタリングを提供しています。彼は、オブジェクト指向スキルの迅速な開発に関心のある人のために、集中的なオブジェクト指向設計ワークショップを定期的に開催しています。(詳細については、// www.holub.comを参照してください。)Allenは、1979年からコンピューター業界で働いており、最近ではNetReliance、Inc。の最高技術責任者として働いています。彼は雑誌(Dr. Dobb's Journal、Programmers Journal、 Byte、MSJなど)。アレンは彼の功績を称える8冊の本を持っています。そのうちの最新の本--TamingJava Threads(APpress、2000; ISBN:1893115100)-はJavaスレッドの罠と落とし穴をカバーしています。彼はカリフォルニア大学バークレー校でオブジェクト指向設計とJavaを教えています(1982年以降)。

このトピックの詳細

  • 無料のオープンソースArgoUMLデザインツールについては、次のURLにアクセスしてください。

    //argouml.tigris.org/

  • エンバカデロのGDProはで見つけることができます

    //www.embarcadero.com

  • TogetherSoftのTogetherControlCenterの詳細については、次のURLをご覧ください。

    //www.togethersoft.com

  • MicrosoftVisioのホームページ

    //www.microsoft.com/office/visio/default.htm

  • この興味深いツールの詳細については、Pixidホワイトボードフォトの製品ページにアクセスしてください。

    //www.pixid.com/home.html

  • Allen HolubのWebサイトには、彼の「Goodies」ページがあります。このページには、オブジェクト指向設計のヒント、プログラミングの経験則、およびAllenの講演のメモが掲載されています。

    //www.holub.com/goodies/goodies.html

  • JavaWorldオブジェクト指向設計およびプログラミングインデックスには、設計に関する多数の記事が掲載されています。

    //www.javaworld.com/channel_content/jw-oop-index.shtml

  • JavaWorld製品レビューインデックスでより優れた製品レビューを見つけることができます

    //www.javaworld.com/news-reviews/jw-nr-product-reviews.shtml

  • JavaWorld解説インデックスで解説をもっと読む

    //www.javaworld.com/news-reviews/jw-nr-commentary.shtml

  • デザインパターン、開発ツール、パフォーマンスチューニング、セキュリティ、テストなどをカバーするヒントとチュートリアルについては、AppliedJavaニュースレターにサインアップしてください。

    //www.javaworld.com/subscribe

  • 私たちの中に出て話すプログラミング理論&実践議論

    //forums.idg.net/[email protected]@.ee6b806

  • .netの姉妹出版物からIT関連の記事が豊富にあります。

このストーリー「優れたオブジェクト指向設計に関しては、シンプルに保つ」は、もともとJavaWorldによって公開されました。