今日のトピックは「インターフェースの利用」です。インターフェースは、オブジェクト指向プログラミングにおいてクラス間の契約を定義する重要な機能です。これにより、異なるクラスでも同じメソッド名で異なる実装を提供でき、プログラムの柔軟性が向上します。
目次
基本概念の説明
インターフェース (Interface)
インターフェース (Interface): インターフェースは、クラスが実装しなければならないメソッドのセットを定義します。インターフェース自体は実装を持たず、クラスがインターフェースを実装することで、決められたメソッドを必ず提供することが保証されます。
インターフェースを利用することで、異なるクラス間で共通の動作を強制し、多態性(ポリモーフィズム)を実現することができます。
各言語でのサンプルコード
Python
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
# インターフェースの利用例
animals = [Dog(), Cat()]
for animal in animals:
print(animal.speak())
C#
interface IAnimal {
void Speak();
}
class Dog : IAnimal {
public void Speak() {
Console.WriteLine("Woof!");
}
}
class Cat : IAnimal {
public void Speak() {
Console.WriteLine("Meow!");
}
}
// インターフェースの利用例
IAnimal dog = new Dog();
IAnimal cat = new Cat();
dog.Speak();
cat.Speak();
C++
class IAnimal {
public:
virtual void Speak() = 0; // 純粋仮想関数
};
class Dog : public IAnimal {
public:
void Speak() override {
std::cout << "Woof!" << std::endl;
}
};
class Cat : public IAnimal {
public:
void Speak() override {
std::cout << "Meow!" << std::endl;
}
};
// インターフェースの利用例
IAnimal* dog = new Dog();
IAnimal* cat = new Cat();
dog->Speak();
cat->Speak();
Java
interface IAnimal {
void speak();
}
class Dog implements IAnimal {
public void speak() {
System.out.println("Woof!");
}
}
class Cat implements IAnimal {
public void speak() {
System.out.println("Meow!");
}
}
// インターフェースの利用例
IAnimal dog = new Dog();
IAnimal cat = new Cat();
dog.speak();
cat.speak();
JavaScript
class Animal {
speak() {
throw new Error("You have to implement the method speak!");
}
}
class Dog extends Animal {
speak() {
console.log("Woof!");
}
}
class Cat extends Animal {
speak() {
console.log("Meow!");
}
}
// インターフェースの利用例
const dog = new Dog();
const cat = new Cat();
dog.speak();
cat.speak();
各言語の解説
言語 | インターフェースの定義 | 実装方法 | 特徴 |
---|---|---|---|
Python | ABC クラスを使用 | メソッドを抽象メソッドとして定義 | 柔軟だが明示的なインターフェースがない |
C# | interface キーワード | interface を実装してメソッドを提供 | 型安全で、IDEサポートが充実 |
C++ | 純粋仮想関数 | クラスで純粋仮想関数をオーバーライド | 高速で柔軟だが、設計が複雑化するリスク |
Java | interface キーワード | interface を実装してメソッドを提供 | 強力なオブジェクト指向機能 |
JavaScript | 直接のサポートなし | 抽象クラスとして機能を実装 | 柔軟でフロントエンドに強い |
まとめ
インターフェースは、クラス間で共通の契約を強制し、プログラムの一貫性と再利用性を高めます。特に大規模なプロジェクトでその価値が発揮されます。次回は「抽象クラスとその利用法」について学習しましょう。
コメント