4060 Interface - Shape3D
Teori
Din lärare demonstrerar gränssnitt (eng. interface) för dig. En sammanfattning följer nedan.
Gränssnittet (eng. Interface) Servant
En abstrakt metod måste implementeras i klasser som implementerar gränssnittet. Nyckelordet abstract
skrivs dock ej ut.
interface Servant
{
void Act();
}
Klassen Gardener som implementerar Servant
Klassen Gardener implementerar gränssnittet Servant.
class Gardner : Servant
{
public void Act()
{
Console.WriteLine("Rensar ogräs. Klipper gräs");
Console.WriteLine();
}
}
Abstrakt klass istället
Om gränssnittet byts mot en abstrakt klass blir det som nedan.
abstract class Servant
{
public abstract void Act();
}
class Gardner : Servant
{
public override void Act()
{
Console.WriteLine("Rensar ogräs. Klipper gräs");
Console.WriteLine();
}
}
Uppgiften
Skapa ett nytt projekt, en konsoll-applikation. Lägg till klasser enligt nedanstående klassdiagram.
Gränssnittet Shape3D
Interfacet Shape3D ska definiera två metoder GetArea()
och GetVolume()
som returnerar ett decimaltal (double).
Klasserna Sphere
, Cylinder
och Cube
ska implementera metoderna GetArea()
och Get Volume()
.
Klassen Sphere
Klassen Sphere
ska ha en objektvariabel radius
, ett decimaltal.
Konstruktorn till klassen Sphere
ska ta radien som en parameter.
Klassen Sphere
ska implementera metoderna GetArea()
och Get Volume()
.
A = 4 * PI * r * r
V = 4 * PI * r * r * r / 3
Därtill ska en metod ToString()
implementeras. För sfären skall den returnera textsträngen "Sphere: 4.56” om radien är satt till 4,56. Metoden ToString()
ärvs från klassen Objekt
, som är alla klassers basklass.
Klassen Cylinder
Klassen Cylinder
ska ha två objektvariabler radius
och height
. Båda ska vara decimaltal.
Konstruktorn ska ta två parametrar, radien och höjden.
I klassen Cyliner
skall samma metoder implementeras som implementeras i klassen Sphere
.
Klassen Cube
Klassen Cube har en objektvariabel length
.
Konstruktorn tar en parameter som anger kubens sida.
Klassen implementerar samma metoder som klasserna Sphere
och Cylinder
.
Klassen Database
Klassen ska innehålla en objektvariabel som är av typen List.
Klassen ska innehålla en metod Print
, som skriver ut information om alla objekt i databasen.
Därtill ska klassen ha en metod AdShape
som tar en parameter av typen Shape3D
och lägger till det bifogade objektet i databasen.
Klassen Program
Metoden Main
I metoden ska du skapa en databas, d.v.s. ett objekt av klassen Database.
Till Database-objektet ska du lägga ett objekt av klassen Sphere, ett av klassen Cylinder, och ett av klassen Cube. Därefter ska du anropa databasens Print
-metod. Anropet ska generera en utskrift som i stort ser ut som den nedan.
Sphere
radius: 4.0
Area = 200.96
Volume = 267.94666666666666
Cylinder
radius: 4.0
height: 6.0
Area = 251.2
Volume = 301.44
Cube
length of side: 3.0
Area = 54.0
Volume = 27.0
Reflektion
Reflektera över den kod du har skrivit. Vad är det för skillnad respektive likhet mellan ett interface, abstrakt klass och en klass som ärver från en annan.