dsherbakov
@dsherbakov
Студент

Как грамотно осуществить декомпозицию?

Начал изучать ООП на C++, передо мной тювстала такая задача:

Цель работы: Получение навыков модульной декомпозиции предметной области, создания модулей. Разработка интерфейсов.

Задание: Разработать программу, состоящую из трех модулей в соответствии с указанным вариантом задания. Первый модуль – основной код программы; второй содержит интерфейсы; третий модуль – реализацию этих интерфейсов. Количество структур данных ("объектов") не менее пяти.

ПРИМЕР

Пусть требуется разработать программу «Часы». Время хранится в структуре TTime (часы, минуты, секунды), которая в свою очередь входит в состав структуры Date. Методы позволяют изменять текущее время и выводить время на экран.

typedef struct ttime {
	int hours; int minute; int sec;
};

struct date {
	ttime time;
	void settime(int, int, int);
	void printtime();
};

#include <stdio.h>
#include "date.h"

void date::settime(int h, int m, int s)
{
	time.hours = h;
	time.minute = m;
	time.sec= s;
}

void date::printtime()
{
	printf("%i:%i:%i", time.hours, time.minute, time.sec);
}

#include <stdio.h>
#include "date.h"

int main()
{
	date a;
	a.settime(23,43,10);
	a.printtime();
	getchar();
	return 0;
}

Мне необходимо сделать тоже самое для задачи:
Турнир Единоборств.

Извеняюсь за оформление, публикую с мобильного)
  • Вопрос задан
  • 255 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
typedef struct ttime {
Си, на ++ не нужен typedef.
И используй наконец тэги для кода.

int hours; int minute; int sec;
Странное именование, обычно пишут hour.

struct date {
ttime time;

которая в свою очередь входит в состав структуры Date.
Странно, ведь это не дата, а скорее Clock — часы.

Методы позволяют изменять текущее время

Ну и где тут измерение?

Моя архитектура.
1. Время. Получение времени из системы, сравнение, вывод в консоль.
2. Часы. Хранят последнее время. Команда «tick» — получить время, сравнить с последним, при неравенстве — сохранить новое и вывести его в консоль.
3. Внешний цикл (может быть как в часах, так и снаружи). Часы тикают, делают небольшую задержку и проверяют на нажатие клавиши.
Пять объектов никак не будет, да и Date нужно только в том случае, если вы реально работаете с датой. Я бы, чтобы докинуть количество объектов до нужного, сделал бы дату (date), время (time) и дату-время (stamp).

Для турнира единоборств (для простоты — без весовых категорий).
• Fighter: имя, всякая информация про него вроде города, клуба и титулов.
• Stub: указатель на Fight + enum (Winner/Loser) — откуда берётся участник. Указателя на Fight нет — тогда TBD (то есть не определился).
• Participant: указатель на Fighter + структура stub.
• Fight: номер, два Participant, дата/время, кто победил (0/1), причина победы (ещё не проводился, KO, TKO, по очкам, неявка…)
• Tournament: содержит список боёв и таблицу результатов.

Можно также разорвать кольцо зависимостей, наладив интерфейс FightInfo, сделав в Stub FightInfo*, а не Fight*, и чтобы Fight реализовывал FightInfo.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы