オブジェクト指向
オブジェクト指向を言葉で説明するのは非常に難しく、色々なサイトで様々な説明をされていますが、簡単に行ってしまえば、オブジェクトとはモノという意味で、何でも入れられる箱という考え方もされます。
オブジェクトというデータの入れ物があり、その中には様々なデータが入ります。
オブジェクトにはどんなデータも入れることができます。
数字やテキスト、配列はもちろん、メソッドなどの機能も入れることができます。
const userData = {
name:'taro',
age:30,
}
クラスとは
クラスの概念は多くのオブジェクト指向のプログラム言語で共通で使える概念なので、覚えてしまえば多くの言語で応用が可能です。
クラスは、簡単に言えばモノの設計図です。
オブジェクトはモノと言いましたが、クラスはモノの設計図という考え方です。
オブジェクト = モノ
クラス = モノの設計図
class Users {
constructor(name, age) {
this.name = name;
this.age = age;
}
text(){
return '私の名前は'+this.name+'です。今年で'+this.age+'歳になります。';
}
}
インスタンス
クラス(設計図)を元に実際にオブジェクト(モノ)を生み出すことをインスタンス化といいます。
newを使ってクラスを呼び出すことでインスタンス化を行います。
少しややこしいですが、一旦下のようなやり方で実際のものを作り、「user」という変数に格納すると思ってください。
const user = new Users('太郎', 22);
クラスとインスタンスの違い
クラスとインスタンスの違いは、よく料理に例えられるのですが、クラスはレシピでインスタンスは料理そのものを指します。
チャーハンのレシピがクラスであれば、レシピを元につくられたチャーハンがインスタンスのことです。
コンストラクタについて
コンストラクタとは、クラスのインスタンスを作るときに必ず実行される処理です。
よく使われるのは引数をクラスの中の変数やオブジェクトに代入したりするのに使います。
また、クラスの中で、メソッドを複数定義して、それを呼び出しても同じことができます。
インスタンス化するときに定義した引数はコンストラクタで受け取ることができます。
class Users {
constructor(name, age) {
this.name = name;
this.age = age;
}
text(){
return '私の名前は'+this.name+'です。今年で'+this.age+'歳になります。';
}
}
var user = new Users('太郎', 22);
console.log( user.name );
console.log( user.age );
console.log( user.text());
//結果
//太郎
//22
//私の名前は太郎です。今年で22歳になります。
クラスの中のthisとは
クラスの中で使われている「this」とは何か。
この場合のthisはクラスそのものを指します。
上記のコンストラクタで、「this.name」というクラスの変数の中にデータを入れて、クラス内で使うことができるようになります。
クラスを使うメリット
クラスを使うメリットとしては、いつでも何回でも再利用が可能ということです。
また、クラスはコンストラクタ以外のメソッドは、メソッド自体を呼び出さないと起動しないため、使いたい動きと使いたくない動きを分けて使うことができます。
クラスの作り方
javascriptを例にクラスの作り方を説明します。
基本的にはPHPや他の言語でもクラスの構成はあまり変わりません。
クラスの宣言
クラスを使用するときに気をつけることは、必ずクラスを使用する前に、クラス宣言を行うことが必要となります。
class Users {
// クラスの内容
}
コンストラクタの定義
コンストラクタは引数を取ることができます。
引数はインスタンス化するときに渡される引数が、そのまま引き渡されます。
それをクラス内のオブジェクトに格納することができます。
ここではnameとageという変数を用意してそれぞれ格納します。
その際にthisをつけるのを忘れないようにしましょう。
thisは「クラス自体」を参照します。
つまりこのクラスの中の変数nameとageを示し、このクラス内ではどこでも使うことができます。
class Users {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
メソッドの定義
次にテキストを返すメソッドを定義します。
コンストラクタで定義した変数を使って自己紹介の文章を作成して、returnで返します。
これでインスタンス化したオブジェクトから、このtextというメソッドを呼び出して使うことができます。
使うときは「インスタンスオブジェクト名.メソッド名()」の形で使いましょう。
class Users {
constructor(name, age) {
this.name = name;
this.age = age;
}
text(){
return '私の名前は'+this.name+'です。今年で'+this.age+'歳になります。';
}
}