ミニマムブロック

頭の中でつながるまで

憂鬱なプログラマのための、オブジェクト指向開発講座

要点のメモ

・この本は、「単に動くだけのプログラムをでっちあげるのではなく、きちんとしたソフトウェア設計ができるようになりたい」という人のためのもの

・クラスは「型」のこと

オブジェクト指向プログラミングとは、クラスを作ること

オブジェクト指向ソフトウェア開発の定義は、

オブジェクト指向ソフトウェア開発方法論にのっとって

システムを分析/設計し、

その結果を

オブジェクト指向プログラム言語によって実現する

」こと

 

クラスにメソッドを持つわけ

クラスは型である。

クラスは構造体に似ているが、メソッドを持つ点が異なる。

疑問点は、なぜそんなことをするんだ?メリットは何だ?

クラスにおけるメソッドは、クラスのデータメンバ専用の処理なのだ!

C言語の関数がすべてグローバルにフワフワと浮いているよりも、管理がしやすい。

従来は、データと処理がバラバラだったわけでしょ。

整理の仕方を、データと処理で1セットとしたわけよ。

その方が管理しやすいんだって。

 

クラスの切り分け方

C言語においては、動詞的な切り分け方をしていた。

例:社員データを使い、「部署データを表示する」

オブジェクト指向では、名詞的な切り分け方をする。

例:部署クラスを作り、部署データを表示する。あくまで作るのは「部署」クラス

 

クラスの持つnewなpoint、公開と隠蔽

publicとprivateのことね。で、クラスのフィールドは基本privateで扱うでしょ。

そんで、privateは外部からアクセスできないから、そこで使うのがメソッドね。

これが、メソッドの持つ大きな役割の1つ。

 

なぜわざわざ隠蔽するの?メソッドを使うの?どうせ関数からアクセスできるなら、privateにしていても同じでしょ?

文字列を扱うクラスを作ったとして、文字列の長さを取得したいとする。

実装方法として最初に思いつくのは単純に文字列の長さを取得する関数を使うことだが、文字列を取得する関数はパフォーマンスが悪いので、あまり多用はしたくない。

次に思いつくのが、setStrするときに、文字列の長さも取得して、メンバ変数に保存すること。そしてgetLenではメンバ変数を返すだけにすれば、楽でしょ。

この場合、strもlenもよそから触られるとデータに矛盾が発生する。

オブジェクト指向で、データのアクセスをメソッドからと制限しておけば、

メソッドが呼び出されるたびに文字列と長さを再設定することを保証できるから、安全というわけ。

ざっくり言って、C言語はデータ保護という概念が弱すぎて、再利用というニーズには合致してない。そういう弱点を補強するために、クラスという概念(フィールドはprivate, メソッドはpublicという仕組み)ができたのだよ。