14 okt. 2003, Arne Maus Inst. for informatikk, UiO

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
C++ for Java-programmerere
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Kontrollstrukturer (Kapittel 3)
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Objektorientert programmering i PHP del 2
ObjektOrientert Systemutvikling del I
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Oblig4 - forklaringer Arne og Ole Christian.
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
Eiendomsregister - eksempel
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Åsmund Eldhuset asmunde stud.ntnu.no folk.ntnu.no/asmunde/algdat/
En gang til!? .
Operativsystemer.  Tilstandsmaskiner kalles på engelsk Finite State Machines.  Tilstandsmaskiner er en metode til å beskrive systemer med logisk og.
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
INF150 Programmering mandag 11.9
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
Java 11 Programmering med og uten objekter: hva er forskjellen?
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
De 222 mest brukte ordene i det norske språket..
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
INF1000 (Uke 12) Sortering og eksamensoppgaver Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
1 Inf1000 (Uke 10) Oppgaveløsning. Hashmap Programmering med og uten objekter: hva er forskjellen? Noen generelle råd vedrørende oppgaveløsing HashMap.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
INF1000 (Uke 11) Programmering
Kapittel 4 Skriving av klasser. 4.1 Anatomien til ein klasse Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar.
Objektorientert design In 140 Sommerville kap 12 – del 1.
Lokale variable Hvis vi trenger å ta vare på en verdi, inne i en metode kan vi definere en lokal variabel: int amount = 0; vi må fortelle hvilken type.
IS-102 Interaksjon med objekter
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

14 okt. 2003, Arne Maus Inst. for informatikk, UiO Uke 9 - Repetisjon av metoder, klasser og objekter, Mer om: Klassediagrammer, private og public 14 okt. 2003, Arne Maus Inst. for informatikk, UiO

Ta flervalgstestene !! De minner om hvordan deler av eksamen vil bli. God trening til eksamen

Oversikt Repetisjon Klassediagrammer metoder klasser og objekter Klassediagrammer Public, private, protected og ’package’ Get- og set-metoder for variable Et eksempel Konto

Hva er en metode En metode er en valgfritt antall programsetninger vi gir et navn All kode i programmet er inne i en metode (som igjen er inne i en eller annen klasse) Skille mellom å deklarere en metode (= skrive Javakode for og kompilere) Utføre en metode (kdet som skjer når vi kaller den) Når vi deklarerer en metode, skjer det ’ingen ting ’ En metode blir utført hver gang den kalles fra koden i en annen metode: da hopper utførelsen av programmet til starten av den kalte metoden har den kalt metoden parametere, kopieres verdiene brukt i kallet til metodens parameter-variable (de er som lokale variable i den kalte metoden)

Kall på en metode: skrivAntallGanger()’ i objektet ’b’ tre ganger class BB { int antall = 0; void skrivAntallGanger() { antall++; System.out.println(" Du har kalt meg:" + antall + " ganger"); } class AA { public static void main ( String[] args) { BB b = new BB(); b.skrivAntallGanger(); // Kall nr. 1 b.skrivAntallGanger(); // Kall nr. 2 b.skrivAntallGanger(); // Kall nr. 3 M:\INF1000\prog>java AA Du har kalt meg:1 ganger Du har kalt meg:2 ganger Du har kalt meg:3 ganger

Hva skjer når vi kaller en metode Når vi kaller en metode, blir det opprettet et metodeobjekt og vi kopierer over verdiene brukt i kallet til parameterne Dette metodeobjektet inneholder alle lokale variabler og parameterne til metoden når setningene i metoden utføres, brukes disse variablene og parametrene av metoden metodeobjektet fjernes automatisk når metoden er ferdig utført og returnerer Merk forskjellen på å deklarere en metode, og at den utføres.

int skrivAntall(int i){ class C { int skrivAntall(int i){ System.out.println(" Du har kalt meg med:" + i); return i+10; }} class D { static int dobbel( int k) { return 2*k; } void gjørMye(C cc, int v) { System.out.println(" gjørMye kalt"); int j = cc.skrivAntall(v); System.out.println(" 1.verdien av j:" + j); j = dobbel(j); System.out.println(" 2.verdien av j:" + j); System.out.println(" 3.verdien av skrivAntall(j):" + cc.skrivAntall(j) ); public static void main ( String[] args) { C c = new C(); D megSelv = new D(); megSelv.gjørMye(c,2); >java D gj°rMye kalt Du har kalt meg med:2 1.verdien av j:12 2.verdien av j:24 Du har kalt meg med:24 3.verdien av skrivAntall(j):34

Hvorfor bruke metoder Vi deler opp programmet i metoder fordi: Noen program setninger brukes flere steder, eller: Vi vil dele opp programmet i mindre deler Ingen metode bør være lenger enn 30 linjer (og helst mindre) Hver del gjør noe veldefinert som fremgår av navnet: regner ut en bestemt formel skriver ut en meny leser noen data fra terminal eller fil tegner ut opplysninger på skjermen .......

Problemløsning med metoder Når vi har laget en metode, og vi har forsikret oss om at den er ’riktig’, så har vi laget en ny operasjon Vi kan nå i resten av koden tenke at vi nå har en slik operasjon tilgjengelig og nytte denne som om den var innebygd i Java eks: skrive ut en meny, regne ut en bestemt formel,.. Vi trenger da ikke tenke på alle detaljene om hvordan denne operasjonen blir utført, bare at den blir gjort. Vi har da laget et (lite) verktøy som kan gjenbrukes og lettere løse vårt større problem (hele systemet) Denne måte å programmere på heter bottom-up programmering og nyttes mye. Eks: Java-biblioteket kan best forstås som en diger verktøykasse med nyttige operasjoner og datastrukturer vi kan (og ofte bør) bruke for å lage vårt program

Hva er en klasse En klasse er en beskrivelse av hvordan ett objekt av en bestemt type i vårt problem er. Inneholder variable som beskriver egenskaper for ett slikt objekt – eks: Navn, adresse, studiepoeng, kurs... for klassen Student Registreringsnummer, eier, type, årsmodel for klassen Bil Inneholder metoder som er fornuftig handlinger for ett slikt objekt – eks: skrivUtVitnemål(), meldPåEmne(),.. i klassen Student beregnÅrsavgift(), skiftEier(),.. i klassen Bil

Skille mellom deklarasjon og bruk av en klasse Når vi deklarerer en klasse (= skriver Javakode for) skjer det ’ingen ting’ i programmet Når vi oversetter og starter opp programmet vårt med javac og java, skjer ’lite’: De variable og metodene det står static foran er tilgjengelig Ingen kode (med unntak av main) utføres Først når vi sier new på en klasse, får vi laget et objekt av klassen Objektet inneholder alle variable og metoder som ikke har static foran deklarasjonen (objekt-variable og – metoder) Når vi sier new, kaller vi en konstruktør-metode i klassen, og først når den er ferdig, returnerer new det med det nye objektet

Bil (String e, String n) { eier = e; regNum = n; } import easyIO.*; class Bil { String eier,regNum; Bil (String e, String n) { eier = e; regNum = n; } class E { public static void main ( String[] args) { Bil b; String eier, num; In tast = new In(); System.out.print("Gi eier:"); eier = tast.inWord("\n"); System.out.print("Gi nummer:"); num = tast.inWord("\n"); b = new Bil (eier,num); System.out.println("BIL. eier:" + b.eier + ", nummer:" + b.regNum); >java E Gi eier:Ola Nord Gi nummer:BD 26529 BIL. eier:Ola Nord, nummer:BD 26529 b b eier regNum

class Konto1 { String eier; int kontoNum, saldo = 0; Konto1(String e) { eier = e; } void settInn(int beløp) { saldo = saldo + beløp; boolean taUt(int beløp) { // moderne bank med muligheter for overtrekk saldo = saldo - beløp; return saldo > 0; class Bank1 { Konto1 [] kontiene = new Konto1[100000]; public static void main( String[] args) { Bank1 b = new Bank1(); for (int i = 0; i < b.kontiene.length; i++) { b.kontiene[i] = new Konto1("kunde nr." + i); b.kontiene[i].settInn(100);

Forskjeller mellom klasser og metoder Begge lager objekter når de kalles, men: Et metode-objekt: fjernes når metoden returnerer inneholder ’bare’ variable og parametere som alle er skjult for resten av programmet Et objekt laget med new fra en klasse: er i hukommelsen etter at det er laget (så lenge det minst er en peker som peker på det) kan inneholde både metoder og variable, som kan nyttes av resten av programmet (med en peker og .)

Ikke alt i et objekt bør være synlig fra resten av programsystemet - innkapsling Vi ønsker ofte at resten av systemet bare skal se deler av et objekt eks: int saldo i Konto1-objektet bør være skjult, resten av programmet skal bare bruke settInn() og taUt() metodene. Vi kan regulere tilgangen til variable og metoder ved å sette enten : private public protected foran en metode eller deklarasjonen av en variabel

For ’sm娒 systemer hvor alle For ’sm娒 systemer hvor alle .java filene ligger på samme filområde, gjelder: Skriver vi: ingenting foran en deklarasjon/metode, så er slike deklarasjoner fullt tilgjengelige for alle annen kode kompilert på samme filområde, men usynlig /sperret for kode kompilert på andre filområder. private foran en deklarasjon/metode, så er den bare synlig fra kode i metoder deklarert i samme klasse, usynlig/sperret for all annen kode protected foran en deklarasjon/metode, så er den synlig i samme klasser og subklasser og synlig i klassene på samme filområdet, men usynlig/sperret i andre klasser (på andre filområder). public så er metoden/variabelen synlig for all annen kode. Slik delvis sperring av adgang til særlig variable, sikrer oss at vi kan bestemme fullt ut selv i en klasse hvordan en variabel skal endres.

Klassediagrammer En mer kompakt måte enn objektdiagrammer å tegne sammenhengen i programmet Skiller seg fra objektdiagrammer ved at vi ikke direkte tegner datastrukturen (pekere og pekerarrayer), men bare forhold (assosiasjoner, forbindelser) mellom klassene. I klassediagrammer dokumenterer vi også sentrale metoder. Forholdene er linjer med et logisk navn og antall objekter i hver ende Anta at vi har laget en class Konto med tre objektvariable: saldo, eier og adresse og en metode: settinn().

Tre (fire) mulig felter i tegning av en klasse Navnefeltet (alltid) klassenavnet Kan utelates: Variabelfeltet (attributtene) variabelnavn evt. med type Metode-feltet Evt med parametere og returverdi (Unntaks-feltet) Symboler for synlighet (fra resten av programmet) + public - private # protected ~ package

UML Klassediagrammet kan nyttes til Modell av problemområdet (domenemodell) Modell av klassene i programmet (+ modell av databasen,....) Men siden vi skal modellere virkeligheten en-til-en i programmet vårt, så blir de like i utgangspunktet

Forhold mellom klasser En student har null eller flere eksamener Vi tegner et forhold mellom to klasser som har med hverandre å gjøre logisk sett ,og hvor vi i programmet vil kunne følge pekere for å få adgang til variable eller metoder Vi skriver hvor mange objekter det maksimalt på ett tidspunkt kan være på hver side av et slikt forhold Siden vi med: Eksamen mener en avlagt enkelt-eksamen vil en Eksamen bare være tilknyttet en bestemt student

Antallet objekter angis slik: Navnet på forbindelsen antall Student antall Eksamen Forbindelsen leses fra venstre: En student har tatt null, en eller flere Eksamener” Antallet objekter angis slik:

Studentregister2 Et studentregister holder orden på studentene og kursene, og en student tar 3 kurs hvert semester

Sammenligning: Objektdiagram og Klassediagram

Regler for å plassere riktige antall på et forhold Anta at du står i ett objekt av en klasse og ser over til (langs en forbindelse) til en annen klasse: Hvor mange objekter ser du da maksimalt på et gitt tidspunkt av den andre klassen Det antallet noteres (jfr. tabellen) på den andre siden Du går så over forbindelsen til den andre klassen og antar at du nå står i ett objekt av denne klassen og gjenntar pkt. 1-3

Hvilke forhold skal vi ha med i klassediagrammet Slike forhold hvor ett objekt av den ene klassen: inneholder består av eier,.. en eller flere objekter av den andre klassen Det vi i programmet vil følge en peker for å få tak i verdien på visse variable i den andre klassen eller kalle en metode. Det er da ikke ’naturgitt’ hvilke forhold vi har i et klassediagram, det avhenger av hvilke spørsmål vi vil være interessert i å svare på.

Et større eksempel – class Konto Hvordan representere en konto med private og get/set –metoder SettInn() og taUt() og overførTilAnnenKonto() er set-metoder giSaldo() er en get-metode I større systemer lar vi aldri andre klasser direkte endre variable, men går ’alltid’ via get- og set-metoder

class Konto { private static int nummer = 0; private int kontonummer, saldo; private String eier, adresse; Konto() { saldo = 0; bestemKontonummer(); } Konto(String e, String adr, int s) { eier = e; adresse = adr; saldo = s; void bestemKontonummer() { nummer++; kontonummer = nummer; void settInn(int innskudd) { saldo = saldo + innskudd; boolean taUt(int uttak) { if (uttak > saldo) return false; saldo = saldo - uttak; return true; boolean overførTilAnnenKonto(Konto tilKonto, int beløp) { if (taUt(beløp)) { tilKonto.settInn(beløp); } else return false;

public static void main ( String[] args) { Bank b = new Bank(); int giSaldo() { return saldo; } } // end class Konto class Bank { public static void main ( String[] args) { Bank b = new Bank(); Konto a = new Konto(); a.settInn(500); Konto k = new Konto("Arne M", "Ifi, UiO", 1000); System.out.println("a.saldo" + a.giSaldo() + ", k.saldo:" + k.giSaldo()); a.overførTilAnnenKonto(k, 400); }} >java Bank a.saldo500, k.saldo:1000 a.saldo100, k.saldo:1400