Junior
Pověz mi o principech objektově orientovaného programování (OOP).
sobes.tech AI
Odpověď od AI
OOP je založeno na čtyřech klíčových principech:
-
Zapouzdření: Spojení dat (vlastností) a metod (funkcí), které s těmito daty pracují, do jednoho celku — objektu. To skrývá implementační detaily a poskytuje řízený přístup k datům.
<?php class BankAccount { private float $balance = 0; // Skrytá data public function deposit(float $amount): void { // Metody poskytují přístup if ($amount > 0) { $this->balance += $amount; } } public function getBalance(): float { return $this->balance; } } ?> -
Abstrakce: Vyzdvihnutí podstatných vlastností objektu a skrytí nepodstatných detailů. Představuje zjednodušený model reálného světa.
<?php abstract class Shape { // Abstraktní třída abstract public function area(): float; // Abstraktní metoda // Může mít i konkrétní metody, například: public function getDescription(): string { return "Toto je tvar."; } } class Circle extends Shape { private float $radius; public function __construct(float $radius) { $this->radius = $radius; } public function area(): float { // Implementace abstraktní metody return M_PI * $this->radius * $this->radius; } } ?> -
Dědičnost: Vytvoření nového třídy (potomka) na základě existující (rodiče), dědící její vlastnosti a metody. To podporuje opakované použití kódu.
<?php class Animal { protected string $name; public function __construct(string $name) { $this->name = $name; } public function eat(): void { echo "{$this->name} jí.\n"; } } class Dog extends Animal { // Pes dědí od Animal public function bark(): void { echo "{$this->name} říká: Woof!\n"; } } $dog = new Dog("Buddy"); $dog->eat(); // Použití zděděné metody $dog->bark(); ?> -
Polymorfismus: Schopnost objektů různých tříd reagovat na stejný volání metody různým způsobem. "Mnohost".
<?php interface Speakable { // Rozhraní pro příklad polymorfismu public function speak(): void; } class Cat implements Speakable { public function speak(): void { echo "Mňau!\n"; } } class Duck implements Speakable { public function speak(): void { echo "Kach!\n"; } } function makeSound(Speakable $animal): void { // Funkce přijímá různé typy objektů $animal->speak(); // Volání stejné metody } $cat = new Cat(); $duck = new Duck(); makeSound($cat); // Volání metody Cat::speak() makeSound($duck); // Volání metody Duck::speak() ?>