28. オブジェクト指向とクラス

オブジェクト指向

オブジェクト指向とは

オブジェクトが基本

世の中で起きているさまざまな特徴や機能をまとめた実体をオブジェクトといい、プログラムでデータ操作するための基礎概念です。オブジェクトに「特徴」や「動作」などを持たせてプログラミングする手法をオブジェクト指向プログラミング(OOP) といいます。

オブジェクトで役割分担する

アプリ開発では最初に「どんなオブジェクトが登場するか」を考えることが重要です。ゲームで例えると「キャラクター」「アイテム」「マップ」といったオブジェクトが必要で、それぞれ役割分担をします。オブジェクトの役割が決まったらプログラムファイルに定義していきます。

オブジェクト 役割
キャラクター プレイヤーが主人公として操作する。名前や能力を設定してモンスターとバトルをする。
アイテム 武器や道具などを持つことでキャラクターを拡張する。ショップで売買もできる。
マップ 地形、建物などで構成され、キャラクターが移動する。モンスターが登場する。

オブジェクトの定義

まず、登場するオブジェクトにどういった「特徴」や「動作」があるかを定義します。ゲームのキャラクターオブジェクトの場合を考えてみましょう。

キャラクターオブジェクトの例

キャラクターは「名前」「職業」「体力」などの「特徴」に値を設定して定義できます。

特徴
項目 英語
キャラクター名 name アリス
職業 job 魔法使い
体力 hp 50
動作

「歩く」「話す」「攻撃する」などは、キャラクターの特徴にあわせて「動作」するように定義できます。

項目 メソッド 備考
歩く walk スピード、方向などでキャラクターを移動する
話す talk 会話の内容、相手などを指定し、イベントを発生させる
攻撃する attack キャラクターの能力、武器などから、相手に攻撃する

クラスの基本

クラスとは

クラスは一般的に実体をまとめて定義する概念です。プログラミングでのクラスはプロパティやメソッドなどの集合体で、クラスファイルを作成して定義します。

クラス定義

プログラミングのクラス定義にはルールがあります。

  • classの前に修飾子を定義
  • classの後にクラス名を定義
  • { } (中括弧)の中にメンバ変数やメソッドを定義
修飾子 class クラス名 {

}

クラス名はパスカルケース

クラスのファイル名は、先頭と区切りの文字を大文字にする「パスカルケース」が一般的です。

//動物
class Animal {

}

//ユーザ
class User {

}

//購入商品クラス
class UserItem {

}

インスタンス

クラスから作成されたオブジェクトのことをインスタンスといい、インスタンスはオブジェクトの1つです。よって、クラス自体はオブジェクトではありません。

  • オブジェクト:さまざまな実体の概念
  • インスタンス:クラスで生成されたオブジェクト

インスタンスの生成

クラスファイルを「new」することでインスタンスを生成します。

インスタンス = new クラス名();

クラスの定義

ファイル構成

/
├── animal_action.php
└── models
    └── Animal.php

クラスファイルの作成

「models」フォルダに「Animal.php」ファイルを作成して、クラスを定義します。

Animal.php
public class Animal {

}

メインファイルの作成

「animal_action.php」を作成し「models/Animal.php」ファイルを読み込みます。

animal_action.php
require_once "models/Animal.php";

Characterクラスのインスタンスを生成します。

main.java
require_once "models/Animal.php";

$animal = new Animal();

var_dump($animal);
結果

クラスのインスタンスが表示されました。

object(Animal)#1 (0) { }

演習

問題1

つぎのプログラミングの定義は、オブジェクト指向で何といいますか?

public class Animal() {

}

1)クラス

2)インスタンス

3)フィールド(プロパティ)

4)メソッド

問題2

つぎのプログラミングで、オブジェクト指向では「$dog」のことを何といいますか?

$dog = new Animal();

1)クラス

2)インスタンス

3)フィールド(プロパティ)

4)メソッド

問題3

つぎの表の内容は、オブジェクト指向で何といいますか?

項目 英語
種別 type
名前 name タロー
鳴き声 crying わん!

1)クラス

2)インスタンス

3)フィールド(プロパティ)

4)メソッド

問題4

つぎの表の内容は、オブジェクト指向で何といいますか?

項目 英語 備考
走る run スピード、方向など
鳴く cry 鳴き声、大きさなど

1)クラス

2)インスタンス

3)フィールド(プロパティ)

4)メソッド

PHP超入門