Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++ (1158635), страница 35
Текст из файла (страница 35)
Исторически сложилось так, чтоместо каждого организма в иерархической системе определяется на основаниивнешнего и внутреннего строения тела и эволюционных связей. Всовременной классификации живых существ выделяются группы организмов,имеющих общую генетическую историю, то есть организмы, имеющиесходные ДНК, включаются в одну группу. Классификация по ДНК полезна,чтобы различить организмы, которые похожи внешне, но генетически сильноотличаются.
По современным воззрениям дельфины ближе к коровам, чем кфорели [б].Возможно, для программиста биология представляется зрелой, вполнесформировавшейся наукой с определенными критериями классификацииорганизмов. Но это не так. Биолог Мэй сказал: "На сегодняшний день мы дажене знаем порядок числа видов растений и животных, населяющих нашупланету: классифицировано менее, чем 2 млн. видов, в то время каквозможное число видов оценивается от 5 до 50 млн." [7].
Более того,различные критерии классификации одних и тех же животных приводят кразным результатам. Мартин утверждает, что "все зависит от того, что выхотите получить. Если вы хотите, чтобы классификация говорила о кровномродстве видов, вы получите один ответ, если вы желаете отразить уровеньприспособления, ответ будет другой" [8]. Можно заключить, что даже встрогих научных дисциплинах методы и критерии классификации сильнозависят от цели классификации.Аналогичная ситуация сложилась и в химии [9].
В древние временасчиталось, что все вещества суть комбинации земли, воздуха, огня и воды. Внастоящее время такая классификация не может считаться сколько-нибудьудовлетворительной. В середине XVII в. Роберт Бойль предложил элементыкак примитивные химические абстракции, из которых составляются болеесложные вещества. Век спустя, в 1789 г., Лавуазье опубликовал первыйсписок, содержащий 23 элемента, хотя впоследствии было открыто, чтонекоторые из них таковыми не являются. Но открытие новых элементовпродолжалось, список увеличивался.
Наконец, в 1869 г. Менделеев предложилпериодический закон, который давал точные критерии для классификацииизвестных элементов и даже мог предсказывать свойства еще не открытыхэлементов. Но даже периодический закон не был концом истории оклассификации элементов. В начале XX в.
были открыты элементы содинаковыми химическими свойствами, но с разными атомными весами изотопы.Вывод прост. Как утверждал Декарт: "Открытие порядка - нелегкаязадача, но если он найден, понять его совсем не трудно" [10]. Лучшиепрограммистские решения выглядят просто, но, как показывает опыт,добиться простой архитектуры очень трудно.Итеративная суть классификации.
Все эти сведения мы привелиздесь не для того, чтобы оправдать "долгострой" в программном обеспечении,хотя на самом деле многим менеджерам и пользователям кажется, чтонеобходимы века, чтобы закончить начатую работу. Мы просто хотелиподчеркнуть, что разумная классификация - работа интеллектуальная илучший способ ее ведения - последовательный, итеративный процесс. Этостановится очевидным при анализе разработки таких программных продуктов,как графический интерфейс, стандарты баз данных и языки программированиячетвертого поколения. Шоу утверждает, что в разработке программногообеспечения "развитие какой-либо абстракции часто следует общей схеме. Вначале проблема решается ad hoc, то есть как-нибудь, для каждого частногослучая.
По мере накопления опыта некоторые решения оказываются болееудачными, чем другие, и возникает род фольклора, переходящего от человекак человеку. Удачные решения изучаются более систематически, онипрограммируются и анализируются. Это позволяет развить модели,осуществить их автоматическую реализацию, и разработать теорию,обобщающую найденное решение. Это в свою очередь поднимает практику наболее высокий уровень и позволяет взяться за еще более сложную задачу, ккоторой, в свою очередь, мы подходим ad hoc, тем самым начиная новыйвиток спирали" [11].Итеративный подход к классификации накладывает соответствующийотпечаток и на процедуру конструирования иерархии классов и объектов приразработке сложного программного обеспечения.
На практике обычно заоснову берется какая-то определенная структура классов, которую постепенносовершенствуют.Разные наблюдатели классифицируют один и тот же объект по-разномуИ только на поздней стадии разработки, когда уже получен некоторыйопыт использования такой структуры, мы можем критически оценить качествополучившейся классификации. Основываясь на полученном опыте, мы можемсоздать новый подкласс из уже существующих (вывод), или разделитьбольшой класс на много маленьких (факторизация), или, наконец, слитьнесколько существующих в один (композиция).
Возможно, в процессеразработки будут найдены новые общие свойства, ранее не замеченные, и мысможем определить новые классы (абстракция) [12].Почему же классификация так сложна? Мы объясняем это двумяпричинами. Во-первых, отсутствием "совершенной" классификации, хотя,естественно, одни классификации лучше других. Кумбс, Раффья и Тралутверждают, что "существует столько способов деления мира на объектныесистемы, сколько ученых принимается за эту задачу" [13]. Любаяклассификация зависит от точки зрения субъекта.
Флуд и Кэрсон приводятпример: "Соединенное Королевство... экономисты могут рассматривать какэкономический институт, социологи - как общество, защитники окружающейсреды - как гибнущий уголок природы, американские туристы - какдостопримечательность, советские руководители - как военную угрозу,наконец, наиболее романтичные из нас, британцев - как зеленые луга родины"[14].
Во-вторых, разумная классификация требует изрядной доли творческогоозарения. Бертвистл, Даль, Мюрхауг и Нюгард заключают, что "иногда ответочевиден, иногда он - дело вкуса, а бывает, что все зависит от умения заметитьглазное" [15]. Все это напоминает загадку: "Почему лазерный луч похож назолотую рыбку?.. Потому, что ни тот, ни другой не умеют свистеть" [16]. Надобыть очень творческим мыслителем, чтобы найти общее в настольконесвязанных предметах.4.2.
Идентификация классов и объектовКлассический и современный подходыСо времен Платона проблема классификации занимала умыбесчисленных философов, лингвистов, когнитивистов, математиков. Поэтомубыло бы разумно изучить накопленный опыт и применить его в объектноориентированном проектировании. Исторически известны только триподхода:•классическая категоризация•концептуальная кластеризация•теория прототипов [17].Классическая категоризация.
В классическом подходе "все вещи,обладающие данным свойством или совокупностью свойств, формируютнекоторую категорию. Причем наличие этих свойств является необходимым идостаточным условием, определяющим категорию" [18]. Например, холостыелюди - это категория: каждый человек или холост, или женат, и этот признакдостаточен для решения вопроса, к какой категории принадлежит тот илииной индивидуум. С другой стороны, высокие люди не определяют категории,если, конечно, мы специально не уточним критерий, позволяющий четкоотличать высоких людей от невысоких.Классическая категоризация пришла к нам от Платона и Аристотеля.Последний в своей классификации растений и животных пользовалсятехникой рассуждений, напоминающей современную детскую игру в 20вопросов (Это минерал, животное или растение? Это покрыто мехом илиперьями? Может ли оно летать? Пахнет ли оно?) [20].
Такой подход нашелпоследователей, наиболее выдающимися из которых были: Фома Аквинский,Декарт, Локк. По утверждению Фомы Ак-винского: "Мы можем именоватьвещи согласно нашим знаниям об их природе, получаемым через познание ихсвойств и действий" [21].Принципы классической категоризации отражены в современнойтеории развития ребенка.
Пьяже утверждает, что после первого года жизниребенок осознает существование объектов и затем начинает приобретатьнавыки их классификации, вначале пользуясь базовыми категориями, такими,как собаки, кошки и игрушки [22]. Позднее ребенок осознает, с одной стороныболее общие (животные), а с другой стороны, более частные категории (колли,доги, овчарки) [23].Таким образом, классический подход в качестве критерия похожестиобъектов использует родственность их свойств.
В частности, объекты можноразбивать на непересекающиеся множества в зависимости от наличия илиотсутствия некоторого признака. Мински предположил, что "лучшимиявляются такие наборы свойств, элементы которых мало взаимодействуютмежду собой. Этим объясняется всеобщая любовь к таким критериям какразмер, цвет, форма и материал. Так как эти критерии не пересекаются, прокакой-нибудь предмет можно утверждать, что он большой, серый, круглый идеревянный" [24]. Вообще говоря, свойства не обязательно должны бытьизмеряемыми, в качестве их можно использовать наблюдаемое поведение. Тообстоятельство, что птицы летают, а рыбы нет, позволяет отличить орла отфорели.Проблема классификацииНа рис.
4-1 показаны 10 поездов, обозначенных буквами от А до JКаждое изображение состоит из паровоза и нескольких вагонов. Прежде чемпродолжать чтение, попытайтесь за 10 минут определить несколько группизображений, составленных по какому-то логическому признаку. Например,изображения можно разбить на три группы: в одной группе поезда имеютчерные колеса, в другой группе - белые, а в третьей - и белые, и черные.Этот пример взят из работы Степпа и Михальски о концептуальномобъединении [19]. Очевидно, "правильного" разбиения на группы несуществует. Наши изображения были классифицированы 93 различнымиспособами. Наиболее распространенный способ классификаций по длинесостава: были выделены три группы: составы с двумя, тремя и четырьмявагонами.