Форум Сообщества Аналитиков

×


Последние сообщения

Страницы: 1 2 3 4 5 6 7 8 9 10
1
Как правильно структурировать диаграмму классов в PlantUml?
Пробую построить диаграмму классов в PlantUml, получаю кашу.


```cs
class MainViewModdel : BaseViewModdel
{
    Entity1ViewModdel _entity1ViewModdel;
    Entity2ViewModdel _entity2ViewModdel;
    Entity3ViewModdel _entity3ViewModdel;
   
    public MainViewModdel()
    {
        _entity1ViewModdel = new Entity1ViewModdel();
        _entity2ViewModdel = new Entity2ViewModdel();
        _entity3ViewModdel = new Entity3ViewModdel();
    }
}

class Entity1ViewModdel : BaseViewModdel
{
    + Main(args: string[]): void
}

class Entity2ViewModdel : BaseViewModdel
{
    + Main(args: string[]): void
}

class Entity3ViewModdel : BaseViewModdel
{
    + Main(args: string[]): void
}
```

```cs
internal abstract class BaseViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
    {
        // Код...           
    }

    protected virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
    {
        // Код...           
    }     
   
}
```

# uml
```puml
skinparam linetype ortho
left to right direction



class BaseViewModel {
  + event PropertyChangedEventHandler PropertyChanged;
  # virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
  # virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
}

class MainViewModel {
  - _entity1ViewModel : Entity1ViewModel
  - _entity2ViewModel : Entity2ViewModel
  - _entity3ViewModel : Entity3ViewModel
  + MainViewModel()
}

class Entity1ViewModel {
  + Main(args: string[]): void
}

class Entity2ViewModel {
  + Main(args: string[]): void
}

class Entity3ViewModel {
  + Main(args: string[]): void
}


 BaseViewModel <|-- MainViewModel
 BaseViewModel <|-- Entity1ViewModel
 BaseViewModel <|-- Entity2ViewModel
 BaseViewModel <|-- Entity3ViewModel

MainViewModel --> Entity1ViewModel
MainViewModel --> Entity2ViewModel
MainViewModel --> Entity3ViewModel
```
2
[Очередная попытка некротредить]
Попался материал забугорный, но тоже доставляющий в плане якобы математических обоснований.
http://arxiv.org/pdf/1304.0116
===
 В более общем случае предположим, что цель g может быть достигнута с помощью n объектов проектирования (D1, D2, ... Dn), каждый из которых обладает характеристиками (F1, F2, ... Fn). Тогда множество требований Rg можно определить как пересечение свойств (Rg = F1 ∩ F2 ∩ ... ∩ Fn).

===
Это почти то же самое, что знаменитое практически все люди, страдающие хроническими заболеваниями, ели огурцы. Что если все объекты Di ели огурцы обладают некоторым свойством, которое никакого отношения не имеет к достижению цели g? Будет ли оно требованием? По логике Паула Ральфа, будет.
3
Теория моделирования и нотации / Re: UML. Имя Activity
« Последний ответ от [прилетело НЛО и...] 26 Марта 2024, 13:22:06 »

Вот иллюстрация.
Деятельность Trib внутри себя содержит три рекурсивных вызова (3 узла действия вызова деятельности). Моделируется вычисление n-ого числа трибоначчи.
4
Теория моделирования и нотации / Re: UML. Имя Activity
« Последний ответ от Galogen 22 Марта 2024, 19:08:18 »
Добрый день!

Делаю простую диаграмму Activity Diagram с помощью PowerDesigner.
Диаграмма описывает алгоритм некоторой процедуры, обрабатывающей текущую строку таблицы.
На этой диаграмме несколько объектов Activity по сути являются вызовом одной и той же подпрограммы, выполняют одни и те же действия, но в разных местах алгоритма.
Естественно, для этих объектов Activity я в имени указываю одно и то же имя вызываемой подпрограммы.
Однако, PowerDesigner не дает этого сделать и выдает ошибку о том, что имя не уникально.

Объясните, пожалуйста, в соответствии с требованиями стандарта UML разве имена всех объектов должны быть уникальными?
Какой в этом смысл?
А если имя уникальное, то как на диаграмме отобразить тот факт, что несколько объектов Activity вызывают одну и ту же подпрограмму?

На самом деле процедура в программе определена одна, а вот вызовов конечно может быть много.
5
Теория моделирования и нотации / Re: UML. Имя Activity
« Последний ответ от [прилетело НЛО и...] 23 Февраля 2024, 03:35:21 »
Стандарт языка не запрещает одноимённые деятельности.
EA не может строить догадки о том, что Вы моделируете.
PD аллертит из-за нарушения встроенных в него правил.

По [моей] идее, очень мало поводов рисовать именно деятельность на диаграмме деятельности. В описанном Вами случае на диаграмме деятельность одна и она выполняет роль рамки всей диаграммы. Это описываемая процедура.
Вызываемая подпрограмма как деятельность на диаграмме не присутствует. Присутствуют её вызовы -- узлы действия, Action Node.
Написанное выше не является требованием стандарта. Это что-то вроде перевода написанного Вами в термины UML.
6
С первым куском кода не всё ОК. Имя cardDetails используется, но не описано.
На каждой приведённой диаграмме к интерфейсу от класса-реализации должно идти не обобщение (сплошная стрелка с треугольным выколотым наконечником), а реализация (пунктирная стрелка с треугольным выколотым наконечником).
Диаграммы на которых Program соединен с интерфейсом обобщением (сплошной стрелкой с треугольным выколотым наконечником) ошибочны, там должна быть ассоциация.
Статическая операция должна быть подчёркнута.
В UML в сигнатуре операции её имя предшествует типу возвращаемого значения.
Разумно нарисовать зависимость от Program к классу-реализации, т. к. он используется и его имя известно Program.
7
UML SysML и пр. / Re: Шутки и UML
« Последний ответ от [прилетело НЛО и...] 23 Февраля 2024, 03:10:02 »
А что-то ничего не отображается
Это хост временно лёг, на котором картинка лежит.(
8
Теория моделирования и нотации / Re: UML. Имя Activity
« Последний ответ от Resen70 21 Февраля 2024, 10:15:41 »
Здравствуйте!

Недавно делал диаграмму в Enterprise Architect.
И оказалось, что EA свободно дает создавать несколько Activity с одинаковыми именами!

Что это значит? Что EA нарушает стандарт?
Или то, что Activity в EA имеют другой смысл?
9
Реализация / Как правильно нарисовать диаграмму классов?
« Последний ответ от Виталий И 20 Февраля 2024, 19:48:45 »
Как правильно нарисовать диаграмму классов?


Диаграмма в онлайн редакторе: https://www.plantuml.com/plantuml/uml/VP71IWCn443l-OevjaZx0KMaseC85Znu4m_3PimEpKxAP5PPr7ytYsPT3sikERoyUJ3PPqErleikdrZEgDX1P24RpWH9hKtEDH5pXWTDOQJl3igvW2Eoh513ta4sPGbFp-iTl2RsxhCwnoGqt61pcgnRiWEgVopZL-jgpfYIPxldZct4BFRBhaLwZ8UsDAd2KdBb9dt1Xk3kMny39RYSMuxzdvhFlzpuz2QRQIr_uSSFdHRWwhkjScXjUpL3Un9VVk0B


**Код**
**Program**
```cs
class Program
{
    static void Main(string[] args)
    { 
        ICreditCard creditCard = new MoneyBack();
        Console.WriteLine("CardType : "    + cardDetails.GetCardType());
        Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
        Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
    }
}
```


**ICreditCard**
```cs
public interface ICreditCard
{
    string GetCardType();
    int GetCreditLimit();
    int GetAnnualCharge();
}

```

**MoneyBack**
```cs
public class MoneyBack : ICreditCard
{
    public string GetCardType()
    {
        return "MoneyBack";
    }
    public int GetCreditLimit()
    {
        return 15000;
    }
    public int GetAnnualCharge()
    {
        return 500;
    }
}
```



Solut-1 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---



```puml
@startuml
skinparam linetype ortho

class Program {
    + Main(args: string[]): void
}

class MoneyBack {
    + GetCardType(): string
    + GetCreditLimit(): int
    + GetAnnualCharge(): int
}


interface ICreditCard {
  + GetCardType(): string
  + GetCreditLimit(): int
  + GetAnnualCharge(): int
}

ICreditCard <-down- Program
ICreditCard <|-down- MoneyBack
Program .right.> MoneyBack
@enduml
```

Solut-2 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---


```puml
@startuml
class Program {
    static void Main(string[] args)
}

interface ICreditCard {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

class MoneyBack {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

Program -right-|> ICreditCard
ICreditCard <|.. MoneyBack
@enduml
```



Solut-3 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---


```puml
@startuml
left to right direction

class Program {
    static void Main(string[] args)
}

interface ICreditCard {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

class MoneyBack {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

Program --|> ICreditCard
ICreditCard <|.. MoneyBack
@enduml
```

Solut-4 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
10
UML SysML и пр. / Re: Шутки и UML
« Последний ответ от Galogen 20 Февраля 2024, 11:24:26 »

С наступающим!
UML-ёлочка вышла немного нестандартная. Это Visual Paradigm разрешает так складывать подарки под неё. В стандарте таким художествам нет места.

Но симпатично, можно свой UML profile заточить
Страницы: 1 2 3 4 5 6 7 8 9 10