OOP po lopate - Triedy
Minule sme si povedali niečo málo o koncepte a využití OOP, dnes sa pozrieme na príklady tried.
class Dog
{
public $name;
protected $barkType;
public function __construct($name, $barkType)
{
$this->name = $name;
$this->barkType = $barkType;
}
public function rename($newName = '')
{
$this->name = $newName;
}
public function getName()
{
return $this->name;
}
public function bark($to = '')
{
echo `{$this->name}: {$this->barkType} -> {$to}`;
}
}
$dunco = new Dog('Dunčo');
echo $dunco->getName();
$dunco->bark();
$anotherDog = new Dog('Hafo', 'buff');
echo $anotherDog->getName();
$anotherDog->bark('Dano');
class Dog(object):
def __init__(self, name, bark_type):
self.name = name
self.bark_type = bark_type
def get_name(self):
return self.name
def rename(self, new_name = ''):
self.name = new_name
def bark(self, to = ''):
print('{}: {} -> {}'.format(self.name, bark_type, to))
dunco = Dog('Dunčo')
print(dunco.get_name)
dunco.bark()
another_dog = Dog('Hafo', 'buff')
print(another_dog.get_name)
another_dog.bark('Dano')
class Dog {
constructor(name, barkType) {
this.name = name;
this.barkType = barkType;
}
rename(newName = '') {
this.name = newName;
}
getName() {
return this.name;
}
bark(to = '') {
echo `{this.name}: {this.barkType} -> {to}`;
}
}
let dunco = new Dog('Dunčo');
echo dunco.getName();
dunco.bark();
let anotherDog = new Dog('Hafo', 'buff');
echo anotherDog.getName();
anotherDog.bark('Dano');
public class Dog {
private String name;
private String barkType;
public Dog(String name, String barkType) {
this.name = name;
this.barkType = barkType;
}
public void rename(String newName) {
this.name = newName;
}
public String getName() {
return this.name;
}
public void bark(String to) {
System.out.println(this.name + ": " + this.barkType + " -> " + to);
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Dog dunco = new Dog("Dunčo", "baff");
System.out.println(dunco.getName());
dunco.bark("");
Dog anotherDog = new Dog("Hafo", "buff");
System.out.println(anotherDog.getName());
anotherDog.bark("Dano");
}
}
Poďme si to teda postupne rozobrať:
-
Definícia triedy
Ako si môžeme všimnúť v oboch jazykoch je podobná značína klúčovým slovom
class
následne ide jej meno. Mená tried začínajú s veľkým písmenom a píšu saCamelCase
.Python má jedno špecifikum, niekedy uvidíte prepis
class Dog(object):
aleboclass Dog:
obe sú správne a vyjadrujú to isté. Ich vysvetleniu sa dočkáme v dalšom článku. -
Konštruktor / Init
Táto verejná metóda určuje s akými parametrami sa pri vytvorení Triedy bude pracovať. Zaujímavé je v nej slovičko
self
alebo$this
, ide o kontext samotného objektu. Ako si môžeme všimnúť priradujeme hodnoty, ktoré sme definovali pri vytvorení na danú inštanciu, vytvorený objekt. -
Premenné = atribúty
Následne keď vieme, čo za premenné budeme používať v triede vytvoríme si jej atribúty. O ich videteľnosť sa zatiaľ starať nebudeme, v prípade PHP. Stačí nám zatiaľ vedieť, že tieto premenné, teda atribúty budú dostupné cez
self
alebo$this
v prípade PHP. -
Metódy
Táto časť už obsahuje len metódy, všimnime si rozdiel PHP a Pythonu, pri pythone je nutné definovať
self
pre prístup k atribútom objektu/inštancie. Tieto metódy fungujú ako klasické funkcie, ale majú navyše prístup k samotnej inštancií Triedy. -
Vytvorenie inštancie
V PHP sa používa klúčové slovo
new
, ktoré vytvára novú inštanciu danej triedy. V Pythone postačí spustiť Triedu s danými parametrami. Následne sa tieto parametre prenesú na inštanciu, nie na triedu!. A zvyšok hovorí za seba. Máme vytvorených dvoch psíkov, ktorý vedia rôzne hafkať, môžeme ich aj premenovať a vieme si aj zisiť ich mená.
Slovníček pojmov
- Konštruktor = prvá spustená funkcia pri vytvorení triedy
- atribút = je premenná triedy