Об’єктно-орієнтоване проектування програмних систем. Послідовність розробки програмного продукту на основі об’єктноорієнтованого підходу, страница 7

Передача інформації від класу до класу називається передачею повідомлення. Програмно передача повідомлення може реалізовуватися за рахунок виклику об’єктом одного класу методу об’єкта іншого класу, або читання чи зміни значень властивостей іншого об’єкта. При цьому один з класів "ініціює" зв’язок, а інший "виконує його замовлення". Об’єкт (і клас) – ініціатор називається клієнтом, об’єкт, що виконує замовлення – сервером.   

Нехай є два об'єкти А і В і зв'язок між ними. Щоб А міг послати повідомлення В, треба, щоб В був видимий для А. Ми можемо не піклуватися про це на стадії аналізу, але коли справа доходить до реалізації системи, ми повинні забезпечити видимість зв'язаних об'єктів. Є чотири  наступні способи забезпечити видимість: 

-  сервер глобальний стосовно клієнта; 

-  сервер (або вказник на нього) переданий клієнтові як параметр методу;

-  сервер є частиною клієнта;

-  сервер локально породжується клієнтом у ході виконання якої-небудь операції. 

Який саме з цих способів вибрати - залежить від тактики проектування. 

Зручним способом формалізації визначених зв’язків на етапі аналізу є використання діаграм класів у нотації Буча [1] (інший спосіб – на основі мови UML буде розглянуто пізніше).  

В нотації Буча клас представляється зображенням хмарки (рис. 2.1). На рис. 2.1а показано загальний вигляд класу, на рис. 2.2б показано приклад зображення на діаграмі класу TLine з попередньої лабораторної роботи.

               а) загальний вигляд класу                                 б) клас TLine

Рис. 2.1. Представлення класів в нотації Буча

На рис. 2.2 показано зображення асоціацій на діаграмах класів. Так як характер зв’язку в цьому випадку невизначено, то одержати відповідний код неможливо. 

Рис. 2.2. Представлення зв’язку між класами типу "асоціація" в нотації Буча

На рис. 2.3а показано зображення наслідування на діаграмах класів. На рис. 2.3б представлено код, що реалізує показаний зв’язок між класами.

а) зображення наслідування на діаграмі      б) фрагмент коду Object Pascal  Рис. 2.3. Представлення зв’язку між класами типу "наслідування" в нотації Буча

На рис. 2.4а показано зображення агрегації на діаграмах класів. На рис.

2.4б представлено код, що реалізує показаний зв’язок між класами.

а) зображення агрегації на діаграмі          б) фрагмент коду Object Pascal  Рис. 2.4. Представлення зв’язку між класами типу "агрегація" в нотації Буча

На рис. 2.5а показано зображення наслідування на діаграмах класів. На рис. 2.5б представлено код, що реалізує показаний зв’язок між класами.

{TController – клас – клієнт}

{TCom_Interface – клас – сервер}

 type TController = class   {Сервер є частиною клієнта}   Port: TCom_Interface;

 {Сервер є параметром методу}   procedure Put (Port: 

                                                                                                                    TCom_Interface);

   . . .

 end;

а) зображення використання на діаграмі      б) фрагмент коду Object Pascal  Рис. 2.5. Представлення зв’язку між класами типу "використання" в нотації Буча

Завдання 

1.  Для наведеної на рис. 2.6 діаграми класів, записати відповідний їм код мовою Object Pascal. Перевірити розроблений код на наявність помилок шляхом компіляції.

Рис. 2.6. Діаграма класів абстрактного програмного продукту

2.  Існує програмний продукт, що призначений для обробки графічних зображень, заданих у векторному вигляді. На рис. 2.7 наводиться його діаграма класів. Вивчіть діаграму класів, визначте та запишіть функціональне призначення кожного з класів. Розробіть код, що реалізує заголовки даних класів. Запишіть ланцюжок для передачі повідомлень в процесах "Збереження фігури на диск" та "Виведення на екран зображення".

Рис. 2.7. Діаграма класів програмного продукту,  призначеного для обробки графічних зображень

До звіту включити:

1.  Конспективний виклад теоретичних відомостей, необхідних для виконання лабораторної роботи.