Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> kiedy klasa abstrakcyjna a kiedy interfejs, problem bardziej teoretyczny
squid
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


Mam pewien problem ze stosowaniem klas abstrakcyjnych i interfejswo. Jakie jest kryterium wyboru miedzy tymi dwoma mechanizmami obiektowymi bo jak dobrze rozumiem jest miedzy nimi praktycznie (PHP5) jedna roznica mianowicie w klasie abstrakcyjnej czesc metod moze byc juz zaimplementowana tymczasem w interfejscie mymy doczynienia zawsze z prototypami, innymi slowy interfejs to klasa abstrakcyjna bez mozliwosci implementacji w niej metod. Czy dobrze rozumiem? to jest jedyna roznica?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kubatron
post
Post #2





Grupa: Zarejestrowani
Postów: 581
Pomógł: 0
Dołączył: 21.07.2003
Skąd: Jasło

Ostrzeżenie: (0%)
-----


Klasy abstrakcyjne możesz tworzyć jak zwykłe klasy czyli:
  1. <?php
  2. abstract class silnik {
  3. private $oD = NULL;
  4. function A( $oD ) {
  5. //...
  6. }
  7. }
  8. ?>


I teraz nie możesz jak przy zwykłej klasie utwórzyc jej czyli zaimplementować w sposób:
  1. <?php
  2. $oAbstract = new silnik;
  3. ?>

Bo są one stworzone wyłącznie do deklarowania i dziedziczenia przez inne klasy, i może się to przydać gdy nie chcemy tworzyć obiektu tej klasy tylko odziedziczyc ją. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Interfejsy, jest to bardzo ciekawa rzecz w PHP5 która się przydaje i przyspiesza kod o wiele.Działają one na zasadzie deklarowania metod, i pózniejszym nadpisaniu, pozwala to przyspieszyć kod o niezbędne tworzenie metod w klasie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Możesz to użyć np. przy tworzeniu jakiegoś mechanizmu.
DB_DRIVER:
  1. <?php
  2. interface SQL {
  3. public function __construct();
  4. public function Connect();
  5. public function Query();
  6. //itp...
  7. }
  8. ?>

I w tym intefejsie po zaimplementowaniu do klasy np. Mysql metody będą nadpisywane a nie tworzone (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Co przyspieszy twój kod. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Czyli podsumowując Interfejsy używamy by przyspieszyć kod o niezbędne tworzenie metod w klasie. A klasy abstrakcyjne sa po to by nie tworzyć zbędnych obiektów, co daje nam odziedziczanie klas abstrakcyjnych.

(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Jak coś nie rozumiesz to strzelaj sprobuje odpowiedzieć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Można by było na temat interfejsów i klas abstrakcyjnych napisać bardzo dużo i o ich zastosowaniu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Jakby co to poprawcie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował kubatron 1.03.2005, 22:49:13
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 09:15