Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Hartile google nu mai au chenarul...

Tomate in ghiveci la curte?

Idei cale de actiune recuperare g...

Intoleranța lactoza- vegan v...
 Tobe acustice insonorizare in blo...

Cine canta? Fragment din melodie...

Tablou sigurante Dacia Sandero 2012

Baby Reindeer - 2024
 Hotii voteaza hoti?!

Camera video masina

Zilele emailului din gospodaria n...

Best gaming laptop?
 Humane (2024)

Recomandare casti 100-150 lei

Schimbare bec far VW Touran 1T3

Plata impozit PF
 

Getteri si Setteri

- - - - -
  • Please log in to reply
48 replies to this topic

#1
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019
Parerile sunt impartie in legatura cu aceste enitati, avem urmatoarele cazuri:

1.Setteri sunt evil, dar getteri nu-s
2.Setteri si getteri sunt evil (https://www.javaworl...s-are-evil.html)
3.Setteri si getter nu sunt evil, ci doar folositi necorespunzator in diferite contexte.

Voi care din optiunile de mai sus ati alege ?

#2
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Setter = metoda de o linie care poate fi apelata din afara clasei, si care face un singur lucru: schimba valoarea unei proprietati a obiectului. Numele unui setter nu exprima o operatie cu sens, ci are o forma artificiala, de obicei setX, unde X e numele proprietatii.

Cum construiesc eu clasele in proiectele in care am putere de decizie:

1.Setteri sunt evil, dar getteri nu-s

A nu avea setteri nu inseamna NICIDECUM a nu schimba valori. Valorile sunt initializate (schimbate) in constructor, si apoi in metodele publice care fac si alte lucrurile utile pentru business, pe langa faptul ca seteaza o valoare.

Uneori nu exista "alte lucruri" de business care trebuie facute, dar cel putin metoda nu va fi numita "setFoo", ci "doMeaningfulThing(value)".

Alteori nu exista "alte lucruri" de business care trebuie facute, dar operatia de business are sens doar cu mai mult de un singur parametru, de exemplu "doMeaningfulThing(meaningfulVariable1, meaningfulVariable2)".

Asa nu:

setVar1(var1);
setVar2(var2);



Asa da:

doMeaningfulThing(meaningfulVariable1, meaningfulVariable2)


Astfel, numele metodelor exprima intentia, nu doar ceea ce se face. Poti avea metode care schimba aceeasi proprietate, dar cu diferite intentii.


Intr-o arhitectura, una dintre cele mai dificile intrebari nu este "CE FACE CODUL?", ci "DE CE FACE CODUL ceea ce face?". Daca vreau sa stiu "CE", pai citesc codul si vad CE.

Dar "DE CE-ul" e mai greu de rationalizat. De aceea abordarea descrisa mai sus.

Edited by OriginalCopy, 06 May 2019 - 09:56.


#3
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
3. Next?

#4
DemocracySucks

DemocracySucks

    Junior Member

  • Grup: Members
  • Posts: 227
  • Înscris: 06.04.2019
3. clar!

restul sunt diletantisme imprumutate din asa zisa "programare functionala"

#5
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005

View PostIulius-Foyas, on 06 mai 2019 - 09:28, said:

3.Setteri si getter nu sunt evil, ci doar folositi necorespunzator in diferite contexte.
asta pentru ca iti permite "modul de lucru"

#6
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
O arhitectura buna il forteaza pe programator sa scrie la randul lui cod nou curat. Bineinteles, programatorul tot poate face lucruri anapoda, dar, intr-o arhitectura buna, trebuie sa depuna mult mai mult efort.

Deci programatorul: ori face lucrurile curat si fara mult efort, ori depune mai mult efort ca sa faca lucrurile anapoda.

E vorba de inertia unei arhitecturi curate si unde te duce ea. Daca o faci cu cap de la inceput, te poti proteja pe termen lung, iar folosirea responsabila a setterilor e o piesa din puzzle importanta in atingerea acestui scop.

Asta ca sa nu mai vorbim si despre ubiquitous language si alte avantaje.

Are putin de-a face cu "programarea functionala", ci mai mult cu o gandire sanatoasa si responsabila, nu gandire de plantatie de cod.

Edited by OriginalCopy, 06 May 2019 - 15:16.


#7
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostOriginalCopy, on 06 mai 2019 - 09:45, said:

Setter = metoda de o linie care poate fi apelata din afara clasei, si care face un singur lucru: schimba valoarea unei proprietati a obiectului. Numele unui setter nu exprima o operatie cu sens, ci are o forma artificiala, de obicei setX, unde X e numele proprietatii.

Cum construiesc eu clasele in proiectele in care am putere de decizie:

1.Setteri sunt evil, dar getteri nu-s

A nu avea setteri nu inseamna NICIDECUM a nu schimba valori. Valorile sunt initializate (schimbate) in constructor, si apoi in metodele publice care fac si alte lucrurile utile pentru business, pe langa faptul ca seteaza o valoare.

Uneori nu exista "alte lucruri" de business care trebuie facute, dar cel putin metoda nu va fi numita "setFoo", ci "doMeaningfulThing(value)".

Alteori nu exista "alte lucruri" de business care trebuie facute, dar operatia de business are sens doar cu mai mult de un singur parametru, de exemplu "doMeaningfulThing(meaningfulVariable1, meaningfulVariable2)".

Asa nu:

setVar1(var1);
setVar2(var2);



Asa da:

doMeaningfulThing(meaningfulVariable1, meaningfulVariable2)
pai sa zicemc am urmatorul cod:
class Puppy{
	private String state;
	//alte campuri
   
	Puppy(){
		this.state = "doing nothing";
	}
	//alte metode
	public String getState(){
		return this.state;
	}
	public setState(String state){
		this.state =  state;
	}
}
//altundeva in alt obiect:
	Puppy puppy =  new Puppy();
	puppy.getState(); // "doing nothing"
	//cod pt actiunea stapanului = vorbeste cu catelul;
	puppy.setState("barking");
   
	//cod pt actiunea stapanului = arunca un os
	puppy.setState("fetching bone");
   
	//cod pt actiunea stapanului = pleaca la alte treburi
	puppy.setState("sleeping");

Ce este gresit in folosirea acestui setter ?

#8
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Codul nu are niciun sens. Daca vrei sa intelegi complexitatea lucrurilor despre care vorbesc si consecintele, trebuie sa vii cu o situatie mai complexa si plauzibila, in care mai multe obiecte interactioneaza.

Ce ai tu acolo nu are nevoie de clasa Puppy, poate fi bine mersi o variabila locala metodei.

Fa un proiectel realist cu 15+ clase, apoi discutam. Si cu requirements foarte bine documentate intr-un document pdf, ca sa nu vorbim ca sa ne aflam in treaba.

Edited by OriginalCopy, 06 May 2019 - 19:47.


#9
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostOriginalCopy, on 06 mai 2019 - 19:42, said:

Codul nu are niciun sens. Daca vrei sa intelegi complexitatea lucrurilor despre care vorbesc si consecintele, trebuie sa vii cu o situatie mai complexa si plauzibila, in care mai multe obiecte interactioneaza.

Ce ai tu acolo nu are nevoie de clasa Puppy, poate fi bine mersi o variabila locala metodei.
1.Care variabila a carei metode . ?
2.Daca in realitate catelul exista atunci si obiectul catel trebuie sa existe, doarece oop-ul trebuie sa exprime  interactiunea reala intre entitati din viata reala.
3.Decomadata nu inteleg ce nu are sens in interactiunea simpla a doua obiecte: Unul  Puppy() si altul Stapan(). ?

Tu cam ai modela strict aceasta problema: modificarea starii lui Puppy in interactiunea simpla dintre Puppy si  Stapan ? (doresc cod, in orice limbaj vrei tu).
Te rog, ai cuvantul.

Edited by Iulius-Foyas, 06 May 2019 - 19:50.


#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Nimic nu are sens, deoarece nu ai definit problema pe care vrei sa o rezolvi.

#11
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005

View PostIulius-Foyas, on 06 mai 2019 - 19:37, said:

Ce este gresit in folosirea acestui setter ?
faptul ca tu poti seta o stare, starea aia este o proprietatea a clasei,
la fel cum este temperatura apei, o incalzesti, dar nu ii spui tu cat de calda sa fie

#12
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
puppy.setState("scrie un roman");//asta e gresit, asa la nivelul de gradinita la care vrei sa discuti.

Daca vrei sa discuti serios, atunci:

View PostOriginalCopy, on 06 mai 2019 - 19:42, said:

Fa un proiectel realist cu 15+ clase, apoi discutam. Si cu requirements foarte bine documentate intr-un document pdf, ca sa nu vorbim ca sa ne aflam in treaba.


#13
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostOriginalCopy, on 06 mai 2019 - 19:51, said:

Nimic nu are sens, deoarece nu ai definit problema pe care vrei sa o rezolvi.
modificarea starii lui Puppy in interactiunea simpla dintre Puppy si  Stapan ?

#14
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Setter nu inseamna neaparat ca doar seteaza o valoare, chiar daca incepe cu "set". De exemplu, setFont sau setColor pe un element de UI vor schimba proprietatile si vor si redesena componenta.

Dar exista si destule cazuri in care ai nevoie de setter chior, cum ar fi orice obiect cu un set de variabile pe care vrei sau nu vrei sa le setezi la initializare, nu are sens sa faci o droaie de constructori pentru fiecare combinatie de variabile, doar pentru ca ai citit pe net ca setterii sint evil.

Sau exista cazurile in care prin setarea unei variabile actionezi asupra obiectului doar schimbind variabila, de exemplu ai un thread in care ruleaza un loop.

In general regula ar trebui sa fie sa nu pui automat getteri si setteri pentru fiecare varibila, doar pentru ca poti s-o faci in 2 secunde din IDE-ul minune. Trebuie sa te gindesti mai intii dacachiar ai nevoie de asa ceva.

Acuma nu mai zic de aia care cred ca nu folosesc setteri daca in loc de setAmount() folosesc deposit() sau alte aberatii. Right, macar daca incep cu set le gasesti mai usor in IDE-ul minune, nu trebuie sa te chinui sa-ti imaginezi ce dracu de verb a folosit  ala "ca sa nu foloseasca setteri". changeFontAndRepaint() :lol:

#15
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostMarianG, on 06 mai 2019 - 19:52, said:

faptul ca tu poti seta o stare, starea aia este o proprietatea a clasei,
la fel cum este temperatura apei, o incalzesti, dar nu ii spui tu cat de calda sa fie
dar aici avem o starre discreta.
Problema este: modificarea starii lui Puppy in interactiunea simpla dintre Puppy si  Stapan.
Cum ai modela aceasta interactiune, simpla de gradinitia (doresc cod de la tine).

View PostOriginalCopy, on 06 mai 2019 - 19:54, said:

Daca vrei sa discuti serios, atunci:
Am inteles deci cu alte cuvinte nu poti modela aceasta simpla interactiune.

Edited by Iulius-Foyas, 06 May 2019 - 20:22.


#16
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005
cand nu este starea discreta ?
ca sa nu zic ca nu setezi stari ci obiective

Edited by MarianG, 06 May 2019 - 20:33.


#17
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostMosotti, on 06 mai 2019 - 20:19, said:

Acuma nu mai zic de aia care cred ca nu folosesc setteri daca in loc de setAmount() folosesc deposit() sau alte aberatii. Right, macar daca incep cu set le gasesti mai usor in IDE-ul minune, nu trebuie sa te chinui sa-ti imaginezi ce dracu de verb a folosit  ala "ca sa nu foloseasca setteri". changeFontAndRepaint() Posted Image
Asta cu autocomplete din IDE e cam singurul argument decent pro-setX().

Cu care nu sunt de acord din urmatorul rationament: setX e detaliu de implementare. In meeting cu product owner sau cine imi descrie business rules, cream un document. Acel document foloseste terminologia de business. PO nu va spune "setCoordinate", ci "focusOnPerson" in acele cerinte.

Asta se numeste ubiquitous language.

Iar documentul respectiv se duce de pe masa lui PO direct la programatorul care implementeaza, si programatorul il intelege pe PO, si PO intelege codul, deoarece cu totii folosim acelasi limbaj, aceeasi terminologie.

Ulterior, cand apare o noua cerinta "I want users who pay for gold membership to be rendered with a golden star when they're focused on", e mai usor sa gasesti unde trebuie sa modifici in cod, pentru ca:

1. nu ai sute de apeluri la setCoordinate, din diferite motive, ci cateva, sau probabil doar unul la focusOnPerson()
2. cuvinte cheie din cerinta apar atat in formularea lui PO, cat si in cod => usor de gasit
3. cand ai prea mult de "set", prefixul "set" devine inutil Posted Image ca autocomplete iti da ditamai lista de metode, si tot singur trebuie sa te descurci; dar cand cauti doar dupa "focus" sau "person", primesti cateva sugestii, si vor fi acele metode care sunt relevante pentru problema pe care vrei sa o rezolvi.

Edited by OriginalCopy, 06 May 2019 - 20:39.


#18
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostIulius-Foyas, on 06 mai 2019 - 20:23, said:

Cum ai modela aceasta interactiune, simpla de gradinitia (doresc cod de la tine).
Doar incepatorii scriu cod inainte de a avea cerinte, definitia problemei :lol:

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate