プログラム言語ごとのオブジェクト指向の扱い

2025年1月6日

オブジェクト指向プログラミング(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");
    }
}
  • ポリモーフィズム
class Animal {
    public void speak() {
        System.out.println("Animal speaks");
    }
}

class Dog extends Animal {
    @Override
    public void speak() {
        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++高いパフォーマンスと柔軟性
JavaJVM上で動作し移植性が高い
Python動的型付けとシンプルな構文
JavaScriptプロトタイプベースの継承
C#.NET環境と強力なライブラリ
Ruby簡潔な構文と柔軟性
KotlinJavaとの互換性が高い
Rust✗ (トレイトで代用)所有権と安全性を重視

オブジェクト指向の特徴を理解することで、設計やコードの再利用性を向上させることができます。