Abstrakčioji klasė prieš konkretų klasę
Dauguma populiarių šiuolaikinių objektinio programavimo kalbų, tokių kaip Java ir C, yra pagrįstos klasėmis. Naudodami klases jie pasiekia į objektą orientuotas sąvokas, tokias kaip inkapsuliavimas, paveldėjimas ir polimorfizmas. Klasės yra abstraktus realaus pasaulio objektų vaizdas. Klasės gali būti konkrečios arba abstrakčios, priklausomai nuo jų metodų funkcijų įgyvendinimo lygio. Betono klasė visiškai įgyvendina visus savo metodus. Abstrakčią klasę galima laikyti ribota įprastos (konkrečios) klasės versija, kurioje gali būti iš dalies įgyvendintų metodų. Paprastai konkrečios klasės vadinamos (tik) klasėmis.
Kas yra betono klasė?
Numatytoji klasė yra konkreti klasė. Klasės raktinis žodis naudojamas klasėms apibrėžti (pvz., Java). Ir dažniausiai jie tiesiog vadinami klasėmis (be būdvardžio konkretus). Konkrečios klasės vaizduoja konceptualų realaus pasaulio objektų vaizdavimą. Klasės turi savybių, vadinamų atributais. Atributai įgyvendinami kaip pasauliniai ir egzempliorių kintamieji. Klasių metodai atspindi arba apibrėžia šių klasių elgesį. Klasių metodai ir atributai vadinami klasės nariais. Paprastai inkapsuliavimas pasiekiamas padarant atributus privačiais, tuo pačiu sukuriant viešuosius metodus, kuriuos galima naudoti norint pasiekti šiuos atributus. Objektas yra klasės egzempliorius. Paveldėjimas leidžia vartotojui išplėsti klases (vadinamas subklasėmis) iš kitų klasių (vadinamų super klasėmis). Polimorfizmas leidžia programuotojui pakeisti klasės objektą vietoj jo super klasės objekto. Paprastai problemos apibrėžime rasti daiktavardžiai tiesiogiai tampa programos klasėmis. Ir panašiai veiksmažodžiai tampa metodais. Viešasis, privatus ir apsaugotas yra tipiniai prieigos modifikatoriai, naudojami klasėms.
Kas yra abstrakčioji klasė?
Abstrakčios klasės deklaruojamos naudojant Abstract raktinį žodį (pvz., Java,). Paprastai abstrakčios klasės, dar žinomos kaip abstrakčios pagrindinės klasės (ABC), negali būti sukurtos (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 ypatybėmis, o joms 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 vaikų klasė įgyvendina visus tokius abstrakčius metodus, ji tampa konkrečia klase. 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ą).
Kuo skiriasi abstrakčioji klasė ir konkreti klasė?
Abstrakčios klasės paprastai įgyvendinamos iš dalies arba visai neįgyvendinamos. Kita vertus, konkrečios klasės visada visiškai įgyvendina savo elgesį. Skirtingai nuo konkrečių klasių, abstrakčių klasių negalima kartoti. Todėl abstrakčias klases reikia išplėsti, kad jos būtų naudingos. Abstrakčiose klasėse gali būti abstrakčių metodų, bet konkrečiose klasėse negali būti. Išplečiant abstrakčią klasę, visi metodai (ir abstraktūs, ir konkretūs) yra paveldimi. Paveldima klasė gali įgyvendinti bet kurį arba visus metodus. Jei visi abstraktūs metodai neįdiegti, ta klasė taip pat tampa abstrakčia klase.