UML (Unified Modeling Language) dizaynı təsvir edən şəkil dilidir. Diaqram — arxiv sənədi deyil, söhbət vasitəsidir: dizayn fikrini komandaya tez çatdırır və kod yazmazdan əvvəl səhvi görməyə imkan verir. İki ən faydalı növ: sinif diaqramı (quruluş) və ardıcıllıq diaqramı (davranış).

Sinif qutusu

Sinif üç hissəli düzbucaqlıdır: ad, atributlar, metodlar. Hər üzvün qarşısında görünmə işarəsi var.

UMLMənasıPython-da
+açıqname
#qorunan_name
-gizli__name

Aşağıdakı kod Python sinfindən belə təsvir qurur: atributlar annotasiyalardan, metodlar inspect ilə götürülür.

python
import inspect

class Account:
    owner: str
    _balance: float

    def __init__(self, owner):
        self.owner = owner
        self._balance = 0.0

    def deposit(self, amount):
        self._balance += amount

    def _audit(self):
        pass

def sign(name):
    return "-" if name.startswith("__") else "#" if name.startswith("_") else "+"

def to_uml(cls):
    lines = [cls.__name__]
    for name, tp in cls.__annotations__.items():
        lines.append(f"  {sign(name)} {name}: {tp.__name__}")
    for name, fn in inspect.getmembers(cls, inspect.isfunction):
        if not (name.startswith("__") and name.endswith("__")):
            params = ", ".join(list(inspect.signature(fn).parameters)[1:])
            lines.append(f"  {sign(name)} {name}({params})")
    return "\n".join(lines)

print(to_uml(Account))
text
Account
  + owner: str
  # _balance: float
  # _audit()
  + deposit(amount)