1. OOPの基本概念と歴史 MOC
- OOPの定義と目的
- OOPの歴史的背景
- 他のプログラミングパラダイムとの比較
- オブジェクト (Object) とクラス (Class) の基本
2. OOPの四大原則 (または三大原則 + 抽象化) MOC
3. クラスとオブジェクトの詳細 MOC
- クラスの定義
- オブジェクトの生成と消滅
- インスタンス化 (Instantiation) (オブジェクトの生成プロセス)
- コンストラクタ (Constructor)
- コンストラクタの役割 (オブジェクトの初期化)
- デフォルトコンストラクタ
- パラメータ付きコンストラクタ
- コンストラクタのオーバーロード (言語による)
- コピーコンストラクタ (C++など)
- ファイナライザ (Finalizer) (言語による)
- オブジェクトの生存期間 (Object Lifetime) (スタック確保とヒープ確保)
this/selfキーワード- アクセスメソッド (Access Methods)
- ゲッター (Getter) (属性値の取得)
- セッター (Setter) (属性値の設定)
- プロパティ (Property) の概念 (C#, Pythonなど)
- アクセス修飾子 (Access Modifiers) / 可視性 (Visibility)
[[public]](公開)[[private]](非公開)[[protected]](保護、サブクラスからのアクセス許可)[[package/internal/friend]](言語固有のアクセスレベル)- アクセス修飾子とカプセル化の関係
- 内部クラス (Inner Class)
4. カプセル化 (Encapsulation) の詳細 MOC (再掲・深掘り)
- 情報隠蔽の原則とデータ隠蔽
- インターフェース (Interface) と実装 (Implementation) の分離
- ミューテータ)
- カプセル化の利点 (保守性の向上、影響範囲の限定、再利用性の促進)
- セッターなど)
5. 継承 (Inheritance) の詳細 MOC (再掲・深掘り)
- 継承の種類
- メソッドのオーバーライド (Method Overriding)
- オーバーライドの定義 (スーパークラスのメソッドをサブクラスで再定義)
- オーバーライドのルール (シグネチャ、戻り値、アクセス修飾子 - 言語による)
[[super/base]]キーワードによるスーパークラスメソッドの呼び出し- 属性 (Attribute) によるオーバーライドの明示 (例:
@Overridein Java)
- 抽象クラス (Abstract Class) と抽象メソッド (Abstract Method)
- インターフェース (Interface) (Java, C#など)
final/sealedキーワード[[final/sealedクラス (継承禁止)]][[final/sealedメソッド (オーバーライド禁止)]]
- 継承の設計原則
6. ポリモーフィズム (Polymorphism) の詳細 MOC (再掲・深掘り)
- 静的ポリモーフィズム (Static Polymorphism / Compile-time Polymorphism / Early Binding)
- 動的ポリモーフィズム (Dynamic Polymorphism / Run-time Polymorphism / Late Binding)
- Virtual Method Invocation)
- vtbl) の概念 (C++など)
- 抽象クラスやインターフェースを通じた動的ポリモーフィズムの実現
- ダックタイピング (Duck Typing) (動的型付け言語 - Python, Rubyなど)
- Virtual Method Invocation)
- ポリモーフィズムの具体例とユースケース
- ポリモーフィズムの利点 (再掲)
7. オブジェクト指向設計原則 (Object-Oriented Design Principles) MOC
- SOLID原則 MOC
- その他の重要な設計原則
- (オプション) GRASP原則 (General Responsibility Assignment Software Patterns) MOC (Information Expert, Creator, Controller, Low Coupling, High Cohesionなど)
8. デザインパターン (Design Patterns) - OOPの文脈で MOC
- デザインパターンとは
- 生成に関するパターン (Creational Patterns) MOC
- 構造に関するパターン (Structural Patterns) MOC
- 振る舞いに関するパターン (Behavioral Patterns) MOC
- デザインパターンの選択と適用
9. OOPにおける関連概念と高度なトピック MOC
- オブジェクト間の関係
- 関連 (Association) (Uses-A)
- 集約 (Aggregation) (Has-A, 弱い所有関係)
- コンポジション (Composition) (Has-A, 強い所有関係、部品関係)
- 例外処理 (Exception Handling) とOOP
- ジェネリクス (Generics) / テンプレート (Templates) とOOP
- リフレクション (Reflection) とメタプログラミング (Metaprogramming)
- オブジェクトのシリアライズ (Serialization) / デシリアライズ (Deserialization)
- 不変オブジェクト (Immutable Object)
- 値オブジェクト (Value Object) vs エンティティ (Entity) (ドメイン駆動設計の文脈)
- 契約による設計 (Design by Contract - DbC) (事前条件、事後条件、不変条件 - Eiffel言語など)
- アスペクト指向プログラミング (AOP - Aspect-Oriented Programming) (OOPを補完する概念 - 横断的関心事の分離)
10. OOPの利点と欠点 (再評価) MOC
- 利点 (まとめ)
- 欠点と課題
11. プログラミング言語とOOP MOC (各言語での特徴的な実装や考え方)
- JavaにおけるOOP (インターフェース、抽象クラス、final、GCなど)
- C++におけるOOP (多重継承、仮想関数、RAII、手動メモリ管理)
- [[PythonにおけるOOP (動的型付け、ダックタイピング、init, self, MRO, Mixin)]]
- におけるOOP (プロパティ、イベント、デリゲート、LINQとの連携)
- JavaScriptにおけるOOP (プロトタイプベース、ES6以降のclass構文)
- RubyにおけるOOP (純粋なオブジェクト指向、Mixinモジュール、メタプログラミング)
- SmalltalkにおけるOOP (純粋なオブジェクト指向、メッセージパッシング)
- Kotlin におけるOOPと関数型の融合