objektorienterad modellering programmering och analys

28
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 OOMPA-1999 Föreläsning 2

Upload: oriana

Post on 10-Jan-2016

46 views

Category:

Documents


4 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Objektorienterad Modellering Programmering och Analys

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

OOMPA-1999Föreläsning 2

Page 2: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 2 -

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 "Definition"Vad är det byggtmed?

C++, Smalltalk, Java. Gränssnittsbyggare. Kodgenerator.Återanvändbara komponenter

Hur arbetar det? Frågande snarare än berättande. Identifierande av enheter ochsändande av meddelanden.

Vad behandlar det? Abstraktioner som modellerar ett problem.Hur är detstrukturerat?

Moduler. Grundenheterna enkla att integrera. Generella beskrivningarav klasser av ting. Generalisering och specialisering, inkapsling,polymorfi, arv.

Vad mer kan mangöra med det?

Systemet kan utvidgas med ändringar som propagerar ut översystemet utan att dom behöver dupliceras eller "förstöra" ickerelaterade delar

Page 3: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 3 -

...

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.

Page 4: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 4 -

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

Page 5: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 5 -

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

myAccount = new Account();

yourAccount = new Account();

Inkapsling

metod

instans

Klass

Page 6: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 6 -

Skicka meddelanden

Meddelandesändning– Vi aktiverar ett objekt genom att skicka meddelanden till det

myAccount.balance();

yourAccount.balance();00 00

x = 100;myAccount.withdraw(x);

yourAccount.deposit(x);200200 600600

yourAccount.deposit(500);myAccount.deposit(300);

300300 500500

myAccount.transfer(100, yourAccount);

100100 700700

Vissa meddelanden kan ha argument

Page 7: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 7 -

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

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.

Page 8: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 8 -

…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

FigurGruppFigurGrupp FigurFigurrita rita *

Page 9: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 9 -

…sammansatt objekt

Ett annat exempel ären bild som består av linjer, rektanglar eller andra bilder

bild

bild

linje bild rektangel

bild

rektangel

rektangellinje

Page 10: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 10 -

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

Account

deposit(amount)withdraw(amount)transfer(amount, anotherAccount)balance()

balance = balance +amount;

balance = 0

balance = balance – amount;

withdraw(amount);anotherAccount.deposit(amount);

operationer/meddelanden

instansvariabelmed initialvärde

metoder

return balance;

Page 11: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 11 -

Klasser ordnas i hierarkier

Vehicle

start()stop()move()

LandVehicle AirVehicle

takeOff()land()

Car Train GolfCart Airplane Glider

superklass

supe

rkla

ss

subklas

ssuperklass

subk

lass

superklass

subklassernaärver från sinasuperklasser

Page 12: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 12 -

Metodbindning

Metod söks först i mottagarens klass därefter i superklasser Vehicle

start()stop()move()

AirVehicle

takeOff()land()

Airplane Glider

airplane = new Airplane();

airplane.start();

1: sök i klassen

2: sök i

superklas

sen

3: f

orts

ätt i

sup

erkl

asse

ns

supe

rkla

ss

Hittas ingen metodi rotklassen så genereras ett felavbrott!

Page 13: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 13 -

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')

Page 14: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 14 -

...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

Page 15: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 15 -

Subklasser kan skriva över metoder

Shape

toString() :Stringdraw() : voidmoveBy(distance) : void

position : Point

Rectangle

toString() :Stringdraw() : void

extent : Point

Ellipse

toString() :Stringdraw() : void

extent : Point

Circle

toString() : Stringdraw() : void

return "Jag är en figur!"

//vi gör ingenting som default!

position.translate(distance.x, distance.y);

//vi gör ingenting som default!

return "Jag är en ellips i position " +positon.toString();

primitiveDrawOval(postion, extent);

Square

toString() : Stringdraw() : void

max = Math.max(extent.x, extent.y);primitiveDrawOval(

new Point(max, max));

Försök att hitta klassergenom att abstrahera gemensamt beteendeoch ordna dem hierarkisktgenom att låta klasser“som är” (eng. is-a) avviss “underordnad” typbli subklasser.

Exempel:Kvadrat är-en rektangel.Cirkel är-en ellips.

Page 16: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 16 -

Polymorfi och överskrivning

Olika klasser kan ha metoder med samma namn, s.k. polymorfir1 = new Rectangle(); // Instansiera klassen Rectanglec1 = 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! */

Page 17: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 17 -

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 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.

Page 18: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 18 -

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

Page 19: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 19 -

...

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

Page 20: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 20 -

Sekvensdiagram

Scenarier brukar beskrivas med sekvensdiagram och andra interaktionsdiagram

Pelle Piteåposten Umeåposten Olleposta

sortera

transporterasortera

dela ut

Page 21: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 21 -

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

Page 22: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 22 -

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

Page 23: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 23 -

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

Page 24: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 24 -

Ett blankt CRC-kort

KlassnamnKlassnamn

AnsvarAnsvar ”Samarbetspartners””Samarbetspartners”

Page 25: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 25 -

CRC: Exempel

Grafiskt objekt som har en metod för att rita "sin" figur och ett delobjekt som också skall ritas ut

GrafisktObjektGrafisktObjekt

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

GrafisktObjekt

Page 26: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 26 -

PersonregisterPersonregisterHanterar ett register av personer Personer kan läggas in eller tas bortKan sortera registret efter namn, födelsenummer

respektive adress

Person

Hanterar information om en person: namn, adress, telefon, födelsenummer

Personsuperklasser: Objectsubklasser: Student

Personsuperklasser: Objectsubklasser: Student

Hanterar email och kursstatus

Studentsuperklasser: Personsubklasser:

Studentsuperklasser: Personsubklasser:

Page 27: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 27 -

CRC: Publicist och prenumerant

PublicistPublicistHåller intressant

information/dataMeddelar prenumeranter om

informationen ändras

Prenumerant

PrenumerantPrenumerantPrenumererar på intressanta förändringar hos en

eller flera publicisterImplementerar en strategi för att ta hand om

meddelanden om förändringar från publicisten

Publicist

Page 28: Objektorienterad Modellering Programmering och Analys

© Björn Eiderbäck 1999

- 28 -

"Klassiska" MVCVyVyVisualisera

modellenTransformera

koordinater

KontrollModell

ModellModell

Problemrelaterad informationSkicka ut meddelanden om

förändringar

KontrollKontrollTolka inmatning

från användarenFördela kontroll

VyModell