Miniprojekt i Programmering (MIP)

Dat1 og SW3, januar 2010.

Opgavetillæg forud for omeksamen

I denne opgave skal der skrives et simpelt system, som administrerer kunder der ønsker at købe og/eller sælge køretøjer. Der skal programmeres et hierarki af klasser som afspejler de forskellige typer af køretøjer, der kan sættes til salg. Der skal endvidere programmeres en eller flere klasser, der afspejler købsønsker på bestemte typer af køretøjer som har nærmere angivne egenskaber. Programmet skal holde styr på en samling af køretøjer, der ønskes solgt. Endelig skal programmet administrere en samling af kunder, hvor en given kunde kan være både sælger og potentiel køber af køretøjer.

Programstruktur.

Følgende klasser skal programmeres:

  1. Personbil: Repræsenterer en personbil, der ønskes solgt. Der registreres følgende data om personbiler: Mærke, årgang, kørte kilometer og pris.
  2. Lastbil: Repræsenterer en lastbil, der ønskes solgt. Der registreres følgende data om lastbiler: Mærke, årgang, kørte kilometer, pris og maksimal lasteevne.
  3. Trailer: Repræsentere en trailer, der ønskes solgt. Der registreres: Mærke, pris, dimensioner (længde og bredde af traileren) samt maksimal lasteevne.

Som en del af opgaveløsningen skal klasserne Personbil, Lastbil og Trailer organiseres i et specialiseringshierarki, som er fornuftig i forhold til kravene i denne opgave.

  1. KøbsØnske: Repræsenterer et købsønske for et køretøj. Et købsønske udtrykker krav til en eller flere egenskaber af et køretøj (som nævnt herover). Kravene kan omfatte typen af køretøj, mærke, årgang, kilometertal, pris, minimal lasteevne og minimal dimension (minimal længde, minimal bredde). I et købsønske behandles følgende egenskaber gennem et interval (fra et minimum til et maksimum): årgang, kilometertal og pris.

KøbsØnske kan enten programmeres som én klasse, eller som et klassehierarki f.eks. svarende til det valgte hierarki for typer af køretøjer.

  1. Kunde: Repræsenterer en køber og/eller sælger af et køretøj. Der registreres navn, og postnummer for kundens bopæl. Endvidere registreres der for hver kunde hvilke køretøjer kunden ønsker at sælge, og hvilke ønsker kunden har om køb af køretøjer.
  2. SalgsKartotek: Repræsenterer en samling af køretøjer, der er sat til salg.
  3. KøbsKartotek: Repræsenterer en samling af købsønsker.
  4. Kundekartotek: Repræsenterer en samling af kunder.

Alle klasser skal have passende konstruktorer og properties/metoder, som modsvarer de indkapslede data.

Funktionalitet.

Følgende funktionalitet skal programmeres:

  1. Søgning efter alle køretøjer, der sælges til en pris mellem a og b kroner. a og b skal være parametre til en metode, der foretager søgningen i et salgskartotek. Søgningen skal returnere en samling af køretøjer.
  2. Søgning efter alle de kunder, der er sælgere. Den resulterende samling af kunder skal ordnes efter billigste salgspris af de køretøjer, som en kunde har til salg. Kunden, som sælger det billigste køretøj, kommer først.
  3. Søgning efter alle de kunder, som er købere. Kunderne skal ordnes efter den maksimale pris, som kunden er villig til at betale for et køretøj. Start med højeste pris. Søgningen skal returnere en samling af kunder.
  4. For en given kunde der er køber, find og returner samlingen af de køretøjer i salgskartoteket som matcher et af kundens købsønsker. På et niveau i problemløsningen skal dette omfatte en eller flere metoder, der matcher ét køretøj med ét købsønske (se detaljer herunder).
  5. For en given kunde der er køber, find og returner alle de matchende køretøjer i salgskartotektet som er "tæt nok" på køberens bopæl.

Der vil blive lagt vægt på at kompleks funktionalitet nedbrydes passende i et antal mindre komplekse metoder. Endvidere vil der blive lagt vægt på, at alle programmerede metoder placeres i de mest naturlige klasser.

Afstanden mellem to kunder kan f.eks. implementeres som differensen mellem kundernes postnumre.

Idet en kunde k både kan have købs- og salgsønsker, skal det i funktionaliteterne D og E forhindres, at k får tilbud om at købe et af de køretøjer han/hun selv har til salg.

Der er ikke absolutte krav til hvordan et købsønske o matcher et køretøj k, som er sat til salg. Følgende kan opfattes som inspiration og vejledning:

Programmets funktionalitet skal kunne demonstreres på en af følgende to måder:

Variationer.

Som det fremgår, rummer opgaven betydelige variationsmuligheder i programmeringen af klassen KøbsØnske, i dannelse af klassehierarkierne, samt måden hvorpå køretøjer og købsønsker matcher hinanden.

Geografisk afstand: Som beskrevet ovenfor kan afstanden mellem to geografiske steder beregnes som differensen mellem postnumre. Det er muligt at indføre et mere realistisk afstandsmål (dog stadig baseret på postnumre).

Intervaller: I klassen KøbsØnske indgår der intervaller af årgange, kilometertal og priser. Det vil være muligt at programmere en generel type, der hjælper med håndtering af sådanne intervaller.

Matching mellem købsønsker og køretøjer (der ønskes solgt) er central i denne opgave. En god løsning på problemet kræver at der kan 'dispatches' på båden typen af køretøj og på typen af købsønske (via virtuelle metoder). Overvej muligheden for at programmere match operationerne uden eksplicit brug af typetest i form af obj is T.

Ressourcer.

På adressen http://www.cs.aau.dk/~normark/oop-09/html/mip-jan-10/cs-udlevering.html findes en C# kildefil, der opretter et antal køretøjsobjekter sat til salg, samt et antal kundeobjekter der ønsker at sælge disse. I filen findes også en række uformelle købsønsker, der i opgaveløsningen skal repræsenteres som objekter af typen KøbsØnske. Det forventes at de givne køretøjer og kunder tilpasses jeres program. Det forventes endvidere at programmet, som et minimum, demonstreres på de givne kunder, køretøjer og (uformelle) købsønsker.

 

Krav og forventninger til program og dokumentation

 

I forbindelse med opgaveløsningen og MIP eksamen opfordres I til at se på læringsmålene for MIP i gældende studieordning (blad lidt frem i dokumentet):

Hvis der bliver behov for flere oplysninger, rettelser eller lignende i programmeringsperioden udsendes der besked på mailing listerne dat1-2@cs.aau.dk og sw3-4@cs.aau.dk. Endvidere indsættes tekst i toppen af denne opgaveformulering på nettet, som kan tilgås via det gule felt øverst på OOP hjemmesiden. Kontaktpersonen er Kurt Nørmark, normark@cs.aau.dk.