Professional Documents
Culture Documents
Aasasa Spaoš Aspšod Ašspoda Đšosd Ađšs
Aasasa Spaoš Aspšod Ašspoda Đšosd Ađšs
„SOLID PRINCIPI”
SEMINARSKI RAD
Travnik, 24.03.2021.
SVEUČILIŠTE/UNIVERZITE
T “VITEZ” VITEZ
FAKULTET
FAKULTET INFORMACIONIH
TEHNOLOGIJA
„SOLID PRINCIPI”
SEMINARSKI RAD
SEMINARSKI RAD...................................................................................................1
1.UVOD........................................................................................................................1
1.1. PROBLEM I PREDMET ISTRAŽIVANJA.....................................................1
1.2. SVRHA I CILJEVI ISTRAŽIVANJA..............................................................1
1.3. RADNA HIPOTEZA I POMOĆNE HIPOTEZE..............................................1
1.4. ZNANSTVENE METODE...............................................................................1
1.5. STRUKTURA RADA.......................................................................................1
2. UVOD U SOLID PRINCIPE...................................................................................3
3. SINGLE RESPONSIBILITY PRINCIP...................................................................4
4. OPEN-CLOSE PRINCIP..........................................................................................7
5. LISKOV SUBSTITUTION PRINCIP....................................................................10
6. INTERFACE SEGREGATION PRINCIP.............................................................13
7. DEPENDENCY INVERSION PRINCIP...............................................................17
8. ZAKLJUČAK.........................................................................................................18
9. LITERATURA.......................................................................................................19
1.UVOD
1
Struktura seminarskog rada je uskađena sa upustvom za pisanje seminarskog rada na
prvom ciklusu studija kao i temi seminarskog rada. On sadrži pet poglavlja.
Sa trećim poglavljem počinje objašnjavanje prvog od pet solid principa, tj. Single
Responsibility princip.
Osmo poglavlje nam daje zaključak na cjelokupan rad, te odgovor na radnu hipotezu.
2
2. UVOD U SOLID PRINCIPE
1
https://sipodsoftware.com/index.php/2019/02/07/solid-principi/ (24.03.2021)
3
3. SINGLE RESPONSIBILITY PRINCIP
Princip - Single responsibility govori da svaki objekat treba da ima jedan fokus.
Pridržavanjem ovog principa, izbjegava se problem monolitnih klasa, što predstavlja
softverski ekvivalent za švicarski nož. Ako su objekti koncizni, povećava se čitljivost
i omogućava lakše održavanje sistema.
Kao primjer možemo posmatrati klasu „Book“ koja obuhvata koncept knjige i
pridruženih funkcionalnosti.
class Book
4
Console.WriteLine("current page content");
}
2
Ova klasa se može učiniti kao sasvim ispravna. Imamo knjigu za koju možemo da
odredimo naslov, autora i možemo da pređemo na sljedeću stranicu. Poslednja
metoda omogućava da se odštampa trenutna stranica, te da se prikaže na ekranu.
Ovdje se može pojaviti i problem. Mješanje logike sa prikazom je loša praksa. Zbog
toga bi kod trebalo izmjeniti:
class Book
41
2
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
5
{
}interface Printer
}3
3
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
6
Modul treba da ima isključivo jedan razlog za promjenu, odnosno da odgovara
isključivo jednom entitetu.
4. OPEN-CLOSE PRINCIP
U okviru primjera možemo posmatrati klasu Customer koja posjeduje jednu metodu
getDiscount().
4
https://sipodsoftware.com/index.php/2019/02/07/solid-principi/ (25.03.2021)
7
class Customer
return TotalSales;
}5
Ako se vremenom pored klijenata pojave i klijenti posebnog tipa onda se klasa
Customer može promijeniti:
class Customer
42
if (_custType == 1)
5
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
8
return TotalSales - 100;
else
}6
Problem je što, ako budemo imali još tipova klijenata, moraćemo dodavati još IF
uslova u okviru getDiscount metode, što će dovesti do nove promjene u okviru
Customer klase. Kada se god promjeni klasa, mora se osigurati da prethodni kod
radi, jer izmjene mogu dovesti do pojave grešaka u ostatku koda. Umjesto toga, kod
treba proširiti kako bi bili sigurni da postojeći kod i dalje radi.
class Customer
return TotalSales;
6
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
9
{
}7
Ovim kodom smo postigli da je klasa Customer zatvorena za bilo kakve izmjene ali
je otvorena za proširenja.
Liskov princip zamjene govori da bi trebalo omogućiti korišćenje bilo koje izvedene
klase na mjstu klase roditelja i da bi ta klasa trebala da se ponaša na isti način bez
izmjena. Ovaj princip je u skladu sa OCP principom jer osigurava da izvedena klasa
ne utiče na ponašanje klase roditelja.
Primjer LSP-a kod koga imamo tri klase: Vehicle, Car i ElectricBus. Klase Car i
ElectricBus su nasljeđene iz klase Vehicle.
7
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
10
class Vehicle
43
Console.WriteLine("Start engine");
Console.WriteLine("Accelerate");
engageIgnition();
base.startEngine();
Console.WriteLine("Ignition procedure");
11
{
increaseVoltage();
connectIndividualEngines();
base.accelerate();
Console.WriteLine("Electric logic");
Console.WriteLine("Connection logic");
}8
class Program
v.startEngine();
v.accelerate();
44
8
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
12
static void Main(string[] args)
go(v);
go(c);
go(e);
}
9
Cilj ovog principa je dodjeljivanje novog interfejsa grupama metoda koje imaju isti
fokus, kako bi se izbjeglo da klijent implementira jedan veliki interfejs i veliki broj
metoda koje mu nisu potrebne. Prednost ovog principa se ogleda u tome da klase
koje žele da koriste iste interfejse treba da implementiraju samo određen skup
metoda. Da bi se demonstrirao Interface segregation princip, biće kreirana mala
aplikacija čiji je domen katalog proizvoda. Katalog proizvoda čine filmovi u obliku
DVD ili Blu-Ray diskova. Za svaki podtip proizvoda postoji odgovarajuća klasa.
Obe klase implementiraju IProduct interfejs kao što se može videti:
9
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
13
int RunningTime { get; set; }
}10
Sada ćemo u aplikaciju dodati novi tip proizvoda koji nije film. Dodajemo klasu
TShirt. Pošto je i ona proizvod, mora da implementira IProduct interfejs. Problem sa
tim što klasa TShirt implementira IProduct interfejs je u tome što properti
RunningTime nema nikavo značenje za majicu i ne bi trebao tu da se nalazi. Rješenje
je u uočavanju razlika između proizvoda kao što su filmovi i majice i prebacivanje
tih razlika u specifične interfejse. Dodaćemo novi interfejs IMovie. Izmjenjeni kod
aplikacije je prikazan u primjeru:
10
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
14
int RunningTime { get; set; }
45
15
public int WeightInKg { get; set; }
}11
Izvor:https://medium.com/@radheshyamsingh_83359/interface-segregation-principle-solid-design-
12ecfd29f906 (26.03.2021)
11
Ivanković Zdravko i Lacmanović Dejan, tehnički fakultet "Mihajlo Pupin" Zrenjanin univerzitet u
Novom Sadu, Softversko inžinjerstvo 2
16
7. DEPENDENCY INVERSION PRINCIP
Dependency inversion predstavlja dobavljanje klase nižeg nivoa i zavisne klase kroz
konstruktor, metodu ili properti. Zavisne klase se mogu zamijeniti interfejsima ili
apstraktnim klasama koje će voditi ka slabo povezanim sistemima koji su vrlo dobri
za testiranje i lahki za izmjenu. Dependency Inversion princip pomaže u razdvajanju
koda tako što osigurava da unutar koda imamo zavisnosti od apstrakcija, a ne od
konkretnih implementacija. Ovaj princip je najvažniji u cilju razumijevanja dizajn
paterna.
Izvor:https://www.researchgate.net/figure/Dependency-Inversion-Principle-
example_fig10_332590977 (26.03.2021)
17
8. ZAKLJUČAK
SOLID principi koje je definisao Robert C. Martin definišu prakse koje omogućavaju
fleksibilan razvoj odnosno projektovanje softverskih rješenja u odnosu na
kontinuiran rast kompleksnosti i dugoročno održavanje. SOLID principi doprinose
cjelokupnom kvalitetu koda, manjoj potrebi za refaktorisanjem, te agilnom i
prilagodljivom razvoju softvera . Glavna (radna) hipoteza „Da li nam SOLID
principi u softverskim rješenjima pomažu da projektovanje bude lakše?” je
upotpunosti dokazana kroz ovaj rad. SOLID principi nam pomažu da projektovanje
softverskih rješenja bude lakše, odnono da bude razumljivije i fleksibilnije.
9. LITERATURA
1. https://sipodsoftware.com/index.php/2019/02/07/solid-principi/ (24.03.2021)
3. UISBAX
18
19