Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."— Utskrift av presentasjonen:

1 Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4 Å lage egne klasser Klassen Kontoside 2-3 Lokale variabler, parametre og objektvariablerside 4 Klassen Vareside 5 Tilgangsmodifikatorene private og publicside 6 Overloading av navnside 7 Konstruktører og initiering av objektvariablerside 8-9 Objektmetoder, eksemplerside 10 Return-setningenside 11 Skjuling av navn, thisside 12 Programmeringskonvensjoner for klasserside 13 Å skrive ut datainnholdet i et objekt; toString()side Noen nye operatorerside 16 Et vindu med enkel grafikkside 17 Subklasser, extends og klassetreetside Koordinaterside Grafikkside 23-26

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 2 Klientprogram som tester klassen Konto class KontoTest { public static void main(String[] args) { /* Trinn 1: Lager et objekt av klassen */ /* Kontonummeret er long, derfor L etter tallet */ Konto olesKonto = new Konto( L, "Ole Olsen", ); /* Trinn 2: Prøver ut tilgangsmetodene */ long kontonr = olesKonto.finnKontonr(); String navn = olesKonto.finnNavn(); double saldo = olesKonto.finnSaldo(); System.out.println("Før endring av dataene: \nKontonr: " + kontonr + ", navn: " + navn + ", saldo: " + saldo); /* Trinn 3: Prøver mutasjonsmetodene */ olesKonto.innskudd(1000); // nå er saldo lik 3350,50 olesKonto.uttak(500); // nå er saldo lik 1850 kontonr = olesKonto.finnKontonr(); navn = olesKonto.finnNavn(); saldo = olesKonto.finnSaldo(); System.out.println("Etter endring av dataene: \nKontonr: " + kontonr + ", navn: " + navn + ", saldo: " + saldo); } Konto kontonr navn saldo finnKontonr finnNavn finnSaldo innkudd uttak

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 3 Konto kontonr navn saldo finnKontonr finnNavn finnSaldo innkudd uttak Klassen Konto ser slik ut public void uttak(double beløp) { saldo = saldo - beløp; } metodehode metodekropp Gjør oppgave 1-4 side Utdrag av klientprogrammet: Konto olesKonto = new Konto( L, "Ole Olsen", ); long kontonr = olesKonto.finnKontonr(); String navn = olesKonto.finnNavn(); double saldo = olesKonto.finnSaldo(); …utskrift… olesKonto.innskudd(1000); olesKonto.uttak(500); class Konto { private long kontonr; private String navn; private double saldo; public Konto(long startKontonr, String startNavn, double startSaldo) { kontonr = startKontonr; navn = startNavn; saldo = startSaldo; } public long finnKontonr() { return kontonr; } public String finnNavn() { return navn; } public double finnSaldo() { return saldo; } public void innskudd(double beløp) { saldo = saldo + beløp; } public void uttak(double beløp) { saldo = saldo - beløp; } objektvariabler konstruktør objektmetoder

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 4 Sammenheng: Lokale variabler, parametre og objektvariabler Lokale variabler deklareres inne i en metode og kan bare brukes inne i den blokken der de deklareres. Parametre fungerer som lokale variabler med startverdier gitt av argumentlisten ved metodekallet. Lokale variabler gis ingen bestemt startverdi, dette er programmererens ansvar. Objektvariabler deklareres inne i en klasse, men utenfor alle metoder. De kan brukes av alle metodene i klassen. Objektvariabler gis startverdien 0, false eller null avhengig av datatypen. Gjør oppgave 5 side 100.

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 5 Oppgave Vare varenavn varenr pris pr kg uten moms finn pris for et gitt antall kilo uten moms finn pris for et gitt antall kilo med moms sett ny pris Programmer klassen Vare etter spesifikasjonene gitt i klassediagrammet til venstre. Husk å lage konstruktør. Lag et lite, svært enkelt klientprogram. Se på programkoden du har laget, og vis eksempler på: –objektvariabel –objektmetode –parameter –argument –return-setning –setning der et objekt blir laget Gjør oppgave 3 side 107. Denne oppgaven bygger videre på klassen Vare som du nettopp har laget. Etter disse praktiske oppgavene skal vi se noe mer i detalj på de enkelte delene av en klasse.

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 6 Tilgangsmodifikatorene private og public Tilgangsmodifikatorer styrer tilgjengeligheten til klasser, konstruktører og medlemmer (medlemmer = variabler + metoder). private: kun tilgjengelig innenfra klassen, for eksempel fra alle metoder i klassen. public: tilgjengelig fra overalt, for eksempel fra et klientprogram. ingen tilgangsmodifikator = pakketilgang, kun tilgjengelig innenfor den pakken som klassen tilhører. class Konto { private long kontonr; private String navn; private double saldo; public Konto(long startKontonr, String startNavn, double startSaldo) { kontonr = startKontonr; navn = startNavn; saldo = startSaldo; } …….. } pakketilgang privat tilgang offentlig tilgang Dersom tilgangen til klassen er strengere enn tilgangen til en konstruktør eller et medlem, vil klassetilgangen gjelde for konstruktøren/medlemmet. Ellers gjelder den tilgangen som konstruktøren/medlemmet har.

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 7 Overloading av navn Flere metoder kan ha samme navn dersom de har forskjellig signatur –(Signaturen til en metode består av metodenavnet, samt antall og type parametre. Returtypen og parameternavnene er ikke en del av signaturen.) Eksempel fra klassen String –int indexOf(int tegn) –int indexOf(int tegn, int fraIndeks) –int indexOf(String str) –int indexOf(String str, int fraIndeks) Eksempel på bruk av disse metodene String tekst = "Det er 9.august i dag. Om to uker er skolen i full gang."; int pos1 = tekst.indexOf('.'); // pos1 blir 8 int pos2 = tekst.indexOf('9');// pos2 blir 7 int pos3 = tekst.indexOf('.', pos1 + 1);// pos3 blir 21 int pos4 = tekst.indexOf("Om"); // pos4 blir 23 int pos5 = tekst.indexOf("Om", pos4 + 1);// pos5 blir -1 (=finnes ikke)

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 8 Konstruktører og initiering av objektvariabler Også konstruktørnavnet kan overloades. En klasse kan ha flere konstruktører dersom de har forskjellig signatur. Dersom vi ikke lager noen konstruktører selv, blir det automatisk laget en standardkonstruktør. Denne konstruktøren svarer til en konstruktør med tom parameterliste og kropp. Dersom vi lager egne konstruktører, og vi ønsker at en konstruktør med tom parameterliste skal eksistere, må vi lage den. Vi kan initiere objektvariabler samtidig med deklarasjonen: –private String navn = ““; –private double lengde = 5; Dersom vi gir verdi til disse variablene i en konstruktør, vil verdiene i konstruktøren overstyre de initierte verdiene. En konstruktør kan, men må ikke, gi verdier til alle objektvariabler.

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 9 Eksempler på konstruktører for klassen Konto public Konto(long startKontonr, String startNavn, double startSaldo) { kontonr = startKontonr; navn = startNavn; saldo = startSaldo; } public Konto(long startKontonr, String startNavn) { kontonr = startKontonr; navn = startNavn; saldo = 0.0; } public Konto() { }

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 10 Objektmetoder, eksempler public long finnKontonr() { // returtypen er en primitiv datatype return kontonr; // returnerer en verdi som passer med datatypen } public String finnNavn() { // returtypen er en referansetype return navn; // returnerer en verdi som passer med datatypen } public double finnDisponibeltBeløp() { // returnerer beregnet verdi return saldo ; // det er tillatt å overtrekke 1000 kroner } public void innskudd(double beløp) { // ingen returverdi saldo = saldo + beløp; } public double finnDisponibeltBeløp() { double disp = saldo ; // lokal variabel for mellomresultat return disp; }

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 11 Return-setningen Dersom returtypen er forskjellig fra void, må metoden inneholde minst én return-setning. En return-setning består av det reserverte ordet return etterfulgt av et uttrykk med samme type som returtypen, eller av en type som automatisk kan omformes til returtypen (automatisk omforming, se kapittel 2.7). Dersom programkontrollen treffer på en return-setning, hopper den umiddelbart ut av metoden uavhengig av om det finnes flere setninger i metoden. En metode med returtype void kan også inneholde setningen return;, effekten er den samme som dersom en verdi returneres.

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 12 Skjuling av navn; this Hvorfor fungerer ikke følgende metode? public Konto(long kontonr, String navn, double saldo) { kontonr = kontonr; navn = navn; saldo = saldo; } Parameternavnene skjuler objektvariablene med samme navn. Vi må passe på at vi ikke gir samme navn til parametre og objektvariabler. Dersom vi absolutt ønsker å bruke samme navn, kan vi skille navnene fra hverandre ved å bruke det reserverte ordet this: public Konto(long kontonr, String navn, double saldo) { this.kontonr = kontonr; this.navn = navn; this.saldo = saldo; } this er en referanse som alltid peker til det objektet Java-tolkeren holder på med i øyeblikket.

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 13 Programmeringskonvensjoner for klasser Dette er retningslinjer, ikke syntaksregler. Klassenavn har stor forbokstav. Navn på variabler og metoder har liten forbokstav. Dersom navnet består av flere ord, benyttes stor forbokstav fra og med ord nummer to. Understrekingstegn og $ benyttes ikke. Objektvariabler har tilgangsmodifikator private. Konstruktører har tilgangsmodifikator public. Metoder har tilgangsmodifikator public eller private. Klassevariabler og klassemetoder brukes sjelden. Tilgangs- og mutasjonsmetoder som har som oppgave å hente ut eller forandre på et attributt, har standardiserte navn på engelsk. Med tilpasning til norsk får vi følgende, vist ved eksempler: public void settLengde(double nyLengde) public double finnLengde() public boolean erFerdig() public void settFerdig(boolean nyFerdig)

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 14 Å skrive ut datainnholdet i et objekt Vi kan skrive ut innholdet i et Konto-objekt slik: long kontonr = olesKonto.finnKontonr(); String navn = olesKonto.finnNavn(); double saldo = olesKonto.finnSaldo(); System.out.println("Kontonr: " + kontonr + ", navn: " + navn + ", saldo: " + saldo); eller slik: System.out.println("Før endring av dataene: \nKontonr: " + olesKonto.finnKontonr() + ", navn: " + olesKonto.finnNavn() + ", saldo: " + olesKonto.finnSaldo()); Dette er noe vi trenger ofte….se neste side!

15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 15 Metoden toString() Hvorfor ikke la objektet selv lage den strengen som skal skrives ut? public String toString() { return "Kontonr.: " + kontonr + "\nNavn: " + navn + "\nSaldo: " + saldo; } Metodehodet er standardisert til public String toString() Utskriftsetningen fra forrige side kan nå se slik ut: System.out.println(olesKonto.toString()); Ofte er toString() underforstått: –I println()-metoden: System.out.println(olesKonto); // som om det hadde stått olesKonto.toString() –Ved skjøting av strenger: String resultat = ”Dette er kontoen: " + olesKonto; Standardutgaven av metoden toString() blir brukt dersom klassen ikke har sin egen utgave. –Gir klassenavnet etterfulgt og en tallkode, eksempel: Det er en god vane å lage toString()-metoder i alle klasser. Gjør oppgaven side 111.

16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 16 Noen nye operatorer inkrementoperatoren ++ dekrementoperatoren -- sammensatte tilordningsoperatorer tall++er det samme somtall = tall + 1 tall--er det samme somtall = tall - 1 tall += 3er det samme somtall = tall + 3 tall -= 3er det samme somtall = tall - 3 tall *= 3er det samme somtall = tall * 3 tall /= 3er det samme somtall = tall / 3 tall %= 3er det samme somtall = tall % 3 Gjør oppgave 2, side

17 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 17 Et vindu med enkel grafikk import java.awt.*; // klassene Container, Color og Graphics import javax.swing.*; // klassene JFrame og JPanel class Vindu extends JFrame { public Vindu(String tittel) { setTitle(tittel); setSize(200, 120); // bredde, høyde setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container guiBeholder = getContentPane(); Tegning tegningen = new Tegning(); guiBeholder.add(tegningen); } class Tegning extends JPanel { public void paintComponent(Graphics tegneflate) { super.paintComponent(tegneflate); // Husk denne! setBackground(Color.green); tegneflate.drawString("Hei hei", 50, 50); tegneflate.drawOval(40, 30, 55, 40); } class GrafikkEksempel { public static void main(String[] args) { Vindu etVindu = new Vindu("Enkel grafikk"); etVindu.show(); }

18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 18 Subklasser og ”extends” Vindu er subklasse (extends) til JFrame: –Klassen JFrame beskriver et vanlig vindu. –Klassen Vindu beskriver bare vinduer som ser ut akkurat som vårt lille, enkle. Dette vil være en delmengde, eller submengde, av den første, større mengden med vinduer. –Alt som er sant for mengden av vanlige vinduer, er også sant for vårt spesielle vindu. Vi sier at klassen Vindu arver det som gjelder for alle vinduter. Tegning er subklasse (extends) til JPanel. Alle klasser i Java henger sammen i et klassetre. –Klassen Object beskriver absolutt alle objekter. –De øvrige klassene henger sammen med klassen Object i et klassetre.

19 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 19 Et utsnitt av klassetreet i Java Object Component Container Window Frame JFrame JComponent JPanel Vindu Tegning setSize(), setBackground() og getBackground() arves herfra setDefaultClose- Operation() og getContentPane() arves herfra add() arves herfra superklassen til alle andre klasser superklasse til JPanel og Tegning subklasse til Object og Component show() arves herfra setTitle() arves herfra

20 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 20 Objektene som de ulike klassene beskriver utgjør mengder Container JComponent Window Frame JFrame Vindu JPanel Tegning

21 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 21 Koordinater Skjermflaten er delt inn i piksler i henhold til den oppløsningen den har, eks x 1024 piksler. Ved tegning må vi oppgi x- og y-koordinater i henhold til et aksekors med origo i øverste venstre hjørne.

22 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 22 Tegneflaten er mindre enn vinduet x x y tegneflate.drawOval(10, 10, 20, 20); setSize(200, 120); class Tegning extends JPanel { public void paintComponent(Graphics tegneflate) { super.paintComponent(tegneflate); int bredde = getWidth(); // verdi 192 int høyde = getHeight(); // verdi Gjør oppgaven side 121.

23 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 23 Klassen java.awt.Graphics Noen metoder: void drawLine(int x1, int y1, int x2, int y2) void drawOval(int x, int y, int bredde, int høyde) void fillOval(int x, int y, int bredde, int høyde) void drawRect(int x, int y, int bredde, int høyde) void fillRect(int x, int y, int bredde, int høyde) void drawString(String tekst, int x, int y) void setFont(Font skrifttype) void setColor(Color farge) Font getFont() Color getColor()

24 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 24 FargeDemo Vis programliste 4.5

25 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 25 FontDemo Vis programliste 4.6

26 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 4, side 26 Klasser for farger og skrifttyper Klassen java.awt.Color Eksempel: Color farge = Color.gray; farge = farge.brighter(); vindu.setColor(farge); Klassekonstanter: Color.black Color.blue Color.cyan,... Metoder: Color brighter() Color darker() Klassen java.awt.Font Eksempel: Font skrift = new Font("Serif", Font.BOLD, 16); vindu.setFont(skrift); Konstruktør: Font(String navn, int stil, int størrelse) Klassekonstanter: Font.BOLD Font.ITALIC Font.PLAIN Metoder: String getName() int getSize() int getStyle() boolean isBold() boolean isItalic() boolean isPlain()


Laste ned ppt "Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."

Liknende presentasjoner


Annonser fra Google