Junior
Opowiedz o zasadach programowania obiektowego (OOP).
sobes.tech AI
Odpowiedź od AI
Programowanie obiektowe (OOP) opiera się na czterech kluczowych zasadach:
-
Enkapsulacja: Połączenie danych (właściwości) i metod (funkcji) pracujących z tymi danymi w jedną całość — obiekt. Ukrywa to szczegóły implementacji i zapewnia kontrolowany dostęp do danych.
<?php class BankAccount { private float $balance = 0; // Ukryte dane public function deposit(float $amount): void { // Metody zapewniające dostęp if ($amount > 0) { $this->balance += $amount; } } public function getBalance(): float { return $this->balance; } } ?> -
Abstrakcja: Wyróżnianie istotnych cech obiektu i ukrywanie nieistotnych szczegółów. Reprezentuje uproszczony model rzeczywistego świata.
<?php abstract class Shape { // Klasa abstrakcyjna abstract public function area(): float; // Metoda abstrakcyjna // Może mieć metody konkretne, np.: public function getDescription(): string { return "This is a shape."; } } class Circle extends Shape { private float $radius; public function __construct(float $radius) { $this->radius = $radius; } public function area(): float { // Implementacja metody abstrakcyjnej return M_PI * $this->radius * $this->radius; } } ?> -
Dziedziczenie: Tworzenie nowej klasy (potomnej) na podstawie istniejącej (rodzica), dziedziczącej jej właściwości i metody. To sprzyja ponownemu użyciu kodu.
<?php class Animal { protected string $name; public function __construct(string $name) { $this->name = $name; } public function eat(): void { echo "{$this->name} is eating.\n"; } } class Dog extends Animal { // Dog dziedziczy po Animal public function bark(): void { echo "{$this->name} says Woof!\n"; } } $dog = new Dog("Buddy"); $dog->eat(); // Użycie odziedziczonej metody $dog->bark(); ?> -
Polimorfizm: Możliwość obiektów różnych klas reagowania na ten sam wywołanie metody na różne sposoby. "Wiele form".
<?php interface Speakable { // Interfejs dla przykładu polimorfizmu public function speak(): void; } class Cat implements Speakable { public function speak(): void { echo "Meow!\n"; } } class Duck implements Speakable { public function speak(): void { echo "Quack!\n"; } } function makeSound(Speakable $animal): void { // Funkcja przyjmująca różne typy obiektów $animal->speak(); // Wywołanie tej samej metody } $cat = new Cat(); $duck = new Duck(); makeSound($cat); // Wywołanie metody Cat::speak() makeSound($duck); // Wywołanie metody Duck::speak() ?>