【授業レポート】システム開発入門 第20週目 〜OOPミニプロジェクト:UML設計から実装まで〜
20週目の授業では、先週予告した小規模OOPプロジェクトを本格始動。まずは「クラス設計図(UML)」を描き、役割と関係性を明確にしたうえで、実際のコード実装に着手しました。
■ 先生の導入:「設計図があるから、大きなシステムも組める」
田中先生:「UMLは“言葉”より“図”で伝える設計表現。コードを書く前に、クラス同士のつながりや属性・メソッドを整理しましょう。」
黒板には、プロジェクト題材として提示された「図書館貸出システム」のUML例が掲示されました。
■ 実習①:UMLクラス図を描いてみる
まずは紙とペンで、自分たちの題材に合わせたクラス図作成ワーク。
- Book クラス:title, author, is_available 属性と、lend(), return_book() メソッド
- Member クラス:name, member_id 属性と、borrow(book), give_back(book) メソッド
- Library クラス:books リスト属性と、find_book(title), register_book(book) メソッド
生徒A:「図で関係性が見えると、実装のイメージが湧きやすいですね」
生徒B:「UMLなら、あとで設計変更してもわかりやすい!」
■ 実習②:クラスをファイルに分けて実装
UMLをもとに、3つのファイルに分割してクラス定義を開始。
book.py
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
self.is_available = True
def lend(self):
if self.is_available:
self.is_available = False
return True
return False
def return_book(self):
self.is_available = True
member.py
from book import Book
class Member:
def __init__(self, name, member_id):
self.name = name
self.member_id = member_id
self.borrowed = []
def borrow(self, book: Book):
if book.lend():
self.borrowed.append(book)
return True
return False
def give_back(self, book: Book):
if book in self.borrowed:
book.return_book()
self.borrowed.remove(book)
return True
return False
library.py
from book import Book
class Library:
def __init__(self):
self.books = []
def register_book(self, book: Book):
self.books.append(book)
def find_book(self, title: str):
return [b for b in self.books if b.title == title and b.is_available]
生徒C:「ファイル分割のおかげで、見通しがいいですね!」
生徒D:「型ヒントを入れると、さらに扱いやすくなりそう」
■ 黙々タイム:動かしてテストコードを書こう
後半は、簡単なテストコードを作成しながら動作確認。
from book import Book
from member import Member
from library import Library
lib = Library()
b1 = Book("ハリーポッター", "J.K.ローリング")
lib.register_book(b1)
m = Member("田中", "M001")
assert m.borrow(b1) == True
assert b1.is_available == False
assert m.give_back(b1) == True
assert b1.is_available == True
print("テストOK!")
生徒E:「assertを使うと、自動でチェックできて便利!」
生徒F:「テストが通ると、安心して次に進めるね」
■ 先生のひとこと
「テストコードは“動くことの証明”。設計図どおりに動いたときの喜びは格別です。これからは、テスト駆動の考え方も取り入れていきましょう。」
■ 来週の予告:継承を使った機能拡張&UIインターフェース作成
次回は、継承によるクラス拡張(例:ReferenceBook/Magazine クラスの作成)と、**簡易UI(コンソールメニュー)**の実装に取り組みます。ユーザーが操作しやすい画面設計を学びましょう!
設計図からコード、テストまで一貫して体験した20週目。1年生たちのOOPスキルが、さらに確かなものになりました!