• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Metody abstrakcyjne. Po co?

Object Storage Arubacloud
0 głosów
812 wizyt
pytanie zadane 27 lipca 2019 w C# przez TracerYT Początkujący (440 p.)

Każdy doświadczony w programowaniu nie tylko w c# wie co to są metody abstrakcyjne, klasy itd.

Moim pytaniem jest: Po co się ich używa? W jakich sytuacjach i dlaczego?

2 odpowiedzi

+1 głos
odpowiedź 27 lipca 2019 przez Antero00 Gaduła (3,670 p.)
komentarz 27 lipca 2019 przez TracerYT Początkujący (440 p.)
No właśnie problem w tym, że czytałem to i nadal nie rozumiem xd.
+1 głos
odpowiedź 19 maja 2020 przez cSharpKazik Użytkownik (840 p.)
Zobacz na ten artykuł, powinien Ci dużo wyjaśnić w kwestii abstrakcji. Starałem się pisać w ten sposób, aby było zrozumiale dla osób, które dopiero zaczynają naukę obiektowości, na przykładach w C#: https://www.modestprogrammer.pl/co-to-jest-abstrakcja-w-programowaniu-obiektowym
komentarz 19 maja 2020 przez TracerYT Początkujący (440 p.)
Okej już rozumiem, ale można zamiast klasy abstrakcyjnej zrobić zwykłą funkcję i będzie działać tak samo szybko
komentarz 19 maja 2020 przez JAKUBW Nałogowiec (33,470 p.)
Ale czasami chcesz skorzystać z polimorfizmu, pomyśl: piszesz klasę, która zapisuje i odczytuje swoje dane. Zapisuje je w formie binarnej. No ale do czego zapisuje? Załóżmy, że chcesz czasami zapisywać do pliku a czasami chcesz wysłać przez sieć. Gdyby nie metody abstrakcyjne, dziedziczenie i polimorfizm musiałbyś pisać 2 implementacje tego samego. Do tego jak zmienisz coś w jednej, to nie zapomnieć zmienić tego w drugiej - bez sensu. Dzięki abstrakcyjności możesz zapisywać do Strumienia, który nie ważne jaki jest - czy sieciowy, czy plikowy. Twoją klasę to nie obchodzi, ważne, żeby strumień miał metodę abstrakcyjną write, która przyjmuje za parametr bajty. Ta abstrakcyjna jest zaimplementowana w konkretnej klasie - np. FileOutputStream albo NetworkOutputStream albo jeszcze jakieś innej. Ale ciebie jej implementacja nie obchodzi.

Gdy zaczniesz robić większe projekty to zrozumiesz to wszystko, ja też tak miałem, wydawało mi się do bez sensu, ale jak skorzystałem to mnie oświeciło i zrozumiałem dlaczego to tak jest.
komentarz 19 maja 2020 przez manjaro Nałogowiec (37,390 p.)
A co jeśli w klasie dziedziczącej nie potrzebuję tej metody z abstrakcyjnej kalsy nadrzędnej ale i tak muszę ją dziedziczyć... Trochę to bez sensu.
komentarz 20 maja 2020 przez JAKUBW Nałogowiec (33,470 p.)
Jeżeli nie potrzebujesz a musisz to znaczy, że źle zaprojektowałeś swoje klasy. Może warto tą metodę wrzucić do osobnego interfejsu?
komentarz 20 maja 2020 przez manjaro Nałogowiec (37,390 p.)

No chodzi mi o ten przykład z odpowiedzi Antero00. Klasa zwierzę i metoda abstrakcyjna ZucieTrawy(). Krowa, owca, koza będą korzystać z tej metody ale już np pies nie będzie. A chcąc nie chcąc muszę u psa też to implementować bo JAVA wymusza to, nie wiem jak inne języki.

komentarz 21 maja 2020 przez JAKUBW Nałogowiec (33,470 p.)
To znaczy, że klasa zwierze jest źle zaprojektowana. Metoda ZucieTrawy powinna być w osobnym interfejsie ZjadaczeTrawy. Tedy owca i krowa implementują zarówno metody od Zwierzę jak i ZjadaczeTrawy. Natomiast pies tylko od Zwierzę. To jak zaprojektujesz swoje interfejsy zależy od ciebie i wymagań projektu, czasami warto rozdzielać pewne cechy a czasami nie. Jeżeli potrzebujesz jakiegoś przykładu projektu z takim dziedziczeniem to spójrz na API Spioga - serwera Minecraft umożliwiającego tworzenie pluginów, jak grałeś w Minecrafta to się połapiesz co oznaczają poszczególne klasy i jakie mają znaczenie w grze.

Dla przykładu Szkieletowy koń: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/SkeletonHorse.html

Implementuje masę interfejsów: AbstractHorse, Ageable, Animals, Attributable, CommandSender, Creature, Damageable, Entity, InventoryHolder, LivingEntity, Lootable, Metadatable, Mob, Nameable, Permissible, PersistentDataHolder, ProjectileSource, ServerOperator, Tameable, Vehicle

Każdy z nich dodaje jakieś metody, własności do klasy i w sumie zapewniają dziesiątki metod, można sobie zobaczyć które interfejsu co dają

Podobne pytania

+2 głosów
1 odpowiedź 215 wizyt
pytanie zadane 12 marca 2023 w C# przez piter11251 Obywatel (1,280 p.)
+9 głosów
0 odpowiedzi 419 wizyt
pytanie zadane 24 grudnia 2018 w JavaScript przez Comandeer Guru (601,110 p.)
0 głosów
4 odpowiedzi 1,819 wizyt
pytanie zadane 27 sierpnia 2018 w Java przez periedynek Obywatel (1,320 p.)

92,566 zapytań

141,420 odpowiedzi

319,610 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...