Open3
Udemy:Pythonオブジェクト指向プログラミング入門。難解なオブジェクト指向の概念をアプリを開発しながら徹底解説。のまとめ、疑問点など
概要
オブジェクト指向プログラミングの基礎とPythonでのオブジェクト指向プログラミングについて解説されたコースについての振り返り
受講コース
Pythonオブジェクト指向プログラミング入門。難解なオブジェクト指向の概念をアプリを開発しながら徹底解説。
セクション
- 紹介
- クラス・オブジェクト指向プログラミングの復習
- ゲームで使うフォントやアスキーアートのダウンロード
- じゃんけんゲーム(クラスを使わない実装)
- じゃんけんゲーム(クラス・オブジェクト指向を使った実装)
- ブラックジャックゲームの概要
- ブラックジャックのアスキーアートを管理するクラス
- カード一枚一枚を管理するクラス
- カードデッキを管理するクラス
- [基底クラス]プレイヤーを管理するクラス
- [派生クラス]ユーザーもしくはディーラーの挙動を管理するクラス
- ゲームの進行を管理するクラス(ユーザーデータ、ディーラーターンの管理)
- ゲームの進行を管理するインナークラス(手札の表示)
- ゲームの進行を管理するインナークラス(勝敗の判定)
- ボーナスレクチャー
各セクションのまとめ、所感、不明点の深堀り
1.紹介~2.クラス・オブジェクト指向プログラミングの復習
- 全体的に
- セクションタイトルにある通り”復習”なので、解説は全体的にサラッとしているため、一次情報の解説を見たり、詳細説明が省略されている内容については追加調査しても面白そう
- ネットで調べる以外の一次情報として、部屋にある憂鬱なプログラマのためのオブジェクト指向開発講座も併用
- セクションタイトルにある通り”復習”なので、解説は全体的にサラッとしているため、一次情報の解説を見たり、詳細説明が省略されている内容については追加調査しても面白そう
- クラスについて
- 再利用性のある処理、データなどをあらかじめ記載しておき、呼び出し可能な状態にしておくためのもの
- サバイバルクラフトゲームで言うところの設計図やレシピのようなもの(材料は不要)
- クラスを使ってオブジェクト、インスタンスを生成することで実体を持つことが出来る
- クラス単体ではあくまで設計図のような扱いなので、具体的な処理が走ったりはしない
- オブジェクトとインスタンスの違い
- 解説を見ても正直良く分からず…(★Todo:調べて内容をまとめる)
- クラスのメリット
- なぜクラスを使うのか…?
- 大規模なコーディングの場合、以下のような状況が発生する(★ToDo:他にも困る状況がないか追加調査しても良さそう)
- メインの処理の中に具体的な処理が書かれると長文化し、コードの可読性が低下してしまう場合がある
- 処理の大枠は同じだが、持たせたいデータが異なる場合、関数だけでは対処ができず、大枠の処理に対して修正したい場合に全てを網羅しての修正が必要になってしまう
- 各処理に変更を加えた場合の影響が分かりにくく、意図せずバグに繋がってしまう可能性が高まる
- 上記デメリットを解決する方法としてクラスを用いることで再利用性を高め、保守性や拡張性を向上させることが出来る
- クラスを用いることで、動作とデータを
- 大規模なコーディングの場合、以下のような状況が発生する(★ToDo:他にも困る状況がないか追加調査しても良さそう)
- なぜクラスを使うのか…?
参考書籍でメモしておきたいこと
Udemyの内容を振り返るために、一次情報として参照している書籍の方でメモしておきたいことはこちらに残す
参考書籍
メモ
- オブジェクト指向 vs 構造化
- Tucker!(タッカー)著.憂鬱なプログラマのためのオブジェクト指向開発講座.初版第25刷,翔泳社,2011,p.49-50
では,この問題を解決し,保守性を向上する方法はあるのでしょうか.これは,一見とてつもない難問のようにも思えますが,実はそれほど難しいことではありません.
つまり,開発する際にも,ユーザの視点でモジュール分けしてしまえばよいのです.
(中略)
(もうお分かりでしょうが)このようにユーザの視点からシステムを客観的に見たときに,そこに存在する対象(モノ)をモジュール化したものがクラスなのです.
(中略)
このように,従来のプログラミングでいう「部品」が,釘やネジ,柱,梁といった,システムを構造物として成立させるための,「開発時の視点」からのものだとしたら,オブジェクト指向でいうクラスという部品は,キッチン,玄関,リビングといった居住者の生活空間を単位にした,「運用時の視点」のものが該当します.これはオブジェクト指向を理解する上で,非常に重要な視点の転換です.
-
(パヤヤイ所感)モジュール化により再利用性を高めることの重要性はオブジェクト指向も構造化プログラミングも変わらないが、ユーザーからの変更要望への強さにおいては、オブジェクト指向の上記モジュールの切り出し方の考えが有用であるというのは非常に腑に落ちた。ただ、ここで気になるのが「ユーザー視点でモジュールを切り出せばいい」と言っているがユーザーの目に触れないものについてはどう考えれば良いのかまだ理解が不足しているように感じる。
-
オブジェクト指向プログラミングの設計における、システムをクラスで切り分ける静的分析では、切り出したクラス同士の関係性を
関連
として表現することが出来る。
この関連は場合によっては、関連そのものをクラスとして切り出すこともある。- たとえば多対多の関連を持つクラスで、一方のクラスに属性を持たせると関連が破綻するような場合、または関連そのものが何かしらのパラメーターで定義される場合に、その関連はクラスとして切り出した方が良い場合がある。
- さらにはこのクラスとなった関連は更に他のクラスと関連をもつ場合がある
- ToDo:具体例は?