Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 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

I.
Tabeller av objekter Klassen ArrayList
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
C++ for Java-programmerere
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
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.
Høgskolen i Oslo Webprogrammering Introduksjon til Java-scripting.
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.
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
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
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.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
INF150 Programmering mandag 11.9
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Objektorientert programmering
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
Java 11 Programmering med og uten objekter: hva er forskjellen?
INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger
Å 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.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
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..
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.
Indledende Datalogi /kelk 1 Need to know Løkker Klasser, instanser og Objekter Hvorfor objektorientering? Scope – hvor erklæres en variabel? ”Access Modifiers”
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.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
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
Finne feil - Debugging Introduksjon til sortering.
Kapittel 5 Vilkårssetningar og løkker. 5.1 Boolske uttrykk George Boole ( ), britisk matematikar Utvikla teori om logikk ved bruk av symbol i.
Repetisjon INF 1000 – våren 2007 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Anne Landro, Are Magnus Bruaset og Arild Waaler.
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.
INF5110 – 23. april, 2013 Svar på noen oppgaver til kap
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:

Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO

Oversikt StringTokenizer De foilene Ole Christian ikke fikk tid til i uke 6 Repetisjon Variable deklarasjoner, tilordnings-setningen Løkker (for, while, do) valgsetninger (if.. else, switch case) arrayer (array-peker og array-objekt) metoder Objekter og klasser i verden i programmet, hvorfor og hvordan Pekere, og hvordan lage objekter fra klasser

Alfabetisk ordning Anta at s og t er tekstvariable (og at s ikke har verdien null) Er s foran t i alfabetet? int k = s.compareTo(t); if (k < 0) { System.out.println("s er alfabetisk foran t"); } else if (k == 0) { System.out.println("s og t er like"); } else { System.out.println("s er alfabetisk bak t"); }

Starter en tekst med en annen? Anta at s og t er tekstvariable (og at s ikke har verdien null) Starter s med teksten t? boolean b = s.startsWith(t); if (b) { System.out.println("s starter med t"); } else { System.out.println("s starter ikke med t"); }

Slutter en tekst med en annen? Anta at s og t er tekstvariable (og at s ikke har verdien null) Slutter s med teksten t? boolean b = s.endsWith(t); if (b) { System.out.println("s ender med t"); } else { System.out.println("s ender ikke med t"); }

Fra tall til tekst og omvendt For å konvertere fra tall til tekst: For å konvertere fra tekst til tall: int k = Integer.parseInt(s); double x = Double.parseDouble(s); (og tilsvarende for de andre numeriske datatypene) String s1 = String.valueOf(3.14); String s2 = String.valueOf('a'); String s3 = String.valueOf(false); String s4 = "" String s5 = "" + 'a'; String s6 = "" + false;

Å finne de enkelte ordene i en tekst Av og til ønsker vi å kunne bryte opp en tekst i de enkelte ordene (”tokens”), der ordene er separert av spesielle skilletegn. StringTokenizer er et verktøy som kan brukes til dette. Standard skilletegn er mellomrom, tabulator, carriage return og linjeskift (såkalte blanke tegn). Vi kan velge andre skilletegn om vi ønsker. jeg har 20 kroner tokens

Eksempel import java.util.*; import easyIO.*; class TokenizerDemo { public static void main(String [] args){ In tast = new In(); System.out.print(”Skriv en setning: ”); String linje = tast.inLine(); StringTokenizer st = new StringTokenizer(linje); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } Her importeres pakken hvor StringTokenizer ligger Her deler vi opp linja i de enkelte ordene Her plukker vi ut ett og ett ord fra oppdelingen Her sjekker vi om det er flere ord igjen å plukke ut

Eksempel 2 : andre skilletegn import java.util.*; import easyIO.*; class TokenizerDemo2 { public static void main(String [] args){ In tast = new In(); System.out.print(”Skriv en setning: ”); String linje = tast.inLine(); StringTokenizer st = new StringTokenizer(linje); while (st.hasMoreTokens()) { System.out.println(st.nextToken(”,.:;”)); } Vi angir fire mulige skilletegn Test programmet

En variabel er en navngitt plass i lageret som inneholder en verdi av en viss type. Variable deklareres og får da sitt navn og type. (+ mulig startverdi) Tilordningssetningen gir en ’ny’ verdi til en variabel – den gamle verdien overskrives Variable, deklarasjon og tilordning double rente; int i = 4, j = i+1; rente = 2.5; rente = rente - 0.5;

int [] pTall = {2,3,5,7}; int sum1 =0; for (int i = 0; i < pTall.length; i++) { sum1 = sum1 + pTall[i]; } int sum2 = 0, i = -1; while (++i < pTall.length) { sum2 += pTall[i]; } int sum3 = 0, ii= 0; do { sum3 += pTall[ii]; } while (++i < pTall.length ); Løkker – gjør setninger flere ganger for-løkke med lokal løkkevariabel ’i’ while-løkke do-while løkke går minst en gang (feiler hvis length = 0) a) b) c)

array En array betår av to deler arraypekeren arrayobjektet int [] pTall ; pTall= new int [4]; pTall[0] = 2; pTall[1] = 3; pTall[2] = 5; pTall[3] = 7; pTall new lager array-objektet og returnerer adressen tilordningen pTall = new.. plasserer adressen til arrayobjekte t i pTall

array int [] pTall ; pTall= new int [4]; pTall[0] = 2; pTall[1] = 3; pTall[2] = 5; pTall[3] = 7; pTall Programmet kan lese og skrive alle heltalls variablene i arrayobjektet ved å starte der pTall peker, og så evt legge til 0,1,2 eller 3 (= length -1) pTall[1] = 3; betyr at plassen hvor pTall ’peker’ + 1 får verdien ’3’

import easyIO.*; class ArrayTest{ public static void main(String args []) { In tastatur = new In(); Out skjerm = new Out(); double s1 =0.0,s2=0.0; // registrer temeraturen 2 ganger om dagen i en uke double [][] temp = new double [7][2]; String [] ukedag ={"mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag", "søndag"}; for(int i = 0; i < 7; i++) { skjerm.out("Gi morgen-temp for " +ukedag[i] +" :"); temp[i][0] = tastatur.inDouble(); skjerm.out("Gi kvelds-temp for " + ukedag[i] +" :"); temp[i][1] = tastatur.inDouble(); } for(int i = 0;i<7;i++) { s1 += temp[i][0]; s2 += temp[i][1]; } skjerm.outln(" Gjennomsnitt morgen-temp = " + s1/7); skjerm.outln(" Gjennomsnitt kvelds-temp = " + s2/7); }

Valgsetninger – if.. else og switch/case Out skjerm = new Out(); In tastatur = new In(); int alder = tastatur.inInt(); if (alder > 15) skjerm.out("Voksenbillett”); else skjerm.out("Barnebillett"); Hadde vi hatt flere setninger, måtte vi brukt {..} rundt disse

static void meny (Out ut) { ut.out(" Velg:"); ut.out(" 1 - les data"); ut.out(" 2 - skriv ut"); ut.out(" 3 - avslutt"); } public static void main ( String[] args) { int alder = 0, valg; Out skjerm = new Out(); In tastatur = new In(); do{ meny(skjerm); valg = tastatur.inInt(); switch(valg) { case 1: // les data alder = tastatur.inInt(); break; case 2: // skriv data skjerm.out("Alder =" + alder); break; case 3: // avslutt skjerm.out("Systemet avslutter"); break; default: // feil skjerm.out("Bare gi verdier: 1 - 3"); } } while (valg != 3); switch /case – setning. velger mellom 1,2,3 og ’gal verdi’ kall på metoden ’meny(..)’ som skriver ut valgmulighetene

metoder Brukes til å dele opp programmet i så små deler at de er ’lette’ å få riktig vi velger selv hvilke setninger vi legger i en metode En metode gis et navn vi selv velger Noen metoder skal returnere et svar Der setter vi typen til svaret (int, double, int [],..) foran metodenavnet Noen metoder ’bare gjør noe’ da setter vi ’void’ foran metodenavnet

kall av metoder Kall av en metode er: At vi skriver navnet på en metode som (del av) en setning i en annen metode (f.eks i ’main’) Når vi gjør det, ’hopper’ programutførelsen til starten på den kalte metoden. Når den kalte metoden er ferdig (returnerer), ’hopper’ programutførelsen tilbake til rett etter kallet. Metoder kan ha parametere (navngis i parentes bak metodenavnet) disse oppfører seg som lokale variable i metoden når vi kaller metoden, får vi kopier av verdiene som ble brukte i kallet på parameterplassene før man ’hopper’ til den kalte metoden (se neste foil). Når vi lærer om klasser, skal vi se at vi ofte ikke behøver å ha static foran metoden (= klassemetode)

import easyIO.*; class MetodeTest { static int leggSammen(int a, int b) { int svar = a + b; return svar; } static void skrivTegn(Out ut, int ant, char c) { for (int i = 0; i < ant;i++) ut.out(c); ut.outln(); } static void skrivAdvarsel(Out u, String s) { skrivTegn(u,s.length() + 12, '*'); u.outln("Advarsel:" + s + "!!!!"); skrivTegn(u,s.length() + 12, '*'); } public static void main ( String[] args) { int i=14, abc = 22, c; Out skjerm = new Out(); c= leggSammen(i,abc); skjerm.outln("svaret er:" + c); skjerm.outln("nytt svar:" + leggSammen(c,abc)); skjerm.outln("enda ett svar:" + leggSammen(i+c,i)); String x = "" + c; skrivAdvarsel(skjerm, x); } } >java MetodeTest svaret er:36 nytt svar:58 enda ett svar:64 ************** Advarsel:36!!!! ************** 3 kall på leggSammen(..) kall på skrivAdvarsel(..) som igjen kaller skrivTegn(..)

Objekter Hvorfor deler vi verden inn i enheter når vi snakker om den ? En blomst, fjorten trær, ti mennesker, en bil, en vei, mange murstein, en bankkonti,.... Svar : For bedre å kunne tenke om, snakke om og forstå verden.

Verden består av mange objekter, noen ganske like, noen ulike Ser vi rundt oss i auditoriet, ser vi Studenter (mange), stoler, murstein, lysarmatur, blyanter,... Vi ser at når vi betrakter verden, deler vi den opp i et passe antall enheter/deler/’klumper’ som vi har egne navn for. Slike enheter/’klumper’ vi deler verden inn i, kaller vi objekter Mange av objektene i verden er egentlig like, av samme type, men kan skille seg fra hverandre med feks. ulike navn Studentene Kia og Espen to bøker med ulik tittel/forfatter Objekter som er egentlig er like sier vi tilhører samme klasse De beskrives av samme sett med variable, men har ulike verdier på noen disse (to biler av samme bilmerke men med ulike reg.nummer)

Klasser og objekter i verden To objekter kan også være helt vesensforskjellige (f.eks et tre og en lastebil) De er da to objekter av hver sin klasse (klassen Tre og klassen Lastbil) Hva vi velger å betrakte som et objekt, og hvilke klasser vi bruker for å beskrive en problemstilling, er ikke bestemt på forhånd. Innenfor vide rammer bestemmer vi det selv. Omdebattert av filosofene, men som OO-programmerer, hevder jeg : Klasser er generelle begreper som egentlig ikke eksisterer i verden – det som eksisterer er objektene. Generelle begreper (klasser) er menneskenes måte å beskrive og strukturere verden, ikke gitt en gang for alle og vi kan godt lage oss nye begreper.

Hvor mange klasser (og objekter) er det ? Hvilke klasser vi bruker til å beskrive et problem, varierer ofte etter hvor detaljert vi betrakter en problemstilling og hvilke spørsmål vi ønsker å kunne gi svar på: Beskriver vi problemet med veitrafikk og køer på veiene, er vi neppe interessert i mer enn å telle antall biler og kanskje skille mellom lastebiler, busser og personbiler. Beskriver vi problemet til en bilfabrikk, trenger vi en meget detaljert og komplisert beskrivelse av hver bil (bestående av motor, hjul, karosseri, lys,..., hver beskrevet med sin klasse) og mange ulike typer av biler. Vi se da en rekke klasser som hver beskriver sin sine objekter.

Objektorientert Programmering - I Når vi betrakter et problem vi skal lage et datasystem for, gjør vi to avgrensninger: 1.Vi ser bare på en del av verden (vårt problemområde) 2.Innenfor problemområdet betrakter og beskriver vi bare det som er der med en viss detaljeringsgrad - bare så mange detaljer vi trenger for å svare på de spørsmål datasystemet skal kunne gi svar på. Eks: Hvordan beskrive en student ? Skal vi lage: a) Et Studentregister, registrerer vi bare navn, personnummer, adresse, tidligere utdannelse og kurs (avlagte og kurs vedkommende tar nå) b) Et legesystem for studenter, ville vi ta med svært mange opplysninger om hver student (medisiner, sykdommer, resultat fra blodprøver, vekt...) som vi ikke ville drømme om å ha i et vanlig studentregister

Objektorientert Programmering - II Når vi skal lage et programsystem, så skal det i størst mulig grad være en modell av vårt problemområde – en en-til-en kopi: - Ett objekt i problemområdet skal medføre at det skal være ett objekt i programmet som representerer dette ’verdens’ objektet. ( i tillegg kommer mange klasser og objekter i programmet for å lese fra tastatur og fil, skrive til skjerm,..) Eks.: Hver virkelig student skal ha sitt Student-objekt i et studentregister-system.

Hvordan lage klasser og objekter i et program. Klasser deklarerer vi med class Vi lager pekere til objekter ved å deklarere dem med klassenavnet Vi lager et objekt med å si new foran et klassenavn Forholdet mellom et objekt og en peker er som en array-peker og et array-objekt class Student { String navn, adresse; } class StudentRegister { public static void main(String args []) { Student s1, s2; s1 = new Student(); s2 = new Student(); }

Hva er et objekt i programmet? Et objekt er et område i lageret som inneholder en kopi av alle de metodene og variable i en klasse det ikke står static foran Klassene er en slags mal/form/oppskrift som vi kan lage objekter med. Lager vi to, tre,.. objekter av klassen, får vi to, tre,.. slike kopier De variable og metode det ikke står static foran, kalles objekt-variable og objektmetoder De variable og metoder det står static foran, kalles klasse- metoder og klassevariable, og blir ikke med i objektene (men ligger lagret i bare ett eksemplar et annet sted)

 En peker inneholder adressen til hvor et objekt ligger i lageret  eller den inneholder ’null’ (= ikke- objekt)  Vi tegner adressen som en ’pil’ class Student { String navn, adresse; } class StudentRegister { public static void main(String args []) { Student s1, s2; s1 = new Student(); s2 = new Student(); } Peker og objekter s1 s2 s1 s2 navn adresse navn adresse

Programmer i Java består av en eller flere klasser Vi deler opp programmet vårt i flere klasser Fordi hver programdel (klasse) skal være mulig å holde oversikt over – ikke for stor Fordi en klasse skal være god modell av en del av problemet vårt vi lager program for. Anta at vi hadde et datasystem som omhandlet kurs og studenter. Da ville vi ha en klasse Student og en klasse Kurs i programmet. En klasse inneholder Deklarasjon av null eller flere variable som beskriver ett eksemplar av det klassen er modell av Null eller flere metoder En klasse representer et generelt begrep som: Student, Kurs, Person, Dokument, Eiendom, CDRegister, CD, Billett, Bil, Fly, Tre, Ku, Motorsykkel...

Objekter og pekere, og hvordan få adgang til innmaten av et objekt (.) Når vi har laget et objekt med new, har vi altså fått en kopi av objekt-variablene og –metodene, men hvordan får tak i dem ? Vi bruker operatoren. (punktum). Foran punktumet har vi navnet på en peker til et objekt. Etter punktum har vi navnet på en variabel eller metode inne i objektet – Punktumet leses som ’sin’ eller ’sitt’ eks: La s1 peke på et Student-objekt. s1.navn = "Ola N";

class Student { String navn, adresse; void skrivUt() { System.out.println("Student med navn:" + navn+ ", adr:" + adresse); } class StudentRegister { public static void main(String args []) { Student s1, s2; s1 = new Student(); s1.navn = "Ola N"; s1.adresse = "Storgt. 12, 1415 Nordby"; s2 = new Student(); s2.navn = "Åsne S"; s2.adresse ="bokhandelen i Kabul"; s1.skrivUt(); s2.skrivUt(); } >java StudentRegister Student med navn:Ola N, adr:Storgt. 12, 1415 Nordby Student med navn:Åsne S, adr:bokhandelen i Kabul

Oppsummering om klasser, objekter, pekere og. Vi lager OO-programmer ved å lage en modell av problemområdet ett objekt i verden gir ett tilsvarende Java-objekt i programmet Objekter kan være av ulik type, og for hver slik type deklarerer vi en klasse Et Javaprogram består av en eller flere klasser Vi lager objekter fra klassen med new s1 = new Student(); Et objekt inneholder en kopi av alle ikke-statiske variable og metoder i klassen Vi får adgang (lese, skrive og kalle metoder) til det som er inni et objekt ved. operatoren: s2.adresse ="bokhandelen i Kabul"; s1.skrivUt();