- •2 Выделение объектов проблемной области: объектно-ориентированная модель задачи, информационная и математическая модели объектов Пример. Представление доски в аудитории в виде объекта
- •Выводы:
- •3 Концептуальная модель класса объектов
- •4 Инкапсуляция атрибутов и методов в классе объектов Понятие инкапсуляции
- •Инкапсуляция в концептуальной модели ооп
- •Реализация членов-функций
- •Указатель this: назначение и использование
- •Проблема защиты членов-данных класса
- •Защита на уровне уровня доступа
- •Защита на уровне значений
- •10 Защита членов-данных, заданных указателями и ссылками
- •11 Защита членов-данных объекта, передаваемого в качестве параметра функции или возвращаемого функцией
- •Реализация и семантика (смысл) чдодвоКов
- •2.11.2 Инициализация чдодвоКов
- •14 ??? Использование членов класса, общих для всех объектов класса, для учета и идентификации объектов класса.
- •15 ??? Использование членов класса, общих для всех объектов класса, для обеспечения тестирования и отладки оо программ
- •2.12.1 Свойства ctorов, предназначенные для реализации модели ооп
- •Автоматический вызов ctorа
- •18 ??? Создание объектов прямым заданием значений членов-данных
- •19 ??? Создание объектов копированием и преобразованием
- •20 ??? Создание объектов класса, использующего объекты других классов в качестве членов-данных
- •22 Проектирование класса по контракту
- •23 Отношение наследования в концептуальной модели ооп.
- •25 Управление доступом в производном классе к членам базового класса
- •27,28 Создание объектов производного класса и задание их начальных состояний
- •29 Назначение виртуальных функций
- •Назначение вф
- •30 Задание виртуальных функций
- •31 Вызов виртуальных функций.
- •32 Виртуальные деструкторы
- •33 Организация вычислений в концептуальной модели ооп
- •Преимущества и недостатки множественного наследования
- •38 Понятие "полиморфизм" в модели ооп. Виды полиморфизма
- •Виды полиморфизма
33 Организация вычислений в концептуальной модели ооп
1) Обмен сообщениями в модели ООП является реализацией идеи децентрализации управления.
2) Объектно-ориентированная программа есть описание взаимодействия объектов.
3) Выполнение объектно-ориентированной программы состоит в обмене сообщениями между объектами.
4) Объекты существуют и реализуют внутреннее поведение. В какой-то момент времени объект передает сообщение одному или нескольким объектам.
5) Выполнение ОО программ заканчивается, когда все объекты перестают передавать со-общения. (Замечание. Практичнее было бы: когда все объекты перестают существо-вать. Впрочем, это влечет невозможность передачи сообщений.)
34 Проектирование обмена сообщениями в программах на языке С++
Определение 33
Сообщение — указание другому объекту на выполнение некоторого действия. Cообщение, в общем случае, содержит три составляющие:
1. объект-получатель сообщения;
2. селектор сообщения — указание, какое действие должен выполнить объект-получатель;
3. параметры, необходимые для выполнения действия.
6) Одной из форм передачи сообщения может быть следующее:
получатель.селектор( список_параметров );
7) Каждый объект, получивший сообщение, обязан выполнить действие, т.е. предоста-вить метод для выполнения действия.
8) Если объект-получатель не может предоставить метод для выполнения заданного дей-ствия, то он обязан выработать сообщение об ошибке.
9) Если у объекта есть метод, который выполняет заданное действие, то этот метод вы-зывается.
10) Объект-отправитель сообщает, как будет выполняться запрошенное действие, т.е. ка-кой конкретный алгоритм будет использоваться для выполнения действия.
11) Действие, задаваемое в сообщении, не является фиксированным в том смысле, что ал-горитм может зависеть от объекта, его выполняющего. Различные объекты, получаю-щие одно и то же сообщение, могут выполнять различные действия. Условно это мож-но назвать «почтовым полиморфизмом».
12) В результате выполнения заданного действия могут быть изменены атрибуты получа-теля, или атрибуты класса, которому принадлежит объект. В результате исполнения запроса действия заданного сообщением, могут быть выработаны сообщения (отчет о выполнении, сообщение с результатом и т.п.).
Определение 34
Поведение объекта — совокупность действий получателя сообщения.
35 Реализация в ОО программе на языке С++ "почтового клиента" для обмена сообщениями и его использование
Замечание. В этом и следующем пункте предполагается система Клиент→сервер→клиент
1) Клиент — важнейшая часть почтовой системы, осуществляющая конечную обработку проблемных сообщений.
2) Клиент взаимодействует с другими клиентами через одни или несколько серверов, выполняя посылку и приём сообщений.
3) Клиент в общем случае имеет следующие функции:
а) отправка сообщения:
1. одному клиенту;
2. [необязательно] всем клиентам;
б) обработка принятого сообщения (выполнение действия, предписанного сообщением);
в) регистрация на сервере (иначе как сервер пошлет сообщение клиенту?);
г) разрегистрация (отмена регистрации) на сервере.
class Client{
Server *s[2];
const unsigned int id;
static unsigned int count_ex;
static unsigned int count;
static unsigned int voice;
public:
static unsigned int getCount();
static unsigned int getCount_ex();
static void setVoice(int s);
int getID();
Client();
~Client();
void regReq(Server *at);
void unregReq(Server *at);
void send(Message msg);
void receive(Message msg, Server *from);
void sConfirmation(Server *to,int about);
void rConfirmation(int from, int about);
};
36 Реализация в ОО программе на языке С++ "почтового сервера" для обмена сообщениями и его использование
1) Сервер — важнейшая часть почтовой системы, обеспечивающая взаимодействие кли-ентов путѐм обработки и передачи сообщений.
2) Сервер организует учет клиентов, их регистрацию и проблемное функционирование.
3) Сервер в общем случае имеет следующие функции:
а) отправка сообщения:
1. одному клиенту;
2. [необязательно] всем клиентам;
б) [необязательно] обработка принятого сообщения;
в) перенаправление сообщения;
г) регистрация клиента (иначе как клиент получит сообщение?);
д) разрегистрация (отмена регистрации) клиента.
class Server{
List<Client> clients;
const unsigned int id;
static unsigned int count_ex;
static unsigned int count;
static unsigned int voice;
public:
int getID();
static unsigned int getCount();
static unsigned int getCount_ex();
static void setVoice(int s);
Server();
~Server();
int reg(Client *c); // 1 - success, 0 - already registered
int unreg(Client *c); // 1 - success, 0 - was not registered
void receive(Message msg, Client *from);
void send(Message msg, Client *to);
void rConfirmation(int from, int about);
void sConfirmation(Client *to, int about);
int isRegistered(Client *who);
List<Client> *getClients();
};
37 Множественное наследование: назначение и использование в ОО программах. Реализация в языке С++
1) Модель ООП предусматривает,что при задании производного класса базовых классов может быть несколько.
2) Язык C++ позволяет задать для производного класса несколько базовых.
Формат задания: class имя_производного: { [ public | protected | private ] имя_базы, […] }
3) Одно и то же имя бк нельзя повторять несколько раз при определении отношения наследования.
4) Область видимости пк при множественном наследовании включает область видимости каждого из бк, указанных при задании отношении наследования.
Если в нескольких базовых классах используются члены с одинаковыми именами, то обращение к ним из производного класса возможно только по квалифицированному имени.
5) При создании объекта пк подобъекты бк создаются в том порядке, в котором перечислены имена классов при задании отношения наследования.
6) При разработке конструктора объекта пк со списком инициализации порядок перечисления имен бк в списке инициализации не учитывается. Подобъекты все равно будут инициализированы в том порядке, который указан при определении отношения наследования.
7) При открытом наследовании со стороны всех бк объект пк может использоваться как объект любого из бк, т.е., действует правило подстановки.