Kmom06
Detta seminarium tar upp följande områden: mer begrepp inom OOP & Kodkvalitet.
Förberedelser
Section titled “Förberedelser”Läs Om seminarier.
-
Vad innebär det att en klass är abstrakt?
-
Kan man deklarera variabler av en klasstyp som är abstrakt? Om ja - vad kan man använda en sådan variabel till? Om nej - varför?
-
Kan man göra en klass abstrakt utan att den har abstrakta metoder? Om ja - hur och varför? Om nej - motivera!
-
Kan man ha en abstrakt metod i en klass utan att hela klassen blir abstrakt? Om ja - hur och varför? Om nej - motivera?
-
Vid förra seminariet implementerade vi en arvshierarki med basklassen
Cardoch subklassernaPunchCardochTimeLimitCard. Vi inser förhoppningsvis att det inte är “rimligt” att skapa Card-objekt men att klassen i sig fungerar som en generell bas för de specifika korttyperna. Vi vill därför göraCard-klassen abstrakt. Vi vill dessutom se till att minimerar kod-duplicering. Hur gör vi?
Tolka kod
Section titled “ Tolka kod”- Är följande korrekt? Om ja - motivera. Om nej - varför? Beskriv de olika “delarna” i koden.
public abstract class A{private int _a;public A(int a = 11) { this._a = a; }public abstract void Print();}public class B: A{private string _b;public B(string b) { this._b = b; }public B(string b, int a) : base(a) {this._b = b;}public override void Print() {Console.WriteLine("Jahapp");}}B b1 = new B("första");B b2 = new B("andra", 555);
Praktisk uppgift
Section titled “ Praktisk uppgift”Börja med att planera er lösning, vilken kod behövs och vilka datatyper er data kommer ha i de olika stegen. Efter ni har en plan, skriv koden. Använd frågorna nedanför för att planera koden ni behöver för att lösa uppgiften.
- Går det att identifiera delproblem som kan lösas för att testa tidigt?
- Vilka delproblem i så fall?
- Hur kan du testa dessa?
- Ge förslag på lämpliga variabler och vilken datatyp de ska innehålla
- Vilken/Vilka språkkonstruktion/er behövs?
- Vad börjar du med?
- Formulera en lösning i pseudo-kod
- diskutera alternativa lösningar
Uppgifter
Section titled “Uppgifter”I en glasögonbutik finns det solglasögon (SunGlasses) och läsglasögon
(ReadingGlasses). Både solglasögon och läsglasögon har en båge som registreras med märke
(ex-vis Borg) och ett grundpris (ex-vis 800 SEK).
För läsglasögon registreras dessutom styrka (ex-vis 2.5) och vilken typ av glas det är (ex-vis
enkelslipade). Det finns två olika typer av glas: enkelslipade och dubbelslipade. Enkelslipade glas ingår i grundpriset men för dubbelslipade tillkommer en kostnad på 1500 SEK.
För solglasögon registreras färgen på glaset (ex-vis brun). Det finns 3 olika
färger: brun, gul och lila. Brun ingår i grundpriset medan lila och gul ger en tilläggskostnad på 200 SEK.
- När det gäller solglasögon ska det vara möjligt att få färgen (metoden GetColor) och det ska även vara möjligt att ändra färgen (metoden SetColor)
- När det gäller läsglasögon ska det vara möjligt att få styrkan (metoden GetStrength) och det ska även vara möjligt att ändra styrkan (metoden SetStrength())
- Alla glasögon, dvs både solglasögon och läsglasögon, ska genom
- CalculateFinalPrice(), returnera det slutliga priset för glasögonen, dvs summan av grundpriset och eventuell tilläggskostnad
- Description(), returnera en sträng som innehåller en beskrivning av glasögonen. För läsglasögon ska strängen innehålla märke, styrka, typ av glas och slutligt pris. För solglasögon ska strängen innehålla märke, färg och slutligt pris.
I övrigt gäller:
- Arvsmekanismen ska användas logiskt och rimligt med avsikt at generalisera och specialisera
- Basklassen ska vara abstrakt
- Alla attribut/medlemsvariabler ska vara privata
I Program.cs skapar du därefter en lista (List) namngiven listOfGlasses för glasögon i vilken du lägger in några läsglasögon och några solglasögon blandat (t.ex 3 av den ena sorten och 2 av den andra sorten). Därefter gör du följande i tur och ordning:
- Presentera alla glasögon (i den ordning de finns i listan) och presentera avslutningsvis totala värdet på alla glasögon som finns i listan
- Bestäm antalet solglasögon som finns i listan genom att gå igenom listan och räkna antalet.
- Presentera alla läsglasögon som har styrka över 1.5
- Skapa två nya listor - en lista för Solglasögon namngiven
listOfSunglassessom ska innehålla referenser till alla solglasögon-objekt som finns ilistOfGlassesen lista för läsglasögonlistOfReadingGlassessom ska innehålla referenser till alla läsglasögon-objekt som finns ilistOfGlasses - Utnyttja
listOfSunGlassesför att presentera färgen på alla solglasögon - Utnyttja
listOfReadingGlassesför att bestämma lägsta styrkan på de läsglasögon som finns