16
© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. 第7回 オブジェクト指向シーズン2:プログラミング言語をやさしく覚えよう C++Builderの部

【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

  • Upload
    -

  • View
    59

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

© 2017 Embarcadero Technologies, Inc.

All rights reserved. Proprietary and confidential.

第7回

‟オブジェクト指向„

シーズン2:プログラミング言語をやさしく覚えよう

C++Builderの部

Page 2: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

2© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

Delphi / C++Builder Starter チュートリアルシリーズ

シーズン2 :2017年1月23日~ 3月27日全 9 回

時間 :毎週月曜 17 時 00分~17時 50分

Delphi 17時00分~17時20分 / C++Builder 17時30分~17時50分

ねらい :プログラミング言語をやさしく覚えようシーズン2

第1回 2017年1月23日 シューティングゲームのプログラム

第2回 1月30日 変数と型

第3回 2月6日 条件とループ

第4回 2月13日 関数

第5回 2月20日 配列と構造体

第6回 2月27日 文字列とオブジェクト

第7回 3月6日 オブジェクト指向

第8回 3月13日 作ってみよう(1)

第9回 3月27日 作ってみよう(2)

セミナー情報 :下記のWebサイト

http://forms.embarcadero.com/starter-tutorial-webinar

Page 3: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

3© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

第7回「オブジェクト指向」

今日のねらい

• クラス・オブジェクトの機能を知る

• 隠蔽、継承を知る

実施内容

• 隠蔽、継承とはどんなものか

• 隠蔽する方法

• 継承する方法

• まつわるあれこれ

Page 4: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

4© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

無料版 C++Builder 10.1 Berlin Starter Edition 入手方法

• シリアルキーを知らせるメール内にも再ダウンロードリンク有

• ダウンロード、インストール参考ブログ:https://goo.gl/CCBNdx

エンバ

Web製品

C++

Builder

Starter

バナー登録 Get

無料で使える開発環境をダウンロード

EDN*に登録済の方はEDNアカウントでダウンロード可

登録完了後、自動でインストーラーのダウンロード開始

インストール時にシリアルキーを入力

登録時のメールアドレスにシリアルキーが配信される

Page 5: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

5© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

オブジェクト指向とは?

オブジェクト指向に対する考え方は諸説ありますが……

• データと操作の関係性を定義すること(クラス定義)

• すでに存在するオブジェクトの機能を流用できること(継承)

• 内部処理の複雑な部分は隠して、わかりやすく操作できるようにすること

(カプセル化)

• 異なるクラスに同じ操作を行ったときに、それぞれのクラスの機能に応じ

て適切な処理が行われること(ポリモーフィズム)

Page 6: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

6© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

それぞれの車種の基本構成がクラス定義。注文するとインスタンスが生成さ

れる。納品された現物がインスタンス。運転操作はメソッド。

車を買う場合の話を例にあげてみると

同じ車種でも実体が違う

車種Xの基本構成= クラス定義

車種X(Aさんの注文)= インスタンス

車種X(Bさんの注文)= インスタンス

車種X(Cさんの注文)= インスタンス

オプションを選んで注文する= インスタンスの生成

基本的な運転操作方法(メソッド)は同じ

Page 7: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

7© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

オブジェクトの設計図

型と操作が宣言、定義されている

クラスとは?

同じ車種でも実体が違う

車種Xの基本構成= クラス

# メーカー名# 車種# 色

{ 運転方法 }

{ 施錠方法 }

{ メンテナンス }

車種X(Aさんの注文)= インスタンス

車種X(Bさんの注文)= インスタンス

車種X(Cさんの注文)= インスタンス

オプションを選んで注文する= インスタンスの生成

基本的な操作方法(メソッド)は同じ

Page 8: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

8© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

クラスにもとづいてオブジェクトを実体化したもの

初期化条件が違えば同じクラスから異なる実体が生成される

インスタンスとは?

同じ車種でも実体が違う

車種Xの基本構成= クラス

# メーカー名# 車種# 色

{ 運転方法 }

{ 施錠方法 }

{ メンテナンス }

車種X(Aさんの注文)= インスタンス

車種X(Bさんの注文)= インスタンス

車種X(Cさんの注文)= インスタンス

オプションを選んで注文する= インスタンスの生成

基本的な操作方法(メソッド)は同じ

Page 9: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

9© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

インスタンスに対する操作方法

同じクラスなら実体が違っても操作方法は同じ

メソッドとは?

同じ車種でも実体が違う

車種Xの基本構成= クラス

# メーカー名# 車種# 色

{ 運転方法 }

{ 施錠方法 }

{ メンテナンス }

車種X(Aさんの注文)= インスタンス

車種X(Bさんの注文)= インスタンス

車種X(Cさんの注文)= インスタンス

オプションを選んで注文する= インスタンスの生成

基本的な操作方法(メソッド)は同じ

Page 10: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

10© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

クラスやインスタンス(オブジェクト)の属性値

処理の結果によらす不変の値と変化する値がある

プロパティとは?

同じ車種でも実体が違う

車種Xの基本構成= クラス

# メーカー名# 車種# 色

{ 運転方法 }

{ 施錠方法 }

{ メンテナンス }

車種X(Aさんの注文)= インスタンス

車種X(Bさんの注文)= インスタンス

車種X(Cさんの注文)= インスタンス

オプションを選んで注文する= インスタンスの生成

[ 変化しない値]

# メーカー名# 車種# 色……

[変化する値]

# 積算走行距離# 燃料の量# 乗車人数# 荷物の量# 施錠状態……

Page 11: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

11© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

カプセル化?

内部処理の複雑な部分を隠して、わかりやすく操作できるようにすること

車(AT車)の運転で必要なことは「適切な速度にするためのアクセルやブレーキのコントロー

ル」と「ハンドル操作」

「アクセル操作がどのようにエンジンを動かしているか」や「ハンドル操作がどのように

ホイールの向きを変えているか」の細かい話はあまり意識しなくともよい。(カプセル化

されているといえる)

カプセル化された部分はクラスやインスタンスの外部からは操作させない

private, protected, public 指定により、メンバの参照範囲を制限できる

同じクラス 派生クラス クラス外

public ○ ○ ○

protected ○ ○ ✕

private ○ ✕ ✕

Page 12: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

12© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

クラスの定義方法によるメンバの見え方の違い

クラスは class{} だけではなく、実は struct{} でも定義できる

• class{} と struct{} の違いはメンバの参照可能範囲の違い

class{} で定義したクラスのメンバは、すべて private である

• protected や public で利用したいメンバは明示が必要

struct{} で定義したクラスのメンバは、すべて public である

• protected や private で利用したいメンバは明示が必要

Page 13: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

13© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

すでに存在するクラス定義(基底クラス)をベースとして、そこから派生し

た別のクラス(派生クラス)を作ること

基底クラスの型や操作は派生クラスに引き継がれる

派生クラスでは新たなプロパティやメソッドを持つこともできる

class: 車種Xをベースにしたパトカー

継承とは?

class: 車種X

# 色# 排気量・馬力

{ 運転操作 }

# パトカー専用の塗装# 赤色回転灯# 後部座席のドアロック# 無線# スピードレーダー

{ 回転灯の操作 }

{ 無線操作}

{ スピードレーダーの操作 }

Page 14: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

14© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

オーバーライドとオーバーロード

オーバーライド = 基底クラスのメソッドを派生クラスで上書きすること

オーバーロード = 同じ名前の複数のメソッドが異なる引数や戻り値をとる

こと

同じ名前のメソッドでクラスの機能に適した処理を実装できることを、ポリ

モーフィズムという

例えば、[自動車]クラスと[オートバイ]クラスを new する操作は、生成され

るインスタンスの内容は当然異なるが、しかしインスタンスが生成されると

いう点では同じ

Page 15: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

15© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

サンプルコード

サンプルコードは下記のリポジトリに掲載いたします

• https://github.com/kazinoue/2017_StarterTutorial_S2

Page 16: 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第7回 ‟オブジェクト指向„

16© 2017 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

第7回「オブジェクト指向」まとめ

今日のねらい

• クラス・オブジェクトの機能を知る

• 隠蔽、継承を知る

実施内容

• 隠蔽、継承とはどんなものか

• 隠蔽する方法

• 継承する方法

• まつわるあれこれ