Professional Documents
Culture Documents
programiranje
design patterns
visitor
OOP
6
design patterns
OOP
7
design patterns
creational
factory method
builder
abstract factory
singleton
prototype
OOP
8
design patterns
abstract factory
OOP
9
design patterns
abstract factory
OOP
abstract factory
10
@Override
Color getColor(String color) {
return null;
}
}
@Override
Color getColor(String color) {
if (color == null) {
return null;
}
if (color.equalsIgnoreCase("RED")) {
return new Red();
} else if (color.equalsIgnoreCase("GREEN")) {
return new Green();
} else if (color.equalsIgnoreCase("BLUE")) {
return new Blue();
}
return null;
}
}
design patterns
factory method
OOP
14
design patterns
factory method
OOP
15
design patterns
factory method
• U sljedećem primjeru:
– Encryptor objekt zahtjeva algoritam za enkripciju
– kroz getEncryptionAlgorithm() se garantira da Encryptor uistinu
dobija EncryptorAlgorithm
– ipak, svaki Encryptor odlučuje koji se konkretno
EncryptionAlgorithm koristi
OOP
factory method
16
design patterns
builder
OOP
builder
19
class DataFetcher(){
// sva privatna polja
public class DataFetcher(String dataType, long limit, String orderBy) {
// pridjeljivanje svim privatnim poljima
}
}
class DataFetcherBuilder {
private String dataType;
private long limit;
private String orderBy;
design patterns
builder
OOP
21
design patterns
prototype
OOP
prototype
22
public interface Prototype extends Cloneable {
public AccessControl clone() throws CloneNotSupportedException;
}
@Override
public AccessControl clone() {
try {return (AccessControl) super.clone();} catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
static {
map.put("USER", new AccessControl("USER", "DO_WORK"));
map.put("ADMIN", new AccessControl("ADMIN", "ADD/REMOVE USERS"));
map.put("AUDITOR", new AccessControl("ADMIN", "READ REPORTS"));
}
design patterns
singleton
OOP
singleton
26
class Logger {
private static Logger instance;
private Logger() {}
public static Logger getInstance() {
if(instance == null) {
instance = new Logger();
}
return instance;
}
}
design patterns
OOP
28
design patterns
structural
adapter
decorator
facade
proxy
OOP
29
design patterns
adapter
OOP
30
design patterns
adapter
OOP
adapter
31
public class NumberSorter { //third party
public List<Integer> sort(List<Integer> numbers) {
//sortiraj i vrati
return new ArrayList<Integer>();
}
}
design patterns
bridge
OOP
35
design patterns
bridge
OOP
36
design patterns
composite
OOP
composite
37
interface Node {
long getSize();
}
design patterns
decorator
OOP
39
design patterns
proxy
OOP
40
design patterns
OOP
41
design patterns
behavioral
observer
strategy
command
state
chain of responsability
visitor
OOP
42
design patterns
chain of responsability
OOP
chain of responsability
43
boolean canUserLoginAsAdmin =
middleware.check("admin@example.com", "S3cret");
}
}
...
nost sustava
Kompleks
Kompleksnost
„The more complex the system, the more open it is to total
breakdown”
Kompleksnost
• Loša organizacija kompleksnih projekata vodi:
– neučinkovitom korištenju ljudskih resursa
– gubitak prilika na tržištu
Nošenje s kompleksnošću
• Razvoj kompleksnih sustava je iznimno zahtjevan
• System architects – ljudi koji definiraju arhitekturu novog sustava
• Uloga procesa dekompozicije
– „podijeli pa vladaj”
• Algoritamska dekompozicija
– problem razlaže na slijed događaja ili funkcija
• Objektno-orijentirana dekompozicija
– definira povezanost i međusobnu komunikaciju među
objektima u sustavu
Algoritamska dekompozicija
• Većina ljudi za dekompoziciju koristi pristup algoritamske
dekompozicije gdje se važniji procesi definiraju kao veće cjeline u
sustavu
Naruči i plati karticom
Provjeri Provjeri
valjanost stanje na
u banci računu
OOP dekompozicija
• Umjesto dekompozicije u korake/procese, radi se dekompozicija u objekte
• Oba pristupa rješavaju problem, ali na različite načine
• U OO pristupu gledamo na svijet kao na skup autonomnih agenata koji
surađuju da bi odradili kompleksnije zadatke
Provje
ra
Narudžba na skl stanja
adištu
Aktivi
ti
ra
os
nje na
rudžb Skladište
n
Pro račun
e
lja
va
vje
e
jig
a
ra s a
jer
k n Is
po
ov
je na
ta n
n ru
Pr
r ira aču ka
ja
u r
Až
Kartica
Bankovni
račun Knjiga Kupac
računa
Zaključak
• Većina sustava je u svojoj biti kompleksna
• Kompleksnost sustava često nadmašuje ljudsku
intelektualnu sposobnost
• Zadatak razvojnog tima je stvoriti sliku jednostavnosti
• Kompleksni sustavi često dolazi u formi hijerarhije
• Kompleksnost nastaje tijekom vremena. Razvojem nastaju
stabilne među faze sustava
KRAJ