Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KPZ.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
875.49 Кб
Скачать

Змістовий модуль 7. Створення коду програмного класу

Лекція 12. Створення коду програмного класу

Література:1 [101-106]; 2[307-323]

Загальні положення. Структури даних. Створення коду для класа Register.

Загальні положення

Для створення програмного коду класу використовуються діаграми даного класу й пов'язаних з ним класів. Часто також корисно розглянути відповідні фрагменти діаграм взаємодії.

Структури даних

Раніше було обговорено, що пасажир може купити квиток на поїзд прямого сполучення або з одним пересадженням.

Для представлення шляху пасажира потрібно створити структуру (ItinDA).

struct ItinDA {char s11[20], s12[20], s21[20], s22[20], sx[20], std[20], sta[20]; int k; };

Інформацію про місце можна представити структурою Seat05.

};

Struct Seat05

{int v, //номер вагона s, //номер місця

};

Інформацію про поїзди можна представити структурою Trn

struct Trn {int tr1, tr2, k;

};

Написання коду для класу Register

Для написання програмного коду мовою С++ скористаємося діаграмою класу Register (рис. 12.1) і діаграмами взаємодіючих з ним класів.

Рис. 12.1 Діаграма класу Register

Усі дані, що мають типи класів RTS-системи, повинні бути покажчиками, тому що вони створюються у різні моменти роботи системи відповідно до потреби.

class Register {protected:

Itinerary *pi; //Значення передаються з Booking_Office

Train *pt;

StationSpecification *pss;

Map_Seat *pms;

Tariff *pta;

Order *po; public:

Register(Itinerary *, Train *, StationSpecification *,Map_Seat *, Tariff *); //Прогр. ріш.

П0 – start_Up void newOrder( ); //Прогр. ріш. П1 – newOrder //Замість типу Text використовуємо тип char* //Замість типу Boolean використовуємо тип int int isItinerary(char *, char*);//Прогр. ріш. П2 – isItinerary int isTrain(char*,char*);

int isSeat(char*);//Прогр. ріш. П3 – isSeat

Money getPrice( );

Money makePayment(Money);

};

/*Конструктор класу Register викликає об’єкт Booking-Office, який передає йому адреси п’яти об’єктів*/

Register::Register (Itinerary *pi1, Train *ptr1,StationSpecification *pss1, Map_Seat *pms1, Tariff *pta1) {pi=pi1; pt=ptr1; pss=pss1; pms=pms1; pta=pta1; } void Register::newOrder()

{po=new Order; }/*

Для реалізації інших методів класу Register необхідно одержати інформацію про методи класу Order.

/* Наприклад, метод isItinerary класу Register викликає метод isItinerary класу

Order*/ int Register::isItinerary(char *std, char *sta) {int b=po->isItinerary(std, sta, pi, pss); return b;

}

Контрольні запитання

  1. На підставі яких даних будується розділ даних програмного класу?

  2. Як ураховуються асоціації діаграми програмних класів при створенні коду класів?

  3. На підставі чого створюються методи програмного класу?

Лекція 13. Створення коду для класа Order

Література: 1 [101-106]; 2[307-323]

Створення коду для класа Order. Ітеративний процес та модифікація коду. Класиконтейнери.

Створення коду для класа Order

З урахуванням розглянутих раніше структур даних опис класу Order приймає наступний вид.

class Order {char stD[20], stA[20], date[8], clT[10], clS[10]; Seat05 s1;

Seat05 s2;

//Параметри рядків мають бути погодженими з уведеними структурами

Money price;

//Доступ до усіх об’єктів має відбуватися через покажчики Trn * tr;

Itinerary *pi;

Train *pt;

StationSpecification *pss;

Map_Seat *pms;

Tariff *pta;

Payment *ppay; Way *pway; public: Order( );

int isItinerary(char*,char*,Itinerary*,StationSpecification*); int isTrain(char*,char*,Train*); int isSeat(char*,Map_Seat*); Money getPrice(Tariff*);

Money makePayment(Money);

};

Ітеративний процес і модифікація коду

Перевага ітераційного та інкрементального процесу розробки полягає в тому, що результати попередньої ітерації можуть служити початковими даними наступної (рис.

13.1).

Рис. 13.1 Ітеративний процес розробки ПЗ

Якщо код, створений на ітерації N після тестування й доробки, відрізняється від результатів проектування цієї ітерації, то проектні рішення, засновані на цій реалізації, повинні бути відображені для наступних реалізацій. Виникає проблема синхронізації артефактів. Відновлення діаграм бажано по можливості автоматизувати, використовуючи технологію зворотного проектування Case-засобів (генерування діаграм пакетів, класів і послідовностей шляхом аналізу коду).

Класи – контейнери в програмному коді

Часто для об'єкта необхідно забезпечити видимість групи інших об'єктів. Звичайно це випливає безпосередньо зі значення кратності, зазначеного на діаграмі класів. В об’єктно-орієнтованих мовах такі зв'язки в основному реалізуються за допомогою проміжного контейнера або колекції об'єктів. У класі, з яким пов'язане одиничне значення кратності, визначається атрибут-посилання, що містить покажчик на екземпляр контейнера/колекції. А в самому контейнері містяться екземпляри класу, для якого значення кратності перевищує одиницю.

У бібліотеці Java є такі контейнерні класи, як ArrayList і HashMap, у мові Visual C++ – класи СAarray і CList (шаблонові типи) і інші.

Контрольні запитання

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

  2. Чим обумовлюється порядок реалізації програмних класів?

  3. Які засоби використаються при програмуванні колекцій?

Приклад застосування колекції

Наприклад, для об'єкта Way необхідно забезпечити видимість групи екземплярів класу Train (рис. 13.2).

Рис. 13.2 Фрагмент діаграми програмних класів, що використовує колекцію

Нижче показаний фрагмент коду класу Way, де для реалізації контейнера, що містить об'єкти класу Train, використаний шаблоновий клас CArray мови C++. Class Way

{ . . .

CArray<Train, Train&> ListOfTrain;

ListOfTrain.SetSize(2);

. . .

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]