オブジェクト指向プログラミングの考え方を学習中
C# でオブジェクト指向プログラミングの学習中。コースも中盤に入ってきた。前半の理解が大変なObject-Oriented Programming (OOP) の、「ではサンプルプロジェクトではどう実装されていくのか」がわかって楽しくなってきた。
学習中のコースはこちら。
英語だがアドオンをブラウザに入れればリアルタイムGoogle翻訳字幕になる。
私はたまたまPythonで基礎固めしたので丁度よかった。
(約 2,100文字の記事です。)
設計からコーディング、OOP流に書き換える手順が紹介されている
このコース、一言で言うと、ことごとく過去の、ごく普通の講師が教える手法と逆で教えてくれる。それがいい!
普通の学習教材では、
プログラミング言語の仕様の解説
実際にコーディングしてみせる
実行結果を観察し、解説する
この無限ループが多い。だがこのパターンの解説は、OOPで詰まる。
確かに間違ってはいないし、具体例としては「確かにそうなんだよね」なんだけど、それは結局無数にあるOOPが得意なパターンの一部を紹介しただけ、解説しただけなんだよね。本質的な部分の解説がないから、分かったようで分からない。教材のOOP部分をこなす分には上手く行くが、では自分でソフトを作ろうとしたとき、どうやってOOPで仕上げればいいの?どこから取り組めばいいの?という途方に暮れる。
分ったようで、分らないのだ。
OOPの仕組みや実装方法、コードの書き方が分かっても「OOP流のコードの設計の仕方」が分からないのだ。そこまで解説してくれる教材に今まで出会わなかった。
だがこのコースは違う!😤
OOPの本質からたどって問題解決=コーディングの解説が付いてくる
この講師は他の講師とは違う。もっと本質的に、「さて、どうやってプログラムを書こうか?」という発想のところから解説してくれている。なのでこのコースにはOOP流のコード設計のための考え方やコツなどの解説もある。
そしてその設計手法で擬似コードを書き、プロシージャルなモジュラープログラミングで書いて見せてくれる。次にモジュラープログラミングの限界の解説に入る。いよいよ「ではOOPをどう実装するのか?OOPだと何が便利なのか?」の解説を、C# +Visual Studioで実際にコーディングしながらの解説に入っている。
最初はプロシージャルな、ごく普通の人がごく普通に発想した手順で、まぁそうだよな、的な手続き型の関数主体のコードが縦に並ぶ。それをそこからOOPの概念の解説と共にOOPスタイルに書き換えていくのだ。その解説が素晴らしい。
そして少しずつOOP流にコードが書き換えられている。その過程でコードの開発手法の解説も入ってくる。今回はトップダウン方式で書き換えていったそうな。次の動画はOOPの設計方法の原則の解説だとか。そしてポリモーフィズムを生かすことについての解説も出てくるらしい。楽しみだ。
OOPのコードデザインは、かなり自然。
普通に考える通りの、さらっとした簡単なものをサラッと実装できる不思議な感じがした。
OOPはそのコードの構造と概念と実際の使いこなしのテクニックがある程度血肉になって身に付いていないと、使いこなせないことも分かった。ただ写経していては成長できない。「なぜ、どうして、この呪文を書く必要があるのか?ないとどうなるのか?」の理解が重要。
だが逆に使えるようになれば、ものすごく「重複や無駄のない、スッキリとした実装」ができることが分かった。中規模以上になったときのメンテが楽だろうなと思う。とにかく「分離」がしっかりできる概念だ。スパゲティにしないための工夫の賜物なのだろう。
また「1つのメソッドは1つの機能のみ」という原則も気に入った。うん、シンプルに切り分けられる、ってのがいい。そしてメソッド間の通信機能と内部データと外部データの、公開性と秘匿性の制御。これがどんなに規模が大きくなっても、問題が膨れ上がらない理由だ。
逆にプロシージャルなコードで継ぎ足し拡張するとすぐにこの問題にぶつかる。変数の独立性の困難なシーンが登場する。そこから先には進みにくい。迂回迂回でスパゲティになる。コードのメンテができなくなる。
だからOOPで開発するにしても、OOPの特性を生かした設計をしないと、これまたどこかで変数の独立性の問題が発生するだろう。OOPはOOP流をキチンと守ることでその力を発揮する。なのでOOP流を崩さないことが鉄則だと感じた。
それをきちんと体得するために、残り3分の1のコースを進めたい。
今日はこれまで。
今回の創作活動は約30分(累積 約3,898時間)
(1,144回目のnote更新)