OOMPA-1999
Föreläsning 2
Objektorienterad Modellering Programmering och
Analys
Objektorientering grunder
 Vad är OO?
– Programspråk?, paradigm?, gränssnitt?, struktur?, eller?

Termer och fundament
– Objekt, klass, hierarki, arv, inkapsling, polymorfi, meddelande, metod, instans


Scenarier
– För att beskriva typiska och viktiga aktiviteter
CRC-kort
– Teknik för att beskriva och ta fram objekt, klasser och relationer
Vad menas med att vara
objektorienterad?

Svaret beror på om frågan avser programspråk,
användargränssnitt, en tillämpning, en databas eller en analys
och designmetod
Kategori
Vad är det byggt
med?
Hur arbetar det?
"Definition"
C++, Smalltalk, Java. Gränssnittsbyggare. Kodgenerator.
Återanvändbara komponenter
Frågande snarare än berättande. Identifierande av enheter och
sändande av meddelanden.
Vad behandlar det? Abstraktioner som modellerar ett problem.
Hur är det
Moduler. Grundenheterna enkla att integrera. Generella beskrivningar
strukturerat?
av klasser av ting. Generalisering och specialisering, inkapsling,
polymorfi, arv.
Vad mer kan man
Systemet kan utvidgas med ändringar som propagerar ut över
göra med det?
systemet utan att dom behöver dupliceras eller "förstöra" icke
relaterade delar
© Björn Eiderbäck 1999
-2-
...

Objektorienterat språk
– Baseras på inkapsling, polymorfi och arv

Objektorienterad användargränssnitt
– Delarna i gränssnittet är objekt/komponenter

Objektorienterad tillämpning eller verktyg
– Ändringsbara, återanvändbara och utvidgbara komponenter

Objektorienterad databas
– Representerar, lagrar och återskapar objektmodeller

Objektorienterad analys och design
– Består av tekniker att hitta objekt, för att strukturera
relationer, eller hantera processen att skapa objekt.
© Björn Eiderbäck 1999
-3-
Varför objektorientering?




Separerar gränssnitt från implementation
Avbildar världen på ett enkelt och naturligt sätt
Objekt förbereder system för förändring
Objekt tillåter att (bara) delar av systemet
fungerar
– Andra delar kan byggas klart senare

Objekt är naturliga att återanvända
© Björn Eiderbäck 1999
-4-
Vad är ett objekt?

Ett objekt
– En beskrivning av beteende
– Har ett väldefinierat gränssnitt som specificerar beteendet
oberoende av implementationen. Andra objekt kan interagera
med objektet via det givna gränssnittet.
– Implementationen beskriver hur objektet skall reagera
– Ett objekt består av


privata delar, dolda och ej åtkomliga av andra objekt
publika delar, som är åtkomliga för andra objekt
– Ett objekt instansieras från en klass
yourAccount = new Account();
myAccount = new
Account();
© Björn Eiderbäck 1999
-5-
Skicka meddelanden

Meddelandesändning
– Vi aktiverar ett objekt genom att skicka meddelanden till det
0
myAccount.balance();
yourAccount.balance();
0
Vissa meddelanden kan ha argument
300
myAccount.deposit(300)
;
200
x = 100;
myAccount.withdraw(x
);
100
© Björn Eiderbäck 1999
yourAccount.deposit(500);
500
yourAccount.deposit(x);
600
myAccount.transfer(100,
yourAccount);
-6-
700
Sammansatta objekt och delegering

Objektsammansättning
– Objekt kan vara definierade mha andra objekt

en bil bil består av en kaross, en motor, en bensintank, dörrar etc
– dessa objekt kan i sin tur bestå av andra objekt

en dörr består av ett handtag, ett fönster, ett lås, osv
– Ett objekt som består av andra objekt kan delegera ansvar till
dessa objekt

© Björn Eiderbäck 1999
Bilen delegerar ”ansvaret” för dörrlåsningen till dörren som i sin
tur delegerar detta till låset.
Vi kan enkelt byta lås (från tex mekaniskt till elektroniskt) utan
att ändra varken bil eller dörr.
-7-
…delegereing..

Ett PersonRegister delegerar till
– ett Dictionary

Meddelandecentral delegerar till
– ett Kommunikationsobjekt som delegerar till


ServerSocket och KlientSocket
En Person delegerar till
– Namnobjekt och Adressobjekt

En FigurGrupp delegerar utritning till
– Figurer
rita
© Björn Eiderbäck 1999
FigurGrupp
-8-
rita
*
Figur
…sammansatt objekt

Ett annat exempel är
en bild som består av linjer, rektanglar eller andra bilder
bild
bild
linje
bild
bild
linje
© Björn Eiderbäck 1999
rektangel
rektangel
rektangel
-9-
Vad är en klass?

En klass är en beskrivning av en viss uppsättning av
objekts attribut och beteende
– attributen kallas för instansvariabler
– beteendet beskrivs med hjälp av metoder
instansvariabel
med initialvärde
operationer/
meddelanden
© Björn Eiderbäck 1999
Account
balance = balance +
amount;
balance = 0
deposit(amount)
withdraw(amount)
transfer(amount, anotherAccount)
balance()
return balance;
- 10 -
metoder
balance = balance – amount;
withdraw(amount);
anotherAccount.deposit(amount);
Klasser ordnas i hierarkier
subklasserna
ärver från sina
superklasser
Vehicle
start()
stop()
move()
AirVehicle
LandVehicle
takeOff()
land()
Car
© Björn Eiderbäck 1999
Train
GolfCart
- 11 -
Airplane
Glider
Metodbindning

Metod söks först i mottagarens klass därefter i
Vehicle
superklasser
start()
stop()
move()
airplane = new Airplane();
airplane.start();
AirVehicle
takeOff()
land()
Hittas ingen metod
i rotklassen så
genereras ett felavbrott!
© Björn Eiderbäck 1999
Airplane
- 12 -
Glider
Arvshierarkier

I VisualWorks\Smalltalk hittar vi följande klasshierarki (ett
utsnitt)
Object ()
Magnitude ()
ArithmeticValue ()
Number ()
Fraction ('numerator' 'denominator')
Integer ()
LargeInteger ()
LargeNegativeInteger ()
LargePositiveInteger ()
SmallInteger ()
Collection ()
SequenceableCollection ()
OrderedCollection ('firstIndex' 'lastIndex')
SortedCollection ('sortBlock')
© Björn Eiderbäck 1999
- 13 -
...Arvshierarkier

I Java-2 hittar vi följande klasshierarki (ett utsnitt)
java.lang.Object
java.lang.Number
java.lang.Integer
java.math.BigInteger
java.lang.Long
java.lang.Short
java.util.AbstractCollection
java.util.AbstractSet
java.util.TreeSet
java.util.HashSet
© Björn Eiderbäck 1999
- 14 -
Subklasser kan skriva över metoder
Försök att hitta klasser
genom att abstrahera
gemensamt beteende
och ordna dem hierarkiskt
genom att låta klasser
“som är” (eng. is-a) av
viss “underordnad” typ
bli subklasser.
Exempel:
Kvadrat är-en rektangel.
Cirkel är-en ellips.
Shape
position : Point
toString() :String
draw() : void
moveBy(distance) : void
//vi gör ingenting som default!
position.translate(distance.x, distance.y);
Rectangle
Ellipse
extent : Point
extent : Point
toString() :String
draw() : void
toString() :String
draw() : void
return "Jag är en ellips i position " +
positon.toString();
primitiveDrawOval(postion, extent);
Square
Circle
toString() : String
draw() : void
© Björn Eiderbäck 1999
return "Jag är en figur!"
- 15 -
toString() : String
draw() : void
max = Math.max(extent.x, extent.y);
primitiveDrawOval(
new Point(max, max));
Polymorfi och överskrivning

Olika klasser kan ha metoder med samma namn, s.k.
polymorfi
r1 = new Rectangle(); // Instansiera klassen Rectangle
c1 = new Circle(); // Skapa en instans av klassen Circle
/* Nu skickar vi meddelandet draw till både r1 och c1 */
r1.draw();
c1.draw();
/* vilket ger olika resultat trots att vi skickar samma meddelande till
båda objekten. Mottagaren "avgör" helt enkelt vad som skall
hända! */
© Björn Eiderbäck 1999
- 16 -
Design och utveckling

Vilken typ av projekt kan vara avgörande för hur
man går tillväga
– Programmera i det lilla


kod skapas av en eller få programmerare. En enskild person kan ha
överblick och vara insatt i alla delar av projektet.
Huvudproblem (mjukvara): designa och utveckla algoritmer
– Programmera i det stora


© Björn Eiderbäck 1999
mjukvaran tas fram av ett stort team. Vissa personer kan
specificera eller designa andra kan koda vissa komponenter,
slutintegration/applikationen görs kanske av en tredje grupp, osv.
Ingen person har möjlighet att sätta sig in alla delar av projektet.
Huvudproblem (mjukvara): hantera kommunikationen mellan olika
delar av projektet.
- 17 -
Arbeta med scenarier

Identifiera viktiga delar av systemet

Beskriv dem med steg-för-steg beskrivningar i
vanlig text
–
–
–
–
–
–
–
–
beskriver händelseförlopp
börjar och slutar på godtyckligt (/lämpligt) ställe
innefattar objekt, delsystem eller en blandning av dessa
används för att beskriva dynamiken hos systemet
används för att testa framtagna modeller
används för att konstruera modeller
kan användas vid verifiering av system
kan också utgöra basen för dokumentation av systemet
© Björn Eiderbäck 1999
- 18 -
...

Ofta hittar man scenarier genom att utgå från hur
användaren skall interagera med systemet
– Senare kan man (kanske) hitta delscenarier och beskriva hur
objekten interagerar med varandra

Exempel (Pelle i Piteå skickar post till Olle i Umeå)
–
–
–
–
–
Pelle postar brevet i brevlådan i Piteå
Posten sorteras
Brevet transporteras till posten i Umeå
Posten sorteras
Brevet delas ut
© Björn Eiderbäck 1999
- 19 -
Sekvensdiagram

Scenarier brukar beskrivas med sekvensdiagram och
andra interaktionsdiagram
Pelle
posta
Piteåposten
Umeåposten
sortera
transportera
sortera
dela ut
© Björn Eiderbäck 1999
- 20 -
Olle
Dela upp på delkomponenter

Identifiera vad som skall göras och sedan vem som skall göra
det

Då man börjar få någorlunda klart för sig vad man skall
konstruera är det dags att identifiera komponenter

Komponenterna (systemen) delas sedan upp på delkomponenter
(delsystem)

Detta är ofta en brainstormingliknande iterativ process
© Björn Eiderbäck 1999
- 21 -
Tumregler

En komponent skall ha en liten mängd väldefinierat
ansvar
– Ändringar skall påverka så få som möjligt

En komponent skall interagera så lite som möjligt
med andra komponenter
– Att minska kopplingen (eng. coupling) mellan olika komponenter
ökar sannolikheten för att ändringar göras med minimal
inverkan på andra komponenter
© Björn Eiderbäck 1999
- 22 -
CRC-kort (Class-Responsibility-Collaborators)

Av Cunningham och Beck under mitten av 80-talet.
– Togs fram för att lära ut objektorienterad programmering
– För att ge komponenter fysisk presentation


Bra vid ”brainstorming”/spånande
Process:
– Man skriver ner klasser på kort. Selektera inte nu utan skriv ner alla
förslag
– Efter ett tag när man har ett (tillräckligt) antal klasser väljer man ut
”dom bästa”
– Sedan går man över till att identifiera ansvarsområden och beteende
för varje klass
– Sedan identifieras samarbete klasser emellan
– Man försöker också ordna klasserna hierarkiskt samt identifiera
abstrakta klasser
© Björn Eiderbäck 1999
- 23 -
…

Ett blankt CRC-kort
Klassnamn
Ansvar
© Björn Eiderbäck 1999
”Samarbetspartners”
- 24 -
CRC: Exempel

Grafiskt objekt som har en metod för att rita "sin"
figur och ett delobjekt som också skall ritas ut
GrafisktObjekt
Håller grafisk beskrivning i form av en en metod som
beskriver den aktuella presentationen
Skall kunna innehålla ett annat grafiskt objekt med
samma API som det själv
Det skall gå att lägga in ett nytt eller ta bort det
aktuella grafiska delobjektet
Vid utritning skall det grafiska objektet också se till
att delobjektet ritas ut
© Björn Eiderbäck 1999
- 25 -
GrafisktObjekt
Personregister
Hanterar ett register av personer
Personer kan läggas in eller tas bort
Kan sortera registret efter namn, födelsenummer
respektive adress
Person
Person
superklasser: Object
subklasser: Student
Hanterar information om en person: namn,
adress, telefon, födelsenummer
Student
superklasser: Person
subklasser:
Hanterar email och kursstatus
© Björn Eiderbäck 1999
- 26 -
CRC: Publicist och prenumerant
Publicist
Håller intressant
information/data
Meddelar prenumeranter om
informationen ändras
Prenumerant
Prenumerant
Prenumererar på intressanta förändringar hos en
eller flera publicister
Implementerar en strategi för att ta hand om
meddelanden om förändringar från publicisten
© Björn Eiderbäck 1999
- 27 -
Publicist
"Klassiska" MVC
Vy
Visualisera
modellen
Transformera
koordinater
Kontroll
Modell
Kontroll
Tolka inmatning
Vy
från användaren Modell
Fördela kontroll
Modell
Problemrelaterad information
Skicka ut meddelanden om
förändringar
© Björn Eiderbäck 1999
- 28 -