オブジェクト向けプログラミング(OOP)とは?


OOPとは?


オブジェクトの観点からプログラミングを行うことは,オブジェクトのコード分割に基づいて実現される設計方法論である.
オブジェクト間の有機関係で処理する.すなわち,アプリケーションを構成する要素をオブジェクトと見なし,それらを有機的に接続してプログラミングを行う.
オブジェクトが共有する属性の集合をクラスとして定義します.(これを抽象化といい、後で見てみましょう)

OOP特性


1.パッケージ


1つのオブジェクトの場合、これは、オブジェクトが特定の目的のために必要な変数またはメソッドを組み合わせることを意味します.
これは,あるクラスを使用する場合,内部動作がどのように動いているのかわからなくても,使用方法さえ分かれば使用できるクラス内部を隠す方法である.
クラスで使用される変数やメソッドを任意に非表示にすることができるため、必要以上の変数やメソッドがクラスに露出することを防止し、セキュリティを確保することができます.
たとえば、リモコンを使うには内部回路を知る必要はありません.
このようにクラス内のデータを非表示(Information Hiding)と呼び、public、private、protectedなどのアクセス制限を使用して必要な情報を非表示または露出します.

2.抽象


オブジェクトの共通の特徴を把握して定義した設計手法といえる.
たとえば、考えてみれば、リトリバー、ボストンテリー、マルティズなど、私たちが考えている様々な子犬の子犬という言葉が含まれているのではないでしょうか(つまり、拡張性があるので抽象化する必要があります).
羅列されたばかりの子犬たちの共通の要素や特徴を抽出する過程で抽象化され、要素を抽出するには、目、鼻、口、毛などに必要な部品がある.
泣いたり、走ったりする共通の行動、つまりどんな犬にも必要な方法を抽出します.
これらの過程は抽象化された過程である.
クラスは抽象的な概念であり、どのような特徴があるべきかを定義します.

3.継承性、再利用


継承は、既存の親に基づいて、新しいクラスと動作の概念を定義するのに役立ちます.
既存のクラスに機能をインポートして再使用したり、新しい機能を追加したりすることができます.
現実世界では親から多くのものを受け継いでおり、OOPでも可能です.OOPはこれを親、子として表す.
例えば、猫と犬の等級があると言ったら、猫と犬は哺乳類に相当します.
哺乳類は多くの属性を定義し、猫と子犬は哺乳類のこれらの属性を持っている.
つまり、哺乳類は猫や犬に属性を伝えます.これを継承といいます.

なぜ継承が必要なのですか?


これはコードの重複を解消するためです.
(コードの重複性が増えれば開発段階も疲れるが、メンテナンスコストも高くなる.)
哺乳類には複数の属性が定義されており、哺乳類に対応する類、例えば子犬類が必要な場合は哺乳類と継承関係が確立される.継承関係が確立されると、子オブジェクトの作成時に親の属性が自動的に継承されるため、子クラスで再定義する必要はありません.
(属性を再定義する必要がある場合もあり、以下の多形性で確認)

4.多形性


多形性は、拡張機能を継承したり変更したりすることで可能になります.すなわち,多形性は形態が同じで異なる機能を有することを意味する.(同じ動作ですが、結果が異なる場合は多型と考えられます.)
これにより、メンテナンスを容易にするために、コードの再利用とコード長の減少に役立ちます.
例えば、哺乳類類類類には울음という属性が定義されている.
犬類と猫類が哺乳類を継承すると、犬類と猫類にも울음の属性が自動的に追加されます.
しかし、子犬と猫の鳴き声は違います.
これは多形性と言える.

多機能性のメリット


同じ名前のプロパティを保持します.つまり、メソッド名を無駄にしないで、プロパティを使用するインタフェースを保持します.
たとえば、猫やライオンの鳴き声を呼び出すために、各オブジェクトでhow()メソッドを呼び出すことができます.
つまり、roraCat()とhowlion()でそれぞれ定義する必要はありません.
APIが多ければ多いほど複雑性が高くなるので多形性が役立ちます.

Overriding & Overloading


OOPでは,マルチフォーム概念を組み込む方法として,overridingとoverloadingの2つがある.
  • 過負荷
  • 親で作成する方法で、子で自分の好みに合わせて再定義して使用します.
  • 過負荷
  • は同じ名前の方法を使用するが、異なる方法には異なる用途があり、異なる成果物が異なる概念
  • を実現することを可能にする.
  • という名前のメソッドに異なるパラメータ数またはデータ型がある場合、オーバーロードが適用されます.
  • public class Mammalia{
      
      public String name;
      public int age;
      
      public void crying(){
        System.out.println("포유류의 울음소리");
      }
    }
    
    //Emplyee 상속
    public class Dog extends Mammalia{
      
      // overriding  
    	// Mammalia의 crying() 메소드 오버라이딩
      public void crying(){
        System.out.println("강아지의 울음소리");
      }
    }
    
    //Overloading
    public class Overloading{
      
      public void test(){
        System.out.println("출력 내용");
      }
      
      public void test(String data){
        System.out.println("출력 내용 다르게" + data);
      }
      
      public void test(int data){
        System.out.println("출력 내용 또 다르게" + data);
      }
    }

    リファレンス

  • https://velog.io/@hkoo 9329/OPOObject-oriented Programming-オブジェクト向けProgramming-
  • https://evan-moon.github.io/2019/08/24/what-is-object-oriented-programming/