はじめに
この記事は、オブジェクト指向でなぜつくるのかという著書と、黒本著者が教える やさしくない!? JavaのYoutubeチャンネルを見たもの、私の経験に基づく理解を整理したいと思って執筆しました。
上記はとてもわかりやすかったので、是非ご覧になってください。
あと、以下の説明で出てくるサンプルコードはすべてJavaです。
なるべくJava特有の書き方は避けますが、ご了承ください。
対象
オブジェクト指向言語のプログラミング経験がある人
でもオブジェクト指向がよくわからない人
オブジェクト指向とは
プログラミングや設計に留まらず、深い話になると哲学にまで発展するような難しいもののようです。
では私のような、ただのプログラマーが哲学まで理解する必要があるのかというと、それはNOです。
プログラミングする上では、
オブジェクト指向=プログラムを意味のある単位で分割すること
ということで考えておけば私は良いと思います。
ちなみに
「はじめに」で登場した著書とチャンネルでも仰っていますが、オブジェクト指向やプログラミングを例え話で説明される機会が多いと思います。
よくある説明で、オブジェクト指向は現実世界を表現したものだ!というのがありますが、それが正確な説明であるかどうかは私には判断付きませんが、少なくとも私には理解しづらいです。
確かに現実世界に表現が似ているものはありますが、現実世界とプログラミング、結び付けるには想像力が豊かでないと難しい気がします。
ということで、プログラムベースの話をしていけたらと思います。
なぜオブジェクト指向を使うのか
例えば、以下のようなコードがあったとします。
public class Main {
public static void main(String[] args) throws Exception {
String name = "Taro";
System.out.println(name);
}
}
「Taro」というnameがコンソールに表示されるだけのプログラムです。
ここに、weight情報を追加してみましょう。
public class Main {
public static void main(String[] args) throws Exception {
String name = "Taro";
String weight = "70kg";
System.out.println(name + "の体重は" + weight);
}
}
体重がString型...?という突っ込みはおいといて、「Taroの体重は70kg」と出力されます。
ここにJiroを追加します。
public class Main {
public static void main(String[] args) throws Exception {
String name1 = "Taro";
String weight1 = "70kg";
System.out.println(name1 + "の体重は" + weight1);
String name2 = "Jiro";
String weight2 = "15kg";
System.out.println(name2 + "の体重は" + weight2);
}
}
name1とweight1、name2とweight2でそれぞれセットなのですが、この書き方だと変数名でなんとなくそれっぽいだけで、プログラムとしてはセットが担保されていません。
ここでクラスを定義してみます。
public class Main {
public static class Human {
public String name;
public String weight;
public Human(String name, String weight) {
this.name = name;
this.weight = weight;
}
public void print() {
System.out.println(this.name + "の体重は" + this.weight);
}
}
public static void main(String[] args) throws Exception {
Human taro = new Human("taro", "70kg");
taro.print();
Human jiro = new Human("jiro", "15kg");
jiro.print();
}
}
実行結果は変わりませんし、コード量は増えました。
ですが、nameとweightがセットになりました。
このように関連するデータと処理を一つのまとまりにすること、これがオブジェクト指向の根本的なところであり、それによって保守性が上がる(プログラムがメンテナンスしやすくなる)ことが、オブジェクト指向を使う大きな理由だと思います。
ほかにも
他にもオブジェクト指向には様々なメリットがあります。
上記の例ではコード量が増えていましたが、減る場合もありますし、複数人で分担して開発を進めるうえで大事な仕組みも備わっています。
オブジェクト指向の様々な仕組み
ここではキーワードだけ羅列します。
- クラス
- カプセル化
- データ隠蔽
- 抽象化
- 情報隠蔽
- ポリモーフィズム
- 継承
もし次回があれば、上記内容を掘り下げた記事を書きたいなと思います。