|
Программирование >> Проектирование интерфейса пользователя
ного тебе бутерброда или Легкие, ну-ка, вдохните поглубже, та-а-а-к, а теперь выдохните . Просто замечательно, что не нужно заботиться о подобных вещах! А как насчет управления всеми деталями механизма автомобиля в момент экстренного торможения? Если бы такая задача б1ла целиком возложена на человека, сидящего за рулем, ни о какой экстренности не могло бы быть и речи. Сокрытие информации (или сокрытие сложности) - безусловно, полезно и здорово. Жизнь стала бы просто невыносимой или даже невозможной, если бы нам с вами приходилось ежесекундно думать обо всех аспектах окружающей действительности. Системы объектно-ориентированного программирования предоставляют в наше распоряжение средства сокрытия сложных подробностей структуры объектов. Создавая класс, вы как программист обязаны написать весь его код, т.е. предусмотреть определение всех необходимых свойств и методов, которые позволят будущим объектам правильно и эффективно решать возложенные на них задачи. А теперь о том, чего следует избегать, - вы не должны требовать от потребителей интеллектуальной продукции глубокого знания всех деталей внутренней организации класса. Некоторые детали могут (и, вероятно, должны) быть скрыты от посторонних глаз. Например, на прошлых занятиях мы неоднократно обращались к объектам класса ADODB и нам вовсе не мешало незнание каких-то особенностей его реализации. Собственно говоря, а зачем знать все тонкости? Нам как пользователям класса необходимо и достаточно изучить доступные свойства и методы. Скажем, все, что следует сделать для открытия набора данных Recordset, - это вызвать метод Open. Приступая к созданию класса, имейте в виду следующее: вам, вероятно, придется написать целые горы кода, но вашим будущим счастливым пользователям, заранее обреченным на успех (остается только им позавидовать!), вовсе нет нужды доподлинно знать или даже понимать, какие внутренние силы поддерживают на плаву все это великолепие. Сокрытие некоторых деталей, несомненно, пойдет во благо, поскольку облегчит задачу использования вашего класса - точно так же, как и любого другого, в том числе стандартного. Ведь не задумываются же люди, изучающие программирование для Access, о том, как именно работает система? Класс - это молекула объектно-ориентированного мира. В VBA класс представляет собой модуль, подобный другим модулям. Впрочем, если вы захотите экспортировать содержимое обычного модуля во внешний файл, он получит расширение в то время как файлы модулей классов обозначаются расширением . CLS. В классе VBA допускаются две степени доступности его атрибутов. Первая обозначается служебным словом Public, а вторая - Private. Перед объявлением свойства или метода класса квалификатором Private вы указываете, что это внутренний атрибут класса и пользователям не стоит о нем беспокоиться. Если объявления данных или методов снабжены служебным словом Public, они входят в состав внещнего интерфейса класса и предназначены для общего использования. Public и Private в конструкциях объявлений членов класса указываются первыми. Новый термин Любой из атрибутов (свойство или метод) класса называется членом. Данные и методы, определенные в составе класса, часто называют интерфейсом класса. Если в начале конструкции объявления члена класса используется служебное слово Public, говорят, что такой член служит частью внешнего интерфейса. Если же член класса объявлен с применением квалификатора Private, он становится частью внутреннего интерфейса класса. Итак, словом Public вы указываете на объекты, предназначенные для всеобщего обозрения, а атрибуты (свойства или методы), которые обозначены квалификатором Private, составляют скрытую, внутреннюю, приватную часть класса. Создав объект класса, даже вы, автор и полноправный владелец этого класса, не сможете получить доступ к его внутреннему интерфейсу. Если вы все-таки попытаетесь обратиться к приват- ному члену класса за пределами модуля класса, то получите сообщение об ошибке: Method or data member not found (метод или член-элемент данных не найден). Если член объявлен с использованием признака Private, его следует трактовать как деталь внутренней реализации класса. Другими словами, с подобными атрибутами класса может работать только его автор. Всем другим программистам даже необязательно знать об их существовании. До появления и широкого распространения объектно-ориентированного подхода создавались программы, весь код которых был открыт и доступен, и мы как участники проекта должны были бы полностью его изучать. Теперь, взяв на вооружение объектную модель и приступая к проектированию приложения, мы обязаны обращать внимание только на внешний интерфейс тех классов, объекты которых собираемся создавать. Понятно, что в этом случае задача значительно упрощается. При создании класса вам надлежит заботиться обо всех самых мелких частностях, и это, конечно, правильно. Важно, чтобы построенный класс был самодостаточным и независимым блоком кода; в нем должны найти отражение все стороны моделируемой сущности - в вашей воле сделать их описания открытыми или приватными. В ходе работы над классом вы концентрируете внимание на коде класса в целом, но при его использовании достаточно обращаться только к атрибутам внешнего интерфейса. В последующих разделах мы более конкретно поговорим о способах и особенностях применения служебных слов Private и Public. Приведем еще несколько советов, которые могут оказаться полезными. Вы вправе пользоваться Public до тех пор, пока не почувствуете себя уверенно при обращении с членами классов, объявленными посредством Private. Впрочем, при необходимости всегда можно изменить статус доступности того или иного члена класса. Определение методов класса Методы класса - это процедуры и функции. Они объявляются и строятся в пределах модуля класса. Синтаксические правила обычны и ничем не отличаются от тех, которыми мы руководствовались ранее. Изучите листинг 21.3. Листинг 21.3. Расширенный вариант класса FirstClass 1 Option Compare Database 2 Option Base 0 3 Option Explicit 4 Enum LanguageType 5 ItTechnoid 6 ItEspanol 7 ItDeutsch 8 End Enum 9 Pubiic Sub GreetingsAufDeutsch ( ) iO: MsgBox GetGreetingsText ( ItDeutsch ) 11:End Sub 12:Public Sub GreetingsEspanol ( ) 13: MsgBox GetGreetingsText(ItEspanol) 14:End Sub 15:Public Sub GreetingsTechnoid ( ) i6: MsgBox GetGreetingsText(ItTechnoid) 17:End Sub 18:Private Eunction GetGreetingsText(ByVal Language As LanguageType) As String 19: Select Case Language 20: 21: 22 : 23 : 24: 25: 26: Case ItTechnoid GetGreetingsText Case ItEspanol GetGreetingsText Case ItDeutsch GetGreetingsText End Select Hello! Buenos diaz! Guten tag! 27:End Function Анализ В пределах модуля открытые и приватные члены класса группируйте отдельно, а внутри каждой из групп располагайте их в алфавитном порядке следования названий. Тогда и вам, и вашим коллегам не придется долго искать все то, что нужно в данный момент. I Тестовую процедуру листинга нетрудно приспособить и для провер-11 ки расширенной версии класса FirstClass, приведенной в листинге 21.3. В классе теперь содержится перечислимый тип LanguageType. В состав класса входят три общих метода: GreetingsEnglish, Greet-ingsEspanol, GreetingsDeutsch, a в его внутренний интерфейс включена функция GetGreetingsText, компактно хранящая все литеральные строки в одном месте и выбирающая нужную. Пользователь объекта класса Firstciass не сможет вызвать метод GetGreetingsText. Эта функция использует оператор Select Case для выбора строки текста. Поскольку внутренние члены класса не используются за пределами его модуля, вы как автор имеете возможность смело изменять их названия и способы реализации, не рискуя нарушить внешний код. Например, можно изменить код трех методов внешнего интерфейса, вызвав новый Private-метод, GetFastGreetingsText, и удалив метод GetGreetingsText. Эффект воздействия такого рода изменений ограничен рамками модуля класса. Члены внутреннего интерфейса класса недоступны извне, поэтому их модификация или даже удаление (если эти операции корректны сами по себе, в контексте модуля класса) никак не скажутся на работоспособности других модулей. Листинг 21.4 представляет более эффективный вариант реализации Firstciass. класса Листинг 21.4. Класс Firstciass - а может быть, вот так? 1: Option Compare Database 2 : Option Base 0 3 : Option Explicit 4: Епшп LanguageType 5: ItTechnoid 6: ItEspanoi 7: ItDeutsch R End Enum 9: Public Sub GreetingsAufDeutsch( ) 10: MsgBox GetFastGreetingsText{ ItDeutsch 11:End Sub 12:Public Sub GreetingsEspanol( )
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |