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


オブジェクト向けプログラミング(OOP)
  • オブジェクト向けプログラミング(Object-oriented Programming)は、プロセス向けプログラミングとは異なり、データと機能を組み合わせて
  • を処理する
  • プロパティとメソッドは、JavaScriptに埋め込まれたobjectとは異なり、クラス(Class)
  • を使用するオブジェクトの概念です.
  • モデルの青写真(Class)を作成し、青写真に基づいてオブジェクト(Instace)のプログラミングモード
  • を作成する.
    Class
    class Car {
      // 속성
      constructor(brand, name, color) {
        this.brand = brand;	
        this.name = name;
        this.color = color;
      }
      // 메소드
      refuel() {
      }
      
      drive() {
      }
    }   
    クラスのデフォルトルールを作成します.通常クラスは大文字と一般名詞で構成されます.
    オブジェクト向けプログラミングでは、コンストラクション関数(constructor)と呼ばれ、インスタンスの作成時に実行されるコードコンストラクション関数は戻り値を作成しません.thisはインスタンスオブジェクトを表します
    Instance
    let avante = new Car('hyundai', 'avante', 'white');
    
    let sonata = new Car('hyundai', 'sonata', 'gray');
    
    let grandeur = new Car('hyundai', 'grandeur', 'black');
    インスタンスを作成すると、newキーワードを使用してコンストラクション関数が直ちに実行され、変数にクラス設計に似た新しいオブジェクト、すなわちインスタンスが割り当てられます.
    各インスタンスにクラスの一意のプロパティとメソッドがあります.
    new Array() - MDN
    let fruits = new Array('사과', '바나나');
    
    console.log(fruits.length) // 2
    console.log(fruits[0])     // "사과"
    アレイの定義はArrayインスタンスの作成と同じです
    オブジェクト向けプログラミングの特徴
    1.カプセル化
    アトリビュートと機能を1つのオブジェクトにばらばらに結合
    分散結合は、コードの実行順序に従ってステップ別にコードを記述するのではなく、コードが表す実際の状況に従ってコードを組み合わせます.
    カプセル化はまた、内部データまたは内部挙動が外部に露出することを防止することができる隠匿化の特徴を有する.
    =>詳細実装またはデータを非表示にし、アクションのみを表示
    厳密なクラスはまた、属性の直接アクセスを阻止し、設定された関数(setter)と読み込まれた関数(getter)を完全に分離することもできる.
    2.抽象化
    抽象は内部実装が非常に複雑な概念であり,実際には露出した部分を簡単にする.
    =>インタフェースが簡略化され(interface)、クラス定義のメソッドとプロパティのみが定義されます.
    あまり機能が露出していないので、意外な使用変化を避けることができます.
    カプセル化のポイントがコードやデータの非表示である場合、抽象化のポイントは、クラスを使用する人が必要としない方法などを暴露するのではなく、機能を簡単な名前に定義することです.
    3.継承
    継承は子継承親のフィーチャーです
    =>派生クラス(派生クラス)基本クラス(ベースクラス)のフィーチャーを継承
    JavaScriptはextendsキーワードとsuperキーワードを使用して継承を実現
    4.多形性
    同じ方法でも異なる方法で実現できる
    OOPフィーチャーに関する利点

  • パッケージ化により、コードの複雑さを低減し、再利用性を向上

  • 抽象化は同様にコードを簡単にし,使用の簡素化による変化を最大限に低減することができる.

  • 継承も不要なコードを減らすことで再利用性を向上

  • 多形性を使用すると、if/else ifなどの条件文ではなく、同じ方法の異なるオブジェクト属性を作成できます.
  • Prototype
    JavaScriptはプロトタイプベースの言語であり、プロトタイプ(Prototype)はプロトタイプオブジェクトを表す
    =>継承メソッドと属性としてすべてのオブジェクトにプロトタイプオブジェクト(prototype object)があることを示すテンプレート
    Prototype chain( __proto__ )
    オブジェクト向けプログラミングの継承プロパティJavaScriptでプロトコルタイプチェーンとして実装__proto__では、親のプロトタイプ、または「親の親」のプロトタイプ(プロトタイプのアドレスがある)=>を参照できます.
    Prototype - MDN
    prototype/constructor/this
    prototypeconstructurithsコンセプトモデルの青写真を作成するときに使用されるプロトタイプオブジェクトインスタンスの初期化時に実行されるコンストラクション関数の実行時に、各役割ドメインで作成される一意の実行コンテキストでnewキーを使用してインスタンスを作成すると、そのインスタンスがこの値になります.