Objektorientert Programmering i Java Konsepter Objektorientert programmering Programmere
Objektorientert Programmering i Java Konsepter
Objektorientert programmering • Programmere ved å representere “ting” som objekter • Objekter har tilstand, og kan utføre operasjoner • Hvert objekt inneholder noe data og funksjoner på disse dataene • Innkapsling: Datarepresentasjon og implementasjonen av funksjonene er privat. Ulike implementasjoner er mulig Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 2
Objektorientert programmering • • • Even Åby Larsen (even. larsen@uia. no) Ole Johan Dahl (1931 – 2002) • Første norske professor i informatikk • Strukturert programmering • Formelle metoder Kristen Nygaard (1926 – 2002) • Operasjonsforskning, simulering • Jern- og metall-prosjektet • Nei til EU! Første objektorienterte programmeringsspråk: Simula 67 • IEEE John von Neumann Medal • ACM Turing Award IS-102 Introduksjon 3
Hva er objektorientert programmering? • Kristen Nygård: “Programming is understanding” Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 4
Objektorientert programmering • Uttrykker algoritmer ved å bruke • Klasser (class) – ”abstrakt” mønster for objektene • Objekter (object, instance) – ”konkret”, ”ting”, eksemplarer • Metoder (method, procedure, function) – handlinger objektene kan utføre Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 5
Klasser og objekter Klasser Objekter Kategori av ”ting” “Ting” som hører til i kategorien Datatype Data Mønster Eksemplarer (instanser) av mønsteret Fil på disken (Kildekode) Blokk i minnet ved runtime (Tabell) (Rad) Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 6
Java klasser • Mønster for å lage objekter: public class Klasse. Navn { // feltdeklarasjoner – hva objektene vet om // konstruktører – metoder for å initialisere objekter // metoder – hva objektene kan gjøre } • Klassedefinisjonen finnes i filen Klasse. Navn. java • Kompilert kode i Klasse. Navn. class Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 7
Feltdeklarasjon /** Dokumentasjonskommentar */ private Data. Type variabel. Navn; • Hvert felt representerer en ting objektene vet om • Synonymer: instance variable, property • Eksempel: /** kontoens nåværende saldo */ private int saldo; Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 8
Eksempel public class Person { String name; Person: name=“Per” born=1814 -05 -17 Date born; . . . } Person: name=“Pål” born=1905 -06 -07 Person: name=“Espen” born=1855 -05 -17 Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 9
Datatyper • java skiller mellom to hovedtyper av data: • primitive typer: • • variabelen inneholder den faktiske verdien • int, long, float, double, char, boolean klassetyper: • variabelen inneholder en peker/referanse til et objekt • • felt av klassetyper definerer en relasjon klassenavnet brukes som datatype Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 10
Datatyper • Hvordan kan vi se forskjell på primitive typer og klassetyper? • Alle de primitive typene har navn som bare består av små bokstaver • • int, float, boolean Klasser har navn med stor forbokstav (hvis java kodestandard er fulgt) • Integer, Float, Boolean Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 11
Metodedeklarasjoner /** dokumentasjonskommentar */ public Retur. Type metode. Navn(Parameter. Type parameter. Navn, . . . ) { // setninger (kroppen til metoden) } • Retur. Type: Hva slags data metoden returnerer • • Parameter. Type: hva slags data metoden aksepterer som input • • bruk void for metoder som ikke returnerer noe må spesifiseres for hver parameter setningene definerer hva som skjer når metoden blir kallt Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 12
Metoder • metoder representerer handlinger objektene kan utføre • m. a. o. ting de kan gjøre • setningene i metodekroppen utføres “inne i” objektet • • parametere er opplysninger som er nødvendige for handlingen • • dvs at metoden har tilgang til alle felt (og andre metoder) i objektet (som objektet ikke allerede vet om) setningene i metodekroppen er en oppskrift på hvordan handlingene skal utføres Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 13
Metoder • en metode kan kalle andre metoder i samme klasse: public void skriv. Ut() { System. out. println(navn); skriv. Ut. Adresse(); } Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 14
Metodedeklarasjoner - Overloading • en java-klasse kan ha flere metoder med samme navn • men de må ha forskjellige parametertyper • Dette er forskjellige metoder: void save. File(String filename). . . void save. File(File f, int max). . . void save. File(int, start, File f). . . Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 15
Mer om variabeldeklarasjoner • I java må alle variable deklareres før bruk • Deklarasjonen er gyldig i blokka variabelen er deklarert i • Alle variable er begrenset til å inneholde verdier av en bestemt type • Kompilatoren sjekker at vi ikke skriver kode som kan gi en variabel en verdi av feil type Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 16
Kategorier av variable: • • • felt – deklareres i klassedefinisjonen • hvert objekt får sin variabel med navn og type fra definisjonen • forsvinner når objektet blir deallokert parameter – deklareres i metode-header • variabelen opprettes når rmetoden kalles • får verdi fra parameterverdien ved kallstedet • forsvinner når metoden returnerer lokal variabel – kan deklareres i hvilken som helst blokk (i en metode) • opprettes når deklarasjonen utføres • forsvinner når blokka er ferdig utfført Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 17
Hva betyr public og private • et felt eller en metode som er deklarert public kan brukes overalt • et felt eller en metode som er deklarert private kan bare brukes inne i klassen • public metoder (og evt felt) er det eksterne grensesnittet til klassen • felt er oftest private for å beskytte dataintegriteten Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 18
Konstruktører • Konstruktører er spesielle metoder som brukes til å initialisere nye objekter • Konstruktører heter det samme som klassen • • returtypen (implisitt void) er ikke spesifisert • en klasse kan ha flere konstruktører (med forskjellige kombinasjoner av parametertyper) • hvis ingen konstruktører er definert lager kompilatoren automatisk en uten parametre Nye objekter lages med operatoren new, som kaller en konstruktør, og returnerer det nye objektet Konto k = new Konto(); Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 19
Hvor kan vi lage objekter? • alle steder vi kan ha en vanlig setning • • vi trenger en variabel til å holde på det nye objektet, så vi ikke mister det • • dvs i kroppen til metoder og konstruktører Person p = new Person(); hvor lager vi det aller første objektet? • i metoden main() • alle klasser kan ha en main() metode • ofte for å teste Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 20
Minnehåndtering i Java • operatoren new brukes til å lage nye objekter • allokerer minne til objektet • kaller konstruktør (som matcher parameterverdiene) for å sette opp objektet • returner peker (referanse/adresse) til objektet • java objekter lever evig! (ingen parallell til c++ delete), men. . . • objekter som er utilgjengelig for programmet (inegn variable som peker til det lenger) blir automatisk fjernet fra minnet • opprydningen kalles søppeltømming (garbage collection) Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 21
Bruke objekter • Vi deklarerer en variabel som kan inneholdet en peker til et objekt ved å bruke klassenavnet som type • vi kan aksessere felt i objektet, og kalle metoder ved å bruke operatoren. • • min. Konto. saldo(); • . (punktum) er javas genitivs-s • leses ofte som “sin” – min. Konto sin saldo tilordning (fra. Konto = min. Konto) kopierer ikke objektet, bare adressen • vi kan ha flere pekere til samme objekt Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 22
Metodekall • Stackframe: informasjon om et metodekall – variable og returadresse • Ved metodekall opprettes en ny stackframe med en variabel for hver parameter • parameterverdiene beregnes og kopieres til variablene i stackframen • setningene i metodekroppen blir utført med tilgang til variablene i stackframen og feltene i objektet metoden ble kalt i • • setningene kan inneholde kall på metoder i samme eller andre objekte kontrollen returnerer til setningen etter metodekallet Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 23
Metodekall Konto min. Konto = new Konto(); min. Konto. sett. Inn(100); System. out. println(“Saldo “+min. Konto. saldo()); saldo=0 return= this= belop=100 Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 24
this • parametre og lokale variable kan ha samme navn som felt i objektene, og dermed skygge for dem • vi kan bruke nøkkelordet this til å snakke om objektet • • this er java for jeg/meg this. navn betyr feltet navn i objektet (i motsetning til parameteren navn) Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 25
if-setning eksempel if (x < 0) { System. out. println(“x er negativ”); } else { System. out. println(“x er ikke negativ”); } • krøllparentesene kan utelates hvis de bare inneholder en setning: if (x < 0) System. out. println(“x er negativ”); else System. out. println(“x er ikke negativ”); Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 26
Programmeringsoppgave • Skriv en klasse som simulerer en enkel billettmaskin • Hver Billett. Maskin vet om billettprisen, hvor mye kunden har lagt på og hvor mye det er solgt billetter for totalt • vi trenger en metode for å legge på penger, som øker beløpet som er lagt på • og en metode for å skrive ut billett, som må sjekke at nok penger er lagt på Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 27
Programmeringsoppgave 2 • lag en bedre billettmaskin som gir igjen eventuelt overskytende beløp • kan simuleres med en returverdi Even Åby Larsen (even. larsen@uia. no) IS-102 Introduksjon 28
- Slides: 28