27. april 2004 - 16:45Der er
20 kommentarer og 1 løsning
Design af MEGET SIMPELT "program"
Jeg laver et lille program (for udfordringens skyld). Programmet er til at booke pladser i en biograf. Her er kravene:
get free seats reserve get confirmation exit
Så simpelt skal det være. Jeg lægger pris på en RIGTIG god forklaring, og hvad der ville være dumt, og klogt at gøre. Jeg har noget i tankerne om hvordan det skal opbygges, men det "går ikke op".
Så hvis i vil være venlige at beskrive Heirakiet etc. ville jeg være meget glad. Metoder og variabler klarer jeg selv.
PS. Jeg ønsker ikke at der bare bruges 2 klasser. Dette skal være meget beskrivende heiraki (+klasserne skal beskrive sig selv, så selv en noob som jeg kan hitte ud af dem :))
Kodeskrivning er en meget lille del af at lave et program. Det det handler om er at få beskrevet problemet og ALLE de regler der er i situationen og skal overholdes. Helst på sådan en måde at det bliver overskueligt.
Før det er gjort bør man ikke tænke på programkode.
Så lad os kikke på det:
biografen har et antal stole og de stole kan adresseres via rækkenummer (1..24) og stolenummer. Stolene i hver række nummereres fra 1 og opefter (til max 20) med stolen yderst tilhøjre som nummer 1.
De fire føste rækker er kortere (undgår for skæv vinkel til lærredet). række 1 har 12 stole, række 2: 14 stole række 3: 16 stole, række 4: 18 stole.
der er 3 udgange 1) tilvenstre helt nede ved skærmen. Direkte til gaden, benyttes efter filmen, den lukker selv så der er ingen mulighed for at komme ind igen. 2-3) tilhøjre, udfor række 23 og ved række 12. adgang fra hallen med billetsalg osv. her kan man gå ud og ind som man vil. Der her tilskuerne kommer ind.
billetter kan kun købes ved personlig henvendelse i billetsalget. (ingen bestillinger. (vi san klistre det på senere hvis ønsket)). der kan købes flere biletter samtidig.
Kundeønsker så som at "vi 4 vil sidde sammen" eller "sidde i midten" skal opfyldes såvidt det er muligt. Dog kan en solgt billet ikke udskiftes med en anden hvis kunden finder på et ønske efter købet.
Der er gangsti i højre side af salen og neden foran lærredet. plus en smal en i venstre side hvor biografejeren badede og svor og tilsidst fjernede den 21'te stol fordi brandinspektøren krævede det.
----------
Så er det din tur. foreslå 2 flere ting der er relevante for den biograf.
Der er en øvre etage med plads til det halve antal tilskuere af underetagen. Fra den øvre etage har man bedre lyd og syn, og derfor kostr billeterne 1.5 mere end standdard billet, som gælder på nederste etage.
Tænk mand tænk. er det relevant for DEN biograf at en anden biograf har andre priser. Det skal være ting vi behøver at kere os om. Er nogen pladser billigere end andre (fx række 1 billigere fordi man skal sidde og kikke op og får hold i nakken).
men jo, det vi vil have indtil videre er ikke andet en "info om den biograf".
Jeg skrev:______________________ Der er en øvre etage med plads til det halve antal tilskuere af underetagen. Fra den øvre etage har man bedre lyd og syn, og derfor kostr billeterne 1.5 mere end standdard billet, som gælder på nederste etage. ____________________________________ Der er tale om den samme biograf som du lagde ud med.
På den øvre etage er der plads til det halve antal tilskuere af underetagen.
Fra den øvre etage har man bedre lyd og syn, og derfor kostr billeterne 1.5 mere end standdard billet, som gælder på nederste etage.
Der er 2 udgange, en i højre og venstre side (set mod lærredet). Der er ikke brug for nødudgang.
Hele den øvre etage er rektangulær, og derfor er der plads til 10 rækker med 23 stole i for hver række. (Har regnet på det, og burde give ½ af hvad der er plads til nedenunder. Men har gjordt det lidt hurtigt, så der er nok en fejl eller 2).
Det burde være det. Billet salg etc. er det samme for hele salen.
stor sal A har 24 rækker med ca 20 stole i hver lille sal B har 10 rækker med 23 stole i hver og dyrere billetter
(ikke så meget for at slå antallet af stole fast som for at give de to sale navne så vi kan bruge de navne og vide hvilken sal vi snakker om)
så begynder vi at opbele i Objekter. vi skal bruge:
biografsal objekt. (vi laver 2 af dem med forskellige detaljer) billetsalg objekt. publikum objekter. en lind strøm af dem der kommer og køber billet. et plads objekt. som blandt andet indeholder række og nummer på en enkelt plads i biografen
Abstract class Biografsal { // der er mange ting der er ens for de to sale så vi laver denne abbstrakte // klasse for at fastlægge de ting de har tilfælles
abstract boolean sædeLedig( int række, int plads ); //skal findes i begge sale og fortælle om den plads er solgt
abstract boolean stribeLedig( int række, int pladsFra, ind antal ); //checker et antal pladser ved siden af hinanden
abstract Plads midtfor(); // returnerer et pladsobjekt fra 'midtpå en række' (eller null)
abstract Plads midtfor( int antal ); // returnerer en hægtet liste med 'antal' pladser midt på en række (eller null)
abstract void reserver( int række, int plads ); // kaldes fra billetsalget når den plads bliver solgt.
}
de metoder (plus sikkert andre skal vi have implementeret i et par klasser
class StorSalA extends Biografsal { // implementering } class LilleSalB extends Biografsal { // implementering }
efter instantiering skal de to sale indeholde pladsobjekter i arrays eller noget andet svarende til de pladser der er i hver sal.
prøv at implementere sofar. Du vil sandsynligvis finde flere 'fælles' metoder der kan flyttes ud i den abstrake fællesklasse.
Jamen så vil jeg da gå i krig. Er sgu fedt med så vejledende hjælp :)
Gulbaek: Tjoo, har jo også en skole at passe :) Men er da kommet videre til streams...skal bare have terpet det lidt mere, så jeg kan gå til fil håndtering.
den der kaldes fra billethullet når en publikum kommer og vil have et antal biletter til pladser ved siden af hinanden (kærestepar vil fx sjældent være glade for at sidde i hver sin ende af salen).
Det lyder til at du stiller større krav til dit biograf system end du indledningsvis skriver. Hvis du udarbejder en konkret systembeskrivelse kan der fremstilles et klassediagram over det system du forestiller dig og det kan du så programmere ud fra.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.