1人で、みんなで、ミノ駆動本で学ぶオブジェクト指向

Event:

オブジェクト指向LT会 vol.4

Presented:

2022/06/29 nikkie

お前、誰よ(自己紹介)

ラクスさんのLT会、お世話になっております

オブジェクト指向界隈の

ここから本題

#ミノ駆動本

N=1(個人の意見です)

ミノ駆動本って、何よ

ミノ駆動本って、何よ

ミノ駆動本、学びたくさん

例:ストラテジパターン

  • インターフェース による条件分岐の実装(6章)

  • IMO:ミノ駆動本で一番の学び(現時点)

  • (本日既出ですね😃)

Pythonでやるなら こうかな

ミノ駆動本、読みながら考える

アウトプットしたい!

  • Pythonでの実装をアウトプットする場

  • フィードバック がほしい

そうだ、読書会開こう📖

ミノ駆動本_読書py

Based on アートオブアジャイルデベロップメント読書会

  • アウトプットメイン な別の読書会のやり方を参考に

  • 事前に読んでくる(直前もくもく会あり)

  • 読書会では「ここがわからん」「ここはわかった」をボイスチャット&テキストチャット

ミノ駆動本_読書pyでの学びの共有

2つ 共有

1.「データクラス」は #増田本 にもありますよ

読書会で出会った言葉

「データクラス」in #ミノ駆動本

  • 1.3 さまざまな悪魔を招きやすいデータクラス

    • 「悪魔」= 設計や実装上の問題 (はじめに)😈

  • 3章 クラス設計では、データクラスの悪魔を退治していく(成熟したクラスへ)

教えていただいた #増田本

#増田本 3章

データとロジックを別のクラスに分けることがわかりにくさを生む

3章の中のタイトル

アンチパターン「データクラス」の解像度が上がった

  • データだけを持ち、ロジックを持たないクラス

  • プログラミング言語の文法的には誤っていない

  • オブジェクト指向のクラスの使い方として誤り

読書会で #増田本 とのつながりに気づけたから書けました 🏃‍♂️(= @skip)

明日です! ミノ駆動さん × 増田さん 🏃‍♂️

2.不変がないPythonで値オブジェクトどうすればいいんだ?

読書会で深まった理解

値オブジェクト

  • 「値を クラス(型)として表現 する設計パターン」(#ミノ駆動本 3章 p.77)

  • 「値を扱うための専用クラスを作るやり方」(#増田本 1章 Kindle の位置No.687)

    • 「値オブジェクトを 不変 にする」(#増田本 1章 Kindle の位置No.727)

Pythonで実装例:金額を表すクラス

@dataclass(frozen=True)
class Money:
    amount: int
    currency: str

    def __post_init__(self):
        if self.amount < 0:
            raise ValueError("金額が0以上でありません。")

    def __add__(self, other: Money) -> Money:
        if not isinstance(other, Money):
            return NotImplemented
        if self.currency != other.currency:
            raise ValueError("通貨単位が違います。")
        added = self.amount + other.amount
        return self.__class__(added, self.currency)

#ミノ駆動本 3章を参考にしました(ソースコード

不変です💰

>>> yukichi = Money(10_000, "¥")
>>> yukichi.amount = 1_000_000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 4, in __setattr__
dataclasses.FrozenInstanceError: cannot assign to field 'amount'

属性に再代入できません

あれ、不変じゃない😱

>>> object.__setattr__(yukichi, "amount", -1_000_000)
>>> yukichi
Money(amount=-1000000, currency='¥')

マイナス百万円爆誕!!💥

IMO:実装 and コミュニケーション

  • Pythonには不変はない(みたい) 例: object.__setattr__

  • 「不変が前提の値オブジェクトを変更したい」と考えるということは、 何かがうまくいっていない のでは?

  • 大元の問題を特定し解決するために、コミュニケーションを取ろう

まとめ🌯 1人で、みんなで、ミノ駆動本で学ぶオブジェクト指向

  • ミノ駆動本の読書会(Python使い視点)を開いてます(次回は 7/1(金) 条件分岐

  • 読もう、ミノ駆動本 & 開いてみよう、読書会

読書会で得た学びを共有

  • アウトプットして学ぶ & 他の方のアウトプットがインプットとなって学ぶ

  • #ミノ駆動本 × #増田本 、 合わせ読み で理解深まる

  • Pythonに不変はないが、値オブジェクトはできる 👉 思うに鍵はコードの外の コミュニケーション

ご清聴ありがとうございました

これまでの読書py参加者の皆さまに感謝申し上げます

今後ともよろしくお願いします(ウェルカムカモーン)

EOF