Слайд 1Объектно-ориентированное программирование на С++
Спецкурс для студентов отделения «Прикладная математика и
информатика»
Надолин Константин Аркадьевич
Южный федеральный университет
Факультет –математики, механики и компьютерных наук
кафедра
математического моделирования
Слайд 2Вводная лекция
ПОП и ООП
Концепция ООП, понятие программы
Роль языка программирования
Принципы ООП
Сравнение
ООП и ПОП
Слайд 3Литература
Буч Г. Объектно-ориентированное проектирование с примерами применения. – М.:Конкорд, 1992.–519
с.
Страуструп Б. Язык программирования С++, 3-е изд. – СПб.; М.:
“Невский Диалект” – “Издательство БИНОМ”, 1999. – 991 с. http://www.awl.com/cp/stroustrup3e
Слайд 4Дополнительная литература
Шилд Г. Теория и практика С++. – СПб.: BVH-Санкт-Петербург,
1996. – 416 с.
Элджер Дж. С++: библиотека программиста. –
СПб.: Питер, 2000. – 320 с.
Пол А. Объектно-ориентированное программирование на С++. – СПб.; М.: “Невский Диалект” – “Издательство БИНОМ”, 1999. – 462 с.
Бабэ Б. Просто и ясно о Borland C++. – М.:БИНОМ, 1996. – 416 с.
Сван Т. Освоение Borland C++5. – К.: Диалектика, 1996. – 576 с.
Слайд 5ПОП и ООП
ПОП – процедурно-ориентированное программирование – это программирование задач
обработки данных (алгоритмически детерминированы), основанное на составлении и реализации алгоритма
решения задачи.
Программа – алгоритм, записанный на языке программирования в виде набора процедур (процедурные абстракции)
В основе ПОП лежит декомпозиция действия (алгоритмическая декомпозиция)
Структурное и модульное программирование
Слайд 6Концепция ООП
ООП – это программирование задач имитационного моделирования (алгоритмически не
заданных), основанное на формировании (конструировании и реализации) языка предметной области.
Язык (словарь) предметной области: сущности и действия с ними (типы данных и операции).
формирование абстракции понятий
формирование иерархии понятий
реализация понятий
использование понятий
модификация понятий
Примеры. 1) Арифметика; 2) Строки и файлы в С
Слайд 7Определение ООП
Объектно-ориентированное программирование – это методология программирования, которая основана на
представлении программы в виде совокупности объектов, каждый из которых является
реализацией некоторого класса, а классы образуют иерархию, основанную на принципах наследования [Г.Буч].
Слайд 8ООП и язык
Объектно-ориентированный язык – это язык программирования, который не
позволяет отступать от принципов ООП при написании программ (например, Smalltalk).
Язык,
поддерживающий ООП – это язык программирования, который имеет все необходимые средства поддержки ООП, но не препятствует ПОП (например, С++).
Слайд 9Принципы ООП
Абстрагирование
Инкапсуляция
Модульность
Иерархия
-------------------------
Типизация и полиморфизм
Параллелизм
Устойчивость
Слайд 10Принцип абстрагирования
Абстрагирование – один из главных способов решения сложных задач
Абстракция
– это такие существенные характеристики некоторого объекта, которые отличают его
от всех других видов объектов и четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа.
Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности поведения от деталей их осуществления (барьер абстракции).
Слайд 12Абстракция определяет
интерфейс класса
Формируя абстракцию, мы сосредотачиваем внимание на существенных
с нашей точки зрения характеристиках объекта
Абстракция должна охватывать лишь самую
суть объекта, не больше, но и не меньше
Абстракция объекта определяется через протокол – набор определяющих операций
Абстракция объекта не должна зависеть от его внутреннего устройства (свойств)
Примеры. 1) Арифметика; 2) Строки и файлы в С
Слайд 13Принцип инкапсуляции
Никакая часть не должна находиться в зависимости от деталей
внутреннего устройства других частей
Инкапсуляция определяет явные барьеры между различными абстракциями,
скрывает внутреннее устройство объекта и не позволяет объектам-пользователям различить (и использовать) особенности его внутреннего устройства.
Абстракция и инкапсуляция дополняют друг друга
Абстракция определяет интерфейс объектов класса
Инкапсуляция определяет реализацию объектов класса
Примеры. 1) Арифметика; 2) Строки и файлы в С
Слайд 15Принцип модульности
Модульность, как самостоятельная концепция – это локализация частей программы
и ее разделение на раздельно компилируемые фрагменты, имеющие средства взаимосвязи
Модульная
декомпозиция
логическая локализация действия (функции), абстракции данных (класс), и имен (пространства имен)
физическая локализация и раздельная компиляция (файлы)
разделение интерфейса (.h-файлы) и реализации (.cpp-файлы) и их связь (#include)
Модульное агрегирование
файлы выполняют роль физических контейнеров, в которые помещаются определения классов и объектов
деление программы на модули бессистемным образом гораздо хуже, чем отсутствие модульности вообще
влияние на производительность системы (страничный свопинг)
Слайд 16
Модульность: декомпозиция и агрегирование
Слайд 17Принцип иерархии
Иерархия – это ранжированная или упорядоченная система абстракций
Число абстракций
в реальных системах велико => для преодоления сложности программы абстракции
следует структурировать (иерархия по составу – отношение использования)
Многие абстракции отражают родственные понятия предметной области => для сокращения описания абстракций их следует структурировать (иерархия по номенклатуре)
Наследование – отношение между классами, когда один класс использует строение одного (простое наследование) или нескольких (множественное наследование) других классов. Это основной вид иерархии по номенклатуре. Наследование – такая иерархия абстракций, в которой подклассы (производные классы) наследуют строение от одного или нескольких суперклассов (базовых классов).
Слайд 19Принцип типизации и полиморфизма
Типизация – это ограничение, накладываемое на класс
объектов и препятствующее взаимозамене объектов различных классов (или сильно сужающее
возможность такой взаимозамены)
Полиморфизм – важнейшая концепция ООП – свойство, позволяющее единообразно оперировать с объектами разных типов, учитывая их различия
Связь типизации и полиморфизма
Контроль соответствия типов
на этапе компиляции (раннее или статическое связывание)
на этапе выполнения (позднее или динамическое связывание) программы.
Слайд 21Принцип параллелизма
Параллелизм – свойство объектов находиться в активном, либо пассивном
состоянии.
Для многопроцессорных архитектур объект может представлять собой отдельный канал
управления (абстракцию процесса), что упрощает решение вопросов параллелизма (тупики, блокировки и т.п.)
Для однопроцессорных архитектур реализуется в минимальном виде
Пример – многооконный интерфейс Windows.
Слайд 23Принцип устойчивости
Устойчивость – свойство объектов сохранять свое состояние и принадлежность
к определенному классу.
Устойчивость в пространстве и времени
устойчивость в адресном
пространства
анонимные объекты (промежуточные результаты)
локальные объекты
устойчивость относительно породившего процесса
устойчивость относительно выполнения программы
устойчивость относительно эксплуатации программы
Корректность объектов
Инвариант представления
Слайд 25Сравнение ООП и ПОП
Выводы: 1) ООП и ПОП не исключают
друг друга
2) Первенство за ООП