Объектно-ориентированное программирование, или ООП, представляет собой методику анализа, проектирования и написания приложений с помощью объектов. «Что такое объекты?» — спросите вы. Объектом называется фрагмент кода, обладающий свойствами и методами. Объекты создаются на базе так называемых классов и могут моделировать правила обработки данных, различные ситуации и даже физические предметы.
Люди привыкли мыслить категориями объектов. Скажем, бейсбольный матч можно представить как совокупность объектов бит, мячей, перчаток и игроков. Используя ООП, вы моделируете в своем приложении материальные явления реального мира. Но на этом возможности ООП отнюдь не исчерпываются. Вы можете использовать в программировании те же принципы, которыми руководствуетесь в реальной жизни!
ООП упрощает процесс разработки программ, поскольку свойства и методы объектов подчиняются простейшей модели безопасности. Эта модель определяется ключевыми словами Private, Public и Friend. Если вы хотите, чтобы приложение могло свободно обращаться к вашему объекту, организуйте доступ к нему через открытые (Public) свойство или метод. Закрытые свойства и методы используются только самим объектом; за его пределами они не видны и не могут использоваться в других процедурах.
|
|
Самым фундаментальным объектом Visual Basic является объект формы. Без него ваши приложения вряд ли можно было назвать «визуальными» (visual). Формы обладают множеством свойств, среди которых Appearance, BorderStyle, Caption, Name и WindowState. Все эти свойства являются открытыми и могут свободно изменяться вашими программами. Формы также обладают множеством методов, в число которых входят Load, Unload, Show и Hide.
Добавляя новую форму в проект, вы создаете «потомка» класса формы. Его свойства и методы совпадают со свойствами и методами родительской формы. По мере того, как вы изменяете их, ваша форма становится все более самостоятельной. Некоторые ее функции могут совпадать с функциями родительской формы, но это и не обязательно — все зависит от того, как вы запрограммируете данную форму. Вы можете создать любое количество форм (лишь бы программа с ними справилась) и настроить каждую отдельно от других.
Для чего нужно ООП?
Зачем программисты используют ООП в своей работе? Дело в том, что программист может распределить функции программы по нескольким независимым объек-
там. Такой подход упрощает проектирование и разработку программ. Оптимизация объектов снижает риск нежелательного взаимодействия фрагментов программы. В сущности, каждый объект моделирует ту или иную ситуацию реального мира. Представьте себе крупную компанию, состоящую из нескольких отделов. Она (назовем ее Корпорацией XYZ) включает администрацию, отдел кадров, отдел информационных технологий и бухгалтерию.
|
|
Администрация отвечает лишь за совместную работу отделов, в ходе которой достигаются цели, поставленные перед компанией. Работники администрации умеют работать с компьютерами, но для разработки корпоративной интрасети их познаний явно недостаточно. Администраторы в основном работают с менеджерами других отделов и практически не общаются с рядовыми сотрудниками Корпорации XYZ.
Отдел кадров отвечает за найм, увольнение и оценку персонала компании. Он работает с несколькими тысячами личных дел, содержание которых в других отделах считается конфиденциальным. Работники других отделов обычно не располагают свободным доступом к личных делам. Им приходится подавать заявку и получать официальное разрешение. Например, менеджер может ознакомиться с личным делом подчиненного и решить, заслуживает ли тот повышения.
Отдел информационных технологий следит за тем, чтобы все компьютеры компании работали нормально. Сотрудники отдела информационных технологий обслуживают все остальные отделы Корпорации XYZ и решают технические проблемы, возникающие в ходе работы.
Наконец, бухгалтерия ведет счета компании, производит учет имущества и сводит дебет с кредитом. Часть информации, проходящей через нее, относится к финансовому положению компании и считается строго конфиденциальной. Если эта информация попадет в чужие руки, конкуренты воспользуются ею в своих целях. Разумеется, совместная работа отделов подчиняется определенным правилам. Если отделы начнут работать с чужой информацией, в компании начнется хаос и дело может кончиться крахом Корпорации XYZ.
Итак, Корпорация XYZ установила правила, определяющие, кто и зачем может получать доступ к служебной информации. Только менеджерам разрешается просматривать личные дела сотрудников, но лишь тех, которые являются их подчиненными. Менеджеры не имеют доступа к личным делам сотрудников из других отделов, потому что излишняя осведомленность может плохо отразиться на делах Корпорации XYZ. Следовательно, такие ограничения необходимы для нормальной работы.
ООП основано на том же принципе — в нем тоже имеются ограничения, определяющие, какие фрагменты кода могут использоваться другими фрагментами. Объекты выполняют свои задачи и взаимодействуют с другими объектами, лишь когда это действительно необходимо.
Хотя ООП требует нового подхода к программированию, оно обладает несомненными удобствами для программистов. Одни и те же принципы, заключенные в программном фрагменте, применяются на всех стадиях — от анализа и проекта- рования до написания кода. ООП позволяет адекватно моделировать поведение реальных объектов.
Если они были хорошо спроектированы, открывается возможность многократного использования кода. Например, если в объекте реализован специальный алгоритм обработки данных, принятый в компании, им можно будет воспользоваться в другом приложении и обновленной версии той же программы — это не нарушит его работы.
Чтобы ООП работало действительно эффективно, вы должны научиться мыслить по-новому. Программа рассматривается как совокупность компонентов, причем каждый из них представляет собой объект. Визуальное программирование облегчает такой подход. Главное — помните, что вы можете понять суть ООП и уже умеете пользоваться объектами. Если вы дочитали книгу до этого места, то работа с готовыми объектами не представляет для вас особой сложности. Настало время узнать, как проектировать и создавать собственные объекты.
ПОДСКАЗКА Старайтесь рассматривать программу как совокупность объектов. Если вы поймете основные принципы взаимодействия объектов, перед вами откроется новый способ разработки приложений.
|
|
Атрибуты объекта
Объект обладает атрибутами, определяющими его как самостоятельную сущность в мире программирования. У объектов, как и у любых компонентов Visual Basic, есть свойства, события и методы. Тем не менее они отличаются от процедур тем, что поддерживают три важных принципа: наследование, инкапсуляцию и полиморфизм.
В Visual Basic реализованы наследование и инкапсуляция, но не полиморфизм. Следовательно, с технической точки зрения Visual Basic не является объектно-ориентированным языком, но на его примере удобно изучать основы ООП. Давайте посмотрим, как устроен объект.
Свойства объекта
Как упоминалось в уроке 1, свойства описывают объект. Каждый объект, который вы используете или создаете в своей программе, обладает некоторым именем класса, по которому его можно отличить от других объектов. Мы воспользуемся свойствами для описания отдела кадров, о котором говорилось ранее в этом уроке. Прежде всего, с личными делами сотрудников могут работать только менеджеры, и это можно описать так:
Public IsManager As Boolean
Кроме того, менеджер имеет доступ к личным делам сотрудников только своего отдела. Следовательно, нам придется определить свойство для описания отдела:
Public Department As String
Наконец, мы должны указать чиновнику из отдела кадров имя интересующего нас сотрудника. Для этого мы создадим свойство EmployeelD:
Public EmployeelD As Long
На рис. 15.1 показано, как выглядит объект класса «отдел кадров». Обратите внимание на то, что имя и отдел сотрудника представлены соответствующими свойствами класса. Чтобы создать полезный объект, недостаточно наделить его свойствами — они должны использоваться методами того же объекта.
Рис. 15.1. Свойства класса «отдел кадров»
Методы объекта
Методами называются действия, выполняемые объектом. Например, объект-окно может отображать или скрывать себя на экране и даже изменять свои размеры. Какие же действия могут потребоваться от объекта «отдел кадров»? Самым простым будет чтение личного дела (рис. 15.2). Тем не менее, перед тем как объект обратится к личному делу, необходимо убедиться, что запрос поступил от менеджера соответствующего отдела. Метод может выглядеть так:
|
|
Public Function GetFileO As String
If IsManager and Department = "Администрация" Then
GetFile = "Джон Доу"
Else
GetFile = ""
End If
End Function
Данный метод сначала проверяет, имеет ли право запрашивающий просматривать требуемое личное дело. В нашем примере он должен быть менеджером из администрации. Для рядовых сотрудников и просто любопытствующих доступ к личным делам закрыт.
Рис. /5.2. Методы класса «отдел кадров»
Наследование
Наследованием называется способность объекта сохранять атрибуты класса-родителя. Например, созданный объект формы наследует свойства и методы своего класса-родителя. Он обладает такими свойствами, как Name, WindowState и BorderStyle, а также методами Load, Unload и Hide.
Чтобы создать экземпляр объекта в Visual Basic, следует указать на его принадлежность некоторому классу и затем воспользоваться ключевым словом New. Новый объект наследует свойства и методы родителя.
Сказанное можно пояснить на примере класса диалоговых окон из урока 10. Класс clsDialogs содержит методы YNBox, ErrMsg и LoginBox. Кроме того, в приложении-примере показано, как происходит создание нового диалогового окна. Прежде всего выделяется память для хранения объекта:
Dim dlg As clsDialog
Затем сам объект создается с помощью ключевого слова New:
Set dlg = New clsDialog
Новый объект, dlg, содержит три метода: YNBox, ErrMsg и LoginBox. Все они были созданы в исходном классе clsDialogs.
Эти же принципы относятся и к нашему классу. Ключевое слово New в Visual Basic выполняет ту же функцию, что и заполнение анкеты для отдела кадров с запросом на просмотр личного дела.
Инкапсуляция
Инкапсуляцией называется механизм, благодаря которому данные и методы объекта скрываются от внешнего мира. Программист изолируется от сложностей внутренней реализации объекта. Инкапсуляция составляет одну из самых сильных сторон ООП.
Именно инкапсуляция предотвращает посторонний доступ к личным делам. Каждый отдел работает с собственной информацией, которая может быть предоставлена только уполномоченным лицам при соблюдении определенных условий. Точно так же ведут себя и объекты.
Отдел кадров «инкапсулирует» личные дела, запирая их в шкафу. Чтобы получить к ним доступ, необходимо заполнить специальную анкету. В Visual Basic инкапсуляцию обеспечивает ключевое слово Private. Возможно, вы заметили, что большинство процедур в модулях кода объявляются с ключевым словом Private, — таким образом, запрещается доступ к этим методам со стороны других форм и модулей. Если некоторая процедура должна быть открытой, перед Sub или Function следует поставить ключевое слово Public:
Public Function Format_Disk(Drive As String)
ПРИМЕЧАНИЕ Проектируя объект, старайтесь ограничиваться минимумом открытых свойств. Закрывайте все, с чем не должны работать внешние программы. Это предотвратит случайное внесение ошибок другими программистами.
Полиморфизм
Полиморфизм — способность объекта принимать различные формы. Вы знаете, что объекты могут быть производными от других объектов. Новый объект наследует методы и свойства объекта-родителя. Полиморфизм позволяет добавлять, видоизменять или даже удалять некоторые особенности поведения производного объекта.
Предположим, отдел информационных технологий решил открыть свой филиал отдела кадров. Филиал в основном следует тем же правилам, что и основной отдел, но при этом пользуется некоторыми возможностями, которые используются только в отделе информационных технологий. Например, отдел кадров хранит все документы на бумаге, а отдел информационных технологий предпочитает пользоваться компьютерами. Возможно, отдел информационных технологий собирается выписывать премии для программистов, соблюдающих рабочий график, или же ввести особые дисциплинарные меры, не входящие в компетенцию основного отдела кадров.
Отдел информационных технологий пользуется собственным вариантом анкеты, основанным на анкете отдела кадров. В ООП для этого следует создать экземпляр класса «отдел кадров» и изменить его с учетом специфики отдела информационных технологий. К счастью, в нашем случае все отличия сводятся к тому, что отдел хранит личные дела только своих сотрудников, причем не на бумаге, а в компьютере (рис. 15.3). В результате оба класса будут обладать одинаковыми свойствами и методами, но если вы запросите личное дело в отделе кадров, его достанут из шкафа. В отделе информационных технологий та же самая информация извлекается из компьютера. В ООП такой эффект достигается благодаря полиморфизму. Кроме того, рядовой служащий любого отдела точно знает, где в случае необходимости можно получить ту или иную форму.
Рис. 15.3. Полиморфизм