OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0



Like dokumenter
Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

LO191D/LC191D Videregående programmering

2 Om statiske variable/konstanter og statiske metoder.

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Introduksjon til objektorientert programmering

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Gjennomgang av eksamen H99

Repetisjon. INF gruppe 13

UNIVERSITETET I OSLO

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Obligatorisk oppgave 4: Lege/Resept

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF1010 Arv. Marit Nybakken 2. februar 2004

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

OPPGAVE 5b og 8b Java Kode

UNIVERSITETET I OSLO

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

INF Notater. Veronika Heimsbakk 10. juni 2012

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

INF våren 2017

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Dagens tema Kapittel 8: Objekter og klasser

INF1000: Forelesning 6. Klasser og objekter del 1

Hva er en metode. Hva skjer når vi kaller en metode

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

LC191D/LO191D Videregående programmering mai 2010

IN1010 V19, Obligatorisk oppgave 2

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

To måter å programmere på. Java 12. Programmering med objekter. Statisk programmering

INF1000 Metoder. Marit Nybakken 16. februar 2004

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Objekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Hva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000: Forelesning 7. Konstruktører Static

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Kapittel 7: Mer om arv

Enkle generiske klasser i Java

Kapittel 8: Programutvikling

INF1010 våren Arv og subklasser del 1

2 Om statiske variable/konstanter og statiske metoder.

TDT4100 Objektorientert programmering

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

ANTDAGER = 358; I Ifra nyttår 08 til 08 1ed julaften

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

INF1010 våren Arv og subklasser del 1

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

Jentetreff INF1000 Debugging i Java

Post-it spørsmål fra timen (Arv og subklasser)

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF1010. Grensesnittet Comparable<T>

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Eksamen. Objektorientert Programmering IGR 1372

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

UNIVERSITETET I OSLO

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

INF Obligatorisk innlevering 5

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

INF1000: Forelesning 7

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

Transkript:

OO-eksempel I eksemplet er det deklarert tre klasser: 1) Fag (skal instansieres ett objekt for hvert fag) 2) Student (skal instansieres ett objekt for hver student) 3) Studenter (abstrakt klasse skal ikke instansieres men har statiske medlemmer som de andre objektene/klassene har tilgang til) Modellen ser slik ut: Studenter + antstudenter : int = 0 Klassenavn i kursiv = {abstract Atributt understreket = {static Operasjon i kursiv = {static - kode : String = "" - stp : int = 0 Fag + Fag(fagkode : String, studiepoeng : int) + div tilgangsmetoder() + hentantstudenter() : int Student - studnr : int = 0 - studnavn : String = "" - fag[] : Fag = Fag[5] - antfag : int = 0 + Student(nr : int, nvn : String) + finalize() : void + hentstudentnr() : int + settstudentnavn(nyttnavn : String) + hentstudentnavn() : String + hentantallfag() : int + nyttfag(fnyttfag : Fag) - oknavn(n : String) : Boolean DeltidsStudent - prosent : int = 50 + settstudieprosent(int nyprosent) : void + hentstudieprosent() : int Knut W. Hansson oo-eksempel.doc

BluJay BlueJay er et gratis program som er beregnet brukt i undervisning, og som kan vise forskjellen på en klasse og et objekt. Slik ser modellen ut i BlueJay: Klassene er definert slik: /** * Abstrakt klasse. Det kan altså ikke skapes objekter av denne klassen. * Klassen holder orden på hvor mange studenter som er skapt. (Det kunne også vært naturlig å ha en array * som pekte til hvert enkelt objekt, men da blir ekseplet for komplekst for formålet.) public abstract class Studenter { // Klasseattributter (merket "static") /** Antall studenter som er skapt. Burde vært privat, men er her laget public for enkelhets * skyld (dette bryter med prinsippet om informasjonsskjuling) public static int antstudenter = 0; //antall studentobjekter som er skapt // Klassemetoder /** Returnerer antall student-objekter public static int hentantstudenter(){ return antstudenter; Knut W. Hansson Side 2 av 5

/** * Klasse som skal instansieres (det skal lages objekter av den). * Eksemplet er enkelt uten inputkontroll o.l. public class Student { //Objektattributter det settes av plass til, én for hvert objekt private int studnr = 0; private String studnavn = ""; private Fag fag[] = new Fag[5]; private int antfag = 0; //Konstruktør/destruktør /** Konstruktør - for å skape et nytt objekt av denne klassen //Dette legger tekst inn i dokumentasjonen public Student(int studentnr, String studentnavn){ //sett attributtverdier studnr = studentnr; studnavn = studentnavn; //øk antall studenter for klassen Studenter.antStudenter++; /** Destruktør (virker ikke i BlueJay - blir ikke kalt opp). * Viser eksempel på handlinger som kan være nødvendige når et objekt slettes protected void finalize(){ //Reduser antall studenter Studenter.antStudenter--; //Tilgangsmetoder (funksjoner, operasjoner) /** Returnerer studentnummer. (Note: studentnummer kan ikke endres, derfor ingen "settstudentnr") public int hentstudentnr(){ return studnr; /** Endrer studentnavn public void settstudentnavn(string nyttnavn){ if (oknavn(nyttnavn))studnavn = nyttnavn; /** Returnerer studentnavn public String hentstudentnavn(){ return studnavn; /** Returnerer antall fag studenten tar public int hentantallfag(){ return antfag; /** Legger til et nytt fag som studenten tar public void nyttfag(fag nyttfag){ antfag++; //øk antall fag for studenten fag[antfag] = nyttfag; //pek til det nye faget //Hjelpemetoder (private - skal bare brukes av objektet selv) private boolean oknavn(string n){ return (n!= ""); Knut W. Hansson Side 3 av 5

/** * En klasse som arver * public class DeltidsStudent extends Student{ //Objektattributter det settes av plass til, én for hvert objekt private int prosent = 50; //Konstruktør/destruktør /** Konstruktør - for å skape et nytt objekt av denne klassen //Dette legger tekst inn i dokumentasjonen public DeltidsStudent (int studentnr, String studentnavn, int studieprosent){ super(studentnr,studentnavn); //kaller metaklassens konstruktør //settstudnr(nr); prosent = studieprosent; //Student(nr, String); //Kaller meta-konstruktør /** Destruktør (virker ikke i BlueJay - blir ikke kalt opp). * Viser eksempel på handlinger som kan være nødvendige når et objekt slettes protected void finalize(){ //Reduser antall studenter super.finalize(); //kaller metaklassens destruktør //Tilgangsmetoder (funksjoner, operasjoner) public void settstudieprosent(int nyprosent){ prosent = nyprosent; public int hentstudieprosent(){ return prosent; /** * En svært enkel fag-klasse uten tilgangsmetoder for enkelhets skyld. public class Fag { //Objektattributter private String kode = ""; private int stp = 0; //Konstruktør public Fag(String fagkode, int studiepoeng){ kode = fagkode; stp = studiepoeng; //Tilgangsmetoder er ikke implementert Knut W. Hansson Side 4 av 5

Gjennomgang 1) Tegne modellen på tavle, med kommentarer 2) Vise i BlueJay: a) Vise modellen b) Vise dokumentasjonen legg merke til hva som synes fra utsiden = grensesnittet. Legg også merke til kommentarene /** i koden som blir en del av dokumentasjonen. To nivåer: Frem til punktum og alt (under Details) c) Legg merke til at det ikke kan skapes objekt av klassen Studenter, siden det er abstract. d) Skap to fag e) Skap to studenter en heltidsstudent og en deltidsstudent. Sjekk at Studenter.antStudenter oppdateres. f) Merk hvilke metoder som er tilgjengelige for heltids- og for deltidsstudenten g) Knytt opp heltidsstudenten til begge fagene og deltidsstudenten til ett fag. h) Kjør tilgangsmetoder i) Inspiser objektene og legg spesielt merke til pekerne Knut W. Hansson Side 5 av 5