0

对于 OOP 实践,我正在从事一个爱好项目,这是一个测验程序,它从 txt 文件中读取表格并询问有关表格中条目的问题。我们的想法是让这有助于学习我们部门的课程所提供的材料。

到目前为止,我编写了 I/O 位,将一个非常普通的 GUI 和类放在一起来表示数据表中不同类型的实体。我不确定如何继续程序的核心,我的意思是问题生成和验证。

我的第一个想法是创建一个类AbstractQuestion,它几乎定义了问题是什么以及它具有哪些字段(字符串表示、答案和难度级别)。然后我想我可以为不同类型的问题编写类,例如一个类用于简单的值查询(例如给出实体名称并询问特定属性),另一个类用于更复杂的问题(例如查询交互实体等)。

但是,我不确定这是否是最好的方法。无法真正表达原因,但我有一种感觉,这不是解决问题的最佳方式。在工厂课程上工作有意义吗?基本上我需要:

  • 提供基于从数据表中随机选择的一个或多个实体生成问题的方法
  • 需要在运行时根据用户的输入(所需的难度级别)创建不同类型的问题
  • 问题需要被验证并且用户需要被主Quiz类通知(所以问题需要是可访问的)。

我可以从简单开始,只实现一种类型的问题,让它工作并及时添加新功能,但我认为这是提高我对 OOP 理解的好习惯,而且我担心它是否有效,我开始给出它为了让人们对其进行测试,我最终会从事其他工作。我希望能够更好地概念化我的项目,我认为这可能是改进它的好机会。

PS:如果不是很明显,我不是受教育背景的程序员:)

4

3 回答 3

2

您可以使用抽象工厂来创建知道如何根据特定参数创建问题的工厂。
至于通知,您可以使用Observer Pattern。研究它们并以您喜欢的语言查看示例

于 2012-04-24T16:06:06.410 回答
2

考虑两件事:

  1. 哪些对象使用Question 对象?他们需要问题做什么?那就是我们谈论问题的接口。
  2. 问题如何做这些事情?问题的行为。

最初,只考虑接口。我不清楚我们需要这个问题做什么。在我看来,一个答案是自由格式文本的问题和一个提供“从 A 到 D 中选择一个”的问题和一个询问“从 A 到 D 中选择一个或多个”的问题在 UI 中可能会非常不同. 那么你是在“问题:请展示自己,得到你的答案并告诉我用户的分数”还是“问题:你的文字是什么?问题:你采取什么样的答案?问题:你的四个选项是什么? ? 问题:用户输入'a'他们得了什么?

一旦清楚了问题的职责,就可以考虑适当数量的不同 Question 接口和类,从而决定是否需要创建模式,例如 Factory。当您有许多不同的类都实现相同的接口时,工厂工作得很好。

工厂:去问我一个问题。问题:去问用户。

于 2012-04-24T16:09:25.850 回答
1

我有一个在生产环境中运行的简单测验应用程序 =) 有不同类型的问题,具有不同的行为(应该以不同的方式提出、回答和提示)。问题有不同的复杂性等。

在我的情况下,最合适的解决方案是创建带有一些抽象方法(它也可以是接口)和不同实现的问题超类。还有 QuestionGenerator (作为工厂工作),工厂,基于一些输入返回不同的实现。

想想你的问题的界面(公共部分)并使用工厂模式。可能有更复杂的场景,您可以在其中找到使用 AbstractFactory 或 Builder 模式的一些优势。

在我的简单情况下,提取接口就足够了

于 2012-04-24T16:22:47.343 回答