は?コード書け
uyさんは>>670 コードを書かない次元での設計()は机上の空論という事を知ってる


必要なのはmove関数を受け渡す事と、それぞれに初期処理を行わせることで、それ以上にやる事は何もない

[歩,飛,角...]とリスト化し、
しいていうなら
update ← この名前

これで統一し
Collection([歩,飛,角...]) # 内部でupdate呼び出し
または
[歩,飛,角...].each { |v| v.update }

最上位なんて、こうなるだけで
歩,飛,角,がそれぞれ同じクラスのインスタンスだろうと、
別クラスのインスタンスだろうと
リストに入れた後はupdateメソッド呼び出すだけだから型なんて関係ないから


ちなみにuyさんが将棋を作る場合
歩,飛,角はそれぞれ別クラスで定義する
おそらく、格クラスには、駒moduleをmix-inする1行と、数行のコンストラクタと、
update関数(数行〜20行程度)が、あるだけになるけど

わざわざ圧縮して書く処理でもないから