オブジェクト指向プログラミングとは
La オブジェクト指向プログラミング (OOP) それはプログラミングパラダイムです ソフトウェアを中心に整理します オブジェクト 関数やロジックではなく。オブジェクト データ (属性) と動作 (メソッド) を 1 つのエンティティに結合し、その方法を反映します。 現実の世界について考えてみましょう。
💡 基本的な概念
- クラス: オブジェクトを作成するためのブループリント (テンプレート)
- 物体: 特定のデータを持つクラスのインスタンス
- 属性: オブジェクトのデータ/プロパティ
- 方法: オブジェクトの機能/動作
プロシージャルから OOP へ
手続き型プログラミングでは、データと関数が分離されます。 OOPでは、 私は 一緒にカプセル化された、コードがよりモジュール化され、直感的になります。
手続き的アプローチ:
// Dati separati
let userName = "Mario";
let userAge = 30;
// Funzioni separate
function printUser(name, age) {{ '{' }}
console.log(name, age);
{{ '}' }}
OOP アプローチ:
// Dati e comportamenti insieme
class User {{ '{' }}
name: string;
age: number;
print() {{ '{' }}
console.log(this.name, this.age);
{{ '}' }}
{{ '}' }}
OOP の 4 つの柱
1. カプセル化
内部の詳細を隠し、必要なものだけを公開します。 アクセス修飾子 (プライベート、プロテクト、パブリック)。
class BankAccount {{ '{' }}
private balance: number = 0;
deposit(amount: number) {{ '{' }}
if (amount > 0) this.balance += amount;
{{ '}' }}
getBalance() {{ '{' }}
return this.balance;
{{ '}' }}
{{ '}' }}
const account = new BankAccount();
account.deposit(100);
console.log(account.getBalance()); // 100
// account.balance = 999; // ❌ Errore: balance è private
2. 遺伝
既存のクラスに基づいて新しいクラスを作成し、再利用して、 機能を拡張します。
class Animal {{ '{' }}
protected name: string;
constructor(name: string) {{ '{' }}
this.name = name;
{{ '}' }}
move() {{ '{' }}
console.log(`${{ '{' }}this.name{{ '}' }} si muove`);
{{ '}' }}
{{ '}' }}
class Dog extends Animal {{ '{' }}
bark() {{ '{' }}
console.log(`${{ '{' }}this.name{{ '}' }} abbaia`);
{{ '}' }}
{{ '}' }}
const dog = new Dog("Rex");
dog.move(); // "Rex si muove"
dog.bark(); // "Rex abbaia"
3. ポリモーフィズム
これにより、異なるクラスのオブジェクトを共通のインターフェイスを通じて処理できるようになります。 タイプごとに特定の動作を行います。
interface Shape {{ '{' }}
area(): number;
{{ '}' }}
class Circle implements Shape {{ '{' }}
constructor(private radius: number) {{ '{' }}{{ '}' }}
area() {{ '{' }} return Math.PI * this.radius ** 2; {{ '}' }}
{{ '}' }}
class Square implements Shape {{ '{' }}
constructor(private side: number) {{ '{' }}{{ '}' }}
area() {{ '{' }} return this.side ** 2; {{ '}' }}
{{ '}' }}
// Stesso metodo, comportamenti diversi
function printArea(shape: Shape) {{ '{' }}
console.log(shape.area());
{{ '}' }}
printArea(new Circle(5)); // ~78.5
printArea(new Square(5)); // 25
4. 抽象化
重要な機能のみを表示することで複雑さを隠します。 私たちは、オブジェクトが「どのように」実行するかを定義するのではなく、オブジェクトが「何を」実行するかを定義します。
OOP を使用する場合
✅ 次の場合に OOP を使用します。
- 問題ドメインはエンティティと関係を適切にモデル化します
- 継承によるコードの再利用が必要
- プロジェクトは複雑であり、時間の経過とともに拡大します
- チームで働くため、明確な組織が必要です
❌ 次の場合は OOP を避けてください。
- 問題は単純です (小さなスクリプト、ユーティリティ)
- クリティカルなパフォーマンス (クラスのオーバーヘッド)
- 関数型プログラミングの方が適しています (データ変換)
完全な実践例
class Product {{ '{' }}
constructor(
public name: string,
private price: number
) {{ '{' }}{{ '}' }}
getPrice(): number {{ '{' }}
return this.price;
{{ '}' }}
{{ '}' }}
class ShoppingCart {{ '{' }}
private items: Product[] = [];
addItem(product: Product) {{ '{' }}
this.items.push(product);
{{ '}' }}
getTotal(): number {{ '{' }}
return this.items.reduce((sum, item) => sum + item.getPrice(), 0);
{{ '}' }}
checkout() {{ '{' }}
console.log(`Totale: €${{ '{' }}this.getTotal(){{ '}' }}`);
this.items = [];
{{ '}' }}
{{ '}' }}
// Utilizzo
const cart = new ShoppingCart();
cart.addItem(new Product("Laptop", 999));
cart.addItem(new Product("Mouse", 25));
cart.checkout(); // "Totale: €1024"
結論
OOP は、コードをより整理し、再利用し、保守しやすくする強力なパラダイムです。 4 つの柱 (カプセル化、継承、ポリモーフィズム、抽象化) が連携して機能します。 堅牢でスケーラブルなソフトウェアを作成します。今後の記事では、それぞれの柱について詳しく見ていきます 先進的な実践例を交えて詳しく解説します。
🎯 重要なポイント
- OOP は、データと動作を含むオブジェクトを中心にコードを編成します。
- クラス = ブループリント、オブジェクト = 特定のデータを持つインスタンス
- 4 つの柱: カプセル化、継承、ポリモーフィズム、抽象化
- 時間の経過とともに成長する複雑なプロジェクトには OOP を使用する







