- •Преимущества
- •Связь: ooa→oop→ood
- •Механизм работы virtual
- •Абстрактный класс
- •Виртуальный деструктор
- •{Основные элементы языка программирования}
- •Основные подходы к семантике:
- •Формальное описание семантики:
- •Среда программирования
- •Объекты данных
- •Атрибуты объекта данных
- •Система типизации данных
- •Реализация типов данных
- •Типизация
- •Система типизации данных
- •Реализация типов данных
- •Связывание переменных
- •Контроль типов
- •Статистический контроль типов
- •Алгоритм статистического контроля типов
- •Динамический контроль типов
- •Параллелизм
- •Полиморфизм
- •Статический полиморфизм
- •Динамический полиморфизм
- •Преобразование типов
- •Связь: ooa→oop→ood
- •Среда программирования
- •Цель технологий параллелизма
- •Схемы параллелизма
- •Проблемы параллельного программирования
- •Показатели эффективности параллельного алгоритма Ускорение
- •Закон Густавсона-Барсиса
- •Масштабируемый алгоритм
- •Схемы параллелизма
- •Подтипы данных
- •Разновидности массивов. Статические
- •Кортежи
- •Разновидности массивов. Статические
- •Динамические
- •Атрибуты объекта данных
- •Операции над целыми числами
- •Вещественные числа
- •Числа с фиксированной точкой
- •Числа с плавающей точкой(float)
- •Ошибки вычислений с вещественными числами
- •Утечки памяти и повисшие указатели
- •Указатели на указатели
- •Типизированные указатели
- •Указатели на функции
- •[Отличия указателей и ссылок]
- •Параметры подпрограмм
- •Преимущества подпрограмм
- •Позиционное сопоставление
- •Сопоставление по имени
- •Методы передачи параметров:
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по значению-результату
- •Параметр по результату
- •Стековые языки
- •Циклы и рекурсия
- •Циклы со счетчиком
- •Операторы циклы без заданного числа повторений (бесконечно)
- •Динамический полиморфизм
- •Родовые (настраиваемые) сегменты и шаблоны
Связь: ooa→oop→ood
• На результатах OOA формируются модели, на которых основывается OOD, OOD в свою очередь создает фундамент для окончательной реализации системы с использованием методологии ООП.
ОО ЯП
•Язык программирования является объектно-ориентированным тогда и только тогда, когда выполняются следующие условия:
1) Поддерживаются объекты, т.е. абстракции данных, имеющие интерфейс в виде именованных операций и собственные данные, с ограничением доступа к ним.
2) Объекты относятся к соответствующим типам (классам).
3) Типы (классы) могут наследовать атрибуты супер типов (суперклассов).
Преимущества объектной модели:
+Позволяет использовать возможности ОО языка программирования.
+Повышает уровень унификации разработки и пригодность для повторного использования программ и проектов.
+Приводит к построению систем на основе стабильных промежуточных описаний, что упрощает процесс внесения изменений.
+Уменьшает риск разработки сложных систем. ОО проектирование – это единственная методология, позволяющая справиться со сложностью, присущей большим системам.
+Ориентирована на человеческое восприятие мира.
Чем больше и сложнее программа, тем важнее становится разбить ее на небольшие, четко очерченные части. Чтобы побороть сложность, мы должны абстрагироваться от мелких деталей. В этом смысле классы представляют собой весьма удобный инструмент.
Классы позволяют проводить конструирование из полезных компонент, обладающих простыми инструментами, что дает возможность абстрагироваться от деталей реализации.
Данные и операции вместе образуют определенную сущность и они не «размазываются» по всей программе, как это нередко бывает в случае процедурного программирования.
Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
Инкапсуляция информации защищает наиболее критичные данные от несанкционированного доступа.
Недостатки:
• Поскольку детали реализации классов обычно неизвестны, то программисту, если он хочет разобраться в том или ином классе, нужно опираться на документацию и на используемые имена. И время, которое было сэкономлено на том, что удалось обойтись без написания собственного класса, должно быть отчасти потрачено (особенно вначале освоения) на то, чтобы разобраться в существующем классе.
17. Полиморфизм в объектно-ориентированном программировании. Виртуальные функции. Таблицы виртуальных функций.
Полиморфизмом называется способность функции обрабатывать данные разных типов.
Полиморфизм – Некоторые части (методы) родительского класса заменяются новыми реализующими специфические для данного потомка действия.
Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
• Полиморфизмом в ООП называется переопределение наследником функций-членов базового класса.
Полиморфной называется функция, независимо определенная в каждом из группы производных классов и имеющая в них общее имя. Полиморфная функция обладает тем свойством, что при отсутствии полной информации о том, объект какого из производных классов в данный момент обрабатывается, она тем не менее корректно вызывается в том виде, в каком она была определена для данного конкретного класса. В С++ эта возможность реализуется за счет подсистемы позднего связывания, под которым понимается динамическое определение адресов функций во время выполнения программы в противоположность традиционному статическому (раннему) связыванию, осуществляемому во время компиляции. В процессе связывания имена функций заменяются их адресами. Практический смысл полиморфизма заключается в том, что он позволяет посылать общее сообщение о сборе данных любому классу, причем и родительский класс, и классы-потомки ответят на сообщение соответствующим образом, поскольку производные классы содержат дополнительную информацию.
Полиморфизм - исключительно мощный метод обобщения однотипных задач для многих разных объектов. В ООП полиморфизм реализуется посредством виртуальных функций и наследования.
Полиморфизм позволяет упростить исходные тексты программ, обеспечивает их развитие за счет введения новых методов обработки.
• Виртуальные функции - применяются для реализации динамического полиморфизма
• Чистая виртуальная функция – это функция-член, которая объявлена со спецификатором = 0 вместо тела:
• Чистая виртуальная функция не имеет определения и не может быть непосредственно вызвана.
• Чистая виртуальная функция применяется для создания абстрактных классов.
• Она создает в общем базовом классе сигнатуру – прототип, которая не имела бы собственного определения , но позволяла создавать такие определения в классах – потомках и вызывать их через указатель на общий базовый класс.
• Функция – член объявляется чистой виртуальной тогда, когда ее определение для базового класса не имеет смысла.
