投稿者 たかくん  (社会人) 投稿日時 2011/12/3 05:37:51
おはようございます。
ラオシスさんありがとうございます。
これは概念の問題なので正解や不正解もないのですがみなさんならどうしますか?
という質問です。
下記のコードはゲーム講座の第3回キャラクターのクラス化の一部です。
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

         'いったん全体を黒で塗りつぶす
         mainGraphics.Clear(Color.Black)

         '登録されているすべてのUnitに対して、MoveとDrawを呼び出す。
         For Each unit As Unit In Units
             If unit.IsAlive Then
                 unit.Move() 'unitの座標更新
                 unit.Draw(mainGraphics) 'unitの描画(この時点では画面には反映されない)
             End If
         Next

         '最新の状態を画面に描画する。
         Me.Invalidate()
     End Sub

たとえば上記のコードを空のGameクラスなる物を作ってメソッド化してフォームクラスと切り離すという事を考えてみて下さい。
フォームクラスではオペレーションクラスなのでただ呼び出すだけです。
もちろんGameクラスでGUIクラスの部品をいじる事はしません。
ラオシスさんならどうします?

Public Class GUI
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Game.Start()
    End Sub
End Class

本当ならこんな事普通はしませんが僕は今「クラスの独立」をテーマにオブジェクト指向を勉強しています。
多分、Gameクラスというのは制御であって動的かつ抽象的なのでこれをクラスにする事自体が不自然なのかもしれませんけどね。
やはり無理が生じるというのは概念自体がおかしいという事なのでしょうか...
クラス分けという作業は「物」といしうオブジェクトを対象にするほうが自然なのでしょうか...
あー、考えれば考えるほどパニックになってきました。
誰かお助けてください。
ラオシスさん、僕の言ってる事解ってもらえました?