![見出し画像](https://assets.st-note.com/production/uploads/images/132026009/rectangle_large_type_2_1935cefb3bafd56205a192a14ed179ba.jpeg?width=1200)
今日の学び
なぜ、あなたはJavaでオブジェクト指向開発ができないのか → lesson3終わり!
lesson3
オブジェクト指向の根底にある考え方は?
(自分の考え)問題をクラスという単位に分割して、役割ごとに問題を切り分けるという考え方
(書籍) 問題をクラスという単位に分割して、クラスごとの役割に注目することで、フローチャートのように全体像を常に考える必要がなくなった。
オブジェクトの状態を管理するためには、、
(自分の考え)オブジェクトごとに属性を持たせる
(書籍) オブジェクト固有の性質である属性を使う。属性がどのような状態であるかを、インスタンスごとに持たせておく。
属性を持たせると、何が嬉しいのか?
(自分の考え)オブジェクト自身が情報を管理することが出来るから、他のクラスが情報を管理する必要がなくなる
(書籍) 自分(オブジェクト自身)に関する情報は自分で管理させることができる
逆を言えば、あるオブジェクトの情報はそのオブジェクトしか知らない。
オブジェクトの内部の状態を隠し、他のオブジェクトからは直接知ることができないようにすることを、「カプセル化」と呼ぶ。
privateとpublicの修飾子があるのはなぜ?
(自分の考え) 他のオブジェクトから呼び出されたくないメンバがあった時に、それを区別するため
(書籍)
クラスを定義しただけではプログラムが動かないのはなぜ?
(自分の考え) クラスは、あくまで役割の定義をしただけだから
(書籍) クラスはあくまでの役割の定義であり、実際に動作するのは登場人物、つまりインスタンスであるから。
属性が、プログラム上のメンバ変数(フィールド)に当たるのか
java
static (「静的な」意味を示す)
静的な:変わらないもの、クラス間で共有されるものを指す
クラス名.変数名のように、クラスをインスタンス化しなくても、呼び出すことができる
なぜ?
クラス間で共有されるものであるから。
final
クラス:そのクラスは継承できない
メソッド:オーバーライド禁止
変数:値を再代入することができない
getter
フィールド(メンバ変数)の値を取り出すだけのメソッド
setter
引数を受け取って、フィールドの値に代入するためのメソッド
コンストラクは返り値を持たないので、voidをつける必要がない。
一旦、疑問文で仮説を立てておいて、学習が終わった後にもう一度振り返って答えてみると、答えられないものが多いことに気づいた!
まずは、自分の考えを書いてみて、その後書籍に戻って考え方を軌道修正するという方法はあってそう!引き続きやってみよ
実際に動作するのは登場人物、つまりインスタンスであるからという考え方は重要だと感じた!あくまでクラスは役割の定義なので、定義しただけでは、現実世界では動かない。実態を生み出して、その実態に定義した役割を与えることで、動くようになっているので、オブジェクト指向でプログラムを動かす際には、インスタンスが必須っていうことになりそう!
この記事が気に入ったらサポートをしてみませんか?