Polymorfi Vejledende løsninger Generel vejledning | Opgaver |
1 |
I denne opgave skal der laves en række klasser der kan bruges til at beregne portoen for forskellige slags forsendelser med postvæsenet. Klasserne der skal laves kan opstilles i følgende klasse-hierarki. | ||||||||||||||||||||||||
Figur 1: Klasse-hierarki for forsendelser |
| ||||||||||||||||||||||||
Klassen Forsendelse har de egenskaber der er fælles for alle slags forsendelser. Alle forsendelser har en vægt der bruges til at beregne portoen. Forsendelse skal erklære en metode porto, der beregner og returnerer portoen for forsendelsen. Forsendelse skal have en set-konstruktor. | |||||||||||||||||||||||||
Klasserne Forsendelse og Brev skal være abstrakte (bemærk at de netop er skrevet med skrå skrift i klasse-diagrammet). | |||||||||||||||||||||||||
De tre konkrete subklasser ABrev, BBrev og Pakke implementerer metoden porto, så den beregner og returnerer portoen for forsendelsen. Alle tre konkrete klasser skal have en set-konstruktor. ABrev er et almindeligt brev, BBrev er et økonomibrev og Pakke er en almindelig pakke. | |||||||||||||||||||||||||
Følgende er en oversigt over taksterne som var i kraft d. 14. nov. 1999 (da denne opgave først blev udarbejdet): | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Man kan ikke sende et brev på mere end 2000 g. Hvis et brev vejer mere end 2000 g. skal metoden porto i ABrev og BBrev returnere -1. | |||||||||||||||||||||||||
For pakker er taksterne: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Man kan ikke sende en pakke på mere end 20 kg. Hvis en pakke vejer mere end 20 kg. skal metoden porto i Pakke returnere -1. | |||||||||||||||||||||||||
Hvis man skulle have interesse i det, kan man altid finde de aktuelle takster på www.post.dk. | |||||||||||||||||||||||||
Implementer samtlige klasser og lave en test-anvendelse.
| |||||||||||||||||||||||||
2 | [Ikast Handelsskole: Datamatiker - Konstruktions-eksamen, 6. januar 2000: Opgave 7] | ||||||||||||||||||||||||
Betragt følgende klasse-hierarki: | |||||||||||||||||||||||||
Figur 2: Klasse-hierarki for boliger |
|
||||||||||||||||||||||||
Vi vil lave objekter, der kan repræsentere lejligheder og villaer. Til det formål vil vi lave to klasser Lejlighed og Villa, men en fælles abstrakt super-klasse Bolig. | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Implementer de tre klasser med de egenskaber, der er beskrevet ovenfor. Lave set- og copy-konstruktorer til samtlige klasser. Lav ligeledes toString-metoder for alle tre klasser, som egner sig til testformål. | |||||||||||||||||||||||||
Vi ønsker at lave en metode årligHusleje, der for alle boliger returnerer den årlige husleje. For lejligheder er dette naturligvis 12 gange den månedlige husleje. For villaer er det mere kompliceret. Vi antager at villaen er købt på kredit, og den årlige "husleje" er derfor et udtryk for hvad det koster at afdrage på lånet. For at holde det simpelt vil vi sige, at den årlige "husleje" for en villa er 10% af dens pris. Hvis villaen ligger på landet, bliver der lagt 20% på huslejen, pga. af værdien af de landlige omgivelser. | |||||||||||||||||||||||||
Implementer årligHusleje i alle tre klasser. Lav den abstrakt i klassen Bolig. | |||||||||||||||||||||||||
Lav en testanvendelse, der instantierer fem objekter der repræsenterer følgende fem boliger: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Testanvendelsen skal udskrive oplysninger om de fem boliger, samt deres årlige husleje. | |||||||||||||||||||||||||
Lav din testanvendelse så den demonstrerer polymorfien i metoderne: toString og årligHusleje. | |||||||||||||||||||||||||
3 | [Ikast Handelsskole: Datamatiker - Konstruktions-reeksamen, 20. januar 2000: Opgave 4] | ||||||||||||||||||||||||
Betragt følgende klasse-hierarki: | |||||||||||||||||||||||||
Figur 3: Klasse-hierarki for biler |
|
||||||||||||||||||||||||
Vi vil lave objekter, der kan repræsentere personbiler og lastbiler. Til det formål vil vi lave to klasser PersonBil og LastBil, med en fælles abstrakt super-klasse Bil. | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Implementer de tre klasser med de egenskaber, der er beskrevet ovenfor. Lave set- og copy-konstruktorer til samtlige klasser. Lav ligeledes toString-metoder for alle tre klasser, som egner sig til testformål. | |||||||||||||||||||||||||
Vi har fået den interessante idé at pålægge alle biler en afgift i anledning af år 2000. Vi har gjort det fordi 2000 er et stort og rundt tal (okay — vi har gjort det for pengenes skyld!). | |||||||||||||||||||||||||
Vi ønsker derfor at lave en metode afgift, der for alle biler returnerer den årlige afgift. For lastbiler består afgiften i 35 øre pr. kg. den selv vejer, plus 20 øre pr. kg den kan lastes med. For personbiler består afgiften i 50 øre pr. kg. den selv vejer, plus 800 kr. pr. passager den kan medtage. afgift skal returnere beløbet i kroner (ikke i ører). | |||||||||||||||||||||||||
Implementer afgift i alle tre klasser. Lav den abstrakt i klassen Bil. | |||||||||||||||||||||||||
Lav en testanvendelse, der instantierer fire objekter, som repræsenterer følgende fire biler: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Testanvendelsen skal udskrive oplysninger om de fire biler, samt deres årlige afgift. | |||||||||||||||||||||||||
Lav din testanvendelse så den demonstrerer polymorfien i metoderne: toString og afgift. | |||||||||||||||||||||||||
4 | [Ikast Handelsskole: Datanom - Programkonstruktion I, 7. januar 2000: Opgave 3] | ||||||||||||||||||||||||
En idrætsforening ønsker at registrere medlemmerne i en database. I forbindelse med dette program skal der laves en række klasser til repræsentation af medlemmerne. Det er disse klasser der skal laves i denne opgave. | |||||||||||||||||||||||||
Betragt følgende nedarvningshierarki: | |||||||||||||||||||||||||
Figur 4: Klasse-hierarki for medlemmer |
|
||||||||||||||||||||||||
Klubben opdeler dens medlemmer i to grupper, seniorer og juniorer, efter alder. Når man er fyldt 18 år, er man senior. | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
4.1 | Implementer de tre klasser som de er beskrevet ovenfor. Du skal lave passende set-konstruktorer til alle klasserne. | ||||||||||||||||||||||||
4.2 | Lav til testformål en toString-metode i de tre klasser. | ||||||||||||||||||||||||
Klubben vil gerne bruge programmet til at beregne kontingenter for de enkelte medlemmer. Derfor skal de tre klasser have en metode kontingent, der returnerer det pågældende medlems kontingent. | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
4.3 | Lav metoden kontingent i de tre klasser. Metoden skal være polymorf. | ||||||||||||||||||||||||
Der ønskes en testanvendelse, der instantierer tre objekter, der repræsenterer følgende tre medlemmer af klubben: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Testanvendelsen skal bruge objekterne til at udskrive oplysninger om disse medlemmer og deres kontingent. | |||||||||||||||||||||||||
4.4 | Lav den ovenfor beskrevne testanvendelse. | ||||||||||||||||||||||||
5 | [Ikast Handelsskole: Datamatiker - Konstruktions-eksamen, 3. januar 2001: Opgave 5] | ||||||||||||||||||||||||
Betragt følgende klasse-hierarki: | |||||||||||||||||||||||||
Figur 5: Klasse-hierarki for lokaler |
|
||||||||||||||||||||||||
Vi vil lave objekter, der kan repræsentere forskellige undervisningslokaler. Til det formål vil vi lave to klasser EDB_Lokale og KlasseLokale, men en fælles abstrakt super-klasse Lokale. | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Implementer de tre klasser med de egenskaber, der er beskrevet ovenfor. Lave set- og copy-konstruktorer til samtlige klasser. Lav ligeledes toString-metoder for alle tre klasser, som egner sig til testformål. | |||||||||||||||||||||||||
Vi ønsker at kunne beregne kapaciteten for ethvert lokale. Vi vil derfor lave en metode kapacitet, der beregner dette. Metoden returnerer hvor mange studerende, der kan undervises i lokalet. | |||||||||||||||||||||||||
Kapaciteten for et lokale er én studerende pr. 1,5 m2 i et klasselokale, og én studerende pr. 2,5 m2 i et EDB-lokale. Et EDB-lokale har yderligere den begrænsning at hver PC bruger 3 enheder strøm. Der regnes med én PC pr. studerende. Det er derfor muligt at et EDB-lokales kapacitet er mindre end én studerende pr. 2,5 m2, fordi der evt. ikke er strøm nok! | |||||||||||||||||||||||||
Lad dig ikke distrahere af, at denne måde at beregne kapaciteten på, sikkert ikke er særlig realistisk! | |||||||||||||||||||||||||
Lad os se et eksempel: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Implementer metoden kapacitet i alle tre klasser. Lav den abstrakt i klassen Lokale. | |||||||||||||||||||||||||
Lav en testanvendelse, der instantierer fem objekter, som repræsenterer følgende fem lokaler: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Testanvendelsen skal udskrive oplysninger om de fem lokaler, samt deres kapacitet. | |||||||||||||||||||||||||
Lav din testanvendelse så den demonstrerer polymorfien i metoderne: toString og kapacitet. | |||||||||||||||||||||||||
6 | [Ikast Handelsskole: Datamatiker - Konstruktions-reeksamen, 23. januar 2001: Opgave 4] | ||||||||||||||||||||||||
Betragt følgende klasse-hierarki: | |||||||||||||||||||||||||
Figur 6: Klasse-hierarki for tog |
|
||||||||||||||||||||||||
Vi har planer om at overtage togdriften mellem Herning og Silkeborg. Vi ønsker derfor at kunne lave objekter, der kan repræsentere forskellige tog. Til det formål vil vi lave to klasser RegionalTog og LynTog, men en fælles abstrakt super-klasse Tog. | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Implementer de tre klasser med de egenskaber, der er beskrevet ovenfor. Lav set- og copy-konstruktorer til samtlige klasser. Lav ligeledes toString-metoder for alle tre klasser, som egner sig til testformål. | |||||||||||||||||||||||||
Vi ønsker at kunne beregne, hvor stor en indtægt vi kan opnå på forskellige tog. Vi vil derfor lave en metode billetIndtægt, der beregner dette. Metoden returnerer hvor meget vi maksimalt kan opnå i billet-indtægt. | |||||||||||||||||||||||||
Prisen for en standard-plads er 20,- kr. og prisen for en business-plads er 50,- kr. Prisen er den samme uanset hvor man skal hen! Lad dig ikke distrahere af at dette er en håbløs urealistisk måde at fastsætte billetpriser på! | |||||||||||||||||||||||||
Lad os se et eksempel: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Implementer metoden billetIndtægt i alle tre klasser. Lav den abstrakt i klassen Tog. | |||||||||||||||||||||||||
Lav en testanvendelse, der instantierer tre objekter, som repræsenterer følgende tre tog: | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Testanvendelsen skal udskrive oplysninger om de tre tog, samt deres maksimalt mulige billet-indtægt. | |||||||||||||||||||||||||
Lav din testanvendelse så den demonstrerer polymorfien i metoderne: toString og billetIndtægt. | |||||||||||||||||||||||||