Umu logo

Umeå universitet
Teknisk- naturvetenskaplig fakultet
Institutionen för datavetenskap

Gruppövning 'Objektifiering'


I denna gruppövning skall du utgå från en problembeskrivning och plocka ut klasser, attribut och metoder. Övningen utförs lämpligast i grupper om 2-4 personer. Som avslutning på övningen ritar du ett klassdiagram som en OH-bild som handledaren kan visa för gruppen som exempel på lösning. Du behöver själv inte stå upp och säga något men det är mycket intressant att se olika lösningar, och om det finns tid över kan vi diskutera de olika alternativen. Du kommer alltså inte att skriva någon kod i denna övning, utan resultatet är en lista på klasser med attribut och metoder, samt ett klassdiagram.

Här kommer problembeskrivningen:

"A company intends to build a two-story office building and equip it with the "latest" in elevator technology. The company wants you to develop a program that simulates the operation of the elevator to determine if it will meet their needs.

The elevator, which has a capacity of one person, is designed to conserve energy, so it only move when neccesary. The elevator starts the day waiting with its doors closed on the building's first floor. The elevator, of course, alternates directions - first up, then down.

Your simulator has no user interface - new persons are randomly created and arrives at either of the two floors. The person then presses the floor's call button. The persons destination floor is always 'the other' floor, so if the person is on the second floor he/she will want to travel to the first floor and vice versa.

If a person arrives on a floor were the elevator happens to be, that person can immediately get on the elevator (after pressing the call button and waiting for the floor doors and elevator doors to open). If a person arrives on a floor without elevator, the elevator should respond to the call button by moving to the other floor and pick up the waiting person. For simplicity, in this version of the simulation, the elevator moves between floors in zero time. This will be made more realistic in future verisons of the elevator.

The elevators arrival at a floor is signalled by turning on a ligth on that floor above the doors and by ringing the floor bell. The floor button and the elevator button are reset, the elevator doors open, the floor's doors open, and the passenger gets out of the elevator. If a passenger is waiting on the floor he/she boards the elevator and presses the a destination button. If the elevator needs to begin moving, it determines in which direction it should go (a simple decision on a two-story elevator !), and begins moving to the other floor. For simplicity, assume that all the evnts that happen once the elevator reaches a floor and until the floor's doors are closed take zero time. The elevator always knows its current floor and its destination floor.

Due to the fact that all events in this version of the simulation take zero time, only one person can be in the simulation at a time. The simulation should process each person completely before the next person arrives in the simulation. In other words, when a person is created, that person should press the call buton, be picked up by the elevator, be moved to the opposite floor and should exit the elevator before the next person walks onto a floor to wait for the elevator.
"

Uppgift 1 - klasser

Identifiera klasserna I simuleringsproblemet. Problemformuleringen nämner många objekt som arbetar tillsammans för att simulera hissen och dess interaktion med passagerare, våningsplan, ringklockan osv. Leta fram alla substantiv från beskrivningen - med stor sannolikhet representerar dessa de flesta klasserna som behövs för att implementera simuleringsprogrammet.
För varje klass ni hittat, skriv en kort beskrivning som innehåller de fakta ni har om just den klassen.

Uppgift 2 - attribut

Nu är det dags att plocka ut klassernas attribut. I detta exempel är attribut saker som att en lampa lyser, en knapp är intryckt osv. Ett sätt att gå tillväga är att skriva upp alla fakta som ni känner till, och sedan gruppera dessa fakta under varje klass som ni indentifierade i uppgift 1. Så här kan en sådan lista se ut:

Riktning upp/ner
Upptaget våningsplan
Person i hiss
Person på våning
Person går in i hissen
En knapp trycks in
Hissdörrar
Hissen stänger sina dörrar
Våningsplan
osv ...

Detta är inte en exakt vetenskap, men gör så gott ni kan. Det är alltid bättre att ta med mer än nödvändigt, ni kan alltid eliminiera saker senare.
Gruppera era fakta under varje klass, och bestäm om varje fakta antingen är ett attribut eller något annat. Tills vidare kallar ni händelser (metoder) som 'något annat'. Exempel på attribut som hissen får är till exempel:

'rör sig' eller'står stilla'
har passagerare
riktning - upp eller ned

En knapps attribut kan vara

intryckt - dvs på eller av

Objekt kan ha andra objekt som attribut, till exempel så har en hiss (kanske) två knappar. Detta kallas aggregat.

Uppgift 3 - metoder

Titta på de fakta som ni märkt 'något annat' och försök plocka ut beteenden som objekten i klassen har, dvs något som man kan säga åt objektet att göra. Ett exempel är en knapp: den kan tryckas in (av en passagerare), så tryckInKnapp är ett beteende hos knappen och representeras som en metod. Metoder ändrar ofta värdet på objektets attribut, tryckInKnapp ändrar t.ex attributet 'intryckt' till sant (om den inte redan var intryckt vill säga). Ofta blir det en hel del fakta 'över', dvs de är varken attribut eller metoder.

Uppgift 4 - klassdiagram

Slutligen, skissa på ett klassdiagram med UML-notation. Det är inte säkert att din lösning innehåller alla typer av relationer (arv, association, aggregat), och det finns heller inte något helt 'rätt svar'. Rita ditt klassdiagram på ett OH-blad, och om du får rum så skriv också dit de viktigaste attributen och metoderna i dina klasser.




http://www.cs.umu.se/kurser/TDBB09/VT01/grupp1/index.html

Senast ändrad den 15 Nov 1999 av Thomas Johansson

Copyright © 1999 by Dept of Computing Science, Umeå University. All rights reserved.