Skirtumas tarp virtualaus ir abstraktaus

Skirtumas tarp virtualaus ir abstraktaus
Skirtumas tarp virtualaus ir abstraktaus

Video: Skirtumas tarp virtualaus ir abstraktaus

Video: Skirtumas tarp virtualaus ir abstraktaus
Video: Урок№6 SaaS программное обеспечение как услуга 2024, Lapkritis
Anonim

Virtualus prieš abstraktųjį

Virtual ir Abstract yra du raktiniai žodžiai, naudojami daugelyje objektų orientuotų (OO) programavimo kalbų, tokių kaip Java ir C. Nors yra nedidelių skirtumų, ką tai reiškia skirtingomis kalbomis, tiek virtualūs, tiek abstraktūs raktiniai žodžiai suteikia dalinio įgyvendinimo jausmą objektams, prie kurių jie prijungti.

Abstrakcija

Paprastai abstrakčių klasių, dar žinomų kaip abstrakčios pagrindinės klasės (ABC), negalima sukurti (negalima sukurti tos klasės egzemplioriaus). Taigi, abstrakčiosios klasės yra prasmingos tik tuo atveju, jei programavimo kalba palaiko paveldėjimą (galimybę sukurti poklasius išplečiant klasę). Abstrakčios klasės paprastai reiškia abstrakčią sąvoką arba subjektą, kuris iš dalies įgyvendinamas arba jo nėra. Todėl abstrakčios klasės veikia kaip pagrindinės klasės, iš kurių gaunamos antrinės klasės, todėl antrinė klasė dalinsis nepilnomis pagrindinės klasės savybėmis ir jas užbaigti galima pridėti funkcijų. Abstrakčiose klasėse gali būti abstrakčių metodų. Poklasiai, išplečiantys abstrakčią klasę, gali įgyvendinti šiuos (paveldėtus) abstrakčiuosius metodus. Jei antrinė klasė įgyvendina visus tokius abstrakčius metodus, tai yra konkreti klasė. Bet jei ne, vaikų klasė taip pat tampa abstrakčia klase. Visa tai reiškia, kad kai programuotojas paskiria klasę kaip santrauką, ji sako, kad klasė bus neužbaigta ir joje bus elementų, kuriuos turės užpildyti paveldintys poklasiai. Tai puikus būdas sudaryti sutartį tarp dviejų programuotojų, o tai supaprastina programinės įrangos kūrimo užduotis. Programuotojas, rašantis kodą paveldėti, turi tiksliai laikytis metodo apibrėžimų (tačiau, žinoma, gali turėti savo įgyvendinimą). Java ir C abstrakčios klasės ir metodai deklaruojami naudojant Abstract raktinį žodį.

Virtualus

Virtualūs metodai / funkcijos suteikia galimybę pasirinktinai nepaisyti jo elgsenos paveldinčia klase (naudojant funkciją su tuo pačiu parašu). Virtualios funkcijos koncepcija yra svarbi tokiame scenarijuje. Tarkime, kad klasę išveda antrinė klasė, tada, kai naudojamas išvestinės klasės objektas, jis gali nurodyti bazinės klasės arba išvestinės klasės objektą. Tačiau metodų iškvietimo elgsena gali būti dviprasmiška, jei nepaisomi bazinės klasės metodai. Taigi, norint išspręsti šią dviprasmybę, naudojamas virtualus raktinis žodis. Jei metodas pažymėtas Virtualus, tada iškviečiama išvestinės klasės funkcija (jei yra) arba bazinės klasės funkcija. Pavyzdžiui, C++ kalboje virtualus raktinis žodis naudojamas būtent šiam tikslui. C kalboje virtualus raktinis žodis naudojamas panašiai, tačiau be to, raktinio žodžio nepaisymas turėtų būti naudojamas visiems nepaisytam metodams modifikuoti. Tačiau „Java“nėra aiškaus virtualaus raktinio žodžio. Visi nestatiniai metodai laikomi virtualiais. Virtualios funkcijos be kūno vadinamos grynosiomis virtualiomis funkcijomis. Java ir C, abstraktūs metodai iš tikrųjų yra grynas virtualus.

Skirtumas tarp virtualaus ir abstraktaus

Nors abstrakčiai ir virtualiai yra du raktiniai žodžiai/sąvokos, suteikiančios nebaigto įgyvendinimo prasmę susijusiems objektams, jie turi savo skirtumų. Abstraktūs metodai (kurie turi būti apibrėžti abstrakčiose klasėse) neturi įgyvendinimo, o virtualūs metodai gali turėti įgyvendinimą. Jei abstraktūs metodai išplečiami konkrečia klase, visi paveldėti abstraktūs metodai turi būti įgyvendinti, o paveldėti virtualūs metodai gali būti nepaisomi.

Rekomenduojamas: