5

私は長い間データベースの設計に携わってきましたが、最近はC#でも働いています。OOは私には理にかなっていますが、私はOOデザインの深い理論に十分な根拠があるとは感じていません。

データベースの世界では、データベースの構造を設計する方法について多くの理論があり、主な概念は正規化です。正規化は、データベースの構造を直接操作し、データベース内のエンティティの配置方法をある程度指示します。

オブジェクト指向プログラムの構造を設計する方法の背後にある同様の概念はありますか?

私が到達しようとしているのは、開発者を特定の問題の解決策の「正しい」設計に自然に導く1つ以上の基礎となる理論的原則です。

詳細はどこで確認できますか?
読むべき頼りになる作品はありますか?

アップデート:

回答してくれた皆さんに感謝します。私が読んでいることは、「オブジェクト指向デザインの大統一理論」は存在しないと言っているようですが、重要な原則がたくさんあります。それらは主にデザインパターンによって例示されています。

回答ありがとうございます:)

4

14 に答える 14

11

いくつかの設計パターンの文献に注意してください。

クラス定義には、いくつかの広範な種類があります。永続オブジェクト (リレーショナル テーブルの行のようなもの) とコレクション (テーブル自体のようなもの) のクラスは 1 つのものです。

Gang of Four」設計パターンの一部は、アクティブなアプリケーション オブジェクトにより適用でき、永続オブジェクトにはあまり適用できません。Abstract Factoryのようなものに取り組んでいると、永続オブジェクトに適用される OO 設計のいくつかの重要なポイントが見落とされます。

オブジェクトメンターオブジェクト指向設計とは? このページには、リレーショナル デザインから OO デザインに移行するために本当に知っておく必要があることがたくさんあります。

ところで、正規化は、リレーショナル データベースに常に適用される包括的な設計原則ではありません。正規化は、更新トランザクションがあるときに適用され、更新の異常を防ぎます。リレーショナル データベースは受動的なものであるため、これはハックです。処理を追加するか (クラスのメソッドなど)、一連のルールを渡す必要があります (正規化)。更新がめったに行われない (または存在しない) データ ウェアハウスの世界では、標準の正規化ルールはそれほど適切ではありません。

したがって、オブジェクト データ モデルには「このような正規化」はありません。

OO 設計において、永続オブジェクトを設計するためのおそらく最も重要なルールは、単一責任の原則です。

実世界のオブジェクトに忠実にクラスを設計し、それらのクラスに非常に的を絞った方法で責任を割り当てる、オブジェクト モデルに満足することになります。複雑さが比較的少ないリレーショナル データベースにマップすることができます。

責任の観点から物事を見ると、2NF および 3NF ルールが適切な責任割り当てに適合することがわかります。一意のキーは依然として重要です。また、派生データは、永続的な属性ではなく、メソッド関数の責任になります。

于 2008-10-29T13:12:00.677 に答える
6

次のステップは「デザイン パターン」という本です。
http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612

ただし、すべてに OO アプローチを使用する必要はありません。それについて宗教的にならないでください。より手続き的なアプローチがより簡単に感じられる場合は、それを使用してください。OO を初めて使用する人は、しばらく期限切れになる傾向があります。

于 2008-10-29T11:51:02.977 に答える
4

Agile Software Development, Principles, Patterns, and Practicesは非常に優れていると思います。

ここにリストされている OO 原則の多くの詳細な説明を提供します。

  • オブジェクト指向設計と依存関係管理の原則
  • SRP — 単一責任の原則
  • OCP — オープンクローズの原則
  • LSP — リスコフ置換原理
  • DIP — 依存性逆転の原則
  • ISP — インターフェイス分離の原則
  • REP — 再利用リリース等価原則
  • CCP — 共通閉鎖原則
  • CRP — 共通の再利用の原則
  • ADP — 非循環依存関係の原則
  • SDP — 安定した依存関係の原則
  • SAP — 安定した抽象化の原則
于 2008-10-29T12:04:00.753 に答える
2

正規化されたデータベースの構築に慣れている場合は、オブジェクト指向設計が自然に思い浮かぶはずです。クラス構造は、クラス内で関連付けテーブルがリストに変わり、ルックアップ テーブルが列挙型に変わるという明らかな例外を除いて、データ構造によく似たものになります。

全体として、リレーショナル データベースのバックグラウンドを持って OO 設計を始める方が、他の方向に進むよりもはるかに優れていると言えます。

于 2008-10-29T11:53:43.270 に答える
2

OO を本当に理解したい場合は、Smalltalkを試してみてください。ST は純粋なOO 言語であり、それについては非常に率直です。パラダイムのこぶを乗り越えたら、OO を学んだことになります。これが私が最初にOOを学んだ方法です。

于 2008-10-29T11:59:02.713 に答える
1

このの結果を確認してください。各質問から学びます。

于 2008-10-29T11:51:00.967 に答える
1

非常に親しみやすい Head First Design Patternsと、Arthur J. Riel による優れたObject oriented Design Heuristicsが本当に気に入りました。

于 2008-10-29T11:53:42.253 に答える
1

デイビッド・ウェストのオブジェクト思考に行きましょう。興味深い読み物..
あなたは暗い側から来たのですが..本によると;) データベースの考え方は、いたるところでオブジェクト指向プログラマーの呪いでした。それらはスペクトルの両端です。例えば

  • データベースの考え方は、他のすべてよりもデータの属性を重視します.DBスキーマまたはER図にどのように適合するかに基づいて、正規化とタイプを作成します.OOの考え方は、動作とコラボレーションに基づいてタイプを作成し、データ属性をすべて重要なものとして認識しません.
  • データベースは、他の何よりも形式化と方法を重視する科学者から生まれました。オブジェクト指向は、ヒューリスティックと経験則を使用し、困難で迅速なプロセスで個性と社会的相互作用を重視する人々から生まれました。

COBOLプログラマーであるということは、OO言語に移行した後でもCOBOLプログラムを作成できるということです。OO (見習い) の信条を常に詳しく説明している最初のセクションについては、Thinking in Java のような本をチェックしてください。それを Object Thinking (journeyman) でフォローアップし、いずれマスターになるようにしてください。

于 2008-10-29T12:00:57.357 に答える
1

このサイトには 101 のタイトルがリストされています... デザイン パターン、リファクタリング、その他... 見てみましょう.. 良い出発点になるでしょう...

于 2008-10-29T12:01:03.630 に答える
1

現実世界のオブジェクトを念頭に置いて、オブジェクトをモデル化します。

現在、機械の自動化ソフトウェアを開発しています。それらの機械の 1 つには、原材料を供給するための 2 つのロード ポートがありますが、他のすべての機械には 1 つしかありません。これまでのすべてのモジュールでは、ポートの情報 (現在の設定、現在割り当てられているロット番号など) をマシンを表すクラスのメンバーとして持っていました。

ポートの情報を保持する新しいクラスを作成し、この MachineXY クラスに 2 つの LoadPort メンバーを追加することにしました。以前に考えていたら、すべてのシングル ポート マシンに対して同じことを行っていたでしょう...

于 2008-10-29T12:13:17.987 に答える
0

DBAスラングの場合:オブジェクト指向設計は、安全な操作インターフェースの背後にある適切に正規化されたデータに他なりません。安全な意味、データを直接見るのではなく、操作を見てください。

于 2011-06-29T19:57:31.403 に答える
0

OOD に与えられたプロセス全体である UML を見る必要があります。

1 冊 (または 2 冊) の本を入手することをお勧めします。理論は非常に大きく、ほとんどの人は目下のプロジェクトに最も適した手法を選択するためです。

于 2008-10-29T11:50:32.667 に答える
0

たとえば、Martin Fowler のデザイン パターンについて読み始めてください。:)

これらは、OOP の最も実用的な使用法です。

于 2008-10-29T11:51:01.997 に答える
0

データベースの世界で OO を意味していると思います。

オブジェクトを格納するオブジェクト指向データベースは、実際にはオブジェクトをキャッチできなかったため、現在、オブジェクトをリレーショナル データベースにマッピングすることを検討しています。ORM またはオブジェクト リレーショナル マッピングは、このマッピングを行うソフトウェアを説明するために使用される用語です。理想的には、これにより、開発者がオブジェクトと対話できる世界と、データベース内のすべてが標準的なチューニングが可能なリレーショナル テーブルに格納される世界の両方を最大限に活用できます。

于 2008-10-29T12:00:57.293 に答える