- •Предисловие
- •Введение Эволюция разработки программного обеспечения
- •Технологии программирования
- •Основные понятия объектно-ориентированного программирования
- •Инкапсуляция
- •Свойства
- •Векторные свойства
- •Создание и уничтожение объектов
- •Конструкторы
- •Деструкторы
- •Наследование
- •Свойства
- •Конструкторы и деструкторы класса-предка
- •Полиморфизм, виртуальные и динамические методы
- •Статическое перекрытие виртуальных методов
- •Виртуальное перекрытие конструкторов и деструкторов
- •Абстрактные методы
- •Области видимости
- •Перекрытие и переопределение свойств
- •Перекрытие методов доступа к свойствам
- •Приведение объектных типов, операторы as и is
- •Агрегация
- •События
- •Процедурный тип
- •Создание события
- •Инициаторы события
- •Делегирование
- •Внутреннее устройство объекта
- •Указатели на класс
- •Виртуальные конструкторы
- •Методы класса
- •Обработка исключительных ситуаций
- •Операторы try...Except и try...Finally
- •Исключительные ситуации как объекты
- •Перегрузка методов
- •Перегрузка виртуальных методов
- •Параметры по умолчанию
- •Основы объектно-ориентированного анализа и проектирования
- •Объектно-ориентированная модель
- •Классы и объекты
- •Заключение Применение объектно-ориентированного программирования
- •Библиографический список
Основные понятия объектно-ориентированного программирования
Для понимания основ объектно-ориентированного программирования рассмотрим объекты реального мира. Объектом в повседневной жизни могут быть названы материальные предметы, такие как стол, телевизор, спутник; живые объекты: амеба, например, как объект изучения; абстрактные объекты. Всем этим объектам характерны три основных свойства: идентичность, состояние и поведение.
Идентичность определяют как «свойство объекта, которое отличает его от всех других объектов». То есть, это тот признак, который позволяет выделить один конкретный объект среди всех ему подобных.
Для того чтобы понять, что такое состояние и поведение, рассмотрим в качестве примера такой объект как телевизор. Его состояние определяется такими параметрами, как включен/выключен, исправен/сломан, переключен на программу 1, 2 и т.д. Поведение определяется состоянием. Например, поведение исправного и сломанного телевизора различаются очень сильно. Поведение изменяет состояние, ведь сломанным он стал в результате некоторого поведения. Поведение часто является реакцией на воздействие извне – например, нажали на кнопочку «Выкл». Результатом поведения также может быть передача сообщения. В случае телевизора это очевидно – его основным поведением как раз и является передача сообщений. Для других бытовых приборов это может быть, например, загоревшаяся красная лампочка, показывающая, что прибор неисправен.
Далее следует отметить, что все объекты с нашей точки зрения представляют собой так называемые «черные ящики». То есть мы разделяем, что он делает, и как он это делает. Что объект делает, мы, как правило, знаем – это называют интерфейсом. Как он это делает, как правило, неизвестно, да и не важно – это называют реализацией. Пример все тот же. Все знают, что делает телевизор и как его включить, а вот как он устроен, знают очень немногие.
Есть сходные объекты, имеющие одинаковый интерфейс и реализацию. Тем не менее, это разные объекты. То есть они различаются идентичностью. Их состояние может совпадать или не совпадать. Их поведение в одинаковом состоянии при одинаковых внешних воздействиях должно совпадать, поскольку оно определяется реализацией. Такие объекты образуют класс. Например, класс автомобилей одной марки, произведенных одной фирмой.
С другой стороны, есть объекты, имеющие одинаковый интерфейс, но реализованные по-разному: ламповый телевизор и телевизор на микросхемах – огромная разница в реализации, но оба имеют кнопочку «Вкл/выкл». С точки зрения тех, кто их использует, замена одного на другой не составляет труда.
Все вышесказанное относилось к объектам реального мира, с которыми мы привыкли иметь дело каждый день, используя которые мы очень легко можем решать любую стоящую перед нами задачу. Например, если мы хотим обставить квартиру, берем такие объекты как шкафы, стулья, столы и прочие – и обставляем. Хотелось бы и программы писать также просто. Объектно-ориентированный подход дает эту возможность. Понятия объекта и класса в объектно-ориентированном программировании близки к тому, что было описано выше для реального мира. Итак:
Объект – это нечто, характеризующееся состоянием, поведением и идентичностью, имеющее интерфейс и реализацию.
Идентичность – это такое свойство объекта, которое отличает его от всех других объектов.
Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств.
Поведение – это то, как объект действует и реагирует; поведение выражается в терминах изменения состояния объекта и передачи сообщений.
Интерфейс – это представление внешнего мира об объекте.
Реализация – его внутренне устройство.
Структура и поведение схожих объектов определяет общий для них класс. Например, классы графических интерфейсных элементов – кнопок, переключателей, окон ввода данных, и т.п. Другой пример – если бы мы занялись моделированием экосистемы, то могли бы выделить классы растений, насекомых, рыб, млекопитающих и т.д. Может быть дано следующее определение понятия «класс»:
Класс – это некое множество объектов, имеющих общую структуру и общее поведение.
Термины «экземпляр класса» и «объект» взаимозаменяемы. Классы вступают между собой в некоторое отношение, называемое иерархией наследования. Но это понятие будет рассмотрен позже.