|
Программирование >> Проектирование интерфейса пользователя
ченные для хранения информации о параметрах настройки программ, - это примеры ассоциативных массивов. Такой же структурой обладают и базы данных реестров операционных систем Windows 95, 98, NT и 2000. Реестр содержит ключи и соответствующие им значения. Если вы никогда не видели, как выглядит реестр Windows, щелкните на кнопке Пуск (Start) панели задач, выберите в меню элемент Выполнить (Run) и посредством команды RegEdit загрузите программу Редактор реестра. Не вносите в реестр никаких изменений, поскольку это может привести к разного рода нарушениям работоспособности операционной системы и прикладных программ. Класс Collection также можно считать разновидностью ассоциативных массивов, поскольку каждому элементу коллекции вы ставите в соответствие определенный ключ. В данном случае, правда, существует одно ограничение - у программиста нет доступа к ключам как к значениям. Вы должны заранее знать значения ключей, чтобы суметь ими воспользоваться. Далее вы узнаете, как применять Collection в новом классе для расширения его возможностей. Чтобы облегчить задачу сохранения ассоциативного массива в файле и чтения его из файла, добавим средства класса FileStream, который мы построили в главе 21-й час. Основы программирования классов . Когда именно следует создавать классы Никто не запрещает создавать классы при каждом удобном случае. Если говорить о формальной стороне вопроса, вы можете построить класс, содержащий единственный элемент данных, хотя, разумеется, это нельзя назвать удачным решением. В качестве общего правила можно указать следующее: целесообразно рассматривать возможность построения класса в тех случаях, когда вы способны определить три или более порций данных и предложить, по меньшей мере, столько же методов их обработки, полезных для решения определенной частной задачи. Помните о различии классов и объектов. Класс определяет вид и поведение отдельного элемента. Термин объект часто используют там, где с технической точки зрения, правильнее было бы применить термин класс. Как уже указывалось в начале этой главы, совершенно не обязательно определять классы во всех приложениях в Access. Впрочем, если вы заглянете в окно оперативной справочной системы и отыщете тему, посвященную классу Collection, то обнаружите, что этот класс содержит всего одно свойство и три метода. Тем не менее, класс Collection находит самое широкое применение. С другой стороны, неплохо, если класс содержит не более десятка общих методов, поскольку в противном случае он становится слишком сложным для восприятия и использования. Число скрытых членов класса особого значения не имеет, поскольку пользователи могут даже не знать об их существовании. Если в программе повторяется один и тот же фрагмент кода, эта программа дивергентная. Код должен быть сходящимся, т.е. каждый отдельный блок кода должен появляться в программе только один раз. Если набор из нескольких строк встречается в коде неоднократно, попробуйте организовать этот фрагмент в виде отдельного класса. Такой подход не только уменьшает объем кода, но и облегчает его сопровождение. Конечно, это самые общие правила, поэтому еще раз сформулируем основные критерии пригодности задачи к тому, чтобы быть оформленной в виде класса, и общие количественные требования к структуре класса. Существует три или более элементов данных, совместно описывающих частную задачу. Количество членов внешнего интерфейса класса не превышает десятка. Удается обосновать необходимость нарушения двух предгдущих правил. Если вы станете создавать классы только в тех случаях, которые укладываются в предложенную схему, вы достигнете вполне приемлемых результатов. Теперь вернемся к поставленной цели - нам необходим класс ассоциативной коллекции, содержащей пары ключевых имен и значений и допускающей возможность файлового ввода-вывода данных. Принципы объектно-ориентированного проектирования Один из основных принципов объектно-ориентированного проектирования состоит в необходимости построения классов, которые способны предоставить решение задач, относящихся к определенной области. Мы, например, собираемся решить задачу хранения пар данных, состоящих из имени и значения, обеспечив возможность доступа к значению по имени или по индексу и, наоборот, к имени по значению. С объектно-ориентированным программированием неразрывно связаны дисциплины объектно-ориентированного проектирования и анализа, обладающие собственными языками, методами и инструментальными средствами. Одна из самых популярнтх систем такого рода - Rational Rose. Проектирование во многом сводится к процессу моделирования. Стандартом языков моделирования служит Unified Modeling Language (UML). UML использует собственные средства описания классов и взаимоотношений между ними. За более подробной информацией о языке UML и способах его применения обращайтесь к специальной литературе (например, к книге Teach Yourself UML in 24 Hours, изданной Sams). Объектно-ориентированное проектирование - это самостоятельная область знаний, отличная от собственно программирования. Конечно, если проект прост и реализуется силами небольшого коллектива, стадии проектирования и программирования часто неразрывно связаны, чего не скажешь о крупномасштабных и сложных проектах, когда этапу программирования предшествуют серьезнхе и длительные процессы анализа, моделирования и проектирования. Основной принцип объектно-ориентированного проектирования заключается в определении набора свойств и методов, необходимого и достаточного для решения определенной задачи с помощью будущего класса. (На этом этапе программисту помогут лист бумаги и карандаш.) Ниже перечислены все требования к классу ассоциативных массивов, который будет проектироваться. Проектирование класса ассоциативных массивов Класс ассоциативных массивов, который необходимо построить, предназначен для хранения пар символьных значений. Поэтому уместно назвать его Strings. Класс обязан обеспечить реализацию возможностей, перечисленных ниже. Хранение строк. Доступ к значениям по ключевым именам. Доступ к именам по значениям. Чтение строк из файла. Запись строк в файл. Редактирование значений. Теперь, когда круг задач определен, имеет смысл придумать названия для соответствующих членов класса и решить, что именно должен представлять собой каждый из них - свойство или метод. Нам необходима возможность доступа к строкам по индексу, поэтому символьное значение должно быть свойством, допускающим индексацию. Кроме того, придется обращаться к строкам по ключевому имени, которое также следует представить в виде свойства. Указанное замечание справедливо и в отношении ключей - их надлежит оформить как свойства. Теперь подытожим: нам необходимы отдельные свойства Names и Values, а также символьная переменная Strings, предназначенная для одновременного хранения ключевого имени и значения. В наименовании свойства Strings форма множественного числа существительного выбрана по той причине, что это индексированное значение - в объекте класса их может быть несколько. Класс должен поддерживать возможность выполнения операций чтения и записи файловых данных. Поэтому потребуются два соответствующих метода - ReadFrom-File и WriteToFile. Табл. 22.1 представляет описание элементов внешнего интерфейса класса Strings. Таблица Описание внешнего интерфейса класса Strings Свойство или метод Описание Names Values Strings ReadFromFile WriteToFile Свойство Свойство Свойство Метод Метод Ключевое имя Значение Общая строка данных Процедура чтения данных из файла Процедура записи данных в файл Табл. 22.1 в общих чертах представлена структура класса strings. Перечисленные здесь свойства и методы образуют внешний интерфейс класса. Какой окажется практическая реализация - зависит от возможностей и желаний программиста (в данном случае - моих). Несколько советов по реализации класса Приступая к проектированию класса, придерживайтесь такого правила: внешний интерфейс должен быть настолько простым, насколько это возможно. Другая составляющая успеха - максимальное использование существующего кода. Такой код заведомо привлекателен по той причине, что большая часть работы уже проделана - код прошел тестирование и проверку временем. В результате новый класс окажется проще в использовании и дешевле в сопровождении. Теперь, используя данные, приведенные в табл. 22.1, можно составить скелет искомого класса - просмотрите листинг 22.1. Листинг .1. Определение членов внешнего интерфейса класса Strings 1: Option Compare Database 2 : Option Explicit 3: Public Property Get Names(ByVal Index As Integer) As String 4:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |