Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Adaptor usb3.1gigabit vs Adaptor ...

La multi ani @Atreides!

La multi ani @KENSINGTON!

La multi ani @burebista!
 La multi ani de Florii!

Stihl fs 70 c-e

Challengers (2024)

Care mai sunt mediile de admitere...
 Laptop cu HDD atasare memorie MMC...

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
 

Muncă multă în constructor - da sau ba?

* * * - - 2 votes
  • Please log in to reply
98 replies to this topic

#73
OriginalCopy

OriginalCopy

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

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

View PostIulius-Foyas, on 03 mai 2019 - 13:04, said:

Yes sir, chiar acum imi repet ca o mantra "daca pot sa apelez orice metoda publica  in orice mod atunci obiectul este valid" si imi apare in minte faptul ca
la un vector nu pot sa apelez metoda .at(index) fara sa-l populez mai intai si ma intreb: este un vector gol un obiect valid din moment ce contrazice aceasta mantra ?
Un vector ca atare este valid si gol.

Un vector ca proprietate a unei clase proprii, care are constrangeri din domeniu, trebuie sa se supuna acelor constrangeri ca sa fie valid. Mai exact, clasa care il incapsuleaza trebuie sa se asigure de asta.

Tu habar n-ai despre ce vorbim in acest topic, le faci varza si apoi te smiorcai.


Pe mine si pe @OP ne leaga un mini-proiectel frumos: https://forum.softpe...tori-mid-level/

Edited by OriginalCopy, 03 May 2019 - 13:09.


#74
Iulius-Foyas

Iulius-Foyas

    Active Member

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

View PostOriginalCopy, on 03 mai 2019 - 13:09, said:

Un vector ca atare este valid si gol.
si atunci de ce nu pot folosi metoda .at(index) inainte de metoda .push_back(valoare)  conform mantrei?  Repetam mantra:
"la un obiect valid pot folosi orice metoda publica in orice ordine."
Ce facem acum ? Contrazicem mantra ?

Sa ne reamintim:
https://forum.softpe...6#entry24622791

si
https://forum.softpe...6#entry24618416

Edited by Iulius-Foyas, 03 May 2019 - 13:34.


#75
OriginalCopy

OriginalCopy

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

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

View PostIulius-Foyas, on 03 mai 2019 - 13:36, said:

si atunci de ce nu pot folosi metoda .at(index) inainte de metoda .push_back(valoare)  conform mantrei?  Repetam mantra:
"la un obiect valid pot folosi orice metoda publica in orice ordine."
Biblioteca standard C++ nu este moderna din cauza BC.

Asta nu inseamna ca nu poti scrie propriul tau cod in asa fel incat obiectele sa fie mereu valide. Si in interiorul claselor tale, sa te asiguri ca incapsulezi lucrurile din std:: si ca mentii mereu invariantele din domeniu.

Noi nu vorbim pe acest topic despre ce fac altii, ci despre ce facem noi in propriile noastre clase.

#76
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Discutia a plecat de la multa munca in constructor. Daca validitatea obiectului depinde de un calcul de juma de ora pe care sa-l pui in constructor, ca sa nu-ti crape codul pentru ca nu apelezi o anumita metoda, e timpul sa regindesti ideea de validitate sau obiectul in sine.

#77
OriginalCopy

OriginalCopy

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

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

View PostMosotti, on 03 mai 2019 - 14:18, said:

Discutia a plecat de la multa munca in constructor. Daca validitatea obiectului depinde de un calcul de juma de ora pe care sa-l pui in constructor, ca sa nu-ti crape codul pentru ca nu apelezi o anumita metoda, e timpul sa regindesti ideea de validitate sau obiectul in sine.
De acord. Depinde foarte mult de detalii, asta am si zis in primul meu raspuns aici pentru @OP.

Poti avea de exemplu ceva "mission critical" d.p.v. al acuratetii pe care il poti pune intr-un thread separat, si e ok daca la startup acel thread are nevoie de 5 minute to catch up.

Depinde, depinde, depinde.

#78
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010
Much ado about nothing. Apropo, ca tot pomeniti de C++ pe aici, exista niste motive pentru care C++ e multi-paradigma. Nu e nevoie s-o dai in fanatism obiectual cu el (sau functional, etc, desi se pot supara fanii programarii functionale).

#79
MarianG

MarianG

    be that as it may

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

View PostIulius-Foyas, on 03 mai 2019 - 12:53, said:

Nu, IDE-ul iimi arata in intelisense campul public capacity.
cine este programator? Tu sau IDE-ul ?

#80
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Toata discutia asta confirma inca o data stupiditatea functiilor cu nume substantiv :first:

#81
Iulius-Foyas

Iulius-Foyas

    Active Member

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

View PostOriginalCopy, on 03 mai 2019 - 13:43, said:

Biblioteca standard C++ nu este moderna din cauza BC.

Asta nu inseamna ca nu poti scrie propriul tau cod in asa fel incat obiectele sa fie mereu valide. Si in interiorul claselor tale, sa te asiguri ca incapsulezi lucrurile din std:: si ca mentii mereu invariantele din domeniu.

Noi nu vorbim pe acest topic despre ce fac altii, ci despre ce facem noi in propriile noastre clase.
Pai in aceasta noua paradigma lucrurile se schimba radical,discutam altfel.

#82
OriginalCopy

OriginalCopy

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

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

View PostIulius-Foyas, on 03 mai 2019 - 17:45, said:

Pai in aceasta noua paradigma lucrurile se schimba radical,discutam altfel.
Tu trebuia sa citesti postarea #1 si sa o intelegi, atunci ai fi discutat despre ceea ce tot discutam noi, in loc sa trollezi.

#83
DemocracySucks

DemocracySucks

    Junior Member

  • Grup: Members
  • Posts: 227
  • Înscris: 06.04.2019

View PostTS030, on 01 mai 2019 - 13:04, said:

Ideea de baza este ca orice clasa/tip de date  [...]arman valizi orice metode ai apela,
Orice clasa, orice metoda? Pe bune? Posted Image

View PostTS030, on 01 mai 2019 - 13:04, said:

are un set de invarianti,
Are un "set" de... pe langa setul ala poate sa mai aiba si alt set care sa nu se supuna ideii de "invariant" din c++?

View PostTS030, on 01 mai 2019 - 13:04, said:

Un pointer ar putea pointa catre o zona de memorie alocata sau nullptr.
O gramada de metode(apropo de "orice metoda") dau eroare pe nullptr. Ca sa eviti trebuie sa faci verificare prealabila.

View PostTS030, on 01 mai 2019 - 13:04, said:

Daca trebuie sa mai apelezi o metoda pentru a avea un obiect valid... ai o problema.
Exact CE PROBLEMA?

View PostTS030, on 01 mai 2019 - 13:04, said:

Apropo, exemplu banal de cum poti folosi un container fara a verifica daca are sau nu elemente:
auto sum = std::accumulate(begin(cont), end(cont), 0);

In lumina:

View PostOriginalCopy, on 01 mai 2019 - 09:54, said:

state invalid e atunci cand nu poti apela orice metoda publica in orice ordine, cand trebuie sa apelezi foo() inainte de bar(), ambele public.
Stii ce ai acolo? Trei functii care trebuie apelate intr-o anumita ordine!

Dar ai uitat sa ne prezinti ce-a mai banala si frecventa operatiune, cum anume returnezi o valoare dintr-un container fara sa verifici daca e gol sau nu.

View PostOriginalCopy, on 01 mai 2019 - 22:07, said:

Povestea cu QPixmap e analoga cu povestea cu vector care are voie sa fie gol - normal ca are voie sa fie gol, asta e definitia unui vector.
Una e cand un framework zice "hai sa desenam o imagine oarecare", alta e cand in aplicatia X cu cerinte precise trebuie sa zici "hai sa desenam o harta cu butoanele X, Y, Z care fac ...".
Nu e o contradictie in ce spun, pentru ca trebuie sa te uiti la un proiect/librarie in contextul lor: 1. care sunt cerintele pentru qt, din perspectiva celor care au creat qt 2. care sunt cerintele pentru aplicatia mea, care poate foloseste qt
Exact la fel cum un vector poate sa fie gol, la fel ai si diverse structuri de date ale unei aplicatii (business sau te miri ce) care trebuie sa fie ori goale, ori in te miri ce stare anume pentru a se putea efectua anumite operatiuni. Daca ai avea experienta reala de programare, ai intelege destul de usor asta.

Cred ca tot tu erai ala care zicea ca nu e bine sa ai setteri, ca cica duc foarte usor obiectele in stari invalide. Asta e o prostie. Din contra, setteri permit cod ce se ocupa de validarea datelor introduse, pentru a evita valorile invalide.

Ai luat din zbor niste idei care ti s-au parut la moda de prin programarea functionala, ideile cu imutabilitatea si lipsa setterilor, povestea cu "nu trebuie sa conteze ordinea apelarii metodelor", obsesia cu "validitatea" starii obiectelor samd. Numai ca astea sunt niste prostioare nerealiste, care nu pot fi aplicate cum visati voi in programarea reala. Nu ai cum sa folosesti doar tipuri de date imutabile, nu ai cum sa faci totul din constructori, nu are nicio logica sa construiesti noi obiecte cand vrei de fapt doar sa modifici o componenta a unui obiect. Imutabilitatea se preteaza doar pentru anumite tipuri de date value-based(adica rolul lor principal e sa stocheze niste date), nu pentru obiecte complexe. Din constructori nu poti intitializa mereu tot, oricand, oricum, caci exista obiecte complexe, care trebuie initializate intr-o anumita ordine, a caror initializare depinde cutare alte aspecte(poate stari ale altor obiecte, poate operatiuni I/O, poate cine stie ce). Si nici sa restrictionezi excesiv disponibilitatea metodelor publice(asta deja miroase a preocupare comuna cu a celora care fac api-uri/biblioteci/frameworkuri), doar ca sa subscrii nu stiu caror idei de aiurea ce le-ai auzit pe la nu stiu care "guru", caci in final ajungi sa faci niste prostii similare cu optimizarea prematura, dar in speranta ca vei evita erori pe viitor.

O invatare corecta a paradigmei OOP ar trebui sa lamureasca multe aspecte. Fara "influente" din asa zisa "programare functionala" sau alte prostii.

Edited by DemocracySucks, 03 May 2019 - 17:55.


#84
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,240
  • Înscris: 24.02.2007
Despre ce vorbim?

Attached File  a.gif   90.72K   17 downloads

#85
DemocracySucks

DemocracySucks

    Junior Member

  • Grup: Members
  • Posts: 227
  • Înscris: 06.04.2019

View PostTS030, on 02 mai 2019 - 14:20, said:

Huh? Trebuie sa explic ce este OOP?
http://www.stroustrup.com/whatis.pdf
Nu. Trebuia sa explici de ce codul respectiv nu e OOP. Evident ca n-ai ce sa explici. Dupa ce o sa inveti OOP ai sa intelegi de ce e OOP.

#86
Iulius-Foyas

Iulius-Foyas

    Active Member

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

View PostMosotti, on 03 mai 2019 - 14:18, said:

Discutia a plecat de la multa munca in constructor. Daca validitatea obiectului depinde de un calcul de juma de ora pe care sa-l pui in constructor, ca sa nu-ti crape codul pentru ca nu apelezi o anumita metoda, e timpul sa regindesti ideea de validitate sau obiectul in sine.
dupa pararea mea , validitatea unui obiect  trebuie sa fie legata de indeplinirea business-logicului pt care a fost creat obiectul.In acest context rareori, un obiect valid ar putea fi creat de un constructor
implicit si de multe ori indeplnirea business-logicului ar depinde si de alte obiecte.

#87
DemocracySucks

DemocracySucks

    Junior Member

  • Grup: Members
  • Posts: 227
  • Înscris: 06.04.2019

View PostOriginalCopy, on 03 mai 2019 - 14:23, said:

De acord. Depinde foarte mult de detalii, asta am si zis in primul meu raspuns aici pentru @OP.
Depinde, depinde, depinde.
Pai evident. Numai ca ai ajuns de la afirmatii categorice pe ton de profesor, la "depinde, depinde, depinde: ... :D

View PostIulius-Foyas, on 03 mai 2019 - 17:59, said:

dupa pararea mea , validitatea unui obiect  trebuie sa fie legata de indeplinirea business-logicului
De fapt, daca ne gandim bine, nu exista "validitatea obiectului" ci validitatea utilizarii obiectului.

#88
OriginalCopy

OriginalCopy

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

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

View PostDemocracySucks, on 03 mai 2019 - 17:54, said:

Exact la fel cum un vector poate sa fie gol
iesi cu el:

View PostIulius-Foyas, on 03 mai 2019 - 17:45, said:

Pai in aceasta noua paradigma lucrurile se schimba radical,discutam altfel.
la o bere, si iti va desena ca la destepti, ca el a inteles despre ce vorbim. Tu tot bati campii.

View PostDemocracySucks, on 03 mai 2019 - 18:03, said:

De fapt, daca ne gandim bine, nu exista "validitatea obiectului" ci validitatea utilizarii obiectului.
De fapt, nici "constructor" nu e corect, dar noi tot asa ii zicem si tot la acelasi lucru ne referim, si culmea, ne intelegem unii cu altii. "Constructorul" nu construieste nimic, obiectul e deja construit.

Un nume mai bun ar fi "Initializator" sau ceva de genul.

#89
Iulius-Foyas

Iulius-Foyas

    Active Member

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

View PostMosotti, on 03 mai 2019 - 14:18, said:

Discutia a plecat de la multa munca in constructor. Daca validitatea obiectului depinde de un calcul de juma de ora pe care sa-l pui in constructor, ca sa nu-ti crape codul pentru ca nu apelezi o anumita metoda, e timpul sa regindesti ideea de validitate sau obiectul in sine.
Si aici ne lovim de modificatorii de access private/public/protected (daca vreau de exemplu ca anumiti membrii ai clasei /metode sa fie accesati in anumit fel)
In acest moment daca dorim sa protejam tot timpul anumiti membrii ai clasei trebuie sa folosesc si setteri sau perechi setteri/getteri.
Problema este ca in acest caz ma lovesc de o alta cutuma in OOP:  getter and setter methods are "evil"

View PostDemocracySucks, on 03 mai 2019 - 18:03, said:

Pai evident. Numai ca ai ajuns de la afirmatii categorice pe ton de profesor, la "depinde, depinde, depinde: ... Posted Image


De fapt, daca ne gandim bine, nu exista "validitatea obiectului" ci validitatea utilizarii obiectului.
Pai  in cazul asta poti considera ca orice obiect creat  de un  constructor (fie el si implicit) poate fi socotit a fi valid pt a fi utilizat.
Insa validitatea obiectului este complet diferita de validitatea utilizarii obiectului.

Edited by Iulius-Foyas, 03 May 2019 - 18:12.


#90
OriginalCopy

OriginalCopy

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

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

View PostIulius-Foyas, on 03 mai 2019 - 18:06, said:

Problema este ca in acest caz ma lovesc de o alta cutuma in OOP:  getter and setter methods are "evil"
Getterii nu sunt atat de evil, setterii sunt, iar @OP stie asta:

View Postjegmihai, on 29 decembrie 2018 - 23:26, said:

Am reușit să evit setterii într-un proiect recent de nivel mediu (cam pe acolo îl apreciez). I-am încurajat și pe colegii de echipă să procedeze asemenea.
Pe de altă parte, dacă faci o aplicație care interacționează cu o baza de date (JPA, Entity Framework), atunci cam ai nevoie de setteri pentru operația de Update.


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

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