質問

私は過去6年間Javaプログラマーでしたが、今年の初めからゲームプログラミングに興味がありました。だから、私は人気のあるゲームから始めるのは良い考えだと思っていたので、JavaでPac-Man氏のゲームを実装しました。私の実装は、元のゲームと約90%に似ていると言えます。これは、基本的な2Dゲームをコーディングすることを学ぶための個人的なプロジェクトだったため、できるだけ多くのデザインパターンとベストプラクティスを使用しようとしました。

コーディングが終了したので、19のインターフェイスとたった17のクラスがあることに気付きました!それで、私はインターフェイスを過剰に使用しているのではないかと思い始めます。

以下は、私が使用するいくつかのクラス/インターフェイスの例です。

クラス -fullgame(fullgameinterfaceとfullgameobservableを実装)

クラス -view1(fullgameobserverを実装)

インターフェース -FullGameInterface(基本的な機能方法:履歴書、一時停止、再生など)

インターフェース -fullgameobservable(更新通知のためにビューを登録できる)

インターフェース -FullGameObServer(通知を受信するためにゲームの2つの異なるビューによって実装)

インターフェイスを使いすぎていますか?

あなたの意見は何ですか?

役に立ちましたか?

解決

インターフェイスは良いです。それらの多くを持っていることは問題ではありません。

特に、最初のゲームのみを実装した場合。コードベースを再利用してより多くのゲームを構築すると、インターフェイスを再利用するため、おそらくより多くの多型になります。しかし、この時点で、インターフェイスよりも実装に多くの方法がある場合、インターフェイスは目的を果たしています。 、OOの本当の利点である多型を可能にします。

他のヒント

実装を変更する場合は、インターフェイスを使用します。

フルゲームオブジェクトのようなものの場合、おそらくインターフェイスは必要ありません。

フルゲームの機能を変更する場合は、インターフェイスの作成を検討して、FullGameInterfaceにインスタンス化するオブジェクトを切り替えることができます。

編集2:必要なときにのみコードをより複雑にします。インターフェイスが必要だと思われる場合は、最初に停止してください。すでに持っているクラスを使用してください。 (ただし、使用中は、実装の詳細から発信者を締め出すようにしてください。)2番目の類似のクラスを取得したら、実際にインターフェイスと実装するものを把握できます。発信者がまだ一般的なインターフェイスに入れるのが厄介な実装の詳細が必要な場合は、十分にきれいに分離されていません。

より完全な答えのために編集:

インターフェイスは、実際のオブジェクト(実装)からオブジェクト(インターフェイス)にアクセスするメソッドを切り離すのに役立ちます。これはいくつかの状況に適しています:

  1. 同じセマンティクスと一般的な操作を備えたこれらのメソッドの実装が複数ありますが、根本的な実装が異なります。例えば、 List, ArrayList, 、 と LinkedList. List 多くのコレクションベースの方法がいずれかを受け入れることを許可する一般的なインターフェイスです。 ArrayList またはa LinkedList. 。 Collection インターフェイスでは、すべてのコレクションに対して同様の配置が可能になります。
  2. アーキテクチャの理由から、インターフェイスを実装から分離する必要があります。たとえば、1つのマシンに呼び出しオブジェクトを、別のマシンに実装オブジェクトに配置することができます。呼び出しマシンのプロキシは、ネットワークを横切って実際のオブジェクトに呼び出すためのインターフェイスを実装します。インターフェイスは、発信者が違いを知る必要がないことを意味します。 Java Rmiはこれをしました。
  3. オブジェクトが呼び出される方法を変更できる必要があります。たとえば、インターフェイスを取ります Image と2人の実装者、 FileImageFileImageProxy. 。プロキシがロードされます FileImage オンデマンドで、通話を渡します Image 実際のオブジェクトにインターフェイスします。クライアントは、自分がどのように画像を取得するか、またはそれが本当にロードされているかどうかを知ることも気にしません。彼らはただいることを知っています Image そして、彼らはそれを使用することができます。

コードを制御していて、実装が1つしかない場合、インターフェイスが無意味であることは良い兆候であるということです(たとえば、テストしたい場合は便利かもしれません)。内部クラスもクラスであることを忘れないでください。

インターフェースの複数の継承と実装は、通常、悪い考えです。

私はしばしばインターフェイスを使用してデザインを具体化します。私はそれらを徹底的に文書化し、これにより私は私のクラスの責任を考えるように強制されます。 APIとクラスの内部には常にある程度の区別があります。したがって、(まだ)複数の実装がなくても、インターフェイスを指定することは一般に害にはなりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top