Forskellen mellem virtuel og abstrakt

Forskellen mellem virtuel og abstrakt
Forskellen mellem virtuel og abstrakt

Video: Forskellen mellem virtuel og abstrakt

Video: Forskellen mellem virtuel og abstrakt
Video: Знакомство с облачными технологиями: Модели облаков; Виртуализация; Гипервизор; IaaS-Saas-Paas 2024, November
Anonim

Virtuel kontra abstrakt

Virtual og Abstract er to nøgleord, der bruges i de fleste objektorienterede (OO) programmeringssprog såsom Java og C. Selvom der er små forskelle i, hvad det betyder på forskellige sprog, giver både virtuelle og abstrakte søgeord en følelse af delvis implementering til de enheder, det knytter sig til.

Abstract

Typisk kan abstrakte klasser, også kendt som abstrakte basisklasser (ABC), ikke instansieres (en forekomst af den klasse kan ikke oprettes). Så abstrakte klasser er kun meningsfulde at have, hvis programmeringssproget understøtter arv (evnen til at oprette underklasser fra at udvide en klasse). Abstrakte klasser repræsenterer norm alt et abstrakt koncept eller entitet med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som overordnede klasser, hvorfra underordnede klasser er afledt, så den underordnede klasse vil dele de ufuldstændige funktioner i den overordnede klasse, og funktionalitet kan tilføjes for at fuldføre dem. Abstrakte klasser kan indeholde abstrakte metoder. Underklasser, der udvider en abstrakt klasse, kan implementere disse (arvede) abstrakte metoder. Hvis børneklassen implementerer alle sådanne abstrakte metoder, er det en konkret klasse. Men hvis den ikke gør det, bliver børneklassen også en abstrakt klasse. Hvad alt dette betyder er, at når programmøren nominerer en klasse som et abstrakt, siger hun, at klassen vil være ufuldstændig, og den vil have elementer, der skal udfyldes af de nedarvede underklasser. Dette er en fin måde at skabe en kontrakt mellem to programmører på, hvilket forenkler opgaver inden for softwareudvikling. Programmøren, der skriver kode for at arve, skal følge metodedefinitionerne nøjagtigt (men kan selvfølgelig have sin egen implementering). I Java og C erklæres abstrakte klasser og metoder ved hjælp af abstrakt nøgleord.

Virtuel

Virtuelle metoder/funktioner giver mulighed for valgfrit at tilsidesætte dens adfærd af en arvende klasse (ved at bruge en funktion med samme signatur). Konceptet med virtuel funktion er vigtigt i følgende scenarie. Antag, at en klasse er afledt af en underklasse, så hver gang et objekt fra den afledte klasse bruges, kan det referere til et objekt af basisklassen eller den afledte klasse. Men metodekaldsadfærd kan være tvetydig, hvis basisklassemetoderne tilsidesættes. Så for at løse denne tvetydighed bruges Virtuelt nøgleord. Hvis metoden er markeret Virtual, kaldes den afledte klasses funktion (hvis nogen), eller også kaldes basisklassens funktion. For eksempel, i C++, bruges Virtuelt nøgleord netop til dette formål. I C bruges det virtuelle nøgleord på lignende måde, men derudover bør nøgleordet tilsidesætte bruges til at modificere alle tilsidesatte metoder. Men i Java er der ikke noget eksplicit virtuelt nøgleord. Alle ikke-statiske metoder betragtes som virtuelle. Virtuelle funktioner uden krop kaldes Pure Virtual-funktioner. I Java og C er abstrakte metoder faktisk Pure Virtual.

Forskel mellem virtuel og abstrakt

Selvom abstrakt og virtuelt er to nøgleord/koncepter, der giver en betydning af ufuldstændig implementering til dets tilknyttede enheder, har de deres forskelle. Abstrakte metoder (der skal defineres i abstrakte klasser) har slet ikke en implementering, mens virtuelle metoder kan have en implementering. Hvis abstrakte metoder udvides med en konkret klasse, skal alle nedarvede abstrakte metoder implementeres, mens nedarvede virtuelle metoder kan eller ikke kan tilsidesættes.

Anbefalede: