классы и идентификаторы (Прочитано 13505 раз)
классы и идентификаторы : 15 Сентября 2010, 12:13:28
Очень часто возникает необходимость отражения в модели (диаграмме) факта (ограничения), что какая-то совокупность значений свойств (атрибутов и полюсов ассоциаций) класса с множественностью 1..1 (а иногда и не 1..1) различается для различных экземпляров класса. Например: есть справочники и позиции справочников, каждая позиция принадлежит справочнику и имеет код; необходимо отразить факт, что в рамках справочника позиции имеют разные коды, т.е. идентификатор позиции - ключ из полюса (AssociationEnd) справочник и атрибута код.

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




Re: классы и идентификаторы Ответ #1 : 15 Сентября 2010, 12:23:04
Прием записи на OCL типа forAll(a,b|a<>b implies a.Код <> b.Код) известен. Интерес вызывает более компактная запись.



Re: классы и идентификаторы Ответ #2 : 15 Сентября 2010, 12:23:24
почему раз вы пользуетесь UML не нарисовать пример?



Re: классы и идентификаторы Ответ #3 : 15 Сентября 2010, 12:33:18
Пример во вложении



Re: классы и идентификаторы Ответ #4 : 15 Сентября 2010, 12:36:32
А теперь с иллюстрацией для ровно 1 полюса



Re: классы и идентификаторы Ответ #5 : 15 Сентября 2010, 12:44:17
не тот файл



Re: классы и идентификаторы Ответ #6 : 15 Сентября 2010, 13:54:05
Если честно - все равно не понял :)

Кстати с этой темой такая же беда (на мой взгляд).



Re: классы и идентификаторы Ответ #7 : 15 Сентября 2010, 15:11:24
Цитировать
Если честно - все равно не понял
Ничего страшного, попробую еще раз.

Про пример:
Необходимо смоделировать структуру информационной базы "Справочники". База должна хранить заранее неизвестный и изменяемый состав справочников. Каждый справочник содержит изменяемый состав позиций.
Цитировать
каждая позиция принадлежит справочнику и имеет код
Цитировать
в рамках справочника позиции имеют разные коды
(2 разные позиции одного и того же справочника - их коды не могут совпадать). Справочники и позиции имеют наименования.

Во вложении сообщения
Цитировать
не тот файл
2 диаграммы.
1 диаграмма не отражает уникальность кода позиции внутри справочника (хотя если ее дополнить ограничением класса "позиция"
Цитировать
forAll(a,b|a<>b implies a.Код <> b.Код)
будет отражать и уникальность кода позиции внутри справочника).
2 диаграмма выражает это ограничение графически.

Про проблемму:
прием, использованный на 2 диаграмме, подходит для случаев, когда в состав идентификатора входит ровно 1 полюс с множественностью 1..1 и один или несколько атрибутов.
Как графически выразить ограничение идентификации в общем случае (любое количество атрибутов и полюсов) и/или в других частных случаях (количество полюсов в идентификаторе 0 или больше 1)? Пример на 0: коды позиций не должны совпадать даже если они из разных справочников. Пример на больше 1: к каждой позиции приписан 1 пользователь, создавший ее; состав пользователей заранее не известен; коды позиций не должны совпадать, только если они принадлежат одному справочнику и к ним приписан один пользователь.



Re: классы и идентификаторы Ответ #8 : 15 Сентября 2010, 15:43:25
что такое "идентификатор"?



Re: классы и идентификаторы Ответ #9 : 15 Сентября 2010, 16:18:42
идентификатор - набор свойств класса, сочетание значений которых у разных экземпляров класса не может быть одинаковым.



Re: классы и идентификаторы Ответ #10 : 15 Сентября 2010, 17:16:29
идентификатор - набор свойств класса, сочетание значений которых у разных экземпляров класса не может быть одинаковым.
Насколько я знаю, имя класса и есть идентификатор в рамках конкретной программной реализации. Экземпляр класса - объект - по определению является уникальным и достигается это механизмом инстанцирования такого объекта из определения класса.

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



Re: классы и идентификаторы Ответ #11 : 15 Сентября 2010, 17:54:09
Цитировать
совокупность значений артируботв тоже должна быть ключом (составным), то имеем альтернативный ключ

вот в том то и вопрос, как указать на диаграмме какой (какие) альтернативные ключи имеются (для какого класса, из чего состоят)!



Re: классы и идентификаторы Ответ #12 : 15 Сентября 2010, 18:26:26
вот в том то и вопрос, как указать на диаграмме какой (какие) альтернативные ключи имеются (для какого класса, из чего состоят)!
введите свои стереотипы



Re: классы и идентификаторы Ответ #13 : 15 Сентября 2010, 19:40:16
Денис, есть у меня такое подозрение.

Vadim может имеет в виду следующее:
Имеется некий контейнер для хранения справочников (пополняемый)
Имеется некий контейнер для хранения атрибутов справочника (пополняемый)
Некто создает новый справочник
Некто задает атрибуты справочника из контейнера атрибутов, при этом может добавить новый атрибут (как я понимаю)

Vadim формальным способ пытается отобразить на диаграмме (возможно)
1. запрет создания справочника с таким же именем (т.е. список справочников-объектов - множество)
2. запрет выбора в справочник атрибутов с одинаковыми именами (т.е. список атрибутов в конкретном справочнике - множество)
3. запретить создания нового атрибута с таким же именем (т.е. список атрибутов-объектов - множество)

???



Re: классы и идентификаторы Ответ #14 : 16 Сентября 2010, 10:45:27
Цитировать
Vadim может имеет в виду следующее:
Имеется некий контейнер для хранения справочников (пополняемый)
Имеется некий контейнер для хранения атрибутов справочника (пополняемый)
Некто создает новый справочник
Некто задает атрибуты справочника из контейнера атрибутов, при этом может добавить новый атрибут (как я понимаю)

Vadim формальным способ пытается отобразить на диаграмме (возможно)
1. запрет создания справочника с таким же именем (т.е. список справочников-объектов - множество)
2. запрет выбора в справочник атрибутов с одинаковыми именами (т.е. список атрибутов в конкретном справочнике - множество)
3. запретить создания нового атрибута с таким же именем (т.е. список атрибутов-объектов - множество)

Отлично! Пропади он пропадом, мой пример, давайте рассматривать этот, он очень даже подходит!
Только сначала уточним:
1.
Цитировать
1. запрет создания справочника с таким же именем (т.е. список справочников-объектов - множество)
следует понимать "список имен справочников-объектов - множество"
2.атрибут в конкретном справочнике имеет имя, которое может отличаться от имени атрибута из контейнера атрибутов, который для него выбран - если нет, то из
Цитировать
3. запретить создания нового атрибута с таким же именем
следует
Цитировать
2. запрет выбора в справочник атрибутов с одинаковыми именами
3. для справочника атрибут из контейнера используется не более 1 раза




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19