boy in green shirt
Photo by CDC on Pexels.com

【授業レポート】システム開発入門 第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スキルが、さらに確かなものになりました!

投稿者 greeden

コメントを残す

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

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