[JS] Object-Oriented Progrmming


OOPとは?


Object-Oriented Programmingの略称で、オブジェクト向けプログラミングという意味です.
ここで,オブジェクト向けプログラミングは言語の属性ではなく,言語の方法論にすぎない.
オブジェクト向けの利点は,生産性が高く,コードの再利用性を最大限に高め,メンテナンスが容易であることである.

OOP特性


オブジェクト向けプログラミング(OOP)の特性は,パッケージ(パッケージ),継承(継承),抽象(抽象),集約(多形性)の4つである.

1.パッケージ(パッケージ)

const Car = function() {
 const someInstance = {};
 someInstance.position = 0;
 someInstance.move = function() {
   this.position++;
 }
 return someInstance;
}
const car = Car();
car.move();
console.log(car.position); // 1
前述したように、move関数someInstanceによります.positionの値は変更できますが、someInstanceに直接アクセスすることはできません.このようにカプセル化とは,外部から内部の情報を隠すことであり,関数で変数の値を勝手に変えることはできない.

2.継承(継承)

const Car = function(position) {
  this.position = position;
}

Car.prototype.move = function() {
  this.position++;
}

const car = new Car(1);
car.move();
console.log(car.position); // 2
JavaScriptでは継承された概念はありません.しかし、原典方式で継承を実現することができる.そしてes 6にはclassというやつが新しく現れた.このクラスのキーワードインプリメンテーションを使用すると、継承を簡単に実現できます.

3.抽象(抽象)

const Car = function() {
 const someInstance = {};
 someInstance.position = 0;
 someInstance.move = function() {
   this.position++;
 }
 return someInstance;
}
const car = Car();
car.move();
car.move();
car.move();
console.log(car.position); // 3
カプセル化のような例であるが,抽象化は移動時に位置がどのように1増加するか分からない.このように,オブジェクトを作成する際には,複雑な原理や駆動方式をユーザから抽象化する操作が重要であり,この操作を抽象と呼ぶ.

4.重合状態(多形性)


多形性とは、1つの方法またはクラスが存在する場合に、複数の方法で動作することを意味する.
親を大まかに構成し、サブクラスに変換して書き込みスペースを残すことで、既存のソースコードを柔軟に再利用でき、より簡潔で、よりきれいにコードを追加できます.

JavaScriptのclass


classは、構造化モデルを作成し、そのモデルに基づいてインスタンスを作成するために使用されます.

classを宣言する4つの方法


1.Functional

const Car = function() {
  const someInstance = {};
  someInstance.position = 0;
  someInstance.move = function() {
    this.position++;
  }
  return someInstance;
}
functional方式はその名の通り関数を利用する方式である.

2. Functional shared

const extends = function(to, form) {
  for(const key in from){
   to[key] = from[key];
  }
}

const someMethods = {};
someMethods.move = function() {
  this.position++;
}

const Car = function(position) {
  const someInstance = {
    position: position
  }
  extends(someInstance, someMethods);
  return someInstance;
}
functional sharedメソッドは、上記の例のsomeMethodsというオブジェクト内のメソッドのメモリアドレスのみを参照するため、メモリ効率が向上する.

3. Prototypal

const someMethods = {};
someMethods.move = function() {
  this.position++;
}

const Car = function(position) {
  const someInstance = object.create(someMethods);
  someInstance.position = position;
  return someInstance;
Prototyal方式は機能共有方式に似ている.ただしobjectcreate()を使用して、特定のオブジェクトをプロトタイプとして作成します.

4. Pseudoclassical

const Car = function(position) {
  this.position = position;
}

Car.protptype.move = function() {
  this.position++;
}
擬似論理方式はプロトタイプによって追加される方式である.
この方法を使用する場合、newキーワードを使用して関数を作成および使用することに注意してください.