# Architecture UPnP/DLNA

Voici la séparation définition vs runtime :

    classDiagram
      %% Definition Layer
      class Device
      class Service
      class Action
      class StateVariable

      %% Runtime Layer
      class Server
      class DeviceInstance
      class ServiceInstance
      class StateVariableInstance
      class ActionHandler

      %% Associations Definition Layer
      Device "1" --> "1..*" Service
      Device "0..*" --> "0..*" Device
      Service "0..*" --> "0..*" Action
      Service "1..*" --> "1..*" StateVariable

      %% Associations Runtime Layer
      Server "1" --> "1..*" DeviceInstance
      DeviceInstance "1" --> "1..*" ServiceInstance
      DeviceInstance "0..*" --> "0..*" DeviceInstance
      ServiceInstance "1" --> "1..*" StateVariableInstance
      ServiceInstance "0..*" --> "0..*" ActionHandler

      %% Instantiation links
      DeviceInstance ..> Device : instantiates
      ServiceInstance ..> Service : instantiates
      StateVariableInstance ..> StateVariable : instantiates
      ActionHandler ..> Action : handles

      %% Styling
      class Device,Service,Action,StateVariable fill:#f9f,stroke:#333,stroke-width:1px
      class Server,DeviceInstance,ServiceInstance,StateVariableInstance,ActionHandler fill:#9f9,stroke:#333,stroke-width:1px