OOPS Grundpelare
- Klass
- Inkapsling
- Arv
- Polymorfism
Klass
- Programmet byggs upp av delar, klasser
- Varje klass innehåller både information och funktionalitet.
- Programmet kan ses som en uppsättning samverkande och interagerande objekt
Arv
- En underklass ärver egenskaper och funktionalitet av den överklass den tillhör.
- T.ex ett programsystem inom bankvärlden kan hantera det allmänna begreppet/klassen konto, men även specialfall som inlåningskonto, lönekonto, konto med kreditmöjlighet o.s.v.
Polymorfism
- I en grupp av underklasser finns funktionalitet som har yttre likheter mellan klasserna, men som måste programmeras på olika sätt beroende på vilken av underklasserna det gäller.
- Gränssnittet blir gemensamt för alla underklasserna, och definieras i överklassen, men den verkställande programkoden finns i respektive underklass.
Inkapsling
- Ett objekts exakta beteende och funktion är dold för omvärlden.
- Varje klass är en abstraktion och visar ett gränssnitt mot omvärlden som specificerar hur andra klasser får interagera med den.
- Detta garanterar att alla förändringar av ett objekt sker genom programkod som tillhör objektets klass.
- Ett visst objekt kan inte påverka ett annat objekt på annat sätt än genom detta objekts gränssnitt.
Inkapsling
- Ett steg i inkapsling är att se till att alla datamedlemmar är privata
- Men hur ska vi då göra för att ändra deras värden?
class Robot
{
private int noLegs;
private double energy;
}
Inkapsling
- En lösning hade varit att skriva en konstruktor som är public - men detta körs endast när objektet skapas.
- Hur gör man om man vill ändra värden på datamedlemmerna efter objekt har skapats?
class Robot
{
private int noLegs;
private double energy;
public Robot(int noLegs, double energy)
{
this.noLegs = noLegs;
this.energy = energy;
}
}
Inkapsling
- Svaret är s.k. getters och setters
- Vi använder getters för att returnerar de olika datamedlemmarna
- Vi använder setters för att ändra på datamedlemmarnas värden.
Getters och Setters
class Robot
{
private int noLegs;
private double energy;
//Detta är en getter för noLegs
public int GetNoLegs()
{
return noLegs;
}
//Och detta är en setter för noLegs
public void SetNoLegs(int noLegs)
{
this.noLegs = noLegs;
}
}
Getters och Setters
- Våra getters och setters betyder att VI bestämmer vem och på vilket sätt andra får tillgång till objektets
datamedlemmar.