Różnica między wirtualnym a abstrakcyjnym

Różnica między wirtualnym a abstrakcyjnym
Różnica między wirtualnym a abstrakcyjnym

Wideo: Różnica między wirtualnym a abstrakcyjnym

Wideo: Różnica między wirtualnym a abstrakcyjnym
Wideo: SaaS vs Open Source, trzy różnice, jeden mit - Po drodze z e-commerce #1 2024, Lipiec
Anonim

Wirtualne kontra abstrakcyjne

Virtual i Abstract to dwa słowa kluczowe używane w większości języków programowania zorientowanych obiektowo (OO), takich jak Java i C. Chociaż istnieją niewielkie różnice w znaczeniu tego słowa w różnych językach, zarówno wirtualne, jak i abstrakcyjne słowa kluczowe zapewniają poczucie częściowej implementacji encji, do których są przyłączane.

Streszczenie

Zazwyczaj klasy abstrakcyjne, znane również jako abstrakcyjne klasy bazowe (ABC), nie mogą być tworzone (nie można utworzyć wystąpienia tej klasy). Tak więc klasy abstrakcyjne mają sens tylko wtedy, gdy język programowania obsługuje dziedziczenie (możliwość tworzenia podklas z rozszerzenia klasy). Klasy abstrakcyjne zwykle reprezentują abstrakcyjną koncepcję lub jednostkę z częściową implementacją lub bez implementacji. Dlatego klasy abstrakcyjne działają jako klasy nadrzędne, z których pochodzą klasy podrzędne, dzięki czemu klasa podrzędna będzie współdzielić niekompletne cechy klasy nadrzędnej, a funkcjonalność można dodać w celu ich ukończenia. Klasy abstrakcyjne mogą zawierać metody abstrakcyjne. Podklasy rozszerzające klasę abstrakcyjną mogą implementować te (dziedziczone) metody abstrakcyjne. Jeśli klasa potomna implementuje wszystkie takie metody abstrakcyjne, jest to klasa konkretna. Ale jeśli tak nie jest, klasa potomna staje się również klasą abstrakcyjną. Oznacza to, że kiedy programista wyznacza klasę jako Abstrakt, mówi, że klasa będzie niekompletna i będzie zawierała elementy, które muszą zostać uzupełnione przez dziedziczące podklasy. To fajny sposób na stworzenie kontraktu między dwoma programistami, który upraszcza zadania w tworzeniu oprogramowania. Programista, który pisze kod do dziedziczenia, musi dokładnie przestrzegać definicji metod (ale oczywiście może mieć własną implementację). W Javie i C klasy i metody abstrakcyjne są deklarowane za pomocą słowa kluczowego Abstract.

Wirtualne

Wirtualne metody/funkcje zapewniają możliwość opcjonalnego nadpisania jego zachowania przez klasę dziedziczącą (za pomocą funkcji o tej samej sygnaturze). Pojęcie funkcji wirtualnej jest ważne w następującym scenariuszu. Załóżmy, że klasa jest pochodną klasy podrzędnej, to za każdym razem, gdy używany jest obiekt klasy pochodnej, może odnosić się do obiektu klasy bazowej lub klasy pochodnej. Jednak zachowanie wywołania metody może być niejednoznaczne, jeśli metody klasy bazowej są zastępowane. Tak więc, aby rozwiązać tę niejednoznaczność, używane jest słowo kluczowe Virtual. Jeśli metoda jest oznaczona jako Virtual, to wywoływana jest funkcja klasy pochodnej (jeśli istnieje) lub wywoływana jest funkcja klasy bazowej. Na przykład w C++ słowo kluczowe Virtual jest używane właśnie w tym celu. W języku C słowo kluczowe Virtual jest używane w podobny sposób, ale dodatkowo słowo kluczowe override powinno być używane do modyfikowania wszystkich przesłoniętych metod. Ale w Javie nie ma wyraźnego słowa kluczowego Virtual. Wszystkie metody niestatyczne są uważane za wirtualne. Funkcje wirtualne bez ciała nazywane są czystymi funkcjami wirtualnymi. W Javie i C metody abstrakcyjne są w rzeczywistości Pure Virtual.

Różnica między wirtualnym a abstrakcyjnym

Chociaż Abstrakcyjny i Wirtualny to dwa słowa kluczowe/koncepcje, które zapewniają znaczenie niepełnej implementacji powiązanym encji, różnią się między sobą. Metody abstrakcyjne (które muszą być zdefiniowane wewnątrz klas abstrakcyjnych) w ogóle nie mają implementacji, podczas gdy metody wirtualne mogą mieć implementację. Jeśli metody abstrakcyjne są rozszerzone o konkretną klasę, wszystkie odziedziczone metody abstrakcyjne muszą być zaimplementowane, podczas gdy dziedziczone metody wirtualne mogą lub nie mogą być nadpisane.

Zalecana: