Шаг 55.
Унифицированный язык моделирования UML.
Подходы к классификации

    На этом шаге рассмотрим три подхода к классификации.

    Исторически известны только три подхода к классификации:

  1. Классическая категоризация.

        Классический подход к категоризации основан на следующем принципе. "Все сущности, обладающие данным свойством или совокупностью свойств, образуют некоторую категорию. Эти свойства являются необходимыми и достаточными условиями, определяющими категорию" [Lakoff, G. 1987. Women, Fire, and Dangerous Things: What Categories Reveal About the Mind. Chicago, IL: The University of Chicago Press, p. 161.].

        Например, супруги образуют отдельную категорию: каждый человек либо состоит в браке, либо нет. Этот признак достаточен для того, чтобы решить, к какой категории принадлежит тот или иной человек. С другой стороны, высокие люди не образуют отдельную категорию, если, конечно, не существует абсолютный критерий, позволяющий различать высоких и низкорослых людей.

        Классическая категоризация впервые была предложена Платоном (Plato). Позднее Аристотель (Aristotle), классифицируя растения и животных, использовал метод, напоминающий современную детскую игру "20 вопросов" (Это животное, минерал или растение? Оно покрыто мехом или перьями? Может ли оно летать? Пахнет ли оно?) [Wegner, P. 1987. The Object-Oriented Classification Paradigm. In: Research Directions in Object-Oriented Programming. Cambridge, MA: The MIT Press, p. 480.]. Вопросы классификации волновали и позднейших философов, среди которых следует выделить Фому Аквинского (Quinas), Декарта (Descartes) и Локка (Locke).

        Принципы классической категоризации отражены в современных теориях развития ребенка. Пьяже (Piaget) утверждает, что после первого года жизни ребенок осознает постоянство объектов и вскоре приобретает навыки их классификации, вначале используя базовые категории, такие как собаки, кошки и игрушки [Maier, H. 1969. Three Theories of Child Development: The Contributions of Erik H. Erichon, Jean Piaget, and Robert R. Sears, and Their Applications. New York, NY: Harper and Row, p. 111.]. Позднее ребенок обнаруживает как более общие категории (например, животные), так и более специализированные (например, гончие) [Lakoff. Women, Fire, and Dangerous Things, p. 32.].

        Таким образом, классический подход в качестве критерия схожести объектов использует родственные свойства. В частности, объекты можно разделять на непересекающиеся множества в зависимости от наличия или отсутствия некоторого признака. Мински (Minsky) предположил, что наиболее полезными являются такие совокупности свойств, элементы которых мало взаимодействуют между собой. Это объясняет всеобщую популярность таких критериев, как размер, цвет, форма и вещество. Поскольку эти атрибуты слабо связаны друг с другом, их можно комбинировать и утверждать, что некий объект одновременно велик или мал, деревянный или стеклянный, круглый или квадратный [Minsky, M. 1986. The Society of Mind. New York, NY: Simon and Schuster, p. 199.].

        Вообще говоря, свойства не сводятся лишь к измеримым характеристикам. Они могут описывать любое наблюдаемое поведение. Например, тот факт, что птицы могут летать, а рыбы — нет, позволяет отличить орла от лосося.

        Выбор конкретных свойств, которые следует рассматривать в определенной ситуации, сильно зависит от предметной области. Например, цвет автомобиля может оказаться важным для управления запасами автомобильного завода, но не имеет значения для программы, управляющей светофорами на городских улицах. Вот почему нет абсолютных критериев классификации, хотя одна структура классов может больше подходить для одного приложения, чем для другого.

        Как заметил Коско (Kosko), естественные категории, как правило, являются нечеткими. Большинство птиц летает, но не все. Стул может быть деревянным, металлическим или пластмассовым, а количество ножек у него целиком зависит от прихоти конструктора. Практически невозможно перечислить однозначные свойства естественной категории, не допускающей исключений [Kosko, B. 1992. Neural Networks and Fuzzy Systems. Englewood Cliffs, NJ: Prentice-Hall.]. Эти проблемы классической категоризации, действительно, имеют фундаментальный характер. Для их решения были развиты концептуальная кластеризация и теория прототипов.

  2. Концептуальная кластеризация.

        Концептуальная кластеризация является более современным вариантом классического подхода. Она возникла в результате попыток разработать способы формального представления знаний. Степп и Михальски утверждают, что при таком подходе сначала формируются концептуальные описания классов (кластеров сущностей), а затем проводится классификация в соответствии с этими описаниями [Stepp and Michalski. Conceptual Clustering, p. 44.]. Например, можно сформулировать понятие "патриотическая песня". Эта сущность в большей степени является именно понятием, а не свойством, поскольку степень "патриотичности" песни едва ли поддается измерению. Однако если можно каким-то образом понять, что данная песня скорее о патриотизме, чем не о патриотизме, то ее следует отнести к этой категории.

        Концептуальная кластеризация тесно связана с теорией нечетких (многозначных) множеств, в которой объект может принадлежать к нескольким категориям одновременно, причем степень его принадлежности категории изменяется. Концептуальная кластеризация позволяет высказывать абсолютные суждения о классификации, основываясь на принципе "наилучшего согласия".

    3. Теория прототипов [Sowa, J. 1984. Conceptual Structures: Information Processing in Mind and Machine. Reading, MA: Addison-Wesley, p. 16.].

        Классическая категоризация и концептуальная кластеризация достаточно выразительны для проектирования сложных программных систем. Однако существуют ситуации, в которых эти методы не работают. Для решения этой проблемы была разработана теория прототипов, предпосылки основы которой заложены в работе Рош (Rosch) и ее коллег по когнитивной психологии [Lakoff. Women, Fire, and Dangerous Things, p. 7.].

        Некоторые абстракции не имеют ни четких границ, ни четкого определения. Лакофф (Lakoff) объясняет эту проблему так: "По утверждению Виттгенштейна (Wittgenstein), существуют категории (например, игры), не соответствующие классическим образцам, поскольку нет свойств, присущих всем играм... Несмотря на отсутствие общих свойств, их можно объединить, руководствуясь понятием, которое Виттгенштейн назвал фамильным сходством (family resemplances)... По наблюдениям Виттгенштейна, у категории игр нет четких границ. Категорию можно расширять, включая в нее новые разновидности игр при условии, что они напоминают уже известные игры".

        По этой причине описанный подход называется теорией прототипов: класс объектов определяется прототипом и объект считается членом класса только при условии, что он в достаточной степени похож на соответствующий прототип.

        Лакофф (Lakoff) и Джонсон (Johnson) использовали теорию прототипов для решения задачи о классификации стульев. Мы считаем мягкий стул, парикмахерское кресло и табуретку разновидностями стула не потому, что они имеют некоторый фиксированный набор признаков прототипа, а потому, что они имеют достаточное фамильное сходство с прототипом... Не требуется никакого общего набора свойств прототипа, которое годилось бы и для мягкого стула и парикмахерского кресла, но они оба являются стульями, так как каждый из них, каждый по-своему, похож на прототип. Главными при определении фамильного сходства являются свойства взаимодействия с объектом [Lakoff, G., and Johnson, M. 1980. Metaphors We Live By. Chicago, IL: The University of Chicago Press, p. 122.].

        Свойство взаимодействия — центральное понятие теории прототипов. В концептуальной кластеризации сущности группируются в соответствии с различными концепциями. В теории прототипов классификация объектов производится по степени их сходства с конкретными прототипами.

    Три рассмотренных подхода к классификации имеют непосредственное отношение к объектно-ориентированному проектированию. Сначала осуществляется идентификация классов и объектов, относящихся к исследуемой предметной области. При этом проектировщики концентрируют свое внимание на идентификации структур и свойств, включенных в словарь предметной области. Таких абстракций, как правило, много.

    Если этот метод не позволяет создать приемлемую структуру классов, следует попытаться применить концептуальную кластеризацию (или уточнить классификацию понятий, относящихся к предметной области). В центре внимания при этом находятся свойства взаимодействующих объектов.

    Если же оба метода не приводят к удовлетворительному результату, следует провести классификацию по ассоциации, в которой кластеры содержат объекты, напоминающие некоторый прототип.

    Эти три способа классификации образуют теоретическую основу объектно- ориентированного анализа, предлагая много практических советов и эмпирических правил, которые можно применить для идентификации классов и объектов при проектировании сложной системы программного обеспечения.

    На следующем шаге рассмотрим подходы к анализу объектно-ориентированных систем.




Предыдущий шаг Содержание Следующий шаг