2026年4月5日日曜日

オブジェクトとは

 Alan Kayとは

オブジェクト指向という概念を提唱した研究者であり、コンピュータを「メッセージを送り合うオブジェクトの世界」として再定義しました。彼にとって重要なのはクラスや継承ではなく、オブジェクト間の通信です。現代のOOPは彼の思想の一部だけを実装したものに過ぎません。


Smalltalkとは
Alan Kayの思想を最も純粋に実装した言語で、すべてがオブジェクトとして扱われます。制御構文さえもメッセージ送信で表現され、環境そのものがライブに変更可能です。OOPの原型であり、後の多くの言語設計に影響を与えました。


オブジェクトとは
データと振る舞いを一体として持つ単位であり、外部とはメッセージでやり取りします。重要なのは内部構造ではなく、どのような応答を返すかです。オブジェクト指向においては「何を持つか」よりも「どう振る舞うか」が本質になります。


クラスとは
オブジェクトの設計図であり、同じ構造と振る舞いを持つ個体を定義します。ただし本質は再利用ではなく「共通の契約」を表す点にあります。クラスは型としての役割も持ち、オブジェクトの振る舞いを制約します。


インスタンスとは
クラスから生成された具体的なオブジェクトです。同じクラスから作られても、それぞれが独立した状態を持ちます。プログラムはインスタンス同士のやり取りとして実行され、実際の動作はこのレベルで発生します。


Javaとは
強い型付けとクラスベースのオブジェクト指向を採用した言語で、移植性と安全性を重視しています。仮想マシン上で動作するため環境依存が少なく、大規模システムに適しています。設計の厳密さが求められる言語です。


C++とは
手続き型とオブジェクト指向を統合した言語で、低レベル制御と高抽象を両立します。メモリ管理を明示的に扱えるため高速ですが、その分設計の責任も大きくなります。OOPは機能の一部として提供されています。


Pythonとは
シンプルな文法と柔軟なオブジェクトモデルを持つ言語です。すべてがオブジェクトとして扱われ、動的に振る舞いを変更できます。厳密な設計よりも可読性と生産性を優先し、実用性の高いOOPを提供します。


Rubyとは
純粋なオブジェクト指向を掲げ、すべてがオブジェクトで構成されます。コードは人間のために書くという思想が強く、DSL的な表現力に優れています。振る舞いを柔軟に変更できる点が特徴です。


カプセル化とは
内部の状態を外部から直接操作させず、メソッドを通じて制御する仕組みです。これにより変更の影響範囲を限定できます。重要なのは隠すことではなく、「どの操作を許可するか」を明確にする点です。


継承とは
既存のクラスを拡張して新しいクラスを作る仕組みです。コードの再利用手段として使われがちですが、本来は「共通の性質を持つ関係」を表現します。過度な継承は複雑さを増すため注意が必要です。


ポリモーフィズムとは
同じインターフェースで異なる振る舞いを実現する仕組みです。呼び出し側は具体的な型を意識せずに扱えます。柔軟な設計を可能にし、変更に強い構造を作るための中心概念です。


メソッドとは
オブジェクトが持つ振る舞いを定義する関数です。外部からはこのメソッドを通じて操作されます。データと密接に結びつき、そのオブジェクトの責務を実現する手段になります。


プロパティとは
オブジェクトが保持する状態や属性です。値として存在するだけでなく、振る舞いと組み合わさることで意味を持ちます。状態の管理が設計の質を大きく左右します。


コンストラクタとは
インスタンス生成時に呼び出される初期化処理です。オブジェクトの一貫性を保つために必要な状態を設定します。ここでの設計が後の不具合を左右します。


インターフェースとは
振る舞いの契約を定義するもので、実装は持ちません。利用側は具体的なクラスではなく、この契約に依存します。変更に強い設計を支える重要な概念です。


抽象クラスとは
共通の振る舞いを一部実装しつつ、未完成の状態を持つクラスです。継承先で具体化されることを前提とします。再利用と拡張のバランスを取るための仕組みです。


MVCとは
Model・View・Controllerに責務を分離する設計パターンです。データ、表示、操作を分けることで変更の影響を局所化します。UIを持つアプリケーションで広く使われます。


Singletonとは
インスタンスを1つだけに制限するパターンです。グローバルな状態を管理する際に使われますが、依存関係が隠れやすく、過剰な使用は設計を硬直させます。


Factory Methodとは
オブジェクト生成の処理をサブクラスに委ねるパターンです。生成ロジックを分離することで、拡張性と柔軟性を確保します。生成の責務を明確にする設計です。


SOLID原則とは
保守性の高いオブジェクト指向設計のための5つの原則です。単一責任、拡張に開いて変更に閉じる、置換可能性、インターフェース分離、依存性逆転から構成されます。


依存性逆転とは
上位モジュールが下位モジュールに依存するのではなく、両者が抽象に依存する設計です。これにより変更の影響を抑え、柔軟な構造を実現します。


結合とは
モジュール同士の依存の強さを表します。結合が強いほど変更の影響が広がります。低結合にすることで、独立した変更が可能になります。


凝集とは
モジュール内部のまとまりの強さを示します。高凝集であるほど、そのモジュールは単一の目的に集中しています。設計の明確さと理解しやすさに直結します。


責務とは
そのクラスやオブジェクトが担う役割のことです。責務が明確であれば、変更理由も明確になります。設計は責務の分割そのものと言えます。