Skirtumas tarp abstrakčios klasės ir sąsajos

Anotacija klasė prieš sąsają

Anotacija klasė ir sąsaja yra du objekto orientuoti konstruktai, randami daugelyje objektinio programavimo kalbų, tokių kaip Java. Abstrakti klasė gali būti laikoma abstrakčia įprastos (konkrečios) klasės versija, o sąsaja gali būti laikoma sutarties vykdymo priemone. Anotacija yra klasė, kurios negalima inicijuoti, tačiau ją galima pratęsti. Sąsaja yra tipas, kurį turi įgyvendinti kitos klasės. „Java“ sistemoje „Abstract“ klasės deklaruojamos naudojant „Abstract“ raktinį žodį, o sąsajos raktinis žodis naudojamas sąsajai apibrėžti.

Kas yra abstrakčioji klasė?

Paprastai abstrakčiosios klasės, taip pat žinomos kaip „Abstract Base Classes“ (ABC), negali būti realizuotos (tos klasės egzemplioriaus sukurti negalima). Taigi abstrakčiosios klasės turi prasmę tik tuo atveju, jei programavimo kalba palaiko paveldėjimą (galimybė kurti poklasius pratęsiant klasę). Abstrakčios klasės paprastai reiškia abstrakčią sąvoką ar subjektą, iš dalies arba visai neįdiegtus. Todėl abstrakčios klasės veikia kaip tėvų klasės, iš kurių išvedamos vaikų klasės, kad vaikų klasė pasidalintų neišsamiomis tėvų klasės ypatybėmis, ir, norint jas papildyti, gali būti pridedamos funkcijos.

Abstrakčių klasėse gali būti abstrakčių metodų. Poklasiai, praplečiantys abstrakčią klasę, gali įgyvendinti šiuos (paveldėtus) abstrakčių metodus. Jei vaikų klasė įgyvendina visus tokius abstrakčius metodus, tai yra konkreti klasė. Bet jei taip nėra, vaikų klasė taip pat tampa abstrakčia klase. Visa tai reiškia, kad kai programuotojas paskiria klasę kaip santrauką, ji sako, kad klasė bus neišsami ir joje bus elementų, kuriuos turi užpildyti paveldintys poklasiai. Tai puikus būdas sudaryti sutartį tarp dviejų programuotojų, o tai supaprastina programinės įrangos kūrimo užduotis. Programuotojui, rašančiam kodą paveldėti, reikia tiksliai laikytis metodo apibrėžimų (bet, žinoma, jis gali turėti savo įgyvendinimą).

Kas yra sąsaja?

Sąsaja yra abstraktus tipas, naudojamas nurodyti sutartį, kurią turėtų įgyvendinti klasės, įgyvendinančios tą sąsają. Sąsajos raktinis žodis naudojamas sąsajai apibrėžti, o „Implements“ raktinis žodis naudojamas sąsajai įgyvendinti klasėje („Java“ programavimo kalba). Paprastai sąsajoje bus tik metodo parašai ir nuolatinės deklaracijos. Bet kuri sąsaja, įgyvendinanti tam tikrą sąsają, turėtų įgyvendinti visus sąsajoje apibrėžtus metodus arba turėtų būti paskelbta abstrakčia klase. „Java“ objekto nuorodos tipas gali būti apibrėžtas kaip sąsajos tipas. Bet tas objektas neturi būti niekinis arba turėtų būti klasės objektas, įgyvendinantis tą konkrečią sąsają. Naudodami „Java“ raktinį žodį „Įgyvendina“, galite įdiegti kelias sąsajas į vieną klasę.

Kuo skiriasi „Abstract Class“ ir „Interface“?

Abstrakčios klasės paprastai reiškia abstrakčią sąvoką arba subjektą, iš dalies arba visai neįdiegtą. Kita vertus, sąsaja yra abstraktus tipas, naudojamas nurodyti sutartį, kurią turėtų įgyvendinti klasės. Abstrakčios klasės turėtų būti paveldimos (arba pratęstos), o sąsajos turėtų būti įgyvendintos. Abstrakčiosiose klasėse gali būti abstrakčių metodų, tuo tarpu sąsajoje turėtų būti tik abstraktūs metodai. Anotacinėse klasėse gali būti bet kokių kintamųjų, tačiau sąsajos gali apibrėžti tik konstantas. Klasė negali paveldėti iš daugiau nei vienos abstrakčios klasės, tačiau gali įgyvendinti kelias sąsajas. Sąsaja negali įgyvendinti kitos sąsajos. Tačiau sąsaja gali pratęsti klasę.