- •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. Диаграмма последовательности. Объекты, сообщения.
Шаблоны (template).
Шаблон – конструкция языка, которая предназначена для реализации обобщенного программирования.
Обобщенное программирование – парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которые можно применять к различным типам данных, не меняя само описание.
В языке C++ шаблоны реализованы с использованием ключевого слова template.
Шаблон позволяет создавать параметризованные классы и параметризованные функции.
Параметризованные функции.
Синтаксис: template<список параметров> функция
Список параметров может задаваться двумя способами:
сlass идентификатор [=имя типа]
typename идентификатор [=имя типа]
При объявлении списка параметров ключевые слова class и typename эквивалентны и могут заменять друг друга.
Пример объявления функции:
template<typename Type>
void sort(Type array[], int size)
{
Type n; // Type - какой-то реальный тип
……….
}
Type используется как имя типа.
template <typename Type, int size>
Type* read()
{
Type* sort = new Type [size];
………………………………
return sort;
}
void main()
{
int a[10];
double* p;
sort<int>(a,10);
p=read<double,100>();
}
Реализация функции sort (функция сортировки).
template<typename Type>
void sort (Type array[], int size)
{
int c1;
int c2;
for(c1=0;c1<size;c1++)
{
for(c2=c1+1;c2<size;c2++)
{
if((1)array[c1]<array[c2])
{
(2)Type v = array[c1];
(3) array[c1]=array[c2];
array[c2]=v;
}
}
}
}
Поскольку параметрические функции можно использовать не только для фундаментальных типов(int, char, short и т.д.), но и для производных типов данных (классы, структуры и т.д.).
В этом случае следует выделить 3 важных момента:
1. Сравнение двух элементов массива.
2.Присвоение переменной значения элемента массива(в классе должен быть реализован присваивающий конструктор).
3.Присвоение элементу массива значения другого элемента массива или переменной.
Смотрите внимательно за операторами !!!!!!!
bool operator <(const A&);
A(const A&); // конструктор копирования.
A& operator = (const A&).
Взаимозаменяемость параметризованных функций.
1. Параметризованную функцию можно заменить перегруженными функциями (перегрузка имен функций).
void sort(int array[], int size);
void sort(A array[], int size).
Перегруженную функцию реализуют индивидуально для каждых типов данных. Это означает, что теряется основной принцип шаблонов, а именно, реализация обобщенного программирования.
2. Параметризованную функцию можно заменить полиморфными функциями.
Для каждого типа данных потребуется реализация трех функций ( 1-сравнение, 2-присвоение значения переменной, 3-присвоение значения элементу массива).
Параметризованные классы.
Синтаксис:
template<список параметров>
class объявление класса;
Список параметров может задаваться двумя способами:
сlass идентификатор [=имя типа]
typename идентификатор [=имя типа]
Реализация стека.
template <class Type> class stack
{
public:
stack(int size);
void push (Type data);
Type pop (void);
private:
Type* mass;
int index;
Type* p;
Type perem;
};
template <class Type>
stack<Type>::stack(int size)
{
mass=new Type[size];
index=0;
}
template <class Type>
void stack<Type>::push(Type data)
{
mass[index]=data;
index++;
}
template <class Type>
Type stack<Type>::pop()
{
index--;
perem=mass[index];
p=new Type[index];
for(int i=0;i<index;i++)
{
p[i]=mass[i];
}
delete [] mass;
mass=new Type[index];
for(int i=0;i<index;i++)
{
mass[i]=p[i];
}
delete [] p;
return perem;
}
void main(int argc, char* argv[])
{
stack<int> s(10); // создание стека
s.push(10);
s.push(20);
printf("%d",s.pop()); //20
printf("%d",s.pop()); //10
getch();
}