Afsluttende opgave: Produktkatalog
Denne opgave er den afsluttende opgave for kurset Objektorienteret C#. Målet er at udvikle et produktkatalog ved hjælp af objektorienterede principper såsom klasser, nedarvning og polymorfi.
Opgavebeskrivelse
Du skal udvikle en konsolapplikation i .NET 8 (eller højere), der giver brugeren mulighed for at oprette og vise et katalog af produkter. Programmet skal understøtte to typer produkter:
- elektroniske produkter
- bøger
Hvert produkt skal have et navn og en pris, og derudover skal der være specifikke egenskaber for hver produkttype (se kravene nedenfor). Programmet skal også indeholde en klasse til at administrere produkterne i et katalog.
Krav
Product og underklasser
- Opret en klasse
Product
med følgende egenskaber (automatiske egenskaber er tilladt - dog skal der benyttesinit
og ikkeset
):Name
Price
- En
ToString()
-metode, der returnerer produktets information (fxLaptop - Price: $500.00
).
- Opret to underklasser (automatiske egenskaber er tilladt - dog skal der benyttes
init
og ikkeset
):ElectronicProduct
med en ekstra egenskab:WarrantyPeriod
(int, i måneder).BookProduct
med en ekstra egenskab:Author
(string).
- Overskriv
ToString()
i begge underklasser for at inkludere deres specifikke information:- For
ElectronicProduct
:Laptop - Price: $500.00 - Warranty: 24 months
. - For
BookProduct
:C# Programming - Price: $30.00 - Author: John Doe
.
- For
Produktkatalog
- Opret en klasse
ProductCatalog
til at administrere produkterne. Denne klasse skal:- Holde separate lister (
List<T>
) forElectronicProduct
ogBookProduct
. - Tilføj metoder til at tilføje produkter til kataloget (
AddElectronicProduct
ogAddBookProduct
). - Tilføj en metode til at vise alle produkter (
ListAllProducts
).
- Holde separate lister (
Note
Bemærk, at din løsning skal være ret simpel og ikke indeholde validering af data eller brug af konstruktører. Men i den afsluttende samtale kan vi diskutere, hvordan disse ting kan tilføjes. Se afsnittet “Aflevering og bedømmelse”.
Test af din løsning
Din opgave er skabe klasserne Product
, ElectronicProduct
, BookProduct
og ProductCatalog
samt en konsolapplikation, der demonstrerer funktionaliteten.
Din kode i Program.cs skal består af følgende:
var catalog = new ProductCatalog();
// Add electronic products
catalog.AddElectronicProduct(new ElectronicProduct
{
Name = "Laptop",
Price = 5000,
WarrantyPeriod = 24
});
catalog.AddElectronicProduct(new ElectronicProduct
{
Name = "Smartphone",
Price = 3000,
WarrantyPeriod = 12
});
catalog.AddElectronicProduct(new ElectronicProduct
{
Name = "Tablet",
Price = 2500,
WarrantyPeriod = 18
});
// Add book products
catalog.AddBookProduct(new BookProduct
{
Name = "C# Programming",
Price = 300,
Author = "John Doe"
});
catalog.AddBookProduct(new BookProduct
{
Name = "Object-Oriented Design",
Price = 450,
Author = "Jane Smith"
});
catalog.AddBookProduct(new BookProduct
{
Name = "Advanced Algorithms",
Price = 600,
Author = "Alan Turing"
});
// List all products
catalog.ListAllProducts();
Når programmet køres, skal det vise følgende output:
Electronic Products:
Laptop - Price: $5000.00 - Warranty: 24 months
Smartphone - Price: $3000.00 - Warranty: 12 months
Tablet - Price: $2500.00 - Warranty: 18 months
Book Products:
C# Programming - Price: $300.00 - Author: John Doe
Object-Oriented Design - Price: $450.00 - Author: Jane Smith
Advanced Algorithms - Price: $600.00 - Author: Alan Turing
Aflevering og bedømmelse
Aflever løsningen som en ZIP-fil, der indeholder projektets filer (ekskl. /bin
og /obj
mapper). Sørg for, at Program.cs
, eventuelle andre filer og .csproj
-filen er inkluderet. - Din løsning vurderes ud fra: - Program.cs består af de nævnte instruktioner. - Klasserne er implementeret korrekt og opfylder kravene. - Koden er veldokumenteret og let at læse. - Warninger (ekempelvis “null” warnings) behøves ikke håndteres (se dog nedenfor).
Samtale
Efter aflevering aftaler vi en kort samtale, hvor du kan forklare din løsning. Jeg vil stille spørgsmål om, hvordan du har tænkt og hvorfor du har valgt at gøre som du har gjort.
Som afslutning på samtalen vil vi snakke om en eller flere af følgende spørgsmål. Du bedes derfor overveje følgende:
- Hvordan egenskaberne i klasserne
BookProduct
ogElectronicProduct
kan valideres således, atName
ikke kan blive en tom streng ogPrice
altid skal være større end 0. - I opgaven er der ikke benyttes en konstruktør i klasserne. Hvad ville det betyde at tilføje en konstruktør?
- Om de to lister i
ProductCatalog
kan erstattes af en enkelt liste, der indeholderProduct
-objekter. - Kunne
Product
klassen have været en abstrakt klasse, og hvad ville det betyde? - Hvis der er nogle warnings i din kode, hvad kunne du gøre for at undgå dem?
- Hvad er forskellen på mutable og immutable objekter?
- I klasserne har du allerede implementeret polymorfi (overskrivning af
ToString
). Hvad er fordelene ved at benytte polymorfi?