- はじめに
- Class とは?
- オブジェクト指向とは?
- オブジェクト指向のメリット
- オブジェクト指向の3要素
- Class と関数の違い
- まとめ
--
--
- 人クラスとインスタンスの太郎君
- 動物クラスとサブクラスのライオン
--
- なんとなくわかっている(けど使えない)
- どういう時に使うの?
- 関数ではだめなの?
- 別に使わなくてもよくない?
--
- 細かな所まで知らなくても使用可能
- 同じ事を何度も書く必要がない
- 変更箇所を特定
- 拡張の影響範囲を少なく
--
- 自分
- 未来の自分
- チームメンバー
- 顧客
--
- 1秒でも早く解決する必要がある場合
- 使い捨てのコード
--
オブジェクトを生成するための設計図あるいはひな形に相当するものである。
クラスには、クラス自身またはクラスのインスタンスが保持するデータと、データに関連したオブジェクトの振る舞いを記述できる。 wikipedia
--
その名の通りモノ。特定の何かを表すモノ。
--
- 特定のモノを表す
- そのモノに関連するデータと、モノが行う振る舞いを持つ
--
- 日時を表す
- 日時の振る舞いを持つ
- 今の日時を取得
- 特定のフォーマットに日時を変換
--
ソフトウェア設計とプログラム記述の際に用いられる考え方 wikipedia
--
- 考え方
- 概念
--
- だから、難しい
- だから、正解がない
--
プログラムを手順ではなくて、モノの作成と操作として見る考え方
--
--
オブジェクトを生成するための設計図あるいはひな形に相当するものである。
--
--
オブジェクト指向に沿ったクラスの設計がされている事
--
- 可読性
- 保守性
- 再利用性
--
--
- カプセル化
- 継承
- ポリモーフィズム
オブジェクト指向プログラミングにおけるオブジェクトは、クラスによる情報のカプセル化を行うことで作られる。
公開すべきものはプログラムやモジュールの仕様であって、その実現手段ではない wikipedia
--
- カプセル化とは実装を隠蔽すること
- 実装を知らなくて良い
- 使い方がわかれば良い
--
datetime.datetime
クラスの実装を知る必要はない- 日時を表わす事がわかっていればそれで良い
--
- 日時を表わす
- → 今の日時を取得できそう
- データが不要なのでクラスメソッド
- → 規定のフォーマットで出力できそう
- 日時データを保持している必要があるのでインスタンスメソッド
--
- 「クラスAはxxxである。」と簡潔に説明できる必要がある
--
- 「クラスAはxxxである。」と一目で分かる必要がある
--
あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。 wikipedia
--
特性を引き継ぐ という点が強調されて、乱用される傾向があるが、機能をまとめる事を目的に使用するものではない
--
AがBを継承している場合、AはBである必要がある。(Is-a関係)
--
他のクラスを内部で保持することで機能を表現する(Has-a)
--
super().hoge()
ではなく self.piyo.hoge()
- 多態性、多相性、多様性
--
本質的(抽象的)な概念に対して処理を書くべきで、実体に対しての処理を書くべきではない (実体が変更されても動作する)
--
汎用的に作れという事
--
多言語だとinterfaceがあるが、Pythonは動的型付け言語なので型に縛られることなくダッグタイピングでポリモーフィズムを実現可能。
--
尚、ABCモジュールを使用する事でinterface的な事を実現することが可能です
--
- 特定のモノを表す
- そのモノに関連するデータと、モノが行う振る舞いを持つ
--
- 特定のモノに関連しない処理
- (明示的に関連していない)
- データを保持できない
- 厳密にはできる(クロージャ)
--
- 明示的に関連付けする事でわかりやすくなるか
- データを保持すると楽になるか
--
- システムだと必須
- 単一のスクリプト、ノートブックでは無理に使用する必要はない
- が、検討する価値は十分にある
--
- オブジェクト指向は概念
- 手順ではなくて、モノの作成と操作として見る
- 可読性、保守性、再利用性がメリット
- 楽にならない場合には使用する必要はない
- が、検討してみる
--
- Wikipedia
- オブジェクト指向プログラミングのためのモデリング入門
- DDDの人の資料。オブジェクト指向を突き詰めるとこうなる
- 日本語とオブジェクト指向
- オブジェクト指向とは関係ないが、オブジェクト指向がモヤッとしている人には良いと思う
- オブジェクト指向と10年戦ってわかったこと
- 簡潔にわかりやすくまとまっている