オブジェクト指向を復習するにあたって参考にした、慶應義塾大学の小野雅裕元助教授による足立研セミナーがとてもわかりやすかったので要点を自分なりにまとめたいと思います。
オブジェクト指向
そもそもなぜオブジェクト指向が重要なのか?
- 人気のプロジェクト言語はほとんどがオブジェクト指向の概念を取り入れているから
- 大きなプロジェクトや複数人でプロジェクトを動かすときにとても便利だから
クラスとインスタンス
オブジェクト=全てのもの
e.g.)僕の車、小野先生のネクタイ、新庄剛志の歯、りんご、便座
クラス=もののカテゴリー
インスタンス=クラスの下に入るもの
e.g.)クラス=犬 インスタンス=チコちゃん(小野先生の犬)、白戸次郎、パトラッシュ
e.g.)クラス=人 インスタンス=小野雅裕、バラクオバマ、アホの坂田
カプセル化
アクセス修飾子
-
public
外部からでも参照可能 -
protected
同一クラス、同一パッケージ、サブクラスからの参照可能 -
default
同一クラス、同一パッケージからの参照可能 -
private
同一クラスからの参照可能
つまり書き換えられたくない度合いによってアクセス修飾子を使い分けることが必要。
必要な情報を隠蔽し、メソッドを通してしか情報にアクセスさせないことをカプセル化と言います。
クラスの継承
クラスの階層構造
スーパークラス
e.g.)
Animal
サブクラス
e.g.)
- Dog
- Cat
インスタンス
e.g.)
1-1. チコちゃん
1-2. 白戸次郎
1-3. パトラッシュ
2-1. ミーミ
2-2. ひこにゃん
2-3. ミャロメ
class Dog
とclass Cat
のスーパークラスとしてclass Animal
を宣言したいときはextends
を用いて、
class Animal {
~~
}
class Dog extends Animal {
~~
}
class Cat extends Animal {
~~
}
とするとそれぞれのクラスが紐づけられます。
なぜこのような階層構造が必要か
class Animal
では以下のような特徴があるとします。
- 目が2つ
- 尻尾が1つ
- 足が4本
これらの情報は共通項としてサブクラスにも適応することができます。
しかしclass Dog
ではさらにclass Cat
にはない以下の特徴を追加するとします。 - 人懐っこい
- ワンッと鳴く
逆にclass Cat
にはclass Dog
にはない以下の特徴を追加します。 - 高くジャンプする
- ニャーと鳴く
階層構造を持たせることでこのような共通項目とするものと独自の項目とするもので使い分け、扱いやすくすることが可能になります。
ポリモーフィズムとオーバーライド
ポリモーフィズムとは一定の型を用意し、その型の中に入る引数によって異なる動作を実装する方法のことです。
上記の例を使えば、
class Animal {
~~
public abstract void poke (); //pokeの中身はabstractをつけることで空になっている
~~
}
class Dog {
~~
@Override //abstractをつけたスーパークラスの抽象メソッドをこちらのサブクラスで実装
public void poke (){
makeSound(); //ワンッと鳴く
say(); //何かしらメッセージを入れる
}
}
まとめ
以上、今回は慶應義塾大学の小野雅裕元助教授による講義『足立研セミナー』を、YouTubeを参照しながらまとめました。