Dziedziczenie klas |
Dziedziczenie klas |
8.12.2015, 09:15:58
Post
#1
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 0 Dołączył: 30.07.2006 Skąd: Łódź Ostrzeżenie: (0%) |
Witajcie.
Pewnie mnie zaraz objedziecie jak beczkę od smoły. Ale trudno. Piszę sobie aplikację. Opieram ją oczywiście o klasy. Chciałbym jednak wprowadzić dziedziczenie. Tylko za bardzo nie wiem czy kontrukcja, którą obrałem jest poprawna. Stworzyłem dwie klasy abstract: jedna do obsługi bazy danych, a druga do generowania elementów html. Klasa bazodanowa dziedziczy po klasie elementów. Następnie stworzyłem zwykłą klasę - classMain, która dziedziczy po klasie bazodanowej i zawiera metody do załadowania elementów strony, do wyświetlenia strony etc. I teraz chcę stworzyć kolejna klasę do obsługi wydzielonej części aplikacji - obsługi zgłoszeń. I teraz nie wiem, czy ta klasa ma po czymś dziedziczyć? Najpierw chciałem, żeby dziedziczyła po klasie bazodanowej. Ale to trochę dziwnie, bo stworzy się drugie połączenie do bazy danych. Potem pomyślałem, że lepiej tą klasę zainicjować w klasie classMain i żeby nie dziedziczyła po niczym i do metod przekazywać pobrane dane w klasie classMain. Zdaję sobie sprawę, że to w zasadzie infantylne pytanie. Ale czytam te poradniki odnośnie dziedziczenia i ni w ząb tego nie mogę rozwiązać. A klas obsługującyh kolejne cześci aplikacji będzie przybywało. Pomożecie? |
|
|
8.12.2015, 09:20:49
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Źle się do tego zabierasz. Dziedziczenie nie służy temu żeby np. tak jak w Twoim przypadku "odziedziczyć" połączenie z bazą.
Dziedziczenie opiera się na podobieństwie obiektów i ich powiązaniu np. Kwadrat dziedziczy po Figurze bo mają wspólne elementy. Natomiast Samochód już nie może dziedziczyć po Figurze bo nie ma nic wspólnego. Wszelkie zależności typu połączenie do BD itp. przekazuj jako parametry w kostruktorze klasy w której tego chcesz używać. Zowie się to Dependency Injection (DI) i było parę tematów niżej. |
|
|
8.12.2015, 12:58:35
Post
#3
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 0 Dołączył: 30.07.2006 Skąd: Łódź Ostrzeżenie: (0%) |
Dzięki za odpowiedź. Przeczytałem również wskazany przez Ciebie wątek. Wszystko mniej więcej rozumiem. Ale nasuwają mi się kolejne pytania.
Mam klasę obsługującą bazę danych: classDb. Są w niej metody (settery i gettery) wykonujące zapytania, pobierające dane etc. Odrębną klasą jest classMain, gdzie jak wspomniałem wcześniej są metody do wyświetlania pobranych danych. Ale będą też klasy do obsługi poszczególnych części: np klasa do obsługi zgłoszeń, gdzie chciałem umieścić metody np pobierania nowych zgłoszeń, przypisania zgłoszenia do użytkownika etc. Moje pytanie brzmi: jak w klasie obsługującej np. część zgłoszeń korzystać z metod klasy BD? |
|
|
8.12.2015, 17:19:42
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Słabo czytałeś
Primo klasa obsługi bazy powinna obsługiwać tylko możliwość wyciągania, zapisywania, aktualizacji itp. Potem robisz sobie klasę np. UserRepository która to dostaje w konstruktorze obiekt implementacji dostępu do danych (może to być DBHandler, FileHandler, SessionHandler) implementujące wspólny interface. Dzięki temu nie uzależniasz się od konkretnej implementacji co za tym idzie możesz kiedyś hipotetycznie wymienić BD na pliki itd. Dalej... Mając system zleceń również tworzysz sobie np. TaskRepository (nazwa nie istotna) która będzie Ci obsługiwała operacje odczytu, zapisu, usuwania itd). I tu znowu nie czepiasz się implementacji. To tak skrótowo TL;DR Obiekt połączenia BD przekazujesz w konstruktorze obiektu który takowego potrzebuje. Nic globalnie... |
|
|
Wersja Lo-Fi | Aktualny czas: 7.05.2024 - 02:37 |