- •1)Краткий обзор основных парадигм программирования
- •Основные принципы ооп
- •Абстрактные типы данных
- •Синтаксис описания класса
- •Управление доступом к членам класса
- •Манипуляции с состоянием объекта
- •Класс как область видимости
- •Объявление и определение методов класса. Спецификатор inline
- •Указатель this
- •Указатель на член класса
- •Конструкторы и деструкторы
- •Конструктор умолчания
- •Конструктор преобразования и конструкторы с двумя и более параметрами
- •Конструктор копирования
- •Порядок вызова конструкторов и деструкторов
- •Статические члены класса
- •Константные члены класса. Модификатор const
- •Друзья классов
- •Статический полиморфизм
- •Перегрузка бинарных операций
- •Перегрузка унарных операций
- •Перегрузка функций
- •Виды отношений между классами
- •Одиночное наследование
- •Правила наследования
- •Преобразования указателей.
- •Правила видимости при наследовании.
- •Закрытое (private) наследование
- •Перекрытие имен
- •Динамический полиморфизм, механизм виртуальных функций
- •Реализация виртуальных функций
- •Абстрактные классы. Чистые виртуальные функции
- •12. Средства обработки ошибок, исключения и обработка исклю-чений
- •Правила выбора обработчика исключения
1)Краткий обзор основных парадигм программирования
В соответствии с концепцией фон-Неймана – основателя теоретической концепции компьютерной техники, процессор обрабатывает данные, выполняя инструкции (команды), которые находятся в той же оперативной памяти, что и данные.
Таким образом, можно выделить две основные сущности процесса обра-ботки информации: код, как совокупность инструкций, и данные. Все программы в соответствии с выбранной технологией программирования концептуально ор-ганизованы вокруг своего кода или вокруг своих данных.
Рассмотрим основные на сегодняшний день парадигмы программирования:
Процессно-ориентированная парадигма, при которой программа представляет собой ряд последовательно выполняемых операций – модель фон-Неймана. При этом код воздействует на данные. Языки, реали-зующие эту парадигму, называются процедурными или императивны-ми.
Объектно-ориентированная парадигма, при которой программа рас-
сматривается как совокупность фрагментов кода, обрабатывающих от-дельные совокупности данных – объекты. Эти объекты взаимодействуют друг с другом посредством так называемых интерфейсов. При этом данные управляют доступом к коду.
При повышении сложности алгоритма процессно-ориентированная пара-дигма сталкивается с существенными проблемами. Переход к объектным прин-ципам программирования позволяет значительно улучшить внутреннюю орга-низацию программы, в результате чего повышается производительность при разработке программных комплексов.
Наряду с двумя вышеизложенными основными в настоящее время пара-дигмами программирования используются еще две парадигмы:
Аппликативная или функциональная парадигма. Основная идея дан-
ного подхода заключается в формализованном определении функции, которую выполняет программа. Таким образом, вместо определения по-следовательности состояний, через которые должен пройти компьютер, чтобы получить требуемый результат, необходимо определить функцию, при применении которой к исходным данным получается требуемое ре-шение:
y = f (x)
Разработка программы при этом подходе сводится к конструированию сложной функции из имеющихся стандартных простых функций:
y = f1 ( f2 ( f3 (...), f4 (...),...))
Языками, поддерживающими такую парадигму, являются, например, языки LISP и ML. Данные при таком подходе, так же, как и код, представляются спи-сками одинаковой структуры, значит, программа, работая под управлением ин-терпретатора, может обрабатывать свой собственный код, как данные. В этом случае стирается грань между кодом и данными. Поэтому одной из важных об-ластей применения данной парадигмы являются системы искусственного ин-
теллекта (ИИ).
Основные принципы ооп
Центральной идеей ООП является реализация понятия "абстракция". Смысл абстракции заключается в том, что сущность произвольной сложности можно рассматривать , а также производить определенные действия над ней, как над единым целым, не вдаваясь в детали внутреннего построения и функцио-нирования.
При создании программного комплекса необходимо разработать опреде-ленные абстракции.
Пример: Задача составления расписания занятий.
Необходимые абстракции: студент, курс лекций, преподаватель, аудитория.
Операции:
Определить студента в группу
Назначить аудиторию для группы
. . . . . . . . . .
Одним из основных способов создания абстракции является использование концепции иерархической классификации. Ее суть заключается в том, что сложные системы разбиваются на более простые фрагменты.
Практически все сложные системы иерархичны, и уровни их иерархии от-ражают различные уровни абстракции. Для каждой конкретной задачи рассмат-
ривается соответствующий уровень. Выбор низшего уровня абстракции доста-точно произволен. Выбранный уровень в одном случае в качестве низшего уровня может оказаться уровнем достаточно высокой абстракции в другом проекте.
Различают типовую иерархию и структурную иерархию, которые далее мы будем называть соответственно структурой классов и структурой объек-тов.
Во всех объектно -ориентированных языках программирования реализованы следующие основные механизмы (постулаты) ООП:
Инкапсуляция
Наследование
Полиморфизм
Все эти механизмы важны для разработки и использования абстракций.
Инкапсуляция – механизм, связывающий вместе код и данные, кото-рыми он манипулирует, и одновременно защищающий их от произвольного доступа со стороны другого кода, внешнего по отношению к рассматриваемому. Доступ к коду и данным жестко контролируется интерфейсом.
Основой инкапсуляции при ООП является класс.
Механизма инкапсуляции позволяет оставлять скрытыми от пользователя некоторые детали реализации класса (то есть инкапсулировать их в классе), что упрощает работу с объектами этого класса.
Наследование – механизм, с помощью которого один объект (произ-водного класса) приобретает свойства другого объекта (родительского, базового класса). При использовании наследования новый объект не обязательно описы-вать, начиная с нуля, что существенно упрощает работу программиста. Наследо-вание позволяет какому-либо объекту наследовать от своего родителя общие ат-рибуты, а для себя определять только те характеристики, которые делают его уникальным внутри класса.
Наследование есть очень важное понятие, поддерживающее концепцию иерархической классификации.
Полиморфизм – механизм, позволяющий использовать один и тот же интерфейс для общего класса действий.
Пример: Имеются 3 типа стека для хранения:
o целых чисел
o чисел с плавающей точкой o символов
Вместо трех подпрограмм управления в объектно-ориентированной про-грамме требуется всего одна подпрограмма (один интерфейс)
Общая концепция полиморфизма: один интерфейс – много методов. Выбор конкретного действия (метода) применительно к конкретной ситуа-
ции возлагается на компилятор . Программисту же достаточно запомнить и при-менить один интерфейс, вместо нескольких, что также упрощает работу.
Различаются статический (реализуется на этапе компиляции с помощью перегрузки функций и операций), динамический (реализуется во время выпол-нения программы с помощью механизма виртуальных функций) и параметри-ческий (реализуется на этапе компиляции с использованием механизма шабло-нов) полиморфизм.
Примечание. Рассмотренные понятия абстракции, инкапсуляции, наследования, полиморфизма присущи не только парадигме ООП. Так, выполнение арифметических операций над целыми числами и числами с плавающей точкой осуществляются в про-цессоре по разным алгоритмам. Однако в данном случае полиморфизм проявляется не-явно.
