CleanCode

Seminar
7/10 (1 vot)
Conține 1 fișier: pdf
Pagini : 7 în total
Cuvinte : 1308
Mărime: 150.98KB (arhivat)
Publicat de: Emanuel-Gabi Stoian
Puncte necesare: 0

Extras din seminar

1. S.O.L.I.D.

1.1. SINGLE RESPONSABILITY PRINCIPLE

O clasa trebuie sa aiba intotdeauna o singura responsabilitate si numai una. In caz contrar, orice schimbare de specificatii va duce la inutilitatea ei si rescrierea intregului cod.

Ex1: Implementarea de mai jos incalca principiul S, deoarece NetIncomeCalculator stie sa faca doua lucruri diferite, si anume: sa calculeze netul total si sa afiseze la consola. Aceasta clasa devine inutila in momentul in care dorim sa adaugam o alta metoda pentru afisarea rezultatul, cum ar fi displayInFile():

public class NetIncomeCalculator implements NetIncomeCalculatorInterface {

private Map<Integer, Person> persons;

public NetIncomeCalculator(Map<Integer, Person> persons) {

this.persons = persons;

}

@Override

public double calculateTotalNetIncome() throws NotFoundPersonException {

//implementare

}

public void displayConsole(NetIncomeCalculatorInterface calculator) throws NotFoundPersonException {

//implementare

}

}

Solutie: Se defineste o alta clasa, Report, care sa contina toate metodele pentru afisarea informatiilor din NetIncomeCalculator. Iar aceasta din urma, o sa implementeze, doar acele metode care prelucreaza datele incapsulate in obiectele de tip Person.

1.2. OPEN-CLOSED PRINCIPLE

Obiectele sau entitatile trebuie sa fie deschise pentru extindere, dar inchise pentru modificari.

Ex2: In momentul compilarii metodei de mai jos nu stim tipul concret al obiectelor de tip Person, ceea ce a condus la utilizarea blocurile de tip if-then-else if pentru identificarea acestuia. Modul acesta de implementare incalca principiul O, deoarece in momentul in care o sa apara un alt tip concret al clasei Person (spre exemplu InginerAtom) metoda calculateTotalNetIncome() trebuie modificata pentru a putea calcula suma si pentru noul caz.

public double calculateTotalNetIncome() throws NotFoundPersonException {

if (persons == null || persons.size() == 0)

throw new NotFoundPersonException("Not found persons");

double sum = 0;

for (Person person : persons.values()) {

if (person instanceof Programmer) {

sum += (1 - 0.13 - 0.2) * person.getGrossIncome();

} else if (person instanceof Driver) {

sum += (1 - 0.13 - 0.2 - 0.1) * person.getGrossIncome();

} else if (person instanceof ScholarshipStudent) {

sum += person.getGrossIncome();

}

}

return sum;

}

Solutie: Definirea unei metode, calculateNetIncome(), care poate sa fie abstracta sau concreta (se alege cel mai des intalnit comportament al functiei respective), in cadrul clasei Person, iar fiecare clasa concreta trebuie sa suprascrie aceasta metoda, cu comportamentul asteptat. O alta solutie o reprezinta definirea unei interfete care sa contina metoda descrisa anterior.

Forma finala a metodei calculateTotalNetIncome() ar trebui sa arate astfel:

public double calculateTotalNetIncome() throws NotFoundPersonException {

if (persons == null || persons.size() == 0)

throw new NotFoundPersonException("Not found persons");

double sum = 0;

for (Person person : persons.values()) {

sum += person.calculateNetIncome();

}

return sum;

Preview document

CleanCode - Pagina 1
CleanCode - Pagina 2
CleanCode - Pagina 3
CleanCode - Pagina 4
CleanCode - Pagina 5
CleanCode - Pagina 6
CleanCode - Pagina 7

Conținut arhivă zip

  • CleanCode.pdf

Alții au mai descărcat și

Laboratoare rezolvate Programare Web

Problema 1 Să se scrie documentul HTML în care se afișează o strofă dintr-o poezie. Se va folosi pentru afișarea strofei tagul <br>. Apoi se...

Hackeri

Hackerii sunt pasionati ai informaticii, care, de obicei au ca scop „spargerea” anumitor coduri, baze de date, pagini web etc. Ei sunt considerati...

Principiile Testării Software - Diagrama cazurilor de utilizare

Pentru realizarea laboratorului numărul 1, am ales sistemul turistic cu site-ul official Perfect Tour. Perfect Tour este o agenție de turism...

Limbaj de programare C - Lab nr 1

Noțiuni teoretice - Biblioteca stdio.h conține funcții speciale pentru citirea și afișarea datelor - prin urmare instrucțiunea de includere a...

Multimedia și animație

Grafica digitală este un domeniu al informaticii care acoperă toate aspectele legate de formarea imaginilor utilizând un computer. Termenul...

Ai nevoie de altceva?