А вот бывает ли какая-нибудь XML-схема плюс софт для рисования диаграмм?
Нет, я, конечно, знаю про SVG. Который кое-как отображается Firefox’ом и почти совсем никак Internet Explorer’ом. И WYSYWIG’ные редакторы, позволяющие (в теории) собрать собаку из атомов водорода, углерода, азота и кислорода. Но я хочу собирать собаку не из атомов, а из головы, туловища, лап и хвоста. И, желательно, не опускаясь до деталей вида «голова расположена в точке (0, 0), а хвост в точке (175, 0)», из-за которых собака порвётся сразу, как только я захочу поменять ей породу.
То есть вот, возьмём, к примеру, UML-диаграмму статической структуры. Я могу взять Visio, вбить в него описание своих классов, раскидать классы по странице, провести между ними ассоциации, и они будут сохраняться при перемещении. Это хорошо. Но описывать классы приходится в гуёвом диалоговом окне, обладающем рядом фундаментальных недостатков.
- Оно модально. Я открываю окно атрибутов класса, добавляю атрибут, вспоминаю, что у меня в модели ещё нет его типа. Чертыхаюсь, закрываю окно атрибутов, добавляю тип в модель, открываю окно атрибутов, прописываю тип последнего атрибута, добавляю следующий атрибут. Я хотел бы описывать свои атрибуты в немодальном текстовом редакторе с каким-нибудь более или менее вменяемым синтаксисом. Если не C++, то хотя бы XML. Но чтобы я мог поставить закладку, пойти на страницу вверх, вписать новый тип, вернуться к закладке.
- Оно не злопамятно. Вот есть колонка типов атрибутов. Она по умолчанию имеет ширину такую, что в ней умещается имя моего namespace’а. А собственно типы скрыты за многоточием. Я хочу видеть тип целиком. Я растаскиваю окно пошире, потом колонку имени поуже, работаю с атрибутами одного класса. Закрываю, создаю новый класс. Ширина окна сохранилась, а ширина колонок — нет. В текстовом редакторе я настрою разамер шрифта и ширину табуляции и буду видеть всё.
- Оно ориентировано на мышевозилу гуёвого. Я хочу писать тип руками, а не выбирать из длинного списка, лишённого каких-либо средств поиска и фильтрации. Или хочу написать первые три буквы и чтоб мне предложили два подходящих типа.
- Оно не поддерживает групповые операции. Я хочу выделить все атрибуты и назначить им всем видимость
public
.
Ну и потом, когда я таки введу всю модель, мне всё равно придётся раскидывать классы по странице вручную, и они не будут подстраиваться, когда я добавлю в какой-нибудь толстый класс ещё пару атрибутов. Классы налезут друг на друга, но им и в голову (или что у них есть… ещё там) не придёт подвинуться.
Это всё типа мелочи, но именно из-за вот таких мелочей я предпочитаю UML не рисовать, а когда сильно приспичит, рисовать карандашом на бумаге.
Productivity hint: Когда надо reverse-engineer’нуть какую-нибудь мрачную базу данных или систему классов, я беру лист бумаги, режу его на маленькие карточки и рисую на каждой карточке один класс или таблицу. Потом их можно произвольно размещать на поверхности стола или на другой бумажке и вырисовывать ассоциации или foreign keys.