
- •Введение в ооп
- •Алгоритмическое и объектно-ориентированное программирование
- •3.Основные понятия объектно-ориентированного программирования
- •4. Объекты и их атрибуты
- •5. Структура визуальной среды
- •4. Страж кода (Code Guard).
- •7. Синтаксис и семантика классов
- •8. Доступ к элементам класса (объекта)
- •9. Встраиваемые функции-элементы
- •10. Создание экземпляров класса. Конструктор
- •Создание объекта в динамической памяти
- •11. Уничтожение объектов класса. Деструктор
- •12. Статические компоненты класса
- •13. Постоянные и модифицируемые элементы-данные
- •14. Передача адреса объекта компонентной функции. Указатель this
- •15. Конструктор копии
- •16. Перегрузка функций и операций
- •17. Операция присваивания для объектов
- •18. Функции преобразования типа объекта
- •19. Наследование. Общие положения
- •Влияние ключа доступа при наследовании
- •20. Простое наследование
- •21. Множественное наследование
- •22. Виртуальное наследование
- •23. Виртуальные функции
- •24. Динамический полиморфизм
- •25. Абстрактные классы
- •26. Дружественные функции и классы
- •27. Шаблоны
- •28. Стандартная библиотека шаблонов. Общие положения
- •29. Примеры контейнеров
- •30. Обработка исключительных ситуаций. Общие положения
- •Синтаксис и семантика генерации и обработки исключительных ситуаций
- •32. Использование объекта класса для возврата параметров исключений
- •33. Ограничение перечня возбуждаемых исключительных ситуаций
- •34. Повторное возбуждение исключительной ситуации. Вложенные блоки try
- •35. Организация проектировани и документирования разработки объектно-ориентированных программ
- •1. Отображение классов.
- •2. Отображение отношений между классами
Лекции по объектно-ориентированному программированию
(объединенный план)
Введение в ооп
Объектно-ориентированное программирование (ООП) – основная методология программирования, начиная с 90 – х годов. Она является результатом тридцатилетнего опыта и практики, которые берут начало в языке Simula 67 и продолжаются в языках Smalltalk, Lisp, Clu и в более поздних – Actor, Eiffel, Objective C, Java и C++.
Объектно-ориентированное программирование – это стиль программирования, который фиксирует поведение реального мира так, что детали программирования скрыты и проектировщики оперируют терминами предметной области.
Все концепции объектно-ориентированной технологии и языка С++ направлены на максимально полное и адекватное отображение средствами языка объективной реальности окружающего мира. Основой этой технологии является утверждение о том, что моделью окружающего мира может служить связанная совокупность объектов, обменивающихся между собой сообщениями. Объекты принадлежат определенным классам, а классы образуют иерархическую структуру.
Алгоритмическое и объектно-ориентированное программирование
Разнообразные методы программирования программных изделий можно разделить на три основные группы:
Метод структурного программирования сверху вниз;
Метод потоков данных;
Объектно-ориентированное программирование.
Метод структурного программирования сверху вниз (алгоритмический подход)
Основным элементом программирования является подпрограмма, а программа в целом принимает форму дерева, в котором одни подпрограммы в процессе работы вызывают другие подпрограммы. В основе структурного программирования – алгоритмическая декомпозиция сложной задачи на более мелкие. Алгоритмическая декомпозиция эффективна, если автоматизируется последовательный процесс обработки данных.
В последовательной программе исходные данные вводятся в начале выполнения программы из различных источников (клавиатура, файлы на внешних устройствах, датчики информации) . Затем эти данные обрабатываются в соответствии с алгоритмом задачи (f(x,y,z)). В конце выполнения результат выводится на различные устройства.
В сложных системах частные процессы взаимодействуют по-разному, конфликтуя из-за ресурсов, активизируются извне, работают параллельно, обладают общими свойствами. Автоматизация таких систем требует других подходов к программированию, специальных методов обеспечения надежности программ, специальных методов тестирования. В этих условиях структурный подход неэффективен. Он не позволяет выделить абстракции и обеспечить ограничение доступа к данным. Он также не предоставляет достаточных средств для организации параллелизма.
Метод потоков данных
В этом методе программная система рассматривается как преобразователь входных потоков в выходные. При этом процесс преобразования элементарен (преобразование формы, а не содержания информации). Основная проблема – скорость обмена. Используется в системах информационного обеспечения, где существуют прямые связи между входными и выходными потоками системы, и где не требуется уделять особого внимания быстродействию компьютера, в сетевых программах, обеспечивающих манипуляции со служебной частью сообщений.
Объектно-ориентированное программирование
В основе ООП лежат следующие положения:
Все есть объект. Думать об объектах, как об особенных переменных; они хранят данные, но вы можете “сделать запрос” к такому объекту, попросив его самого выполнить операцию. Теоретически вы можете взять любой умозрительный компонент в проблеме, которую вы пробуете решить (собак, дома, услугу и т.п.) и представить его как объект в вашей программе.
Программа - это связка объектов, говорящих друг другу что делать, посылая сообщения. Чтобы сделать запрос к объекту, вы “посылаете сообщение” этому объекту. Правильнее вы можете думать о сообщении, как о запросе на вызов функции, которая принадлежит определенному объекту.
Каждый объект имеет свою собственную память, отличную от других объектов. Говоря другими словами, вы создаете объект нового вида, создавая пакет, содержащий существующие объекты. Поэтому, вы можете построить сложные связи, пряча их позади простых объектов.
Каждый объект имеет тип. Другими словами, каждый объект является экземпляром класса, где “класс” - это синоним “типа”. Большинство важных различий характеристик класса в том, “Какие сообщение можете вы посылать ему?”
Все объекты определенного типа могут принимать одинаковые сообщения. Это действительно важное утверждение, как вы увидите позднее. Так как объект типа “круг” также является объектом типа “форма”, круг гарантированно примет сообщения формы. Это означает, что вы можете писать код, который говорит форме и автоматически управляет всем, что соответствует описанию формы. Это представляется одной из большинства полезных концепций ООП.
В основе метода лежит представление о том, что программную систему необходимо проектировать как совокупность взаимодействующих друг с другом объектов, рассматривая каждый объект как экземпляр определенного класса, причем классы образуют иерархию.
Взаимодействие объектов реализуется путем вызова функций. Функция может быть сложно организованной программой, созданной на основе алгоритмической декомпозиции.
Для реализации идей ООП созданы объектно-ориентированные языки: SmallTalk, Object Pascal, Delphi, C++, Clos, Ada.
Преимущества ООП
По сравнению с другими методами программирования объектно-ориентированный синтез обладает существенными преимуществами.
Сочетание объектной и алгоритмической декомпозиции (именно в такой последовательности) позволяет избежать существенных ошибок на начальных этапах проектирования. Это обеспечивается высоким уровнем языковой абстракции (абстрактные классы, чистые виртуальные функции, шаблоны, неопределенные типы).
Объектно-ориентированные системы более гибки и проще эволюционируют со временем, потому что их схемы базируются на устойчивых промежуточных формах. Обеспечивается возможность изменения структуры и функционирования без изменения исходных конструкций путем использования средств наследования, обеспечения полиморфизма (перегрузка и переопределение функций и операций).
Высокая надежность программных систем обеспечивается за счет последовательной детализацией свойств и поведения объектов на основе проверенных на предыдущих этапах конструкций.
Легкость и прозрачность управления проектированием программных систем (строгость иерархии и однообразие семантики классов).
Минимальный размер программных систем за счет повторного использования устойчивых проверенных конструкций (формируемая в процессе проектирования библиотека классов, обширная и расширяемая стандартная библиотека шаблонов).
В результате объектно-ориентированного анализа и проектирования создается объектно-ориентированная модель. Структура объектно-ориентированной модели представлена на рисунке.
В отличие от программирования проектирование охватывает все стадии разработки программных изделий.
Объектно-ориентированное проектирование – это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, а также статической и динамической моделей проектируемой системы.