質問

私は今かなり長い間OOPを研究していますが、理論をよく理解しています。私はOOPに関する Head First の本を読みましたが、理論では、ケーススタディはやや些細なものであることがわかりました。

OOPの原則を毎日コードに適用していることがわかりましたが、正しく適用しているかどうかはわかりません。コードを見て、継承を適切に使用しているか、オブジェクトが十分に凝集しているかなどを知ることができるようになる必要があります。

強固なOOPスキルを開発するための次の一歩を踏み出すための良い推奨事項(書籍、オンラインガイド、ブログ、ウォークスルーなど)はありますか?

主に.NET(Visual Basic)で作業していますが、さまざまなプラットフォームを組み込んだ提案を歓迎します。

役に立ちましたか?

解決

Martin Fowlerのリファクタリングを読んで、自分の作品に適用してください。

不適切に構築されたクラスを検出する方法、さらに重要なこととしてそれらを修正する方法を説明するソフトウェアコードの悪臭の多い特徴を紹介します。

他のヒント

デザインパターンを検討する。エンタープライズアプリケーションでは一般的に使用されていないようですが(エンタープライズコードに埋め込まれるよりもAPIやフレームワークで一般的に使用されていることを見てきました)、多くの状況でソフトウェアをよりシンプルまたは堅牢にするために適用できます開発者だけがそれらを適用する方法を知っていました。

重要なのは、最初に設計パターンを理解することです。その後、経験を積んで、それらを適用する方法を学びます。

デザインパターンに関するヘッドファーストブックがあります。デザインパターンを詳細に網羅した本が必要な場合は、 Gang of Fourデザインパターン本。これは基本的にデザインパターンを主流にしたものであり、トピックが取り上げられるたびに参照されます。

デザインパターンは、ほとんどすべてのオブジェクト指向言語にある程度適用できますが、一部のパターンは、場合によってはやりすぎたり、エンジニアリングしすぎたりすることがあります。

編集:
また、 Code Complete 2 の本をご覧ください。ソフトウェア開発の世界で非常に影響力のある本です。それは多くの異なる概念と理論をカバーしています。私はそれを読むたびに何か新しいことを学びます。 6か月から1年ごとに読んだら、別の視点から見ているので、読み直して良いプログラマーになれます。どんなにあなたが知っていると思うかもしれませんが、この本はあなたが本当にどれだけ知っているかを実感させます。それは本当に素晴らしい本です。この本をどれだけ所有すべきかは強調できません。

既に基本をお持ちの場合、経験だけがあなたをさらに前進させると信じています。原則を正しく適用しているかどうかわからないと言いますが、正しい方法はありません。今日書くコードは、6か月後に見て、なぜそのように書いたのか疑問に思うでしょう。また、10年経っても新しい技術やトリックを学んでいることを保証します。心配する必要はありません。できる限り読んで、読んだものを小さな塊で適用してみてください。

私は現在、次の本の半分を読んでいます:

http://www.amazon.com/Applying-UML-Patterns-Introduction -オブジェクト指向/ dp / 0131489062

この本を強く推奨することはできません。コードに飛び込む前に、整形式で反復的な設計戦略を作成および適用するための現実的でプロ級の実用的なアプローチを学習します。

私も、「 Head First 」を読みます。本を読み、読んだほうがずっとよかったと感じました。

数年にわたる実業界での経験を経て、クレイグ・ラーマンの本を見て、「次のステップ」として完璧であることをお勧めします。私のために。

" UML"の存在についてこの本のタイトル:

UML表記について肯定的な感情または否定的な感情を持っているかどうかにかかわらず、どちらの方向でも本(ISBN 0131489062)を購入する決定に影響を与えないでください。

「UML」の重要性タイトルに誤解を招くです。著者はUML表記を使用および説明していますが、これらの説明は関連する設計の議論に非常によく組み込まれており、この本は決して退屈なUML仕様のようには読めません。

実際、この本から直接引用した引用は次のとおりです。

  

重要なのは、オブジェクトの考え方とデザインの方法を知ることです。これは、UML表記法を知ることとは非常に異なり、はるかに価値のあるスキルです。図を描きながら、次の重要な質問に答える必要があります。オブジェクトの責任は何ですか?誰と協力しますか?どのデザインパターンを適用する必要がありますか? UML 1.4と2.0の違いを知るよりもはるかに重要です!

この本は時々「話している」ように思えます。リードアーキテクトまたはプロジェクトマネージャー。つまり、読者がソフトウェアプロジェクトの計画と方向性を大幅に制御できると想定しているということです。

それでも、会社のプロジェクトや製品のごく一部しか担当していない場合でも、この本をお勧めし、「縮小」を適用することをお勧めします。プロジェクトの一部に対する本のアドバイスの修正。

私のOOPのエピファニーは、ずっと前に、Grady Boochの本から来ました。突然、なぜオブジェクトが優れていることに気付きました。

多型はクールですが、カプセル化はオブジェクトがクールな理由の75%です。インターフェースのようなものです。ボタンは見えますが、配線は見えません。オブジェクトの前は、最も規律のあるコーダーのみが、他の人の手順の内部ビットから汚れた指を離していました(「構造化プログラミング」と呼ばれていました)。

オブジェクトを使用すると、正しいことを簡単に実行できます。継承とポリモーフィズムはわずかなボーナスです。

オブジェクトについて学ぶ1つの方法は、他の人のコードを読むことです。 Delphi VCLフレームワークのソースコードを読むことで多くのことを学びました。 Javaのドキュメントを見るだけでも、単一のオブジェクトクラスが何をすべきか、他のオブジェクトで使用するためにどのように設計されているかを理解するのに役立ちます。

独自のプロジェクトを開始し、独自のクラスをサブクラス化するときに注意を払い、すべてを置き換えるのではなくプロセスの一部のみをオーバーライドできるように、戻っていくつかの保護されたメソッドを分割する必要があることに気づくそれの。抽象関数を呼び出して、祖先が子孫とどのように対話するかを確認します。つまり、多くの間違いを犯し、そこから学んでください。

お楽しみください!

率直に言って、情報の隠蔽に関する古いDavid Parnasの論文を再読することで、私は正しい心の状態に入ることができます。ケーススタディは直接適用できないかもしれませんが、それらからいくつかの有用な一般化を得ることができるはずです。

VB6で非常にオブジェクト指向の問題(動的かつ再帰的にSQLステートメントを構築する)を実装しようとしたときに、私のひらめきが生じました。ポリモーフィズムまたは継承を理解する最良の方法は、それを必要とし、使用できないようにすることです。

間違いなくあなたを助ける1つのことは、有名で尊敬されるオープンソースプロジェクトに取り組むことです。ソースコードを掘り下げて、どのように処理されるかを確認するか、いくつかの追加/変更を試みてください。ほとんどの問題に対して、1つのスタイルも1つの正しい答えもありませんが、いくつかのプロジェクトを調べることで、物事がどのように行われるかについて広い視野を得ることができます。そこから、あなたはあなた自身のスタイルを開発し始め、その過程でオープンソースにいくらか貢献することを願っています。

OOソリューションの実装を試みて失敗する必要があると思います。とにかくそうしました。私が失敗するということは、あなたが最終的に作業用のソリューションをうまく配信しながら、臭いコードを書くことになります。それが書かれた後、あなたは物事がまったく正しく感じられなかった場所の感触を得るでしょう。いくつかのひらめきがあるかもしれませんし、他のプログラマーからの洗練されたソリューションを探しに行くかもしれません。間違いなく、標準設計パターンのいくつかのバリエーションを偶然に実装することになります。後知恵では、ライトがクリックし(訪問者の目的です!)、理解が加速します。

他の人が言ったように、私はいくつかの良いオブジェクト指向オープンソースコードを使ってツールを作ることは良い考えだと思います。だから、あなたの作品を批判したいと思っている経験豊富なプログラマーと協力しています。しかし、理解は理解することから生まれます。

しばらくの間、Smalltalkの読み取り(および書き込み)を試してください。 Squeakは、完全なオブジェクト指向環境の能力を示すことができる無料の実装です(javaや.netとは異なります)。すべてのライブラリコードソースが含まれています。言語自体は非常にシンプルです。 javaとc#は、1980年以来Smalltalkによく知られている機能を徐々に追加していることがわかります。

亀HG は、外見上うまく設計されたオブジェクト指向の一部です。ソースソフトウェア(Pythonで記述)。

基本をすでに理解している場合は、完全にオブジェクト指向の言語で何かをゼロから構築することは、OOPソフトウェアアーキテクチャを完全に理解するための良いステップになります。 Pythonがわからない場合は、 Python Essential Reference を使用して、数日から1週間で言語が完全になります。

言語を理解したら、上記のソフトウェアに目を通すと、あらゆる種類のエピファニーがあります。

基本的にすべてを完全に理解するには、少なくとも1つ上の抽象化レベルと1つ下のレベルに関する適切な知識が必要です。 OOの場合、他の人はOOの上の層として設計パターンに言及しています。これは、OOが役立つ理由を説明するのに大いに役立ちます。

OOの下のレイヤーに関しては、高次関数/遅延バインディングをしばらく試してみて、これらの比較的単純な構造がどのように使用されているかを感じてみてください。また、OOがボンネットの下でどのように実装されるか(vtablesなど)およびそれが純粋なCでどのように行われるかを理解してみてください。一連の関連関数とそれらが操作するデータを渡すための便利な構文。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top