16.4. Пример: телефонная кни га 251
делить тот способ ее решения, который в наибольшей степени соответству-
ет предъявляемым к приложению требованиям.
Опираясь на формулировку задачи, представим, как должно выглядеть
окно приложения. Нам кажется, что окно телефонной книги должно состо-
ять, во-первых, из списковой панели, отображающей список имен, в кото-
рой можно выбрать одно из них, можно добавить новое имя и можно уда-
лить имеющиеся. Во-вторых, нужна текстовая панель, в которой в ответ на
сделанный в первой панели выбор будет отображаться соответствующий
телефонный номер (е сли он есть), который можно здесь же отредактиро-
вать или ввести, если его еще нет. По этому «словесному эскизу» полезно
создать рисунок интерфейса пользователя, который послужит отправной
точкой для определения остальной части приложения. С каждой из пане-
лей можно связать определенные действия, которые полезно представить
как пункты меню, выполняющие роль посредников, используемых пользо-
вателем для того, чтобы посылать приложению необходимые сообщения.
Итак, мы преобразовали задачу в «словесный
Phone Book
Иванов
Петров
Сидоров
select
123-45-67
Рис. 16.3. Внешний
вид окна PhoneBook.
эскиз» того конкретного окна, которое надо будет
сформировать, и по этому «эскизу» создали рису-
нок интерфейса пользователя.
Зная все, что нужно, о решаемой задаче и имея
в наличии эскиз интерфейса пользователя, мож-
но определить классы объектов, которые реализу-
ют приложение. Как мы уже говорили, для окна
приложения нужен новый подкласс класса ViewMa-
nager, назовем его PhoneBook (ТелефоннаяКнига),
экземпляры которого и будут являться полнофунк-
циональными «телефонными книгами». Поскольку в вашем окне приложе-
ния появятся меню и два типа панелей, нам понадобятся экземпляры клас-
сов Menu, ListPane и TextPane. После некоторых раздумий, можно прийти
к выводу, что словарь (экземпляр класс а Dictionary) более всего подходит в
качестве модели предметной области. С его помощью мы установим связи
между именами людей и номерами их телефонов. Сами имена и номера те-
лефонов будем представлять как строки (экземпляры класса String). Задача
очень простая и для ее решения другие классы не нужны.
Выбранные нами классы отражают е стественное представление о ре-
шении задачи. Но как быть, е сли выбор не столь очевиден? Важно cделать
некоторый выбор, даже если он и не самый лучший. Можно ошибиться,
но в среде, которая легко позволяет проводить изменения, лучшее решение
можно очень быст ро создать позже. Любой прогресс в разработке прило-
жения расширит понимание того, какие классы и как следует использовать.