***Множественная классификация и множественное наследование в реальном мире встречается довольно часто, другое дело, что современный ООЯ просто не позволяет просто воспользоваться этим.***
ну не очень то и часто множественная классификация(выражающаяся в множественом наследовании) встречаются в этом мире.
и она сводима к однократному наследованию. это можно показать, соббсно.
действительно. если вы решили что ваш класс должен находиться в двух классификациях сразу, то чтобы разделить "сцепившиеся классификации" вам можно просто расщепить класс на два - один для одной классификации, и другой - для другой. вообще сцепившиеся классификации говорят скорее о том, что классификация проведена неверно. с точки зрения математики классификация есть разбиение общего множества обьектов(ну или понятий) на непересекающиеся домены, поддомены и так далее до конечных подмножеств. непересекающихся даже в пределах одного разбиения-данной классификации. и вдруг получется, что другое разбиение(классификация) дает некий домен, что вы считаете эквивалентным домену из совершенно другого разбиения!!! йерунда получается.
***а параметризированные классы не укладываются в то, что Вы описали?***
не очень понял. параметризованные классы это просто генераторы актуальных классов. ну можно назвать их метаклассами или еще чем. название генераторов классов им больше подходит.
если создается обьект некоего параметризованного класса, то в данном месте в генератор происходит подстановка параметров, генерируется актуальный класс, и все.
***Т.е. Вы считаете ассоциации - простой аналитической дурью?***
это было слишком сильное утверждение с моей стороны. имелось ввиду что в области разработки софта увлечение стрелками сильно перегружает диаграмму, что резко снижает ее читабельность.
***А что вы понимаете здесь под "розой"***
Rational Rose.
***Т.е. единственная причина использовать автогенерацию - это лень?***
составлять диаграммы без генерации кода - пустая забава. она даже зря порой оплачивается. диаграммы классов, без генерации, и если этот код не проверен компилятором, может быть даже семантически неверной. например атрибут класса с неким типом, написанным явно, навроде
_my_attr: SomeClass внутри класса,
будет скорее всего проглочен системой, даже если SomeClass более нигде не описан. При генерации кода и его компиляции это будет обнаружено компилятором.
Итак диаграмма классов хороша для визуального анализа вашей системы, как набора классов, проведения этапа разбиения на модули, подсистемы, генерации кода, и генерации документации. с генерацией тестов никогда не работал, ничего сказать не могу.
***Трудно не согласиться, но не стоит ли все-таки различать аналитическую работу и собственно реализацию. Или Вы полагаете, что аналитика - суть пиар и ничего более?***
мощный вопрос. я лично со всем радикализмом считаю, что просто "аналитиков" в мире не бывает. аналитик обязательно должен знать предметную область, и особенности реализации. хотя бы неявно.
пример. я занимался разработкой компиляторов, например. вы например в этом не понимаете, но вы аналитик, и начинаете рисовать диаграммы работы компилятора. ну и что вы нарисуете? две три очевидных диаграммы, типа - подать файл на вход системы, если найдена ошибка, выдать сообщение куда-то с указанием типа ошибки и позиции в тексте. все. а это понятно и без диаграмм. и без аналитиков.
итак. если аналитик не понимает предметной области и особенностей реализации, он беспомощен.
***Может быть все дело в точке зрения? Что такое эти 500 классов - откуда они появились? Это классы предметной области? Или уже объекты программной реализации? Все ли 500 классов вам нужны для анализа одновременно?***
это классы - всего. разумеется они распадаются на подсистемы, часто различные приложения или службы, и так далее. но это система выполняющая некую общую задачу.
ну например представьте себе структуру типовой ос. и есть архитектор ос. задачи такого рода, разумеется, трудно решать только в виде текста на с++.
***Понимаете явное указание атрибута типа объект среди атрибутов другого класса по сути есть уже указание на решение, но задача аналитика не указать конкретное решение по реализации, а сказать что нужно реализовать. Ведь Вы не будете спорить, что ассоциацию можно реализовать по-разному? В то время как явное указание атрибута жестко будет определять и способ реализации связи между двумя объектами - через ссылку, массив, коллекцию или создание отдельного класса.***
если атрибут простого типа вроде
_is_correct:boolean
вы будете рисовать на квадратик класса boolean какую-то свободную от деталей реализации ассоциацию?
если вы архитектор верхнего уровня, не ваше дело рисовать атрибуты. вы должны рисовать методы. то есть составлять функциональные интерфейсы классов. а атрибуты всегда имеют прямое отношение к реализации. не хотите иметь отношения к реализации - рисуйте контракты - то есть функциональный набор.
рисуете атрибуты - думайте о реализации.
в случае если вы уверены, что у класса должен быть некий атрибут, что выразим как множество экземпляров неких других классов, типа ссылки на нечто во множественном числе...просто напишите
_name: PoolOfFoo. где PoolOfFoo - некий класс с собственной функциональностью(что вы должны тоже описать), и уже программер и пусть решает как этот Pool ему реализаовать.
Стрелка вообще ничего ему не скажет.
Ну генератор кода сделает из этой стрелки нечто вразумительное, по ему известным правилам. Но тогда это уже не выбор программиста, а выбор конфигурации паттернов генерации кода. Если вы их не знаете, не понимаете какой код они сгенерят,...то тут легко получить уязвимость с точки зрения адекватной реализации.
Хочу резюмировать. Диаграмма классов(и заложенные в ней возможности) адекватны именно реализационному этапу в разработке софта. Если вы собираетесь ее использовать только на этапе логического анализа верхнего уровня, и потом передать кодерам...то вы пропустили именно самый трудный и длительный этап - этап реализации, с генерацией кода. кодеры у вас окажутся в слишком свободной ситуации, и наверняка будут нести отсебятину, в результате которой система окажется незрелой во многих смыслах.
Если же вы дали систему классов сформулированную до конца, с требованием, что кодеры не имеют права менять состав классов без согласования с вами, и занесения это в диаграммы - то кодеры оказываются в жестких рамках и кстати, довольно часто это приветсвуют. поскольку им не нужно особо задумываться над тонкостями реализации. они просто наполняют тела методов нужным кодом. и если классы сформулированы верно, методы обычно довольно атомарны и не имеют сложной логики.