
- •Тема 5.2. Теоретические основы объектно-ориентированного программирования
- •5.2.1. Основные определения
- •5.2.2. Понятия об объектно-ориентированной декомпозиции и об объектно-ориентированных моделях
- •5.2.3. Объектная модель
- •5.2.4. Составные части объектного подхода
- •5.2.5. Задачи для самостоятельного решения по теме «Введение в объектно-ориентированное программирование»
- •5.2.6. Тестовые задания по теме «Введение в объектно-ориентированное программирование»
- •Тема 5.2. Теоретические основы ооп Страница 102
Тема 5.2. Теоретические основы объектно-ориентированного программирования
5.2.1. Основные определения
5.2.2. Понятия о ОО декомпозиции и о ОО моделях
5.2.3. Объектная модель
5.2.4. Составные части объектного подхода
5.2.5. Задачи для самостоятельного решения по теме «Теоретические основы
объектно-ориентированного программирования»
5.2.6. Тестовые задания по теме «Теоретические основы объектно-ориентированного программирования»
5.2.1. Основные определения
Объектно-ориентированный подход в программированиипредлагает все, что входит в состав приложения, считать объектами, которые взаимодействуют друг с другом и с пользователем в соответствии с заданными в программе свойствами и поведением, выполняя необходимые функции приложения. Таким образом, любое приложение при данном подходе представляет собой набор взаимосвязанных объектов, реализующих необходимые функциональные требования, предъявленные к приложению.
Объект – это некая отдельная сущность, выделяющаяся среди других сущностей своими свойствами, поведением, взаимодействием с другими объектами приложения. Объект всегда конкретен и реально существует в форме или в приложении, обладая при этом только ему присущими свойствами и поведением. Признаками объектов, отличающими их друг от друга, являются их свойства и поведение. Объект характеризуется следующими основными понятиями:
методом – это функция или процедура, которая реализует возможные с объектом действия;
событием– это средство взаимодействия объектов друг с другом. Объекты генерируют заданные события и выполняют действия в ответ на заданные события. События – это аналог сообщений, которые получают и отправляют объекты;
состоянием– каждый объект всегда находится в определенном состоянии, которое характеризуется набором свойств объекта. Под воздействием событий объект переходит в другие состояния. При этом объект может сам генерировать события при переходе в другое состояние;
свойством – признак, некоторое отдельное качество (параметр) объекта.
Например, свойствами могут быть размеры объекта, заголовок, его наименование. Совокупность свойств объекта определяет его состояние. Как правило, свойства – это набор переменных и констант, в которых хранятся значения, определяющие параметры объекта.
Класс – это совокупность объектов, имеющих общие свойства и поведение. Таким образом, класс можно определить как некую общность конкретных объектов, как описание – какими они должны быть и что они должны делать. Если объекты реально существуют в приложениях, то класс – это абстракция, объединяющая объекты в одну группу согласно их свойствам и поведению в среде окружения, в которой они существуют и взаимодействуют. Например, кнопкаButton1в форме со всеми своими конкретными свойствами и действием является объектом классаButton.
Поведение– характеристика того, как один объект воздействует на другие объекты или изменяется сам под их воздействием. Поведение влияет на способ изменения состояний объекта.
В основе объектно-ориентированной технологии программированиялежат ''три кита'':
Инкапсуляция (encapsulation)– свойство объединять внутри одной структуры состояние и поведение.
Наследование (inheritance)– основанная на иерархии способность классов включать в себя свойства и поведение классов-предков, а также добавлять к ним свое собственное поведение и свойства.
Полиморфизм (polymorphism) – способность классов ''играть роль'' своих предков, сохраняя при этом свое собственное поведение.
Необходимо обратить внимание, что наряду с физическими могут существовать также и абстрактные объекты, типичными представителями которых являются числа. Таким образом, объект – это любая физическая или абстрактная четко идентифицируемая сущность.
Объекты характеризуются атрибутами. Так, например, атрибутами автомобиля являются максимальная скорость, мощность двигателя, цвет кузова и т. д. Атрибутами усилителя являются частотный диапазон, выходная мощность, коэффициент нелинейных искажений, уровень шума и т. д.
Помимо атрибутов, объекты обладают некоторыми функциональными возможностями, которые в ООП называют операциями, функциями или методами. Так, автомобиль может ездить, корабль – плавать, компьютер – производить вычисления.
Таким образом, объект инкапсулирует атрибуты и методы, скрывая свою реализацию от других объектов, взаимодействующих с ним и использующих его функциональность. Например, для того чтобы переключить телевизионную программу, нам достаточно на пульте дистанционного управления набрать ее номер, что запустит сложный механизм, который в итоге и приведет к желаемому результату. Нам совершенно необязательно знать, что происходит в пульте дистанционного управления и телевизоре, нам лишь достаточно знать, что телевизор обладает такой возможностью (методом) и как ее можно активировать. Инкапсуляция, или сокрытие реализации, является основополагающим свойством ООП. Она позволяет создавать пользовательские объекты, обладающие требуемыми методами, и далее оперировать ими, не вдаваясь в устройство этих объектов.
В программе объект – это экземпляр некоторого класса объектов или просто класса. Так, автомобиль Audi 6 является экземпляром класса автомобилей данной модели, приемник Sony также будет представителем класса одноименных приемников. Таким образом, класс – это абстрактное понятие. На унифицированном языке моделирования – класс можно отобразить в виде прямоугольника, разделенного на три части. В первой содержится имя класса, во второй – атрибуты, в третьей – методы (рис. 5.2.1-1).
Рис. 5.2.1-1
Классы могут быть связаны друг с другом различными отношениями. Одним из основных таких отношений является отношение класс – подкласс, известное в объектно-ориентированном программировании как наследование. Например, класс автомобилей Audi является подклассом легковых автомобилей, который в свою очередь входит в более крупный класс автомобилей, а последний является подклассом класса транспортных средств, который помимо автомобилей включает в себя самолеты, корабли, поезда и т. д. Примером подобных отношений являются системы классификации в ботанике и зоологии.
При наследовании все атрибуты и методы родительского класса наследуются классом-потомком. Наследование может быть многоуровневым, и тогда классы, находящиеся на нижних уровнях иерархии, унаследуют все свойства (атрибуты и методы) всех классов, прямыми или косвенными потомками которых они являются. На рис. 5.2.1-1 класс B унаследует атрибуты и методы класса A и, следовательно, будет обладать атрибутами A, B, C и D и методами A, B, C и D, а класс C – атрибутами A, B, C, E, F и методами A, B и E.
При наследовании одни методы класса могут замещаться другими. Так, класс транспортных средств будет обладать обобщенным методом движения. В классах-потомках этот метод будет конкретизирован: автомобиль будет ездить, самолет – летать, корабль – плавать. Такое изменение семантики метода называется полиморфизмом. Полиморфизм – это выполнение методом с одним и тем же именем различных действий в зависимости от контекста, в частности, от принадлежности тому или другому классу. В разных языках программирования полиморфизм реализуется различными способами.
Существует заблуждение, что объектно-ориентированное программирование является чем-то сложным и непонятным. В программирование основные понятия ООП перешли из других областей знаний, таких как философия, логика, математика и семиотика, причем, не претерпев особых изменений, по крайней мере, того, что касается сути этих понятий. Объектный способ декомпозиции (представления) является естественным и применяется на протяжении многих веков. Поэтому неудивительно, что в процессе эволюции технологии программирования он занял подобающее место.
Таким образом, в процессе разработки объектно-ориентированных программ необходимо:
определить множество образующих ее объектов (декомпозиция);
для каждого класса объектов задать набор необходимых данных (полей);
для каждого класса задать набор действий (методов), выполняемых объектами;
для каждого класса указать события, на которые будут реагировать объекты, и написать соответствующие процедуры-обработчики.
В исходном программном коде должны содержаться описания классов для всех программных объектов. Кроме того, должны быть описаны переменные, у которых в качестве типов указаны имена соответствующих классов. Экземпляры классов (объекты) создаются в процессе выполнения программы.
После своего создания экземпляр класса должен получить значения для всех своих полей. Разные экземпляры одного и того же класса могут иметь различные значения полей, но обладают одними и теми же методами. Поля класса недоступны для непосредственного обращения, в том числе, и присваивания. Это сделано для повышения надежности программ. Вместо непосредственного присваивания значения полю объекта должно быть выполнено обращение к специальному методу соответствующего класса, который выполняет такое присваивание и осуществляет контроль корректности вводимого значения. Аналогичным образом, для прочтения значения поля могут также использоваться специальные методы класса. Для связи полей с методами чтения/записи их значений используются члены класса, называемые свойствами. Пользователь, вводя данные для записи их в полях объекта или считывая значения полей, имеет дело со свойствами, представляющими эти поля. Поэтому обычно используется термин «значения свойств» вместо термина «значения полей».
Итак, членами класса могут быть:
поля, используемые для хранения данных,
свойства, как средства обращения к полям,
методы, задающие функциональность объектов,
события и их обработчики, как средства управления программами.