Skocz do zawartości

Programowanie obiektowe vs strukturalne.


Tomahawk

Rekomendowane odpowiedzi

Od kilku lat chyba nieźle sprawdza się hybryda "struktury" i obiektów używana na potrzeby PHP.

Nie wyobrażam sobie aplikacji napisanej w całości obiektowo w php.

dokładnie o tym piszę - używanie klas choć niezwykle wygodnie to jeszcze nie pisanie obiektowych aplikacji :).

Więc to co kilku uważa za "obiektowe" to ta wspomniana przeze mnie hybryda :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 34
  • Dodano
  • Ostatniej odpowiedzi

Przyznam, że w PHP nie mam takiego doświadczenia jak np. w C i C++ ale prawdziwa potęga obiektowości polega obok łatwości w modyfikowaniu (modyfikujesz funkcje obiektu lub wymieniasz cały obiekt), przejrzystości itp, na uniwersalności obiektów i powielarności obiektów. Przez powielarność rozumiem wykorzystanie jednego obiektu (własnego lub komercyjnego) w wielu projektach. Oczywiście aby klasa była uniwersalna musi być dobrze zaprojektowana.

Co do wydajności rzadko się zdarza żeby pisząc strukturalnie od zera skomplikowane oprogramowanie napisać je wydajniej niż wykorzystując dobrze napisaną i przetestowaną klasę. Jak pisałem, nie mam dużego doświadczenia w PHP, bo niewiele komercyjnych klas wykorzystałem ale w C++ biblioteki klas i pisanie obiektowe to potęga.

Odnośnik do komentarza
Udostępnij na innych stronach

znaczy się funkcji nie ma w programowaniu strukturalnym ??? czy co ??

W pliku php tez można umieścić kod php, HTML, javascript, style, można nawet osadzić grafikę co niekoniecznie oznacza, że to dobre rozwiązanie i należy tak robić.

Co do forum to na pewno klasa obsługująca użytkowników (logowanie, rejestracja, potwierdzenie adresu, automatyczne pobieranie danych zalogowanego usera), dodatkowo jakaś dobra klasa do data sanitization i cache.

Odnośnik do komentarza
Udostępnij na innych stronach

znaczy się funkcji nie ma w programowaniu strukturalnym ??? czy co ??

W pliku php tez można umieścić kod php, HTML, javascript, style, można nawet osadzić grafikę co niekoniecznie oznacza, że to dobre rozwiązanie i należy tak robić.

funckje to PODSTAWA programowania - co za idiota powatrza kod 5 razy ? Nie trzeba programowania obiektowego, żeby 3 linijkami zliczyć czas dodawania do baz danych - wystarczy pisać PORZĄDNIE.

Odnośnik do komentarza
Udostępnij na innych stronach

funckje to PODSTAWA programowania - co za idiota powatrza kod 5 razy ? Nie trzeba programowania obiektowego, żeby 3 linijkami zliczyć czas dodawania do baz danych - wystarczy pisać PORZĄDNIE.

Duża cześc osób podchodzi do pisania według zasady:

Huraaaaaaaaaaaaaa .....! I od razu pisze bez jakiegokolwiek zastanowienia.

A tu trzeba trochę poleżeć na jednym boku, na drugim, troche porysować , zrobić jakis nawet mini projekt i dopiero siadać do pisania.

Strona od strony przegladarki wygląda piknie od strony kodu wyglada jak jedna wielka przeróbka.

Odnośnik do komentarza
Udostępnij na innych stronach

funckje to PODSTAWA programowania - co za idiota powatrza kod 5 razy ? Nie trzeba programowania obiektowego, żeby 3 linijkami zliczyć czas dodawania do baz danych - wystarczy pisać PORZĄDNIE.
Mrtn nie wiem, jak ci to tłumaczyć skoro chyba nigdy nie miałeś do czynienia z pisaniem czegoś w php. Czasami jednak jest tak, że pisze się coś a potem dodaje jakąś funkcjonalność i klasy są tutaj wygodniejsze. Także dlatego, że funkcje / zmienne masz pogrupowane i nie musisz szukać w pliku z 20000 linijkami co jest do czego i dbać o to by to wszystko się nie gryzło. Musisz wierzyć na słowo :( Jeśli próbujesz stworzyć wrażenie że "programowanie strukturalne jest lepsze niż objektowe" - to niestety - 95% programistów myśli inaczej.
Obektowość jest naturalnym rozwojem programowania.

A dalej hybrydowe języki imperatywno/objektowo/funkcyjne. Wielkość kodu można zmniejszyć nawet do kilku %, niestety wydajność jest koszmarna i bardzo trudno w tym pisać (np. F#, Python)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli próbujesz stworzyć wrażenie że "programowanie strukturalne jest lepsze niż objektowe" - to niestety - 95% programistów myśli inaczej.

jak ja lubię jak ktoś wciska mi w usta słowa których nigdy nie napisałem. Znowu przepychanki z jakimiś ludźmi którym nie chce się czytać tego co napisałem - nigdy takiego wrażenia nie próbowałem nawet stworzyć, ale nie ja wypisywałem głupoty typu:

https://www.forum.optymalizacja.com/index.php?s...st&p=333606

w których przyrównujesz programowanie strukturalne do pisania ... chyba liniowego. Od wielu lat każdy szanujący się programista odpytuje bazy danych przez własne funkcje a to czy są zamknięte w klasach czy nie - nie ma znaczenia i nic wspólnego z poprawianiem całości. Tak jak pisałem klasy są wygodną formą organizacji. Ale równocześnie żaden rozsądny programista nie twierdził, że środowisko PHP jest środowiskiem obiektowym. w PHP mamy raczej elementy programowania obiektowego.

Tym się różnię od niektórych, że pomimo tego iż ZALECAM programistom pisanie w klasach, zdaję sobie sprawę z niedoskonałości PHP, z tego czym naprawdę jest programowanie obiektowe i tego, że klasy i obiekty nie uratują sytuacji, kiedy ktoś pisze po prostu źle.

Odnośnik do komentarza
Udostępnij na innych stronach

Nigdzie nikomu "nic nie wciskam", napisałem że próbujesz stworzyć wrażenie... no i dalej upierasz się, że programowanie objektowe nie ma zastosowania przy implementacji elementów dla których się je stosuje. Sam żadnego zastosowania nie podałeś, tylko ciągle piszesz "to samo zrobię na funkcjach". Ja mogę to samo zrobić w assemblerze albo w kodzie zerojedynkowym, albo kod zamiast w ASCII pisać w HEX edytorze i też się da. To samo co w programowaniu strukturalnym można zrobić na etykietach, IF i GOTO... co z tego?

Poczytaj trochę o programowaniu objektowym. Np. zliczanie czasu wykonywania mysql kiedy robisz to na funkcjach wymaga użycia zmiennych globalnych co jest uważane za złą praktykę programistyczną. Dla mnie jednak ma trochę znaczenie czy zmienne trzymam odseparowane w klasie, czy używam funkcji które śmiecą w "globalu" co przy większym projekcie skutkuje tym, że trzeba wymyślać coraz dziwniejsze nazwy zmiennych, żeby przypadkiem nie napisać czegoś użytego wcześniej... a w razie poprawki może być i tak że po zmienie linijki 58 w pliku a wysypie się kod w 1524 linijce w pliku b bo akurat ktoś sobie wpadł na pomysł żeby użyć tej samej globalnej zmiennej co ty. Ty piszesz, że to

nie ma znaczenia i nic wspólnego z poprawianiem całości
Wypada tylko życzyć powodzenia przy pisaniu kodu w "zespole" większym niż jednoosobowy.
iż ZALECAM programistom pisanie w klasach, zdaję sobie sprawę z niedoskonałości PHP, z tego czym naprawdę jest programowanie obiektowe i tego, że klasy i obiekty nie uratują sytuacji, kiedy ktoś pisze po prostu źle.
Dlatego piszesz, że używanie swoich funkcji albo klasy do obsługi mysql to jedno i to samo? Może zamiast krytykować mój przykład podałbyś lepszy bo na razie jedyne co robisz to "ZALECASZ programistom pisanie w klasach, bo... wszystko idzie zrobić na funkcjach" :)
Ale równocześnie żaden rozsądny programista nie twierdził, że środowisko PHP jest środowiskiem obiektowym
A czy ktoś tak twierdzi i co ma piernik do wiatraka?
że klasy i obiekty nie uratują sytuacji, kiedy ktoś pisze po prostu źle

Nic nie uratuje i co to ma do rzeczy? Jak ktoś pisze źle to nie bez znaczenia czy będzie to robił na klasach czy na funkcjach - i w ostateczności zrobi to jeszcze gorzej. Bo jak napisze źle klasę to się ją po prostu wymieni a jak napisze źle parę funkcji może się skończyć na wielotygodniowych poprawkach i szukaniu jego skopanego kodu w 162 plikach albo pisaniu projektu od nowa.

Odnośnik do komentarza
Udostępnij na innych stronach

no i dalej upierasz się, że programowanie objektowe nie ma zastosowania przy implementacji elementów dla których się je stosuje.

No jednak z niepołnosprytnym rozmawiam - pokaż mi cyctat który to potwierdzi ! Nawet wyrażnie piszę, że jestem za obiektowym, ale argument który podałeś na korzyść programowania obiektowego nie dotyczy tylko programowania obietkowego - więc nie jest argumentem tylko bzdurą - oczwyiście, że używanie zmiennych globlanych to zmora ale ty chłopie podałeś przykład że jak się nie zastosuje klas to 50 poprawek w kodzie - BZDURA.

Poczytaj trochę o programowaniu objektowym.
Ale po co czy gdzies wykazałem się ignorancją na ten temat, że zalecasz mi lektury ?
Ale równocześnie żaden rozsądny programista nie twierdził, że środowisko PHP jest środowiskiem obiektowym
A czy ktoś tak twierdzi i co ma piernik do wiatraka?
- przjrzałem Twoje posty - przynaję nie odnosisz się do PHP tylko ogólnie do programowania - jednak pisząc w dziale PHP i MySQL mogłem przyjąć takie założenie.
Nic nie uratuje i co to ma do rzeczy?
A to, że agrumenty które podajesz na rzecz klas nie dotyczą tylko klas ale tego jak sam wspominasz dobrej praktyki programistycznej.
Bo jak napisze źle klasę to się ją po prostu wymieni a jak napisze źle parę funkcji może się skończyć na wielotygodniowych poprawkach i szukaniu jego skopanego kodu w 162 plikach albo pisaniu projektu od nowa.
I to pisze osba, która odsyła mnie do książek - bez komentarza.

Warto ludzi przekonywać do programowania obiektowego, ale trzeba umieć przekazać swoje myśli. Wiem, że trudno jest ubrać w "ludzkie" słowa pojęcia takie jak: enkapsulacja czy dziedziczenie, ale posługiwanie się w zamian tego argumentami nie dotyczącymi tak nparwade problemu tylko utrudnia ludziom poznanie zalet programowania obiektowego a nie ułatwia.

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra skoro już prowadzicie taką debatę to zrobię wam mały "przerywnik".

Tworzę klasę do bazy danych.

Jak wam się wydaje, jak będzie lepiej?

$rows=$db->rows($sql);

czy

$result=$db->query($sql);

$rows=$db->rows($result);

Chyba wiadomo o co chodzi?

W tym pierwszym przypadku mam w klasie

function query($sql){....}

function rows($sql){return mysql_fetch_array($this->query($sql));}

A w drugim przypadku normalnie czyli "odzielnie".

Odnośnik do komentarza
Udostępnij na innych stronach

Jak wam się wydaje, jak będzie lepiej?
>> $rows=$db->rows($sql);

Kolejną dobrą praktyką programistyczną dla klas jest to, że działanie (sposób działania, nie wynik) metod nie może zależeć od kolejności wykonywania.

pokaż mi cyctat który to potwierdzi !

=>>

nie ja wypisywałem głupoty typu:

https://www.forum.optymalizacja.com/index.php?s...st&p=333606

w których przyrównujesz programowanie strukturalne do pisania ... chyba liniowego

Od wielu lat każdy szanujący się programista odpytuje bazy danych przez własne funkcje a to czy są zamknięte w klasach czy nie - nie ma znaczenia i nic wspólnego z poprawianiem całości

Właśnie ja twierdzę, że ma znaczenie i DUŻO wspólnego z poprawianiem całości. Jak do takich "świetnych funkcji" dorobisz np. cache to będzie burdel w kodzie że aż miło. Jak będziesz np. chciał coś dopisać żeby trzymać w skrypcie połączenia do dwóch baz to na funkcjach prosto i poprawnie tego nie zrobisz. Na klasie sobie stworzysz nowy objekt i tyle.

A to, że agrumenty które podajesz na rzecz klas nie dotyczą tylko klas ale tego jak sam wspominasz dobrej praktyki programistycznej.
Stosowanie klas wymusza dobrą praktykę programistyczną (w pewnym zakresie). Na przykład enkapsulacja. Stosując klasy nie da się jej uniknąć. Dziedziczenie, polimorfizm i inne elementy są powodem dla których się pisze w klasach. To że można napisać klasę niepoprawnie, bez nich - nie znaczy że to czy kod jest na klasach, czy na funkcjach nie ma znaczenia. Skrypt pisany z użyciem klas ma zupełnie inną strukturę od skryptu napisanego w podejściu proceduralnym.
co za idiota powatrza kod 5 razy ?

Widziałem sporo kodu i powiem, że w większości wypadków "idiota piszący na funkcjach".

Bo jak napisze źle klasę to się ją po prostu wymieni a jak napisze źle parę funkcji może się skończyć na wielotygodniowych poprawkach i szukaniu jego skopanego kodu w 162 plikach albo pisaniu projektu od nowa.I to pisze osba, która odsyła mnie do książek - bez komentarza.

Nie wiem co w tym dziwnego. Kiedy piszesz program na klasach łatwiej przydzielić zadania i określić dostęp. Np. niedoświadczony programista ma zmienić w pewien sposób mechanizm logowania (np. ograniczenia co do liczby IP dziennie). Jak to jest na klasach to sobie odnajdzie w klasie metodę logowania i dopisze kod. Jak to jest na funkcjach i już dość pięknie zaśmieconym globalu to funkcjonalność będzie pewnie rozrzucona po kilku plikach (tu logowanie, tam lista ostatnio zalogowanych, jeszcze gdzie indziej czyszczenie tego), na koniec nadpisze jakąś zmienną globalną którą ktoś już zadeklarował a po tygodniu ktoś zauważy, że logowanie niby działa ale przez poprawki w logowaniu się wysypała np. galeria.

ale posługiwanie się w zamian tego argumentami nie dotyczącymi tak nparwade problemu tylko utrudnia ludziom poznanie zalet programowania obiektowego a nie ułatwia.

Ale programowania objektowego nie da się poznać na forum. Trzeba kupić sobie książkę np. do c++ albo innego języka który jest bardziej objektowy niż php (bo w wersji 4 nie wiem, czy w ogóle objektowością to można nazwać nawet w wersji 5 OOP bardzo kuleje).

Odnośnik do komentarza
Udostępnij na innych stronach

Pierwszy przykład, im mniej kodu do wklepania tym wygodniej :)

Tak ale w przypadku gdy będę chciał użyć mysql_numr_rows i mysql_fetch array to będe musiał wykonać 2 zapytania:

$db->num_rows($sql)

i

$db->rows($sql)

a w drugim przypadku tylko jedno bo id wyniku będe miał w zmiennej.

Generalnie jeśli chodzi o Mysql to taka potrzeba raczej nigdy nie zachodzi ale wolę żeby moja klasa była odpowiednia do większości popularnych baz danych.

Stąd też moje pytanie.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności