boy in green shirt
Photo by CDC on Pexels.com

【授業レポート】システム開発入門 第19週目

〜継承とポリモーフィズムで“拡張できる設計”を体験!〜

18週目で学んだオブジェクト指向の基本(クラスとインスタンス)を踏まえ、今週は**継承(inheritance)ポリモーフィズム(多態性)**に挑戦しました。
「既存のクラスを活かして新しい機能を追加する」「同じメソッド名でも振る舞いを変える」——柔軟な設計の考え方を学ぶ回です。


■ 先生の導入:「“似ているけど少し違う”をどう表現する?」

田中先生:「犬も猫も“動物”だけど、鳴き声は違うよね。そんなときに便利なのが“継承”と“ポリモーフィズム”です。」

黒板には「Animal → Dog / Cat」の図が描かれ、共通部分を親クラスに、違いを子クラスに置くイメージが示されました。


■ 実習①:継承で共通部分をまとめよう

まずは親クラスAnimalを作り、DogCatがそれを継承する例。

class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        print(self.name + "は何かをしゃべろうとしている…")

class Dog(Animal):
    def speak(self):
        print(self.name + ":ワンワン!")

class Cat(Animal):
    def speak(self):
        print(self.name + ":ニャー!")

生徒A:「DogCatには名前の処理を書かなくていいんだ!」
田中先生:「共通処理は親、違いは子。これが継承の基本です。」


■ 実習②:ポリモーフィズムを体験しよう

同じspeak()メソッドでも、クラスによって結果が変わる“多態性”を実感。

animals = [Dog("ポチ"), Cat("ミケ"), Animal("???")]

for a in animals:
    a.speak()

生徒B:「同じspeak()で全部動くのが不思議だけど便利!」
田中先生:「“同じ名前で呼べる”ことが、コードをシンプルにします。」


■ 黙々タイム:自分のテーマで継承設計

後半は、身近な題材で継承&ポリモーフィズムを実装する課題に挑戦。

💡 お題例

  • GameCharacter → Warrior / Wizard / Healer(攻撃方法が異なる)
  • Question → YesNoQuestion / MultipleChoiceQuestion(表示や採点方法が異なる)
  • Vehicle → Car / Bicycle / Train(移動方法や速度計算が異なる)

生徒C:「Questionクラス作って、子クラスで出題方法を変えました!」
生徒D:「攻撃メソッドをオーバーライドして、キャラごとに演出を変えた!」


■ 先生のひとこと

「継承とポリモーフィズムは“再利用”と“拡張性”の鍵です。ただし、むやみに継承すると複雑になるので、“本当に共通か?”を考えながら使いましょう。」


■ 来週の予告:ミニOOPプロジェクト開始!

次回からは、小規模なOOPプロジェクトに取り組みます。

  • クラス設計図(UML風)を描く
  • 継承やポリモーフィズムを活用
  • テストコードで動作確認

“設計して作る”力をさらに磨いていきます!


“似ているけれど違う”——現実世界のモノをコードで表現する力が一段とアップした19週目。クラス設計の面白さに目覚めた1年生たちは、次のプロジェクトへ向けて意欲満々です。

投稿者 greeden

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)