Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Oop2.pdf
Скачиваний:
10
Добавлен:
02.02.2015
Размер:
274.05 Кб
Скачать

 

Зміст

Теоретичні відомості..................................................................................................

2

Термінологія................................................................................................................

2

Типові конструкції мови............................................................................................

2

Права доступу до членів класу..................................................................................

3

Завдання на лабораторну роботу...............................................................................

5

Індивідуальне завдання..............................................................................................

5

Література....................................................................................................................

7

Тема. Спадкування. Права доступу для членів класу та при спадкуванні. Мета: отримати основні навики розробки власних ієрархій класів; навчитись

коректно використовувати права доступу для розмежування членів класу. Теоретичні відомості

Термінологія

Спадкування — процес створення нових класів на базі вже існуючих класів Ієрархія — структура класів, пов’язаних батьківськими відносинами.

Права доступу — режими обмеження, що діють для забезпечення цілісності даних.

Типові конструкції мови

Спадкування

Необхідно зазначити, що один із методів між класової взаємодії при побудові архітектури програми. Для використання цього механізму необхідно зазначити, що клас спадкоємець «успадковує» усі властивості базового класу, проте має змогу визначити власні додаткові члени, а також перевизначити поведінку вже існуючих методів.

Схематично модель спадкування приводять наступним чином:

Базовий клас

Клас

спадкоємець

Малюнок 1 – Схематичне позначення спадкування Основною метою спадкування є повторне використання коду у

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

Для прикладу, нам потрібно реалізувати текстове повідомлення(SMS) та мультимедійне повідомлення(MMS). Із предметної області необхідно виділити, що MMS — це розширені можливості для повідомлення, котре може містити ще й додатковий файл із картинкою, аудіо, відео та ін.

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

Розробляючи ієрархії класів потрібно знайти подібності та відмінності для усіх класів ієрархії. Саме під час цього процесу можна зрозуміти чи класи

будуть належати до однієї ієрархії. Для простоти задамось, що у одному повідомленні можна додавати лише один файл.

Усі можливості класів виділені у таблиці 1.

Таблиця 1. Можливості класів SMS, MMS

SMS

MMS

 

Атрибути

Текст повідомлення

Текст повідомлення

 

Вміст файлу мультимедіа

 

Методи

Встановити текст повідомлення

Встановити текст повідомлення

Взяти текст повідомлення

Взяти текст повідомлення

 

Додати файл мультимедіа

 

Видалити файл мультимедіа

 

Отримати вміст файлу мультимедіа

По наведеній таблиці видно, що у класі мультимедіа повідомлення «вміщаються» усі члени класу текстове повідомлення і немає лишніх методів від текстового повідомлення. Саме тому можемо запропонувати спадкування мультимедіа від батьківського текстового повідомлення.

Права доступу до членів класу

В загальному права доступу потрібні для забезпечення обмеження доступу до певних членів класів. Зазвичай захищаються в першу чергу дані, а потім також обмежуються методи роботи із ними.

Приклад оголошення класу із правами доступу наведено нижче.

// CLASS DECLARATION class CSmsMessage

{

public:

/** * Конструктор без параметра */

CSmsMessage(void);

public:

/** * Встановлює нову довжину тексту */

void SetText(const char* aText);

/**

*Повертає текст повідомлення

*@return Текст повідомлення

*/

const char* Text() const;

/**

*Повертає загальну довжину тексту

*@return Довжина тексту

*/

size_t TextLength() const;

/**

*Встановлює отримувача

*@param aReceiver Отримувач

*/

void SetReceiver(const char* aReceiver);

/**

*Повертає отримувача

*@return Отримувач

*/

const char* Receiver() const;

private:

//Текст повідомлення char* iText;

//Отримувач

char* iReceiver; protected:

// довжина тексту size_t iLength;

};

В даному випадку всі дані захищені від зовнішнього доступу. Самі дані це iText, а поле iLength представляє собою калькулятивне поле довжини поточних даних для економії часу на постійні обрахунки. Уявіть собі, якщо кожен користувач цього класу буде мати доступ до покажчика iText. Це під час написання програми дозволить напряму виконувати виділення пам’яті, видалення вже виділеного блоку. Ці дії можуть бути помилковими і це призведе до невловних помилок (неправильне поле iLenght), від чого і захищають програмісти один одного.

Хочеться зазначити, що лише нащадки будуть мати можливість пришвидшеної калькуляції, а точніше отримання даних про поточну довжину тексту. Це зроблено лише для прикладу розмежування доступу. Для реальної програми коректніше зробити цей метод публічним.

Зазвичай доступ типу protected використовують для механізму пере визначення поведінки разом із віртуальними функціями, а всі тип даних закривають специфікатором private. Лише для даних абстрактних класів можуть використовувати доступ protected.

Важливо розуміти як розподіляється доступ між членами класів. Для специфікатора доступу немає різниці це метод чи атрибут. Усі режими доступу до членів класів С++ можна привести у таблиці 2.

Таблиця 2. Типи розмежування доступу до членів класів у С++.

 

Власний клас

Клас нащадок

Інші класи

public

має доступ

має доступ

має доступ

protected

має доступ

має доступ

доступу немає

private

має доступ

доступу немає

доступу немає

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

Таблиця 3. Модифікація доступу до членів при спадкуванні

 

Права доступу до

спадкування по

спадкування по

спадкування по

членів класу

public

protected

private

public

public

protected

private

protected

protected

protected

private

private

private

private

private

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