Document

Transcription

Document
Personal
• Lärare
Objektorienterad
programmeringsmetodik
5DV133
– Johan Eliasson (johane@cs.umu.se) (kursansv)
– Thomas Johansson (thomasj@cs.umu.se)
• Handledare
– Marcus Karlsson (marcusk@cs.umu.se)
– Niclas Lockner (lockner@cs.umu.se)
Java
VT-12
1
2
Kursmål
Här sitter vi
Kunskap och förståelse
MIT-huset våning 4
•
förklara grundläggande koncept i en objektorienterad ansats,
•
visa kunskap om metoder, så som CRC, för objektorienterad
modellering av system,
• visa kunskap om UML-notation för klassdiagram.
Färdighet och förmåga
Support
Johan
•
tillämpa grundläggande objektorienterade koncept i Java
•
analysera ett problem utifrån en objektorienterad ansats,
•
i grupp och enskilt designa ett objektorienterat program,
dokumentera denna design, samt implementera den i Java,
•
använda ett versionshanteringssystem för källkod och annan
dokumentation som skapas i grupp,
• kunna utföra enhetstestning med hjälp av JUnit.
Värderingar och förhållningssätt
•
3
visa förmåga att utifrån en objektorienterad ansats, och andra
för problemet relevanta aspekter göra bedömningar av en 4
modells lämplighet.
Kursens uppläggning
Examination
• Föreläsningar! !
-F
• Metodikövningar!
-G
- Under dessa kommer vi främst att
jobba med CRC-metoden
• Individuell handledning
• Två moment
– Moment 1:
• 4 hp
• Teoriprov (3 timmar)
• Praktiskt prov i lab (4 timmar)
– Moment 2:
• 3,5hp
• Examineras via obligatoriska uppgifter (varav en
ska genomföras i grupp och redovisas vid två
tillfällen)
5
6
Kursutvärderingen från vt11
•Se om det går att flytta fler föreläsningar tidigare så att man
snabbare kan komma igång med lab1 och därmed undvika
att arbetsbelastningen blir så hög i slutet av kursen.
Förhoppningsvis ligger påsken också bättre till i förhållande
till kursplaneringen nästa år.
•Försök se till så att det blir lite mindre att göra på praktiska
provet
•Undersök om det går göra tex lab 2 frivillig för att minska
antalet obligatoriska moment; jag tror dock att det behövs
lika många övningstillfällen på CRC-metoden för att man
ska behärska den nog bra så det är inte säkert att det är
lämpligt
•Gör en grundligare genomgång av Eclipse och SVN
Kursmaterial
• Cay S. Horstmann,
Big Java,
Wiley,
4 ed ISBN: 978-0-470-55309-1
– Även övriga upplagor från och med ed3 funkar
– Boken finns även i en något mindre utförlig
upplaga under namnet
“Java Concepts”
• Object-Oriented Analysis and Design
Through Scenario Role-Play
• OH bilderna från föreläsningarna
http://www.cs.umu.se/kurser/5DV133/VT12
7
Kursverktyg
8
Java
• Eclipse
• Utformades av James Gossling (SUN) och
släpptes 1995
• Konstruerat för att vara
plattformsoberoende. Dvs ett program
skrivet i java skall gå att köra på olika
datorplattformar utan att man behöver göra
några förändringar.
– Finns att ladda hem för de flesta
datorplatformar (PC, Mac, Linux m.fl.)
9
Objekt
Programmering i Java
programmering
Ett objekt är en individuellt identifierbar entitet som kan vara konkret
eller abstrakt. Ett objekt har tillstånd, beteende och identitet.
exekvering
exekvering
– Reellt, gripbart, synligt ting (t ex en specifik person)
– Abstrakt ting (t ex en tid eller en anställd)
<fil>.class
<fil>.java
Java
programkod
…
10
översättning
kompilator
Java
bytekod
…
Varje objekt har ett tillstånd, ett beteende och en identitet.
exekvering
11
– Tillståndet beskriver objektets egenskaper (t ex adress
och ålder hos en person)
– Beteendet beskriver vad objektet kan göra (t ex flytta).
OBS! Detta kan innebära att tillståndet ändras
– Identiteten skiljer ett objekt från alla andra objekt
12
Klass
Objekt och klasser
En klass är en “byggplan” för objekt av samma sort.
– Alla objekt av en klass (instanser) har samma
sorts egenskaper och beteenden
– En klass beskriver en mängd liknande objekt
– Datatyp
Person
egenskaper
(attribut)
flytta
...
beteende
(metoder)
– Modeller av “saker” i problemdomänen ( “den
röda bilen i parkeringshuset Nanna”)
• Klasser
– Representerar alla objekt av ett visst slag
( “bil”)
Namn på klassen
namn
ålder
adress
• Objekt
13
Lite annat
14
Två cirkel-objekt
• Många instanser kan skapas av en klass
• Ett objekt har attribut: värden som lagras i
“fields”.
• Klassen definierar vilka “fields” ett objekt
har, men varje objekt har sin egen
uppsättning värden (objektets tillstånd/
state)
Circle
diameter:int
xPosition:int
yPosition:int
color:String
isVisible:boolean
är en instans av
circle1:Circle
diameter=50
xPosition=80
yPosition=30
color="blue"
isVisible=true
är en instans av
circle2:Circle
diameter=30
xPosition=230
yPosition=75
color="red"
isVisible=true
15
Objekt vs klass
Metoder och parametrar
Triangle
bigYellowTriangle
16
• Objekt har operationer som kan anropas ( I
Java kallas de metoder)
• Metoder kan ha parametrar så att information
som är nödvändig för att att utföra
operationen kan ges till objektet
height
width
xPosition
yPosition
color
changeColor
changeSize
move
...
smallBlueTriangle
17
18
Abstraktion och modularisering
Källkod
• Abstraktion är förmågan att strunta i
delarnas detaljer och istället fokusera på
problemet på en högre nivå
• Varje klass beskrivs med hjälp av källkod
(Javakod).
– Ett/en objekt/klass är abstrakt i den meningen
att vi inte behöver känner till alla detaljer för att
kunna använda den
• Där definieras detaljerna (attribut och
metoder)
• Modularisering är arbetet att dela upp
helheten i mindre, väldefinierade delar som
kan byggas och utvärderas separat, och som
interagerar på ett väldefinierat sätt.
19
20
Syntaxdiagram
•
•
•
•
•
Java
Objekt, klasser, syntax
Start på en icketerminal
Terminal symbol
Möjlig väg att följa
En annan icketerminal
Slut på beskrivning av icketerminal
21
Tilldelning av värden
• Referenser som inte “refererar” till ett objekt har värdet
null. Attribut sätts automatiskt till null/0 övriga
variabler måste initieras manuellt.
• Variabler måste initialiseras
• En variabel tilldelas ett (nytt) värde genom =
Basic assignment
=
Expression
Identifier
22
Lokala variabler
• En variabel innehåller antingen ett primitivt värde eller en
referens till ett objekt
Identifier
=
;
23
• Attribut/fields är en sorts variabler
• De lagrar värden hela objektets “liv”
– De kan nås i hela klassen.
• Metoder kan innehålla variabler med kortare
livslängd
– De existerar bara medan metoden exekveras
– De kan bara nås inne i metoden (i det block där
de är definierade)
24
Identifierare och variabler
Variabler och datatyper
• Identifierare är namn på olika storheter som definieras av
programmeraren
• Lite andra regler gäller i Java än i C
• Identifierare får innehålla bokstäver, siffror, understrykningstecknet (_), och valuta tecknen (t ex dollar tecknet)
• Identifierare får ej inledas med en siffra
• Java är case sensitive, dvs Total är olika total
• Identifierare för värden eller objekt kallas variabler
• Variabler används för att spara data
• Variabler måste deklareras med datatyp och namn innan de får
användas
Identifier
Java Letter
Java Letter
Java Digit
a-z
Java Letter
0-9
A-Z
$
Java Digit
_
Basic Variable Declaration
Primitive Type
Identifier
Class Type
,
;
• En primitiv datatyp kan vara heltal (byte, short, int, long),
flyttal (float, double), tecken (char) eller boolean
• En klasstyp är ett namn på en klass (t ex Triangle)
• Primitiva datatyper kallas också inbyggda datatyper
• Klasstyper kallas också användardefinierade datatyper
25
26
Other java letter
Primitiva datatyper:
Hel- och flyttal
Primitiva datatyper: Tecken
• De olika heltals och flyttals typerna har olika
storlek. I Java är storlekarna def. enl. följande
Typ
Storlek
Minimum
Maximum
byte
short
int
long
8 bits
16 bits
32 bits
64 bits
-128
-32,768
-2,147,483,648
< -9 x 1018
127
32,767
2,147,483,647
> 9 x 1018
float
double
32 bits
64 bits
+/- 3.4 x 1038 med 7 signifikanta siffror
+/- 1.7 x 10308 med 15 signifikanta siffror
• En variabel av datatypen char sparar ett Unicode
tecken
• Värdemängden är en ordnad uppräkning av tecken
• Det finns 65,536 unika Unicode tecken (16 bit) med
tecken och symboler från olika språk, t ex 'å' och
'ö'
• Alla tecken är ordnade och varje tecken motsvarar en
siffra (detta underlättar att kolla om ett tecken ligger t
ex mellan 'a' och 'z')
• Se t.ex. http://www.unicode.org/ för detaljer
27
Primitiva datatyper: boolean
28
Objekt
• Datatypen boolean har bara 2 värden
– true
– false
Triangle bigYellowTriangle, smallBlueTriangle;
bigYellowTriangle = ???
• Används på alla ställen där sanningsvärden
behövs (tex ger jämförelseoperatorerna tillbaka
resultat tillhörande denna datatyp)
29
Hur får vi tillgång till objekt?
30
new
Konstruktorer
public TicketMachine(int ticketCost) {
price = ticketCost;
balance = 0;
total = 0;
}
• Skapar nya objekt
• Ex
– new Triangle()
• Konstruktorer ansvarar för att initialisera ett
objekt.
• De har samma namn som klassen.
• De lägger in startvärden på attributen.
• Startvärden till attributen kan fås utifrån via
parametrar.
31
Referenser vs värden
Alias och garbage collection
Triangle t1 = new Triangle();
Triangle t2 = new Triangle();
• Tilldelning har lite olika effekt för primitiva
datatyper och klasstyper!
– Primitiva datatyper: Variabel ≈ själva värdet
– Klasstyper: Variabel = referens till objektet (jämför med
pekare i C)
int i1 = 5, i2 = 10;
i1:
5
Triangle t1 = new Triangle();
Triangle t2 = new Triangle();
i2: 10
i1:
5
t2 = t1;
Objekt som inte längre kan
nås; rensas bort automatiskt
(garbage collection)
t1
t2
“Båda” trianglar (t1 och t2)
har blivit röda
 Var försiktig med aliasing
t2
t2 = t1;
5
Ett objekt som refereras
till mha flera referenser;
referenserna kallas alias
t2
t1
t2
i2:
t1
t2.changeColor (”red”);
t1
i2 = i1;
32
t1
34
t2
33
Klassdeklaration
• Syntax:
• Syntax:
Metoddeklaration
Basic Method Declaration
Class Declaration
class
Identifier
Class Associations
Type
Class Body
Modifier
Modifier
Identifier
Ej resultat
Class Body
{
}
Method Body
Resultatets datatyp
• Exempel:
Class Member
Basic Class Member
Parameters
void
public void changeSize (int newHeight, int
newWidth) {
…
}
Parameter
Motsvarar variabel
deklaration
Field Declaration
Constructor Declaration
public float getArea ( ) {…}
Method Declaration
35
36
Instantiering och manipulation
Triangle
height
width
xPosition
yPosition
color
Triangle aTriangle = new Triangle();
aTriangle.move();
Mer klasser och objekt
aTriangle.changeColor(”blue”);
aTriangle.move();
changeColor
changeSize
move
...
aTriangle.changeSize(50, 100);
Vi kikar in i klasserna, och tar en titt på
några av javas inbyggda
En vanlig metodanrop ser ut så här
!
<objektnamn>.<metodnamn> (<parameterlista>);
37
38
Kodkonvention
Visibility
• Klasser påbörjas med stor bokstav (i övrigt små
utom om flera ord då Inledande bokstav i övriga ord
också görs stor)
– AClass
• Metoder/attribut inleds med liten bokstav (i övrigt
små utom om flera ord då inledande bokstav i övriga
ord också görs stor)
– aMethod(), aVariable
Nås i
samma
klass
Nås i
samma
paket
private
ja
nej
nej
nej
default
ja
ja
nej
nej
protected ja
ja
ja
nej
public
ja
ja
ja
Variabel
eller
metod
ja
Nås i
subklass
Nås
överallt
• Konstanter Bara stora bokstäver. Ord åtskiljs med _
– PI
• Följer man dessa konventioner så kommer ens egna
klasser att “se ut” som javas inbyggda.
39
40
Överlagring
Överlagrade konstruktorer
• Vi kan ha flera metoder/konstruktorer med
samma namn bara dessa har olika signatur
• signatur : metodens namn och parametrar (antal,typ
och ordning)
• Vilken version av metoden som används vid
anrop beror på de aktuella parametrarna
• Ex:
–
–
–
–
public int aMethod(int x) {...}
public int aMethod(int x, int y){...}
aMethod(1)
aMethod(1,2)
• Vill man att en av konstruktorerna i en klass ska anropa
en annan (för att få en och samma kod på bara ett ställe)
så gör man detta mha this()
• this() måste stå först i konstruktorn
• Ex:
public Square() {
this(60,50);
}
!
!
!
41
public Square(int xPositionP,int yPositionP){
size = 30;
xPosition = xPositionP;
yPosition = yPositionP;
color = "red";
isVisible = false;
}
42
Mer this
String
• I en metod refererar referensen this till det objekt vars
metod för tillfället körs
• this kan användas till att referera till godtyckligt
attribut/metod för objektet
• Används tex då parametrar har samma namn som
attribut
• Ex
public Square(int xPosition,int yPosition){
size = 30;
!
this.xPosition = xPosition;
!
this.yPosition = yPosition;
!
color = "red";
isVisible = false;
43
}
• I Java en klass.
• Svarar mot en sekvens av tecken.
•
String str=”abc”; //finns även andra sätt skapa strängar
• Operationer på strängar
• + Strängkonkatenering
• Ex: “hej” + “då” => ”hejdå”
•
“Antal: ”+1 => “Antal: 1”
• charAt(int) tar fram bokstaven på en given
position (numrerat från 0)
• length() tar fram antal bokstäver i strängen
• equals(String) kollar om två strängar innehåller
samma tecken
44
• mm. (se API beskrivningen)
PrintStream
Enkel output
• Kan tex göras mha klassen PrintStream
• Fördefinierade standardströmmar:
ström
System.out
System.err
• Huvudsakligen print och println
metoder som skriver ut värden.
• println gör radbrytning efter utskrift
• print och println är överlagrade för
alla primitiva datatyper, String och
Object
syfte
skriva vanlig text
skriva felmeddelanden
 print och println finns för alla
tänkbara datatyper
45
switch-satsen
Kontrollstrukturer i Java
• Samma som de som finns i C med i princip
ett undantag (en specialvariant på forloopen som vi kommer titta på då vi tittar på
collection-klasserna)
–
–
–
–
–
if(villkor)
if(villkor) ... else
while(villkor)
do ... while(villkor)
for(init;villkor;förändring)
46
switch (expression)
{
case value1:
sats1;
break;
Uttrycket måste vara heltal, tecken
eller enum (från java 7 även String)
Motsvarar nästade if-satser
case value2:
sats2;
break;
…
}
47
default:
satsN;
OPTIONAL
48
static
Statiska attribut
• Normalt har varje objekt eget
minnesutrymme
• static gör variabeln gemensam för
alla objekt i klassen (dvs den delas av
alla)
• Attribut och metoder kan deklareras
static
• Associerar attribut och metoder med
klassen snarare än objektet
• Avsteg ifrån objekts-tanken
– Bör därför användas bara där det verkligen
behövs
• Undvik under denna kurs (utom för main)
då ni ska lära er objektorientering.
49
Statiska metoder 1
private static int count;
• Kallas ibland klass variabler
50
Statiska metoder 2
• Statiska metoder anropas via klassnamnet
• Man behöver inte skapa ett objekt först
• Därför kallas de också klass metoder
• Statiska metoder får inte referera till
instansvariabler (eftersom de instansieras först när
ett objekt skapas)
• Exempel: Klassen Math i paketet java.lang
innehåller statiska matematiska operationer
Math.abs (num) ! -- absolutbeloppet
Math.sqrt (num) !-- kvadratrot
Math.random () ! -- slumptal i intervallet [0.0…1.0)
– Får bara referera statiska variabler eller lokala
variabler (som existerar oberoende av objekt)
• Även metoderna är specifika för objekt
– Får bara anropa statiska metoder (om den inte gör det
via en instans)
51
52
Konstanter
Metoden main
• Metoden
public static void main(String[] args)
! Anropas automatiskt då man vill starta ett
javaprogram
• Metoden måste se ut just som ovan (utom args
som är en godtycklig identifierare)
• Denna metod får sedan se till så att de objekt som
behövs av programmet skapas och exekverar
metoderna som kör igång programmet
53
• Som variabler fast deras värde får inte ändras
• Markeras med reserverade ordet final
• Exempel:
final double PI = 3.14159;
final char NEWLINE = ’\n’;
• Fördelar
– Vettiga namn istället för konstiga siffror eller tecken.
– Lättare att förstå koden.
– Enklare att uppdatera.
• Rätt ofta även deklarerade static så att bara en konstant finns
för hela klassen.
54
Fel och felhantering
Hur upptäcker man fel?
• Ett program kan fungera korrekt i normalfallet men vara känsligt för störningar
– Felaktiga indata (från användaren/andra
program)
– Yttre omständigheter
• Bra program är förberedda på att fel kan
uppstå
• Partiella funktioner: Funktioner som inte är
definierade för vissa inputvärden
• Fel uppstår ofta då metoder får oväntade
indata.
– Kontrollera indata i metoden innan något görs
– Kontrollera parametrarna innan metoden
anropas
• Vad passar bäst?
55
Felhantering
• Vissa fel kan inte förebyggas med hjälp av if-satser
– En fil kan t ex raderas under skrivningen/läsningen, fast
man har kollat i förväg att allt är OK
• Möjliga åtgärder:
–
–
–
–
–
–
–
–
–
Avbryt eller avsluta programmet
Ignorera felet och fortsätt
Skriv ut ett meddelande och fortsätt
Ignorera anropet som ledde till felet
Tolka anropet på ett meningsfullt sätt
Kräver åtgärd från användaren interaktivt
Producera ett felaktigt resultat
Returnera en felkod (går ej alltid)
...
 Den anropade metoden överlåter åt anroparen att
genomföra lämplig åtgärd
Undantag
• En exception är ett objekt som signalerar ett
undantag
• throw-satsen kastar ett undantag
… som kan fångas m h a en try-sats
Satser där ett undantag kan kastas
Undantaget som fångas
Koden där ett undantag hanteras
Hur bör man hantera fel?
• Det finns många alternativ
• Det finns ingen åtgärd som är bäst i alla lägen
• Beror på anroparens mål
 Låt anroparen bestämma
 Throw/ raise exception
 “Kasta”/ “flagga” ett undantag
57
try
{…}
catch (…)
{…}
finally
{…}
56
Flera undantag kan
fångas och hanteras
i en try-sats
(valfri)
Koden för slutåtgärder
(valfri)
59
58