SlideShare a Scribd company logo
1 of 46
インターフェイスによる
  オブジェクト指向プログラ
           ミング



            株式会社Aiming
        ソフトウェアエンジニア
               清水 聡
アジェンダ
•   インターフェイスとは
•   各言語のインターフェイス
•   ゲームにおけるインターフェイス活用
•   実務でのバランスの取り方
•   オブジェクト指向プログラミングに
          おけるインターフェイス
インターフェイスとは
インターフェイスとは
• ハードウェアインターフェイス
 – コネクタの形状やそこを流れるものの取り決
   め
インターフェイスとは
• ソフトウェアインターフェイス
 – ソフトウェア間の通信を行う際の
    メッセージの渡し方などを決めたもの

 – 複数のオブジェクトに関して共通する機能を
    実装する為のメッセージの規格を定義した
   もの
インターフェイスとは
描画する人

        描画する




               形状
インターフェイスとは
• 描画する人(Drawer)が最初は
   一人で良かったんだけど複数必要に
  なった
 – 例えば、描画対象がiPhone・Android・HTMLと
   か


• でも描画するという振る舞いと
   必要な情報(Figure)は変わらない
インターフェイスとは
描画する人というインターフェ
      イス


                  描画する




                 形状
インターフェイスとは
• iPhone版の描画する人
インターフェイスとは
• Android版の描画する人
各言語のインターフェイス
各言語のインターフェイス
• C#
各言語のインターフェイス
• Java
各言語のインターフェイス
• ActionScript
各言語のインターフェイス
• C++
ゲームにおける
インターフェイス活用
ゲームにおけるインターフェイス
      活用


          敵

      倒       落とす
  自   す


              アイテ
              ム
ゲームにおけるインターフェイス
      活用




  自



      近づいて拾うと   アイテ
                ム
        アイテムを
      入手
ゲームにおけるインターフェイス
      活用




   Money   Item   Exp
ゲームにおけるインターフェイス
      活用
• インターフェイスを使わない実装1




     突然の位置情報
ゲームにおけるインターフェイス
      活用
• インターフェイスを使わない実装2
ゲームにおけるインターフェイス
      活用
• インターフェイスを使わない実装3
ゲームにおけるインターフェイス
      活用
• インターフェイスを使わない実装4
ゲームにおけるインターフェイス
      活用


         経験値
                HP回復


      突然の仕様変更
  自               お金



                アイテ
                ム
ゲームにおけるインターフェイス
      活用
• 対策1
ゲームにおけるインターフェイス
      活用
• 対策2
ゲームにおけるインターフェイス
      活用
• 対策3
ゲームにおけるインターフェイス
      活用


         経験値
                HP回復




  自               お金



                アイテ
                ム
      落ちているもの
ゲームにおけるインターフェイス
      活用
ゲームにおけるインターフェイス
      活用
ゲームにおけるインターフェイス
      活用
ゲームにおけるインターフェイス
      活用
ゲームにおけるインターフェイス
      活用
実務でのバランスの取り方
実務でのバランスの取り方
• 実務に置いてはいろいろな要因があり
   バランスが大切だけど難しいですよね
 – 時間
  • 完璧を求めて時間をかけ過ぎたり
 – 必要なインターフェイス
  • 必要だと思って作ったけど逆に負債となったり
 – 仕様変更
  • もう全てがどんでん返し\(^o^)/
実務でのバランスの取り方
• YAGNI
  – “You ain‘t gonna need it”
           そんなの必要ないって
    • あとで使うだろうとの予測の元に作ったものは、
              実際には10%程度しか使われな
      い
    • 不要な機能にも維持コストがあり、リソースを浪
      費する
    • 設計をシンプルにすることが
        予期しない変更に対しての備えとなる
実務でのバランスの取り方
• ケース1
 – 最初はアイテムしかドロップしなかった
    →あとでお金とかが追加された

 1. DropItemとして実装する
 2. 仕様変更で必要になれば
      インターフェイスを考え適用する
実務でのバランスの取り方
• ケース2
 – 最初からアイテム・お金・経験値がドロップ
   する

 1. 共通するインターフェイスを考え適用する
 2. さらに追加があれば
     インターフェイスを実装したクラスを追
    加する
オブジェクト指向プログラミン
グに
おけるインターフェイス
OOPにおけるインターフェイス
• ここまでは言語の機能である
   インターフェイスに焦点をあて説明し
  ました
• この考え自体はプログラミング自体、
   オブジェクト指向プログラミング
  (OOP)の
    考えで言語問わず適用できます
• この考えを支援する為に
   言語毎に機能があったりなかったりし
  ます
OOPにおけるインターフェイス
• C++での別解
OOPにおけるインターフェイス
• Pythonでの一例
OOPにおけるインターフェイス
• このように言語にインターフェイスとい
  う
   機能がないからと言ってインターフェ
  イスの
    考えが使えないというわけではあり
  ません
• 言語毎に思想が異なり実現方法が違いま
  す
• 基盤となるオブジェクト指向プログラミ
  ングを
参考書籍
• デザインパターンとともに学ぶ
      オブジェクト指向のこころ
 – http://amzn.to/Z8dE6z
• パターン指向リファクタリング入門
 – http://amzn.to/UlhkuB
• オブジェクト指向における
   再利用のためのデザインパターン
 – http://amzn.to/VI3524
質疑応答
ご清聴ありがとうございましたm(_ _)m

More Related Content

Similar to インターフェイスによるオブジェクト指向設計

Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことKatsutoshi Makino
 
インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編Yoshitaka Kimisaki
 
情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将Part情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将PartHiroki Sakamoto
 
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現gree_tech
 
Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜
Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜
Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜Chihiro Tomita
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1MinGeun Park
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet将 高野
 
WEB業界でほしい人材とは? そしてWEB業界の実際
WEB業界でほしい人材とは? そしてWEB業界の実際WEB業界でほしい人材とは? そしてWEB業界の実際
WEB業界でほしい人材とは? そしてWEB業界の実際Hiroyuki Yamaoka
 
Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030Ayako Omori
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」nishikawa_makoto7
 
enchant.jsを使った子ども向けプログラミングワークショップ講義内容
enchant.jsを使った子ども向けプログラミングワークショップ講義内容enchant.jsを使った子ども向けプログラミングワークショップ講義内容
enchant.jsを使った子ども向けプログラミングワークショップ講義内容Yuki Tanaka
 
Xp Terakoya No04
Xp Terakoya No04Xp Terakoya No04
Xp Terakoya No04takepu
 
コンピュータをもっと使おう
コンピュータをもっと使おうコンピュータをもっと使おう
コンピュータをもっと使おうTomohiko Himura
 
第3回 IT講座 ゲームを作ってみよう! 基礎編
第3回 IT講座 ゲームを作ってみよう! 基礎編第3回 IT講座 ゲームを作ってみよう! 基礎編
第3回 IT講座 ゲームを作ってみよう! 基礎編Shunya Komori
 
いろいろ見せますLord of Knightsのクライアント開発事例紹介
いろいろ見せますLord of Knightsのクライアント開発事例紹介いろいろ見せますLord of Knightsのクライアント開発事例紹介
いろいろ見せますLord of Knightsのクライアント開発事例紹介Kouji Hosoda
 

Similar to インターフェイスによるオブジェクト指向設計 (20)

Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだこと
 
インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編
 
情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将Part情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将Part
 
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
 
Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜
Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜
Developers Summit 2013【14-E-4】デザインをするときにデザイナーが考えること〜デザイナーの頭の中〜
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
 
Unity ゲーム開発
Unity ゲーム開発Unity ゲーム開発
Unity ゲーム開発
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
 
WEB業界でほしい人材とは? そしてWEB業界の実際
WEB業界でほしい人材とは? そしてWEB業界の実際WEB業界でほしい人材とは? そしてWEB業界の実際
WEB業界でほしい人材とは? そしてWEB業界の実際
 
邪道Jenkins
邪道Jenkins邪道Jenkins
邪道Jenkins
 
Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 
enchant.jsを使った子ども向けプログラミングワークショップ講義内容
enchant.jsを使った子ども向けプログラミングワークショップ講義内容enchant.jsを使った子ども向けプログラミングワークショップ講義内容
enchant.jsを使った子ども向けプログラミングワークショップ講義内容
 
Xp Terakoya No04
Xp Terakoya No04Xp Terakoya No04
Xp Terakoya No04
 
リモート・スマホ・レンタル
リモート・スマホ・レンタルリモート・スマホ・レンタル
リモート・スマホ・レンタル
 
コンピュータをもっと使おう
コンピュータをもっと使おうコンピュータをもっと使おう
コンピュータをもっと使おう
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
第3回 IT講座 ゲームを作ってみよう! 基礎編
第3回 IT講座 ゲームを作ってみよう! 基礎編第3回 IT講座 ゲームを作ってみよう! 基礎編
第3回 IT講座 ゲームを作ってみよう! 基礎編
 
いろいろ見せますLord of Knightsのクライアント開発事例紹介
いろいろ見せますLord of Knightsのクライアント開発事例紹介いろいろ見せますLord of Knightsのクライアント開発事例紹介
いろいろ見せますLord of Knightsのクライアント開発事例紹介
 

More from Akineko Shimizu

MMOG開発について~クライアントサイド~
MMOG開発について~クライアントサイド~MMOG開発について~クライアントサイド~
MMOG開発について~クライアントサイド~Akineko Shimizu
 
学生時代からの変化
学生時代からの変化学生時代からの変化
学生時代からの変化Akineko Shimizu
 
新規プロジェクトに関わって感じた事
新規プロジェクトに関わって感じた事新規プロジェクトに関わって感じた事
新規プロジェクトに関わって感じた事Akineko Shimizu
 
オンラインゲーム開発の楽しさ
オンラインゲーム開発の楽しさオンラインゲーム開発の楽しさ
オンラインゲーム開発の楽しさAkineko Shimizu
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 

More from Akineko Shimizu (6)

MMOG開発について~クライアントサイド~
MMOG開発について~クライアントサイド~MMOG開発について~クライアントサイド~
MMOG開発について~クライアントサイド~
 
学生時代からの変化
学生時代からの変化学生時代からの変化
学生時代からの変化
 
新規プロジェクトに関わって感じた事
新規プロジェクトに関わって感じた事新規プロジェクトに関わって感じた事
新規プロジェクトに関わって感じた事
 
オンラインゲーム開発の楽しさ
オンラインゲーム開発の楽しさオンラインゲーム開発の楽しさ
オンラインゲーム開発の楽しさ
 
ONE-UPの紹介
ONE-UPの紹介ONE-UPの紹介
ONE-UPの紹介
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 

インターフェイスによるオブジェクト指向設計