На стороне клиента (помимо административного модуля) существует две основные подсистемы: интерфейс пользователя и система связей. На стороне сервера — три основные подсистемы: связей, планирования и почтового интерфейса, который объявляет пользователю об изменениях в расписании.
4. Спроектируйте интерфейсы к классам той части программы, обсуждаемой в упражнении 3, которая относится к резервированию гостиничных номеров.
Для организации конференции или деловой встречи необходимо зарезервировать помещение на определенное время. Этим занимается организационный комитет, который должен знать конкретное время проведения встречи и список участников.
В качестве объектов, вероятно, следует определить всех возможных пользователей системы, а также все имеющиеся залы заседаний и номера гостиниц. Не забудьте также включить для календаря и класс Meeting, который инкапсулирует все, что известно о конкретной встрече или конференции.
Приведем прототипы перечисленных выше классов.
class Calendar_Class; // ссылка на класс
class Meeting, // ссылка на класс
class Configuration
{
public:
Configuration();
~Configuration();
Meeting Schedule( ListOfPerson&, Oelta Time duration );
Meeting Schedule( ListOfPerson&, Delta Time duration, Time );
Meeting Schedule( ListOfPerson&, Delta Time duration, Room );
ListOfPerson& People(); // открытые методы доступа
ListOfRoom& Rooms(); // открытые методу доступа
protected:
ListOfRoom rooms;
ListOfPerson people;
};
typedef long Room_ID;
class Room
{
public:
Room( String name, Room_ID id, int capacity. String directions description = "" );
~Room();
Calendar_Class Calendar();
protected:
Calendar_Class calendar;
int capacity;
Room_ID id;
String name;
String directions; // где этот гостиничный номер?
String description;
};
typedef long Person_ID;
class Person
{
public:
Person ( String name, Person_ID id );
~Person();
Calendar_Class Calendar(); // место доступа для добавления встреч
protected:
Calendar_Class calendar;
Person_ID id;
String name;
};
class Calendar_Class
{
public:
Calendar_Class();
~Calendar_Class();
void Add( const Meeting& ); // добавляем встречу в календарь
void Delete( const Meeting& );
Meeting* Lookup( Time ); // проверяем, не назначена ли уже встреча на это чис-
Block( Time, Duration, String reason = "" );
// резервируем время...
protected:
OrderedListOfMeeting meetings;
};
class Meeting
{
public:
Meeting( ListOfPerson&, Room room, Time when, Duration duration, String purpose = "" );
~Meeting();
protected:
ListOfPerson people;
Room room;
Time when;
Duration duration;
String purpose;
};
День 19
Контрольные вопросы
1. Какова разница между шаблоном и макросом?
Шаблоны являются средствами программирования языка C++, поддерживающими контроль за соответствием типов данных. Макросы выполняются препроцессором и не обеспечивают безопасности работы с типами.