UJEP materiály

OOD

Užitečné odkazy

Systém

Hranice systému

Systémové modelování

UML

UML vztahy

UML Relationship Types

Závislost

class OrderService
{
    public void Create(Order order)
    {
        Console.WriteLine(order.Id);
    }
}
classDiagram
    direction LR
    OrderService ..> Order

OrderService závisí na Order, ale neukládá si ho ani nevlastní jeho životní cyklus.

Asociace

class OrderService
{
    private readonly OrderRepository _orderRepository;

    public OrderService(OrderRepository orderRepository)
    {
        _orderRepository = orderRepository;
    }
}
classDiagram
    direction LR
    OrderService --> OrderRepository

OrderService má k dispozici OrderRepository, se kterým opakovaně pracuje, ale nijak neřeší, kdy vznikne ani kdy zanikne.

Agregace

class Team
{
    public List<Player> Players { get; } = [];
}
classDiagram
    direction LR
    Team o-- Player

Team si udržuje seznam Player, ale samotní hráči nejsou vytvářeni ani ničeni týmem a mohou existovat i mimo něj.

Kompozice

class UserSession
{
    public SessionToken Token { get; }

    public UserSession(string userId)
    {
        Token = new SessionToken(UserId: userId, IssuedAt: DateTime.UtcNow);
    }
}
classDiagram
    direction LR
    UserSession *-- SessionToken

UserSession vlastní a vytváří SessionToken, který existuje pouze jako její vnitřní součást.

Generalizace

abstract class Notification
{
    public Guid UserId { get; }

    protected Notification(Guid userId)
    {
        UserId = userId;
    }
}

class EmailNotification : Notification
{
    public EmailNotification(Guid userId) : base(userId) { }
}

class PushNotification : Notification
{
    public PushNotification(Guid userId) : base(userId) { }
}
classDiagram
    direction LR
    Notification <|-- EmailNotification
    Notification <|-- PushNotification

Realizace

interface INotificationSender
{
    Task SendAsync(Guid userId, string message);
}

class EmailNotificationSender : INotificationSender
{
    public async Task SendAsync(Guid userId, string message) { }
}

class PushNotificationSender : INotificationSender
{
    public async Task SendAsync(Guid userId, string message) { }
}

classDiagram
    direction LR
    NotificationSender <|.. EmailNotificationSender
    NotificationSender <|.. PushNotificationSender

INotificationSender určuje, jakou operaci musí odesílači notifikací poskytovat, zatímco konkrétní odesílači řeší pouze její provedení, bez sdílení stavu a bez dědění dat.

UML diagramy

Typy UML diagramů

UML Diagram Types

Strukturální

Behaviorální

Diagram případů užití

Use Case Diagram

Aktér

Případ užití

Include

Extend

Scénář případu užití

Diagram aktivit

Počáteční uzel

Akce