Objektorienterad programmering
Dagens föreläsning
Objektorienterad programmering! Vi skall ta oss igenom hur några olika koncept fungerar.
- Vad är ett interface?
- Vad är en abstrakt klass?
-
Vad är ett trait?
-
Hur interagerar ovanstående?
-
Hur används detta i Laravel?
Vad är ett interface?
Ett interface är en form av kontrakt. Interfacet innehåller metoddefinitioner men inga implementationer. Alla klasser som implementerar ett interface måste ha med dessa metoder.
<?php
interface Car {
public function drive() : array;
public function honk() : void;
public function turn(string $direction) : int;
public function accelerate(float $speed) : void;
public function decelerate(float $speed) : void;
}
// Toyota måste innehålla alla metoderna i Car annars blir det fel
class Toyota implements Car {}
class Mercedes implements Car {}
function saveCar(Car $car) {
// Här sparar jag en bil
}Vad är en abstrakt klass?
En abstrakt klass är en grundimplementation av en klass. Den går inte att instansera utan andra klasser måste ärva den abstrakta klassen.
<?php
abstract class Car {
public function honk() : void {
echo "Honk honk!";
}
}
class Toyota extends Car {};
// Det här går inte!
$car = new Car();
$toyota = new Toyota();
// Honk honk!
$toyota->honk();Vad är ett trait?
Traits är en lösning på att klassarv av sin natur är hierarkiskt och går "uppifrån och ner". Ett trait är en knippe funktionalitet som kan läggas till på vilken klass som helst oberoende av arv.
<?php
trait Honkable {
public function honk() : void {
echo "Honk honk!";
}
}
class Toyota {
use Honkable;
};
class Mercedes {
use Honkable;
}
$toyota = new Toyota();
// Honk honk!
$toyota->honk();Hur använder man det här?
Bra fråga!
Mycket av det här blir bara aktuellt när du bygger större applikationer tillsammans med andra. Interface är användbara när det behöver finnas flera olika implementationer av samma sak. Då kan vi ha ett interface som berättar vilka metoder som måste finnas i de olika implementationerna.
Abstrakta klasser används för att ge andra utvecklare grundfunktionalitet eller en grundplåt att utgå ifrån. Detta görs såklart bara när det handlar om en större mängd funktionalitet.
Hur använder man det här?
Traits används framförallt för små bitar funktionalitet som egentligen inte tillhör en klass huvuduppgifter. Förr så var det ganska vanligt att en klass ärvde en annan bara för att funktionalitet inte skulle behöva kopieras även om de kanske inte egentligen hörde ihop.
Objektorienterad programmering
By marcusdalgren
Objektorienterad programmering
- 427