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

Programowanie obiektowe dla początkujących

Aksjomaty programowania obiektowego

Wiele publikacji na temat programowania obiektowego zaczyna się od opisu poniższych pojęć, ale doszedłem do wniosku, że lepiej zrozumie się je znając przynajmniej podstawy podstaw programowania obiektowego.

interface Cache{
	/* pobiera wartość z cache */
	public function get($name);
	/* ustawia wartość cache */
	public function set($name, $value);
/* usuwa wartość z cache */
	public function remove($name);
/* czyści cache */
	public function clear();
/* sprawdza czy istnieje określone cache */
	public function has($name);
}

Mając taki interfejs można napisać konkretny zestaw klas, które będą go implementować w różny sposób, np. FileCache (cachowanie w plikach), ShmopCache (cachowanie w pamięci ram).

class FileCache implements Cache{
	//metody specyficzne dla tego rodzaju cache 
//np. get() szuka określonego pliku i zwraca jego zawartość w postaci ciągu znaków itp.
}

class ShmopCache implements Cache{
	//metody specyficzne dla tego rodzaju cache
}

Tak naprawdę nie jest ważne dla programisty, która z tych klas będzie w użytku, gdyż obydwie wykonują takie same zadanie, mimo iż mają całkowicie różne implementacje. Dzięki interfejsowi mamy pewność, że obydwie klasy mają określony zestaw metod publicznych. Właśnie na tym z grubsza polega polimorfizm, na wyższości interfejsu nad implementacją. Dzięki kontroli typów wprowadzonego w php5 polimorfizm staje się jeszcze łatwiejszy do zastosowania.

class Application{
	private $cache;
	//ciach
	public function setCache(Cache $cache){
		$this->cache = $cache;
	}
	public function getCache(){
		return $this->cache;
	}
	//ciach
}

W klasie Application mamy pewność, że jeśli zostanie wywołana metoda setCache, to do składowej $cache zostanie przypisany obiekt o poprawnym typie, który implementuje interfejs Cache. A więc obiekt ten posiada metody get, set, remove itp. Nie jest ważne, czy zostanie przekazany obiekt klasy FileCache, ShmopCache, czy jakikolwiek inny, ważne że programista ma pewność, że obiekt na którym operuje posiada odpowiedni zestaw metod publicznych, których obecność jest wymuszona poprzez interfejs Cache.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (3)
Błąd w przykładowym kodzie
Wtorek 16 Luty 2010 2:33:32 pm - mateo84 <mateo84_at_o2.pl>

Witam, próbowałem się zaznajomić z projektowaniem obiektowym w php i pozytywnie odbieram fakt, że komuś chce się pisać te wszystkie poradniki i tutoriale, tak jak ten. Ale niestety mam uwagę. 3. Modyfikacja dostępu w kodzie 4 (licząc od góry) metoda getName() nie wyświetla ani Reksio ani też Jamnik Reksio. Zapewne dlatego że gdzieś wypadałoby wpisać "echo". Jeżeli jest to zależne od konfiguracji serwera to przepraszam ja, ale jeżeli autor nie przetestował działania skryptu to coś tu jest nie "helloł".
Pozdrawiam :)

Za malo o istocie OOP
Niedziela 29 Marzec 2009 7:22:56 pm - seth

Brakuje mi w tym artykule opisu filozofii pisania obiektowego. To co w nim jest to tylko opis narzedzi ktore udostepnia PHP 5, a przeciez programowanie obiektowe to cos wiecej niz uzywanie slowek class, extend itp.

Jako, ze jest to tekst dla poczatkujacych brak wprowadzenia w istote OOP jest dla mnie bardzo duzym minusem.

Jezeli juz kogos chcemy uczyc obiektowki to zadbajmy o to aby wiedzial po co mu to do szczescia i jakie problemy rozwiazuje. W przeciwnym razie osoba taka dostaje do reki mlotek z instrukcja obslugi ale nie wie po co w ogole ma wbijac te gwozdzie.

Nie dla początkujących
Piątek 27 Marzec 2009 9:36:11 pm - orglee

Panie Piotrze posługuje się Pan bardzo hermetycznym językiem, opisując podstawy obiektówki. Nie wiem czy będąc początkującym zrozumiałbym więcej niż połowę z tego artykułu. Oprócz tego czasami wyprzedza Pana, Pańskie myślenie. Przykładem może być, użycie słów opisujących proces dziedziczenia, przed wytłumaczeniem istoty tego zagadnienia.

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