Uke 8 - Mer om: Objekter, klasser og pekere

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
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.
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.
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/
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!? .
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.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
INF150 Programmering mandag 11.9
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.
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
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
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?
VI LAGER EN PLATEBUTIKK
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.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
02 - Java datatyper Grundlæggende om datatyper og variable.
CORBA Noen hull som må fylles: ORB Object Adapters CORBA services IDL Factory Objects.
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.
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.
Objektorientert utforming In 140 Sommerville kap. 12.
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.
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.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 14.9 Ulike måter for å lese inn og skrive ut data. Kap. 3.5 mer om if – setninger Ferdige.
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.
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
IS-102 Interaksjon med objekter
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Uke 8 - Mer om: Objekter, klasser og pekere 7 okt. 2003, Arne Maus Inst. for informatikk, UiO

Oppsummering om klasser, objekter, pekere og . Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en bestemt type. Objekter som er av samme klasse, beskrives med de samme variablene, men vil ha forskjellige verdier på noen av disse. Eks: To bankkonti med ulik eier og kontonummer, men samme beløp på saldo (tilfeldigvis) Vi lager OO-programmer ved å lage en modell av problemområdet i Javaprogrammet 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 i programmet

.. oppsummering forts. Et Javaprogram består av en eller flere klasser En klasse er en deklarasjon av data og metoder for ett objekt av klassen. Vi deklarerer pekere til objekter av en bestemt klasse – f.eks. class Kurs {..} slik: Kurs kurs14, k2, k; Vi lager objekter fra klassen med new k2 = new Kurs(); Et objekt inneholder en kopi av alle ikke-statiske variable og ikke-statiske metoder i klasse Disse kalles objekt-variable og objekt-metoder Vi får adgang (lese, skrive og kalle metoder) til det som er inni et objekt ved . Operatoren : Vi må ha en peker til et objekt etterfulgt av punktum . s2.adresse ="bokhandelen i Kabul"; s1.skrivUt();

Lager to objekter av klassen Kurs class Kurs { String kurskode; int studiepoeng; void skrivUt() { System.out.println("Kurs med kode:" + kurskode+ ", og stp:" + studiepoeng); } class KursRegister { public static void main(String args []) { Kurs inf, mat; inf = new Kurs(); inf.kurskode = "INF1000"; inf.studiepoeng = 10; inf.skrivUt(); mat = new Kurs(); mat.kurskode = "MAT1010"; mat.skrivUt(); objektvariable Objekt - metode Klasse - metode Lager to objekter av klassen Kurs >java KursRegister Kurs med kode:INF1000, og stp:10 Kurs med kode:MAT1010, og stp:0

Oversikt Mer om static Arrayer av pekere til objekter Klassevariable Klasse-metoder Arrayer av pekere til objekter UML objektdiagram Eks CD-samling Konstruktører eksempel med tre klasser: Student, Kurs og StudentRegister

Klasse-variabel (=statisk variabel) Setter vi static foran en variabel, er det er bare én felles variabel med det navnet for alle objektene. Setter vi static foran en metode, har den bare utsikt til : sine egne lokale variable og parametere andre statiske variable og metoder klassenavnene Statiske metoder og variable kan man få adgang til både via klassenavnet og punktum via peker til et objekt av klassen og punktum

class B { static int i = 0; double x = 0.0; } class A { int k; public static void main ( String[] args) { B b1 = new B(), b2 = new B(); // endre klassevariable (det er bare en felles) System.out.println("b1.i :"+ b1.i+", b2.i:" + b2.i); b1.i = 4; // endre objektvariabel (en kopi i hvert objekt) System.out.println("b1.x :"+ b1.x+", b2.x:" + b2.x); b1.x = 2; >java A b1.i :0, b2.i:0 b1.i :4, b2.i:4 b1.x :0.0, b2.x:0.0 b1.x :2.0, b2.x:0.0

class A2 { int k; // objektvariabel ’k’ public static void main ( String[] args) { k = 1; }} >javac a2.java a2.java:6: non-static variable k cannot be referenced from a static context k = 1; ^ 1 error class A2 { int k; public static void main ( String[] args) { A2 aa = new A2(); aa.k = 1; } >javac A2.java >

Arrayer av pekere til objekter Vi kan lage arrayer av pekere til objekter (men ikke av objektene direkte) omlag på samme måte som vi lager arrayer av int, double og String Har vi deklarert klassen Kurs {...} kan vi lage array som følger: Kurs [] ifiKurs; ifiKurs = new Kurs[120]; ifiKurs[0] = new Kurs(); Her deklareres ’bare array-pekeren Her lages array-objektet med 120 ’tomme’ pekere Her settes det første pekeren i array-objektet til å peke på et nytt Kurs-objekt

arraypekeren ’ifi1000Kurs’ peker til et array-objekt med 8 Kurs-pekere class Kurs { String kurskode; int studiepoeng=10; void skrivUt() { System.out.println("Kurs med kode:" + kurskode + ", og stp:" + studiepoeng); } class KursRegister2 { public static void main(String args []) { String [] kursKoder= {"INF1000","INF1010", "INF1020","INF1040","INF1050", "INF1060","INF1070","INF1400"}; Kurs [] ifi1000Kurs = new Kurs[8]; for(int i = 0; i < kursKoder.length; i++) { ifi1000Kurs[i] = new Kurs(); ifi1000Kurs[i].kurskode = kursKoder[i]; ifi1000Kurs[i].skrivUt(); "INF1000” "INF1010” "INF1400” arraypekeren ’ifi1000Kurs’ peker til et array-objekt med 8 Kurs-pekere

Eksekvering av KursRegister2 >java KursRegister2 Kurs med kode:INF1000, og stp:10 Kurs med kode:INF1010, og stp:10 Kurs med kode:INF1020, og stp:10 Kurs med kode:INF1040, og stp:10 Kurs med kode:INF1050, og stp:10 Kurs med kode:INF1060, og stp:10 Kurs med kode:INF1070, og stp:10 Kurs med kode:INF1400, og stp:10

Stringer er ordentlige objekter String er en klasse i Java-biblioteket, men har en egen spesiell syntaks (skrivemåte) så det ser ut som den er en av de basale typene (som int, double,..). Når vi har en string, har vi alså både en peker (den vi deklarerer navnet på) og et stringobjekt. String-objekter kan ikke endres (trenger du endrbare tekster, bruk klassen StringBuffer) Egen skrivemåte for stringkonstanter: String s = ”En fin dag i mai”; Er det samme som: String s = new String(”En fin dag i mai”); Klassen String inneholder mer enn 50 metoder for konvertering mellom ulike datatyper og tekst, samt tekstsøking.

UML-diagrammer av programmene våre Hvorfor tegne diagrammer over programmene Oversikt Samarbeid med andre programmererer / systemutviklere Arkitekter, ingeniører tegner først, så bygger de ! Enklere å endre en regning enn programmet Objektdiagrammer Klassediagrammer UML – diagrammene er litt annerledes enn det vi har tegnet hittil (men mye av det samme) (i UML er det ca 10 andre diagramtyper vi ikke skal lære)

Objekt-diagrammer Vi tegner en typisk situasjon av objekter i systemet vårt, når vi har fått datastrukturen på plass. Vi tegner og navngir bare de mest sentrale dataene som: pekere peker-arrayer noen sentrale variable i objektene

Tegning av et objekt (med mer eller mindre detaljer) To eller ett felt(er) i en boks Navnfeltet objektnavn:klassenavn eller bare :klassenavn Attributt-feltet (kan være tomt) Navnet på sentrale objektvariable evt. også med verdier

Andre elementer i et objektdiagram Pekere Peker-arrayer

Eksempel: Et CD-samling Vi ønsker å lage et lite menystyrt program for å holde orden på CD-samlinga vår med mindre enn 1000 CDer. Vi skal ha funksjoner for å : registrere ny CD Søke etter artist (skriv ut alle platene med denne) Skrive ut hele registeret Hvilke klasser har vi i dette problemet Opplagt ’class CD’ Noen fler ?

Klassene: CD og CDsamling Vi tenker oss følgende datastruktur (er den tilstrekkelig?) Vi har her forenklet programmet (klassen CDsamling forventes å inneholde main, meny-metode og sentral switch,... , mens CD inneholder utskriftsrutine .

import easyIO.*; class CD{ String artist, tittel; void skrivUt(Out u) { u.outln("Artist:" + artist + ", Tittel:" + tittel); } class CDsamling{ CD [] minSamling = new CD[1000]; int antCDer = 0; public static void main(String args []) { In tast = new In(); Out skj = new Out(); CDsamling e = new CDsamling(); String a; CD c; int valg;

do{ skj.outln("Velg:"); skj.outln(" 1 - les ny plate (skriv artist platetittel"); skj.outln(" 2 - skriv artist"); skj.outln(" 3 - avslutt"); valg = tast.inInt(); switch(valg) { case 1: // les data c = new CD(); e.minSamling[e.antCDer++] = c; skj.out("Gi artistnavn:"); c.artist = tast.inWord("\n"); skj.out("Gi tittel:"); c.tittel = tast.inWord("\n"); break; case 2: // skriv data a = tast.inWord("\n"); for(int i = 0; i < e.antCDer; i++) if (e.minSamling[i].artist.equals(a)) e.minSamling[i].skrivUt(skj); case 3: // avslutt skj.out("Systemet avslutter"); default: // feil skj.out("Bare gi verdier: 1 - 3"); } } while (valg != 3); }}

>java CDsamling Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt 1 Gi artistnavn:tom Gi tittel:Fest1 Gi artistnavn:ola Gi tittel:FullFres 2 Artist:tom, Tittel:Fest1

Konstruktører – startmetoder i klasser Når vi lager et objekt av en klasse med new, kaller vi egentlig en metode som heter det samme som klassen (derfor parentesen bak klassenavnet). Vi får automatisk med en slik konstruktør-metode fra oversetteren dersom vi ikke skriver en slik konstruktør selv. Den vi får automatisk er uten parametere og gjør ingen ting. Konstruktører nyttes i all hovedsak til å gi fornuftige startverdier for variable i objektet som dannes. De konstruktørene vi skriver kan ha parametere. Konstruktørene skal ikke ha noen type foran seg, heller ikke void. Vi kan ha flere konstruktører i en klasse, men da må parameterne være ulike i antall eller typen av parametrene

Eksempel Student med konstruktor class Student { String navn; Kurs [] mineKurs = new Kurs[3]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ mineKurs[i] = k[i]; mineKurs[i].antStudenter++; }

Et helt studentregister med kurs, studenter og registeret Vi har Studenter på Ifi som første semester tar tre kurs, samtidig som vi har behov for å registrere kurs og hvor mange studenter som tar hvert kurs. Vi tegner først en tenkt datastruktur – et UML objektdiagram så skriver vi programmet

Objektdiagrammet er en forenkling av programmet Objektdiagrammet er en forenkling av programmet. Det tar bare med den essensielle datastrukturen (mest pekere og peker-arrayer) som holder datastrukturen sammen

Kurs [] mineKurs = new Kurs[3]; Student(String navn, Kurs [] k){ class Student { String navn; Kurs [] mineKurs = new Kurs[3]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ mineKurs[i] = k[i]; mineKurs[i].antStudenter++; } void skrivUt() { System.out.println("Student med navn:"+ navn+ ",og kurs:"); for (int i = 0;i < mineKurs.length; i ++) System.out.println(mineKurs[i].kurskode); }} class Kurs { String kurskode ; int antStudenter = 0; Kurs(String k) { kurskode = k; >java StudentRegister2 Student med navn:Ola N, og kurs: INF1000 INF1040 MAT1030 Student med navn:┼sne S, og kurs:

class StudentRegister2{ public static void main(String args []) { String [] kurskode = {"INF1000","INF1040","MAT1030"}; // lag kurs Kurs [] infKurs = new Kurs[3]; for (int i = 0 ; i< infKurs.length; i++) infKurs[i] = new Kurs(kurskode[i]); //lag studenter på informatikk bachelor Student [] stud = new Student[2]; stud[0] = new Student("Ola N", infKurs); stud[1] = new Student("Åsne S",infKurs); for (int i = 0 ; i< stud.length; i++) stud[i].skrivUt(); }}

Oppsummering Klasser er oppskrifter for hvordan vi lager objekter med new Vi deklarerer pekere til objekter og bruker punktum . Kan ha arrayer av pekere til objekter Klasse- og objektvariable og –metoder. Konstruktører er ’startmetoder’ med samme navn som klassen, Kalles hver gang vi sier new. UML-diagrammer (Objekt- og Klasse-diagram) gir oversikt og forenkling som skikkelige ingeniører lager vi tegninger før vi lager systemet (programmerer)