Jest tutaj ktoś kto mógłby mi wytłumaczyć wszystkie kombinacje dziedziczenia i praktyczne ich zastosowania? Zacznijmy od tego, że proste dziedziczenie jest bez sensu: kategoria nie powinna mieć swoich instancji.
Wiem, że dziedziczenie nie powstało z myślą o dobrym opisie rzeczywistego świata, ale raczej jako pomoc uporządkowaniem kodu. Generalnie mój cel to po prostu dobre opanowanie tematu dziedziczenia od strony teoretycznej i praktycznej (kiedy dokładnie stosować dany typ dziedziczenia).
Dziedziczenie hierarchiczne liniowe klas abstrakcyjnych: klasa może w C# dziedziczyć po więcej jak 1 klasie. OK. Jedyny przykład jaki przyszedł mi do głowy to ten w załączonym obrazku poniżej. Idąc od samej góry, czyli matematyki, mamy następnie fizykę która dziedziczy pewne cechy matematyczne, jak PI, złotą liczbę, prawa i tak dalej. Następnie mamy chemię - chemia to po prostu fizyka wychodząca z poziomu atomowego na poziom cząsteczkowy. Następnie mamy biologię, która za pomocą chemii tworzy struktury wykorzystujące energię i materię otoczenia, do samoreplikowania się (poprzez biochemię: wszystkie te szlaki metaboliczne). Na biologii już kończę wywód, bo następna kategoria u mnie przechodzi z jednokomórkowca na wielokomórkowca - ciągle jedna komórka ma pewne podstawowe dane składowe (ilość organelli, objętość, parametry jak turgor komórki) oraz metody (np. fotosyntezuj jeżeli masz dostęp do światła, dziel się jeżeli urosłaś do wystarczających rozmiarów). Wielokomórkowce to zespół komórek, bez wydzielonej komórki sterującej. Potem mamy organowce: wielokomórkowiec podzielił się wewnętrznie na wyspecjalizowane rejony, które mimo wszystko potrzebują całości do egzystencji (serce, wątroba i tak dalej). Na samym końcu może mamy jakieś zwierze. Jakieś proste: na przykład rybę. Ryba ma proste zachowania (metody) czyli jeść, chronić się, rozmnażać. Potem mamy jakieś wyższe ewolucyjnie organizmy, np. ssaki. Ssak ssie mleko swojej matki i rodzi żyworodnie (tutaj mamy jeszcze metodę zarezerwowaną tylko dla samic). Następnie mamy człowieka: z jego ostatecznym zachowaniem: myśl.
Prawdę mówiąc, to nie chcę bawić się w dokładne odwzorowanie tego modelu. Wystarczy mi uproszczony model, który wyjaśni mi pewne szczegóły leżące w różnych kombinacjach dziedziczenia. Kiedy lepiej użyć interfejsów dziedziczących hierarchicznie lub "promieniście" (tak nazwałem sytuację, kiedy jedna klasa instancjonowalna dziedziczy bezpośrednio od wielu interfejsów - w końcu w C# to możliwe - przeciwnie do klas abstrakcyjnych, które wymuszają dziedziczenie liniowe, jedna po drugiej).
Różnice występujące pomiędzy: 1. Dziedziczeniem prostym (jedna klasa po drugiej) 2. Dziedziczenie liniowe wielu klas 3. Sposoby dziedziczenia z użyciem interfejsów 4. Kiedy lepiej użyć klasy abstrakcyjnej z abstrakcyjną metodą a kiedy ze zwykłą, non-abstract metodą? Kiedy lepiej jest użyć wyłącznie interfejsów do dziedziczenia bezpośredniego, a kiedy zrobić z tego hierarchię interfejsów, albo nawet "pajęczynę" interfejsów? 5. Kiedy użyć metod wirtualnych?
Z góry dzięki za odpowiedź. Mogą być linki do materiałów po ang.
Dziedziczenie hierarchiczne liniowe klas abstrakcyjnych: klasa może w C# dziedziczyć po więcej jak 1 klasie.
Aż musiałem zweryfikować swoją wiedzę i jednak nic się nie zmieniło - klasa w c# może dziedziczyć po jednej klasie. Za to może implementować ile chce interfejsów. Z tym że zapisuję się to tak samo: class NaszaKlasa : ToCoDziedziczone, OrazImplementowane, KolejnyInterfejs
Gdzie w Javie mamy po pierwsze keywordsy, po drugie są to oddzielne keywordsy: class
@fenix7557: Tak, dziedziczenie po 1 klasie na raz, ale można stworzyć hierarchię klas. Powiedzmy, z 10 klas abstrakcyjnych połączonych ze sobą liniowo i jedna klasa podstawowa instancjonowalna. I wtedy właśnie ta klasa na samym dole będzie mogła (w przypadku zwykłych metod) lub będzie musiała (w przypadku metod abstrakcyjnych) implementować te metody.
Jest tutaj ktoś kto mógłby mi wytłumaczyć wszystkie kombinacje dziedziczenia i praktyczne ich zastosowania?
Zacznijmy od tego, że proste dziedziczenie jest bez sensu: kategoria nie powinna mieć swoich instancji.
Wiem, że dziedziczenie nie powstało z myślą o dobrym opisie rzeczywistego świata, ale raczej jako pomoc uporządkowaniem kodu. Generalnie mój cel to po prostu dobre opanowanie tematu dziedziczenia od strony teoretycznej i praktycznej (kiedy dokładnie stosować dany typ dziedziczenia).
Dziedziczenie hierarchiczne liniowe klas abstrakcyjnych: klasa może w C# dziedziczyć po więcej jak 1 klasie. OK. Jedyny przykład jaki przyszedł mi do głowy to ten w załączonym obrazku poniżej. Idąc od samej góry, czyli matematyki, mamy następnie fizykę która dziedziczy pewne cechy matematyczne, jak PI, złotą liczbę, prawa i tak dalej. Następnie mamy chemię - chemia to po prostu fizyka wychodząca z poziomu atomowego na poziom cząsteczkowy. Następnie mamy biologię, która za pomocą chemii tworzy struktury wykorzystujące energię i materię otoczenia, do samoreplikowania się (poprzez biochemię: wszystkie te szlaki metaboliczne). Na biologii już kończę wywód, bo następna kategoria u mnie przechodzi z jednokomórkowca na wielokomórkowca - ciągle jedna komórka ma pewne podstawowe dane składowe (ilość organelli, objętość, parametry jak turgor komórki) oraz metody (np. fotosyntezuj jeżeli masz dostęp do światła, dziel się jeżeli urosłaś do wystarczających rozmiarów). Wielokomórkowce to zespół komórek, bez wydzielonej komórki sterującej. Potem mamy organowce: wielokomórkowiec podzielił się wewnętrznie na wyspecjalizowane rejony, które mimo wszystko potrzebują całości do egzystencji (serce, wątroba i tak dalej). Na samym końcu może mamy jakieś zwierze. Jakieś proste: na przykład rybę. Ryba ma proste zachowania (metody) czyli jeść, chronić się, rozmnażać. Potem mamy jakieś wyższe ewolucyjnie organizmy, np. ssaki. Ssak ssie mleko swojej matki i rodzi żyworodnie (tutaj mamy jeszcze metodę zarezerwowaną tylko dla samic). Następnie mamy człowieka: z jego ostatecznym zachowaniem: myśl.
Prawdę mówiąc, to nie chcę bawić się w dokładne odwzorowanie tego modelu. Wystarczy mi uproszczony model, który wyjaśni mi pewne szczegóły leżące w różnych kombinacjach dziedziczenia. Kiedy lepiej użyć interfejsów dziedziczących hierarchicznie lub "promieniście" (tak nazwałem sytuację, kiedy jedna klasa instancjonowalna dziedziczy bezpośrednio od wielu interfejsów - w końcu w C# to możliwe - przeciwnie do klas abstrakcyjnych, które wymuszają dziedziczenie liniowe, jedna po drugiej).
Różnice występujące pomiędzy:
1. Dziedziczeniem prostym (jedna klasa po drugiej)
2. Dziedziczenie liniowe wielu klas
3. Sposoby dziedziczenia z użyciem interfejsów
4. Kiedy lepiej użyć klasy abstrakcyjnej z abstrakcyjną metodą a kiedy ze zwykłą, non-abstract metodą? Kiedy lepiej jest użyć wyłącznie interfejsów do dziedziczenia bezpośredniego, a kiedy zrobić z tego hierarchię interfejsów, albo nawet "pajęczynę" interfejsów?
5. Kiedy użyć metod wirtualnych?
Z góry dzięki za odpowiedź. Mogą być linki do materiałów po ang.
źródło: comment_1AUs6LeeMvJogeA4dlSvCyB8oRkirhyR.jpg
Pobierzźródło: comment_C5bY7EW7hzEovDUbXewGlWtNw6ItsT1U.jpg
PobierzAż musiałem zweryfikować swoją wiedzę i jednak nic się nie zmieniło - klasa w c# może dziedziczyć po jednej klasie. Za to może implementować ile chce interfejsów. Z tym że zapisuję się to tak samo:
class NaszaKlasa : ToCoDziedziczone, OrazImplementowane, KolejnyInterfejs
Gdzie w Javie mamy po pierwsze keywordsy, po drugie są to oddzielne keywordsy:
class
Prosty schemat: http://hastebin.com/olasuhohay.vala
Tak apropo, ze względu na to, że od niedawna bawię się WPF, to interesuje mnie jak wygląda