520 Shares 3423 views

Klasa abstrakcyjna i metoda: opis, charakterystyka i cechy. Jaka jest różnica między klasą abstrakcyjną a interfejsem

Każdy, kto ma minimalną wiedzę na temat programowania, zastanawiał się, dlaczego istnieją abstrakcyjne klasy bazowe. Jaki jest ich cel? Jak utworzyć klasę abstrakcyjną? Jakie są zalety w praktyce? Dlaczego są potrzebne w programowaniu i jakie cechy ich realizacji powinny być brane pod uwagę?

Klasy abstrakcyjne

W programowaniu nazywa się jednostką kodu programu, na podstawie której nie można tworzyć obiektów. Należy zauważyć, że spadkobiercy tej klasy nie mogą być abstrakcyjni. Dlatego utworzenie obiektów na ich podstawie jest całkiem możliwe. Jeśli rozważymy przykład z Javy, skonstruujemy taki model: możemy opisać konstruktory w klasie A. Ale nie możemy ich użyć. Wyjściem z tej sytuacji jest zadeklarowanie zmiennej jako odniesienia. I trzeba jasno stwierdzić, że wskazuje na przedmiot klasy A. Ale jak to możliwe? Obsada nam pomoże. Należy zauważyć, że klasa macierzysta jest zawsze uważana za bardziej uniwersalną niż dziecko. W wielu językach programowania obsada jest używana automatycznie. Jeśli jednak nie ma zaufania do dostępności takiego mechanizmu, musisz wyraźnie określić odniesienie do obiektu.

Metody abstrakcyjne

Co oni? Metodami abstrakcyjnymi są te, które nie mają zastosowania w danej klasie. Tak więc, po nawiasach (w których wymienione są używane argumenty) umieść nie zakręconą kreskę (po której umieszcza się blok opisu metody), ale tylko średnik. Tak więc w tym przypadku nie ma informacji na temat tego, co robi. Tutaj można zadać pytanie: "Dlaczego metoda bez wdrożenia?" W końcu nie można tego użyć! Oczywiście nie jest to możliwe w klasie, w której została opisana. Jeśli jednak rozważymy tę sytuację z punktu widzenia następcy, można to nazwać. I będzie funkcjonować zgodnie ze szczegółowym opisem dostępnym w tej klasie.

Cechy abstrakcyjnych metod

Istnieją ograniczenia w ich użyciu. Rozważmy to w przykładzie języka programowania Java. Istnieje taki wymóg: jeśli w tej klasie jest co najmniej jedna taka metoda, musi to być streszczenie. I w jakich przypadkach warto zastosować takie konstrukcje? Spójrzmy na to w przypadku klas domowych. Na początek należy zrozumieć, że nie ma dźwięku, który wszyscy publikują. Dlatego w najbardziej ogólnej klasie nie jest określona implementacja metody dźwięku. Ale dla niego powstaje ciało, które jest oddzielone blokami. I już w przyszłości, gdy zostanie utworzona klasa psów, kotów lub chomików, zostanie przepisana oddzielna metoda, w ramach której zostaną ujawnione wszystkie funkcje.

Interfejs

W programowaniu powstało wiele narzędzi, których celem jest pomaganie osobie w wytwarzaniu produktu o dobrej jakości. W ramach omawianego tematu należy zwrócić uwagę na ten aspekt, aby każdy zna różnicę między klasą abstrakcyjną a interfejsem. Specyfika tego ostatniego polega na tym, że nie może mieć właściwości, a metody nie mają ciała. Odkrywając różnicę pomiędzy klasą abstrakcyjną a interfejsem, należy zwrócić uwagę na jeszcze jedną. Więc pierwsza jest dziedziczna, podczas gdy druga jest realizowana. Dla niedoświadczonej osoby to może wydawać się mało znaczące. Ale faktem jest, że tylko jedna klasa może zostać odziedziczona i można ją zaimplementować tyle, ile chcesz. W ten sposób interfejs różni się od klasy abstrakcyjnej. Java posiada inne funkcje, które mogą opisywać jedynie abstrakcyjne metody publiczne i stałe stałe statyczne. Ale interfejsy mogą być dziedziczone. W tym przypadku należy wskazać, że używane podmioty są publicznie dostępne publicznie.

Wielokrotne dziedziczenie interfejsu

Ta funkcja nie jest dostępna dla klas w wielu językach programowania (na przykład w Javie, którą rozważamy). Wynika to z wielu problemów. Jako taki wskaż niejednoznaczność, która pojawia się podczas dziedziczenia. Było to powodem wprowadzenia wielu interfejsów dziedziczenia. To częściowo rozwiązuje istniejące problemy, ale nie wszystkie. Tak więc, dzięki zasadom kapsułkowania i polimorfizmu, interfejsy mogą być z powodzeniem wdrażane w różnych klasach różnymi metodami (chociaż będą miały tę samą nazwę). Ale nie zapominaj o istniejących problemach. Więc podczas pracy z wieloma interfejsami zawsze musisz określić, o co chodzi. Również będą problemy podczas próby pracy z dwoma metodami o tej samej nazwie, w takim przypadku nie mogą być używane. Dlatego w takich przypadkach konieczne jest dbanie o dostępność wspólnej implementacji.

Dane abstrakcyjne

Ta koncepcja ma kluczowe znaczenie w programowaniu. W tym przypadku abstrakcja rozumiana jest jako niezależna analiza i rozdzielenie interfejsu i jego implementacja. Spójrzmy na przykład. Mamy telewizor, który jest obiektem lub modułem. Ma interfejs. Jako takie istnieją kontrole, a także odtwarzanie dźwięku i obrazu. Im bardziej zaawansowany jest interfejs, tym wygodniejszy jest telewizor w trakcie użytkowania. Możemy przełączać programy klikając na dowolne przyciski. W takim przypadku nie trzeba myśleć o fizycznych procesach w telewizorze. Zajmują się specjalistami zbierającymi urządzenie. Interesują nas tylko osoby jako użytkownicy. Wracając do programowania, możemy powiedzieć, że są to analogie są interfejsem i implementacją. Ponadto, jeśli dana osoba jest pewna swojej wiedzy, może "zdjąć" okładkę z naszego hipotetycznego telewizora i poprawić jego jakość. Chociaż może to prowadzić do lokalnych sukcesów, w większości przypadków wynik końcowy jest ujemny. Dlatego też programowanie zabrania dostępu i ukrywa wewnętrzne elementy abstrakcyjnych danych. Zasada tego mechanizmu przewiduje sposoby zapobiegania przypadkowemu lub przypadkowemu zmianom elementów wewnętrznych. A gdy mówią o abstrakcyjnych typach danych, oznaczają ich łączną liczbę operacji, które mogą być wykonywane na nich.

Obiekty

Zbadaliśmy już abstrakcyjnie klasę i interfejs ogólnie i generalnie. Teraz przejrzyjmy naszą wiedzę. Najpierw skupimy się na przedmiotach. Przez nich w ogólnym przypadku rozumie się część otaczającej rzeczywistości, która istnieje w przestrzeni i czasie. Ale raczej trudno formalnie zdefiniować obiekty w ramach programowania (z filozoficznego i teoretycznego punktu widzenia). Dlatego jest to spowodowane własnościami. Jako przykład można wymienić: obiekt może być jednoznacznie zidentyfikowany (ma unikalną nazwę), znajduje się w pewnym stanie i wykorzystuje określony model zachowania.

Dziedzictwo

Ponieważ programowanie polega na budowaniu hierarchicznego drzewa powiązań między obiektami, pojawia się pytanie, że właściwości bibliotek kodów macierzystych powinny być przenoszone do typów bazowych. Dziedziczenie rozumiane jest jako związek, gdy powtarza się zachowanie i strukturę czegoś innego. W zwykłym życiu, można go znaleźć wszędzie. Zostało ono również przekazane do programowania w odniesieniu do elementów abstrakcyjnych. Jako porównanie możemy przytoczyć fakt, że nie ma takiego organizmu jak ptak. Jest to abstrakcyjna nazwa. Jako szczególną okazję przynoszą mewę, nocny wróbel lub wróbel. Dzięki dziedziczeniu możemy używać bibliotek klasowych, a także rozwijać je dla konkretnego programu. Takie narzędzie pozwala nam tworzyć nowe obiekty, jednocześnie dodając lub zmieniając właściwości już stworzone. Następca dziedziczy wszystkie metody i dziedziny jego przodka, a jeśli to konieczne zdobywa własne atrybuty. Ze względu na fakt, że istnieją elementy abstrakcyjne i zasada dziedzictwa, istnieją obszerne możliwości modyfikacji w ramach programowania obiektowego. Ponadto pozwala na elastyczne podejście do rozwiązania zadań. Po dziedziczeniu, dane i funkcje są przekazywane do nowej klasy.

Polimorfizm

Konieczne jest zastosowanie tych samych funkcji w celu rozwiązania różnych rodzajów zadań. W takim przypadku istnieje możliwość wykonania różnych czynności, których treść będzie zależeć od rodzaju obiektu, z którym praca jest wykonywana. Polimorfizm jest rozumiany jako własność elementów, które mają wspólnego wspólnego z rodzicami, na różne sposoby w podobny sposób występują w znaczeniu semantycznym. Rysujemy analogię do zwierząt. Taka akcja – do uruchomienia. Wszyscy rozumiemy, jak to się dzieje. Ale z różnymi zwierzętami (lew, słoń, szympans, krokodyl, żółw) działanie to zostanie wykonane inaczej. W tym przypadku deweloper jest odpowiedzialny za ich ruch, który w razie potrzeby może powodować konkretny podprogram dla konkretnego przypadku, opracować algorytm i go z powodzeniem wdrożyć. Odbywa się to za pomocą zestawu metod. W tym przypadku w każdej osobnej klasie programista wskazuje, który obiekt ma właściwości, które są wrodzone. Zmieniając coś w potomkach, możesz osiągnąć pewne, konieczne w tym przypadku działania. Taki wpływ nazywa się polimorfizmem obiektów. Ogólnie rzecz biorąc, klasa abstrakcyjna jest bardzo użytecznym narzędziem programistycznym.