オブジェクト指向

本日はまじめにプログラム設計の話


オブジェクト指向とはなんぞやと考えててなんか自分の中で良さそうな
説明が浮かんだので書いておく



int main(){


int human;
int apple;


Eat(human, apple);
}



Eat関数は第一引数が第二引数を「食べる」関数である
このプログラムでは人がりんごを食べる機能を実現している
それを言語はC言語、手続き型で書いている
日本語に翻訳すれば「人がりんごを食べる」
int human; // 人
int apple; // りんご
void Eat(int, int) // 食べる


だがこういう書き方も可能である
Eat( apple, human);
とてつもないバグの完成だ
「りんごが人を食べる」


オブジェクト指向、とりわけクラス構造を持たない言語では
処理の対象となる名詞と処理内容を表す動詞が常にバラバラで関連を持たない
ゆえに「りんごが人を食べる」ということも書けてしまう


だがオブジェクト指向、クラス構造を用いるとすっきりする
Eatという動詞は人に実装されているが、りんごには実装されてないからである



HUMAN inja; //人間型オブジェクトより定義
APPLE dessert; //りんご型オブジェクトより定義
inja.Eat(dessert); //人間オブジェクトのメンバ関数Eatを呼び出す
dessert.Eat(inja); //りんご型オブジェクトはEat関数を持たないためエラー



オブジェクト指向の解説書に「変数と関数がまとめられる」と言われてピンとこないことが多かったので書いてみた
変数を名詞、関数を動詞として置き換えて
「人」と「りんご」と「食べる」が関連なくバラバラにあるよりも
「食べる」行動は「人」にあることと関連した方が良いだろうと考えてみた