オブジェクトのコンポジション
小さなオブジェクトを組み合わせて、より大きなオブジェクトを作成します。Engineを持つCarのようなhas-a関係をコンポジションで表現します。
「オブジェクトのコンポジション」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。
定義
コンポジションとは、所有する小さなオブジェクトから、より大きなオブジェクトを構成することです。これは has-a 関係であり、Car は Engine を持ちます。クラスを小さく目的に集中させ、大きなオブジェクトが各部品に処理を委譲できるようにします。
メリット
コンポジションを使うと再利用しやすくなります。全体を変更せずに部品を入れ替えられるためです。また、各部品を個別にテストできるので、テストもしやすくなります。まずは、フィールドを通してあるクラスが別のクラスに依存する、単純な形から始めます。
コンポジションと継承
継承は is-a 関係です(Square は Shape です)。コンポジションは has-a 関係です(Car は Engine を持ちます)。まずはコンポジションを優先し、本当に自然な is-a 関係が成り立つ場合だけ継承します。
所有権とライフサイクル
オブジェクトが部品を所有する場合、その作成と使用に責任を持ちます。部品は通常、単独では存在せず、全体が存在するために存在します。この考え方によって、責任を明確に保てます。
設計の手順
全体(Car)と部品(Engine)を決めます。それぞれの部品が知っていることと、行うことを一覧にします。次に、全体の中に部品オブジェクトをフィールドとして持たせ、それらの部品を使って処理する小さなメソッドを書きます。
コード:has-a の例
コードでは、Car が Engine を所有し、そのメソッドを呼び出します。先に部品を作成して渡すことで、コードをシンプルで柔軟に保てます。
public class Main {
// Very small classes to show composition (has-a)
static class Engine {
int horsepower;
Engine(int hp) { horsepower = hp; }
String info() { return horsepower + " HP engine"; }
}
static class Car {
String model;
Engine engine; // Car has an Engine (composition)
Car(String m, Engine e) {
model = m;
engine = e; // store the part
}
void printSpecs() {
// Use the part to build a message
System.out.println(model + " with " + engine.info());
}
}
public static void main(String[] args) {
// Create part first
Engine e = new Engine(90);
// Assemble whole with the part
Car c = new Car("CityCar", e);
// Use the whole, which delegates to its part
c.printSpecs();
}
}
コンポジションの確認
確認問題:コンポジションを最もよく表している説明はどれですか。
まとめ
まとめ:コンポジションは has-a 関係をモデル化します。小さな部品から始め、明確な役割を与え、全体のオブジェクトから簡単なメソッド呼び出しを通して利用します。
よくある質問
「オブジェクトのコンポジション」レッスンは無料ですか?
はい。「オブジェクトのコンポジション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。
「オブジェクトのコンポジション」で何を学びますか?
小さなオブジェクトを組み合わせて、より大きなオブジェクトを作成します。Engineを持つCarのようなhas-a関係をコンポジションで表現します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「オブジェクトのコンポジション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- thisとtoString/equals/hashCode
- オブジェクトのコンポジション
- ドメインのモデル化(UML→コード)