バートランド・マイヤー。 ソフトウェアシステムのオブジェクト指向設計



免責事項:OOPについての洗練された本は本質的に存在せず、ほとんどの場合、近い将来にないでしょう。 この本は、オブジェクトテクノロジーに関する古典的な本としてふさわしいと考えられており、正当な理由により、このトピックに関する推奨本のリストの最初です(そして、これは私のリストだけではありません)。



オブジェクト指向プログラミング(またはその他のプログラミングパラダイム)を研究する際の主な困難は、「OK伴奏)プログラム。」 たとえば、プログラミング言語を勉強するとき、私たちは比較的すぐに、opa、レベルアップに気づき、プログラミング言語のイディオムと構成を理解する新しいレベルに移動し、それをより興味深い方法で使用し、他の人にそれらが間違っている場所を伝えることができます。





OOPの研究になると、MeyerがmOOzak効果または流行語効果と呼ぶ問題がここに現れます。 要するに、人は特定の概念や用語に精通しており、自分自身がそれを完全に理解していないという事実を重要視することなく、日常の(仕事)生活で集中的に使用し始めます。 チーム(またはフォーラム)での議論を聞くと、不変式、カプセル化、多型、共分散、契約プログラミングなど、多くの「怖い言葉」が使用されていることに気付くでしょう。しかし、彼らは意味します。



私たちは、研究対象のオブジェクト指向プログラミング言語のプリズム、同僚との非公式の会話、いくつかのイディオムと設計原則、またはWikiのメモを通じて、OOPの多くの知識を吸収します。 これにより、基本概念の理解が得られるので、多くの人にとって、「1.2KページのFolioでOOPを1年間勉強するべきかどうか」という考えはかなり疑わしいようです。



しかし、無駄に。



最近、私たちのコンピューターライフで起こるすべてのことを、さまざまなメタファー、イディオム、パターンで説明する傾向があります。 ここで、すべてのGoFパターンを知らず、SOLIDの原理に精通しておらず、アーキテクチャパターンを習得していない場合は、設計作業を行うべきではないUGです。 上記のすべてのメリットを損なうことなく、私はこのすべてを健全なプラグマティズムで扱います。 第一に、これらの原則とパターンをすべて覚えるのは退屈であり、第二に、記憶を訓練し、毎年さまざまな新しいフレーズを覚えようとするよりもはるかに続く特定の基本的な知識を得ることがはるかに簡単です。





このような基礎知識の利点については、記事「 知識の再利用」で説明しました。 Meyerの本は、一見異なる一見多くの事実を頭に入れて、ソフトウェア開発全般、特にオブジェクトテクノロジーのより完全な全体像を把握する素晴らしい方法です。



彼の本の中で、マイヤーは設計パターンに言及し、かなり多数の原則を説明しています。 これらの原則の一部はかなりよく知られています(たとえば、オープンクローズ原則(SOLID原則の「O」)、「ここでは発明されていません」(NIH-ここでは発明されていません)、コマンドとクエリの分離の原則(CQRS-コマンドとクエリの分離の原則) )など)、他の原則は非常に具体的です(たとえば、フィールドと手順に同じ方法でアクセスできる統合アクセスの原則など)。 しかし、他の多くの本とは異なり、これのいずれも最前線に置かれているわけではありません;これから銀色の弾丸を作ることはできません。 OOPの重要な側面である継承において非常に重要な役割を果たすため、オープン-クローズの原則のみが比較的頻繁に言及されます。



この本の主な利点は、オブジェクト技術の問題、およびモジュール性、再利用、保守、継承、抽象データ型とクラスの関係などの基本的な問題に対する思慮深く正式なアプローチです。 本の中で最も重要な役割は、 契約による設計原則によって果たされます。これにより、クラス間の関係を形式化し、いくつかのよく知られた原則を冗長にすることができます。



数年前、 Code Contractsライブラリは、Microsoft Researchの腸から生まれました。MicrosoftResearchは、.NETプラットフォームでの契約プログラミングのサポートを追加しました。 ドキュメントと一連の記事を読むことができますが、その動作のいくつかの側面は依然として理解できません。 もちろん、「ライブラリの実装方法」契約はそれ自体が感じられますが、コード契約は(他の多くの「契約」の実装と同様に)本書で規定された原則にほぼ完全に従うため、ソースよりも優れた情報源の通常の理解と使用のために見つけられないだけです。



継承についても同じことが言えます。 これは非常に複雑な手法であり、理解可能で、拡張可能で、保守が容易なソフトウェアを作成するのに役立ちますが、適切に処理されない場合、継承を集中的に使用すると、アプリケーションを自重で埋めることができる重い階層につながる可能性があります。 継承の適切な使用のみが、10種類(!)の継承を説明する55ページに与えられています(そのほとんどは、C#やJavaなど、複数の閉じた継承のない言語では使用できません)。



さらに、永続性、マルチスレッドプログラミング、ティーチングオブジェクトの方法論、再利用文化に関する章があります。 Meyerは、命名規則やコメントの作成に関する推奨事項などの「世俗的な問題」も扱っています( 見出しのセクション26.4に注意してください:略語の練習 )。

残念ながら、この本には多くの欠点があります。 最初の欠点は、それぞれのページに膨大な量の情報がある1200ページです。 お気に入りのシリーズや番組の下でソファに横たわっている間、この本を圧倒することはできません。 これにはかなりの労力を費やす必要があり、これには1パスで十分であるという事実ではありません。 この本はかなりドライで、フォーマルで、いくつかの場所では非常に厳しいです。



第二に、すべての例はエッフェル言語で提供されています。 この言語自体は非常に興味深いものであり、過去20年間に概念的な変更が加えられていないという事実は、この言語が最初から非常によく考えられていたことを示唆しています。 しかし、ほとんどの最新のOO言語はいくつかの主要なOO機能をサポートしていないため(Meyerの観点から)、説明されているすべての概念が実際に感じられるわけではありません(これは主に、多重継承の欠如と契約による設計に関するものです)。



Meyerの本は、確かにOOPに関する最高の本であり、ソフトウェア開発全般に関する優れた研究です。 この本は、多くの新しい知識を獲得し、既存の知識を整理する素晴らしい方法です。 また、興味深い質問を振り返り、より正式な方法でソフトウェア設計について考えることもできます。 貴重な時間を少し費やして、後悔しないでください。



評価: 必須 (*)



Z.Y. この本は、2つのコースの形式でintuit.ruで入手できます: オブジェクト指向プログラミングの 基礎とオブジェクト指向設計の基礎



オゾンへのリンク。



-

(*)いずれにせよ、私は説明しなければなりません、Must Haveは唯一の本の最高評価です; つまり、本を読むだけでなく、便利な媒体に並べて保管し、定期的に返却する必要があるということです。



All Articles