Концепция объектно-ориентированного программирования
Поскольку все современные средства разработки программного обеспечения, языки и технологии создания программ продолжают основываться на объектно- ориентированном программировании, предлагаем ознакомиться с основными положениями этого подхода. Объектно-ориентированное программирование базируется на четырех основных принципах: абстракции, наследовании, инкапсуляции и полиморфизме.
19.3.1. Абстракция
Классы представляют собой абстрактные описания структур данных, но сами данные они не содержат. Данные появляются тогда, когда по описаниям классов в памяти программы выделяется необходимое пространство и в нем создаются экземпляры класса, или объекты. Тогда для каждого поля класса отводится необходимая область памяти и в эту область можно поместить нужное значение.
Пример. Предположим, у нас есть три измерительных прибора: термометр, барометр и весы. Чтобы описать эти приборы внутри программы, мы абстрагируем важные для программы свойства этих приборов и создаем три класса (рис. 19.4).
Рис. 19.4. Классы |
По названиям в соответствующих ячейках видно, что поля класса содержат в себе данные, описывающие состояние класса. Методы класса представляют реализацию некоторых действий, то есть описывают поведение класса. Например, метод класса «термометр», который носит название «измерить температуру», призван помещать значение температуры в поле с именем «температура». На рис. 19.5 представлены объекты (экземпляры класса).
Экземпляр класса «термометр» | |
Инв. номер | |
Название | TRM |
Цвет | белый |
Исполнение | оконный |
Температура | |
Измерить температуру |
Экзмпляр класса «весы» | |
Инв. номер | |
Название | VSV |
Цвет | серый |
Исполнение | напольные |
Вес | |
Измерить вес |
Экземпляр класса «барометр» | |
Инв. номер | |
Название | DRM |
Цвет | хром |
Исполнение | настенный |
Давление | |
Измерить давление |
Рис. 19.5. Экземпляры классов |
19.3.2. Наследование |
Пример. В рассмотренном примере у трех разных классов есть одинаковые поля: Инв. номер, Название, Цвет, Исполнение. Каждый раз при создании нового класса измерительного прибора приходится снова и снова создавать эти поля. Данная ситуация значительно упрощается за счет наследования: мы создаем класс Измеритель, в который помещаем эти повторяющиеся поля, а затем наследуем от него наши классы Термометр, Весы и Барометр (рис. 19.6).
класс «измеритель»
. Инв. -номер' :
'Название-'
.Цвет.'
,Исполнение :
класс «весы» наследник класса «измеритель» класс «барометр» наследник класса «измеритель»
Давление• |
Температура
ШШШШШШ^йиш
Рис. 19.6. Наследование
Широкая кривая на рисунке показывает, что при наследовании поля и методы базового класса включаются в состав класса потомка.
19.3.3. Полиморфизм
Полиморфизм основывается на двух свойствах, которые реализуют объектно- ориентированные языки программирования: способности трактовать объект класса-наследника как тип базового класса и способности класса иметь виртуальные методы. Особенность виртуального метода состоит в том, что он надежно связан с созданным экземпляром класса.
Пример. Если добавить в каждый из классов (в класс Измеритель и каждый из его наследников) метод Сигналить, а в реализации этого метода описали бы для каждого класса свой способ подавать сигнал (для термометра — мигать, для весов — издавать звук сирены, а для барометра — свистеть), то мы могли бы всем объектам, потомкам класса Измеритель, дать команду: измерители, сигналить! И каждый из них подал бы сигнал: термометры бы замигали, весы издали звук сирены, а барометры засвистели. Это и есть результат работы виртуальных методов.
19.3.4. Инкапсуляция
Инкапсуляция реализуется в объектно-ориентированном программировании при помощи областей видимости. Области видимости обозначаются в структуре класса специальными служебными словами. Например, слово private означает, что
все поля и методы, объявленные в этой области видимости, невидимы для внешнего мира, a public, наоборот, — что все, объявленное в этой зоне, для внешнего мира открыто. Таким образом, у класса появляется своего рода защитный корпус, предохраняющий от излишней перегрузки программы объявленными именами и методами. Наружу класс экспонирует только то, что составляет его интерфейс и предназначено для внешнего взаимодействия. Все остальные поля и методы он скрывает внутри, помещая их в область видимости private.
Дата добавления: 2016-04-14; просмотров: 526;