Funkcijas un vārdnīcas ir labas mazām programmām, taču lielākiem projektiem nepieciešama spēcīgāka organizācijas paradigma — objektorientētā programmēšana. Šajā tēmā Tu iemācīsies projektēt programmas, kas atspoguļo reālus objektus: katrs varonis, ienaidnieks, ierocis vai burvojums kļūst par savu klasi ar saviem datiem un uzvedību.
Tu apgūsi četrus OOP stūrakmeņus: iekapsulācija (dati + metodes vienā vietā), mantošana (klašu hierarhija), polimorfisms (dažādas klases — vienots interfeiss) un abstrakcija (paslēpt sarežģītību).
Tēmas noslēgumā Tu izveidosi RPG cīņas spēli, kurā varoņi (Bruņinieks, Burvis, Strēlnieks) ar atšķirīgām spējām cīnās ar nejauši ģenerētiem ienaidniekiem (Goblini, Pūķi, Skeleti). Spēles arhitektūra demonstrēs visu četru OOP principu darbību.
class Varonis:
"""Klases docstring — dokumentācija."""
# Klases atribūts (kopīgs visiem objektiem)
suga = "cilvēks"
def __init__(self, vards, hp=100): # konstruktors
self.vards = vards # objekta atribūts
self.hp = hp
def cizt(self, b): # metode
self.hp -= b
return self.hp
def __str__(self): # dunder
return f"{self.vards} ({self.hp} HP)"
# Lietošana
v = Varonis("Artūrs", hp=120)
v.cizt(15)
print(v) # Artūrs (105 HP)
| Princips | Nozīme |
|---|---|
| Iekapsulācija | Dati un metodes apvienoti klasē, "_" prefiks norāda privāto. |
| Mantošana | Bērna klase pārmanto vecāku atribūtus un metodes. |
| Polimorfisms | Vairākas klases ar to pašu metodes nosaukumu, bet atšķirīgu uzvedību. |
| Abstrakcija | Paslēpt sarežģītību aiz vienkāršas saskarnes. |