OOMPA 2D1359 & 2D1360
Föreläsning 1
Objektorienterad Modellering Programmering och Analys
Introduktion och översikt
Hemsida:
http://www.nada.kth.se/kurser/kth/2D1359
Registrering:
res checkin oompa00
Hemkatalog:
/info/oompa00
Kursmöte
Newsmöte: news:nada.kurser.oompa
Kursledare
Björn Eiderbäck, [email protected]
Rum 1641, Osquars Backe 2, tel 7906277
previous
next
Introduktion och översikt
Mål (saxade ur den formella beskrivningen)
• ge ingående kännedom om principerna och
begreppen bakom objektorienterad analys, design och
programmering,
• ge kännedom om och färdighet i metoder för att
utveckla, d.v.s. utforma, implementera och prova,
objektorienterade program,
• ge erfarenhet av objektorienterad programmering
för att deltagarna ska
• kunna tillämpa objektorienterade metoder vid design
och implementation av moderna programsystem.
previous
next
2
Introduktion och översikt
Kursinnehåll ...
• Objektorientering, principer och begrepp: objekt,
klass, instans, attribut, metod, arv etc. Abstrakta
datatyper, generiska datatyper, polymorfi.
• Objektorienterad analys, modellering och design:
principiella tillvägagångssätt, exempel på notationer,
kriterier
på
god
design
och
robust
programuppbyggnad. Systematiska principer för
konstruktion av korrekta och robusta program.
previous
next
3
Introduktion och översikt
... Kursinnehåll
• Objektorienterade språk: olika språkfamiljer, deras
grundläggande
begrepp
och
skillnader.
Programmering i ett objektorienterat språk.
• Testning: typer av fel, felhantering, val av testdata
och testprocedurer.
previous
next
4
Introduktion och översikt
Kursens uppläggning ...
• Föreläsningar
– På kursen ingår 18 föreläsningar varav 13 i period 1 och 5
i period 2.
• Seminarier
– På kursen ingår också 6 seminarier. Varje seminarium
består av två delmoment. Seminarierna redovisas i
grupper vid speciella seminarietillfällen.
– För godkänt fordras att 9 delmoment utförs (av totalt 12)
previous
next
5
Introduktion och översikt
... Kursens uppläggning ...
• Laborationer
– Laborationer genomförs i grupper om två personer.
– I kursen ingår sex stycken laborationer. Dom första två
laborationenrna bör redovisas period ett resterande i
period två.
– Extrauppgifterna på respektive laboration kan också
ersättas med speciell extrauppgiftslab. Publiceras på
kursens hemsida.
– Laborationerna genomförs i salar plan 4 Osquars Backe 2
• Tentamen
– Innehållet i period ett av kursen tenteras.
previous
next
6
Introduktion och översikt
... Kursens uppläggning ...
• Seminarier
–
–
–
–
–
–
previous
next
Sem 1, Figurer i hierarki
Sem 2, CRC-kort
Sem 3, UML
Sem 5, Designmönster
Sem 4, Kontemplation, reflektion och lite mer UML
Sem 6, eXtreme Programming.
7
Introduktion och översikt
... Kursens uppläggning ...
• Laborationer
–
–
–
–
–
–
Lab 1, Figurer i hierarki
Lab 2, Designmönster
Lab 3, Grafik
Lab 4, Mer om Designmönster. IDE
Lab 5, VisualWorks\Smalltalk: Introduktion
Lab 6, eXtreme Programming och Smalltalk
– Extralabar
• Värda 1-6 betygsgrundande kurspecifika päng beroende
av deras omfattning
previous
next
8
Introduktion och översikt
Kursböcker
Vi kommer använda följande bok:
• Object-Oriented Software Engineering Conquering Complex and
Changing Systems, av Bernd Bruegge och Allen H Dutoit,
Prentice Hall 2000, ISBN 0-13-489725-0.
• Det finns också ett häfte om Java som säljs på NADAs
expedition:
– Javaintroduktion, av Bälter och Redz.
• Den som vill kan skaffa en bok om Java gärna med fokus på
objektorientering, tex:
– Object-Oriented Software Development Using Java principles, patterns,
and frameworks, av Xiaoping Jia, Addison Wesley 2000, ISBN 0-20135084-X.
• Information och tutorials om Java finns också på nätet, se kursens
hemsida för adresser.
previous
next
9
Introduktion och översikt
Objektorientering Historik språk...
• Simula
– Av norrmännen Nygaard och Dahl
– 50-talet Simulering på kärnkraftsanläggning
– 60-talet utvecklades till Simula-67
• Smalltalk
–
–
–
–
previous
next
60-talet Allan Kays vision Dynabook
70-talet Införde terminologin och spred idéerna
Resulterade i flera versioner av Smalltalk
”berömda” Smalltalk-80 som blev plattformsoberoende och
använde JIT-teknik
10
Introduktion och översikt
… språk ...
• C++
– Dansken Stroustrup
– C-syntax
– Inspirerad av Simula
• Eiffel
• Objective-C
• Lisp-dialekter
– CLOS
• Object-Pascal
• mfl
previous
next
11
Introduktion och översikt
... språk
• Java
– Tidigt 90-tal med Gossling som drivande kraft
– Inbäddade system
– WEB
• klient/server
• säkerket
– Plattformsoberoende
previous
next
12
Introduktion och översikt
Mjukvarukonstruktion
• Vad är ett bra system?
Nyttigt och användbart
Pålitligt
Flexibelt
Överkomligt
Tillgängligt
previous
next
13
Introduktion och översikt
Har vi bra system?
• Vi känner till att många system har "problem" eller fel
• Det finns exempel på system med mer drastiska fel
– Mariner 1 till Venus 1962
• förstördes 290 s efter start, kostnad nästan 20 miljoner dollar
–
–
–
–
Ariane 5 1996
Denvers godshanteringssystem överskred budget med 50%
Londons ambulanssystem
Therac-25
– Hotmail
– ...
previous
next
14
Introduktion och översikt
Hur ser ett bra system ut?
• Problem
– Människans kognitiva förmåga är begränsad
• Ett bra system är välstrukturerat och nedbrutet på
mindre delar som kan förstås och förändras utan att
andra delar i onödan påverkas
• Man använder välkända designmönster
• Systemen brukar ha:
–
–
–
–
previous
next
svag koppling mellan delar
sammanhållna delar
inkapsling används
vara byggda med utgångspunkt från respektive moduls
gränssnitt
15
Introduktion och översikt
Inkapsling och lös koppling
• Inkapsling är när en klient eller modul inte får veta mer
än vad som som "finns i" gränssnittet hos ett annat
objekt (som det använder)
• Lös koppling är när olika moduler, eller komponenter, är
så lite beroende av varandra som möjligt
previous
next
16
Introduktion och översikt
Fokusera på gränssnitt
• Det har i många situationer visat sig bra om man
designar ett system med utgångspunkt från
komponenternas gränssnitt istället för beteende
• Då brukar det vara enklare att ändra eller byta ut en viss
modul eller komponent än annars
previous
next
17
Introduktion och översikt
Abstraktion
• Med abstraktion menas att detaljer elimineras och att
man fokuserar på väsentligheter
• När man abstraherar "förloras" vissa detaljer
• Graden av abstraktion kan variera i olika beskrivningar
av ett system
– Analys är mer abstrakt än
– Design som är mer abstrakt än
– Konstruktionen eller koden
previous
next
18
Introduktion och översikt
Komponentbaserad konstruktion
• Man har länge eftersträvat konstruktion av system mha
av pluggbara komponenter, ibland enligt legometafor
• Objektorientering underlättar detta angreppsätt men är
ändå inte lösningen på alla problem
previous
next
19
Introduktion och översikt
Bygga (stora) system
• Process
– Använd en process med klart avskiljbara faser, där
slutprodukten är utgånsgpunkt för nästa fas
• Faser
– En fas är en viss typ av moment i systemets utveckling, tex
analys, design eller konstruktion
• Iteration
– Upprepa hela processen om och om igen där varje fas
successivt "förbättras"
• Olika detaljnivå
– Olika faser ger olika detaljnivå och olika beskrivningsätt
beskriver ett system på olika sätt
previous
next
20
Introduktion och översikt
OO Historik Metoder ...
• Problem
–
–
–
–
–
Svårt att utveckla system
80% underhåll
Modultänkande
Formalism fast enkel och användbar
Kommunikation
• Flera metoder utvecklades på 80-talet
–
–
–
–
–
–
previous
next
OMT
ObjectOry
Booch
Shlaer-Mellor
Coad-Yourdon
...
21
Introduktion och översikt
… UML ...
• Unified Modeling Language UML
–
–
–
–
–
previous
next
90-talet
Förening av tre dominerande metoder
”Standard”, OMG
Mer notation än metod (än så länge)
Ej (för) stringent = användbart
22
Introduktion och översikt
… UML …
Client
Target
Adaptee
request()
specificRequest()
Adapter
request()
previous
next
adaptee
adaptee specificRequest()
23
Introduktion och översikt
… UML
Client
1:m
4:r
previous
next
Adapter
2:m’
3:r’
Adaptee
24
Introduktion och översikt
Objektorientering
• Ett sätt att se världen
– Agenter som kommunicerar
• Dessa agenter kallas för objekt
– Objekten självständiga enheter
• Meddelanden och metoder
–
–
–
–
Objekten kommunicerar genom att skicka meddelanden till varandra
Hur ett objekt skall reagera på ett visst meddelande beskrivs i en metod
Olika objekt kan reagera olika på samma meddelande
Exempel:
kalle.sitt() ger inte samma resultat som fido.sitt()
Där kalle är en människa och fido en hund
previous
next
25
Introduktion och översikt
Klasser
• En viss typ av objekt är definierad av en klass (eng class)
• Ett objekt av en viss klass kallas för en instans (eng instance)
• Exempel-1
– Klassen Bil
– Kan ha instanserna Volvo, SAAB, Renault, mfl
• Exempel-2
– Klassen Människa
– Kan ha instanserna Kalle, Olle, Lisa, Greta, osv
• Exempel-3
– Klassen Punkt
– Kan bla ha instanserna (10, 20), (13, 47), (200, -10)
previous
next
26
Introduktion och översikt
Meddelanden och metoder
• En uppmaning till ett objekt att utföra något kallas för ett
meddelande (eng message)
volvo.moveBy(10, 20);
• Beskrivningen av beteendet av ett visst meddelande kallas för
metod (eng method)
public void moveBy(int x, y)
{position.x = position.x + x;
position.y = position.y + y;}
• Objektet som uppmanas att utföra ett meddelande brukar kallas
för mottagare (eng. receiver)
volvo.moveBy(10, 20);
argument
mottagare
previous
next
meddelande
27
Introduktion och översikt
Klasshierarkier och arv
Klasser ordnas i hierarkier
Window
Person
Ellipse
Circle
Win95Window
Student
MacWindow
En subklass ärver från sina superklasser
Både attribut och metoder
Person
name
socSecNo
age()
isMale()
previous
next
Student
programme
courses
isReadyWithAllCourses()
28
Introduktion och översikt
Metodbindning
Ett meddelande till ett objekt
p = new Person();
p.age();
resulterar i att en sökning efter
metod med samma namn söks i
objektets klass
Person
name
socSecNo
age()
isMale()
om metoden inte hittas i klassen
fortsätter sökningen i superklassen
p = new Student();
p.age();
Student
programme
courses
isReadyWithAllCourses()
previous
next
29
Introduktion och översikt
Polymorfi och överskrivning
Olika klasser kan ha metoder med samma namn, s.k. polymorfi
Rectangle
Ellipse
paint()
paint()
Cartoon
Button
paint()
paint()
Subklasser kan skriva över (eng. override) metoder i superklasser
Ellipse
paint()
paint()
Circle
paint()
previous
Square
paint()
next
MotorVehicle
Rectangle
numberOfWheels()
Car
numberOfWheels()
Boat
numberOfWheels()
30
Introduktion och översikt
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
"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
Kategori
Vad är det byggt
med?
Hur arbetar det?
previous
next
31
Introduktion och översikt
...
• 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.
previous
next
32
Introduktion och översikt
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
previous
next
33
Introduktion och översikt
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();
previous
next
yourAccount = new Account();
34
Introduktion och översikt
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
previous
yourAccount.deposit(500);
500
yourAccount.deposit(x);
600
myAccount.transfer(100,
yourAccount);
next
700
35
Introduktion och översikt
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.
previous
next
36
Introduktion och översikt
…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
previous
next
FigurGrupp
rita
*
Figur
37
Introduktion och översikt
…sammansatt objekt
• Ett annat exempel är
en bild som består av linjer, rektanglar eller andra bilder
bild
bild
bild
linje
bild
linje
previous
next
rektangel
rektangel
rektangel
38
Introduktion och översikt
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
previous
next
Account
balance = 0
deposit(amount)
withdraw(amount)
transfer(amount, anotherAccount)
balance()
balance = balance +
amount;
metoder
balance = balance – amount;
withdraw(amount);
anotherAccount.deposit(amount);
return balance;
39
Introduktion och översikt
Klasser ordnas i hierarkier
subklasserna
ärver från sina
superklasser
Vehicle
start()
stop()
move()
AirVehicle
LandVehicle
takeOff()
land()
Car
previous
next
Train
GolfCart
Airplane
Glider
40
Introduktion och översikt
Metodbindning
• Metod söks först i mottagarens klass därefter i
superklasser
Vehicle
start()
stop()
move()
airplane = new Airplane();
airplane.start();
AirVehicle
takeOff()
land()
Hittas ingen metod
i rotklassen så
genereras ett felavbrott!
previous
next
Airplane
Glider
41