
- •Тема 1. Обєктно - орієнтовне програмування 4
- •Тема 2. Основні концепції парадигми програмування 14
- •Тема 7. Універсальна мова моделювання (Unified Modelling Language або uml) 88
- •Тема 8. Бібліотека стандартних шаблонів stl (Standard Template Library) 91
- •Тема 9. Шаблони проектування stl (Standard Template Library) 104
- •Лекція № 1 Тема 1. Обєктно - орієнтовне програмування План лекції
- •Зміст лекції Вступ.
- •1.1. Поняття те визначення ооп.
- •1.2. Об' єктно - орієнтована методологія (оом).
- •1.3. Об' єктно - орієнтовані мови програмування.
- •1.4. Системи і середовища програмування топ.
- •Лекція № 2 Тема 2. Основні концепції парадигми програмування План лекції
- •Зміст лекції
- •2.1. Парадигми програмування: об' єктно - орієнтована парадигма.
- •2.2. Основні концепції топ.
- •2.3. Моделювання. Об' єктна декомпозиція.
- •2.4. Ідеї топ. Топ принцип - поліморфізм.
- •2.5. Інкапсуляція. Наслідування.
- •2.6. Об' єктний рефакторинг.
- •2.7. Системи і середовища програм.
- •Лекція № 3
- •План лекції
- •Зміст лекції
- •3.1. Абстракції даних
- •3.4. Типи, що перераховують
- •3.5. Вирази
- •3.6. Інструкції
- •Лекція № 4
- •План лекції
- •Зміст лекції
- •4.2. Структура програми, функція main без параметрів.
- •4.3. Основні типи даних.
- •4.4. Константи, змінні, вирази та пріоритет операцій.
- •4.5. Базові конструкції структурного програмування - галуження, цикл, передача управління.
- •4.6. Загальні та бітові логічні операції.
- •4.7. Тернарний опертор.
- •4.8. Вказівники і посилання; масиви.
- •Лекція № 5
- •План лекції
- •Зміст лекції
- •5.1. Користувацькі типи - typedef, enum, struct, union. Функції.
- •5.2. Передача параметрів та повернення значень з функцій.
- •5.3. Рекурсія, перевантаження функцій, функція main з параметрами.
- •5.4. Глобальні і локальні визначення, простори імен та їх використання.
- •5.5. Директиви препроцесора.
- •5.6. Стандартний ввід/вивід - бібліотека stdio.H.
- •5.7. Основи потокового введенню/виводу - бібліотека iostream.H.
- •Лекція № 6
- •План лекції
- •Зміст лекції
- •6.2. Екземпляри класів або об' єкти.
- •6.3. Поля (атрибути) та методи.
- •6.4. Специфікатори доступу (private, protected, public).
- •6.5. Вказівник this.
- •6.6. Перевантаження методів.
- •6.7. Конструктори і деструктори класів.
- •6.8. Перевантаження конструкторів.
- •6.9. Конструктори копіювання та перетворення.
- •6.10. Закон Деметри
- •Лекція № 7 Тема 7. Універсальна мова моделювання (Unified Modelling Language або uml) План лекції
- •2.Основні поняття та принципи.
- •3.Зв'язки між класами (асоціація, агрегація, композиція, узагальнення).
- •4.Uml: діаграми класів. Uml: діаграми взаємодії. Uml: діаграми послідовності. Зміст лекції
- •7.1. Сфера застосування.
- •7.2. Основні поняття та принципи.
- •7.3. Зв'язки між класами (асоціація, агрегація, композиція, узагальнення).
- •7.4. Uml: діаграми класів. Uml: діаграми взаємодії. Uml: діаграми послідовності.
- •Лекція № 8 Тема 8. Бібліотека стандартних шаблонів stl (Standard Template Library)
- •План лекції
- •Зміст лекції
- •8.1. Бібліотека стандартних шаблонів - stl (призначення, основні можливості, сфера застосування).
- •8.2. Стандартні потоки і потокові класи.
- •8.3. Стрічки (основні операції та функції; переваги порівняно із c - стрічками).
- •8.4. Поняття про контейнери, ітератори, функціональні об' єкти та алгоритми stl.
- •Лекція № 9 Тема 9. Шаблони проектування stl (Standard Template Library) План лекції
- •1.Шаблони проектування (designpatterns).
- •Зміст лекції
- •9.1. Шаблони проектування (designpatterns).
- •9.2. Класифікація шаблонів проектування stl (creational, structural, behavior, concurrencypatterns).
- •9.3. Можливості застосування шаблонів проектування stl.
4.2. Структура програми, функція main без параметрів.
У мові програмування C++ структура також володіє об' єктно - орієнтованими можливостями. По суті, класи і структури можна назвати "близькими родичами". За одним винятком, сморід взаємозамінні, оскільки структура також може містити дані та програмні коди, які маніпулюють цими даними так само, як і це може робити клас. Єдина відмінність між С++-структурою і С++-класом полягає у тому, що за замовчуванням членуй класу є закритими, а членуй структури - відкритими. У іншому ж структури і класи мають однакове призначення.
Насправді відповідно до формального синтаксису мови програмування C++ оголошення структури створює тип класу.
Розглянемо приклад використання структури з властивостями, подібними до властивостей класу.
Код програми 1. Демонстрація механізму використання структури
для створення класу
##include <vcl>
##include <iostream> // Для потокового введення-виведення
##include <conio> // Для консольного режиму роботи
using namespace std; // Використання стандартного простору імен
struct myStruct { // Оголошення структурного типу
int Put(); // Ці членуй відкриті (public)
void Get(int d); // за замовчуванням.
private:
int c;
};
int myStruct::Put()
{
return c;
}
void myStruct::Get(int d)
{
c = d;
}
int main()
{
myStruct Obj; // Створення об' єкта структури
Obj.Get(10);
cout << "c= " << Obj.Put() << endl;
getch(); return 0;
}
У цьому коді програми визначається тип структури з іменем myStruct, у якій функції -члени Put() і Get() є відкритими (public), а член даних c - закритим (private).
Зверніть увагу на ті, що у структурах для оголошення закритих членів використовують ключове слово private.
У наведеному нижче прикладі показане еквівалентну програму, яка використовує замість типу struct тип class.
Поняття про вбудовані функції
Перед тим, як продовжити засвоєння механізмів роботи з класами, дамо невелике, але важливе пояснення. Воно не належить конкретно до об' єктно - орієнтованого програмування, але є дуже корисним засобом мови програмування C++, яку достатньо часто використовують у визначеннях класів. Йдеться про вбудовану функцію (inline function), або підставну функцію. Вбудованою називається функція, програмний код якої підставляється в ті місце рядка програми, з якого вона викликається, тобто виклик такої функції замінюється її кодом. Існує два способи створення вбудованої функції. Перший полягає у використанні модифікатора inline.
Наприклад, щоби створити вбудовану функцію Fun(), яка повертає int -значення і не приймає жодного параметра, достатньо оголосити її так:
inline int Fun()
{
//...
}
Модифікатор inline повинний передувати усім решта настанов оголошення самої функції.
Причиною існування вбудованих функцій є ефективність їх використання. Адже під година шкірного виклику звичайної функції виконається деяка послідовність настанов, пов'язаних з обробленням самого виклику, що містить занесення її аргументів у стік, чи поверненням їх з функції. У деяких випадках значна кількість циклів центрального процесора використовується саме для виконання цих дій.
Але, якщо функція вбудовується в рядок програми, то таких системних витрат просто немає, і загальна швидкість виконання програми зростає. Якщо ж вбудована функція виявляється великою, то загальний розмір програми може істотно збільшитися. Тому краще як вбудовані використовувати тільки маленькі функції, а ті, що є більшими, оформляти у вигляді звичайних функцій.
Продемонструємо механізм використання вбудованої функції на прикладі такої програми.
Демонстрація механізму використання вбудованої функції
##include <vcl>
##include <iostream> // Для потокового введення-виведення
##include <conio> // Для консольного режиму роботи
using namespace std; // Використання стандартного простору імен
class myClass { // Оголошення класового типу
int c; // Закритий член за замовчуванням
public:
int Put();
void Get(int d);
};
inline int myClass::Put()
{
return c;
}
inline void myClass::Get(int d)
{
c = d;
}
int main()
{
myClass Obj; // Створення об' єкта класу
Obj.Get(10);
cout << "c= " << Obj.Put() << endl;
getch(); return 0;
}
У цьому коді програми замість виклику функцій Put() і Get() підставляють їх код. Так, у функції main() рядок
Obj.Get(10);
функціонально еквівалентний такій настанові присвоєння:
Obj.c = 10;
Оскільки змінна c за замовчуванням закрита у межах класу myClass, то цей рядок не може реально існувати в коді функції main(), але за рахунок вбудованої функції Get() досягнуте того ж результату, одночасно позбавившись витрат системних ресурсів, взаємопов 'язаних з викликом функції.
Важливо розуміти, що насправді використання модифікатора inline є запитому, а не командою, за якою компілятор згенерує вбудований (inline -) код. Існують різні ситуації, які можуть не дати змоги компіляторові задовольнити наш запитий. Вісь декілька прикладів :
● деякі компілятори не генерують вбудованого коду, якщо відповідна функція містить цикл, конструкцію switch або настанову goto;
● найчастіше вбудованими не можуть бути рекурсивні функції;
● як правило, механізм вбудовування "не проходити" для функцій, які містять статичні (static) змінні.
Лістинг 1. Демонстрація частин програми C++ на прикладі програми HELLO. CPP
1: #include <iostream.h>
2:
3: int main()
4: {
5: cout << "Hello World!\n";
6: return 0;
7: }
Результат: Hello World!
Основний код програми починається в рядку 3 з виклику функції main(). Кожна програма на мові C++ містить функцію main(). Функція - це блок програми, який виконує одне або декілька дій. Зазвичай функції викликаються іншими функціями, але main() - особлива функція: вона викликається автоматичний при запуску програми.
Функція main(), подібно до усіх інших функцій, повинна оголосити тип повертаного значення. У програмі HELLO.CPP функція main() повертає значення типу int (від слова integer - цілий), а це означає, що після закінчення роботи ця функція поверне операційній системі цілочисельне значення. У даному випадку буде повернено ціле значення 0, як показано в рядку 6. Повернення значення в операційну систему не таке важливе, і загалом це значення самою системою ніяк не використовується, але стандарт мови C++ вимагає, щоб функція main() була оголошена за усіма правилами.
Деякі компілятори дозволяють оголосити функцію main() так, щоб вона повертала значення типу void. Цього більше не можна робити в C++, тому вам слід позбавлятися від старих звичок. Дозвольте функції main() повертати значення типу int і заради цього помістите в останньому рядку цієї функції вираження return 0;.
Примітка: В деяких операційних системах передбачена можливість перевірки значення, повертаного програмою. Зручно повертати значення 0 як прапор нормального завершення функції.
Усі функції починаються відкриваючою фігурною дужкою ({) і закінчуються закриваючою фігурною дужкою (}). Фігурні дужки функції main() помішані в рядках 4 і 7. Вусі, що знаходиться між тією, що відкриває і закриває фігурними дужками, вважається тілом функції.