Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sens dziedziczenia i jego zasada
Forum PHP.pl > Forum > PHP
yasiek
Powiedzmy, że opanowałem już tworzenie obiektów w php. Jednak to moje "opanowanie" to właściwie podstawy. Chciałbym zrozumieć jeszcze kilka rzeczy, a większośc artykułów jakie znalazłem, to albo dla całkowicie początkujących, albo dla totalnie zaawansowanych.

Przytoczmy na przykład dwie klasy:

klasa DB: odpowiedzialna za operacje na bazie danych; główne funkcje - konstruktor, który łączy z bazą, funkcja query, fetchAssoc, numRows no i close.

klasa gallery - no i powiedzmy, że chciałbym mieć tutaj funkcje odpowiedzialne za wprowadzanie rysunków, wyświetlanie według kategorii, według usera, wyświetlanie jednego obrazka itp itd

No i teraz moje pytanie(a) - czy klasa gallery powinna dziedzyczyć klasę (po klasie tongue.gif ) DB? no i w jaki sposób? czy powinna mieć własnego konstruktora? które funkcję powinny mieć status private, public (i na co one pozwalają)?i jak użyć klasy macierzystej w klasie "pochodnej"?

Wiem, ze dużo zagadnień i zapewne odpowiedzi będą nieco dłuższe niż pytania, dlatego jak ktoś znajdzie chwilkę, to byłbym niezmiernie wdzięczny, gdyby coś tutaj napisał smile.gif

P.S. ups.. sorry za tamten temat... widocznie gdzieś wcisnąłem niepotrzebnie enter... proszę o wyrzucenie tamtego wątku i z góry dzięki!
mike
Cytat(yasiek @ 25.08.2006, 11:13 ) *
czy klasa gallery powinna dziedzyczyć klasę (po klasie tongue.gif ) DB? no i w jaki sposób?
Oczywiście że nie.
Co ma wspólnego baza danych z galerią? NIC.

Cytat(yasiek @ 25.08.2006, 11:13 ) *
czy powinna mieć własnego konstruktora?
Tak, każda klasa powinna mieć konstruktor.
Klasy pochodne mogę dodatkowo wykonywać w swoim konstruktorze, konstruktor klasy bazowej.

Cytat(yasiek @ 25.08.2006, 11:13 ) *
które funkcję powinny mieć status private, public (i na co one pozwalają)?i jak użyć klasy macierzystej w klasie "pochodnej"?
A jakie tylko chcesz, to zalezy co Twoja klasa ma robić.
Piszesz że opanowałeś podstawy, a widać że nawet manuala do końca nie przeczytałeś skoro nie wiesz jak klasy bazowej w klasie dziedziczącej i nie znasz różnicy pomiędzy private i public.
Cysiaczek
Nie. Widac zupelnie nie zrozumiełeś idei oop. Nie martw się - większośc osób tak ma.
Uzywanie klas to nie to samo co programowanie obiektowe - można używac klas, ale nie programować obiektowo. Programowania obiektowe to pewien szczególny sposób myślenia o aplikacji, w którym ogromną wagę przykłada się do projektowania.
Opowiedz sobie na pytanie: Co ma wspólnego klasa galerii z klasą DB?
Jeśli nie ma nic wspólnego, to dlaczego ma po niej dziedziczyć? Czy galeria jest specjalizacją klasy DB? Rozszerza ją?
Nie. Nie ma z nią nic wspólnego i jako taka nie powinna po niej dziedziczyć.

Do klasy macierzystej (rodzicielskiej) odwołujsze się przez słowo kluczowe parent

  1. <?php
  2. class A{
  3.  
  4. function pisz(){print "Hello world!";}
  5.  
  6. }
  7.  
  8. class B extends A{
  9. function __construct(){
  10. parent::pisz();
  11. }
  12. }
  13. $obiekt=new B();
  14. //wyświetli Hello world!
  15. ?>


Pozdrawiam.
yasiek
Cytat
Piszesz że opanowałeś podstawy, a widać że nawet manuala do końca nie przeczytałeś skoro nie wiesz jak klasy bazowej w klasie dziedziczącej i nie znasz różnicy pomiędzy private i public.

Ok, w takim razie nie opanowałem podstaw - proszę o wybaczenie. Chodzi mi o przedstawienie w praktyktyce. Private - tylko w metody danej klasy, public - danej i pochodnej. Dobrze mówię? no i jak w takim razie w klasie gallery wykonywać zapytania sql używając klasy db?

Cytat
Nie. Widac zupelnie nie zrozumiełeś idei oop. Nie martw się - większośc osób tak ma.

No mniej więcej łapie to od strony teoretycznej. Ale nie wiem jak z praktyką... smile.gif
mike
Cytat(yasiek @ 25.08.2006, 11:30 ) *
No mniej więcej łapie to od strony teoretycznej. Ale nie wiem jak z praktyką... smile.gif

Nie obraź sie ale daleki jesteś od złapania teoretycznego tongue.gif

Dziedziczenie jest to nic innego jak rozszerzanie.

OOP to mapowanie rzeczywistości na obiekty. Weźmy na przykład pokój.
Mamy klasy: Mebel, Wyposażenie, Urządzenie.

Teraz mamy klasy: Szafa, Stołek, Łóżko, .... Wszystkie one dziedziczą po czym? Po Meblu.
Mamy klasy: Kaloryfer, RuraWŚcianie, ... One dziedziczą po Wyposażenie
A klasy: DVD, Komputer, HiFi, Ołówek, ..., dziedziczą po Urządzenie.

Programowanie w OOP jest to przedstawianie rzeczywistości za pomocą obiektów i definiowanie między nimi zależności.

Na przykład możesz stworzyć klasę: Ubranie. Do niej: Majtki, Portki, Kurtka, one dziedziczą po Ubranie.
A wspomniana wcześniej Szafa jest kolekcją Ubrań.

Możesz też zrobić klasy UrządzenieElektroniczne i UrządzenieZwykłe dziedziczące po Urządzenie i dopiero teraz zdecydować po którym urządzeniu będzie dziedziczyć każda z klas: DVD, Komputer, HiFi, Ołówek


To jest OOP
yasiek
Cytat
Nie obraź sie ale daleki jesteś od złapania teoretycznego


Jasne, ze się nie obrażę tongue.gif gdybym to wszystko wiedział i rozumiał, o nic bym nie pytał smile.gif
Dzięki mike za wymowne przykłady (ten z majtkami jest najlepszy winksmiley.jpg Mniej więcej to rozumiem smile.gif na przykład tworzysz sobie klasę samochód a później od niej Opel, Seat, Lexus tongue.gif i tak dalej. Tylko powiedz mi, jak w takim razie wykorzystac klasę obługującą mysql, do tego, żeby dodać informację o zdjęciu do galerii, pobrać odpowiednią ilość zdjeć i tak dalej? Myslałem, ze tu też mogę użyć dziedziczenia, no bo klasa gllery, opierałaby się w pewnym sensie na DB i wykorzystywała jej funkcje - no ale racja, to nie jest żadne rozszerzenie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.