Jakub L.

Jakub L. Programista

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Jakub L.:
Przepaść pomiędzy programowanie proceduralnym a obiektowym w PHP jest głeboka dlatego że nie ma w PHP odpowiednika struct z C (rekordu z Paszczala), więc nie ma enkapsulacji danych tak o i wszystko wala się gdzie popadnie. Samą enkapsulację można emulować przez tablice asocjacyjne, tylko wtedy kontrola typów idzie się...
ale co ma enkapsulacja do tablicy asocjacyjnej? tablice asocjacyjna mozesz uzywac jak struktury, ale danych w srodku nie ukryjesz, typow nie ma bo php jest jezykiem dynamicznie typowanym ale to tez sie ma nijak do enkapsulacji

To jest jedyny sposób zrobienia pseudobiektowości bez użycia class - traktujesz tablicę asocjacyjną jako rekord z polami, i takie coś możesz przekazywaćdo procedury, symulując wywołanie metody - zamiast this->metoda(args) idzie metoda(this, args) gdzie this jest tablicą asocjacyjną.
- program dalej jest algorytmem z wejściem i wyjściem, niezależnie czy jest strukturalny, obiektowy czy funkcyjny
zgadza sie, ale chodzilo mi o myslenie w kategori problemu umiejscowionego w jakims tam wirtualnym swiecie w przeciwienstwie do myslenia o programie jako narzedziu ktore wykona pare konkretnych instrukcji atomowych na zbiorze A i wypluje zbior B

Za dożo kombinowania :)
Pozbierać i uporządkować dane, przetworzyć, wypluć.
Obiekty grają rolę w uporządkować.
OOP trochę utrudnia strzelenie sobie w stopę.
ale umozliwia odstrzelenie calej nogi :)
W PHP to chyba wsadzenie nogi do miksera.
Jakub L.

Jakub L. Programista

Temat: Programowanie NIE-obiektowe

Jarosław K.:

Przepaść pomiędzy programowanie proceduralnym a obiektowym w PHP jest głeboka dlatego że nie ma w PHP odpowiednika struct z C (rekordu z Paszczala),

Odpowiednikiem struct w PHP jest class

No nie do końca. W C o ile dobrze pamiętam struct nie może mieć metod, dopiero w C++ może mieć metody i domyślna widoczność pól jest publiczna, czyli podobnie jak w PHP.
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Programowanie NIE-obiektowe

Jakub L.:
No nie do końca. W C o ile dobrze pamiętam struct nie może mieć metod, dopiero w C++ może mieć metody i domyślna widoczność pól jest publiczna, czyli podobnie jak w PHP.
mozesz trzymac wskazniki do funkcji w strukturze, ktore pozniej da sie wywolac jak typowy call metody obiektu czyli: instancja->metoda()
Jakub L.

Jakub L. Programista

Temat: Programowanie NIE-obiektowe

Jarosław K.:
Łukasz Cepowski:

Ale PHP w przypadku dużych portali jest znacznie lepsze od JAVY ( z resztą nie tylko dużych )

Przykład: Yahoo, Facebook.
Niestety w Javie nie ma nić równie dużego dla porównania :( :P

Ebaj? http://answers.yahoo.com/question/index?qid=2008051303...

konto usunięte

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Jarosław K.:
PHP jest szybsze.
Na każdy cykl kodu JAVY przypada jakiś odsetek cykli VM.
Czyli ten sam procesor musi robić troszkę więcej niż sam KOD binarny w PHP wykonywany na procesorze.
a ZendEngine slyszal :D? to jest interpreter opcodu, tak tak wiekszy syf od JVM :D

Cały czas mówisz nie na temat. Nie porównujemy ZendEngine i JVM.
Porównywałem JVM i Kod PHP skompilowany do OPTCODU wykonywany na procesorze.
Czysty kod PHP - bez obiektów :P

Zapomnij na chwile o marketingowych sloganach SUNa i pomyśl logicznie.
Jeżeli mamy JVM która realizuje BYTECODE JAVY to ta JVM konsumuje cykle procesora i zgodnie z ZZE nie może to działać szybciej niż BYTECODE maszynowy wykonywany na procesorze.
Jestem przekonany, że PHP będzie zawsze szybsze poza specyficznymi przypadkami.
kiedy ludzie twierdzili ze ziemia jest plaska ;)

Twierdzili tak gdy nie rozumieli jeszcze ZZE.
Poza tym - nie zbyt trafna analogia.
Błąd testu :)
potestuj sam ;)

Podeśle przy okazji linka do testów ;)
Z jakiegoś powodu największe portalue (największa ilość requestów na świecie) korzystają z PHP a nie Javy. Przypominam tez, że nie porównujemy jee i ZF tylko PHP i Jave.
no nie wiem czy o tym nie zadecydowal zwyczajnie czynnik ekonomiczny, bo wydajnosciowo php to bida panie oj bida ;)

Ekonomia w tym przypadku to temat na osobny wątek :)
WŁAŚNIE!
Obawiałem się, że tak to się skończy
narzekasz :D?

Liczyłem bardziej na inną dyskusję.

konto usunięte

Temat: Programowanie NIE-obiektowe

Jakub L.:
Jarosław K.:

Przepaść pomiędzy programowanie proceduralnym a obiektowym w PHP jest głeboka dlatego że nie ma w PHP odpowiednika struct z C (rekordu z Paszczala),

Odpowiednikiem struct w PHP jest class

No nie do końca. W C o ile dobrze pamiętam struct nie może mieć metod, dopiero w C++ może mieć metody i domyślna widoczność pól jest publiczna, czyli podobnie jak w PHP.

Znów odbiegamy od tematu.
Może mięc metody w postaci wskaźników do funkcji.
Poza tym miałem bardziej na myśli inną odpowiedniość ( class daje możliwości struktury, nie odwrotnie)
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Programowanie NIE-obiektowe

Jarosław K.:
Cały czas mówisz nie na temat. Nie porównujemy ZendEngine i JVM.
Porównywałem JVM i Kod PHP skompilowany do OPTCODU wykonywany na procesorze.
Czysty kod PHP - bez obiektów :P
a gdzies Ty widzial php kompilowane do natywnego kodu bez zadnego narzutu :D
i co maja obiekty do kodu natywnego :D!?
Zapomnij na chwile o marketingowych sloganach SUNa i pomyśl logicznie.
Jeżeli mamy JVM która realizuje BYTECODE JAVY to ta JVM konsumuje cykle procesora i zgodnie z ZZE nie może to działać szybciej niż BYTECODE maszynowy wykonywany na procesorze.
http://en.wikipedia.org/wiki/Just-in-time_compilation
Jakub L.

Jakub L. Programista

Temat: Programowanie NIE-obiektowe

Jarosław K.:
Łukasz Cepowski:
Jarosław K.:
natomiast profilowana java moze dzialac porownywalnie z programem w C/C++,

Chwyt marketingowy :)

Obawiam się, że jednak nie.
co do zasobow... hmm serwis dla milionow uzytkownikow hostowany jest raczej na naprawde poteznym sprzecie, gdzie zasoby jak ram proc hdd to raczej kwestie drugoplanowe.

Wszystko zależy od skali. Zasoby mają moim zdaniem znaczenie 1 planowe.

E tam. Komputra się kupuje, potem amortysuje i idzie on w koszty.
Programiście się płaci cały czas jego zatrudnienia.
pozatym niezaprzeczalnie: w domyslnej wersji proces z php ginie zaraz po zakonczeniu wykonywania i dzieje sie to przy kazdym requescie (sic!), wiec domyslnie mamy za kazdym razem: wczytanie plikow, parsowanie plikow, generowanie opcodu, uruchamianie opcodu, wyplucie wyniku.

Zdaje się mówiłeś o jakiejś "niestandardowej Javie"

To taka java która sobie długo biega i maszyna wirtualna sobie ją sprofilowała - statystycznie najczęstsze ścieżki wykonania zostały wyprostowane, mniej nietrafionego cacheowania i takie tam.
Ja nie mówie o procesie interpretacji.
Mówie o szybkości OPTCODU wynikowego (analogia do skompilowanej JAVY) i zajętości pamięci.

A czas każdorazowego ładowania skryptu z dysku jest pomijalny?
Dodaj do tego polaczenie z baza danych itp.

Są bardzo szybkie :)

Może dla pojedynczego człowieka.
Optymalizacja: bufor dysku (szybsze wczytanie plikow), jezeli app dziala na apachu to mod_mem_cache (trzyma statyczne pliki w pamieci), i przyspieszacze jak chociazby apc, ale nawet z nimi jak mowa o aplikacji np: w Zendzie nie zblizysz sie do poziomu aplikacji w javie

Ale Ty piszesz o całym systemie a ja mówie narazie o samym kodzie.

Zakładając idealnie kulisty kod poruszający się w pamięci ruchem jednostajnym z prędkością c.
Na produkcji PHP to żaden cud niewid.
php nie ma kompilatora, error reporting ssie, profilowanie to masakra :)

Kompilator jest, akcelerator jest i 1000 innych metod aby nie parsować kodu poraz wtóry.

A Java ma to od razu, a nie po gimnastyce.
Tylko że do przetwarzania tekstu to się IMHO nadaje tak sobie.

konto usunięte

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Jarosław K.:
Cały czas mówisz nie na temat. Nie porównujemy ZendEngine i JVM.
Porównywałem JVM i Kod PHP skompilowany do OPTCODU wykonywany na procesorze.
Czysty kod PHP - bez obiektów :P
a gdzies Ty widzial php kompilowane do natywnego kodu bez zadnego narzutu :D

Zapewniam Cie, że doprowadzenie kodu JAVA do kodu wykonywalnego w każdym przypadku trwa dłuzej.

Poza tym każdy skrypt PHP jest wykonywany w postaci wynikowej (BINARNEJ)
i co maja obiekty do kodu natywnego :D!?

Tak sobie przekornie dopisałem :P
http://en.wikipedia.org/wiki/Just-in-time_compilation

Wcale mnie to nie przekonuje.

http://pl.wikipedia.org/wiki/EAccelerator :D
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Programowanie NIE-obiektowe

Jarosław K.:
Poza tym każdy skrypt PHP jest wykonywany w postaci wynikowej (BINARNEJ)
oficjalnie poległem :D
Wcale mnie to nie przekonuje.

http://pl.wikipedia.org/wiki/EAccelerator :D
wez to przeczytaj od poczatku do konca ze zrozumieniem :)

konto usunięte

Temat: Programowanie NIE-obiektowe

Jakub L.:

E tam. Komputra się kupuje, potem amortysuje i idzie on w koszty.
Programiście się płaci cały czas jego zatrudnienia.

Pominołeś koszty energii pobieranej przez ten komputer (które są istotne w dużej skali)

A czas każdorazowego ładowania skryptu z dysku jest pomijalny?

Pomijamy, w rozwiązaniu produkcyjnym kod binarny skryptu jest w pamięci.

Może dla pojedynczego człowieka.

Dla milionów ;)

Zakładając idealnie kulisty kod poruszający się w pamięci ruchem jednostajnym z prędkością c.

Nic co ma mase nie może się poruszac z prędkościa c :P

A Java ma to od razu, a nie po gimnastyce.
Tylko że do przetwarzania tekstu to się IMHO nadaje tak sobie.

Tez mi gimnastyka ;)

konto usunięte

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Jarosław K.:
Poza tym każdy skrypt PHP jest wykonywany w postaci wynikowej (BINARNEJ)
oficjalnie poległem :D
Wcale mnie to nie przekonuje.

http://pl.wikipedia.org/wiki/EAccelerator :D
wez to przeczytaj od poczatku do konca ze zrozumieniem :)

O jej, cały czas z Twojej strony ironia.
Wiem o co chodzi. Java jest kompilowana i nie ma JVM. Tylko pytanie z jakim skutkiem...
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Programowanie NIE-obiektowe

Jarosław K.:
Wiem o co chodzi. Java jest kompilowana i nie ma JVM. Tylko pytanie z jakim skutkiem...
no z takim ze jest "ciutke" szybsza i wydajniejsza :>?
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Jarosław K.:
Wiem o co chodzi. Java jest kompilowana i nie ma JVM. Tylko pytanie z jakim skutkiem...
no z takim ze jest "ciutke" szybsza i wydajniejsza :>?


moze tak:

twoj opkod php to NIE kod wykonywalny (natywny), nie wazne czy uzywasz eacceleratora
czy apc, czy xcache, etc wazne ze ten zcachowany opcode bedzie wykonany na vm ktorym jest Zend Engine, i tu wlasnie php wymieka :)Łukasz Cepowski edytował(a) ten post dnia 16.10.09 o godzinie 00:28

Temat: Programowanie NIE-obiektowe

Może wrócimy na wyższy poziom - bo zaraz zejdziemy na Smalltalka operującego bezpośrednio na procesorze :D

Szybka aplikacja to doskonałe pole do popisu dla OOP (i Agile).

1. Błyskawiczny szkielet demonstrujący działanie = korekty na poziomie planowania:
a) Klasy z zaślepkami markującymi wyniki - pokazują działanie ale jeszcze nic nie liczą. Weź tego potem szukaj w strukturalnym kodzie.

b) Możliwość pracy nad szkieletem niezależnie od prac nad klasami specjalistycznymi.

2. Wdrażanie wzorca w ciemno
a) MVC z template'ami nadaje się do 80% typowych aplikacji użytkowych (nie tylko webowych)
b) Observery jako logi
c) Singleton na połączenie z DB

3. Wykorzystanie bibliotek
a) obsługa XML
b) gotowe warstwy abstrakcji dla baz danych
c) grafika, matematyka, system plików

4. Teamwork

Oczywiście wszystko możesz próbować robić strukturalnie, ale zajmie to o wiele więcej czasu, zwiększy ryzyko przeoczenia błędów i utrudni migrację zarówno na inny język programowania jak i migracje programistów.

konto usunięte

Temat: Programowanie NIE-obiektowe

Łukasz Rylik:
>
Oczywiście wszystko możesz próbować robić strukturalnie, ale zajmie to o wiele więcej czasu, zwiększy ryzyko przeoczenia błędów i utrudni migrację zarówno na inny język programowania jak i migracje programistów.

To jest argument.
Czasem tylko są inne cele, np. gdy piszemy sterownik lub system operacyjny.
Błędów jest czasem w takich systemach znacznie mniej (zob. KDE vs GNOME)

konto usunięte

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Jarosław K.:
Poza tym każdy skrypt PHP jest wykonywany w postaci wynikowej (BINARNEJ)
oficjalnie poległem :D

Wydaje mi się, że nie chodzi o to aby ktoś wygrał i ktoś poległ tylko o to aby dyskusja prowadziła do jakiś wniosków.

konto usunięte

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Łukasz Cepowski:
Jarosław K.:
Wiem o co chodzi. Java jest kompilowana i nie ma JVM. Tylko pytanie z jakim skutkiem...
no z takim ze jest "ciutke" szybsza i wydajniejsza :>?


moze tak:

twoj opkod php to NIE kod wykonywalny (natywny), nie wazne czy uzywasz eacceleratora
czy apc, czy xcache, etc wazne ze ten zcachowany opcode bedzie wykonany na vm ktorym jest Zend Engine,

A co jak używam bcompilera ?
i tu wlasnie php wymieka :)Łukasz Cepowski edytował(a) ten post dnia 16.10.09 o godzinie 00:28

Możesz podać jakieś dane statystyczne lub inne argumenty ?;)
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Programowanie NIE-obiektowe

Michał Wujas:
Zachwyconym OOP polecam jakieś środowisko graficzne w Javie np Swing i zrobienie w tym jakiegoś dziwnego elementu gui, dystans do oop gwarantowany ;-)


Ee... tutaj się z Tobą nie zgodzę ;) Co prawda pisałem bardzo mało w swingu, skupiam się na webowych rozwiązaniach. Ale i tak pisało mi się dosyć przyjemnie - java wymusza na programiście pewne standardy, nie pisze się tak syfnego kodu jak w php.

konto usunięte

Temat: Programowanie NIE-obiektowe

Łukasz Cepowski:
Tylko pytanie z jakim skutkiem...
no z takim ze jest "ciutke" szybsza i wydajniejsza :>?


moze tak:

Moze tak:

Jeżeli porównanmy kod wykonywany na JVM i ZendEngine (zwany VM, mimo że maszyną to on nie jest) to w 2 przypakdu będzie mniej zajętej pamięci i cykli procesora.

Jeżeli porównamy profilowany KOD i nieprofilowany kod to troche tak jak byśmy porównywali kompilacje bez włączonej optymalizacji jednego języka i z włączoną drugiego. Wydaje mi się, że powinno się porównywać w podobnej przestrzeni.

Oczywiście można dokonać bardzo różnych rozwiązań optymalizacyjnych, które przyspieszą dane rozwiązanie (zawsze najlepiej to zorbi człowiek, a nie program)

Wydaje mi się, że PHP jest ponadto konstrukcyjnie znacznie prostszy niz Java i to daje mu znaczną przewagę (w pewnych zastosowaniach)

Nie widziałem także aby komuś się udało tak zoptymalizować/zprofilować Eclipse aby nie zajął 512 MB Ramu i nie ładował się na relatywnie szybkim sprzęcie kilka, kilkanaście sekund. Widziałem natomiast programy napisane w C, które ładują się znacznie szybciej nie wspominająć o przepaści jeżeli chodzi o zajętość pamięci.

Proponuje jednak aby otworzyć kolejny wątek(o ile on ma sens) pt. "PHP vs Java"

Następna dyskusja:

Programowanie obiektowe czy...




Wyślij zaproszenie do