
- •1. Технология программирования. Понятие технологии программирования. Методология процедурно-ориентированного программирования. Абстракция и декомпозиция.
- •Абстракция и декомпозиция
- •Технология программирования. Методология объектно-ориентированного программирования. Основные принципы ооп: наследование, инкапсуляция, полиморфизм.
- •Технология программирования. Методология объектно-ориентированного анализа и проектирования.
- •2 Важные вещи:
- •Технология программирования. Методология системного анализа и системного моделирования.
- •2 Важные вещи:
- •6 Документирование по. Ескд, естд, еспд. Основные документы. Техническое задание.
- •7 Документирование по. Основные документы. Программа и методика испытаний. Руководство оператора. Руководство системного программиста. Руководство программиста.
- •Шаблоны (template).
- •Параметризованные функции.
- •Взаимозаменяемость параметризованных функций.
- •Параметризованные классы.
- •Реализация стека.
- •Особенности реализации класса.
- •24 Stl. Контейнеры. Вектор (vector), список (list), дек (deque). Множество (set), словарь (map), стек (stack).
- •Контейнеры.
- •Множество(set)
- •Map(словарь)
- •Стек (адаптивный контейнер).
- •25 Stl. Итераторы. Алгоритмы: поиск, сортировка, суммирование.
- •Алгоритмы
- •26 Stl. Аллокаторы. Функциональные объекты. Строки. Аллокаторы.
- •Функциональные объекты.
- •Строки.
- •27 Uml. Общие сведения. Принципы построения модели сложной системы. Общая структура языка.
- •Общие сведения.
- •Принципы построения сложной системы.
- •Общая структура языка uml.
- •28 Uml. Специфика описания метамодели языка uml. Виды диаграмм.
- •Принципы построения сложной системы:
- •Общая структура языка uml.
- •Специфика описания метамодели языка uml. Виды диаграмм.
- •29 Uml. Базовые отношения: отношение зависимости, отношение ассоциации, отношение обобщения, отношение реализации.
- •30 Uml. Дополнительные отношения: отношение расширения, отношение включения, отношение агрегации, отношение композиции.
- •31 Uml. Диаграмма вариантов использования. Актер, вариант использования, интерфейс, примечание.
- •Принципы построения сложной системы:
- •Общая структура языка uml.
- •32 Uml. Диаграмма классов. Класс, объект, шаблон.
- •Принципы построения сложной системы:
- •Общая структура языка uml.
- •33 Uml. Диаграмма состояний. Автомат, состояние (начальное, конечное, составное, подсостояние: последовательное, параллельное), переход (простой, сложный), синхронизирующие состояния.
- •34 Uml. Диаграмма деятельности. Состояние действия, переходы, дорожки, объекты.
- •35 Uml. Диаграмма последовательности. Объекты, сообщения.
25 Stl. Итераторы. Алгоритмы: поиск, сортировка, суммирование.
Итератор- обобщенный указатель, который позволяет работать с различными структурами данных (контейнерами) и алгоритмами единообразным способом. Основное назначение итераторов – возможность обращаться к любому элементу контейнера при сокрытии его внутренней структуры.
Контейнер может хранить элементы любым способом (массив, список, дерево и т.д.), но при работе через итератор контейнер представлен как простая последовательность.
К итератору, как и к указателю, применимы все стандартные операции (операция присвоения(установки значения итератора)), операция сравнения (во всех операторах в первую очередь реализован оператор сравнения на равенство), арифметические операции(перемещение указателя по элементам контейнера).
В STL итератор реализуется как шаблонный класс. Для каждого типа контейнера реализуется собственный класс-итератор. Доступ к классу-итератору можно получить через контейнерный класс.
Пример:
list <int> m;
list <int>::iterator st;
deque <short> s;
deque <short>::iterator il;
Во всех классах-итераторах реализован оператор разыменования (operator *).
Оператор разыменования используется для получения значения, на которое указывает итератор.
Поскольку контейнеры STL позволяют хранить элементы произвольных типов (классы, структуры), то оператор разыменования выполняет функцию приведения указателя к производному типу данных.
Пример:
#include <stack>
#include <list>
using namespace std;
void main()
{
list<int> m;
list<int>::iterator it;
int v;
m.push_back(1);
m.push_back(5);
m.push_back(10);
for (it=m.begin(); it!=m.end(); ++it)
{
v=(*it); //1,5,10
}
Различают 5 типов итераторов:
Итераторы ввода.
Итераторы используются только для чтения значения. В классе реализовано всего 2 оператора (*, ++).
Итераторы вывода.
Итераторы используются только для записи новых значений. Операторы (*,++,=).
3)Однонаправленные итераторы.
Итераторы используются для перемещения по элементам контейнера в одном направлении. Операторы (*, ++, =, ==, !=).
4)Двунаправленные итераторы.
Итераторы используются для перемещения по элементам контейнеров в двух направлениях ( от начала к концу или от конца к началу). Операторы (*, ++, -, = =, !=, --).
5)Итераторы произвольного доступа.
Итераторы используются для произвольного доступа к элементам контейнера. Реализуются все вышеперечисленные операторы + (<, >, >=, <=, []).
Как правило, пользователь самостоятельно не определяет тип итератора. Тип устанавливается автоматически в зависимости от контекста использования итератора.
Пример:
#include <stack>
#include <list>
#include <iostream>
#include <conio.h>
using namespace std;
class A
{
public:
A(int v, char* s)
{
val=v;
str=s;
}
A(const A &ob)
{
val=ob.val;
str=ob.str;
}
int getint()
{
return val;
}
private:
int val;
string str;
};
void main()
{
list<A> m;
list<A>::iterator it;
m.push_back(A(1,"str1"));
m.push_back(A(2,"str2"));
m.push_back(A(3,"str2"));
for(it=m.begin();it!=m.end();++it)
{
A*p=&(*it);
A ob=(*p);
cout<<ob.getint();//1,2,3
}
getch();
}
Во всех классах-контейнерах реализуются следующие функции для работы с итераторами:
begin() – возвращает итератор, указывающий на первый элемент контейнера;
end() – возвращает итератор, указывающий за пределы контейнера.
find() – возвращает итератор, указывающий на найденный элемент. Если такой элемент не нашелся, то возвращается итератор, который возвращается функцией-членом end().