18. オブジェクト指向

オブジェクト指向

オブジェクト指向とは

オブジェクトが基本

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

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

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

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

オブジェクトの定義

キャラクターモデル

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

特徴

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

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

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

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

クラスの基本

クラスとは

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

クラス定義

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

  • class修飾子を定義
  • classの後にクラス名を定義
  • : で区切る
  • インデントでプロパティやメソッド定義
class クラス名:
    # プロパティ
    # メソッド

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

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

# 動物
Animal

# ユーザ
User

# 購入商品クラス
UserItem

インスタンス

クラスから作成されたオブジェクトのことをインスタンスといいます。クラス自体はオブジェクトではなく、インスタンスが生成されたはじめてオブジェクトになります。

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

インスタンスの生成

インスタンスは、クラス名に () をつけて生成します。

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

クラスの定義

ファイル構成

samples
    ├── createPerson.py
    └── Person.py

Personクラス

「Person.py」を作成し、クラスを定義します。

Person.py
class Person:
    name = "東京 太郎"

インスタンス生成

Characterインスタンス「man」を生成し、コンソール表示します。

createPerson.py
from Person import Person

man = Person()
print(man.name)

演習

問題1

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

class Animal:
  1. クラス
  2. インスタンス
  3. フィールド(プロパティ)
  4. メソッド

問題2

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

dog = Animal()
  1. クラス
  2. インスタンス
  3. フィールド(プロパティ)
  4. メソッド

問題3

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

項目 英語
種別 type
名前 name タロー
鳴き声 crying わん!
  1. クラス
  2. インスタンス
  3. フィールド(プロパティ)
  4. メソッド

問題4

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

項目 英語 備考
走る run スピード、方向など
鳴く cry 鳴き声、大きさなど
  1. クラス
  2. インスタンス
  3. フィールド(プロパティ)
  4. メソッド

Python超入門