Комментарии (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
- Nizak nivo: detalji implementacije (driver, HTTP zahtjev)
- Srednji nivo: poslovni objekti (PaymentGateway)
- 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.