Göm menyn

TDP004 Objektorienterad programmering

Förberedelseuppgifter Klasser och Objektorientering


Uppgifter relaterade till Klasser och Objektorientering

Några uppgifter handlar koncept, tankesätt och modellering - hur programmet struktureras på ett enligt samlad erfarenhet bra sätt. Andra uppgifter handlar mer om syntax och hur objekt skapas och används i C++ - språkstödet för objektorienteringen. Slutligen finns uppgifter som blandar - hur implementeras ett koncept i C++? Hur set det ut i kod?

Uppgift 1

Skapa ett klasskelett (enbart deklarationer) för att beskriva ("modellera") ett linjerat papper. Tänk t.ex. att olika papper skall finnas som en del av ett datorspel, och en spelare skall kunna interagera med papper. Tänk igenom vilka medlemsfunktioner som behöver finnas för att den programmerare som skriver koden för spelaren skall kunna låta spelaren interagera med olika papper.

Uppgift 2

OOA och OOD är metoder för att komma fram till vilka klasser som bör finnas i ett objektorienterat program. Förklara hur man går tillväga i en objektorienterad analys. Vad är viktigast att tänka på i varje steg?

Uppgift 3

Cohesion är ett begrepp som förekommer och är viktigt i programdesign. Det diskuteras t.ex. i avsnitt 7.2 i Code Complete. Vad betyder det att något har "strong functional cohesion"? Finns det andra typer av cohesion? Visa exempel.

Uppgift 4

Couplig är ett begrepp som är speciellt viktigt för ett objektorienterat program och diskuteras på flera ställen i Code Complete. Vad innebär coupling. Vilka konkreta råd finns för att skapa klasser med låg coupling?

Uppgift 5

CRC står för Class, Responsibility, Collaboration. I vilket sammanhang används detta och varför är det viktigt?

Uppgift 6

Förklara begreppet abstraktion ("abstraction") och visa några bra och dåliga exempel på abstraktion i C++ för att tydliggöra din poäng.

Uppgift 7

Förklara begreppet inkapsling ("encapsulation") och visa några bra och dåliga exempel på inkapsling i C++ för att tydliggöra din poäng.

Uppgift 8

Förklara med ett eget exempel i C++ skillnaden mellan klassförhållandena composition, aggregation och association.

Uppgift 9

Visa med exempel i C++ vad som är skillnaden på en vanlig "fri" funktion och en medlemsfunktion. Tänk både på skillnad i vilka variabler funktionen har tillgång till och skillnad i hur funktionen anropas.

Uppgift 10

Visa med exempel i C++ vad som är skillnaden på en vanlig variabel, en medlemsvariabel och en statisk medlemsvariabel. Tänk både på hur det kan tänkas se ut i minnet och hur/var variabeln kan läsas eller ändras.

Uppgift 11

Varför ska man lägga saker privat i en klass? Är det inte bara bra mycket enklare och mindre strul att lägga allt publikt direkt? Leta upp minst tre bra motiv att lägga så mycket som går privat.

Uppgift 12

I C++ finns flera typer av konstruktorer. Det finns default konstruktor, normal konstruktor, kopieringskonstruktor och delegerande konstruktor. Vad skiljer dem åt och vad har en konstruktor för syfte? Varför är de viktiga?

Uppgift 13

Antag att du i ditt spel har en klass som representerar ett papper. Antag vidare att spelaren har klickat på en knapp som låter hen göra anteckningar på papperet. Skriv kod för ett huvudprogram som letar upp en tom rad på papperet och skriver dit den nya anteckningen. Du får anta att klassen har de funktioner du behöver (du kan alltid lägga till dem i uppgift 1 om de saknas).

Sidansvarig: Christoffer Holm, Simon Ahrenstedt
Senast uppdaterad: 2023-10-26