- •Тема 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.
8.4. Поняття про контейнери, ітератори, функціональні об' єкти та алгоритми stl.
У STL визначені два типи контейнерів: послідовності й асоціативні.
Ключова ідея для стандартних контейнерів укладається в тім, що коли це представляється розумним, сморід повинні бути логічно взаємозамінними. Користувач може вибирати між ними, грунтуючись на міркуваннях ефективності й споживи в спеціалізованих операціях. Наприклад, якщо часто потрібен пошук по ключу, можна скористатися map (асоціативним масивом). З іншого боку, якщо переважають операції, характерні для списків, можна скористатися контейнером list. Якщо додавання й видалення елементів часто проводитися в кінці контейнера, варто подумати про використання черги queue, черги із двома кінцями deque, стека stack. За замовчуванням користувач повинний використати vector; він реалізований, щоб добрі працювати для найширшого діапазону завдань.
Ідея обігу з різними видами контейнерів і, у загальному випадку, з усіма видами джерел інформації - уніфікованим способом веде до поняття узагальненого програмування. Для підтримки цієї ідеї STL містить множина узагальнених алгоритмів. Такі алгоритми рятують програміста від необхідності знаті подробиці окремих контейнерів.
У STL визначені наступні класи-контейнери (у кутових дужках зазначені заголовні файли, де визначені ці класи) :
bitset множина бітів <bitset.h>
vector динамічний масив <vector.h>
list лінійний список <list.h>
deque двостороння черга <deque.h>
stack стік <stack.h>
queue черга <queue.h>
priority_queue черга із пріоритетом <queue.h>
map асоціативний список для зберігання пар ключ / значення, де з кожним ключем зв'язане одне значення <map.h>
multimap з кожним ключем зв'язано два або більше значення <map.h>
set множина <set.h>
multiset множина, у якому кожний елемент не обов'язково унікальний <set.h>
Огляд операцій
Типи
value_type тип елемента
allocator_type тип розподільника пам' яті
size_type тип індексів, лічильника елементів і т.д.
iterator поводитися як value_type*
reverse_iterator переглядає контейнер у зворотному порядку
reference поводитися як value_type&
key_type тип ключа (тільки для асоціативних контейнерів)
key_compare тип критерію порівняння (тільки для асоціативних контейнерів)
mapped_type тип відображеного значення
Ітератори
begin() вказує на перший елемент
end() указує на елемент, що випливає за останнім
rbegin() вказує на перший елемент у зворотній послідовності
rend() вказує на елемент, що випливає за останнім у зворотній послідовності
Доступ до елементів
front() посилання на перший елемент
back() посилання на останній елемент
operator[] (i)доступ по індексі без перевірки
at(i) доступ по індексі з перевіркою
Включення елементів
insert(p, x) додавання х перед елементом, на який указує р
insert(p, n, x) додавання n копій х перед р
insert(p, first, last) додавання елементів з [first: last] перед р
push_back(x) додавання х у кінець
push_front(x) додавання нового першого елемента (тільки для списків і черг із двома кінцями)
Видалення елементів
pop_back() видалення останнього елемента
pop_front() видалення першого елемента (тільки для списків і черг із двома кінцями)
erase(p) видалення елемента в позиції р
erase(first, last) видалення елементів з [first: last]
clear() видалення всіх елементів
Інші операції
size() число елементів
empty() контейнер порожній?
Capacity пам'ять, виділена під вектор (тільки для векторів)
reserve(n) виділяє пам'ять для контейнера під n елементів
resize(n) змінює розмір контейнера (тільки для векторів, списків і черг із двома кінцями)
swap(x) обмін місцями двох контейнерів
==операції порівняння
Операції присвоювання
operator=(x) контейнеру присвоюються елементи контейнера х
assign(n, x) присвоювання контейнеру n копій елементів х (не для асоціативних контейнерів)
assign(first, last) присвоювання елементів з діапазону [first: last]
Асоціативні операції
operator[](k) доступ до елемента із ключем k
find(k) знаходить елемент із ключем k
lower_bound(k) знаходить перший елемент із ключем k
upper_bound(k) знаходить перший елемент із ключем, більшим k
equal_range(k) знаходить lower_bound (нижню границю) і upper_bound (верхню границю) елементів із ключем k
Контейнер vector -вектор.
Вектор vector в STL визначений як динамічний масив з доступом до його елементів по індексу.
template<class T, class Allocator=allocator<T>>class std::vector{..};
де T - тип призначених для зберігання даних.
Allocator задає розподільник пам' яті, що за замовчуванням є стандартним.
У класі vector визначені наступні конструктори :
explicit vector(const Allocator& a=Allocator());
explicit vector(size_type число, const T&значення= T(), const Allocator&a= =Allocator());
vector(const vector<T, Allocator>&об' єкт);
template<class InIter>vector(InIter качан, InIter кінець, const Allocator&a= =Allocator());
Деручи форма являє собою конструктор порожнього вектору.
У другій формі конструктора вектору число елементів - це число, а кожний елемент дорівнює значенню значення. Параметр значення може бути значенням за замовчуванням.
Третя форма конструктора вектор - це конструктор копіювання.
Четверта форма - це конструктор вектору, що містить діапазон елементів, завдань ітераторами качан і кінець.
Приклад 2.
vector<int> a;
vector<double> x(5);
vector<char> c(5'*');
vector<int> b(a); //b=a
Для будь-якого об' єкта, що буде зберігатися у векторі, має бути визначений конструктор за замовчуванням. Крім того, для об' єкта повинні бути визначені оператори < і ==.
Для класу вектор визначені наступні оператори порівняння :
==, <, <=, !=, >, >=.
Крім цього, для класу vector визначається оператор індексу [].
Нові елементи можуть включатися за допомогою функцій
insert(), push_back(), resize(), assign().
Існуючі елементи можуть видалятися за допомогою функцій
erase(), pop_back(), resize(), clear().
Доступ до окремих елементів здійснюється за допомогою ітераторів
begin(), end(), rbegin(), rend(),
Маніпулювання контейнером, сортування, пошук у ньому худе можливо за допомогою глобальних функцій файлу ( заголовка <algorithm.h>.
Приклад 3.
##include<iostream.h>
##include<vector.h>
using namespace std;
void main()
{vector<int> v;
int i;
for(i=0;i<10;i++) v.push_back(i);
cout<<"size="<<v.size()<<"\n";
for(i=0;i<10;i++) cout<<v[i]<<" ";
cout<<endl;
for(i=0;i<10;i++) v[i]=v[i]+v[i];
for(i=0;i<v.size();i++) cout<<v[i]<<" ";
cout<<endl;
}
Приклад 4. Доступ до вектору через ітератор.
##include<iostream.h>
##include<vector.h>
using namespace std;
void main()
{vector<int> v;
int i;
for(i=0;i<10;i++) v.push_back(i);
cout<<"size="<<v.size()<<"\n";
vector<int>::iterator p=v.begin();
while(p!=v.end())
{cout<<*p<<" ";p++;}
}
Приклад 5. Вставка й видалення елементів.
##include<iostream.h>
##include<vector.h>
using namespace std;
void main()
{vector<int> v(5,1);
int i;
////висновок
for(i=0;i<5;i++) cout<<v[i]<<" ";
cout<<endl;
vector<int>::iterator p=v.begin();
p+=2;
////вставити 10 елементів зі значенням 9
v.insert(p, 10,9);
////висновок
p=v.begin();
while(p!=v.end())
{cout<<*p<<" ";p++;}
////видалити вставлені елементи
p=v.begin();
p+=2;
v.erase(p, p+10);
////висновок
p=v.begin();
while(p!=v.end())
{cout<<*p<<" ";p++;}
}
Приклад 6. Вектор містить об' єкти користувацького класу.
##include<iostream.h>
##include<vector.h>
##include" student.h"
using namespace std;
void main()
{vector<STUDENT> v(3);
int i;
v[0]=STUDENT("Іванов", 45.9);
v[1]=STUDENT("Петров", 30.4);
v[0]=STUDENT("Сидоров", 55.6);
////висновок
for(i=0;i<3;i++) cout<<v[i]<<" ";
cout<<endl;
}
Література
Катаев М.Ю. Объектно-ориентированное программирование: Учебное пособие. - Томск: Томский межвузовский центр дистанционного образования, 2000. - 145 с.
Кент Рейсдорф и Кен Хендерсон BORLAND C++BUILDER. ОСВОЙ САМОСТОЯТЕЛЬНО
Лафоре Р. Обьектно–ориентированное программирование в С++. 4-е изд.: – СПб: Питер, 2004 – 902 с.
Львов М.С., Співаковський О.В. Вступ до об’єктно-орієнтоване програмування. Навчальний посібник. - Херсон: ХГПУ, 2000.- 238 с.:іл.
М.С. Львов. О.В. СпіваковськийВступ до об’єктно-орієнтоване програмування. Навчальний посібник. - Херсон: ХГПУ, 2000.- 238 с.:іл.
Шилдт Герберт. Искусство программирования на С++. Санкт-Питербург, 2005.-496 с., ил.
Шилдт, Герберт. C++: руководство для начинающих, 2-е издание. : Пер. с англ. — М. : Издатель- ский дом "Вильяме", 2005. — 672 с. : ил. — Парал. тит. англ.
Эккель Брюс. Философия С++. Введение в стандартный С++ (2-е издание). - СПб: Питер, 2004 – 573 с.
Эккель Брюс. Философия С++. Практическое программирование (2-е издание). - СПб: Питер, 2004 – 610 с., ил.
Юркова Т. А., Ушаков Д. М., Паскаль для школьников. — СПб.: Питер, 2010. — 256 с.: ил.
Visual Studio 2010 и введение в .NET 4.0 и для профессионалов. Макки, Алекс : Пер. с англ. — М. : ООО И. Д. Вильямс". 2010. — 416 с. : ил. — Парал, тит. англ.
