You are on page 1of 12

Лабораторна робота 5.

Робота з класами. Реалізація принципу інкапсуляції. Конструктори та


деструктори

Мета роботи: вивчити реалізацію основних принципів об’єктно-


орієнтованого програмування на мові C++.

6.1 Ви навчитесь:
По завершенні цього розділу Ви будете вміти:
 створювати класи, об’єкти
 реалізовувати основні принципи ООП
 пояснити реалізацію конструкторів та деструкторів

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


ООП — парадигма програмування,в основу якої покладено принципи
інкапсуляції (encapsulation), наслідування (inheritance), поліморфізму
(polymorphism) — три ключові принципи ООП —та у якій центральними
поняттями є клас (class) та об’єкт (object). Також можна зустріти підходи, які
включають у визначення ООП крім трьох згаданих принципів ще три:
абстракція (abstraction), пересилка повідомлень (messaging) та модульність
(modularity).
Метод об’єктно-орієнтованого моделювання передбачає послідовне
виконання двох етапів: об’єктно-орієнтованого аналізу та об’єктно-
орієнтованого проектування. Тому термін “об’єктно-орієнтоване моделювання”
еквівалентний терміну “об’єктно-орієнтований аналіз і проектування” (ООАіП).
Аналіз – широке поняття. Його зміст детальніше відображають терміни
аналіз системних вимог (тобто дослідження вимог до майбутньої програмної
системи) та об’єктний аналіз (тобто дослідження об’єктів предметної області).
При цьому під предметною областю розуміють ту частину реального
світу, що має істотне значення чи безпосереднє відношення до процесу
функціонування програми. Іншими словами: предметна область містить у собі
тільки ті об’єкти і взаємозв’язки між ними, які необхідні для опису вимог і
умов розв’язання деякої задачі.
У процесі проектування головну увагу звертають на концептуальні
рішення, які забезпечують виконання системних вимог, а не на питання
реалізації. У процесі об’єктно-орієнтованого проектування визначають
програмні об’єкти та способи їхньої взаємодії/або схеми баз даних.
У результаті аналізу, зазвичай, оформляють словник (або глосарій)
предметної області (містить текстовий опис термінів, сутностей, користувачів
тощо) і технічне завдання, у якому сформульовано функціональні та
нефункціональні вимоги до системи. До нефункціональних вимог зачислено
питання надійності, зручності використання, продуктивності, можливості
супроводу програм, питання безпеки, проектні та апаратні обмеження тощо.
Отже, для подальшого коректного розуміння понять ООП формалізуємо
визначення понять :
Клас (class) — це тип (структура даних), що описує внутрішнє
влаштування об’єктів (реальних об’єктів) та способи їх взаємодії із оточуючим
середовищем (програмним середовищем). Клас, по суті, є програмною моделлю
об’єктів реального світу.
Об’єкт (object), або екземпляр класу, або інстанція (instance) —
сутність, що існує і функціонує у адресному просторі обчислювальної системи
та є фактичною реалізацією класу із конкретними значеннями параметрів та
характеристик, передбачених даним класом.
Інкапсуляція (encapsulation) — властивість системи, що дозволяє
поєднати дані і методи роботи з ними, приховавши деталі реалізації від
користувача. При цьому методи та дані класу, що залишаються доступними
для безпосереднього використання користувачем, називають інтерфейсними
або, у сукупності, інтерфейсом класу. Дані, що описують клас, називають, як
правило, його атрибутами чи полями, а функції, що описують методи обробки
цих даних, називають операціями або методами.
Ключовим поняттям в об’єктно-орієнтованому програмуванні на С++ є
поняття класу.
Клас в С++ – це практична реалізація абстрактного типу даних засобами
мови програмування С++ [1]. Фактично клас – це визначений програмістом
нестандартний тип даних, тому поняття полів і методів класу повністю
співпадають з аналогічними поняттями абстрактного типу даних. Процес
визначення класу складається з двох частин.
Перша частина – це опис класу. В цій частині визначається структура
класу, а саме кількість та типи полів (властивостей) класу, кількість методів,
кількість та типи вхідних параметрів методів, а також типи результатів
виконання методів. Крім того на цьому етапі визначається область видимості
полів та методів.
Опис класу починається з ключового слова class, за яким слідує назва
класу. Він складається з розділів, які виділяються модифікаторами public,
private, protected, що є заголовками розділів і визначають їх початок та область
видимості полів та методів, розташованих у розділі.
Опис класу обмежується заголовком класу та фігурними дужками „{”,
„}”. Перший розділ опису класу може бути без заголовку. В цьому випадку
вважається, що заголовком розділу є модифікатор private.
Друга частина визначення класу – це опис методів класу. В цій частині
реалізуються засобами мови програмування алгоритми методів класу.
Обидві частини є обов’язковими при визначенні класу і жодна з них не
може бути пропущена. Опис класу та опис методів класу повинні бути
розміщені у одному файлі. Зазвичай їх розміщують у окремих файлах із
розширенням „h” і потім включають за допомогою директиви #include до
кожного з тих файлів проекту, в яких використовуються об’єкти даного класу.
Опис класу (файл MyClass.h)
1 class MyClass
2 {
3 int i; //розділ із типом доступу private
4 public: //розділ із типом доступу public
5 int get_i();
6 void set_i(int);
7 };

Опис методів класу (файл MyClass.cpp):


1 #include "MyClass.h"
2 int MyClass::get_i() { return i; }
3 void MyClass::set_i(int x) { i=x; return; }
4 int main() {
5 return 0;
6 }

Як було сказано вище, клас – це абстрактний тип даних. Для того щоб
використати розроблений клас у програмі необхідно оголосити змінну даного
типу. Така змінна буде називатись об’єктом даного класу. Таким чином об’єкт
класу – це конкретна змінна (екземпляр) класу (даного типу інформаційної
структури).
Оголосити об’єкт даного класу можна таким же чином, як і змінну будь-
якого іншого стандартного або заданого користувачем типу. Наприклад,
оголосити об’єкт наведеного вище класу MyClass при умові, що даний клас
описаний у файлі MyClass.h, який знаходиться у одному каталозі з проектом,
можна наступним чином:
1 #include "MyClass.h"
2 int MyClass::get_i() { return i; }
3 void MyClass::set_i(int x) { i=x; return; }
4 int main() {
5 MyClass MyObj; //Оголосили об’єкт даного класу
6 return 0;
7 }
Роздiл атрибутiв призначений для оголошення змiнних класу, які
називаються членами даних. Їх типи в сукупностi задають множину можливих
значень, або станiв об'єктiв класу. Роздiл операцiй призначений для оголошення
і визначення дій, якi можна виконувати над об'єктами класу або, за
термінологією ООП, таких, що виконуються самими об'єктами. Такі операцiї
ще називаються функціями членами або методами класу. В сукупності вони
описують поведінку об'єктiв класу.

6.2.1 Класи та iнкапсуляцiя


Для реалiзації iнкапсуляцiї визначення класу розбивають на двi частини:
iнтерфейс класу і реалiзацiю класу.
Iнтерфейс класу (або протокол класу ) мiстить тiльки оголошення його
елементiв: змiнних і методiв. Визначення методiв у виглядi їх реалiзацiї як
функцiй мови С вiдокремленi вiд iнтерфейсу і розмiщуються в реалiзацiї класу
(тобто за межами класу). Такий пiдхiд дозволяє при відомому лише інтерфейсі
повноцінно використовувати клас, оскільки з iнтерфейсу є зрозумілим, якi в
класi операцiї і як їх викликати. Реалiзацiя методів може бути довiльною, аби
лише вона вiдповiдала семантицi мови. Змiна реалiзацiї при збереженнi
iнтерфейсу і семантики не впливає на програми, якi використовують даний
клас.
В С++ iнтерфейс класу оголошується в файлi заголовків (ФЗ) з
розширенням .hpp (.h), а реалiзацiя класу - в файлi з розширенням .cpp (.c). ФЗ
мiстить оголошення змiнних класу і заголовки (прототипи) функцiй, якi
реалiзовують операції класу.
Кожен член класу має додатковий статус, який задається оголошенням
його в одній з трьох допустимих мовою секцій. Ці секції визначаються
специфікаторами public, protected, private і задають права доступу до членів
класу.
Секція private (або приватна) визначає право доступу до членів,
оголошених в ній, лише для самого класу (тобто лише для функції-членів
класу). Члени, оголошені в цій секції, називаються приватними або закритими.
Секція protected (або захищена) визначає право доступу до членів як для самого
класу, так і для похідних від нього. Члени цієї секції називаються захищеними.
Секція public (або відкрита) ще більше розширює права, які надаються секцією
protected, додатковим введенням можливостей доступу до своїх членів для
об'єктів даного класу. Члени цієї секції називаються відкритими або
загальнодоступними.
1 class A{ // по замовчуванні приватна секція
2 int i1; // закритий по замовчуванні член даних
3 public: // оголошення відкритої секції
4 int i2; // відкритий член даних
5 private: // оголошення ще однієї приватної секції
6 int i3; // ще один закритий член даних
7 protected: // оголошення захищеної секції
8 int i4; // захищений член даних
9 public: // оголошення ще однієї відкритої секції
10 int i5; // ще один відкритий член даних
11 };

6.2.2Конструктори і деструктори
Конструктори і деструктори - це спецiальнi методи класу, якi
автоматично викликаються при створеннi або знищеннi об'єктiв.
Кожний клас повинен мати хоч би один конструктор, але, як правило, їх
задають декiлька. Цільове призначення конструкторів класу є двояким. З
одного боку (основного) - це створення "порожнього" об'єкта, тобто розподiл
пам'ятi для змiнних класу цього об'єкта. З іншого – це додаткова iнiцiалiзацiя
стану об'єкта, тобто заповненя "порожнього" об'єкта, оскільки саме в
конструкторi визначається, якими значеннями потрібно проiнiцiалiзувати
змiннi об'єкта.
Конструктори існують трьох типів: по замовчуванні, з параметрами і
конструктор копіювання (або конструктор копії). Кожен клас може містити
лише один конструктор по замовчуванні, один копіювання і довільну кількість
конструкторів з параметрами. Це визначає можливість перевантаження
конструкторів як звичайних функцій.
Наведемо приклади оголошення конструкторів всiх типiв для деякого
класу Patient:
1 class Patient {
2 char* m_s_Name; // закриті по замовчуванні
3 int m_n_Age; // члени даних
4 public:
5 // Конструктор по замовчуванню
6 Patient();
7 // Конструктори з параметрами для iнiцiалiзацiї
8 Patient(char* name, int Age);
9 Patient(char* name);
10 // Конструктор копiї
11 Patient(const Patient &source);
12 // iншi оголошення - можливi
13 };
14 //Тепер можна написати реалізацію цих конструкторiв:
15 // Конструктор по замовчуванню
16 Patient::Patient() {
17 m_s_Name = "";
18 m_n_Age = 0;
19 }
20 // Конструктори з параметрами
21 Patient::Patient(char* name, int Age) {
22 m_s_Name = name;
23 m_n_Age = Age;
24 }
25 // Конструктор перетворення типу
26 Patient::Patient(char* name) {
27 m_s_Name = name;
28 }
29 // Констуктор копiї
30 Patient::Patient(const Patient &source) {
31 m_s_Name = source.m_s_Name;
32 m_n_Age = source.m_n_Age;
33 }
34
35 //Тепер стають можливими оголошення
36 //об'єктiв, якi приводять до виклику
37 //вiдповiдних конструкторiв:
38 // Виклик конструктора по замовчуванню
39 Patient NN;
40 // Виклики конструкторів з iнiцiалiзацiєю
41 Patient Ivanov ("Ivanov",35), Petrov ("Petrov");
42 // Виклик конструктора копiї
43 Patient theSameIvanov ("Ivanov")=Ivanov;

Деструктор - це метод явного, або неявного знищення об'єкта. Наприклад,


при виходi з блоку всi локальнi об'єкти знищуються і для цього автоматично
викликається деструктор. Звiльняючи пам'ять, яка зайнята об'єктом, деструктор
знищує всi результати роботи конструктора. Тiло декструктора, як правило -
порожнє, оскiльки система сама звiльняє пам'ять. Але якщо конструктор явно
виділяє динамічну пам'ять для членів об'єкта, то в тiлi деструктора має бути
оператор, який звiльняє цю пам'ять перед знищенням самого об'єкта.На відміну
від конструкторів, клас може містити лише один деструктор і обов'язково без
параметрів. Iм'я десктруктора - це iм'я вiдповiдного класу з префiксом "~".
Наприклад, ~Patient() – деструктор класу Patient.
Хоча синтаксично конструктори і деструктори є функціями, проте вони
не можуть повертати значень оскільки їх цільовим призначенням є створення та
знищення об'єктів класу.

6.2.3 Доступ до компонентiв класу


Доступ до компонентiв класу можливий за допомогою операторiв
доступу "." (крапка) і "–>". Оператор "." використовується з об'єктами.
Наприклад, в наведенiй програмi, до елемента print() здiйснено доступ за
допомогою об'єкта V наступним чином:
1 #include <stdio>
2 #include "Ccomplex.h"
3 main() {
4 const Ccomplex j(0,1),R(5000,0),c(0.02,0),L(0.03,0);
5 const double pi = 3.1415926;
6 double f = 60, Om = 2.*pi*f;
7 Ccomplex i(12,0), Z, V, OM(Om, 0);
8 Ccomplex Temp,Temp2;
9 Temp = Add(R, Mult(Mult(OM,j), L)); //R + j * OM * L
10 Temp2=Div(1,Mult(Mult(Om,j),c));
11 Z=Add(Temp,Temp2);
12 V = Mult(Z, i);
13 V.print();
14 }

Оператор "–>" використовується з вказiвниками на класовi об'єкти:


1 Ccomplex *W = new Ccomplex;
2 W->print();
Тут оператор new створює новий об'єкт типу Ccomplex з вказiвниками W
на цей об'єкт.

Лише після створення змінної класу (екземпляру, об’єкту), що має тип


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

1 class line {
2 public:
3 int x1, y1, x2, y2;
4 line(int _x1, int _y1, int _x2, int _y2);
5 void show();
6 void move(int x,int y);
7 ~line();
8 };
9 //… … … … … … … … …
10 void main()
11 {
12 // створюється об'єкт s класу line
13 line s(12,43,33,43);
14 int localx, localy;
15 localx=s.x1; //доступ до елементу-даних x1
16 localy=s.y1; //доступ до елементу-даних y1
17 s.show(); //доступ до елемента-функції show();
18 }

Отже, доступ до членів класу здійснюється за допомогою оператора


“крапка”(.), наприклад – object.data. Цей оператор повідомляє про те, що
потрібно забезпечити доступ до елементу класу data, змінна якого являє собою
окремий його екземпляр – object. Зрозуміло, що виклик елемента-функції без
вказівки екземпляра класу також неможливий. Синтаксис виклику такої функції
нагадує суміш синтаксису доступу до елементів-даних та виклику звичайної
функції – object.funk(). Кожний екземпляр класу має свою множину даних та
функції-елементи працюють з окремим набором даних, що належить змінній.
Екземпляр, для якого викликається функція-елемент, є “поточним” та всі
посилання на елементи-дані мають відношення саме до цього екземпляру, якщо
не посилаються явно на інший екземпляр. Адреса екземпляру передається
функції як неявний прихований аргумент, що має назву this (цей, поточний).
Цей тип завжди є покажчиком на екземпляр відповідного класу, що, зокрема,
знаходить своє застосування при перевантаженні операцій. Кожного разу, коли
функція-елемент посилається на елемент поточного класу без явної вказівки
екземпляру, завжди вважається, що цей екземпляр this:
1 class demo {
2 int i;
3 public:
4 void load_i(int val) {
5 this->i=val;
6 }
7 void get_i()
8 {
9 return this->i;
10 }
11 };

6.2.4 Статичні члени класу


Члени класу, оголошені з модифікатором класу пам'яті static, носять назву
статичних членів класу. Вони є загальними для усіх об'єктів даного класу:
змінивши значення статичного члену класу в одному об'єкті, ми отримаємо
змінене значення в усіх інших об'єктах. Оголошення статичних членів-даних
класу в середині оголошення класу не буде одночасно описом змінних,
оскільки при цьому під ці дані пам'ять не виділятиметься. Це слід робити в
програмі окремо. Таким чином, усі об'єкти класу посилатимуться на одне й те ж
саме місце у пам'яті.
Функції-елементи класу також можуть бути оголошені статичними, але
оскільки вони не отримують прихований покажчик this, вони не можуть
звертатися до нестатичних членів класу. Крім того, статична функція не може
бути віртуальною. Звертання до статичних функцій та елементів можливе
навіть тоді, коли ще не створено жодного об'єкту класу, в якому
використовуються статичні дані. Якщо функція func() є статичною функцією
класу А, її можна викликати таким чином:
А::func();

6.3 Порядок виконання


Розробити програму згідно варіанту, детально прокоментувати код:
1. Побудувати систему класів для опису плоских геометричних фігур:
коло, квадрат, прямокутник. Передбачити методи для створення
об'єктів, переміщення на площини, зміни розмірів і обертання на
заданий кут.
2. Побудувати опис класу, що містить інформацію про поштову адресу
організації. Передбачити можливість роздільної зміни складових
частин адреси, створення і знищення об'єктів цього класу.
3. Скласти опис класу для представлення комплексних чисел з
можливістю задання дійсної і уявної частин як числами типів double,
так і цілими числами. Забезпечити виконання операцій додавання,
віднімання і множення комплексних чисел.
4. Скласти опис класу для об'єктів - векторів, що задаються
координатами кінців у тривимірному просторі. Забезпечити операції
додавання і віднімання векторів з одержанням нового вектора ( чи
суми/різниці), обчислення скалярного добутку двох векторів,
довжини вектора, cos кута між векторами.
5. Скласти опис класу прямокутників зі сторонами, паралельними осям
координат. Передбачити можливість переміщення прямокутників на
площині, зміну розмірів, побудова найменшого прямокутника, що
містить два заданих прямокутники, і прямокутника, що є загальною
частиною (перетинанням) двох прямокутників.
6. Скласти опис класу для визначення одномірних масивів цілих чисел
(векторів). Передбачити можливість звертання до окремого елементу
масиву з контролем виходу за межі індексів, можливість задання
довільних границь індексів при створенні об'єкта і виконання
операцій поелементного додавання і віднімання масивів з
однаковими межами індексів, множення і ділення всіх елементів
масиву на скаляр, друку (виводу на екран) елементів масиву по
індексах і всього масиву.
7. Скласти опис класу для визначення одномірних масивів рядків
фіксованої довжини. Передбачити можливість звертання до окремих
рядків масиву по індексах, контроль виходу за межі індексів,
виконання операцій поелементного зчеплення двох масивів з
утворенням нового масиву, злиття двох масивів з виключенням
повторюваних елементів, друк (вивід на екран) елементів масиву і
всього масиву.
8. Скласти опис класу многочленів від однієї змінної, що задаються
ступенем многочлена і масивом коефіцієнтів. Передбачити методи
для обчислення значення многочлена для заданого аргументу,
операції додавання, віднімання і множення многочленів з
одержанням нового об'єкта - многочлена, друк (вивід на екран) опису
многочлена.
9. Скласти опис класу одномірних масивів рядків, кожен рядок
задається довжиною і покажчиком на виділену для неї пам'ять.
Передбачити можливість звертання до окремих рядків масиву по
індексах, контроль виходу за межі індексів, виконання операцій
поелементного зчеплення двох масивів з утворенням нового масиву,
злиття двох масивів з виключенням повторюваних елементів, друк
(вивід на екран) елементів масиву і всього масиву.
10.Скласти опис об'єктного типу TMatr, що забезпечує розміщення
матриці довільного розміру з можливістю зміни числа рядків і
стовпців, вивід на екран підматриці будь-якого розміру і всієї
матриці.
11.Створіть клас для харчових продуктів, який включає назву, вагу
порції, енергетичну цінність (в калоріях), вміст білків, жирів та
вуглеводів. Напишіть функцію, яка згідно заданого переліку
продуктів обчислює сумарну енергетичну цінність обіду.
12.Реалізуйте клас person, який містить дані для зберігання ПІБ, віку,
професії, домашньої адреси та телефону людини. Напишіть функцію
person::print(), яка виводить на екран дані про особу у вигляді візитної
картки (відцентрувати ПІБ і т.п.)
13.Спроектуйте та реалізуйте клас quadratic для зберігання квадратного
многочлена. Напишіть методи для знаходження дискримінанту,
коренів многочлена та виводу многочлена на екран у звичному
математичному вигляді.
14.Створіть клас для зберігання цілих чисел довжиною 10 байт.
Забезпечте виконання основних арифметичних операцій над
об'єктами класу та стандартними цілими типами даних.
15.Для класу з варіанту 4 напишіть оператори вставки в потік (<<) та
виділення з потоку (>>). Створіть методи для перетворення
числового значення, що міститься в об'єкті, в стрічку та навпаки, із
стрічки в число.
16.Реалізуйте клас matrix для зберігання цілочисельних матриць
розміром до 10х10. Забезпечте індексацію елементів матриці, друк
заданого стовпця, заданої стрічки та матриці загалом.
17.Для класу з варіанту 6 створіть методи для знаходження
максимального та мінімального елементів матриці, а також метод для
множення матриць (перевантажений оператор *).
18.Створіть клас vector для зберігання цілочисельного одномірного
масиву розмірністю від 10 до 10 000 елементів. Пам'ять під елементи
масиву виділяйте динамічно. Забезпечте індексацію елементів
масиву.
19.Для класу з варіанту 8 реалізуйте методи для знаходження
мінімального та максимального елементу масиву, сортування
елементів у зростаючому порядку.
20.Розробіть клас myString для роботи із стрічковими даними. Клас
повинен містити методи для роботи з потоками (<< та >>). Потрібно
забезпечити можливість конкатенації стрічок (оператор +), операції
присвоєння (=) та знаходження довжини стрічки.
21.Створити клас «точка з її координатами та кольором» . На його базі
створити клас «лінія» (задавати двома точками) з функціями:
відображення на екрані та переміщення по екрану. Також функції, які
б повертали координати середини відрізка та довжину відрізка.
22.Створити клас книга в якому містилась би інформація про автора, рік
видання, видавництво, тему, об’єм (к-ті сторінок). Створити методи
як і б виводили список книжок одної тематики.
23.Створити клас книга в якому містилась би інформація про автора, рік
видання, видавництво, тему, об’єм (к-ть сторінок). Створити методи
як і б виводили всі книжки одного автора.
24.Створити клас книга в якому містилась би інформація про автора, рік
видання, видавництво, тему, обсяг (к-ть сторінок). Створити методи
як і б сортували бібліотеку за роками видання.
25.Створити базовий клас персона з даними про неї. Надбудовою має
бути клас студент з доповненими даними про місце навчання та
групу та клас група зі списком студентів. Передбачити функцію
сортування записів про студентів в об’єкті група.
26.Використовуючи класи задачі 26 (доповнити клас студент полем
хобі), створити функцію яка б з масиву студентів створювала їх
групу, відбір робити за вподобаннями.
27.Створити клас регіон з наступними даними: назва обл., к-ть
мешканців, площа, к-ть навчальних закладів, к-ть промислових
підприємств. Створити метод для виконання наступної дії: вивести
назви областей з найбільшою і найменшою густотою населення.
28.Створити клас регіон з наступними даними: назва обл., к-ть
мешканців, площа, к-ть навчальних закладів, к-ть промислових
підприємств. Створити метод для виконання наступної дії: вивести
назви областей з найбільшою і найменшою зайнятістю населення.
29.Створити клас регіон з наступними даними: назва обл., к-ть
мешканців, площа, к-ть навчальних закладів, к-ть промислових
підприємств. Створити метод для виконання наступної дії:
побудувати стовпчикову діаграму зайнятості населення всіх
областей.
30.Створити клас регіон з наступними даними: назва обл., к-ть
мешканців, площа, к-ть навчальних закладів, к-ть промислових
підприємств. Створити метод, який би малював на екрані коло
(співрозмірне з площею) поділене на 3 сектора кожен з яких іншим
кольором та має означати зайнятість населення, к-ть населення на
один навчальний заклад, густота населення.

6.4 Порядок захисту


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

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


1. Поняття класу та об’єкту.
2. Що розуміють під об’єктно-орієнтованим аналізом?
3. Що розуміють під об’єктно-орієнтованим проектуванням?
4. Як визначається об’єкт у предметній області, у програмній реалізації?
Чи розрізняються поняття об’єкт, клас, екземпляр класу?
5. Які основні принципи ООП?
6. Що таке абстракція в контексті ООП?
7. Що таке інкапсуляції?
8. Що таке успадкування?
9. Що таке поліморфізм?
10.Що означає повторне використання коду в контексті ООП?
Які переваги ООП?

You might also like