Структура данных для приложения типа экзамен

Я пытаюсь создать тестовое (экзаменационное) приложение. Однако у меня возникают трудности с проектированием моих моделей. Может ли кто-нибудь предложить хорошую диаграмму UML для размещения следующих функций:

Иерархия:

  • Модуль имеет единицу (ы)
  • У подразделения есть экзамен(ы)
  • Экзамен содержит вопросы
  • Типы вопросов: (Верно или Ложно, Идентификация, Множественный выбор, Тип соответствия)

Пока это мой первоначальный дизайн: Core Data DesignС этим дизайном я не могу приспособить "Matching Type" типа вопрос. Кроме того, как я могу сохранить свои предыдущие экзамены и легко проверить правильные ответы?


person chlkdst    schedule 15.12.2014    source источник
comment
Разные вопросы следует задавать как ОТДЕЛЬНЫЕ вопросы. Или вы нарушаете правила.   -  person Gangnus    schedule 15.12.2014
comment
Вы можете черпать вдохновение из множества существующих приложений для тестовых экзаменов, например. MoodleDocs: введение в схему базы данных. См. также stackoverflow.com/help/on-topic: работа, которую вы уже проделали для решения проблемы, и описание трудности, с которой вы столкнулись при ее решении   -  person xmojmr    schedule 15.12.2014
comment
Я разделяю озабоченность xmojmr. Со всем уважением, как вы собираетесь чему-то научиться, если кто-то другой сделает вашу работу за вас?   -  person BobRodes    schedule 15.12.2014
comment
Привет @xmojmr Простите, я не смог добавить свою первоначальную работу. Я добавил скриншот моей текущей работы. Надеюсь, это может добавить больше информации.   -  person chlkdst    schedule 16.12.2014
comment
Что означают двойные стрелки? В стандарте UML такого нет.   -  person Gangnus    schedule 16.12.2014
comment
@Gangnus Эта диаграмма была извлечена из модели CoreData. Двойная стрелка означает отношение «ко многим»   -  person chlkdst    schedule 17.12.2014


Ответы (2)


Когда вы не уверены, как соединить два класса, подумайте, не использовать ли между ними еще один класс.

введите здесь описание изображения

person Gangnus    schedule 15.12.2014
comment
Я считаю, что хорошая модель классов должна содержать только те классы, которые действительно необходимы для функционирования системы, и ничего более. Поэтому добавляйте дополнительный класс только тогда, когда вы абсолютно уверены, что требуемое отношение равно M:N. - person Vojtěch Dohnal; 15.12.2014
comment
@VDohnal Или когда какой-то нужный предмет из задачи/реальной жизни упущен. (мы должны различать ответ, данный учеником, и ответ, заданный как правильный). Также, если мы находимся в ООП, мы должны использовать классы для полиморфизма, а не режимы/варианты. И заметьте, слово Тип уже имеет свое значение, не используйте его по-другому! - person Gangnus; 15.12.2014
comment
@VDohnal Хорошая модель класса - это такая модель, которая сделает ваши классы небольшими и простыми. Ваша задача не сделать маленькую саму модель! - person Gangnus; 15.12.2014
comment
Я вижу, у нас тут интересная дискуссия :) Должен сказать, что наличие нескольких классов, обобщенных для одного интерфейса (Вопрос), без указания, какие атрибуты или отношения специфичны для этих отдельных классов, кажется мне вводящим в заблуждение. Но мы уже очень далеки от ОП... - person Vojtěch Dohnal; 15.12.2014

Вы можете создать подобную диаграмму классов (созданную с помощью архитектуры SPARX Enterprise)

введите здесь описание изображения

Но ассоциации между классами зависят от функциональных требований. Например. В этом примере один экзамен относится только к 1 конкретному блоку, но вам может понадобиться экзамен, который может принадлежать 0..N различным блокам. Так что это просто пример.

Также способ сохранения и проверки ответов зависит от дополнительных функциональных требований. Проще всего было бы хранить Ответы Студента со ссылкой на конкретный Вопрос.


Добавление вопроса о соответствии типа немного усложняет ситуацию, вот несколько идей:

введите здесь описание изображения

Модель использует обобщение — Option — это абстрактный класс с двумя унаследованными классами ListOption и MatchingTypeOption. Когда вам нужно сохранить информацию об ответах, то же самое нужно сделать с SelectedOption, потому что вам нужно сохранить выбранные пары опций для соответствия типа.

Но вы также можете хранить только информацию was the answer correct - yes/no.

person Vojtěch Dohnal    schedule 15.12.2014
comment
Фрагмент типа вопрос-вопрос — пример того, как этого делать не следует. Для чего у вас есть классы и интерфейсы? - person Gangnus; 15.12.2014
comment
Какие интерфейсы? Классы UML могут быть, например. сопоставлены с таблицами SQL. - person Vojtěch Dohnal; 15.12.2014
comment
Хороший стиль ООП-программирования настаивает на использовании интерфейсов/абстрактных классов в качестве абстракций вместо TYPE/MODE или подобных вещей. Кстати, ТИП уже имеет свое значение. - person Gangnus; 15.12.2014
comment
Когда вы сопоставляете свои классы (аналитическая модель) с базой данных SQL (технологическая реализация), как вы сопоставляете интерфейсы? Type и QuestionType не одно и то же. - person Vojtěch Dohnal; 15.12.2014
comment
@VDohnal На первой диаграмме в объекте «Ответ» вы имеете в виду доступные варианты / ответы для конкретного экзамена? Или ответ, сделанный студентом? - person chlkdst; 17.12.2014
comment
Ответ ученика. Но это всего лишь очень простой пример, который нужно скорректировать в соответствии с дополнительными требованиями. - person Vojtěch Dohnal; 17.12.2014