0

OOP の練習のために、私は趣味のプロジェクト、txt ファイルからテーブルを読み取り、テーブルのエントリについて質問するクイズ プログラムに取り組んでいます。アイデアは、これにより、私たちの部門のコースに与えられた資料の学習を促進することです.

これまでのところ、I/O ビットを作成し、非常に控えめな GUI と、データテーブル内のさまざまな種類のエンティティを表すクラスをまとめました。プログラムの核となる部分をどのように進めるかはわかりませんが、質問の生成と検証を意味します。

AbstractQuestion私の最初のアイデアは、質問とは何か、どのフィールド (文字列表現、回答、および難易度) を持つかをほぼ定義するクラスを持つことでした。次に、さまざまな種類の質問用のクラスを作成できると考えました。たとえば、単純な値の問い合わせ (エンティティの名前を指定して特定のプロパティを尋ねるなど) 用のクラスと、より複雑な質問用のクラス (たとえば、エンティティなど)。

ただし、これが最善の方法であるかどうかはわかりません。理由はうまく言い表せませんが、これは最善の方法ではないと感じています。Factoryクラスで作業することは理にかなっていますか? 基本的に私はする必要があります:

  • データテーブルからランダムに選択された 1 つ以上のエンティティに基づいて質問を生成する手段を提供する
  • ユーザーからの入力に基づいて、さまざまなタイプの問題をランタイムで作成する必要があります (希望する難易度)。
  • Quiz質問は検証する必要があり、メインクラスからユーザーに通知する必要があります(そのため、質問にアクセスできる必要があります)。

簡単なことから始めて、1 種類の質問だけを実装し、それを機能させ、時間内に新しい機能を追加することもできますが、OOP の理解を深めるためには良い習慣だと思います。人々がそれをテストするために、私は最終的に別のものに取り組むことになります。自分のプロジェクトをよりよく概念化できるようになりたいと思っています。これは、それを改善する良い機会になると思います。

PS: 明らかではない場合、私は学歴によるプログラマーではありません :)

4

3 に答える 3

2

次の 2 つの観点から考えます。

  1. 質問オブジェクトを使用するオブジェクトは? 彼らは何をするために質問が必要ですか? つまり、質問のインターフェースについて話します。
  2. 質問はそれらのことをどのように行いますか? 質問の振る舞い。

最初は、インターフェイスだけを考えてください。質問が何をする必要があるのか​​ はっきりしません。答えが自由形式のテキストである質問と、「A から D のいずれかを選択してください」という質問と、「A から D から 1 つ以上を選択してください」という質問は、UI で非常に異なるように見えます。 . では、「質問: あなた自身を表示して、あなたの回答を得て、ユーザーのスコアを教えてください」または「質問: あなたのテキストは何ですか? 質問: あなたはどのような回答をしますか? 質問: 4 つの選択肢は何ですか? 質問: ユーザーが入力した 'a' のスコアは?"

質問の責任が明確になったら、適切な数の異なる質問インターフェイスとクラスを検討して、Factory などの作成パターンが必要かどうかを判断できます。Factory は、同じインターフェースをすべて実装するさまざまなクラスが多数ある場合にうまく機能します。

工場: 私に質問をしてください。質問: ユーザーに聞いてみてください。

于 2012-04-24T16:09:25.850 に答える
2

抽象ファクトリを使用して、特定のパラメータに基づいて質問を作成する方法を知っているファクトリを作成できます。通知に関しては、 Observer Pattern
を使用できます。それらを研究し、好みの言語で例を参照してください

于 2012-04-24T16:06:06.410 に答える
1

私は本番環境で実行されている簡単なクイズ アプリケーションを持っています =) さまざまな種類の質問があり、さまざまな動作をします (さまざまな方法で質問し、回答し、ヒントを与える必要があります)。質問の複雑さなどは異なります。

私の状況では、最も適切な解決策は、いくつかの抽象メソッド (インターフェースの場合もあります) と異なる実装を持つ Question スーパークラスを作成することでした。また、QuestionGenerator (ファクトリとして動作)、ファクトリ、いくつかの入力リターンに基づく別の実装がありました。

あなたの質問のインターフェース(共通部分)について考え、ファクトリーパターンを使用してください。AbstractFactory または Builder パターンを使用する利点を見つけることができる、より複雑なシナリオが存在する可能性があります。

私の単純なケースでは、インターフェースを抽出するだけで十分でした

于 2012-04-24T16:22:47.343 に答える