Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Programowanie proceduralne kontra OO w PHP

Kiedy jenda metoda jest bardziej właściwa od drugiej?

A teraz przyjrzyjmy się zaletom każdej z tych technik programistycznych.

Programowanie proceduralne/strukturalne

Fundamentalnym argumentem przemawiającym właśnie za tą techniką jest fakt, iż PHP jest językiem interpretowanym. To oznacza, że jak niewiele innych języków, nie jest kompilowany do postaci plików wykonywalnych, ale za każdym razem jest interpretowany i wykonywany "w locie". To język skryptowy, a kod tych skryptów jest trzymany jako zwykły tekst (z wyjątkiem narzędzi a lá the Zend Compiler).

osCommerce

Ten system aktualnie używa dość sporej liczby obiektów, ale większość pracy, którą wykonuje, odbywa się w sposób proceduralny. Osobiście zmodyfikowałem osCommerce, aby stał się bardziej użyteczny dla klientów. Czasami się zastanawiam, dlaczego coś w rodzaju tego, co zrobiłem, nie jest domyślnie dostępne w zestawie. Jednakże powinienem tutaj wspomnieć, że proces zmian nie był prosty. Spora część kodu, napisanego właśnie w strukturalny sposób, połączona z layoutem (nie używa się tutaj szablonów) i systemem obsługi wielu języków nie była łatwa do rozgryzienia.

Ale jak na razie działa, i to szybko i sprawnie, co widać na przykładzie mnóstwa stron e-commerce. osCommerce posiada również własne forum oraz framework umożliwiający pisanie modułów i dodatków. Dzięki temu możemy odnaleźć ich masę, a następnie dodać je do naszego projektu.

phpMyAdmin

phpMyAdmin używa tylko jednej klas: Mimer SQL Validator, która jest częścią phpMyAdmin, ale zbudowana na podstawie modułów PEAR: Mail_Mime, Net_DIME i SOAP. Decyzja, co do takiego rozwiązania problemu zapadła zapewne na podstawie przekonania: "to mi służy, więc tego użyję!". Cała reszta wygląda na kod proceduralny, znowu zbudowany z przeplatanek PHP i HTML.

PhpMyAdmin to narzędzie, którego codziennie używam. Co więcej, podczas prostych modyfikacji pojedynczej tabeli czasami udostępniam go jako narzędzia administracyjnego dla moich klientów (oczywiście, ograniczam ich prawa). phpMyAdmin pracuje niesamowicie sprawnie, i w porównaniu do tego, co robi, jest niezwykle szybki. Często rozważałem zamianę phpMyAdmin w aplikację służącą do obsługi bazy danych moich klientów, wyposażając go w np. bookmarked queries [zakładki zapytań], aby dać im łatwy w obsłudze edytor. Kod wtedy z założenia musi być łatwy w modyfikacji i utrzymaniu. Dzięki temu tworzę z każdym wydaniem niesamowicie użyteczne narzędzie.

Programowanie proceduralne - podsumowanie
Sprawa obiektów

Argumentacja zwolenników tego typu programowania dotyczy głównie tego, iż kod wynikowy jest elastyczny, czyli łatwo go modyfikować, rozbudowywać i tworzyć z niego różnego rodzaju pakiety. Programowanie OO nie udokumentuje kodu dla Ciebie, ale ułatwi Tobie udokumentowanie kodu. A może polubisz pisanie API?

PHP 5 sprawiło, że programowanie OO jest dużo wygodniejsze i przyjemniejsze. ?artobliwie nazywam "piątkę" wydaniem "Java 2", ponieważ zastosowano tutaj mnóstwo rozwiązań znanych właśnie z Javy, np. interfejsy, przekazywanie obiektów przez referencję, a nie przez wartość, obsługa wyjątków typu try-catch. Ale i w PHP 4 (i niższych) istniały wspaniałe przykłady użycia OO w aplikacjach.

Moim ulubionym systemem szablonów są Smarty. Pozwalają one oddzielić kod PHP od zawarości. Kolejnym przykładem zastosowania programowania OO jest darmowy generator plików PDF, nazwany FPDF. Obie aplikacje umożliwiają oddzielenie zawartości od kodu, trzymając HTML z dala od PHP. A co najważniejsze, w łatwy sposób na ich podstawie można zbudować użyteczne aplikacje.

Smarty

Smarty są narzędziem służącym do tworzenia kompleksowych stron opartych na szablonach. Ostatnio zbudowałem na ich podstawie aplikację, której wygląd można zmienić od ręki, nie tracąc przy tym jej dużej funkcjonalności. Dzięki temu proces tworzenia nowego designu jest bardzo prosty. Dodałem domyślny tag systemowy jako rozszerzenie tagów dostępnych w Smarty:

[navigation horizontal separated by " | "]

którego umieszczenie na początku kodu HTML spowoduje wyświetlenie poziomego menu nawigacyjnego w podzielonego pionowymi paskami "|". Ale i bez modyfikacji Smarty posiada potężne mechanizmy służące do zarządzania danymi zawartymi w zmiennych. Powyższy przykład to tylko próbka możliwości Smarty, w którym z łatwością możesz definiować własne tagi. Więcej informacji możesz znaleźć pod adresem http://simpletags.sourceforge.net oraz http://simplequiz.sourceforge.net/.

Ponieważ Smarty jest wydany w postaci klasy oraz jest naprawdę dobrze udokumentowany, modyfikacja kodu i jego ubogacanie staje się całkiem proste, a wręcz przyjemne. Smarty posiadają nawet warstwę zabezpieczającą przed "przeciekaniem" zmiennych z PHP do szablonów: musisz dokładnie określić, które zmienne mają zostać użyte. Ten rodzaj "polityki zmiennych" pomaga zachować bezpieczeństwo i zaufaną relację pomiędzy designerami tworzącymi szablony oraz programistami, którzy karmią te szablony zawartością.

FPDF

Klasa jest dobrze udokumentowana, znajdziemy wiele przykładów, jak pozycjonować tekst i grafikę. Na stronie, o której już wspomniałem opisując Smarty, użyłem FPDF do dynamicznego generowania certyfikatów zakończenia kursu, które zawierają czcionkę True Type i grafikę w rozdzielczości 300 dpi. W kilka chwil na utworzenie klasy i wykonanie potrzebnych operacji na pliku PDF nie robi wielkiej różnicy w porównaniu z czasem potrzebnym na pobranie tego pliku. A niekiedy czas użyty na generację tego pliku jest mniejszy, niż czas potrzebny serwerowi na znalezienie i wysłanie statycznego pliku PDF. Ale wszystko jest względne. Co więcej, ponieważ FPDF jest oparte na klasach, może być dowolnie rozbudowywane. Niektóre metody nie są nawet do końca zimplementowane, tylko czekają, aż sam je dopasujesz do swoich potrzeb, tworząc np. własne elementy nagłówków i stopek w podklasach.

Programowanie Orientowane Obiektowo - podsumownie

Smarty oraz FPDF to dobrze udokumentowane API, łatwe w utrzymaniu i rozbudowie. I tutaj pojawia się końcowy wniosek: funkcjonalność tych aplikacji nie mogłaby być osiągnięta używając tylko programowania strukturalnego, czyli samych funkcji i zmiennych globalnych. Co więcej, trudnością byłoby inicjowanie kilku wersji różnych zmiennych, co nie sprawia żadnego problemu przy pracy z obiektami. Do tego każdy taki obiekt może przechowywać informacje o innym layoucie dokumentów HTML czy PDF, czyli możesz publikować te same dane na wiele różnych sposobów.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (6)
OOP a OP
Wtorek 13 Październik 2009 9:16:00 am - thek <thek_at_xxx.pl>

Z tym object-oriented i "zorientowany obiektowo" to nie jest tak prosto jak mówisz u podstaw OP i OOP leży bowiem co innego. Jaki jest podstawowy i niepodzielny, najniższy poziomowo element OP i OOP? W OP jest to proste - zawsze abstrakcyjny Object. Wszystkie dane, struktury są pochodną tej klasy. W OOP jest to właściwie nie do określenia, gdyż klasy są naszym dziełem i ewentualnie możemy taką funkcjonalność próbować wdrożyć. Stąd Java czy Smalltalk to OP a C++ "tylko" OOP.

Mała uwaga
Czwartek 20 Marzec 2008 4:00:03 pm - camelx <camelx_at_gmail.com>

Tekst jest bardzo dobry, dla mnie dosyć przydatny.
Mam tylko jedną małą uwagę - nie ma czegoś takiego jak programowanie "zorientowane obiektowo". Taki termin występuje co prawda w języku angielskim (Object-oriented programming), lecz tłumacząc na polski mówimy poprostu "programowanie obiektowe". W jęz. angielskim jest dodane słówko "oriented" ponieważ w termin mógł by byc mylony z "programowaniem obiektu".
Pozdrawiam

spoooko...
Sobota 21 Październik 2006 10:34:08 am - mokry <m.mokry_at_plusnet.pl>

Art naprawde fajny.
Programuje juz kilka lat, siedze glownie na PHP4 i jak dotad bardzo rzadko korzystalem z OO. Po przeczytaniu w wielu godzin przemyslen nad swoim dotychczasowym kodem stwierdzam ze niektore z nich faktycznie mozna bylo duzo prosciej i lepiej napisac w OO...
Polecam przeczytac

naprawdę niezły kawałek tekstu :)
Wtorek 05 Wrzesień 2006 11:49:19 am - xixek

tak. to jest to. nie wiedziałem połowy z tych rzeczy a przecież programuję już kilka lat... Więcej takich artykułów poproszę!
pozdrawiam!

Daje wiele do myślenia...
Sobota 22 Lipiec 2006 7:14:43 pm - athlan <athlanster_at_gmail.com>

Bardzo przydatny artykuł... dał mi wiele do myślenia. Osobiście jesteś zwolennikiem kodu proceduralnego, ale po głębszych przemyśleniach mogę stwierdzić, iż nie wszystko trzeba pisać "na szybko", dzieki za arta :)

optymalizacja
Piątek 14 Lipiec 2006 12:00:35 pm - mroq

pewnie zaczne flejma, ale niech se autor artykułu zrobi w oscommerce drzewko kategorii skladajace sie z kilkunastu tysiecy galezi... i wtedy pogadamy o optymalizacji

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2020 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System