2012-04-24 2 views
0

Для практики ООП Я работаю над проектом хобби, программой викторины, которая читает таблицу из файла txt и задает вопросы о записях в таблице. Идея состоит в том, чтобы облегчить изучение материала, данного для курса в нашем отделе.OOP design - стратегии создания/шаблоны

До сих пор я писал бит ввода/вывода, составлял довольно скромный графический интерфейс и классы для представления различных типов объектов в datatable. Я не уверен в том, как приступить к ядру программы, хотя, я имею в виду вопрос генерации и проверки.

Моя первая идея состояла в том, чтобы иметь класс AbstractQuestion, который в значительной степени определяет, что вопрос и какие поля он имеет (строковое представление, ответ и уровень сложности). Затем я подумал, что могу писать классы для разных типов вопросов, например, один класс для простых запросов по ценности (например, имя объекта и запрос определенного свойства), другой класс для более сложных вопросов (например, запрос о взаимодействиях объекты и т. д.).

Я не уверен, что это лучший способ пойти. Не могу выразить, почему, но у меня такое чувство, что это не самый простой способ. Было бы разумно работать над классом Factory? По существу, мне нужно:

  • обеспечивает средства для вопроса, который будет сформирован на основе одного или более, лица произвольно выбранные из DataTable
  • различных типов вопросов должны быть создано на время выполнения, на основе входных данных от пользователя (желаемый уровень сложности)
  • вопросы должны быть проверены, и пользователь должен быть уведомлен основным классом Quiz (поэтому вопросы должны быть доступны).

Я мог бы начать простой и реализовать только один тип вопросов, заставить его работать и добавлять новые функции вовремя, но я думаю, что это хорошая практика, чтобы улучшить мое понимание ООП, и, кроме того, я боюсь, если он работает и я начинаю давать это людям, чтобы проверить это, я в конечном итоге в конечном итоге работаю над чем-то другим. Я хотел бы лучше концептуализировать свой проект, и я думаю, что это может быть хорошей возможностью улучшить это.

PS: В случае, если это не было очевидно, я не программист на образовании :)

ответ

1
.

У меня есть простое приложение для викторины, работающее на производстве =) Существуют разные типы вопросов с различным поведением (y нужно спросить, ответить и направить по-разному). Вопросы имеют различную сложность и т. Д.

В моей ситуации наиболее подходящим решением было создание суперкласса Вопроса с некоторыми абстрактными методами (это может быть и интерфейс) и различные реализации. И есть QuestionGenerator (работает как завод), фабрика, основанная на некотором вводе, возвращает другую реализацию.

Подумайте, о вашем интерфейсе (общей части) вашего вопроса и используйте заводской шаблон. Может быть более сложный сценарий, где вы можете найти некоторые преимущества использования тестера AbstractFactory или Builder.

В моем простом случае извлечение интерфейса было достаточно

2

Вы можете использовать Abstract Factory создать заводы, которые знают, как создавать вопросы на основе конкретных параметров.
Что касается уведомления вы можете использовать Observer Pattern. Изучите их и увидеть примеры на языке ваших предпочтений

2

Думайте в терминах двух вещей:

  1. Какие объекты использовать Вопрос объекты? Что им нужно? Вопросы? То есть мы говорим об интерфейсе (-ях) Вопроса.
  2. Как делать такие вещи? Поведение вопроса.

Первоначально думайте только о интерфейсах. Я не совсем понимаю, что нам нужно для этого. Мне кажется, что вопрос, чей ответ - текст свободной формы, и вопрос, который предлагает «выбрать один из А-D», и вопрос, который спрашивает «Выберите один или несколько из А-D», может сильно отличаться в пользовательском интерфейсе , Так вы думаете с точки зрения «Вопрос: пожалуйста, покажите себя, получите свой ответ и скажите мне счет пользователя» или «Вопрос: какой у вас текст?Вопрос: какой ответ вы принимаете? Вопрос: каковы ваши четыре варианта? Вопрос: пользователь ввел «а», что он забил? »

Как только у вас возникла идея ответственности вопроса, вы можете рассмотреть соответствующее количество различных интерфейсов и классов вопросов и, следовательно, решить, будете ли вы нужен созидательный шаблон, такие как Factory Factory работает хорошо, когда у вас есть несколько различных классы все реализующих интерфейса в же

фабрики:.. пойти сделать меня вопрос. вопрос: пойти и спросить у пользователя

Смежные вопросы