Прикладное программирование кафедра прикладной и компьютерной оптики Абстрактные типы данных.

Презентация:



Advertisements
Похожие презентации
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Advertisements

Прикладное программирование кафедра прикладной и компьютерной оптики Наследование.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Компьютерные методы моделирования оптических приборов кафедра прикладной и компьютерной оптики Основы объектно-ориентированной технологии программирования.
Прикладное программирование кафедра прикладной и компьютерной оптики Полиморфизм.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Объектно-ориентированное программирование Объектно-ориентированное программирование (ООП) - основная методология программирования. Она является продуктом.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Д.з Язык С++ - занятие 31. Задача 1: 1/1 + 1/3 + 1/5 … #include using namespace std; int main() { int n; cin >> n; double sum = 0;// Сумма for.
Объектно-ориентированный подход в языке C#. Класс в языке C# - ссылочный тип, определенный пользователем. Для классов ЯП C# допустимо только единичное.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
EPAM Systemswww.epam.com EPAM Systemswww.epam.com Программирование на языке C# Основы ООП.
Транксрипт:

Прикладное программирование кафедра прикладной и компьютерной оптики Абстрактные типы данных

2 Составные типы данных ГомогенныеГетерогенные Назначение для хранения однотипных переменных для хранения неоднородных разнотипных переменных Пример массив, строка, список, стек, очередь, набор, карта, дерево структура, класс

3 Структура Структура – объединение нескольких компонентов в переменную с одним именем // структура для работы с компонентами цвета struct color { int red, green, blue; }; // объявление (создание экземпляра структуры) color WhiteColor; // инициализация переменных-членов структуры WhiteColor.red=255; // доступ по оператору «.» WhiteColor.green=255; WhiteColor.blue=255;

4 Динамическое размещение структуры // динамическое размещение структуры color* RedColor=new color; // доступ по оператору -> RedColor->red=0; RedColor->green=0; // доступ по оператору разыменования (*RedColor).blue=0; // указатель на член структуры int* green=&(RedColor->green); // указатель на член структуры int* red=&WhiteColor.red; См. пример программы

5 Передача структуры в функцию По значению int luminance1(color c) { return 0.212*c.red *c.green *c.blue; } По ссылке int luminance2(color& c) { return 0.212*c.red *c.green *c.blue; } По указателю int luminance3(color* c) { return 0.212*c->red *c->green *c->blue; }

6 Функции-члены структуры // структура для работы с компонентами цвета struct color { int red, green, blue; int luminance() { return 0.212*red *green *blue; } }; // Вызов функции-члена структуры int l1=x.luminance(); // если x - структура int l2=y->luminance(); // если y – указатель на структуру См. пример программы

7 Абстрактные типы данных (классы) Классы предназначены для выражения структуры и поведения объекта атрибуты – переменные-члены класса поведение (операции, действия) – функции-члены класса Объявление класса - резервирует имя (лексему) как имя нового типа данных при моделировании можно пользоваться оптическими понятиями: оптическая поверхность, оптическая среда, линза, диафрагма, предмет, изображение class Lens; class Beam; class Surface;

8 Определение класса // класс ЛИНЗА class Lens { private: // переменные-члены: double m_R1, m_R2; double m_D, m_d; double m_n; public: // функции-члены: // конструкторы и деструктор Lens(); Lens(double r1, double r2, double D, double d, double n); Lens(const Lens& one); ~Lens(); // модификаторы и селекторы void set_n(double n); double get_n() const; double get_f() const; }; См. пример программы

9 Проверка на повторное подключение файла Определение класса заключается в конструкцию: // проверка на повторное подключение файла #if !defined LENS_H #define LENS_H //... #endif //defined LENS_H Обычно имя константы - это имя заголовочного файла в верхнем регистре с заменой точки на символ подчеркивания.

10 Тип доступа к членам класса class Lens { private: // доступны только внутри класса... protected: // доступны внутри и для наследников... public: // доступны везде... }

11 Принципы ООП Абстракция формирование представления о свойствах и поведении предмета путем выделения существенных характеристик, отличающих его от других видов объектов Инкапсуляция сокрытие внутреннего устройства, реализации объекта Сохраняемость возможность объекта сохранить информацию о своём состоянии, а затем при необходимости восстановить его Наследование (иерархия) отношение между классами, когда один объект заимствует структурную и функциональную часть другого Полиморфизм (типизация) возможность принимать множество форм, изменять поведение в зависимости от ситуации

12 Типы функций-членов класса Конструктор создание объекта и инициализации его атрибутов Деструктор освобождение используемых объектом ресурсы и разрушение объекта Модификатор изменение переменных-членов объекта (clear, set_n, set_d, …) Селектор считывание переменных-членов объекта (get_n, get_r1, … ) Утилита операция высокого уровня, выполняющая те или иные действия в зависимости от сущности объекта (RayTrace, CalcParaxial)

13 Конструктор и деструктор Конструктор (constructor) - это функция-член, имя которой совпадает с именем класса, инициализирующая переменные-члены, распределяющая память для их хранения (new) // конструктор по умолчанию Lens(); // полный конструктор Lens(double r1, double r2, double D, double d, double n); // конструктор копирования Lens(const Lens& one); Деструктор (destructor) - это функция-член, имя которой представляет собой ~имя класса, предназначенная для уничтожения переменных (delete) ~Lens(); // деструктор у конструктора и деструктора нет возвращаемого значения

14 Конструктор по умолчанию Конструктор не требующий аргументов, называется конструктором по умолчанию описание конструктора по умолчанию Lens(); реализация конструктора по умолчанию Lens::Lens() // оператор :: показывает принадлежность к классу { m_R1=0.; m_R2=0.; m_d=0.; m_D=0.; m_n=1.; } вызов конструктора по умолчанию Lens test_lens1; Lens test_lens2(); Lens test_lens3[10];

15 Полный конструктор Полный конструктор позволяет явно инициализировать все переменные-члены класса описание полного конструктора double r1,double r2,double D,double d,double n); реализация полного конструктора Lens::Lens(double r1,double r2,double D,double d,double n) { m_R1=r1; m_R2=r2; m_d=d; m_D=D; m_n=n; } вызов полного конструктора Lens test_lens(10., -10., 2., 5., 1.5);

16 Неполный конструктор Неполный конструктор - в списке параметров указываются не все возможные параметры для инициализации членов класса, а только наиболее часто используемые описание неполного конструктора Lens(double r1,double r2); реализация неполного конструктора Lens::Lens(double r1,double r2) { m_R1=r1; m_R2=r2; m_d=0.; m_D=0.; m_n=1.; } вызов неполного конструктора Lens test_lens(10., -10.);

17 Неполный конструктор Инициализация переменных-членов класса в конструкторах Lens::Lens(double R1, double R2) : m_R1(R1), m_R2(R2) { m_d=2.; m_D=5.; m_n=1.5; } Lens::Lens(double R1, double R2) : m_R1(R1), m_R2(R2), m_d(2.), m_D(5.), m_n(1.5) { }

18 Конструктор копирования Конструктор копирования – осуществляет поэлементное копирование переменных-членов класса, создает копию уже существующего класса используется при передаче экземпляров класса в функции по значению описание конструктора копирования Lens(const Lens& l); реализация конструктора копирования Lens::Lens(const Lens& l) : m_R1(l.m_R1), m_R2(l.m_R2), m_d(l.m_d), m_D(l.m_D), m_n(l.m_n) { } вызов конструктора копирования Lens lens1(10., -10.); Lens lens2(lens1); Lens::Lens(const Lens& l) { m_R1=l.m_R1; m_R2=l.m_R2; m_d=l.m_d; m_D=l.m_D; m_n=l.m_n; }

19 Деструктор Деструктор - осуществляет освобождение памяти, уничтожение объектов размещенных динамически Matrix::Matrix(int n, int m) { m_data=new double[n*m]; } Matrix::~Matrix() { delete [] m_data; } См. пример программы

20 Исключительные ситуации Генерация исключительной ситуации if(n

21 Модификаторы Модификаторы - установка значения private переменной- члена // установка показателя преломления void Set_n(double n); // установка осевого расстояния void Set_d(double d); Селекторы позволяют узнать значение private переменной-члена // получение показателя преломления double Get_n() const; // получение осевого расстояния double Get_d() const; Вызов модификатора и селектора lens5.Set_n(1.6); cout

22 Ключевые слова inline и const inline – встраиваемая функция, компилятор подставляет ее код в каждое место вызова inline void Lens::set_n(double n) { m_n=n; } обычно функции, состоящие из одной-двух строк, и не делающие сложных вычислений, делают inline const – постоянная функция не изменяет значений переменных членов (обычно селектор) double Lens::get_n() const; void write(std::ostream& out) const;

23 Функции-утилиты Утилиты – функции, выполняющие какие-то смысловые (например, вычисление, или рисование) действия например - вычисление параксиальных характеристик См. пример программы

24 Сохраняемость способность объекта существовать во времени, переживая породивший его процесс, и в пространстве, перемещаясь из своего первоначального адресного пространства Сериализация сохранение информации о состоянии объекта, с последующей возможностью его восстановления void Lens::write(ostream& out) const { outm_n; } См. пример программы

25 Задание Преобразовать структуру Сolor в класс. Все функции делаются inline, и реализуются в h-файле. В функции main объявить переменную типа Color, заполнить произвольными значениями и вывести на экран яркость. class Сolor { private: int m_red, m_green, m_blue; public: Сolor(); Сolor(int red, int blue, int green); Сolor(const color& other); ~Сolor(); void SetRed(int red); // аналогично – для green и blue int GetRed() const; // аналогично – для green и blue int luminance() const; };