Objekter i OOprogrammering har tilstand og oppførsel • Objekter har en tilstand • Et sett av felter (egenskaper) og deres gjeldende verdier
• Objekter har en oppførsel • Et sett av metoder
1
Forskjellige typer objekter
data
• Dataorienterte objekter – primært laget for å lagre sammenhørende dataverdier eller knytte objekter sammen
• ”Vanlige” objekter – til sammenhørende data hører operasjoner (også kalt metoder) for å manipulere dataene
• Funksjonsorienterte objekter – brukes utelukkende for evnene til å gjøre noe, f.eks. behandle data som ligger i andre objekter 2
funksjoner
Verden er full av objekter • Opprinnelig idé bak OO – – – –
et OOprogram skal speile verden relevante egenskaper i verden skal beskrives i programmet verden er full av ting med bestemte egenskaper mange ting har det samme settet egenskapene, men ulike verdier
• Et objekt har spesifikke egenskaper, mens en klasse beskriver felles egenskaper for en bestemt type (klasse) objekter – Hallvard og Trond er ulike person, men begge har et navn, fødselsdato, høyde, vekt, osv. – Hallvard og Trond er objekter av typen Person, en Person har egenskapene navn, fødselsdato, høyde, vekt, osv.
3
• Ved å knytte funksjoner til dataene, som metoder, får en strukturert programmene bedre
Dataorientert objekt
data
• Objekt som representerer filmvisning
funksjoner 4
Dataorientert objekt
data
• Filmvisning – hva slags informasjon trengs for å beskrive den?
• Mal/klasse • Enkeltvisning/objekt/instans 5
funksjoner
Dataorientert objekt
data
• Filmvisning – filmtittel
tekst
– sal
tekst
– alder
tall
– nasjonalitet
tekst
– dato og tid – pris
6
tekst tall
• Merk at på websiden er det en lenke pr. tidspunkt, funksjoner så vi tenker oss at hvert tidspunkt er en filmvisning)
Filmvisningsobjekt/klasse data
#1: Filmvisning
Filmvisning String filmtittel String sal int alder String nasjonalitet String tid int pris klasse = generell struktur 7
filmtittel = ”Aleksander” sal = ”Nova3” alder = 15 nasjonalitet = ”USA” tid = ”20:00” pris = 85 #3: Filmvisning
#2: Filmvisning filmtittel = ”Aleksander” sal = ”Prinsen4” alder = 15 nasjonalitet = ”USA” tid = ”17:00” pris = 75
filmtittel = ”Bad Santa” sal = ”Prinsen2” alder = 11 nasjonalitet = ”USA” tid = ”18:50” pris = 70
spesifikke objekter / instanser
funksjoner
Eksempler på funksjonsorientering
data
• Java sin bruk av toString()metoden – Alle objekter kan i hvert fall en ting: lage en tekstrepresentasjon av seg selv med toString()metoden – Med andre ord: Det viktigste er ikke hva slags data (attributter) objektet har, men hva det kan (metoder)
• En webtjener – en HTTPtjener passer til vår definisjon av objekt: identitet (IPadressen), datainnhold (dokumenter) og ferdigheter – HTTP definerer et lite sett kommandoer, GET, HEAD, PUT, POST, DELETE – GET og PUT brukes til å lese og endre datainnholdet, men den faktiske utførelsen av operasjonen kan innebære omfattende funksjoner logikk og programaktivering 8
La oss definere Filmvisningsklassen Vi skriver Filmvisningsklassen og lager eksempelinstansene
9
Filmvisningsklassen
• Ett attributt for hver dataenhet – navnet forteller andre programmerere hva slags data det er – typen forteller Java hva slags data det er – får en standard initialverdi, men bør initialiseres eksplisitt
10
– NB! Vi har utelatt nasjonalitet og pris for å gjøre eksemplet enklere
Filmvisningsinstanser
• Deklarerer lokale variabler, for å kunne referere til instansene • Nye instanser lages med new () 11
Vise innholdet til Filmvisningsinstansene • Vi skriver ut innholdet til System.out
12
• Utskrift kommer i Consoleviewet
Hvordan kan en alternativt gjøre initialiseringen? Definere og bruke konstruktør!
13
Vi legger til klassen Film og endrer på Filmvisning • Attributtene filmtittel og alder flyttes fra Filmvisning til Film • filmtittel endres til tittel • Kode i Filmvisning og KinoProgram endres deretter • Hvordan ser objektstrukturen vår ut nå? 14
Før introduksjon av Filmklasse #1: Filmvisning
Filmvisning String filmtittel String sal int alder String tid klasse
15
filmtittel = ”Aleksander” sal = ”Nova3” alder = 15 tid = ”20:00”
#2: Filmvisning filmtittel = ”Aleksander” sal = ”Prinsen4” alder = 15 tid = ”17:00”
#3: Filmvisning filmtittel = ”Bad Santa” sal = ”Prinsen2” alder = 11 tid = ”18:50”
spesifikke objekter / instanser
Etter introduksjon av Filmklasse Film
#1: Film
#2: Film
String tittel int alder
tittel = ”Aleksander” alder = 15
tittel = ”Bad Santa” alder = 11
Filmvisning Film film String sal String tid
16
#3: Filmvisning
#4: Filmvisning
#5: Filmvisning
film = sal = ”Nova3” tid = ”20:00”
film = sal = ”Prinsen4” tid = ”17:00”
film = sal = ”Prinsen2” tid = ”18:50”
Alternativt, med såkalte referanser/assosiasjoner Film
#1: Film
#2: Film
String tittel int alder
tittel = ”Aleksander” alder = 15
tittel = ”Bad Santa” alder = 11
film
Filmvisning String sal String tid
17
film
film
film
#3: Filmvisning
#4: Filmvisning
#5: Filmvisning
sal = ”Nova3” tid = ”20:00”
sal = ”Prinsen4” tid = ”17:00”
sal = ”Prinsen2” tid = ”18:50”
Introduksjonen av Filmklassen introduserte noen endringer • Endringer i koden – flyttet filmtittel og alder fra Filmvisning til Film – referanser til filmtittel og alder måtte endres • filmvisning.filmtittel ble til filmvisning.film.tittel
• Kunne dette vært unngått? • Bruke metoder for å hente ut data! – koden forholder seg til metoder, ikke til datafelt – får større frihet til å endre datastrukturer, uten å endre annen kode 18
Utlesing av data med metoder • For hvert felt (eller egentlig logisk stykke data) definér en getmetode – get f.eks. getFilmtittel – all kode bruker denne getmetoden • filmvisning.filmtittel blir til filmvisning.getFilmtittel()
• Ved flytting av data eller endring av datarepresentasjon, så trenger en bare endre getmetoden, ikke annen kode 19
Diagrammer • Vi kommer til å bruke flere typer diagrammer for å visualisere forskjellige aspekter ved objekt orienterte programmer • UMLdiagrammer (Unified Modelling Language) – Klasse og objektdiagrammer brukes for å visualisere klassedefinisjonene og instanser – Samhandlingsdiagrammer brukes for å visualisere hvordan objekter bruker hverandre – Sekvensdiagrammer brukes også for å visualisere samhandling, men med fokus på sekvensen av metodekall
20
– Arkmodellen bruker vi i tillegg som en uformell måte å visualisere hva som skjer i programmet ved kjøring
Samhandling og instanser 1: getFilmtittel()
alexander1: Filmvisning
1.1: getTittel()
alexander: Film
KinoProgram 2: println()
klasse, angitt ved kun
21
System.out:PrintStream
instanser, angitt med :
Samhandling og instanser KinoProgram
alexander1: Filmvisning
alexander: Film
System.out PrintStream
1: getFilmtittel() 1.1: getTittel() 2: println()
22
Vise innholdet til Filmvisningsinstanser (2) • Alternativt kan en definere en instansmetode og be objektet om å skrive seg ut! • Instansmetoden kan referere direkte til instansens egne attributter
• Metoden kalles på Filmvisningsinstansen, uten parameter • Metodens utføres i kontekst av Filmvisningsinstansen 23
Vise innholdet til Filmvisningsinstanser (3) • En instansmetode kan også ha ”vanlige” parametre
• Et objektparameter kan også bli bedt om å utføre en metode – println er en instansmetode i PrintStreamklassen – System sitt outattributt refererer til en PrintStreaminstans
• Metoden kalles med eksplisitt parameter 24
Samhandling og instanser
KinoProgram
1: printFilmvisning()
alexander1: Filmvisning
1.1: println() out:
PrintStream
Filmvisning sin printFilmvisningmetode kaller PrintStream sin printlnmetode 25
Samhandling og instanser KinoProgram
alexander1: Filmvisning
out:PrintStream
printFilmvisning() println()
26
Oppgave: Endre printFilmvisning void printFilmvisning(java.io.printStream out) { out.println(this); } Hvordan blir diagrammene nå?
27
Samhandling og instanser
KinoProgram
1: printFilmvisning()
alexander1: Filmvisning
1.1: println() 1.1.1: toString()
out: PrintStream
Filmvisning sin printFilmvisningmetode kaller PrintStream sin printlnmetode 28
Samhandling og instanser KinoProgram
alexander1: Filmvisning
out:PrintStream
printFilmvisning() println() toString()
29
Forskjellige typer objekter
data
• Dataorienterte objekter – primært laget for å lagre sammenhørende dataverdier eller knytte objekter sammen
• ”Vanlige” objekter – til sammenhørende data hører operasjoner (også kalt metoder) for å manipulere dataene
• Funksjonsorienterte objekter – brukes utelukkende for evnene til å gjøre noe, f.eks. behandle data som ligger i andre objekter 30
funksjoner
Læringsmål for forelesningen • Objektorientering – Objektstrukturer – Funksjonsorientering og interaksjon mellom objekter – Diagrammer
• Javaprogrammering – getmetoder
• Eclipse – Manipulasjon av klasser og metoder
31