|
Программирование >> Проектирование интерфейса пользователя
ляра тип el. Если конструкция объявления элемента данных включает слово Global, этот элемент становится доступным из любой строки программы. Язык VBA не предусматривает специальных служебных слов для объявления локальных переменных - свойство локальности подразумевается неявно. В строкам определяется процедура, в теле которой создается еще два экземпляра типа Typel. Переменная ТЗ локальна, поэтому существует только в период выполнения процедуры Oth- erTypeVars. Строка 10 содержит инструкцию создания статической переменной Т4 типа Typel. Переменные, снабженные служебным словом static, доступны только в контексте объявления - внутри функции или подпрограммы, но сохраняют свои значения от одного успешного вызова функции (процедуры) к другому. Перечислимые типы Перечислимые типы во многом схожи с константами, но между ними существуют и серьезные различия. Константа - это именованное неизменное значение, представляющее единственный элемент данных. Перечислимый тип (перечисление) - это набор имен, которым присваиваются целочисленные я:. либо неявно (в этом случае значение, отвечающее определенному имени-члену типа, зависит от порядка следования имен), либо непосредственно. Взгляните на синтаксис объявления перечисления и сопоставьте его с конструкцией объявления пользовательского типа. Enum ИмяПеречислимогоТипа Элемент! [= ЦелочисленноеЗначение] [Элемент2 [= ЦелочисленноеЗначение]] ▼ [Элементы [= ЦелочисленноеЗначение]] End Enum Конструкция открывается строкой, содержащей служебное слово Enum и имя перечислимого типа, и завершается парой слов End Enum. Число элементов-членов типа произвольно. Каждому элементу или только некоторым из них могут быть поставлены в соответствие целочисленные значения. Перечислимые типы находят применение в тех ситуациях, когда удобно определить набор имен, которым отвечают строго определенные целые числа. Несмотря на целочисленный характер значений элементов-членов перечислимого типа, их нельзя присваивать обычным переменным типа Integer или сопоставлять с такими переменными - подобные операции допустимы только в отношении объектов того же перечислимого типа. Листинг 11.4 иллюстрирует пример использования перечислимого типа. Листинг .4. Пример использования перечислимого типа 1: Enum EmploymentStatus 2: eslnterviewed = 1 3 : esHired = 2 esTerrainated = 3 esLeaveOfAbsence = 4 End Enum 4: 5: 6: 7: 8 Sub SetEmploymentStatusWithEnum (ByVal CurrentStatus As EmploymentStatus) 10: 11: 12: 13: 14: 15: 16: If (CurrentStatus = esHired) Then Что-то нужно сделать End If End Sub Su sWithlnteger (ByVal CurrentStatus As Integer) 18: If (CurrentStatus >= 1 And CurrentStatus <= 4) Then 19: If (CurrentStatus = 1) Then 20: Нужно сделать то же самое 21: End If 22: End If 23: End Sub Строки листинга содержат объявление перечислимого типа предусматривающего четыре возможных элемента-значениям rviewed, esHired minated и esLeaveOfAb-sence. В строках 8-14 находится текст процедуры, использующей объект созданного перечислимого типа, а ниже (в строках приведена аналогичная по функциональным возможностям процедура, применяющая обычные значения типа Integer. Обратите внимание, насколько изящнее первая версия. По причине того, что переменным перечислимого типа могут присваиваться только заранее оговоренные значения, необходимость в дополнительных проверках (аналогичных приведенной в строке 18) отпадает. Напротив, в варианте, не использующем переменные перечислимого типа, такие проверки обязательны, иначе о надежности кода говорить не стоит. Естественно, программа потребует добавления дополнительных строк. Используйте именованные константы вместо литералов и перечислимые типы вместо наборов постоянных целочисленных значений. Кроме того, обратите внимание, насколько более прозрачна и доходчива первая версия условной конструкции (if (CurrentStatus = esHired) Then) в сравнении со второй (CurrentStatus = Then): esHired - конкретное имя, а 1 - просто некоторое абстрактное число. Перечислимый тип - это идиома, придающая коду ясность и четкость. Иными словами, всякий раз, когда возникает необходимость в использовании ограниченного набора целочисленных значений, удобно применять перечислимые типы; в противном случае придется написать код большего объема и менее высокого качества. А теперь повторим Пользовательский тип - удобное средство построения структуры данных, которая не укладывается в схему стандартных простых или составных типов. Например, если задача требует хранения нескольких элементов информации, относящейся к абоненту электронной почты, целесообразно объявить новый тип и включить в него все атрибуты данных, характеризующие абонента - имя, фамилию, почтовый адрес и т.п. В функцию или процедуру всегда ще передать одну переменную сложного типа, нежели дюжину значений простых типов; таким образом, типы, определяемые пользователем, - это еще и средство упрощения интерфейса функций и подпрограмм. Резюме На этом занятии мы изучили конструкции объявлений пользовательских и перечислимых типов данных, способы создания экземпляров новых типов и их практического применения. Типы, определяемые пользователем, - это средство агрегации данных, а перечисления - эффективный инструмент представления ограниченных наборов целочисленных значений. Рассмотренные темы - первый шаг на пути к постижению таинств объектно-ориентированного программирования. Впереди - крутой подъем, обойти который не удастся. Вам придется обращаться к объектам чуть ли не в каждой программе, поэтому лучше заранее установить с ними доверительные отношения. Итак, вы изучили вопросы объявления новых типов и перечислений, создания локальных, глобальных и статических экземпляров типов и ознакомились с присущими им ограничениями. Разделы Вопросы и ответы и Задания , приведенные ниже, позволят вам убедиться в прочности своих знаний. Вопросы и ответы Вопрос. Создав новый тип данных, могу ли я считать, что уже знаю приемы объектно-ориентированного программирования? Ответ. Нет. Традиционные структуры данных, какими бы сложными они ни были, - это еще не объекты. Объектно-ориентированное программирование основывается на концепции нового типа данных - класса (подробнее см. главу 21). Вопрос. Мо ли типы бгть вложеннЕии? Ответ. Да. В объявлении нового типа допускается использовать переменные существующих типов. Единственный критерий истины - практическая целесообразность. , Вопрос. Разрешается ли включать в объявление типа процедуры или функции? Ответ. Нет. Подобную возможность предоставляет конструкция определения класса. Вопрос. Следует ли безоговорочно отказываться от констант в пользу перечислимых типов? Ответ. Создавайте и используйте перечислимые типы только в тех случаях, когда имеете дело с наборами целочисленных значений. Если константы никак не связаны по смыслу, определяйте их с помощью служебного слова Const. Задания Ниже приведены тестовые задания и упражнения, которые помогут вам самостоятельно проверить уровень освоения материала, изложенного в этой главе. Ответы на вопросы вы найдете в приложении. Тесты 1. Может ли пользовательский тип данн1х содержать переменную перечислимого типа? 2. Для каких целей применяются пользовательские и перечислимые типы и в чем их различие?
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |