Title: Abstract
1Abstract sealed
2Abstrakta klasser
- Vad är en abstrakt klass?
- En abstrakt klass är en klass där man inte kan
skapa några objekt som bara tillhör den klassen.
Däremot går det att skapa objekt av dess härledda
klasser. - en abstrakt basklass är alltså en ren basklass,
referenser av den typen kan finnas, men inte
objektet. -
abstract class Shape .
3Abstrakta klasser
- Designdilemma i OOP
- Basklasser ska vara abstrakta, tidlösa, allmänna
och utan konkreta detaljer. - Härledda klasser ska vara konkretiseringar med
alla nödvändiga implementationsdetaljer. - Men samtidigt vill man använda basklassreferenser
för att på ett generellt sätt hantera objekt av
härledda klasser, och då måste ju de medlemmar
som ska anropas finnas i basklassen. - Lösning
- Att i basklassen ha ett antal metoder som finns
där bara till namnet, enbart för att kunna
anropas via basklassreferenser. - Dessa metoder kallas för placeholder och består
av metoder utan implementation ? abstrakta
metoder.
4Abstrakta metoder
abstract class Shape public
abstract double Area()
- En abstrakt metod har ingen kropp och därmed
ingen implementation. Implementationen ersätts av
ett semikolon. - Det är endast tillåtet att deklarera abstrakta
metoder i en abstrakt klass. D.v.s. en abstrakt
metod tvingar klassen att vara abstrakt men inte
tvärtom. - I en abstrakt klass kan finnas icke abstrakta
metoder. - En abstrakt metod är implicit virtuell och måste
därför implementeras med en override metod i alla
härledda klasser. - den abstrakta metoden måste implementeras i
härledd klass, annars blir även den klassen
abstrakt.
5Abstrakta metoder
abstract class Shape public abstract
double Area() class Circle Shape
private int radius public int Radius
get return radius
set radius value
public override double Area()
return System.Math.PI radius
radius
6Abstrakta egenskaper
- Det går att deklarera egenskaper som abstrakta i
en abstrakt klass. - Implementationen för get och set ersätts med en
semikolon. - I en härledd klass måste dessa egenskaper
markeras override.
7Abstrakta egenskaper
abstract class Shape public abstract
double Area() public abstract int X
get set public abstract int Y get
set class Circle Shape private
int radius private int x
private int y public override int X
get return x
set x value
public override int Y
get return y
set y value
public int Radius
get return radius set
radius value public
override double Area() return
System.Math.PI radius radius
8Abstrakta klasser
- För att dra detta tänkande ytterligare ett steg
kan man tänka sig basklasser som enbart är
avsedda att vara paket av abstrakta metoder och
egenskaper. - En slags standarsuppsättningar av metodnamn /
egenskapsnamn som används som basklasser och
därmed ger flera av härledda klasser ett slags
standardutseende ett gemensamt gränssnitt. -
9Sealed klass
- För att skapa en klass som hindrar andra klasser
att ärva ifrån den då markeras klassen med
nyckelordet sealed. - D.v.s. sealed klass kan aldrig vara en basklass
till ngn annan klass. - Om ngn klass försöker ärva från en sealed klass,
då genereras ett kompileringsfel. - En sealed klass kan inte deklarera en virtuell
metod. - Det går att deklarera en metod som sealed. Detta
betyder att den härledda klassen inte kan skriva
om implementationen för den sealed metoden.
10- En abstakt metod presenterar namnet på en metod.
Ingen implementation - En virtuell metod är den första implementeringen
av en metod. - En override metod är ytterliggare en
implementering av en metod. - En sealed metod är den sista implementeringen av
en metod.