
- •Лекция 1. Введение.
- •Лекция 2-3. Основные понятия. Типы данных.
- •Основные типы данных
- •Лекция 4 Выражения. Классификация операторов
- •Операторы объявлений типов и переменных
- •Операторы вызова функций
- •Математические и логические операции. Условная операция. Математические операции для целочисленных и вещественных вычислений.
- •Математические операции только для целочисленных вычислений
- •Логические операции.
- •Условная операция.
- •Операторы управления.
- •Оператор ветвления.
- •Оператор выбора.
- •Лекция 5. Циклы
- •Цикл while
- •Цикл for
- •Операция "запятая"
- •Цикл с условием на выходе: do while
- •Какой цикл лучше?
- •Другие управляющие операторы: break, continue, goto.
- •Лекция 6. Структуры данных. Массивы. Объединения. Строковые литералы.
- •1. Объявление массива
- •2. Инициализация массивов
- •3. 1 Работа с массивами
- •3.2. Обработка массивов
- •3.3. Ввод/вывод массивов
- •Объединения в c
- •Лекция 7. Функции. Рекурсия. 1 часть.
- •Лекция 8. Функции. Рекурсия. 2 часть.
- •Лекция 9. Указатели.
- •Функции управление памятью
- •Лекция 10. Динамические структуры данных.
- •Лекция 11. Файлы
- •Лекция 13. Объектно-ориентированные модели. Составные части объектного подхода.
- •Лекция 14. Классы. Конструкторы и деструкторы.
- •Лекция 15. Простое наследование классов
- •Лекция 16. Перегрузка функций
- •Лекция 17. Перегрузка операторов
- •Лекция 18. Друзья
- •Лекция 19. Шаблоны. Стандартная библиотека шаблонов
- •Лекция 20. Исключительные ситуации
- •Лекция 3.2. Проектирование структуры приложения. Система меню
- •Лекция 3.3.1. Стандартные и дополнительные компоненты
- •Лекция 3.3.2. Компоненты страницы Win32. Системные компоненты.
- •Лекция 3.4. Проектирование структуры данных
- •Лекция 3.6. Компоненты ActiveX. Графические компоненты
- •3.6.1.Компоненты ActiveX.
- •3.6.2. Графические компоненты
- •Лекция 4.1. Основные понятия языка. Переменные, операции, выражения. Операторы
- •Класс Array
- •Массивы как коллекции
- •Сортировка и поиск. Статические методы класса Array
- •Лекция 4.3. Делегаты, события и потоки выполнения. Работа с файлами библиотеки, атрибуты, директивы
- •Описание делегатов
- •Использование делегатов
- •Паттерн "наблюдатель"
- •Операции
- •Передача делегатов в методы
- •События
- •Многопоточные приложения
- •Класс Thread
- •Асинхронные делегаты
- •Лекция 5.1. Методы конструирования сложных программных систем
- •Inline-ассемблер в Delphi
- •Лекция 5.2. Разработка динамических библиотек
- •Для начала - что это такое ?
- •Далее разберемся: какая может быть польза от dll
Лекция 13. Объектно-ориентированные модели. Составные части объектного подхода.
Абстрактные типы данных
Концепция абстрактных типов и абстрактных типов данных является ключевой в программировании. Абстракция подразумевает разделение и независимое рассмотрение интерфейса и реализации.
Интерфейс и внутренняя реализация являются определяющими свойствами объектов окружающего нас мира. Интерфейс – это средство взаимодействия с некоторым объектом. Реализация - это внутреннее свойство объекта. Наибольший интерес представляет эффективность реализации.
Модульность и абстракция дополняют друг друга. Модульность предполагает скрытие деталей реализации, а абстракция позволяет специфицировать каждый модуль перед тем, как будет написана соответствующая программа.
Предположим, мы покупаем некоторый достаточно сложный бытовой прибор, имеющий развитый интерфейс с пользователем. При эксплуатации прибора мы редко задумываемся о физических процессах, происходящих в данном объекте, то есть его реализации. Чем совершеннее интерфейс объекта, тем он удобнее в эксплуатации. При приобретении объекта нас интересует его интерфейс, но не его реализация. Иначе мы возвращаемся к свойствам объекта: интерфейсу и реализации. Основная цель абстракции в программировании заключается в отделении интерфейса от реализации. Попытка усовершенствовать объект (его реализацию) пользователю, не являющемуся специалистом в этой области, приводит к отрицательному результату. В программировании запрет таких действий поддерживается механизмом запрета доступа или скрытия внутренних компонент. Принцип абстракции обязывает использовать механизмы скрытия, которые предотвращают умышленное или случайное изменение внутренней реализации.
Различают процедурную абстракцию и абстракцию данных.
Процедурная абстракция требует раздельного рассмотрения цели процедуры (например функции С/С++) и ее внутренней реализации.
Абстракция данных требует раздельного рассмотрения операций над данными и реализации этих операций. Достаточно знать, какие операции выполняет модуль, но не требуется знать, какие данные он при этом использует (они скрыты) и как в действительности выполняются эти операции.
Таким образом, абстракция позволяет отделить внешнее представление модуля от его внутренней структуры. Пользователя не интересует внутренняя структура модуля, а лишь то, что этот модуль может ”делать”. С точки зрения же разработчика качество модуля определяется его дешевизной и эффективностью.
Абстракция данных предполагает определение и рассмотрение абстрактных типов данных (АТД), или, иначе, новых типов данных, введенных пользователем. АТД – это совокупность данных вместе с множеством операций, которые можно выполнять над этими данными.
Базовые принципы объектно-ориентированного программирования
Объектно-ориентированное программирование основывается на трех основных концепциях: инкапсуляции, полиморфизме и наследовании.
Инкапсуляция (пакетирование) представляет собой механизм, связывающий вместе данные и код, обрабатывающий эти данные, и сохраняющий их от внешнего воздействия и ошибочного использования. Инкапсуляция позволяет создавать объект, являющийся логическим целым, включающим данные и код для работы с этими данными. Объект обеспечивает защиту против случайной или несанкционированной модификации частных (private) составляющих его членов.
Полиморфизм - принцип (подход), обеспечивающий возможность использования одного и того же кода для решения разных задач. Полиморфизм позволяет уменьшить сложность программы посредством использования одного и того же интерфейса для задания целого класса действий. Задача выбора специфического действия (метода) в зависимости от конкретной ситуации (количества и типа передаваемых аргументов) возлагается на компилятор.
Наследование представляет собой процесс, благодаря которому один объект может наследовать (приобретать) свойства от другого объекта. Объект, используя наследование, нуждается только в определении специфичных только для этого объекта свойств, отличающих его от других объектов этого класса.
Различают полиморфные и мономорфные языки. Для мономорфных языков характерно то, что используемые функции, процедуры и операторы имеют уникальный тип. Полиморфные языки поддерживают концепцию полиморфизма в теории типов, когда одно и то же имя может быть использовано для выражения различных действий. Поддержка полиморфизма осуществляется через виртуальные функции, механизм перегрузки функций и операторов.
Передача сообщений выражает основную методологию построения объектно-ориентированных программ. Программы представляются в виде набора объектов и передачи сообщений между ними.
При построении объектно-ориентированной программы одним из основных является вопрос иерархии классов. Пусть имеется некоторая иерархия (структура, взаимосвязь) классов. В этом случае можно:
определить объект для заданного класса;
построить новый класс, наследуя его из существующего класса;
изменить поведение нового класса (изменить существующие и добавить новые функции).
Построение нового класса, наследуя его из существующего, предполагает:
добавление в новый класс новых компонент-данных;
добавление в новый класс новых компонент-функций;
замену в новом классе наследуемых из старого класса компонент-функций;
Наследование может быть одиночным и множественным. При множественном наследовании наследуемый (новый) класс имеет более одного старого класса, из которых образуется новый класс. При этом новый класс наследует поведение этих классов.
Таким образом, объектно-ориентированное программирование – метод построения программ в виде множества взаимодействующих объектов, структура и поведение которых описаны соответствующими классами. Все эти классы образуют иерархию классов, выражающую отношение наследования.
При разработке объектно-ориентированных программ часто используются библиотеки классов. Библиотека может рассматриваться как заданная базовая иерархическая структура. Для разрабатываемой программы из библиотеки может быть выбрана некоторая подструктура и затем расширена новыми классами с использованием принципов наследования.
Язык программирования называется объектно-ориентированным, если :
он поддерживает абстрактные типы данных (объекты с определенным интерфейсом и скрытым внутренним состоянием);
объекты имеют связанные с ними типы (классы);
поддерживается механизм наследования.
Примеры:
Выводы:
Язык С++ основывается на языке С, сохраняя большую часть возможностей языка С и расширяя их новыми, ориентированными на реализацию идей ООП. Язык С++ является легко переносимым языком. Получаемый программный код обладает высоким быстродействием и компактными размерами.