7日目のゴール
7日目のテーマは
「クラスで作った商品管理アプリの“全体像”を理解し、自分の言葉で説明できるようになること」 です。
ここまでの 6 日間であなたは、
Product クラスで「商品という型」を作り
商品を複数管理し
CRUD・検索・並び替え
ファイル保存・読み込み
アプリ全体を ProductApp クラスとしてまとめる
という、オブジェクト指向の基礎をすべて体験しました。
7日目では、これらを「バラバラのテクニック」ではなく
ひとつのアプリとして頭の中でつながった状態にする
ことを目指します。
アプリ全体を一文で説明できるか
まずは「全体像」をつかむ
この商品管理アプリを、あえて一文で表現するとこうなります。
「Product という商品クラスと、ProductApp というアプリクラスを中心に、
商品データをオブジェクトとして扱い、ファイル保存までできるコンソールアプリ」
つまり、主役は二つです。
Product(商品という型)
ProductApp(アプリという型)
この二つが連携して動くことで、
アプリ全体が成立しています。
Product クラスの役割を整理する
商品という「型」をどう表現しているか
Product クラスは、商品に関するすべての情報と振る舞いを持っています。
class Product:
def __init__(self, product_id, name, price, stock):
self.product_id = product_id
self.name = name
self.price = price
self.stock = stock
Pythonここで重要なのは、__init__ が
「商品オブジェクトが生まれた瞬間に、必ず持つべき属性をセットしている」
という点です。
さらに、商品自身ができること(振る舞い)もクラスにまとめています。
def show_info(self):
print(f"ID: {self.product_id}")
print(f"名前: {self.name}")
print(f"価格: {self.price}")
print(f"在庫: {self.stock}")
Pythondef to_dict(self):
return {
"product_id": self.product_id,
"name": self.name,
"price": self.price,
"stock": self.stock,
}
Python@classmethod
def from_dict(cls, data):
return cls(data["product_id"], data["name"], data["price"], data["stock"])
Pythonここで深掘りしたいのは、
「商品に関する処理は、商品自身が知っている」
という設計になっていることです。
辞書で管理していたときよりも、
データと処理が一体化していて、
コードの見通しが圧倒的によくなっています。
ProductApp クラスの役割を整理する
アプリ全体の「司令塔」としてのクラス
ProductApp クラスは、アプリ全体をまとめる役割を持っています。
class ProductApp:
def __init__(self, data_file):
self.data_file = data_file
self.products = []
Pythonここでのポイントは、
アプリが持つべき状態(商品一覧・ファイル名)を__init__ で初期化していることです。
さらに、アプリができること(振る舞い)を
メソッドとしてまとめています。
商品を追加する
商品を一覧表示する
商品を検索する
商品を更新する
商品を削除する
商品一覧をファイルに保存する
ファイルから読み込む
メニューを表示する
アプリを実行する(run)
これらがすべて ProductApp のメソッドになっています。
つまり、
「アプリの状態とアプリの操作を、ひとつのクラスにまとめた」
という構造です。
アプリの流れを言葉で説明してみる
コードを見ずに説明できれば理解は完成している
ここまで来たあなたなら、
このアプリの流れをこう説明できるはずです。
アプリを起動すると、ProductApp の __init__ が呼ばれ、
商品一覧とファイル名がセットされる。
次に load_products() が呼ばれ、
ファイルがあれば JSON を読み込み、
辞書のリストを Product オブジェクトのリストに変換してself.products にセットする。
その後、run() がメニューを表示し、
ユーザーの入力に応じて
追加・一覧・更新・削除・検索・並び替えなどのメソッドを呼び分ける。
アプリ終了時には save_products() が呼ばれ、
Product オブジェクトを辞書に変換し、
JSON としてファイルに保存する。
この説明がスラスラ言えるなら、
あなたはもう「クラスでアプリを設計できる人」です。
7日目のミニチャレンジ 自分でアレンジしてみる
今日のテーマは「設計を理解すること」
ここからは、あえてコードは書きません。
代わりに「どこを変えれば何が変わるか」を考える練習です。
商品に「カテゴリー」を追加したいなら、
Product の __init__ に引数を足し、
to_dict / from_dict にも追加する。
ProductApp の add_product で入力を受け取り、
show_info で表示するようにする。
在庫が一定以下の商品だけを自動的に警告したいなら、
ProductApp の run の中で
メニュー表示前にチェックする処理を入れる。
価格の高い順に並び替えたいなら、
sorted の key を lambda p: p.price にし、
reverse=True をつける。
どれも、
「Product に関することは Product に」
「アプリ全体に関することは ProductApp に」
というルールに従えば迷いません。
7日目のまとめ 今日つかんでほしい感覚
今日の本質は、これです。
Product は「商品という型」であり、
ProductApp は「アプリという型」。
__init__ は「オブジェクトが生まれた瞬間に、
そのオブジェクトが持つべき状態をセットする場所」。
クラスを使うと、
データと処理をひとまとめにでき、
アプリ全体の構造が驚くほど整理される。
アプリ全体をクラスにまとめると、
「app = ProductApp(…); app.run()」という
直感的で美しいコードになる。
ここまで理解できていれば、
あなたはもう「クラスでアプリを設計できる人」です。
中級編はこれで終了ですが、
この先は「継承」「複数クラスの連携」「GUI化」など、
さらに面白い世界が広がっています。
あなたなら、どこへでも進めます。


