Programowanie funkcyjne czy obiektowe?

0

Programowanie obiektowe zdobyło sobie bardzo dużą popularność w "głównym nurcie". Języki funkcyjne (np. Haskell, LISP) są uznawane raczej za języki dla "wybrańców", ale ich zwolennicy twierdzą, że umożliwiają dużo szybsze programowanie niż języki obiektowe (lub obiektowe z niewielkimi dodatkami funkcyjnymi). Jak to jest - czy funkcyjność i wszystkie bajery z tym związane, rzeczywiście jest takim zbawieniem, czy jednak to przereklamowana sprawa?

Bawiłem się trochę Haskellem, podstawy rozumiem, ale trochę nie bardzo umiem sobie to wyobrazić, jak napisać w tym system na 40000 linii...

0

To ja zgodnie ze zwyczajem namieszam...

Lisp nie jest czysto funkcyjny, większość dialektów jest też obiektowa, vide CLOS+MOP w Common Lispie.

Poza tym o Scali wielu słyszało, pure OOP ze sporym naciskiem na funkcyjność.

Co do Haskella - powstało sporo dużych projektów, są co najmniej dwa systemy operacyjne, jeden FPS, raytracery i inne spore zabawki, starczy wiki Haskella przejrzeć.

Co wybrać? To jak z preferencjami seksualnymi. Poza tym o gustach się nie dyskutuje... a ludzie przykuci do imperatywności nie wiedzą co tracą.

0

obiektowe.

0

ostatnio byl podobny watek na goldenline, "programowanie nie-obiektowe"
wiec nie chce mi sie wymyslac od nowa to kopiuje:

czy nalezy bezwzglednie opanowac OOP?:

tak, no chyba ze chcesz sie zatrzymac na poziomie projektow do hmm kilku tys lini max.

dlaczego:?

  • przenosi rozwazanie o problemie na nowy wyzszy poziom abstrakcji uniezalezniony od platformy, ktory lepiej odwzorowuje rzeczywistosc, w przeciwienstwie do myslenia o programie jak o algorytmie z wejsciem i wyjsciem
  • logika jest podzielona na mniejsze elementy (obiekty), ktore moga wchodzic w interakcjie miedzy soba, zamiast masy funkcji i jeszcze wiekszej ilosci zmiennych/struktor
  • enkapsulacja danych
  • ponownie wykorzystanie kodu (trzeba naprawde dobrze pisac w jezyku proceduralnym aby kod sie pozniej nadawal do czegokolwiek)
  • latwiejszy refactoring kodu (logika zamknieta w obiekcie, jezeli zmieniam kod moge skupic sie na testowanie jednego kawalka projektu)
  • obiekt jest sam w sobie namespace'm przez co upraszcza sie styl kodowania i struktura kodu

no i jezeli jest to juz grupa php, to programowanie proceduralne w php jest wybitnie sieczkogenne :S

inna kwestia, ze kazdy program obiektowy mozna byc zamienic na strukturalny

z innych podejsc do programowania, imho zajebiste jest programowanie generyczne (meta programowanie), ale to wlasciwie rozszerzenie oop

//edit: niestety, oop to slogan, nie wszedzie OOP = OOP, niektorym wydaje sie ze samo stosowanie slowka kluczowego class to juz ŁoŁoPe :)

my tu sobie gadu gadu, a prawda jest taka ze soft trzeba napisac raz, dobrze i szybko :)

nie wazne w czym, jaki paradygmat itp bzdety, czy wykonanie metody dupa() zajmie 5 czy 50 cykli,
dla pani Krystyny z ksiegowosci bedzie wazne czy program robi to co ona oczekuje a nie czy zrobi to w 0.001s czy w 0.1s :P

a dla prezesa bedzie wazne ze programisci dopisza nowa funkcjonalnosc tydzien a nie w miesiac, i tu bym sie dopatrywal sukcesu łołope ;)

0

Spoko, spoko - obiektowe + domieszka funkcyjności (jak Scala) mnie nie bulwersują.
Ale jak można z wyboru programować wszystko w takim czymś jak LISP (nawet z CLOS)?

0

Z przyjemnością? Przecież w Lispie masz efekty uboczne, można nawet pisać całkowicie imperatywnie (zresztą po coś powstało makro loop i trochę innych dzieł szatana).

0

W FPSa haskellowego nawet grałem. Strasznie mulił (a grafika nie powalała delikatnie mowiąc ;p) więc raczej niezbyt dobry język do gier.
IMHO programowanie obiektowe jest trochę przekombinowane. Bardziej czytelne jest stworzyć sobie funkcję dostosowane do konkretnego obiektu z nazwą, która dobrze opisuje co ta funkcja robi niż tworzyć 10 mega ogólnych funkcji a potem magicznie złączyć je w całość.
Dla mnie programowanie funkcyjne to dobra rozrywka umysłowa ale wątpie, żeby kiedykolwiek przebiło się do mainstreamu. Miało już na to sporo czasu.

0

Daj spokój, ten FPS to jeden student pisał, oparte o klamoty z Quake'a 3, nie oczekuj od takiego projektu wybitnej wydajności. Gdzieś w papierach od tego FPS jest napisane jak wiele rzeczy można w tym zoptymalizować/zmienić, bo to tylko PoC wykorzystania reaktywnego programowania funkcyjnego do poważnych gier.

0

OOP niestety zauwazylem, ze to slogan uzywany na wyrost... Mozna rozumiec pojecie obiektu, mozna wyklikac metody tego obiektu np w designerze ale zauwazylem, ze wiele osob tylko do tego sie ogranicza i uwazaja sie za programistow obiektowych... bardziej ambitni zaczna rozszerzac istniejace obiekty uzywajac dziedziczenia (np kontrolki w .net'cie)... i to tyle.

Prawdziwy urok programowania obiektowego zaczyna wychodzic, gdy zacznie uzywac sie interface'ow i polimorfizmu. Dopiero tuta widac prawdziwa potege tego i latwosc z jaka przychodzi ROZSZERZANIE istniejacego oprogramowania.

0

W ogóle tyle wielkich fanów i obrońców programowania funkcyjnego zdawało się być na 4p a temat tak słabo się rozwinął ;p

0

A weź mi tych kilku fanów wymień, dla mnie narzędzie to narzędzie, chociaż to jest faktycznie seksowne.

0

Obiektowy/aspektowy z funkcyjnym. Obiektowy/aspektowy na poziomie organizacji kodu, funkcyjny na poziomie najniższego kodu. I wszystko jest piękne.

0

Odświeżam temat, bo przeczytałem ciekawy post na liście dyskusyjnej LISPa. Link: http://groups.google.com/group/comp.lang.lisp/msg/6f75cfb5a289d3f6?pli=1
Post napisany przez ciekawą postać, gościa który pisał soft odpowiedzialny za sterowanie rakietami, później pracował w Google.
Najciekawszy cytat:

So I can't really go into many specifics about what happened at Google
because of confidentiality, but the upshot was this: I saw, pretty much
for the first time in my life, people being as productive and more in
other languages as I was in Lisp. What's more, once I got knocked off my
high horse (they had to knock me more than once -- if anyone from Google
is reading this, I'm sorry) and actually bothered to really study some of
these other languges I found myself suddenly becoming more productive in
other languages than I was in Lisp. For example, my language of choice
for doing Web development now is Python.

0

Chyba za sterowanie łazikami, a nie rakietami.

Szkoda, że nie porównał produktywności obecnie używanych języków.

0

Ostatnie słowa:

I think that if Lisp does not evolve it will
die, and I don't want to see that happen. I still think Lisp is great. I
also think it can be, and should be, improved.

Niestety ale to prawda - Lisp jest starym językiem. Baardzo starym.
Powstał:

  • rok przed COBOLem.
  • 13 lat przed C.
  • 25 lat przed C++.
  • 35 lat przed Javą.
  • 40 lat przed C#.
    W sumie pół wieku temu...

(Mówię tu o czystym Lisp-ie, Common Lisp powstał później.)

Co z tego wynika? Na przykład to że Lisp nie ma w standardzie Unicode. Ascii też nie - po prostu kiedy powstawał nie było czegoś takiego jak ASCII :).
Jeszcze gorzej jest z siecią, istnieją nieoficjalne standardy API sieciowego ale zdarzają się konflikty między implementacjami.

Można tak wymieniać, ale po co. IMO gdyby ktoś się porządnie wziął za tworzenie nowego, nowoczesnego standardu, ustandaryzował najważniejsze kwestie, rozwiązał problemy kilku ficzerów których zdecydowanie brakuje (wsparcie dla wielowątkowości!) to Lisp znowu stanie się potęgą ;)

1

LISP to język dla zatwardziałych geeków, którzy innych krągłości poza nawiasami nie znają.

0

@msm - a co powiesz na Clojure? LISP z dostępem do biblioteki standardowej Javy, więc wszelkie problemy z brakiem kompatybilności z unicodem, wątkami, soketami nie występują.

0

Dzięki za przypomnienie!
Kiedyś na niego wpadłem i mnie zainteresował, ale specjalnie go odłożyłem żeby móc się mu przyjrzeć dokładniej (żadna sztuka nauczyć się 20 języków i w każdym umieć napisać tylko hello world). Zastanawia mnie na ile w nim pozostało genialności Lisp-a a na ile to "java z nawiasami" - nawiasy, mimo że eleganckie w rodzinie Lisp, nie są rzeczą no.1 jakiej pożądam w języku programowania ;)
Poważnie, ciekawe co to za typ ten Clojure.

@marcio - nie wiem o co ci chodzi, ale np. takie coś zadziała (stworzenie okna, przykład z wiki) -

(javax.swing.JOptionPane/showMessageDialog nil "Hello World" )

btw. Clojure mnie na tyle zainteresowało że postanowiłem o nim poszukać - trafiłem tutaj - http://thecleancoder.blogspot.com/2010/08/why-clojure.html
Najciekawszy fragment:

During my first few decades as a professional programmer, I never learned Lisp. I had heard of it, of course; though mostly in derisive terms. People sneered about it with names like "Lots of InSignificant Parentheses". So my view was not particularly favorable.
(...)
I started reading it [SICP, książka o Lispie - MSM] about two years ago; and it changed everything I had previously felt and believed about Lisp. It also changed a great deal of what I felt and believed about programming in general. In short, the book was startling.

Dowód na niezwykłą siłę tego języka - wciąż potrafi przekonać kolejne osoby.

Polecam zapoznać się z artykułem, przynajmniej z pierwszym akapitem - wbrew pozorom nie jest to typowe, ględzenie Lisp-Jest-Najlepszy fanboya. Drugi akapit mówi o programowaniu funkcyjnym w ogólności, trzeci już o Clojure a te tematy niekoniecznie muszą kogoś interesować. Za to w pierwszym... a zresztą sami przeczytajcie ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1