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

Podstawy - Programowanie obiektowe dla początkujących

Programowanie obiektowe - co to jest?

Na początku należy wyjaśnić co to jest programowanie obiektowe. Obiekt składa się z danych go opisujących (tzw. atrybutów) i metod, czyli funkcji jakie można na nim wykonać. Najprościej można pokazać to na przykładzie. Utworzymy obiekt pierwiastek. Aby zadeklarować nowy obiekt, używa się słowa class:

class pierwiastek {
}

Taki obiekt do niczego się nie przyda - nie ma ani atrybutów, ani metod. Dodamy więc kilka informacji opisujących go:

class pierwiastek {
	public $nazwa;
	private $symbol;
	protected $temp_topnienia;
	protected $temp_wrzenia;
	private $okres;
	private $grupa;
}
  • public-atrybut jest dostępny wewnątrz obiektu, jak i poza nim. Atrybut ulega dziedziczeniu (o tym później)
  • private-atrybut jest dostępny tylko wewnątrz obiektu (próby wyświetlenia jego zawartości poza obiektem zakończą się błędem) i nie jest dziedziczony.
  • protected-atrybut jest dostępny tylko wewnątrz obiektu (próby wyświetlenia poza obiektem: jw.) i jest dziedziczony.

Jednak dalej tak naprawdę go nie ma, jest jedynie gotowy do utworzenia. Tworzy się go według poniższego wzoru:

$wodor = new pierwiastek;

Teraz możemy się odwoływać do jego właściwości w ten sposób:

$wodor->nazwa="Wodór"; // Zmieni atrybut $nazwa na "Wodór"
echo $wodor->nazwa; // Wyświetli $nazwa, czyli "Wodór"

Mamy już atrybuty, czas dodać jakieś metody.

class pierwiastek {
	public $nazwa;
	private $symbol;
	protected $temp_topnienia;
	protected $temp_wrzenia;
	private $okres;
	private $grupa;

	public function ustal_temp_topnienia($t) {
		$this->temp_topnienia=$t;
	}
	public function ustal_temp_wrzenia($t) {
		$this->temp_wrzenia=$t;
	}
	public function stan($t) {
		if($this->temp_topnienia>$t) {
			return 'stały';
		} elseif ($this->temp_wrzenia<$t) {
			return 'gazowy';
		} else {
			return 'ciekły';
		}
	}
}

Jak pewnie zauważyłaś lub zauważyłeś, wewnątrz obiektu do atrybutów odwołuje się poprzez $this->nazwa.Metod używa się podobnie jak atrybuty:

$wodor=new pierwiastek;
$wodor->nazwa="Wodór"; // Zmieni atrybut $nazwa na "Wodór"
echo $wodor->nazwa; // Wyświetli $nazwa, czyli "Wodór"
$wodor->ustal_temp_topnienia(14);
$wodor->ustal_temp_wrzenia(20);
echo $wodor->stan(16); // Wyświetli "ciekły"

Tym sposobem opanowałaś bądź opanowałeś podstawy programowania obiektowego. Zapraszam na ciąg dalszy...

Dziedziczenie

Dziedziczenie to po prostu dołączanie do obiektu metod i atrybutów innych obiektów. Oczywiście dziedziczeniu poddają się tylko te metody i atrybuty, które mają odpowiednie modyfikatory.

Mamy już klasę obiektu pierwiastek, wykorzystamy ją do stworzenia obiektu zwiazek_chemiczny. Robi się to w ten sposób:

class zwiazek_chemiczny extends pierwiastek {

}

W tym obiekcie dostępne są funkcje ustal_temp_topnienia(), ustal_temp_wrzenia() i stan() oraz atrybuty $nazwa, $temp_topnienia i $temp_wrzenia. Związki chemiczne nie mają grup i okresów, więc te atrybuty są ustawone na private.

Rozszerzymy teraz klasę o kilka nowych atrybutów i metod:

class zwiazek_chemiczny extends pierwiastek {
public $wzor;
public $atomy;
public $ilosc_atomow;

	public function dodaj_skladnik($symbol, $ilosc) {
		if(isset($this->atomy[$symbol])) {
			$this->atomy[$symbol]=$this->atomy[$symbol]+$ilosc;
		} else {
			$this->atomy[$symbol]=$ilosc;
		}
		$this->ilosc_atomow=$this->ilosc_atomow+$ilosc;
	}
}

Teraz utworzymy obiekt "woda":

$woda=new zwiazek_chemiczny;
$woda->nazwa="Tlenek wodoru";
$woda->wzor="H2O";
$woda->ustal_temp_topnienia(273);
$woda->ustal_temp_wrzenia(373);
$woda->dodaj_skladnik("H", 2);
$woda->dodaj_skladnik("O", 1);

W powyższym kodzie użyliśmy metod i atrybutów które nie były zadeklarowane w klasie zwiazek_chemiczny, były natomiast obecne w klasie pierwiastek, i to od niej zostały odziedziczone.

__construct() i __destruct()

Te dwie funkcje są nieco inne od tych, które deklarowaliśmy. __construct() wykonuje się sama w momencie tworzenia obiektu, natomiast __destruct() w momencie usuwania obiektu. Oto przykład zastosowania:

class zwiazek_chemiczny extends pierwiastek {
public $wzor;
public $atomy;
public $ilosc_atomow;

	public __construct() {
		$this->ilosc_atomow=0;
	}

	public function dodaj_skladnik($symbol, $ilosc) {
		if(isset($this->atomy[$symbol])) {
			$this->atomy[$symbol]=$this->atomy[$symbol]+$ilosc;
		} else {
			$this->atomy[$symbol]=$ilosc;
		}
		$this->ilosc_atomow=$this->ilosc_atomow+$ilosc;
	}
}

$woda=new zwiazek_chemiczny;

Wcześniej kod:

echo $woda->ilosc_atomow;

nie wyświetliłby nic, teraz wyświetli "0" (zero).

Funkcja __destruct wykonuje się w momencie usuwania obiektu, więc można ją wykorzystać jeśli z obiektem ma się coś stać absolutnie na końcu jego istnienia. Przykład:

class zwiazek_chemiczny extends pierwiastek {
public $wzor;
public $atomy;
public $ilosc_atomow;

	public __destruct() {
		$this->ilosc_atomow=0;
	}

	public function dodaj_skladnik($symbol, $ilosc) {
		if(isset($this->atomy[$symbol])) {
			$this->atomy[$symbol]=$this->atomy[$symbol]+$ilosc;
		} else {
			$this->atomy[$symbol]=$ilosc;
		}
		$this->ilosc_atomow=$this->ilosc_atomow+$ilosc;
	}
}

$woda=new zwiazek_chemiczny;

Kiedy obiekt będzie znikał, $ilosc_atomow zostanie ustawiona na zero. Kod właściwie bezużyteczny, ale na praktyczne zastosowania będzie jeszcze czas.

Do funkcji __construct można dodać parametry. Robi się to tak jak w każdej normalnej funkcji:

class zwiazek_chemiczny extends pierwiastek {
public $wzor;
public $atomy;
public $ilosc_atomow;

	public __construct($nazwa, $wzor, $t_topn, $t_wrz) {
		$this->nazwa=$nazwa;
		$this->wzor=$wzor;
		$this->temp_topnienia=$t_topn;
		$this->temp_wrzenia=$t_wrz;
	}

	public function dodaj_skladnik($symbol, $ilosc) {
		if(isset($this->atomy[$symbol])) {
			$this->atomy[$symbol]=$this->atomy[$symbol]+$ilosc;
		} else {
			$this->atomy[$symbol]=$ilosc;
		}
		$this->ilosc_atomow=$this->ilosc_atomow+$ilosc;
	}
}

Taki obiekt tworzy się w ten sposób:

$woda=new zwiazek_chemiczny("Tlenek wodoru", "H2O", 273, 373);

Programowanie obiektowe oferuje dużo więcej możliwości niż te opisane tutaj. Wykraczają jednak one poza ramy artykułu, który ma być kursem dla początkujących.

Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System