2012-01-12 11 views
0

私はボタンとテキストフィールドのメニューを持つGUIクラスを持っています。メニューと入力で行われる選択に応じて、GUIクラスのメソッドはLogicクラスのメソッドを呼び出して入力を送信し、CustomerクラスとAccountクラスの新しいオブジェクトを作成します。JavaのOOPに関するいくつかの質問

GUIクラスとLogicクラスの間で通信できるようにするために、私はまずLogicクラスのオブジェクトを作成し、GUIクラス内に作成します。これはこれを行う最良の方法ですか? GUIクラスとLogicクラスの間に何らかの種類の参照変数が必要か、またはオブジェクトがGUIクラスの先頭に作成されたときに参照を使用するだけですか?私はクラスと通信することができると思う、それはまずオブジェクトでなければならない!ありがとう!

Logic logic = new Logic(); 

logic.addCustomer(name, number); 

答えて

1

私はLogicクラスをGUIの外でインスタンス化しますが、それをGUIコンストラクタの引数として渡します。すでに行っている作業とほぼ同じですが、GUIがLogicオブジェクトを使用することが明確になっていると思います。また、LogicがGUIの開始/終了の前後にいくつかのことを行う可能性もあります。今の場合ではないかもしれませんが、あなたがプログラムを拡張すれば、将来的には真実かもしれません。

他の多くの答えは、MVCを見るように指示していますが、これはプロジェクトにとって過度のことです。大規模なプロジェクトでは複雑さを軽減できますが、小さいプロジェクトではそれを大きくします。

EDIT:

Logic login = new Logic(); 
... 
MyGUI gui = new MyGUI(logic); 
... 
+0

しかし、GUIの外でLogicクラスをインスタンス化するにはどうすればよいですか? –

+0

新しい編集をご覧ください。 – toto2

0

あなたはあなたのメインのタイプロジックのオブジェクトの上に作成し、Windowオブジェクトにオブジェクトの参照を格納することができます - あなたがいる限り、ウィンドウが存在するとして、あなたのロジック・オブジェクトにアクセスすることができます。

0

デフォルトでは、Javaは参照変数を使用します。したがって、GUIクラスでオブジェクトをインスタンス化する場合、オブジェクトを処理クラスを介して送信することを確認してください。

また、シングルトンクラスを調べると、クラスのインスタンスが1つだけ返されます。そのクラスの中で、グローバルに必要なすべてのオブジェクトをインスタンス化し、そのインスタンスをプログラム全体で再利用します。

2

理想的には、論理クラスを直接作成しないでください。 機能をいくつかの小さなクラスに分割し、それぞれが責任を満足させる必要があります。

GUIクラスがユーザーイベントをリッスンするリスナーを作成するという単純な方法があります。使用イベントへの応答で、ロジックが自分自身を登録するイベントを発生させます。その後、イベントが受信されると、論理クラスはその機能を実行することができる。 オブザーバーパターン、イベントドリブンデザインについてお読みください。

ここでイベント駆動型プログラミングについて読むことができますhttp://en.wikipedia.org/wiki/Event-driven_programming

+0

こんにちは、私は、GUIクラスでリスナーを持っています。これは私が手を入れなければならない課題なので、Logicクラスを持つことが必須でした.GUIクラスのオブジェクトを作成するには、これが最善の方法だと思っていました。それとも、どうやってできますか? –

+0

イベントを受け取るクラスは論理クラスを作成する必要があります。イベントハンドラはコントローラと見なすことができます。このようにして、ロジッククラスは分離され、独立して使用できます。また、あなたのGUIはte Logicクラスに直接依存しません。 – Scorpion

+0

Hmmm、GUIクラスのイベントがJtextFieldから新しいCustomerオブジェクトを作成するメソッドに名前を送信する場合。私は、cuctomerオブジェクトを作成する最良の方法はLogicにあると思いますが、これを行うにはどこかで論理オブジェクトを作成する必要があります。そして、メインメソッドを持っているGUIクラスでなければ、どこでどのようにすればいいでしょうか?混乱し、すべての助けをpreciate!ありがとう! –

0

一般的に可能です。あなたのアプリケーションが非常にシンプルな場合。

しかし、このアプローチはスケーラブルではありません。アプリケーションがより複雑になるにつれ、開発とサポートがより困難になりました。あなたのデザインに最適な方法を定義するために、Model–view–controllerパターンを検討してみてください。 (あなたのニックネームによると、私は an alternative linkを提案するリスクがあります)

+0

言語が間違っています! :) –

+0

心配しない:)両方のリンクはほぼ同じものです:) – andrey

1

MVC architectureでいくつかの調査を行うことをお勧めします。あなたのGUI(ビュー)はあなたのモデル(ロジック)と直接対話してはなりません。あなたの視点から「信号」を得るコントローラを実装し、あなたの「論理オブジェクト」を作成してそれらを操作する責任があります。

関連する問題