Klassenvererbung - Lösung

    

Da die Basisklasse abstrakt ist, werden Funktionen und Properties werden lediglich deklariert, sie können nicht implementiert werden

abstract public class Shape
{
protected string color;
protected string name;

protected string Color // nur getter und setter. keine values
{
get;
set;
}

protected string Name
{
get;
set;
}

abstract protected void WhatShapeIsThis(); // nur dekleration
}

 

Es gilt dasselbe wie bei der Basisklasse "Shape", mit dem Unterschied, dass man jetzt noch genauere und spezifischere Properties oder Funktionen deklariert, die nur in dieser Dimension vorhanden sind. z.B.: Fläche

Deshalb ist diese Schicht auch notwendig: Um die Grundstruktur der Dimensionen zu beschreiben.

 

Eine Linie hat nur eine Eigenschaft: Die Länge. 

abstract public class Shape1D : Shape
{
abstract protected void getLength();
}

 

Jede Form in der 2.Dimension hat eine Fläche und einen Umfang. 

abstract public class Shape2D : Shape
{
protected double Area
{
get;
set;
}

protected double Circumference
{
get;
set;
}

abstract protected double getArea(); // Methoden der 2 Dimensionalen Formen
abstract protected double getCircumference();
}

  

Die 3-dimensionalen Formen haben ebenfalls eine Fläche, aber statt dem Umfang das Volumen.

abstract public class Shape3D : Shape
{
protected double Area
{
get;
set;
}

protected double Volume
{
get;
set;
}

abstract protected double getArea();
abstract protected double getVolume();
}

  

In den jeweiligen Formen z.B.: Rechteck wird nun jedem Element, wie Properties oder Funktionen, ein Wert zugewiesen. Die Formeln und weiteres sind aber selbst herauszufinden!

 

Es müssen die Inhalte der Klasse implementiert werden, die in den vorherigen abstrakten deklariert wurden. 

In der Klasse "StraightLine" wäre das die Funktion "WhatShapeIsThis()", aus der Basisklasse "Shape", und die Funktion "getLength()", aus der Basisklasse "Shape1D".

class StraightLine : Shape1D
{
private double length;
StraightLine(double length)
{
this.length = length;
}

protected override void getLength()
{
Console.WriteLine("Die Linie ist " + length.ToString() + " lang.");
}

protected override void WhatShapeIsThis()
{
Console.WriteLine("Es handelt sich um eine Linie");
}
}

 

In der Klasse "Rectangle" fehlen nun die Funktionen "WhatShapeIsThis()", "getArea()" und "getCircumference()".

class Rectangle : Shape2D
{
private double length, width;
public Rectangle (double a, double b)
{
this.length = a;
this.width = b;
}

protected override double getArea()
{
return length * width;
}

protected override double getCircumference()
{
return (length + width) * 2;
}
protected override void WhatShapeIsThis()
{
Console.WriteLine("Es handelt sich um ein Rechteck");
}
}

 

In der Klasse "Cube" müssen die Funktionen "WhatShapeIsThis()", "getArea()" und "getVolume()" vorhanden sein.

class Cube : Shape3D
{
private double sidelength;

public Cube (double s)
{
this.sidelength = s;
}

protected override double getVolume()
{
return sidelength * sidelength * sidelength;
}

protected override double getArea()
{
return sidelength * sidelength * 6;
}

protected override void WhatShapeIsThis()
{
Console.WriteLine("Es handelt sich um einen Würfel");
}
}

InheritanceKATA

Download