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.
| UML | Mənası | Python-da |
|---|---|---|
+ | açıq | name |
# | 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.
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))Account
+ owner: str
# _balance: float
# _audit()
+ deposit(amount)