Что-то я затянул немного выполнение лабораторных работ некоторых по универу, нужно исправляться. Сегодня решил вернуться ко второй лабе по ООП. Задание таково:
“Разработать объектно-ориентированную библиотеку для работы со структурами данных по одной из нижеперечисленных тем в соответствии с нижеуказанными требованиями. Свойства и методы для классов разработать в соответствии с известными определениями соответствующих структур данных. Составить тесты для проверки работоспособности библиотеки. Составить программу, демонстрирующую возможности разработанной библиотеки.”
Требования - хрен с ними, а вот тема мне попалась интересная: “Сетевые базы данных (ввод/вывод, навигация)”. Когда я это задание читал в первый раз - я впал в ступор. Потом оклемался, но когда видишь такое задание как-то не по себе становится…
Сетевая бд - это бд, в которой для связи записей используются графы (граф, по курсу структур данных, - это сеть). Т.е. здесь, в отличии от иерархических бд, связи получаются “много к многим” (а там - “один ко многим”).
Поговорил немного с преподами о задании, итог получился такой - “нам не нужна универсальная бд, сделай несколько таблиц статических и связывай их”. Говорил действительно немного - минуты полторы, так что кроме фразы выше я ничего особо не услышал. Сегодня решил хоть чего-нибудь напроектировать, чтобы в пятницу показать преподам и убедится, правильно ли я делаю, или нет. Мысля сейчас такая: есть отдельные таблицы (неважно, как представленные) и есть какой-нибудь класс Relation, который их связывает. Собственно, это очень напоминает обычную иерархическую бд (таблица - связующая таблица - таблица), но как это оформлять по другому я пока что не представляю.
Сел за комп, закодил… Получилось такая фигня:
class Masseur : public Record {
public:
Masseur();
virtual ~Masseur();
private:
char* _name;
char* _surname;
char* _fathername;
char* _qualification;
Date _birthday;
};
class Service : public Record {
public:
Service();
virtual ~Service();
private:
char* _name;
char* _part;
int _duration;
double _price;
};
class MasseurServiceRelation : public Relation {
public:
MasseurServiceRelation();
virtual ~MasseurServiceRelation();
private:
void add(Masseur*, Service*);
void remove(Masseur*, Service*);
void remove(Service* service);
void remove(Masseur* masseur);
};
Сейчас сижу и думаю, правильным ли путем я иду…
PS. А первые две таблицы очень напоминают паттерн ActiveRecord, на правда ли? :)






November 1st, 2007 at 13:00
Хорошие у вас задчки. Заставляют подумать. У нас таких было не так много…
November 1st, 2007 at 18:51
Да у нас тоже не много. Это одна из интересных.