第8章 オブジェクト指向 オブジェクト指向テクニック
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
8.0 はじめに
Javaは、Simula-67、SmallTalk、C++の伝統を受け継ぐオブジェクト指向(OO)言語である。C++から構文を、SmallTalkからアイデアを借りている。Java APIはOOモデルに基づいて設計され、構築されている。FactoryやDelegateなどのデザインパターン(同名の本を参照)が随所に使われている。これらのパターンを理解することは、APIの使い方をより理解し、自分のクラスの設計を改善するのに役立つだろう。
アドバイス、あるいはマントラ
短いアドバイスならいくらでもある。Javaの基本を学ぶときに、繰り返し出てくるテーマがいくつかある。
APIを使用する
これは何度言っても言い足りない。あなたがやらなければならないことの多くは、標準Javaライブラリ(やサードパーティライブラリ)を開発している優秀な人たちによってすでに行われている。 そしてこれは、リリースされるたびに増えていく。 APIをよく学ぶことは、致命的な「パンクの再発明」症候群を避けるための良い根拠になる。実際、本書の使命のひとつは、すでにあるものを再発明しないようにすることだ。その一例が、第7章で取り上げたjava.util のCollections APIである。Collections APIは高度な一般化と規則性を持っているので、独自のデータ構造化コードを考案する必要はないことが多い。
規則の例外
APIを使うという規則には1つ例外がある。java.lang.Object のclone() メソッドは一般的に使うべきではない。オブジェクトをコピーする必要がある場合は、コピー・メソッドかコピー・コンストラクタを書けばいい。Effective Java(Addison-Wesley)という本の中で、clone() メソッドに対するJoshua Bloch氏の引数は説得力があり、熱心なJavaプログラマなら誰でも読むべきだ。ついでにその本全体も読もう。
もうひとつの例外は、java.lang.Object() のfinalize() メソッドである。これは使ってはいけない。これはJava 9以降非推奨となっている。なぜなら、呼び出されることが保証されていないからだ。しかし、呼び出される可能性があるため、死んだオブジェクトがガベージ・コレクトされず、結果としてメモリー・リークを引き起こすことになる。 何らかのクリーンアップが必要な場合は、そのクラスのオブジェクトを参照外にする前に、責任をもってメソッドを定義し、それを呼び出さなければならない。そのようなメソッドをcleanUp() と呼ぶかもしれない。 アプリケーションレベルのクリーンアップについては、https://darwinsys.com/java/shutdownhook.html を参照のこと。
一般化する
ここで強調されている一般化(およびその結果としての再利用性)と、アプリケーション固有の利便性との間にはトレードオフがある。OO設計テクニックに従って設計された非常に大規模なアプリケーションのごく一部を書くのであれば、特定のユースケースを念頭に置くことになる。一方、ツールキット・スタイルのコードを書くのであれば、どのように使われるかをほとんど想定せずにクラスを書くべきだ。さまざまなプログラムから使いやすいコードを作ることが、再利用可能なコードを書くための道なのだ。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access