見出し画像

オブジェクト指向

オブジェクト指向3大要素
①カプセル化
②継承
③ポリモフィズム(多様性)
・開発の効率が良くなる
・部品の再利用性が上がる
・柔軟性・保守性が上がる

「データ」と「操作」をまとめてオブジェクトとして管理するプログラミングの考え方をオブジェクト指向という。
C++やPythonはオブジェクト指向が使える言語である。
オブジェクトの雛形をクラス


なぜ、クラスやメソッドに分けるのか?

メリット
・クラスごとに役割分担して作れる
 大規模システムでも複数人で一気に作れる
・短くまとまったソースコードは読みやすい&わかりやすい&テストが楽
・一度書いたソースコードを様々なシーンで何度も使い回すことが可能
・使うクラスだけをインスタンス化することで、メモリ節約&処理スピード UP
・どのプログラムがどこに書かれているか、誰がいつどのような背景で書いたかなど、情報の整理がしやすい
・変更が必要なクラスやメソッドのみを修正すれば良い(メンテナンス性)

どのようにクラス分けするのか?
→1つ1つのクラスを、役割を持ったモノ(Object)として扱う
→オブジェクト指向

どのようにクラスわけするのか?
→役割を持ったモノごとに分ける
→モノとモノに関連性を持たせることで、システムを構築

モノにはどういった情報があるのか?
機能:何ができるか?
・加速する(acceleratorメソッド)
・減速する(brakeメソッド)
・ライトが光る(rightOnメソッド)
➡️メソッド

属性:どんなものか?
・車種名:carModel(String型)
・オーナー:owner(String型)
・塗装色:color(String型)
・現在のスピード:speed(int型)
➡️フィールド(変数)

クラスはモノの設計図
クラスブロック直下で宣言された変数
=「フィールド」
そのクラス(モノ)の情報を表す

class Sample2_01_1_car {
   
   //---フィールド(クラス直下で定義された変数)----------------
   
   String  carModel = "クーペ" ;  //車種名
   String  owner    = "モコ"   ;  //オーナー
   String  color    = "RED"    ;  //塗装色
   int     speed    = 0        ;  //現在の速度
   boolean right    = false    ;  //ライト(true:点灯/false:消灯)
   
   //---メソッド------------------------------------------------
   
   //acceleratorメソッド(現在の速度を1km/h上げる)
   void accelerator(){
      speed++ ;
      System.out.println("(少し速くなった)") ;
   }
   
   //brakeメソッド(現在の速度を1km/h下げる)
   void brake(){
      speed-- ;
      System.out.println("(少し遅くなった)") ;
   }
   
   //rightOnメソッド(ライトを点灯させる)
   void rightOn(){
      right = true ;
      System.out.println("(周囲が明るくなった)") ;
   }
   
   //rightOffメソッド(ライトを消灯する)
   void rightOff(){
      right = false ;
      System.out.println("(周囲が暗くなった)") ;
   }
   //klaxonメソッド(クラクションを鳴らす)
   void klaxon(){
      System.out.println("「プップ~~~~~~~~~~ッ」") ;
   }
}

≪オブジェクト指向とは≫
□オブジェクト指向は『ある役割を持ったモノ』ごとにクラスを分割
し、モノとモノとの関係性を定義していくことでシステムを作り上げ
ようとするシステム構成の考え方のことです。
モノ(クラス)ごとに分業して一気に開発を進めることができたり、
情報の管理やメンテンナンス性に優れているという点から、大規模な
システム開発で特に効果を発揮します。
Javaは「オブジェクト指向言語」と呼ばれ、オブジェクト指向で
システムを作るための様々な機能を提供しています。
□モノを表現するためには2つの情報『属性(どのようなものか)』
『機能(何ができるか)』が必要になります。
□これまでクラスブロック直下にはメソッドしか定義してきませんでし
たが、実は変数も定義することが可能です。
このクラスブロック直下で定義された変数のことをフィールドと言い、
そのクラス(=モノ全体の設計図)の『属性』を表します。
また、メソッドはそのクラスの『機能』を表します。
□メソッドとフィールドを合わせてメンバと言います。


≪インスタンス≫
□クラスはあくまでプログラムの設計図であるため、クラスそれ自身
では命令を受け付けたり動作することはできません。
インポートは設計図の情報をメモリ上に置くだけの処理なので、
これだけではまだそのクラスの機能(メソッド)を使える状態には
なっていないことになります。
外部クラスの属性(フィールド)や機能(メソッド)を利用するため
には、そのクラス(設計図)を元に生成した、命令を受け付け実際に
動作することのできる実体が必要になります。
この実体のことをインスタンスと言い、クラスを元にインスタンスを
生成することをインスタンス化と言います。
□インスタンス化は以下のように記述します。
クラス名 インスタンス名 = new クラス名() ;
※厳密な情報ではないのですが、現時点ではここまでの認識を持ちましょう。
□インスタンスの実体はフィールドやメソッドのメモリ上の場所情報を
管理する参照型変数であり、クラス名を型として扱います。
□以下のように記述すると生成したインスタンスのフィールドを参照
したりメソッドを実行したりすることができます。
インスタンス名. フィールド変数名
インスタンス名. メソッド名(引数)

□1つのクラスからいくらでもインスタンス化はは可能であり、
インスタンス名さえ違っていればそれらは完全に独立したモノとして
扱うことができます。


この記事が気に入ったらサポートをしてみませんか?