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.