Deo zbornika Principi razvoja softvera
Apstrakcija
Apstrahovanje je misaoni proces izdvajanja bitnih karakteristika neke pojave. U programiranju, apstrakcija olakšava rad sa složenim sistemima i omogućava veću održivost koda i skalabilnost.
Apstrakcija omogućava sakrivanje detalja implementacije uz naglašavanje onoga što je važno.
Mnogi programski jezici imaju ugrađene apstraktne klase, koje ohrabruju upotrebu apstrakcije.
Primer: geometrijski oblik
Apstraktna klasa Oblik
može imati metode poput povrsina()
i obim()
. Konkretne klase, poput Krug
ili Pravougaonik
implementiraju te metode s detaljima specifičnim za oblik.
abstract class Oblik {
abstract double povrsina();
abstract double obim();
}
class Pravougaonik extends Oblik {
private double sirina;
private double visina;
Pravougaonik(double sirina, double visina) {
this.sirina = sirina;
this.visina = visina;
}
@Override
double povrsina() {
return sirina * visina;
}
@Override
double obim() {
return 2 * (sirina + visina);
}
}
class Krug extends Oblik {
private double poluprecnik;
Krug(double poluprecnik) {
this.poluprecnik = poluprecnik;
}
@Override
double povrsina() {
return Math.PI * poluprecnik * poluprecnik;
}
@Override
double obim() {
return 2 * Math.PI * poluprecnik;
}
}
Primer: apstrakcija metoda plaćanja
Apstrakcija metoda plaćanja (kartica, PayPal, itd.) koristi zajednički interfejs:
interface Payment {
void pay(double amount);
}
class CreditCardPayment implements Payment {
public void pay(double amount) {
System.out.println("Paid " + amount + " with Credit Card");
}
}
class PayPalPayment implements Payment {
public void pay(double amount) {
System.out.println("Paid " + amount + " with PayPal");
}
}
public class Main {
public static void main(String[] args) {
Payment payment = new CreditCardPayment();
payment.pay(100.0);
}
}
Primer: apstrakcija baze podataka
Rad sa bazom podataka nezavisno od implementacije (npr. MySQL ili PostgreSQL):
interface Database {
void connect();
void disconnect();
}
class MySQLDatabase implements Database {
public void connect() {
System.out.println("Connecting to MySQL");
}
public void disconnect() {
System.out.println("Disconnecting from MySQL");
}
}
class PostgreSQLDatabase implements Database {
public void connect() {
System.out.println("Connecting to PostgreSQL");
}
public void disconnect() {
System.out.println("Disconnecting from PostgreSQL");
}
}
public class Main {
public static void main(String[] args) {
Database db = new MySQLDatabase();
db.connect();
db.disconnect();
}
}