2. Figurativt arv
En examinationsuppgift som räknas.
🎓 Examinationsuppgift 2 ⚙️ https://github.com/1dv024/examination-2.git
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.
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.
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.
Formelsamling
Figur | Formler |
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
.
Klassen Shape
Shape
Den abstrakta klassen Shape
innehåller medlemmar gemensamma för klasserna Shape2D
och Shape3D
.
| Publik ”read-only”-egenskap som ska returnera |
| Autoimplementerad egenskap av typen |
| Konstruktorn, som ska vara ”protected”, ansvara för att objektet initieras med det värde konstruktorns parameter har. |
| Publik abstrakt metod som ska returnera en textbeskrivning av objektet. |
Klassen Shape2D
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.
| Privat fält av typen |
| Privat fält av typen |
| Publik abstrakt egenskap av typen |
| Publik egenskap av typen `double` som kapslar in fältet |
| Publik abstrakt egenskap av typen |
| Publik egenskap av typen |
| Konstruktorn, som ska vara ”protected”, ansvara för att fälten, via egenskaperna, tilldelas de värden konstruktorns parametrar har. |
|
Är formatsträngen
Alla övriga värden på formatsträngen ska leda till att ett undantag av typen |
Klassen Ellipse
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.
| Publik egenskapen av typen |
| Publik egenskapen av typen |
| 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
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.
| Publik egenskap av typen |
| Publik egenskap av typen |
| Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets längd och bredd sätts. |
Klassen Shape3D
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.
| Skyddat (”protected”) fält av typen |
| Privat fält av typen |
| Publik egenskap av typen |
| Publik virtuell egenskap av typen |
| Publik virtuell egenskap av typen |
| Publik virtuell egenskap av typen |
| Konstruktorn, som ska vara ”protected”, ansvara för att fälten, via egenskaper då sådana finns, tilldelas de värden konstruktorns parametrar har. |
|
Är formatsträngen
Alla övriga värden på formatsträngen ska leda till att ett undantag av typen |
Klassen Cuboid
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.
| Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets längd, bredd och höjd sätts. |
Klassen Cylinder
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.
| Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets horisontella och vertikala diameter sätts. |
Klassen Sphere
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.
| Publik egenskap av typen |
| Publik överskuggad egenskap av typen |
| Publik överskuggad egenskap av typen |
| Publik överskuggad egenskap av typen |
| Publik konstruktor som genom anrop av basklassens konstruktor ser till att det nya objektets diameter. |
Last updated