2. Figurativt arv

En examinationsuppgift som räknas.

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

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

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

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.

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.

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.

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.

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.

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.

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.

Last updated