Python上級

上級 Pythonで学ぶオブジェクト指向設計|練習問題編

導入

オブジェクト指向設計は、ソフトウェア開発において重要な役割を果たします。特に、現実のビジネスロジックをモデル化する際に、その有効性が際立ちます。本記事では、実際の業務に基づいた具体的なシナリオを通じて、オブジェクト指向設計の考え方を深めていきます。

教科書レベルの解説(オブジェクト指向設計)

重要な概念の整理

オブジェクト指向設計においては、クラス、オブジェクト、継承、ポリモーフィズムなどの概念が中心となります。これらの概念を効果的に活用することで、コードの再利用性や可読性が向上します。特に、ビジネスロジックをクラスとして定義することで、システム全体の構造が明確になり、メンテナンスが容易になります。

コード例(Python)


class Product:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def apply_discount(self, discount):
        self.price -= self.price * discount

class Book(Product):
    def __init__(self, name, price, author):
        super().__init__(name, price)
        self.author = author

    def display_info(self):
        return f"{self.name} by {self.author} costs {self.price}."

book = Book("Effective Python", 40, "Brett Slatkin")
book.apply_discount(0.1)
print(book.display_info())

コードの行ごとの解説

  1. class Product: – 基本的な商品クラスを定義します。
  2. def __init__(self, name, price): – 商品の名前と価格を初期化するコンストラクタです。
  3. def apply_discount(self, discount): – 割引を適用するメソッドです。
  4. class Book(Product): – Productクラスを継承したBookクラスを定義します。
  5. def display_info(self): – 書籍の情報を表示するメソッドです。
  6. book = Book("Effective Python", 40, "Brett Slatkin") – Bookクラスのインスタンスを生成します。
  7. book.apply_discount(0.1) – 割引を適用します。
  8. print(book.display_info()) – 書籍の情報を出力します。

練習問題編

以下の練習問題に挑戦してみてください。各問題には模範解答と解説が付いています。

  1. 問題1: Productクラスに在庫数を管理するプロパティを追加してください。
    模範解答:

    
    class Product:
        def __init__(self, name, price, stock):
            self.name = name
            self.price = price
            self.stock = stock
    

    解説: 在庫数を管理するためのプロパティを追加することで、商品の管理がより現実的になります。

  2. 問題2: Bookクラスに、書籍の在庫数を表示するメソッドを追加してください。
    模範解答:

    
    def display_stock(self):
        return f"{self.name} has {self.stock} copies available."
    

    解説: 書籍の在庫数を表示することで、在庫管理が容易になります。

  3. 問題3: Productクラスに、商品の情報をJSON形式で返すメソッドを追加してください。
    模範解答:

    
    import json
    
    def to_json(self):
        return json.dumps({"name": self.name, "price": self.price, "stock": self.stock})
    

    解説: 商品情報をJSON形式で返すことで、他のシステムとの連携が容易になります。

まとめ

  • オブジェクト指向設計は、ビジネスロジックを効果的にモデル化する手法である。
  • クラスの継承やメソッドの追加により、コードの拡張性が向上する。
  • 具体的なシナリオに基づいた設計が、実務において有用である。