【授業レポート】システム開発入門 第21週目 〜継承で拡張&コンソールUIを作ろう!〜
21週目の授業では、先週実装した図書館貸出システムをさらに強化し、継承を使った機能拡張と、コンソールベースのメニューUIを導入しました。
■ 先生の導入:「使いやすいインターフェースは、ユーザーへの思いやり」
田中先生:「機能を増やすだけではなく、ユーザーが直感的に操作できる仕組みづくりも大切です。今回は継承で新しい本の種類を追加し、操作画面を整えましょう。」
■ 実習①:ReferenceBook/Magazine クラスの作成
まずは Book
クラスを継承し、利用制限や異なる返却ルールを持つ本の種類を追加。
from book import Book
class ReferenceBook(Book):
def lend(self):
# 参考図書は貸出不可
print(f"{self.title} は参考図書のため貸出できません。")
return False
class Magazine(Book):
def __init__(self, title, author, issue):
super().__init__(title, author)
self.issue = issue
def lend(self):
# 雑誌は最新号のみ貸出可能
if self.is_available and self.issue == "最新号":
self.is_available = False
return True
print(f"{self.title} の{self.issue}は貸出不可です。")
return False
生徒A:「参考図書だけ特別扱いできて面白い!」
生徒B:「雑誌は最新号だけ…実際の図書館っぽい!」
■ 実習②:簡易コンソールメニューの実装
次に、ユーザーが操作しやすいメニューUIを作成。Library
クラスにメソッドを追加して、選択肢を表示するループを実装しました。
def show_menu():
print("\n=== 図書館メニュー ===")
print("1. 本を検索する")
print("2. 本を借りる")
print("3. 本を返す")
print("4. 終了")
def run_console(library, member):
while True:
show_menu()
choice = input("番号を入力してください:")
if choice == "1":
title = input("検索する本のタイトル:")
results = library.find_book(title)
print([b.title for b in results] or "該当する本はありません")
elif choice == "2":
title = input("借りたい本のタイトル:")
results = library.find_book(title)
if results and member.borrow(results[0]):
print("貸出が完了しました!")
else:
print("貸出に失敗しました。")
elif choice == "3":
title = input("返却する本のタイトル:")
book = next((b for b in member.borrowed if b.title == title), None)
if book and member.give_back(book):
print("返却が完了しました!")
else:
print("返却に失敗しました。")
elif choice == "4":
print("ご利用ありがとうございました!")
break
else:
print("無効な入力です。もう一度選んでください。")
生徒C:「メニューがあると一気にアプリ感が出る!」
生徒D:「入力ミスにも対応できて安心です」
■ 黙々タイム:UIの微調整と動作テスト
後半は、メニューの表示文言や入力エラーハンドリングをブラッシュアップ。各自の環境で何度も動作させ、使いやすさを意識した改善を施しました。
- メニュー選択肢への番号付与
- 不正入力時のガイドメッセージ強化
- 雑誌・参考図書も検索結果に表示
生徒E:「ガイドを増やしたら迷わなくなった!」
生徒F:「参考図書も一覧に出ると親切だね」
■ 先生のひとこと
「継承で機能を整理し、UIで使いやすさを高める。大切なのは、コードの構造とユーザー体験の両立です。今日学んだ考え方は、どんなアプリでも応用できます。」
■ 来週の予告:外部API連携の準備
次週からは、2年生での学習に先立ち、簡単な外部API連携の基礎を学びます。天気情報や地図データなど、外部サービスと通信する方法にチャレンジしましょう!
継承による拡張と、コンソールUIの実装を通じ、1年生たちは「使えるコード」を書く楽しさと奥深さを実感しました。