Постановка задачи.
Требуется реализовать программу Geolocator (это задание предлагалась в 2009 году). Программа предназначена для мобильного устройства. Она отображает карту некоторой местности и то, что на ней находится. Программа должна уметь:
- сохранять указанные пользователем описания мест на карте ("Здесь живу я", "Тут мой любимый Университет" и т.п.).
- показывать места в части карты, указанной пользователем.
- при показе должны учитываться как указанные пользователем, так и подгружаемые с публичных серверов описания мест.
- хочется иметь опцию, публиковать ли свое описание на публичном сервере.
Делаем анализ предметной области.
Выделяем понятия нашей системы: карта, видимая часть карты, место, описание места.
Пытаемся увидеть проблемы:
Автоматически подгружать "всё, что угодно" на карте не получится. Во-первых, много трафика, во-вторых, всё равно всё, возможно, будет и не отобразить. Т.е. видим проблему: возможен огромный объем данных, а раз он огромный, то его нельзя будет отобразить. Думаем, как обычно решают эту проблему => Вводят категории мест ("Личное", "Развлечения", "Учеба", "Работа" и т.п.), на карте отображаются только места из определенных категорий. Ок, теперь у нас все появились категории. Но это категории чего? Мест? Описаний мест? И не то, и не другое (описание - это текст, у текста не может быть категории "Личное", "Развлечения"; месьл - это адрес, по одному адресу может быть как то, что относится к желаемым категориям, так и то, что не относится). Так всё же, категории чего у нас есть? Получается, что категории некоторого "объектов". Объект располагается в месте, для объекта задается описание. Думаем об арности: может ли быть у одного объекта много мест? Может ли быть у одного места много объектов? Может ли быть у одного объекта много описаний? Может ли один объект относиться к нескольким категориям?
А откуда программа наша узнает, какие вообще есть категории? Значит, нужно уметь еще и подгружать категории. Запомним это! Если описаний много, все ли нас интересуют? Явно не все, т.е. есть некие "полезные", а есть "неполезные" описания. А как выбирать полезные описания? Как задать, что такое "выбрать полезные описания"? Это проблема, ведь понятие "полезного описания" неформальное! В неформальном описании требований можно написать "программа должна показывать только полезные описания мест", а в формальной спецификации так писать нельзя, нужно дать четкое определение, какие описания будут считаться полезными. Пока мы этого не сделали. Так всё же, как понять, какие описания полезные?
Как показывать места, у которых несколько объектов? Просто ставить "точку" с описанием нельзя (всё сольется в непонятную "кашу"), надо четко подумать, как показывать информацию, чтобы не получилось мешанины. Итак, еще одна проблема, как программа должна показывать такие места?
Думаем дальше, очевидно, что карта большая. Значит, вся не влезет на экран. Как быть? Как обычно решают эту проблему? Вводят масштабирование. Значит, у нас будет масштабирование. Можно приближать часть карты, удаляться, передвигаться (кстати, это новые возможности программы, о которых не было сказано в постановке задания - это правильно, что появляются такие новые возможности? или, если их нет в постановке задания, то и появляться они не должны?). Ок, но представим, что мы выбрали некий масштаб, сказали программе, "покажи все места с объектами такой-то категории на этом участке карты" (потому что нам эта категория интересна, например, "Магазины модной одежды"), и, о, ужас, программа завалила весь показываемый участок карты символами мест так, что невозможно разобрать ни одно из них! Значит, надо уметь выбирать, "фильтровать", показываемые объекты, даже в пределах выбранного участка карты и категории объектов. Т.е. надо выбирать "нужные объекты", а что такое, эти "нужные объекты"? Опять попали в область неформального. Итак, проблема: как дать определение "нужного объекта на карте" ?
Но и это еще не всё. Пользователь куда-то "тыкает" в карту, карта находится не на мелком масштабе и в результате пользователь тыкает не в то место, где реально располагается объект. Скажем, видит всю карту Москвы, тыкает "приблизительно в районе Ленинских гор", чтобы указать, что он тут учится и тут находится факультет ВМК :) (а на самом деле метка может попасть куда-нибудь, например, в здание экономического факультета) Его метка попадает на публичный сервер. А через некоторое время некий абитуриент, который хочет поступать на ВМК, считывает с публичного сервера метку - и, о ужас, приходит подавать документы на экономический факультет, и этот абитуриент для нас потерян! Итак, проблема неточной постановки мест на карте - это действительно проблема для нашей программы или нет?
Раз речь зашла про публичный сервер, куда многие могут засылать места, объекты и их описания, то, очевидно, этот сервер быстро превратится в "помойку". Там будет не просто очень много информации, а там будет и просто ложная информация. Итак, очередная проблема: поддержание корректности данных на публичном сервере. Ее решение - это задача нашей программы? Или так, может ли наша программа хотя бы частично помочь серверу в определении заведома плохой информации, которую пытаются туда заслать?
Мы сформулировали уже очень много вопросов, хотя, казалось бы, всё начиналось лишь с одного абзаца текста с описанием желаемой системы. Заказчик ее видел достаточно просто, но мы должны взглянуть на систему более пристально, чтобы в результате получился как можно более лучший продукт.
(продолжение следует; крайне приветствуются комментарии!)
Комментариев нет:
Отправить комментарий