Istnieje wiele paradygmatów programowania. Mamy programowanie strukturalne, obiektowe, logiczne, deklaratywne itp. Każde z tych podejść ma swoje wady i zalety. Każde z nich ma swoje zastosowania. Jednak programowanie obiektowe zyskuje w obecnych czasach największą popularność. Tekst ten ma na celu wprowadzenie osób początkujących w programowanie obiektowe, dając im solidne podstawy do dalszego rozwoju w tym kierunku. Tekst przeznaczony jest dla osób, które mają już doświadczenie w programowaniu strukturalnym.
Najpierw należy sobie zadać pytanie: Dlaczego programowanie obiektowe tak bardzo zyskuje na popularności? Odpowiedź jest dość prosta. Prawdopodobnie najbardziej odpowiada temu, jak postrzegamy nasz świat. Nazwa tego paradygmatu mówi o obiektach. W otaczającym nas świecie znajdziemy wiele obiektów. Dla przykładu monitor. Ten psujący oczy kawał elektroniki to taki sam obiekt, jak kamień, drzewo, książka czy ziemniak. Cechuje go kilka właściwości. Jest to rozdzielczość i przekątna ekranu, odświeżanie, kolor, zużycie prądu, marka, waga itp. Możemy też go używać do różnych rzeczy. Jesteśmy w stanie go włączyć, wyłączyć, rzucić o ścianę, a zepsuty nadal nadaje się świetnie na przycisk do papieru.
Nie inaczej jest z programowaniem obiektowym. Cała zabawa polega na tym, by rozdzielić naszą aplikację na takie właśnie obiekty, które cechują jakieś właściwości i które mogą wykonywać jakieś akcje. Żeby lepiej zobrazować to, o czym mówię, przedstawię Wam Zenka. O Zenku pisałem w tekście PHP a bezpieczeństwo. Zenek jest właścicielem witryny, który wpadł na genialny pomysł. Wprowadzając do swojej strony internetowej obsługę użytkowników, postanowił stworzyć obiekt na swoje podobieństwo. Oto Zenek. Zenek Obiektowy:
Kiedy już skończycie podziwiać to moje dzieło sztuki, przejdźmy do rozważań na temat tego, co wiemy o Zenku. Zenek ma tytuł inżyniera. Jego numer buta to 44. Kolor włosów czarny. Jego ulubiona potrawa to spaghetti. Zenek, z uwagi na to, że zrobiłem go z prostokątów, nie ma bicepsów ani żadnych innych mięśni. Jest samozwańczym hakerem, który próbuje podbić świat. Te ambitne plany jednak nadal pozwalają mu oglądać telenowele, przy których - nawiasem mówiąc - płacze jak bóbr. Potrafi biegać, skakać, godzinami siedzieć przed komputerem, jeść oraz spać. Uzupełnijmy ilustrację o te informacje:
Wiemy już, jaki jest nasz Zenek. Teraz przystępujemy do jego zakodowania w języku PHP. Tworzymy klasę Osoba.
class Osoba {
public $imie = 'Zenek';
public $tytul = 'Inżynier';
public $cel = 'Podbicie świata';
public $hobby = 'Wzruszające telenowele';
public $potrawa = 'Spaghetti';
public $biceps = '0cm';
public $numer_buta = 44;
public function biegnij() { echo 'Biegnę! '; }
public function skacz() { echo 'Skaczę! '; }
public function pracuj() { echo 'Zdobywam świ... eee... pracuję! '; }
public function jedz() { echo 'Przerwa na spaghetti! '; }
public function spij() { echo 'Idę spać. Do jutra! '; }
}
Powyższy zapis to przedstawienie Zenka jako obiektu w języku programowania PHP. Jak widzicie, utworzyliśmy osobę i wprowadziliśmy do niej domyślne dane. Krótkie wyjaśnienie:
Jak widać, zapisanie Zenka jako klasy nie jest wcale takie straszne. Zapis nieznacznie różni się od tego, do czego przywykliśmy dotychczas.
Zanim przejdę do dalszych wyjaśnień, zobaczmy, jak to działa. Utworzymy obiekt klasy Osoba i zmusimy go do tego, by troszkę pobiegał i coś zjadł. Sprawdzimy też jego numer buta. By dostać się do metod lub atrybutów obiektu, używamy strzałeczki ->. Wzór jest prosty: $zmienna_obiektu->wartosc. By utworzyć obiekt klasy, musimy użyć operatora new wraz z jej nazwą. Nawiasy za nazwą mogą posłużyć do przekazania parametrów. O tym jednak w następnej części tekstu.
$Zenek = new Osoba();
echo "Mój numer buta to $Zenek->numer_buta ";
$Zenek->biegnij();
$Zenek->biegnij();
$Zenek->biegnij();
$Zenek->spij();
Tak wygląda wynik naszego kodu:
Mój numer buta to 44 Biegnę! Biegnę! Biegnę! Idę spać. Do jutra!
Jak już wspomniałem, metody mają dostęp do innych metod za pośrednictwem zmiennej $this. Spróbujmy sprawić, by biegnąc, Zenek skakał. Podmieniamy metodę biegnij() na następujący kod:
public function biegnij() {
echo 'Biegnę! ';
$this->skacz();
}
Jeżeli po tej zmianie uruchomimy nasz kod, to otrzymamy następujący ciąg znaków:
Mój numer buta to 44 Biegnę! Skaczę! Biegnę! Skaczę! Biegnę! Skaczę! Idę spać. Do jutra!
Zostaje nam na dzisiaj jeden problem. Zenkowi nie do końca podoba się to, że każdy ma wgląd w jego tajne plany podboju świata. Niezdrowe zainteresowanie władz nie jest wskazane. Koledzy śmialiby się z niego, że płacze przy telenowelach. Na pewno też nie poderwie żadnej kobiety na atletyczną budowę ciała, więc chciałby też ukryć brak bicepsów. W tym celu posłużymy się modyfikatorem private. Na obrazku pokażę Zenka po zmianach. Kolorem czerwonym zaznaczone są te cechy, które chciałby on ukryć.
Żeby odwzorować zamierzenia Zenka na jego stronie internetowej, odpowiednio zmodyfikujemy klasę Osoba. Przed odpowiednimi atrybutami ustawimy modyfikator private. Oznacza to, że są one jego prywatną sprawą i nic nam do tego.
class Osoba {
public $imie = 'Zenek';
public $tytul = 'Inżynier';
private $cel = 'Podbicie świata';
private $hobby = 'Wzruszające telenowele';
public $potrawa = 'Spaghetti';
private $biceps = '0cm';
public $numer_buta = 44;
public function biegnij() { echo 'Biegnę! '; }
public function skacz() { echo 'Skaczę! '; }
public function pracuj() { echo 'Zdobywam świ... eee... pracuję! '; }
public function jedz() { echo 'Przerwa na spaghetti! '; }
public function spij() { echo 'Idę spać. Do jutra! '; }
}
Jeżeli spróbujemy się teraz dowiedzieć, jaki cel przyświeca Zenkowi, czeka nas rozczarowanie:
$Zenek = new Osoba();
echo $Zenek->cel;
Próba poznania tajnych planów podboju świat Zenka (o których swoją drogą radzę Wam teraz zapomnieć) zakończyła się błędem:
Fatal error: Cannot access private property Osoba::$cel
Nie przeszkadza nam to jednak w poznawaniu tytułu Zenka czy jego imienia.
Dajmy spokój Zenkowi i bądźmy przez chwilę poważni. Nauczyliśmy się w tym tekście rozpoznawać obiekty, analizować je pod względem tego, co potrafią oraz jakie mają cechy. Następnie utworzyliśmy obiekt z klasy. Poznaliśmy podstawy w stosowaniu modyfikatorów dostępu, wiemy, jak posłużyć się zmienną $this. Utworzyliśmy obiekt i nie baliśmy się go użyć.
Jednak ktoś z Was zada zapewne pytanie: Jakie to wszystko ma zastosowanie praktyczne? Złożone strony internetowe posiadają masę skryptów. Pozwalają na rejestrowanie użytkowników, pisanie artykułów, publikowanie komentarzy, tworzenie wykresów, prowadzenie sklepu itp. Każdy taki element strony da się zapisać jako obiekt. Weźmy na przykład artykuł. Przeczytajcie poniższy kawałek kodu i odpowiedzcie sobie na pytanie, jak się Wam go czyta:
$Osoba = new Osoba();
$Osoba->laduj('Zenek');
$Artykul = new Artykul('PHP – Programowanie obiektowe dla początkujących');
$Artykul->laduj_tresc_z_pliku('tresc.txt');
$Artykul->autor($Osoba);
$Artykul->zapisz();
$Artykul->->opublikuj();
Zastosowanie zmiennej $this tak, by była ona zwracana przez poszczególne akcje, może zaowocować nawet takim zapisem:
$Artykul = new Artykul('PHP – Programowanie obiektowe dla początkujących');
$Artykul->laduj_tresc_z_pliku('tresc.txt')->autor($Osoba)->zapisz()->opublikuj();
Dodatkowo takiego kodu można wielokrotnie używać. Zamiast powtarzać instrukcje tworzące użytkownika, stosować setki zmiennych itp., wystarczy nam coś takiego:
$Osoba_Zenek = new Osoba();
$Osoba_Zenek->imie = 'Zenek';
$Osoba_Zenek->zapisz();
$Osoba_Ania = new Osoba();
$Osoba_Ania->imie = 'Ania';
$Osoba_Ania->zapisz();
$Osoba_Franek = new Osoba();
$Osoba_Franek->imie = 'Franek';
$Osoba_Franek->zapisz();
W skrócie: rozdzielamy naszą aplikację na wiele obiektów, gdzie każdy z nich spełnia określone funkcje. Teraz wyobraźcie sobie, że użytkownika opisuje 30 atrybutów. Spokojnie „pakujemy je” do jednego obiektu. Nie stosujemy takich kwiatków, jak np. $osoba_zenek_imie, $osoba_zenek_numer_buta, $osoba_ania_imie itp. Już zapewne wiecie, skąd funkcje typu mysql_real_escape_string() w PHP. Wiecie, skąd w niektórych systemach CMS funkcje takie, jak „main_article_save(); shop_comment_save(); forum_post_save();” itp. Każdej akcji, do której tworzyliśmy funkcję, musieliśmy nadać unikatową nazwę. Musieliśmy też pilnować, by nigdy się ona nie powtarzała. Teraz artykuły, użytkownicy, kometarze itp. mogą zostać zapisane metodą zapisz() czy załadowane poprzez laduj(). Jedyne, co musi być unikatowe w obrębie skryptu, to nazwa zmiennej, która stanie się naszym obiektem oraz sama nazwa obiektu. Koniec z zapamiętywaniem setek zmiennych. A to dopiero wierzchołek góry lodowej.
Nie ma się co dłużej rozpisywać. Tak naprawdę zawsze będą zwolennicy oraz sceptycy programowania obiektowego. Pełne zrozumienie jego zalet będziesz miał, dopiero gdy je dobrze poznasz. Wtedy sam zdecydujesz, czy warto je stosować, czy też może to nie dla Ciebie. W następnej części o programowaniu obiektowym, powiem więcej na temat konstruktorów oraz destruktorów. Opowiem o użyciu zmiennej $this wewnątrz klasy oraz o tym, czym są tzw. metody magiczne w PHP. W przyszłości mam nadzieję, pojawią się też teksty dotyczące wzorców projektowych.
Dariusz Półtorak
Aktualności
|
Porady
|
Gościnnie
|
Katalog
Bukmacherzy
|
Sprawdź auto
|
Praca
biurowirtualnewarszawa.pl wirtualne biura w Śródmieściu Warszawy
Artykuł może w treści zawierać linki partnerów biznesowych
i afiliacyjne, dzięki którym serwis dostarcza darmowe treści.
*
|
|
|
|
|
|