プログラム言語ごとのオブジェクト指向の扱い
オブジェクト指向プログラミング(OOP)は、データとそれに関連する処理をオブジェクトとしてカプセル化し、コードを再利用しやすく、拡張可能にする設計手法です。以下に、代表的なプログラミング言語ごとのオブジェクト指向の特徴を整理します。
1. C++
- クラスとオブジェクト
class Animal {
public:
void speak() {
std::cout << "Animal speaks" << std::endl;
}
};
Animal dog;
dog.speak();
- 継承
class Dog : public Animal {
public:
void bark() {
std::cout << "Dog barks" << std::endl;
}
};
- ポリモーフィズム
class Animal {
public:
virtual void speak() {
std::cout << "Animal speaks" << std::endl;
}
};
class Dog : public Animal {
public:
void speak() override {
std::cout << "Dog barks" << std::endl;
}
};
2. Java
- クラスとオブジェクト
class Animal {
void speak() {
System.out.println("Animal speaks");
}
}
Animal dog = new Animal();
dog.speak();
- 継承
class Dog extends Animal {
void bark() {
System.out.println("Dog barks");
}
}
- ポリモーフィズム
Animal animal = new Dog();
animal.speak(); // Dog barks
3. Python
- クラスとオブジェクト
class Animal:
def speak(self):
print("Animal speaks")
dog = Animal()
dog.speak()
- 継承
class Dog(Animal):
def bark(self):
print("Dog barks")
- ポリモーフィズム
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def speak(self):
print("Dog barks")
animal = Dog()
animal.speak() # Dog barks
4. JavaScript
- クラスとオブジェクト
class Animal {
speak() {
console.log("Animal speaks");
}
}
const dog = new Animal();
dog.speak();
- 継承
class Dog extends Animal {
bark() {
console.log("Dog barks");
}
}
- ポリモーフィズム
const animal = new Dog();
animal.speak(); // Dog barks
5. C#
- クラスとオブジェクト
class Animal {
public void Speak() {
Console.WriteLine("Animal speaks");
}
}
Animal dog = new Animal();
dog.Speak();
- 継承
class Dog : Animal {
public void Bark() {
Console.WriteLine("Dog barks");
}
}
- ポリモーフィズム
class Animal {
public virtual void Speak() {
Console.WriteLine("Animal speaks");
}
}
class Dog : Animal {
public override void Speak() {
Console.WriteLine("Dog barks");
}
}
Animal animal = new Dog();
animal.Speak(); // Dog barks
6. Ruby
- クラスとオブジェクト
class Animal
def speak
puts "Animal speaks"
end
end
dog = Animal.new
dog.speak
- 継承
class Dog < Animal
def bark
puts "Dog barks"
end
end
- ポリモーフィズム
class Animal
def speak
puts "Animal speaks"
end
end
class Dog < Animal
def speak
puts "Dog barks"
end
end
animal = Dog.new
animal.speak # Dog barks
7. Kotlin
- クラスとオブジェクト
open class Animal {
open fun speak() {
println("Animal speaks")
}
}
val dog = Animal()
dog.speak()
- 継承
class Dog : Animal() {
fun bark() {
println("Dog barks")
}
}
- ポリモーフィズム
class Dog : Animal() {
override fun speak() {
println("Dog barks")
}
}
val animal: Animal = Dog()
animal.speak() // Dog barks
8. Rust
- 構造体とトレイト (Rustは純粋なOOPではありませんが、類似機能を持つ)
struct Dog;
trait Animal {
fn speak(&self);
}
impl Animal for Dog {
fn speak(&self) {
println!("Dog barks");
}
}
let dog = Dog;
dog.speak();
違いのまとめ
言語 | クラスのサポート | 継承 | ポリモーフィズム | 特徴 |
---|---|---|---|---|
C++ | ✓ | ✓ | ✓ | 高いパフォーマンスと柔軟性 |
Java | ✓ | ✓ | ✓ | JVM上で動作し移植性が高い |
Python | ✓ | ✓ | ✓ | 動的型付けとシンプルな構文 |
JavaScript | ✓ | ✓ | ✓ | プロトタイプベースの継承 |
C# | ✓ | ✓ | ✓ | .NET環境と強力なライブラリ |
Ruby | ✓ | ✓ | ✓ | 簡潔な構文と柔軟性 |
Kotlin | ✓ | ✓ | ✓ | Javaとの互換性が高い |
Rust | ✗ (トレイトで代用) | ✗ | ✗ | 所有権と安全性を重視 |
オブジェクト指向の特徴を理解することで、設計やコードの再利用性を向上させることができます。
ディスカッション
コメント一覧
まだ、コメントがありません