「エンティティ・コンポーネント・システム」の版間の差分

編集の要約なし
 
(同じ利用者による、間の3版が非表示)
1行目: 1行目:
'''エンティティ・コンポーネント・システム'''(英語: Entity component system、通称:ECS)とは、データと処理を完全に分離して考える[[プログラミング]]の手法のひとつ。「[[コンポーネント指向]]」とはまったくの別物。
'''エンティティ・コンポーネント・システム'''(英語: Entity component system、通称:ECS)とは、「[[データ]]」と「処理」を完全に分離して考える[[プログラミング]]の手法のひとつ。


データと処理が分離しているので上層部の思いつきによる急な仕様変更に強いという特徴がある。
「[[コンポーネント指向]]」とはまったくの別物。
 
== 概要 ==
ECSは「データ」と「処理」が分離していることで「階層構造がない」という特徴がある。
階層構造は「階層を大きく組み直したいとき」に依存関係が複雑すぎて「右を治したら左が壊れる」という状態に陥り破綻するという問題を抱えているが、ECSを使えばこの問題を回避できる。
このことから「上層部の思いつきによる急な仕様変更に強い」と言われる。
 
* 「[[階層化の有害性]]」も参照
 
いわゆる「[[オブジェクト指向]]」を全否定したものだが、一部の[[オブジェクト指向プログラミング言語]]との相性は悪くなく、[[インターフェイス]]と[[構造体]]と[[LINQ]]を搭載する[[C#]]との相性は非常に良い。
 
ECSはゲーム業界では非常に人気がある。
[[ゲームエンジン]]の[[Unity]]も独自のECSを採用している。


== 主な用語 ==
== 主な用語 ==
=== エンティティ ===
=== エンティティ ===
オブジェクト指向のオブジェクトに近いもの。オブジェクト指向でいう「メソッド」などは持たず、エンティティの「識別子(ID)」と「コンポーネントの配列」だけを持つ。
オブジェクト指向でいうオブジェクトに近いもの。オブジェクト指向でいう「メソッド」や「プロパティ」や「メンバ変数」などは一切持たず、エンティティの「識別子(ID)」と「コンポーネントの配列」だけを持つ。
<source lang="csharp">
<source lang="csharp">
class Entity {
class Entity {
33行目: 44行目:
* コンポーネントAを持つエンティティに対する処理(システム)
* コンポーネントAを持つエンティティに対する処理(システム)
* コンポーネントAとコンポーネントBを併せ持つエンティティに対する処理(システム)
* コンポーネントAとコンポーネントBを併せ持つエンティティに対する処理(システム)
[[category: プログラミング]]