[解決済み】オブジェクト指向のプロジェクトはどのように設計するのですか?[クローズド]
質問
私は、多くのクラスがあり、拡張可能である必要がある大規模なプロジェクトに取り組んでいますが、私のプログラムをどのように計画し、クラスがどのように相互作用する必要があるかがわかりません。
数学期前にOODコースを受講し、UMLの書き方や、要求仕様書をオブジェクトやクラスに変換することなど、多くのことを学びました。シーケンス図も習いましたが、なぜか講義を聞き逃したのか、あまり印象に残っていません。
以前のプロジェクトでは、コースで学んだメソッドを使ってみましたが、たいていの場合、「ああ、これは私が考えていたものと同じように見えるね」と言えるやいなや、新しい機能を追加するために泥の中を掘る気にはなれないコードで終わってしまいます。
私の手元にあるのは、Steve McConnellの コード・コンプリート このサイトでも、他のサイトでも、常に素晴らしいと聞いています。デザインの章を読みましたが、私が求めている情報が出てこないようです。しかし、その情報をすべて自分のプロジェクトに適用することはできません。
そこで 高レベルの設計段階(プログラミングを始める前)で、必要なクラス(特に「現実の世界のオブジェクト」に基づかないクラス)と、それらがどのように相互作用するかを決定するために行うことは何でしょうか。 ?
具体的には、どのような手法を使っているのかに興味があります。どのようなプロセスを踏めば、最終製品に近い、きれいなデザインができるのでしょうか?
どのように解決するのですか?
私が初期設計(クラス図にたどり着くまで)に使っている手順は、以下の通りです。
-
要求の収集。 クライアントと話し、ユースケースを因数分解して、ソフトウェアが持つべき機能を定義します。
-
個々のユースケースの物語を構成する。
-
物語に目を通し、クラス候補として名詞(人、場所、物)を、メソッド/ビヘイビアとして動詞(行動)をハイライトします。
-
重複する名詞を捨て、共通する機能を因数分解する。
-
クラス図を作成する。 Java開発者であれば、SunのNetBeans 6.7には、ダイアグラム作成とラウンドトリップエンジニアリングを可能にするUMLモジュールがあり、無料で利用できます。 Eclipse(オープンソースのJava IDE)にもモデリングフレームワークがありますが、私は使った経験がありません。 また、オープンソースのArgoUMLを試してみるのもいいかもしれません。
-
OODの原則を適用してクラスを整理する(共通機能の因数分解、階層の構築など)
関連
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] JavaScriptでクラスを定義するために使用できるテクニックと、そのトレードオフとは?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】Redisにするタイミングは?MongoDBにするタイミングは?[クローズド]
-
[解決済み】マイクロサービスアーキテクチャでGraphQLを使用するタイミングと方法
-
[解決済み】「コルーチン」と「スレッド」の違い?
-
[解決済み】なぜLinuxはモノリシックカーネルと呼ばれるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Redisにするタイミングは?MongoDBにするタイミングは?[クローズド]
-
[解決済み】ドメイン駆動型設計。ドメインサービス、アプリケーションサービス
-
[解決済み】コンポーネントベースのゲームエンジン設計【クローズド
-
[解決済み】「Layer」と「Tier」の違いは何ですか?
-
[解決済み】オブジェクト指向のプロジェクトはどのように設計するのですか?[クローズド]
-
[解決済み】マイクロサービスアーキテクチャでGraphQLを使用するタイミングと方法
-
[解決済み】「コルーチン」と「スレッド」の違い?
-
[解決済み】なぜLinuxはモノリシックカーネルと呼ばれるのですか?
-
[解決済み] UUIDを使わざるを得ないデザインとは?