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


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


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


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


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


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


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


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


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


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



Реалізація залежностей

Залежності в мові С++ реалізуються за допомогою покажчиків чи за допомогою спеціальних об’єктів. Наприклад, залежність «багато-до-одного» між класами Item та Group реалізована через покажчики:

class Item{

public:

virtual void cut ();

virtual void move (Length deltax, Length deltay)=0;

virtual Boolean pick (Length px; Length py)=0;

virtual void ungroup ()=0;

private:

Group* group;

friend group::add_item (Item*);

friend group::remove_item (Item*);

public:

Group* get_group () {return group;};

};

class group: public Item

{

public:

void cut ();

void move (Length deltax, Length deltay);

Boolean pick (Length px; Length py)=0;

void ungroup (){ };

private:

ItemSet* іtems;

public:

void add_item (Item*);

void remove_item (Item*);

ItemSet* get_іtems() {return items;}

};

Щоразу, коли до залежності додається (чи з неї вилучається) зв’язок, два показники повинні бути змінені:

void Group::add_item (Item*item);

{

item->group = this;

items->add (item);

}

void Group::remove_item (Item*item);

{

item->group =0;

items->remove (item);

}

Методи Group:: add … item та Group:: remove … item можуть змінювати приватні (private) атрибути класу Item, хоч вони визначені у його підкласі Group, оскільки вони визначені як дружні (friends)для класу Item.

У розглянутому прикладі опущені перевірки:

1) чи не є графічний об’єкт, який влючається в групу, членом цієї групи (у цьому разі його не слід ще раз включати в групу);

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

Іноді зв’язані між собою (залежні) об’єкти включають у так звані колективні класи. Як приклад такого класу розглянемо клас ItemSet (набір об’єктів):

Class ItemSet

{

public:

ItemSet(); //скласти порожній набір об’єктів

~ItemSet(); //знищити набір об’єктів

void add(Item*); //включити об’єкт у набір

void remove(Item*); //виключити об’єкт з набору

Boolean includes(Item*); //перевірити наявність об’єкта у наборі

Int size(Item*); //визначити кількість об’єктів у наборі

}

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

Залежності між класами можна реалізувати і за допомогою спеціальних класів (кожний об’єкт такого класу описує зв’язок між об’єктами відповідних класів). У цьому разі атрибути класу відповідають атрибутам описуваної ним залежності.




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

<== попередня сторінка | наступна сторінка ==>
Class Item | Шаблони, шаблони-класи

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

  

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


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