7 października
Obiektowość
Ponieważ uważam, mając tę wiedzę którą mam, że programowanie obiektowe to jedyna słuszna droga jeśli zabieramy się właśnie za programowanie. Czym jest programowanie obiektowe? Hmmm, czymś fajnym. Mamy tam klasy i obiekty danej klasy. Mój kolega tak mi tłumaczył ideę programowania obiektowego.
“Stań przed pralką, zamknij oczy i wyobraź sobie tą pralkę. To, że ma drzwiczki, miejsce do wsypywania proszku, to, że można w niej prać na 5 różnych sposobów, to, że można w niej płukać i wirować. I to co sobie wyobraziłeś - to jest właśnie klasa. Teraz otwórz oczy i spójrz na pralkę. To co widzisz, to jest obiekt klasy pralka.”
To tak w skrócie i bardzo obrazowo. Klasa opisuje co zawiera co zawiera dany obiekt, wszystkie jego składowe, zmienne, które w klasie nazywane są polami, jak również wszystkie funkcję, które w klasie nazywane są metodami. Klasa to nic innego jak zbiór danych i funkcji, które są ze sobą w jakiś sposób powiązane. Obiekt natomiast stanowi fizyczna reprezentację idei klasy. Dobra, dość gadania o dupie Maryny, przykład poproszę.
class pierwsza_klasabr />
{
public $pole;
private $pole2;
public function __construct()
{
$this->pole=5;
$this->pole2=6;
}
public function wyswietl()
{
return $this->pole2;
}
}
?>
To początku występuję słowo klucz class. Oznacza ona mnie więcej tyle, że zaraz nastąpi definicja klasy. Następnie następuję nazwa klasy, a później ciało klasy zawarte w klamrach {}. Później są pola - jak widać są to po prostu nazwy zmiennych. Co ważne, trzeba zwrócić uwagę na przedrostek: public - oznacza, że dostęp do tego pola może uzyskać każdy, można je odczytywać i dowolnie zmieniać z wnętrza jak i z zewnątrz klasy; private - dostęp do pola ma tylko i wyłącznie klasa. Istnieje jeszcze przedrostek protected - działa on tak samo jak private, z małym wyjątkiem - klasy potomne widzą ten parametr jak public (o klasach potomnych w kolejnych lekcjach).
Po tym jak mamy już wypisane wszystkie zmienne, następuje definicja wszystkich metod. I jak widać, niewiele się to różni od definicji zwykłej funkcji. Podobnie jak pola, zawierają one przedrostek (public, protected, private), który działa identycznie jak ten przy polach. Podobnie jak w zwykłej funkcji, można przekazywać argumenty - w dokładnie ten sam sposób co w zwykłych funkcjach. Żeby odwołać się do zmiennej klasy, należy użyć sformułowania $this->nazwa_pola. W podobny sposób można się odwołać do metody (np. $this->nazwa_metody(argumenty)). Tak samo jak w funkcjach, można zwracać informację. Istotą programowania obiektowego jest zwracanie wyników, a wyświetlanie ich dopiero w głównym wątku.
Skoro już mówimy o klasach, trzeba wspomnieć o konstruktorze i destruktorze. Są to dwie “specjalne metody”. Jedna do tworzenia obiektu danej klasy (konstruktor) druga do niszczenia (destruktor). Konstruktor to nic innego jak metoda o nazwie __construct . Jest ona wywoływana podczas tworzenia obiektu danej klasy, można w niej np. przypisać wartości polom. Destruktor ma za zadanie usunąć wszystko co jest niepotrzebne przy niszczeniu obiektu (połączenia z bazą, inne obiekty). Ponieważ PHP działa na zasadzie - koniec wykonania skryptu, czyszczenie całej pamięci, która była potrzebna - nie znalazłem istotnego powodu używania destruktora (połączenie z bazą danych przydaję mi się także w innych klasach, więc nie mam potrzeby jego zakończenia). Nazwa destruktora jest stała (__destruct).
Już kiedyś wspominałem o tym, że klasa powinna znajdować się w osobnym pliku, który zwie się tak samo jak nazwa klasy (czyli w tym przykładzie pierwsza_klasa.php). Natomiast wykorzystanie klasy pokaże na przykładzie poniższym.
Na początku używamy polecenia include (do załadowania pliku z klasą). Następnie tworzymy obiekt o nazwie obiekt (taka ułatwienie) klasy pierwsza_klasa. Pokazane jest w skrypcie, jak przypisać wartość do pola publicznego oraz jak odczytać tą wartość z pola prywatnego jak i publicznego. Jak widać, bez zrobionych odpowiednich funkcji do obsługi pól prywatnych, praktycznie nic nie można z nimi zrobić. Czemu więc się je stosuję? Jest to tak zwana enkapsulacja danych - zapobiega to przypadkowemu lub nieprzemyślanemu zmianie tych danych. Pozwala to na późniejsze używanie klas bez obawy, że ktoś zmieni coś nieodpowiednio. Jest to kolejna z cech wyróżniających programowanie obiektowe. O ile się da, większość pól powinna być prywatna (lub protected). I to chyba koniec tej długiej lekcji.

Autor: oleQ dnia 07.10.09 o godz. 23:24
Dobrze.
Ale do czego mozna uzyc programowania obiektowego? Jakie to daje mozliwosci?
Bo jak we wszystkich kursach jest teoria, ale nie napisane do czego to mozna uzyc :>
PS. Kiedy kolejne czesci? ;)
Autor: misiuziu dnia 07.10.09 o godz. 23:24
Możliwości daję ogromne :) Tak naprawdę ułatwia życie programiście. Zamiast tworzyć wszystko od podstaw, tworzysz “klocki” z których budujesz aplikację. Takie klocki zdecydowanie łatwiej i szybciej jest zmieniać/modyfikować. Mam nadzieję, że uda mi się to tutaj pokazać.
Kolejne części powinny być wkrótce, ale nie mogę tego obiecać. Ogólnie to poznaję frameworki, jestem pod wielkim wrażeniem (robią to, do czego cały czas dążyłem) i mam nadzieje opisywać tworzenie gry właśnie przy użyciu frameworka. Dajcie mi trochę czasu i bądźcie cierpliwi.