「番外編」(2012/02/26 (日) 14:44:27) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*技術指南/番外編
ここではプログラミングを行うにあたって知っておくときっとどこかで役立つような便利なおまけな知識について触れるページです
もしかすると,間違っている表現があるかもしてませんが,その場合はこっそり教えてくれると幸いです
#hr(height=2,color=#ffA500)
-&link_anchor(Object){オブジェクト指向プログラミング}
-&link_anchor(class){クラス(class)}
-&link_anchor(design){デザインパターン}
-&link_anchor(modeling){統一モデリング言語}
-&link_anchor(boost){Boost(ライブラリ)}
#hr(height=2,color=#ffA500)
****&aname(Object,option=nolink){オブジェクト指向プログラミング}
C++とかC#とかjavaみたいな言語が当てはまる?内容.
オブジェクトとして物事をとらえ,幾つかのオブジェクトによって一つのアプリケーションを作るもの.
一つ一つのオブジェクトを抽象化したり,抽象的なオブジェクトを継承して具体化してオブジェクトを構成する.
キーとなる内容は「カプセル化」・「継承」・「多様性」と言った内容.
別に,オブジェクト指向関係なしにプログラミングをしてもいいが,そのコードに再利用性はあるのだろうか?
例えば,ゲームでは「プレイヤー」と「敵キャラ」がいるがこれらは抽象的な「キャラクラー(生命体?人間?)」というオブジェクト(クラス)を継承しているといえる.
つまり,抽象的な「キャラクラー」には共通する関数なり変数を有しているということであり,共通内容として記述できる.
ただ,特有な行動なども「プレイヤー」や「敵キャラ」には持っているので,それは具体化した「プレイヤー」などのオブジェクト(クラス)に記述すればいいだけのこと.
そうすれば,今後新しいキャラクラーが現れても,抽象的な「キャラクラー」オブジェクトを継承して新しくオブジェクトを作れば最低限の部分だけ記述でき,再利用できるという利点がある.
ちなみに,同じオブジェクトを継承しているので,ある意味,同じインタフェース(関数)を持っていると言える.
ということは,...話が長くなるのでこのへんで.
まあ,継承だけにあらずカプセル化や多様性とか,オブジェクト指向の考え方は特にゲーム開発に便利な知識かなと思います.
#hr(height=2,color=#ffA500)
****&aname(class,option=nolink){クラス(class)}
オブジェクト指向でいうところの,オブジェクトに相当する内容かと.どちらかと言うとカプセル化かな.
C言語であった構造体(struct)を拡張した考え方といえばわかるだろうか.
クラスはある種の「箱=入れ物」みたいな考え,その中には,色々な変数(ex.名前,年齢)や関数(答え方?)を持っている.
ただ,持っているだけでなくて,それぞれ外部からアクセスできる許可を設定できる.これが構造体と違うところ.
構造体では,すべて外部からアクセスできる設計,つまり公開(public)である.
一方,クラスでは,公開(public)だけでなく非公開(private)や限定的で中間的である被保護(protected)がある.
これらを適切に各変数や関数に設定することで,コードとしての隠蔽や改ざんを防止することができる.
大まかにいうとこんな感じかな,厳密にはグーグル先生に聞けば素晴らしい回答が得られるのでそちらを参考に.
#hr(height=2,color=#ffA500)
****&aname(design,option=nolink){デザインパターン}
有名なGoFのデザインパターンです.
ゲームを作る際でもこの考え方は役立つと思います.
参考:
-wikipedia「[[デザインパターン (ソフトウェア)>http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29]]」
-ゲームをつくろうー!「[[デザインパターン取得編>http://marupeke296.com/DP_main.html]]」
#hr(height=2,color=#ffA500)
****&aname(modeling,option=nolink){統一モデリング言語}
プログラミングやシステムの仕様書や設計書を書くときに役立つ規格化された統一記述言語.UMLやSysMLがある.
まあ,プログラミングをするために必要な知識ではないが,読み方を知っているだけで意外と役に立つ.
少なくとも上記で取り上げた”デザインパターン”を理解するためにはUMLで使われている「クラス図」が読めないと辛いかもしれない.
なので,最低限クラス図くらいは知っているといいかも…?
ちなみに,オブジェクト指向も理解していないとクラス図は理解出来ないかもしれません.
参考:
-Wikipedia「[[統一モデリング言語>http://ja.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E]]」
#hr(height=2,color=#ffA500)
****&aname(boost,option=nolink){Boost(ライブラリ)}
ゲームに限らずプログラミングをしていると,ライブラリに出会うことがあるかと思います
ライブラリはしっかり作られていると便利なツールでありプログラミングをするにあたって楽をすることが出来ます
C++界で一番有名といってもいいライブラリはboostではないかと思います
boost出できることの例
-メモリ管理
-数学演算
-ファイル操作やシリアライズ
-ネットワーク
などなどいろいろあります
ゲーム関係でよく見かけるiniファイルの操作もできるようです
参考:https://sites.google.com/site/boostjp/tips/ini
#hr(height=2,color=#ffA500)
#comment(below)
*技術指南/番外編
ここではプログラミングを行うにあたって知っておくときっとどこかで役立つような便利なおまけな知識について触れるページです
もしかすると,間違っている表現があるかもしてませんが,その場合はこっそり教えてくれると幸いです
#hr(height=2,color=#ffA500)
-&link_anchor(Object){オブジェクト指向プログラミング}
-&link_anchor(class){クラス(class)}
-&link_anchor(design){デザインパターン}
-&link_anchor(modeling){統一モデリング言語}
-&link_anchor(boost){Boost(ライブラリ)}
#hr(height=2,color=#ffA500)
****&aname(Object,option=nolink){オブジェクト指向プログラミング}
C++とかC#とかjavaみたいな言語が当てはまる?内容.
オブジェクトとして物事をとらえ,幾つかのオブジェクトによって一つのアプリケーションを作るもの.
一つ一つのオブジェクトを抽象化したり,抽象的なオブジェクトを継承して具体化してオブジェクトを構成する.
キーとなる内容は「カプセル化」・「継承」・「多様性」と言った内容.
別に,オブジェクト指向関係なしにプログラミングをしてもいいが,そのコードに再利用性はあるのだろうか?
例えば,ゲームでは「プレイヤー」と「敵キャラ」がいるがこれらは抽象的な「キャラクラー(生命体?人間?)」というオブジェクト(クラス)を継承しているといえる.
つまり,抽象的な「キャラクラー」には共通する関数なり変数を有しているということであり,共通内容として記述できる.
ただ,特有な行動なども「プレイヤー」や「敵キャラ」には持っているので,それは具体化した「プレイヤー」などのオブジェクト(クラス)に記述すればいいだけのこと.
そうすれば,今後新しいキャラクラーが現れても,抽象的な「キャラクラー」オブジェクトを継承して新しくオブジェクトを作れば最低限の部分だけ記述でき,再利用できるという利点がある.
ちなみに,同じオブジェクトを継承しているので,ある意味,同じインタフェース(関数)を持っていると言える.
ということは,...話が長くなるのでこのへんで.
まあ,継承だけにあらずカプセル化や多様性とか,オブジェクト指向の考え方は特にゲーム開発に便利な知識かなと思います.
#hr(height=2,color=#ffA500)
****&aname(class,option=nolink){クラス(class)}
オブジェクト指向でいうところの,オブジェクトに相当する内容かと.どちらかと言うとカプセル化かな.
C言語であった構造体(struct)を拡張した考え方といえばわかるだろうか.
クラスはある種の「箱=入れ物」みたいな考え,その中には,色々な変数(ex.名前,年齢)や関数(答え方?)を持っている.
ただ,持っているだけでなくて,それぞれ外部からアクセスできる許可を設定できる.これが構造体と違うところ.
構造体では,すべて外部からアクセスできる設計,つまり公開(public)である.
一方,クラスでは,公開(public)だけでなく非公開(private)や限定的で中間的である被保護(protected)がある.
これらを適切に各変数や関数に設定することで,コードとしての隠蔽や改ざんを防止することができる.
大まかにいうとこんな感じかな,厳密にはグーグル先生に聞けば素晴らしい回答が得られるのでそちらを参考に.
#hr(height=2,color=#ffA500)
****&aname(design,option=nolink){デザインパターン}
有名なGoFのデザインパターンです.
ゲームを作る際でもこの考え方は役立つと思います.
参考:
-wikipedia「[[デザインパターン (ソフトウェア)>http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29]]」
-ゲームをつくろうー!「[[デザインパターン取得編>http://marupeke296.com/DP_main.html]]」
#hr(height=2,color=#ffA500)
****&aname(modeling,option=nolink){統一モデリング言語}
プログラミングやシステムの仕様書や設計書を書くときに役立つ規格化された統一記述言語.UMLやSysMLがある.
まあ,プログラミングをするために必要な知識ではないが,読み方を知っているだけで意外と役に立つ.
少なくとも上記で取り上げた”デザインパターン”を理解するためにはUMLで使われている「クラス図」が読めないと辛いかもしれない.
なので,最低限クラス図くらいは知っているといいかも…?
ちなみに,オブジェクト指向も理解していないとクラス図は理解出来ないかもしれません.
参考:
-Wikipedia「[[統一モデリング言語>http://ja.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E]]」
#hr(height=2,color=#ffA500)
****&aname(boost,option=nolink){Boost(ライブラリ)}
ゲームに限らずプログラミングをしていると,ライブラリに出会うことがあるかと思います
ライブラリはしっかり作られていると便利なツールでありプログラミングをするにあたって楽をすることが出来ます
C++界で一番有名といってもいいライブラリはboostではないかと思います
参考:http://www.kmonos.net/alang/boost/
boost出できることの例
-メモリ管理
-数学演算
-ファイル操作やシリアライズ
-ネットワーク
などなどいろいろあります
ゲーム関係でよく見かけるiniファイルの操作もできるようです
参考:https://sites.google.com/site/boostjp/tips/ini
#hr(height=2,color=#ffA500)
#comment(below)
表示オプション
横に並べて表示:
変化行の前後のみ表示: