Programowanie obiektowe - co o nim sądzicie?

1
KamilAdam napisał(a):
4w0rX4t4X napisał(a):

@KamilAdam: no właśnie o to mi chodziło... Projektuje wszystko tak jak w OOP. Czyli nawet jeśli implementacyjne czerpiesz korzyści z paradygmatu funkcyjnego to obiektowe podejście w rzeczywistym świecie nie jest całkowicie do wykluczenia lub byłoby to bardzo karkołomne?

Pytanie tylko czy ty projektujesz OOP czy po prostu projektujesz? Bo jeśli na podstawie tego samego projektu można zrobić implementację OOP i FP to czy ten projekt ma w sobie coś szczególnego że możesz go nazwać projektowaniem OOP? Może to jest po prostu projektowanie?

Zaprojektowane diagramy UML (w szczególności diagramy klas) są wprost przekładane na pola w DB i obiektach, które są klockami systemu. Więc można.
Czy zrobię na podstawie tego kod FP? Nie wiem bo nie robiłem. Dlatego pytam jak robią to Ci co to robią.

1
4w0rX4t4X napisał(a):gólnego że możesz go nazwać projektowaniem OOP? Może to jest po prostu projektowanie?

Zaprojektowane diagramy UML (w szczególności diagramy klas) są wprost przekładane na pola w DB i obiektach, które są klockami systemu. Więc można.
Czy zrobię na podstawie tego kod FP? Nie wiem bo nie robiłem. Dlatego pytam jak robią to Ci co to robią.

Przeciez napisałem dwa posty wyżej:

  • interfajs to TypeClassa (w Ruscie trait)
  • obiekt to struktura/rekord i moduł działający na tej strukturze

Koniec magii

1
4w0rX4t4X napisał(a):
KamilAdam napisał(a):
4w0rX4t4X napisał(a):

@KamilAdam: no właśnie o to mi chodziło... Projektuje wszystko tak jak w OOP. Czyli nawet jeśli implementacyjne czerpiesz korzyści z paradygmatu funkcyjnego to obiektowe podejście w rzeczywistym świecie nie jest całkowicie do wykluczenia lub byłoby to bardzo karkołomne?

Pytanie tylko czy ty projektujesz OOP czy po prostu projektujesz? Bo jeśli na podstawie tego samego projektu można zrobić implementację OOP i FP to czy ten projekt ma w sobie coś szczególnego że możesz go nazwać projektowaniem OOP? Może to jest po prostu projektowanie?

Zaprojektowane diagramy UML (w szczególności diagramy klas) są wprost przekładane na pola w DB i obiektach, które są klockami systemu. Więc można.
Czy zrobię na podstawie tego kod FP? Nie wiem bo nie robiłem. Dlatego pytam jak robią to Ci co to robią.

Diagram klas jest przekladany na pola w klasach, bo doslownie do tego zostal stworzony :D.

Mimo, ze w programowaniu funkcyjnym jestem kiepski to dorzuce swoje trzy grosze. Programujac deklaratywnie skupiasz sie na to co chcesz osiagnac, a nie jak chcesz to osiagnac. Innymi slowy stawiasz sobie warunki jakie musza byc spelnione. Nawet w javie, mozna pisac w taki pseudo funkcyjny sposob. Immutable typy i po prostu chainujesz komendy. Wykonujac operacje na agregacie nie modyfikujesz go tylko zwracasz nowy.

3
4w0rX4t4X napisał(a):

Nawet strukturalnie da się wszystko napisać - choć osobiście bym nie chciał. Chciałbym natomiast porozmawiać z kimś kto modeluje systemy, zajmuje się analityką / rozmawia z klientem i programuje w paradygmacie funkcyjnym. Ciekaw jestem jak wyglądają notatki takiej osoby, co na spotkaniach pokazuje klientom itp. itd.

Jestem programistą i z klientem końcowym mam teraz mały kontakt, ale pracuje z analitykami, ew. współtworze dokumenty - i tak:
Pokazuje zebrane wymagania - w formie tabelki. Przepływy danych (tu są diagramy czasem), interfejsy (API).
Na pewno nie pokazuje UML, diagramów baz danych, ludzików itp. - kiedyś to robiłem, ale zanim nawet na serio trafiłem do FP to doszedłem, że to straszna bryndza (chociaż klienci się tym jarali - fajnie, ale za duża strata czasu i za dużo durnych pytań).

Co do samego kodowania to fakt, że i w strukturalnym, i w OOP, i w FP robi się te same rzeczy
projektuje funkcje i struktury danych i czasem nawet używa się słówka class. Ale to nie jest to samo i nie jest tak, że modelowanie danych pochodzi z OOP.

Fakt, ADT z daleka wygląda jak OOP i można przezłożyć jedno na drugie - ale jednak jest inna filozofia.
ADT w zasadzie zakłada immutability.
ADT jest ultra regularne - masz po prostu typy bazowe, sume i iloczyn - z tego budujesz (z pewnymi kruczkami, różne sumy, różne iloczyny).
ADT nie ma takich koncepcji jak dziedziczenie w standardzie.
Za to jest nacisk na polimorfizm (parametryczny) i czasem (ale to raczej nie w typowym crudzie) pojawiają się cuda typu GADT.
W FP nie bawimy się w pola prywatne i publiczne. W uproszczeniu - wszystko jest publiczne. Za prywatność odpowiada mechanizm modułów w danym jezyku (po prostu pewnych funkcji, konstruktorów typów i struktur moduł nie udostępnia na zewnątrz).

Typeclass to też coś co raczej nie wprowadzasz jak robisz typową aplikację dla klienta (czyli w języku OOP - o rany nie robimy interfejsów!, to się raczej robi w bibliotekach).

0
jarekr000000 napisał(a):

Typeclass to też coś co raczej nie wprowadzasz jak robisz typową aplikację dla klienta (czyli w języku OOP - o rany nie robimy interfejsów!, to się raczej robi w bibliotekach).

Może jeszcze TypeClassy nie trafiły na germańskich architektów (GA)? Stawiam że 10 lat wspólnej egzystencji GA i FP i będziemy mieli TypeClasy z jedną implementacją :D Jak taki Spring dla Haskella :P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.