JavaScript:オブジェクト向けプログラミング(OOP)
15647 ワード
## INTRO
オブジェクト向けプログラミング(Object-oriented Programming,OOP)は、コンピュータプログラミングの一種であり、コンピュータプログラミングを命令リストと見なす観点から、コンピュータプログラミングを複数の独立したユニット、すなわち「オブジェクト」の集合と理解する. -wikipedia
オブジェクト向けプログラミングは現実世界を見ているようなものです.現実そのものが独立したオブジェクトの集合であるからだ.この時、国という物体は机の前に座って、ノートのキーボードをたたいていた.私たちの目の中のすべての存在は対象を意味します.そして私たちはその相手とインタラクティブに生活しています.
前にINTROで述べたように、初期のコンピュータプログラミングのモデルは、プログラムを命令セットと見なすプログラム向けのプログラミングである.プログラムは機能を実現し、結果を生み出すだけであることが重要であると考えられている.このプログラミング方法は,プログラムが比較的簡単な機能を実行する際に大きな問題ではない.しかし,プログラム実装の機能が複雑になるにつれてコードが長くなり,多くの開発者がコードを維持できないという葛藤が生じている.
開発者は、コードをより簡単に管理する方法を考え始めました.これにより,開発者の焦点は機能からデータに移行する.データの処理方法を変えることで、コードの重複を減らすことができると思います.そこでオブジェクトと呼ばれるデータ処理方式が現れ,プログラム向けのプログラミングからオブジェクト向けのプログラミングにモデルが移行する.
オブジェクトのターゲットは、任意のデータ型です.しかし、大きく分けて、属性を表すデータと行為を表すデータの2種類があります.
プロパティは、オブジェクトのステータスを表します.たとえば、自動車というオブジェクトがあるとします.自動車の色、速度、走行距離などは、自動車という対象の状態を反映することができる.
行為は、その名の通り、客体ができる動作である.次に自動車の例として、出発、停止、加速、減速などが自動車という対象の行為といえる.
この概念を実際のプログラミングに導入すると,属性はオブジェクトの変数(オブジェクト−プロシージャ)に対応し,動作は関数(オブジェクト−メソッド)に対応すると考えられる.
前述したように,オブジェクト内のデータはプログラムと方法として存在し,コンポーネントのようにデータを用い,属性と挙動(方法)の組合せによりプログラムの機能を地から実現することができる.オブジェクト向けのプログラミングでは、すべてのデータが何らかのオブジェクトの形で存在することを知っています.このようにして、プログラミングは小さなオブジェクトでより大きなオブジェクトを作成する行為であることがわかります.小単位プロパティオブジェクトは、メソッドによって動作(機能)し、これらのインタラクションによってプログラムを作成できます.たとえば、複数のオブジェクトが組み合わされて部品のように動作し、部品が集まって完成品になるプログラムのメカニズムです.
オブジェクト向けプログラミングでは、特定のオブジェクトを作成するための変数とメソッドを定義するフレームワークで、オブジェクトのステータス(メンバー変数)とメソッド(関数)を定義します. -wikipedia
上記の定義を簡単に書く場合は、クラスを特定のオブジェクトを簡単に作成するために作成されたメニュー言語と見なすことができます.前述の例では、自動車の属性には、色、速度、走行距離などがある.例では、自動車は赤色であり、速度は100 km/h、走行距離は250 km/hである.しかし、どの車なのかによっては、色が黄色だったり、青だったりします.このように、自動車というオブジェクトの色の値はいろいろありますが、すべての自動車には色の属性があります.プログラミングの観点から、クラス内の変数に値を指定すると、他のオブジェクトと区別される一意のオブジェクトを作成できます.
では、オブジェクトの作成方法について説明します.JavaScriptにクラスが現れる前に、4種類の宣言方式があります.前述したように、クラスはオブジェクトのフレームワークを作成するような役割を果たします.このフレームワークで作成されたレプリカなどのオブジェクトをインスタンスと呼びます.
たとえば、Carという名前のオブジェクトを複数作成しているとします(前の例).便宜上、Carと呼ばれるオブジェクトにはそれぞれ属性と方法があります.ここでは、それぞれのCar 1、Car 2...宣言に変数を割り当てるのは面倒です.ここで、必要なのはInstantionです.Carというモデルファクトリを作成すると、類似のオブジェクトを簡単に作成できます.
:関数を使用する方法.
:同様に、関数の使用方法または属性またはメソッドをオブジェクトにマージする関数が追加されます.上記の方法とは異なり、第1の方法ではインスタンスに同じ方法を割り当てると、不要な冗長性が発生し、メモリが浪費されます.これとは異なり、2番目のオプションはインスタンスに必要なプロパティのみを付与し、メソッドを呼び出すときに必要なプロパティのアドレスのみを参照するため、メモリの使用効率が向上します.
:2番方式はコードとほぼ似ていますが、Objectです.Create()関数を使用して、extend関数を使用せずにオブジェクトを直接完了します.プロトタイプオブジェクトについては後述します.
:
オブジェクト向けプログラミング(Object-oriented Programming,OOP)は、コンピュータプログラミングの一種であり、コンピュータプログラミングを命令リストと見なす観点から、コンピュータプログラミングを複数の独立したユニット、すなわち「オブジェクト」の集合と理解する. -wikipedia
オブジェクト向けプログラミングは現実世界を見ているようなものです.現実そのものが独立したオブジェクトの集合であるからだ.この時、国という物体は机の前に座って、ノートのキーボードをたたいていた.私たちの目の中のすべての存在は対象を意味します.そして私たちはその相手とインタラクティブに生活しています.
プロセス向けプログラミング
前にINTROで述べたように、初期のコンピュータプログラミングのモデルは、プログラムを命令セットと見なすプログラム向けのプログラミングである.プログラムは機能を実現し、結果を生み出すだけであることが重要であると考えられている.このプログラミング方法は,プログラムが比較的簡単な機能を実行する際に大きな問題ではない.しかし,プログラム実装の機能が複雑になるにつれてコードが長くなり,多くの開発者がコードを維持できないという葛藤が生じている.
開発者は、コードをより簡単に管理する方法を考え始めました.これにより,開発者の焦点は機能からデータに移行する.データの処理方法を変えることで、コードの重複を減らすことができると思います.そこでオブジェクトと呼ばれるデータ処理方式が現れ,プログラム向けのプログラミングからオブジェクト向けのプログラミングにモデルが移行する.
オブジェクト=属性+動作
オブジェクトのターゲットは、任意のデータ型です.しかし、大きく分けて、属性を表すデータと行為を表すデータの2種類があります.
1)属性
プロパティは、オブジェクトのステータスを表します.たとえば、自動車というオブジェクトがあるとします.自動車の色、速度、走行距離などは、自動車という対象の状態を反映することができる.
2)行為
行為は、その名の通り、客体ができる動作である.次に自動車の例として、出発、停止、加速、減速などが自動車という対象の行為といえる.
この概念を実際のプログラミングに導入すると,属性はオブジェクトの変数(オブジェクト−プロシージャ)に対応し,動作は関数(オブジェクト−メソッド)に対応すると考えられる.
var car = {
color : red;
speed : 100;
distance : 250; // 상태를 나타낸다. -> 프로퍼티
start : function () {...};
stop : function () {...};
accel : function () {...};
break : function () {...} ; // 행동을 나타낸다. -> 메소드
}
オブジェクト向けプログラミング
前述したように,オブジェクト内のデータはプログラムと方法として存在し,コンポーネントのようにデータを用い,属性と挙動(方法)の組合せによりプログラムの機能を地から実現することができる.オブジェクト向けのプログラミングでは、すべてのデータが何らかのオブジェクトの形で存在することを知っています.このようにして、プログラミングは小さなオブジェクトでより大きなオブジェクトを作成する行為であることがわかります.小単位プロパティオブジェクトは、メソッドによって動作(機能)し、これらのインタラクションによってプログラムを作成できます.たとえば、複数のオブジェクトが組み合わされて部品のように動作し、部品が集まって完成品になるプログラムのメカニズムです.
カテゴリ
オブジェクト向けプログラミングでは、特定のオブジェクトを作成するための変数とメソッドを定義するフレームワークで、オブジェクトのステータス(メンバー変数)とメソッド(関数)を定義します. -wikipedia
上記の定義を簡単に書く場合は、クラスを特定のオブジェクトを簡単に作成するために作成されたメニュー言語と見なすことができます.前述の例では、自動車の属性には、色、速度、走行距離などがある.例では、自動車は赤色であり、速度は100 km/h、走行距離は250 km/hである.しかし、どの車なのかによっては、色が黄色だったり、青だったりします.このように、自動車というオブジェクトの色の値はいろいろありますが、すべての自動車には色の属性があります.プログラミングの観点から、クラス内の変数に値を指定すると、他のオブジェクトと区別される一意のオブジェクトを作成できます.
Instantiation(オブジェクトの作成方法)
では、オブジェクトの作成方法について説明します.JavaScriptにクラスが現れる前に、4種類の宣言方式があります.前述したように、クラスはオブジェクトのフレームワークを作成するような役割を果たします.このフレームワークで作成されたレプリカなどのオブジェクトをインスタンスと呼びます.
たとえば、Carという名前のオブジェクトを複数作成しているとします(前の例).便宜上、Carと呼ばれるオブジェクトにはそれぞれ属性と方法があります.ここでは、それぞれのCar 1、Car 2...宣言に変数を割り当てるのは面倒です.ここで、必要なのはInstantionです.Carというモデルファクトリを作成すると、類似のオブジェクトを簡単に作成できます.
1 ) Functional
:関数を使用する方法.
var car = function () {
var instance = {}; // 결과를 담을 객체를 만들어준다.
instance.position = 0; // position 속성을 할당.
instance.move = function () { // move 메서드 할당.
this.position += 1; // move가 실행되면 position이 1 상승한다.
}
return someInstance; // 만들어진 객체를 리턴한다.
}
var car1 = Car (5);
var car2 = Car (4);
2 ) Functional Shared
:同様に、関数の使用方法または属性またはメソッドをオブジェクトにマージする関数が追加されます.上記の方法とは異なり、第1の方法ではインスタンスに同じ方法を割り当てると、不要な冗長性が発生し、メモリが浪費されます.これとは異なり、2番目のオプションはインスタンスに必要なプロパティのみを付与し、メソッドを呼び出すときに必要なプロパティのアドレスのみを参照するため、メモリの使用効率が向上します.
var extend = function (to, from) { // 3-1. instance와 methods 객체를 합치는 extend 함수를 만든다.
for (var key in from) {
to[key] = from[key];
}
};
var methods = {}; // 2. 메소드를 담을 빈 객체를 생성한다. 예제에선 메소드가 하나이지만 여러 메소드를 담을 수도 있다.
methods.move = function () {
this.position += 1;
};
var Car = function (position) { // 1. Car 함수를 선언한다. 이번엔 instance 객체에 position 속성을 담아 선언했다.
var instance = {
position : position,
};
extend(instance, methods); // 3-2. Car 함수 내부에서 두 객체를 합쳐준다.
return instance; // 4. 만들어진 객체를 리턴한다.
};
var car1 = Car (5);
var car2 = Car (4);
3 ) Prototypal
:2番方式はコードとほぼ似ていますが、Objectです.Create()関数を使用して、extend関数を使用せずにオブジェクトを直接完了します.プロトタイプオブジェクトについては後述します.
var methods = {};
methods.move = function () {
this.position += 1;
};
var Car = function (position) {
var instance = Object.create(methods);
instance.position = position;
return instance;
};
var car1 = Car (5);
var car2 = Car (4);
4 ) Pseudoclassical
:
var Car = function (position) {
this.position = position;
};
Car.prototype.move = function () {
this.position += 1;
}
var car1 = new Car (5);
var car2 = new Car (4);
Reference
この問題について(JavaScript:オブジェクト向けプログラミング(OOP)), 我々は、より多くの情報をここで見つけました https://velog.io/@gwanuuoo/JavaScript-객체-지향-프로그래밍-OOPテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol