Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Породження об’єктів

Реалізація класів

Реалізація прикладної програмної системи, яка спроектована за допомогою об’єктно-орієнтованої методології (наприклад, методології ОМТ) мовою С++, починається з визначення класів, розроблених на етапі проектування цією мовою. При цьому бажано зберегти імена і по змозі, інші позначення, введені на етапі проектування. Розглянемо, як реалізувати мовою С++ клас Window, зображений на рис. 85. Зазначимо, що реалізація класу мовою С++ змістовно мало відрізняється від його зображень в об’єктній моделі ОМТ.

class Window

{

public:

// конструктор

Window (Length x0, Length y0, Length width, Length height);

// деструктор

~Window ();

// методи

void add_box (Length x, Length y, Length width, Length height);

void add_circle (Length x, Length y, Length radius);

void clear_selections ();

void cut_selections ();

Group* group_ selections ();

void move_selections (Length deltax, Length deltay);

void redraw_all();

void select_item (Length x, Length y);

void ungroup_ selections ();

private:

Length Xmin;

Length Ymin;

Length Xmax;

Length Ymax;

Void add_to_selections (Shape* shape);

};

У визначенні класу мовою С++ і атрибути, і методи називаються членами цього класу; їх визначення можуть іти в тексті визначення класу у вільному порядку. Члени класу можуть бути загальнодоступними (public) чи приватними (private); поза класом визначено доступ тільки до його загальнодоступних членів, а приватні члени доступні тільки методам свого класу. В розглядуваному прикладі всі атрибути є приватними, а всі методи (крім методу add to selec­tions) — загальнодоступними, а отже, прочитати чи змінити значення кожного атрибута можна тільки за допомогою відповідного методу; це рекомендована, хоч і не обов’язкова технологія програмування мовою С++ (визначення всіх атрибутів класу як приватних називаєтьсяінкапсуляцією даних).

Тип Length має бути визначений користовувачем (звичайно такі визначення робляться в одному із файлів-заголовків, які вставляють у програму по # include). Для визначення типу використовується оператор typedef. Наприклад:

typedef float Length;

або

typedef int Length;

Породження об’єктів

У кожному класі мови С++ можуть бути визначені спеціальні методи (один чи кілька), звернення до яких призводить до породження нового об’єкта цього класу. Такі методи називаються конструкторами. Конструктори можуть мати параметри, що дозволяють визначити початковий стан об’єкта при його породженні. Конструктори мають те саме ім’я, що й ім’я класу, в якому вони визначені, а тому коли до класу належать кілька конструкторів, то вони мають різнитися числом та типом своїх параметрів. Як приклад розглянемо конструктор класу Window (рис. 85).

Window::Window (Length x0, Length y0,

Length width, Length theigth)

{

Xmin = x0; Ymin = y0;

Xmax = x0 + width; Ymax = y0 + height;

}

При зверненні до цього конструктора породжується нове вікно з координатами нижнього лівого кута (x0;y0), шириною width та висотою height. Поруч із розглянутими в цьому класі можуть бути визначені й інші конструктори:

Window (Length x0, Length y0); //берутьcя стандартні розміри вікна

Window (); //беруться стандартні розміри та положення вікна

У мові С++ підтримують три види виділення пам’яті для розміщення об’єктів: у фіксованій глобальній пам’яті (статична пам’ять, static), у системному стеку (автоматична пам’ять, automatic), у "кучі" (динамічна пам’ять, dynamic).

Щоб розмістити об’єкт у статичній пам’яті, достатньо або оголосити його поза якоюсь функцією, або при його оголошенні вказати ключове слово static. Статична пам’ять виділяється компілятором за час компіляції програми і не змінюється за час її виконання. Конструктор може використовуватися для ініціалізації об’єктів, які розміщені у статичній пам’яті (для виділення статичної пам’яті під об’єкт без його ініціалізації — достатньо просто оголосити його). Оголошення Window main … window = Window (0.0, 0.0, 8.5, 11.0) визначає статичний об’єкт main … window (основне вікно), проініціалізований значеннями параметрів конструктора.

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

Window *window = new Window (0.0, 0.0, 8.5, 11.0);

При цьому вираз new Window (0.0, 0.0, 8.5, 11.0) має своїм значенням покажчик на породжений динамічний об’єкт.

Для термінації об’єктів можна використати спеціальний метод, який є одним з членів класу і має назву деструктор. Як і конструктор, він має те саме ім’я, що й ім’я класу, в якому він визначений, але першим символом імені деструктора є тильда (~):

Window::~Window ();

{

// вилучити вікно та перемалювати вивільнену область

}

Нарешті, для звільнення динамічної пам’яті від об’єктів, які вже не потрібні, використовується операція delete, наприклад:

delete window;

Необхідність використання операції delete пов’язана з тим, що в системі С++ не проводиться збирання сміття, і програміст повинен сам дбати про звільнення динамічної пам’яті від непотрібних об’єктів, щоб уникнути її переповнення (в більш сучасній системі програмування Java забезпечується автоматичний збір сміття, що істотно спрощує програмування).




Переглядів: 365

<== попередня сторінка | наступна сторінка ==>
Банки, їх види та функції. Небанківські фінансові установи. | Виклик операцій

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.006 сек.