【授業レポート】システム開発入門 第19週目
〜継承とポリモーフィズムで“拡張できる設計”を体験!〜
18週目で学んだオブジェクト指向の基本(クラスとインスタンス)を踏まえ、今週は**継承(inheritance)とポリモーフィズム(多態性)**に挑戦しました。
「既存のクラスを活かして新しい機能を追加する」「同じメソッド名でも振る舞いを変える」——柔軟な設計の考え方を学ぶ回です。
■ 先生の導入:「“似ているけど少し違う”をどう表現する?」
田中先生:「犬も猫も“動物”だけど、鳴き声は違うよね。そんなときに便利なのが“継承”と“ポリモーフィズム”です。」
黒板には「Animal → Dog / Cat」の図が描かれ、共通部分を親クラスに、違いを子クラスに置くイメージが示されました。
■ 実習①:継承で共通部分をまとめよう
まずは親クラスAnimal
を作り、Dog
やCat
がそれを継承する例。
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:「Dog
とCat
には名前の処理を書かなくていいんだ!」
田中先生:「共通処理は親、違いは子。これが継承の基本です。」
■ 実習②:ポリモーフィズムを体験しよう
同じ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年生たちは、次のプロジェクトへ向けて意欲満々です。