Форум Сообщества Аналитиков
Дисциплины => Реализация => Тема начата: Виталий И от 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 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
(https://i.ibb.co/yqnXQ7w/328281021253250.png)
```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 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
(https://i.ibb.co/SKVJGzX/508951121248711.png)
```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 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
(https://i.ibb.co/fNkK7LR/201472021240361.png)
```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 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
(https://i.ibb.co/wMckYZN/149171314260874.png)
-
С первым куском кода не всё ОК. Имя cardDetails используется, но не описано.
На каждой приведённой диаграмме к интерфейсу от класса-реализации должно идти не обобщение (сплошная стрелка с треугольным выколотым наконечником), а реализация (пунктирная стрелка с треугольным выколотым наконечником).
Диаграммы на которых Program соединен с интерфейсом обобщением (сплошной стрелкой с треугольным выколотым наконечником) ошибочны, там должна быть ассоциация.
Статическая операция должна быть подчёркнута.
В UML в сигнатуре операции её имя предшествует типу возвращаемого значения.
Разумно нарисовать зависимость от Program к классу-реализации, т. к. он используется и его имя известно Program.
-
===
@startuml
class Program {
{static} + Main(args: string[]): void
}
class MoneyBack {
+ GetCardType(): string
+ GetCreditLimit(): int
+ GetAnnualCharge(): int
}
interface ICreditCard {
+ GetCardType(): string
+ GetCreditLimit(): int
+ GetAnnualCharge(): int
}
ICreditCard "cardDetails" <-- Program
ICreditCard <|.. MoneyBack
Program ..> MoneyBack
@enduml
===
(http://www.plantuml.com/plantuml/png/VP31IWCn443l-OgXfnPfFg0KgLOGmO87R-9XICPrC9kLoLGeTV_TMTPrryFsaa3Ul3oONL4KFTR9XOIbm9CqbM0DPmS0PuFAeGMuWWDoNg9KPGD5XNFryhhQm5V3qRNkLpuqcKwt63vwtQnxqZrAV3vzqd8rc1Cc55aVkMRjC6STsKtEHqpxTslI0Atax2Pvmq3mqEjTm8BpkVdOvTJq_qMmyuuKEPK5RDVhlqtz6zj-Up-kmGqptbzFNdUKesty1m00)