Abstract Class vs Concrete Class
De fleste av de populære moderne objektorienterte programmeringsspråkene som Java og C er klassebaserte. De oppnår de objektorienterte konseptene som innkapsling, arv og polymorfisme gjennom bruk av klasser. Klasser er en abstrakt representasjon av objekter i den virkelige verden. Klasser kan enten være konkrete eller abstrakte avhengig av implementeringsnivået til metodefunksjonene deres. En konkret klasse implementerer alle metodene fullstendig. En abstrakt klasse kan betraktes som en begrenset versjon av en vanlig (konkret) klasse, der den kan inneholde delvis implementerte metoder. Vanligvis blir betongklasser referert til som (bare) klasser.
Hva er betongklasse?
Standardklassen er en konkret klasse. Klassenøkkelordet brukes til å definere klasser (f.eks. i Java). Og vanligvis blir de ganske enkelt referert til som klasser (uten adjektivet konkret). Konkrete klasser skildrer den konseptuelle representasjonen av objekter i den virkelige verden. Klasser har egenskaper som kalles attributter. Attributter implementeres som globale og instansvariabler. Metoder i klassene representerer eller definerer oppførselen til disse klassene. Metoder og attributter til klasser kalles medlemmene av klassen. Vanligvis oppnås innkapsling ved å gjøre attributtene private, mens man oppretter offentlige metoder som kan brukes for å få tilgang til disse attributtene. Et objekt er forekomsten av en klasse. Arv lar brukeren utvide klasser (k alt underklasser) fra andre klasser (k alt superklasser). Polymorfisme lar programmereren erstatte et objekt i en klasse i stedet for et objekt i superklassen. Vanligvis blir substantivene som finnes i problemdefinisjonen direkte klasser i programmet. Og på samme måte blir verb metoder. Offentlig, privat og beskyttet er de typiske tilgangsmodifikatorene som brukes for klasser.
Hva er abstrakt klasse?
Abstrakte klasser er deklarert ved hjelp av abstrakt nøkkelord (f.eks. i Java,). Vanligvis kan ikke abstrakte klasser, også kjent som abstrakte basisklasser (ABC), instansieres (en forekomst av den klassen kan ikke opprettes). Så abstrakte klasser er bare meningsfulle å ha hvis programmeringsspråket støtter arv (evne til å lage underklasser fra å utvide en klasse). Abstrakte klasser representerer vanligvis et abstrakt konsept eller entitet med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som overordnede klasser som barneklasser er avledet fra, slik at barneklassen vil dele de ufullstendige funksjonene til overordnet klassen, og funksjonalitet kan legges til for å fullføre dem.
Abstrakte klasser kan inneholde abstrakte metoder. Underklasser som utvider en abstrakt klasse kan implementere disse (arvede) abstrakte metodene. Hvis barneklassen implementerer alle slike abstrakte metoder, blir det en konkret klasse. Men hvis den ikke gjør det, blir barneklassen også en abstrakt klasse. Hva alt dette betyr er at når programmereren nominerer en klasse som en abstrakt, sier hun at klassen vil være ufullstendig og den vil ha elementer som må fullføres av de arvende underklassene. Dette er en fin måte å lage en kontrakt mellom to programmerere på, som forenkler oppgaver innen programvareutvikling. Programmereren, som skriver kode for å arve, må følge metodedefinisjonene nøyaktig (men kan selvfølgelig ha sin egen implementering).
Hva er forskjellen mellom abstrakt klasse og betongklasse?
Abstrakte klasser har vanligvis delvis eller ingen implementering. På den annen side har betongklasser alltid full implementering av sin oppførsel. I motsetning til konkrete klasser, kan ikke abstrakte klasser instansieres. Derfor må abstrakte klasser utvides for å gjøre dem nyttige. Abstrakte klasser kan inneholde abstrakte metoder, men konkrete klasser kan ikke. Når en abstrakt klasse utvides, arves alle metoder (både abstrakte og konkrete). Den arvede klassen kan implementere hvilken som helst eller alle metodene. Hvis alle de abstrakte metodene ikke er implementert, blir den klassen også en abstrakt klasse.