> For the complete documentation index, see [llms.txt](https://coursepress.gitbook.io/1dv024/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coursepress.gitbook.io/1dv024/examinationsuppgifter/2.-figurativt-arv.md).

# 2. Figurativt arv

En examinationsuppgift som räknas.

{% hint style="info" %}
:mortar\_board: Examinationsuppgift 2\
:gear: [https://github.com/1dv024/examination-2.gi](https://github.com/1dv024/examination-2.git)t
{% endhint %}

{% hint style="danger" %}
**VIKTIGT!** Innan du börjar arbeta med examinationsuppgiften är det viktigt att du lägger till  examinationsuppgiftens repo till ditt privata repo för examinationsuppgiften.
{% endhint %}

{% hint style="danger" %}
**OBS! OBS! OBS!**

Detta är en **obligatorisk** och **examinerande** uppgift som **du ska lösa helt på egen hand**.

Du måste göra **regelbundna "commits" och "pushes"** av koden till ditt repo för uppgiften för att kursledningen ska kunna följa ditt arbetet med uppgiften.

Du ska kunna förklara samtliga konstruktioner och satser som din lösning av uppgiften innehåller. &#x20;
{% endhint %}

## Uppgift

Du ska skriva en applikation som med hjälp av klasser grupperar beräkningarna för plangeometriska (2D) figurers area och omkrets. För rymdgeometriska (3D) figurer ska volym, mantelarea och begränsningsarea beräknas.

Användaren ska på lämpligt sätt kunna välja att slumpa 2D- eller 3D-figurer där referenser till objektet ska lagras i en samling. Samlingen ska sedan sorteras varefter figurernas detaljer presenteras i form av en enkel tabell. 2D-figurer ska sorteras med avseende på typ och därefter area, 3D-figurer med avseende på typ och därefter på volym.

Du väljer själv om du vill skriva en konsol- eller webbapplikation (ASP.NET MVC), och hur data ska presenteras. Typerna ska implementeras enligt klassdiagrammen i figur 2 - figur 10. Eventuella fel som inträffar i applikationen ska tas om hand och relevanta felmeddelanden ska visas.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vezd0M56Xq15mQY%2Fui.png?generation=1531475541826413&amp;alt=media" alt="Figur 1. Exempel utformning av presentation i konsol- och webbapplikation."></div>

## Formelsamling

| Figur                                                                                                                                                                                                                        | Formler                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Rektangel ![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vf0EduTH8hEqM2F%2Frectangle-fig.png?generation=1531475538173134\&alt=media) | ![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vf2OFBhCmqQPdXQ%2Frectangle-area.png?generation=1531475540700717\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vf4vXINTMjQhZg9%2Frectangle-perimeter.png?generation=1531475543655895\&alt=media)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Ellips ![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vf60BBu_cP3Oq3N%2Fellipse-fig.png?generation=1531475541721803\&alt=media)      | ![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vf8bZMKizTz2P5X%2Fellipse-a.png?generation=1531475542232112\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfAnWiXxMvgXMkr%2Fellipse-b.png?generation=1531475538141049\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfC8KOyQnl5beTv%2Fellipse-area.png?generation=1531475538165032\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfEPmgFp2l25H25%2Fellipse-perimeter.png?generation=1531475543225118\&alt=media)(Formeln för omkretsen är bara en approximation och är tillräckligt bra i detta sammanhang.) |
| Rätblock ![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfGloj_hfaQVNRj%2Fcuboid-fig.png?generation=1531475540731465\&alt=media)     | Basfigur: rektangel![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfIv5HzAkuaU-nd%2Fcuboid-mantelarea.png?generation=1531475539842667\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfK_pc8uwfF3nug%2Fcuboid-totalsurfacearea.png?generation=1531475542254082\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfMxvCKzBPPUS41%2Fcuboid-volume.png?generation=1531475540702876\&alt=media)                                                                                                                                                                                                                                                                         |
| Cylinder ![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfOS13rShe8M9Gp%2Fcylinder-fig.png?generation=1531475539828692\&alt=media)   | Basfigur: ellips![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfQ7fDL3PuQAL-i%2Fcuboid-mantelarea.png?generation=1531475539721648\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfSlEaNnNxhaxg8%2Fcuboid-totalsurfacearea.png?generation=1531475539849691\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfULnKbVldZEUbL%2Fcuboid-volume.png?generation=1531475538459901\&alt=media)                                                                                                                                                                                                                                                                            |
| Sfär ![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfWl-cRx71Q_Uf5%2Fsphere-fig.png?generation=1531475539715474\&alt=media)         | Basfigur: ellips![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfYUjflPfyUhM_9%2Fsphere-mantelarea.png?generation=1531475541715317\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vf_qLglN0o67Z4f%2Fsphere-totalsurfacearea.png?generation=1531475543693552\&alt=media)![](https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vfb91nyMBUEnOz5%2Fsphere-volume.png?generation=1531475543690451\&alt=media)                                                                                                                                                                                                                                                                            |

## Klasshierarki

Figurerna har flera gemensamma egenskaper. 2D-figurer har t.ex. en längd, bredd, area och en omkrets. Istället för att dessa egenskaper hanteras i respektive klass kan dessa placeras i en generell klass, en abstrakt basklass som det inte går att instansiera objekt av.

Den abstrakta klassen `Shape2D` ärver från `Shape` och innehåller medlemmar som är gemensamma för de konkreta klasserna `Ellipse` och `Rectangle`. Klassen `Shape3D`, även den abstrakt, innehåller medlemmar som är gemensamma för de konkreta klasserna `Cuboid`, `Cylinder` och `Sphere`, som var och en baseras på en 2D-figur varför det är en assocciation mellan `Shape3D` och `Shape2D`. Den abstrakta basklassen `Shape` innehåller medlemmar gemensamma för klasserna `Shape2D` och `Shape3D`.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfdbztvFF2yBS3o%2FKlassdiagram.png?generation=1531475543142951&amp;alt=media" alt="Figur 2. Klasshierarki."></div>

## Klassen `Shape`

Den abstrakta klassen `Shape` innehåller medlemmar gemensamma för klasserna `Shape2D` och `Shape3D`.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VffLBcbhIl50vAh%2FShape-ShapeType.png?generation=1531475542228540&amp;alt=media" alt="Figur 3. Klassen Shape och den uppräkningsbara typen ShapeType."></div>

| `Is3D`      | Publik ”read-only”-egenskap som ska returnera `true` om figuren är av någon av typerna `Cubiod`, `Cylinder` eller `Sphere`, annars `false`.                                                                                                               |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ShapeType` | Autoimplementerad egenskap av typen `ShapeType` där `get`-metoden är publik och `set`-metoden är privat. Används för att definiera vilken typ av figur det är. `ShapeType` är en uppräkningsbar typ (`enum`), och som lämpligen deklareras i en egen fil. |
| `Shape`     | Konstruktorn, som ska vara ”protected”, ansvara för att objektet initieras med det värde konstruktorns parameter har.                                                                                                                                     |
| `ToString`  | Publik abstrakt metod som ska returnera en textbeskrivning av objektet.                                                                                                                                                                                   |

## Klassen `Shape2D`

Den abstrakta klassen `Shape2D` innehåller såväl konkreta som abstrakta medlemmar gemensamma för figurer som ellips och rektangel. I figur 3 visas de abstrakta medlemmarna med kursiv text.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfhqEzC6n1onGp1%2FShape2D.png?generation=1531475538171166&amp;alt=media" alt="Figur 4. Klassdiagram Shape2D."></div>

| `_length`   | Privat fält av typen `double` representerande en figurs längd.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `_width`    | Privat fält av typen `double` representerande en figurs bredd.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `Area`      | Publik abstrakt egenskap av typen `double` representerande en figurs area.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `Length`    | Publik egenskap av typen \`double\` som kapslar in fältet `_length`. `set`-metoden ska validera värdet som tilldelas egenskapen. Är värdet inte större än `0` ska ett undantag av typen `ArgumentOutOfRangeException` kastas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `Perimeter` | Publik abstrakt egenskap av typen `double` representerande en figurs omkrets.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `Width`     | Publik egenskap av typen `double` som kapslar in fältet `_width`. `set`-metoden ska validera värdet som tilldelas egenskapen. Är värdet inte större än `0` ska ett undantag av typen `ArgumentOutOfRangeException` kastas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `Shape2D`   | Konstruktorn, som ska vara ”protected”, ansvara för att fälten, via egenskaperna, tilldelas de värden konstruktorns parametrar har.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `ToString`  | <p> <code>ToString()</code> ska överlagras, d.v.s. det ska finnas två metoder med samma namn men med olika parameterlistor. Den publika metoden <code>ToString(string format)</code> har som uppgift att returnera en sträng representerande värdet av en instans. Formatsträngen ska bestämma hur textbeskrivningen av instansen ska formateras. Är formatsträngen <code>"G"</code>, en tomsträng eller null, ska strängen formateras så separata rader innehåller ledtext och värden för figurens läng, bredd, omkrets och area.</p><p><code>Längd : 5,7</code></p><p><code>Bredd : 34,5</code></p><p><code>Omkrets: 77,7</code></p><p><code>Area : 154,4</code> </p><p>Är formatsträngen <code>"R"</code> ska strängen formateras så en rad innehåller ledtext och värden för figurens längd, bredd, omkrets och area.</p><p><code>Ellipse 5,7 34,5 77,7 154,4</code></p><p>Alla övriga värden på formatsträngen ska leda till att ett undantag av typen <code>FormatException</code> kastas. Metoden <code>ToString()</code> ska returnera en sträng formaterad enligt kraven för formatsträngen <code>"G"</code>.</p> |

## Klassen `Ellipse`

Klassen `Ellipse` ärver från den abstrakta basklassen `Shape2D`. I och med att det ska gå att instansiera objekt av klassen, d.v.s. den ska vara konkret, måste den implementera de abstrakta egenskaperna `Area` och `Perimeter` i basklassen.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfjaXLNo381jFx-%2FEllipse.png?generation=1531475538203618&amp;alt=media" alt="Figur 5. Klassdiagram Ellipse."></div>

| `Area`      | Publik egenskapen av typen `double` som ska ge en ellips area.                                                                                                                                           |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Perimeter` | Publik egenskapen av typen `double` som ska ge en ellips omkrets.                                                                                                                                        |
| `Ellipse`   | Publika konstruktorer som genom anrop av basklassens konstruktor ser till att det nya objektets längd och bredd sätts. Konstruktorn som har en parameter används då en figur av typen cirkel ska skapas. |

## Klassen `Rectangle`

Klassen `Rectangle` ärver från den abstrakta basklassen `Shape2D`. I och med att det ska gå att instansiera objekt av klassen, d.v.s. den ska vara konkret, måste den implementera de abstrakta egenskaperna `Area` och `Perimeter` i basklassen.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vfl6PturlaarRyq%2FRectangle.png?generation=1531475543175675&amp;alt=media" alt="Figur 6. Klassdiagram Rectangle."></div>

| `Area`      | Publik egenskap av typen `double` som ska ge en rektangels area.                                                    |
| ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `Perimeter` | Publik egenskap av typen `double` som ska ge en rektangels omkrets.                                                 |
| `Rectangle` | Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets längd och bredd sätts. |

## Klassen `Shape3D`

Den abstrakta klassen `Shape3D` innehåller såväl konkreta som abstrakta medlemmar gemensamma för figurer som rätblock, cylinder och sfär. I figur 6 visas de abstraktafmedlemmarna med kursiv text.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2Vfn-DKg2FfV7jth%2FShape3D.png?generation=1531475539720589&amp;alt=media" alt="Figur 7. Klassdiagram Shape3D"></div>

| `_baseShape`       | Skyddat (”protected”) fält av typen `Shape2D` representerande en 3D-figurs basfigur (ellips eller rektangel).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `_height`          | Privat fält av typen `double` representerande en figurs höjd.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `Height`           | Publik egenskap av typen `double` som kapslar in fältet `_height`. `set`-metoden ska validera värdet som tilldelas egenskapen. Är värdet inte större än `0` ska ett undantag av typen `ArgumentOutOfRangeException` kastas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `MantelArea`       | Publik virtuell egenskap av typen `double` som ska ge en figurs mantelarea (baserad på basfigurens omkrets).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `TotalSurfaceArea` | Publik virtuell egenskap av typen `double` som ska ge en figurs begränsningsarea (baserad på basfigurens area).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `Volume`           | Publik virtuell egenskap av typen `double` som ska ge en figurs volym (baserad på basfigurens area).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `Shape3D`          | Konstruktorn, som ska vara ”protected”, ansvara för att fälten, via egenskaper då sådana finns, tilldelas de värden konstruktorns parametrar har.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `ToString`         | <p> <code>ToString()</code> ska överlagras, d.v.s. det ska finnas två metoder med samma namn men med olika parameterlistor. Den publika metoden <code>ToString(string format)</code> har som uppgift att returnera en sträng representerande värdet av en instans. Formatsträngen ska bestämma hur textbeskrivningen av instansen ska formateras. Är formatsträngen <code>"G"</code>, en tomsträng eller null, ska strängen formateras så separata rader innehåller ledtext och värden för figurens läng, bredd, höjd, mantelarea, begränsningsarea och volym.</p><p><code>Längd : 29,6</code></p><p><code>Bredd : 29,6</code></p><p><code>Höjd : 29,6</code></p><p><code>Mantelarea : 2752,5</code></p><p><code>Begränsningsarea: 2752,5</code></p><p><code>Volym : 13579,2</code></p><p>Är formatsträngen <code>"R"</code> ska strängen formateras så en rad innehåller ledtext och värden för figurens längd, bredd, höjd, mantelarea, begränsningsara och volym.</p><p><code>Sphere 29,6 29,6 29,6 2752,5 2752,5 13579,2</code></p><p>Alla övriga värden på formatsträngen ska leda till att ett undantag av typen <code>FormatException</code> kastas. Metoden <code>ToString()</code> ska returnera en sträng formaterad enligt kraven för formatsträngen <code>"G"</code>.</p> |

## Klassen `Cuboid`

Klassen `Cuboid` ärver från den abstrakta basklassen `Shape3D`. Det ska gå att instansiera objekt av klassen, d.v.s. den ska vara konkret.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfpZoFGV2tkuAyk%2FCuboid.png?generation=1531475538116752&amp;alt=media" alt="Figur 8. Klassdiagram Cuboid."></div>

| `Cuboid` | Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets längd, bredd och höjd sätts. |
| -------- | ------------------------------------------------------------------------------------------------------------------------- |

## Klassen `Cylinder`

Klassen `Cylinder` ärver från den abstrakta basklassen `Shape3D`. Det ska gå att instansiera objekt av klassen, d.v.s. den ska vara konkret.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfrijL7ZKC95dM-%2FCylinder.png?generation=1531475538130863&amp;alt=media" alt="Figur 9. Klassdiagram Cylinder."></div>

| `Cylinder` | Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets horisontella och vertikala diameter sätts. |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------- |

## Klassen `Sphere`

Klassen `Sphere` ärver från den abstrakta basklassen `Shape3D`. I och med att det ska gå att instansiera objekt av klassen, d.v.s. den ska vara konkret, måste den överskugga de virtuella egenskaperna `MantelArea`, `TotalSurfaceArea` och `Volume` i basklassen för att beräkningarna ska bli korrekta.

<div align="left"><img src="https://386111632-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHI2OteA8DA9IFxjtTu%2F-LHI2TwLIv_DZqyAyT0E%2F-LHI2VfyT7NEvFvIYkFC%2FSphere.png?generation=1531475538124798&amp;alt=media" alt="Figur 10. Klassdiagram Sphere."></div>

| `Diameter`          | Publik egenskap av typen `double` som ska sätta och ge en sfärs diameter. (Kapslar in lämpliga egenskaper i basklassen.) |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `MantelArea`        | Publik överskuggad egenskap av typen `double` som ska ge en sfärs mantelarea.                                            |
| `TotalSurfacelArea` | Publik överskuggad egenskap av typen `double` som ska ge en sfärs begränsningsarea.                                      |
| `Volume`            | Publik överskuggad egenskap av typen `double` som ska ge en sfärs volym.                                                 |
| `Sphere`            | Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets diameter.                   |
