【Kotlin】オブジェクト指向(class)の使い方

Kotlinにおけるオブジェクト指向の使い方についてサンプルコード付きでまとめました。

## 【はじめに】オブジェクト指向プログラミングとは

オブジェクト指向とは、関連するデータのやそれに対する処理を「オブジェクト」と呼ばれる1つのまとまりで管理する考え方です。
この考え方に沿ってプログラミングすることを「オブジェクト指向」プログラミングといいます。

オブジェクト 関連するデータや処理を1つにまとめたモノ。
指向 ある方向・目的に向かうことです。(オブジェクト指向なら、オブジェクトの考え方に重きを置くこと)

例えば、パソコンをオブジェクトとして考えてみます。
コンピュータ内部のアルゴリズムや電気的な仕組みを理解しなくても、マウスやキーボードの使い方だけを知っていればパソコンを使うことができます。
「パソコン」というオブジェクトは、自身を動作させるための処理を知っています。
それを利用するためには、キーボードやマウスで指示すれば良いです。
このように「データ」と「操作するための処理(メソッド)」を組み合わせが「オブジェクト」です。

オブジェクト指向でプログラムを設計するメリット
1 大規模なプログラムを書きやすい
2 プログラムの柔軟性が高い(仕様変更・再利用しやすい)
3 綺麗に書けば理解しやすいプログラムを書ける
オブジェクト指向でプログラムを設計するデメリット
1 プログラム設計に時間が掛かりやすい
2 プログラムの処理時間が長くなる
3 綺麗に書かないと理解しにくいプログラムになる

一般的にオブジェクト指向プログラミングは大規模なプログラムを作る場合に向いているとされています。
逆に小規模なプログラムの場合は、関数型で設計するのが向いています。
難しいのはその境目をどこに置くかとなります。

用語 オブジェクト指向の用語概要
クラス オブジェクト指向プログラミングにおけるクラス (class)とは、オブジェクトの設計図です。オブジェクトがどのようなデータや操作(手続き)の集まりかを決める雛形(テンプレート)ともいえます。オブジェクトを作る際には、必ずクラス(設計図)を定義する必要があります。
インスタンス 実体という意味です。クラス(設計図)を元にして実際に作った物がインスタンス(実体)です。
メソッド(操作) オブジェクト自身に対する操作のことです。オブジェクトは「データ」と「手続き」から構成されており、手続き(method)の部分がメソッドに相当します。別名、メンバ関数とも呼ばれます。
プロパティ(属性) オブジェクト固有のデータです。オブジェクトの性質や設定に関する情報となります。
クラス変数 そのクラスの全てのインスタンスで共有される変数です。グローバル変数(ファイル内全体)のクラス版のようなものです。クラス変数は何度でも値を変更できます。また、クラス変数はクラスメソッド、インスタンスメソッド、クラス定義式の中でアクセス可能です。
インスタンス変数 オブジェクトのインスタンス(実体)がそれぞれに持っている変数です。オブジェクト内で値を保存しておくために利用されます。

オブジェクトは物、クラスはオブジェクトの設計図、インスタンスはオブジェクトの実体です。
車で例えると以下のようになります。

オブジェクト・クラス・インスタンスの違い(車の設計で例えると)
オブジェクト
クラス 車の設計図(どのようなパーツで構成されてどのように動くか記述されている)
インスタンス 完成車(設計図を元に実際に作って完成した車)
詳細ページ
1 オブジェクト指向プログラミングとは(概念・対応言語など)
2 オブジェクト指向のメリット・デメリット
3 クラス・インスタンスとは?意味や違いを解説
4 メソッド・プロパティとは?意味、違い、使い分け
5 クラス変数・インスタンス変数とは?意味、違い、使い分け

## 【Kotlin】クラスの定義

Kotlinでは、以下のように「class」を使用してクラスを定義します。

class クラス名() {

}

## 【Kotlin】プライマリ・コンストラクタの定義

プライマリ・コンストラクタとは、プロパティを初期化できるものです。
プライマリ・コンストラクタは、クラス名の後にパラメータを記述して定義します。
Kotlinでは、以下のように「class」を使用してクラスを定義します。

class クラス名(変数名 : 型名){

}

fun main(args : Array) {
    val インスタンス変数 = クラス名(値)
}

定義したパラメータ(変数)はクラスのプロパティとして定義されます。
インスタンス生成時に指定した値で初期化されます。

関連記事
1 【Kotlin入門】使い方、アプリ開発、サンプル集

コメント