Erori frecvente în OOP

Cam asta ar fi sinteza semi-finală – aştept comentarii pe text, dacă e posibil 😛

Mulţam mult! 🙂

Link:Erori OOP

Comments

Erori frecvente în OOP — 21 Comments

  1. Dude… don’t return! De fapt există şi un .lyx, dacă te interesează, zi-mi 😛
    Nu am ştiut cum să public pe blog, textul e cam lunguţ 😛

  2. @Alex: din păcate nu pot spune că am suficientă experienţă cît să critic greşelile de programare din Java sau .NET 😛

  3. Switch-ul tău de la pagina 4 miroase a cuplare. 😀
    Fiind vorba de OOP, presupun că acel cod o să vină într-o metodă. Şi metoda respectivă o să fie tare legată de clasele alea. Dacă la un moment dat o să adaugi un alt caz şi o clasă D, o să trebuiască să modifici switch-ul. Chestiile care se modifică se izolează de chestiile care rămân la fel. Cred că tot la observer-ul meu o să ajungi. 😛

  4. Înainte să-mi sari în cap, este foarte posibil ca acel switch să nu trebuiască modificat niciodată, orice ar fi (deşi e cam unlikely; în cazul ăsta nu te-ar fi deranjat prea tare nici celelalte variante de cod). Oricum, ca idee nici eu nu sunt adeptul punerii unor pattern-uri cap la cap în ideea că poate o să iasă ceva.

  5. @Ovidiu, depinde unde vrei abstractizarea …

    daca vrei abstractizarea structurii de date, atunci incapsulezi operatiile in clase, in caz contrar le scoti in afara claselor.

    si practic depinde ce vrei sa adaugi mai usor … structuri de date sau operatii.

    Ca sablon de proiectare, daca vrei ceva mai formal, exista “Visitor”, iar limbajele de programare ceva mai functionale suporta conceptul de pattern matching (vezi un exemplu in Scala).

    Cred ca principala greseala cand vine vorba de OOP este folosirea fanatica a practicilor OOP.

  6. Nici o şansă să ajung la un observer – la un fel de factory o să ajung în cazul respectiv. Eroarea pe care o puneam în evidenţă era alta – oamenii evită folosirea conceptelor OOP pe care nu le pricep (chiar şi atunci cînd ei cred că pricep).
    Oricum, avînd în vedere că ai identificat un observer acolo, cred că ştiu care e pattern-ul tău favorit 😛

  7. @Alex, evident, exemplul respectiv este atât de general încât e greu de spus ce patern s-ar potrivi (asta presupunând că se potriveşte vreunul). Poate bucata de cod e chiar implementarea unui pattern. Dacă nu ţi-ai dat seama, eu sunt avocatul diavolului în discuţia asta. 😀

  8. @Alex: perfect de acord – din păcate anii ’90 au făcut victime 90% din floarea programatorilor, şi de-acolo izvorăşte pipe-dream-ul programelor perfecte, cu design genial.

  9. @dorin: nu, n-am identificat un observer. Era doar un apropo la discuţia de dincolo. 😉

  10. Cred că ar trebui făcut un fel de forum pentru discuţii de genul ăsta.

  11. Aş pune la bătaie un domeniu (designlab.ro – oricum zace nefolosit de ani de zile) + hosting, dacă mai e cineva interesat. 🙂

  12. Domeniul respectiv e hostat la ora actuală gratis de ROHOST. Dar probabil o să-l mut pe un VPS pe care-l am de la linode.com.

  13. Dudes, nu vreau sa aduc nici o ofensa nimanui 🙂 dar dupa ani si ani de OOP… C si cu toate plusurile lui din coada…. nu e chiar locul si lucrul potrivit de OOP. Pur si simplu nu te face sa gandesti OOP.

    Si ca sa dau un exemplu sa nu spuna lumea ca doar dau din gura si din experienta zic:

    1) avem un string…
    – un C programmer o sa vada un char[] sau char*
    – un OOP programmer o sa vada un prenume (sau orice reprezinta acel string) in forma unei clase immutabile.

    2) avem un arbore….
    – un C programmer o sa vada o colectie de noduri
    – un OOP programer o sa vada angajati şi manageri sau orice reprezinta acel arbore si o sa isi defineasca respectivele clase nu sa accentueze faptul ca lucrezi cu un arbore ci sa accentueze faptul ca lucrezi cu un anume concept.

    Pur si simplu C++ nu incurajeaza gandirea OOP, instinctul nu este sa creezi o noua clasa pentru noi concepte… parerea mea. Si deci zic eu ca discutia asta sufera din cauza limbajului ales a fi discutat.

  14. De fapt, programarea OO este ‘modelare OO’ cînd vorbim de C++. Şi gîndirea trebuie formată din altă parte. Poate din Java.