tutorski

ČVRSTO koji su 5 principi objektno orijentisanog programiranja

SOLID je skraćenica koja se odnosi na pet principa objektno orijentisanog dizajna (OOD ili OOP). Ovo su smjernice koje programeri mogu koristiti za stvaranje softvera kojim se lako upravlja, održava i proširuje. Razumijevanje ovih koncepata učinit će vas boljim programerom i pomoći vam da izbjegnete probleme sa upravljanjem softverom. Šta znači biti dobar programer?

Svatko s određenim iskustvom u softverskom programiranju prosuđuje softverski kod koji su napisali drugi, koristeći parametre prosudbe na osnovu svog karijernog puta.

Tijekom svoje profesionalne karijere poznavao sam mnogo programera i vidio sam hiljade redaka koda i kada moram procijeniti vještinu programera, uglavnom gledam dva faktora:

  • Jednostavnost čitanja koda;
  • Kolika je vjerovatnoća da će njihov kod raditi i evoluirati s vremenom.

Srećom, postoje neki osnovi ili principi koji olakšavaju bolje kodiranje.

kratica SOLID označava:
S: princip jedinstvene odgovornosti
O: princip otvoreno-zatvoreno
L: Liskov princip zamjene
I: Princip segregacije sučelja
D: Princip inverzije zavisnosti

Krenimo od udubljenja u prvi ČVRSTI princip, naime

Načelo pojedinačne odgovornosti

Klasa (ili modul) treba imati samo jedan razlog za promjenu, za razvoj.

Sam koncept je vrlo jednostavan, ali kako bi se postigla ta jednostavnost, put implementacije može biti vrlo kompliciran. Razred bi trebao imati samo jedan razlog za promjenu.

Ali zašto? 

Zašto je toliko važno imati samo jedan razlog za promjenu?

Na primjer, ako postoje dva različita razloga za promjenu, moguće je da dva različita tima mogu raditi na istom kodu iz dva različita razloga. Svaka će morati implementirati svoje rješenje, koje bi u slučaju kompajliranog jezika (kao što je C ++, C # ili Java) moglo dovesti do modula koji nisu kompatibilni s drugim timovima ili drugim dijelovima aplikacije.

Još jedan primjer, ako koristite protumačeni jezik, možda ćete morati testirati istu klasu ili modul iz različitih razloga. To znači više rada, vremena i truda za kontrolu kvaliteta.

Prepoznavanje jedne funkcije koju bi klasa ili modul trebalo da ima mnogo je složenije od pukog pregleda kontrolne liste za pokretanje testova. 

Ali pokušajmo razmišljati s manje tehničke tačke gledišta, odnosno, pokušajmo analizirati korisnika naše klase ili modula, odnosno ko će ga koristiti. Temeljni aspekt koji uvijek moramo imati na umu jest činjenica da će korisnici aplikacije ili sistema koji razvijamo, a koje opslužuje određeni modul, biti oni koji će ih zahtijevati izmjene. Oni koji budu posluženi tražit će promjenu klase ili modula. 

Neki primjeri modula i njihova upotreba:

  • Modul za održavanje: korisnika čine administratori baza podataka i softverski arhitekti.
  • Izvještajni modul: korisnika čine uredski radnici, računovođe i proizvodnja.
  • Modul za obračun plaćanja za sistem upravljanja platnim spiskom: korisnici mogu uključiti pravnike, menadžere i računovođe.
  • Modul za pretraživanje teksta za sistem upravljanja bibliotekom: korisnike može predstavljati bibliotekar ili posjetitelji i kupci same biblioteke.

Dakle, ako je prvi korak potraga za glumcima ili glumcem koji ima ulogu sagovornika sa modulom, povezivanje pojedinaca sa svim ulogama može biti teško. U maloj kompaniji jedna osoba može igrati više uloga, dok u velikoj kompaniji može biti više ljudi koji imaju jednu ulogu. 

Čini se razumnijim identificirati uloge, a ne ljude ili korisnike.

Stoga:

  • korišćenje softverskog sistema defiobjašnjava razloge za promjenu;
  • odgovornost je porodica funkcija koja zadovoljava potrebe određenog aktera, odnosno korisnika sistema;
  • akteri, korisnik postaje izvor promjena u grupi funkcionalnosti koje moraju zadovoljiti potrebe korisnika;
  • evolucija korisničkih potreba, vodi razvoj funkcionalnosti;

Pogledajmo nekoliko primjera

Pretpostavimo da imamo klasu Knjiga koja sadrži koncept knjige i njenu funkcionalnost.

class Book {

    funkcija getTitle () {

        povratak „Velika knjiga“;

    }

    funkcija getAuthor () {

        povratak "Alessandro Baricco";

    }

    funkcija nextpage () {

        // sljedeća stranica

    }

    funkcija printCurrentPage () {

        odjek „sadržaj trenutne stranice“;

    }

}

Ovo je sasvim normalna klasa. Imamo knjigu, a razred nam može dati naslov, mogu nam dati autora i mogu ići dalje. Konačno, sposoban je i za ispis trenutne stranice na ekranu. 

Međutim, postoji mali problem. 

Razmišljajući o akterima uključenim u upravljanje objektom Knjige, ko bi oni mogli biti? 

Ovdje se lako možemo sjetiti dva različita glumca: Upravljanje knjigama (kao bibliotekar) e Mehanizam predaje podataka (poput načina na koji želimo dostaviti sadržaj korisniku: na ekranu, grafičko korisničko sučelje, samo tekstualno korisničko sučelje, možda ispis). 

Stoga imamo dva vrlo različita glumca koji komuniciraju s razredom.

Ukratko, ova klasa čini kombinaciju između:

  • poslovna logika sa 
  • prezentacija 

ovo može predstavljati problem jer krši načelo jedinstvene odgovornosti (SRP). 

Kako se možemo promijeniti, kako možemo poboljšati ovaj kodeks tako da poštuje princip jedinstvene odgovornosti?

Pogledajte sljedeći kod:

class Book {

    funkcija getTitle () {

        povratak “Oceano Mare”;

    }

    funkcija getAuthor () {

        povratak "Alessandro Baricco";

    }

    funkcija okreni stranicu () {

        // sljedeća stranica

    }

    funkcija getCurrentPage () {

        odjek „sadržaj trenutne stranice“;

    }

}

sučelje Printer {

    funkcija printPage ($ stranica);

Inovacijski bilten
Ne propustite najvažnije vijesti o inovacijama. Prijavite se da ih primate putem e-pošte.

}

klasa StampaLibro implementira Printer {

    funkcija printPages ($ stranica) {

        echo $ stranica;

    }

}

 

klasa HtmlPrinter implementira Printer {

    funkcija printPages ($ stranica) {

        echo ' '. $ stranica. ' ';

    }

}

Ovaj vrlo jednostavan primjer pokazuje kako odvojiti prezentaciju od poslovne logike, a u skladu sa SRP nudi velike prednosti u fleksibilnosti našeg projekta.

Pogledajmo još jedan primjer:

Primjer sličan onome gore je kada objekt može sačuvati i dohvatiti se iz prezentacije.

class Book {

    funkcija getTitle () {

        povratak “Oceano Mare”;

    }

    funkcija getAuthor () {

        povratak "Alessandro Baricco";

    }

    funkcija okreni stranicu () {

        // sljedeća stranica

    }

    funkcija getCurrentPage () {

        vratiti "sadržaj trenutne stranice";

    }

    funkcija save () {

        $ filename = '/ dokumenti /'. $ ovo-> getTitolo (). '-'. $ ovo-> getAuthor ();

        file_put_contents ($ ime datoteke, serializirati ($ ovo));

    }

}

Kao i ranije, i ovdje možemo prepoznati različite aktere poput Upravljanje knjigama (kao bibliotekar) e Upornost. Kad god želimo promijeniti način na koji idemo od stranice do stranice, moramo promijeniti ovu klasu. Možemo imati nekoliko razloga za promjene.

class Book {

    funkcija getTitle () {

        povratak “Oceano Mare”;

    }

    funkcija getAuthor () {

        povratak "Alessandro Baricco";

    }

    funkcija okreni stranicu () {

        // sljedeća stranica

    }

    funkcija getCurrentPage () {

        vratiti "sadržaj trenutne stranice";

    }

}

klasa SimpleFilePersistence {

    function save (Book $ book) {

        $ filename = '/ dokumenti /'. $ book-> getTitle (). '-'. $ book-> getAuthor ();

        file_put_contents ($ ime datoteke, serializirati ($ knjiga));

    }

}

Premještanje operacije ustrajnosti u drugi razred jasno će razdvojiti odgovornosti i moći ćemo razmijeniti metode upornosti bez utjecaja na našu klasu Knjige. Na primjer, implementacija klase DatabasePersistence bila bi trivijalna i naša poslovna logika izgrađena oko operacija knjiga neće se promijeniti.

Nastavite čitajući drugi princip Otvoreno / Zatvoreno ->

Ercole Palmeri

Inovacijski bilten
Ne propustite najvažnije vijesti o inovacijama. Prijavite se da ih primate putem e-pošte.

Nedavni članak

Izdavači i OpenAI potpisuju ugovore za reguliranje protoka informacija koje obrađuje umjetna inteligencija

Prošlog ponedjeljka Financial Times je objavio dogovor sa OpenAI. FT licencira svoje novinarstvo svjetske klase…

30 april 2024

Online plaćanja: Evo kako vas usluge striminga čine da plaćate zauvijek

Milioni ljudi plaćaju usluge striminga, plaćajući mjesečne pretplate. Uvriježeno je mišljenje da vi…

29 april 2024

Veeam nudi najsveobuhvatniju podršku za ransomware, od zaštite do odgovora i oporavka

Coveware od strane Veeam-a će nastaviti da pruža usluge odgovora na incidente u slučaju sajber iznude. Coveware će ponuditi mogućnosti forenzike i sanacije…

23 april 2024

Zelena i digitalna revolucija: Kako prediktivno održavanje transformira industriju nafte i plina

Prediktivno održavanje revolucionira sektor nafte i plina, s inovativnim i proaktivnim pristupom upravljanju postrojenjima.…

22 april 2024