← Назад к вопросам

Что такое абстракция?

1.0 Junior🔥 161 комментариев
#ООП

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Abstrakcija - Ključna načela objektno-orijentisanog programiranja

Astrakcija je proces sakrivanja kompliciranih detalja implementacije i predstavljanja samo potrebnog sučelja za interakciju s objektom. Ovo je jedan od četirih stupa OOP-a (zajedno s nasljeđivanjem, enkapsuljacijom i polimorfizmom).

Suština apstrakcije

Apstrakcija izdvaja bitne karakteristike objekta, ignorirajući nebitan detalje. Omogućava rad s objektima na visokoj razini apstrakcije bez ulaženja u implementaciju.

Primjer s PaymentGateway

Cilj: različiti servisi za plaćanje (Stripe, PayPal) trebaju istu sučelje.

interface PaymentGatewayInterface {
    public function charge(Money $amount, Card $card): string;
    public function refund(string $transactionId): bool;
}

class StripeGateway implements PaymentGatewayInterface {
    public function charge(Money $amount, Card $card): string {
        // Kompleksna logika Stripe API
        return 'stripe_transaction_123';
    }
    
    public function refund(string $id): bool {
        return true;
    }
}

class PayPalGateway implements PaymentGatewayInterface {
    public function charge(Money $amount, Card $card): string {
        // Kompleksna logika PayPal API
        return 'paypal_transaction_456';
    }
    
    public function refund(string $id): bool {
        return true;
    }
}

class OrderService {
    public function __construct(private PaymentGatewayInterface $gateway) {}
    
    public function pay(Order $order, Card $card): void {
        $txId = $this->gateway->charge($order->getAmount(), $card);
        $order->markAsPaid($txId);
    }
}

Prednosti apstrakcije

  • Skrivanje detalja: korisnik zna samo što trebam, ne i kako
  • Fleksibilnost: lako zamjena implementacije
  • Testabilnost: lakše je pisati testove s mock objektima
  • Održivost: promjene u implementaciji ne utječu na ostatak koda
  • Ponovnu upotrebljivost: ista sučelja za različite implementacije

Apstrakcija preko apstraktnih klasa

abstract class DatabaseConnection {
    abstract public function query(string $sql): array;
    abstract public function execute(string $sql): bool;
    
    final public function beginTransaction(): void {
        $this->execute('BEGIN');
    }
}

class MySQL extends DatabaseConnection {
    public function query(string $sql): array { return []; }
    public function execute(string $sql): bool { return true; }
}

Nivoi apstrakcije

  1. Nizak nivo: detalji implementacije (driver, HTTP zahtjev)
  2. Srednji nivo: poslovni objekti (PaymentGateway)
  3. Visok nivo: aplikacijska logika (OrderService)

Kada koristiti apstrakciju

  • Višestruke implementacije iste logike
  • Potreba za fleksibilnošću i zamjenom koda
  • Testiranje s mock objektima
  • Smanjenje zavisnosti između komponenti

Zaključak: Apstrakcija je moćan instrument koji čini kod lakšim za razumijevanje, testiranje i održavanje, omogućavajući fokus na važnu poslovnu logiku.

Что такое абстракция? | PrepBro