TNSL04 – IT grundkurs. VT2009. Föreläsning nr 4, måndag 2 mars. kl. 10-12. Snabbrepris av grundbegreppen: Klasser, objekt, konstruktorer, anrop till konstruktorer,

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Repetition av språket Java
Objektorienterad utveckling
Klassarv och inkapsling
OOP Objekt-orienterad programmering
TNSL04 – IT grundkurs. VT2008. Föreläsning nr 4, torsdag 28 feb. kl Klasser, objekt, metoder, parametrar, konstruktorer, samlingar och tillstånd.
ObjektOrienterad analys och design. SVP Vt2009 Föreläsning nr 2, måndag 8 april kl Diskussion (kurshemsida): Om designuppgiften Om projektuppgiften.
Metoder i java Det finns två typer av metoder i java
Arv.
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
1 ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering DSV Peter Mozelius.
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 8 Appletprogram/fristående grafiska program Rita linjer, rektanglar mm Skriva text Byta färg Appletprogram html.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
1 ITK:P1 Föreläsning 6 Layoutmodeller i Java DSV Marie Olsson.
TNSL04 – IT grundkurs. VT2008. Föreläsning nr 3, torsdag 7 feb. kl Del 1. Klasser, objekt, metoder, konstruktorer, samlingar och tillstånd. Hur.
Alice in Action with Java
i olika programmeringsspråk
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Föreläsning 15 (16) Introduktion till Swing. Historik (java.awt) JDK 1.0 – AWT (Abstract Window Toolkit) Paket för gränssnittsprogrammering Har en del.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
ITK:P1 Lektion 4 Att implementera en spelidé i Java DSV Peter Mozelius.
1 MSPEL Lektion 2 DSV Peter Mozelius Spel i Java applets.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 ITK:P1 Föreläsning 8 Multimedia för spelkonstruktion DSV Peter Mozelius.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
1. Ett problem/uppgift.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
0. Kod, Klassdiagram och Sekvensdiagram import java.awt.event.*; import javax.swing.*; import java.awt.*; public class TwoThreads implements ActionListener.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius.
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
2I1073 Lektion 1 KTH-MI Peter Mozelius XHTML, stilmallar och Javascript.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
OOP&M - teori1 OOP del III–vecka 15 Mer NetBeans MouseEvent Graphics Threads TIJ Chapter 14 Menus sid Drawing File Dialogs
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
DA7351 Programmering 1 Skapa och placera en komponent i en container Layoutmanagers Applet Händelser och lyssnare Föreläsning 15.
Föreläsning 13: Swing (GUI), händelser, timer
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Presentationens avskrift:

TNSL04 – IT grundkurs. VT2009. Föreläsning nr 4, måndag 2 mars. kl Snabbrepris av grundbegreppen: Klasser, objekt, konstruktorer, anrop till konstruktorer, parameterlistor, datatyper (primitiva datatyper + klasser), deklarationer, metoder, metodanrop, returvärden, returtyper, tilldelningar, villkorssatser, samlingar, repetitionssatser och tillstånd. Introduktion till grafiska användargränssnitt: Biblioteken java.awt och javax.swing. Klasserna JFrame, JMenu, JMenuItem, JLabel, JPanel, JOptionPane etc. Metoderna actionPerformed och addActionListener

TNSL04 – IT grundkurs. VT2009. I projektet clock-display har vi två klasser: class ClockDisplay och class NumberDisplay. Vi "beställer" ett nytt clock- displayobjekt clockDis1 från "affären" eller "verkstaden" class ClockDisplay. Vad hände egentligen ??

TNSL04 – IT grundkurs. VT2009. Jo, när vi "beställer" clockDis1 från class ClockDisplay anropar vi konstruktorn i den klassen. "Anropet" hade formen: new ClockDisplay() och det skickades till "ordermottagningen" dvs konstruktorn i ClockDisplay : public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); } som utförde detta, och levererade resultaten hours och minutes till ClockDisplay. I klassen ClockDisplay fanns deklarationerna private NumberDisplay hours; private NumberDisplay minutes; private String displayString; Det man kan göra nu i " ClockDisplay -verkstaden" är att "be" objekten hours, minutes och displayString utföra sina inbyggda funktioner, dvs de "publika" metoder som fanns i klasserna NumberDisplay resp. String:

TNSL04 – IT grundkurs. VT2009. clockDis1 beställde från "underleverantören" NumberDisplay två st siffervisarenheter: hours och minutes, som var och en kan visa två siffror. Enheten hours är "fabriksinställd" på att automatiskt slå om till 00 när den kommer till 24 och minutes slår automatiskt om till 00 när den kommer till 60. Efter det att " NumberDisplay -verkstaden" har levererat de två enheterna hours och minutes till clockDis1, har inte ClockDisplay någon mer kontakt med sin underleverantör, utan använder bara de funktioner, som redan finns inbyggda i de levererade komponenterna hours och minutes.

TNSL04 – IT grundkurs. VT2009. Exempel på sådant som class ClockDisplay ber objekten hours och minutes att utföra: minutes.increment( ); if(minutes.getValue( ) == 0) hours.increment( ); displayString = hours.getDisplayValue( ) + ":" + minutes.getDisplayValue( ); Anm. Den sista satsen, tvåraderssatsen ovan, sätter samman, konkatenerar, "timsiffrorna", som returneras från hours.getDisplayValue( ), tecknet kolon och "minutsiffrorna", som returneras från minutes.getDisplayValue( ), till en enda sträng med fem tecken, t.ex. "10:57". Tecknet + mellan två strängobjekt (eller strängvärden) betyder konkatenering.

TNSL04 – IT grundkurs. VT2009. Exempel på sådant som "är inbyggt" i hours och minutes : public String getDisplayValue() { if(value < 10) return "0" + value; else return "" + value; } public void setValue(int replacementValue) { if((replacementValue >= 0) && (replacementValue < limit)) value = replacementValue; } Notera att vi I uttrycken "0" + value och "" + value har en implicit, underförstådd, typomvandling av heltalsvärdet value till "siffra/siffror" dvs till strängvärden.

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: Vi skall nu ge digitalklockan ett ansikte med hjälp av några klasser från de grafiska komponenterna i biblioteken java.awt och javax.swing. awt står för Automatic Windowing Toolkit och består av komponenter som fanns i första generationen av javabibliotek, java. Motsvarigheten i den avsevärt förbättrade andra generationen, javax, heter swing. Ett "normalt windows-fönster" motsvaras av ett objekt från klassen javax.swing.JFrame. En menylist (som den där det ofta står Arkiv, Redigera, … Hjälp är ett objekt från klassen javax.swing.JMenuBar. En meny, som Arkiv-menyn, ett objekt från javax.swing.JMenu, och ett menyalternativ som t ex Öppna, ett objekt från javax.swing.JMenuItem. Vi börjar med att bygga ett fönster, som visar tiden i timmar, minuter och sekunder.

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: import javax.swing.*; import java.awt.*; /** * The NumberDisplay class represents a digital number display that can hold * values from zero to a given limit. The limit can be specified when creating * the display. The values range from zero (inclusive) to limit-1. If used, * for example, for the seconds on a digital clock, the limit would be 60, * resulting in display values from 0 to 59. When incremented, the display * automatically rolls over to zero when reaching the limit. * Michael Kolling and David J. Barnes * Modified by Bengt */ public class NumberDisplay extends JLabel { private int limit; private int value;

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: // Class NumberDisplay continued /** * Constructor for objects of class NumberDisplay. * Set the limit at which the display rolls over. */ public NumberDisplay(int rollOverLimit) { limit = rollOverLimit; value = 0; } /** * Instance methods: */ public int getValue() { return value; } public void setValue(int replacementValue) { if((replacementValue >= 0) && (replacementValue < limit)) { value = replacementValue; }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: // Class NumberDisplay continued 2. /** * More instance methods */ public String getDisplayValue() { String txt=""; if(value < 10) { txt ="0" + value; } else { txt = "" + value; } return txt; } public void increment() { value = (value + 1) % limit; }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka (blått för GUI, rött för "tick"): import java.awt.*; import javax.swing.*; /** * The ClockDisplay class implements an extended digital * clock display with a graphical and interactive user * interface. * * Modifiewd by Bengt */ public class ClockDisplay extends JPanel implements Runnable { public Thread activity = new Thread(this); private Container contentPane; private NumberDisplay hours; private NumberDisplay minutes; private NumberDisplay seconds;

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: // Class ClockDisplay continued 1. /** * Constructor for ClockDisplay objects. This constructor * creates a new clock set at 00:00. */ public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); seconds = new NumberDisplay(60); hours.setForeground(Color.RED); minutes.setForeground(Color.RED); seconds.setForeground(Color.RED); hours.setFont(new Font("Courier", Font.BOLD, 48)); minutes.setFont(new Font("Courier", Font.BOLD, 48)); seconds.setFont(new Font("Courier", Font.BOLD, 48)); JLabel timeString = new JLabel("Time: "); JLabel kolon1 = new JLabel(":"); JLabel kolon2 = new JLabel(":");

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: // Class ClockDisplay continued 2.Constructor definition continued timeString.setFont(new Font("Courier", Font.BOLD, 48)); kolon1.setFont(new Font("Courier", Font.BOLD, 48)); kolon2.setFont(new Font("Courier", Font.BOLD, 48)); hours.setVisible(true); minutes.setVisible(true); seconds.setVisible(true); timeString.setVisible(true); kolon1.setVisible(true); kolon2.setVisible(true); this.setLayout(new GridLayout(1,6)); add(timeString); add(hours); add(kolon1); add(minutes); add(kolon2); add(seconds); updateDisplay(); setVisible(true); activity.start(); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: // Class ClockDisplay continued 3 /** * Detta trådobjekt körs parallelt med andra * trådar. */ public void run() { while(!Thread.interrupted()) { try { Thread.sleep(1000); } catch(InterruptedException e){break;} timeTick(); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: // Class ClockDisplay continued 4 /** * This method should get called once every minute - it makes * the clock display go one minute forward. */ public void timeTick() { seconds.increment(); if(seconds.getValue() == 0) { // it just rolled over! minutes.increment(); if(minutes.getValue() == 0) { // it just … hours.increment(); } updateDisplay(); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: // Class ClockDisplay continued 5 /** * Set the time of the display to the specified hour and minute. */ public void setTime(int hour, int minute, int second) { hours.setValue(hour); minutes.setValue(minute); seconds.setValue(second); updateDisplay(); } /** * Update the string that represents the display. */ public void updateDisplay() { hours.setText(hours.getDisplayValue()); minutes.setText(minutes.getDisplayValue()); seconds.setText(seconds.getDisplayValue()); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: (blått för GUI, rött för "tick", grönt för input): import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * class Digitalklocka ärver en mängd funktionalitet från klassen * JFrame i * biblioteket javax.swing. JFrame i sin tur ärver en stor del av sin * funktionalitet från: Component, Container, Window, och Frame * Här visas i detta JFrame JPanels och JLabels. Grundfunktioner * hämtade från Kapitel 3: NumeberDispaly och ClockDisplay Bengt Lennartsson */ public class DigitalklockaPlus extends JFrame implements ActionListener { private ClockDisplay klockan;

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: //class DigitalklockaPlus, continued public DigitalklockaPlus( ) { this.setTitle("Digitalklocka"); this.setSize(500, 300); klockan = new ClockDisplay(); klockan.setBackground(Color.YELLOW); Container contentPane = this.getContentPane(); makeMenuBar(); contentPane.add(klockan); this.pack(); this.setVisible(true); } // Klassmetoder: public static void stopAllObjects() { System.exit(0); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: //class DigitalklockaPlus, continued public void stopThisObject() { klockan.activity.interrupt(); this.dispose(); } public void setClock(int tim, int min, int sek) { klockan.setTime(tim, min, sek); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: //class DigitalklockaPlus, continued private void makeMenuBar() { JMenuBar menyListen = new JMenuBar(); this.setJMenuBar(menyListen); JMenu ställMenyn = new JMenu("StällTid"); menyListen.add(ställMenyn); JMenuItem timmar = new JMenuItem("Timmar"); timmar.addActionListener(this); ställMenyn.add(timmar); JMenuItem minuter = new JMenuItem("Minuter"); minuter.addActionListener(this); ställMenyn.add(minuter); JMenuItem sekunder = new JMenuItem("Sekunder"); sekunder.addActionListener(this); ställMenyn.add(sekunder); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: //class DigitalklockaPlus, continued public void actionPerformed(ActionEvent event) { int nyTimmar = -1; int nyMinuter = -1; int nySekunder = -1; if( event.getActionCommand().equals("Timmar") ) nyTimmar = Integer.parseInt(JOptionPane.showInputDialog("Ange timmar")); else if( event.getActionCommand().equals("Minuter") ) nyMinuter = Integer.parseInt( JOptionPane.showInputDialog("Ange minuter") ); else if( event.getActionCommand().equals("Sekunder") ) nySekunder = Integer.parseInt( JOptionPane.showInputDialog("Ange sekunder") ); setClock(nyTimmar, nyMinuter, nySekunder); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: /** När programmet körs utan användning * av BlueJ behövs en metod main: */ public static void main(String [] args) { new DigitalklockaPlus(); }

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: Digitalklockan som ett JFrame objekt, som innehåller ett JPanel objekt som i sin tur innehåller sex JLabel objekt: Fönstret är interaktivt. Om man i Menyn StällTid väljer minuter, kan man i en dialogruta mata in nytt värde:

TNSL04 – IT grundkurs. VT2009. En lätt "upphottad" digitalklocka: Vi går tillbaka till: public class ClockDisplay extends JPanel implements Runnable { public Thread activity = new Thread(this); Man skulle vilja att objekt som skapas från klassen ClockDisplay hade förmåga att bete sig båda som JPanelobjekt och som Threadobjekt. I java är inte multipel ärvning tillåten, dvs vi får inte skriva: public class ClockDisplay extends JPanel extends Runnable { Däremot kan vi låta ClockDisplay ärva från en klass, JPanel, så att ClockDispaly objekt kan det som JPanel objekt kan. Sedan skapar vi ett annat objekt activity som är ett Tread objekt och vi skickar med en referens, this, till vårt JPanel / ClockDisplay objekt, när vi ber klassen Thread s konstruktor skapa objektet activity. Därmed får tidshanteringen i Thread en referens till vårt objekt så att Thread kan väcka detta, när det sovit en sekund.

TNSL04 – IT grundkurs. VT2009. Vi tar nu en titt på projektet auction i kapitel 4. Pilarna i klassdia- grammet visar att klassen Auction känner till begreppen Lot, Bid och Person, men när man tittar på koden för class Auction, ser man, att enda sättet att därifrån komma åt några sådana objekt, är via ArrayList -objektet lots.

TNSL04 – IT grundkurs. VT2009. Lot- objekt Bid- objekt Person- objekt lots nextLotNumber n-1 ArrayList-objekt String- objekt highestBid description number String- objekt highestBid description number name bidder value "Anna" "cykel" 19 n name "Johan" highestBid description number 1 bidder value "soffa"

TNSL04 – IT grundkurs. VT2009. BlueJ-projektet Auction: Via ArrayList -objektet lots kan man i klassen Auction komma åt de Lot -objekt, som man lagt in i systemet med metoden enterLot(String desc). "Kommer man åt" ett Lot -objekt, dvs har man fått tillgång till en referens till det, kan man sedan använda metoderna public String getDescription() public int getNumber() public Bid getHighestBid() i class Lot, för att få tillgång till beskrivningsträngen, numret, resp. det budobjekt som representerar högsta budet på detta Lot -objekt. Man kan också be Lot -objekt att få metoderna public String toString() public boolean bidFor(Bid bid) utförda. Se övningsexempel på nästa bild,

TNSL04 – IT grundkurs. VT2009. BlueJ-projektet Auction: Om man i klassen Auction vill skriva ut namnet på den budgivare (om det finns någon), som givit ett bud på lot-objekt nr 19, hur gör man då? Ledtråd: Man börjar med att tänka!

TNSL04 – IT grundkurs. VT2009. Om tolkning av metodanropskedjor: Om man någonstans i ett (java-)program har en kodrad enligt: a.b().c().d().e(x, y); hur bär man sig åt för att få fram vad den betyder?

TNSL04 – IT grundkurs. VT2009. Om tolkning av metodanropskedjor: En metodanropskedja enligt a.b().c().d().e(x, y); måste tolkas från vänster till höger. Man ber objektet a utföra metoden b, och man kan inte veta vad metoden b innebär, förrän man listat ut från vilken klass objektet a är skapat. Detta listar man ut genom att titta på deklarationen av objektet a (normalt i början av klassen eller möjligen metoden där den aktuella programraden finns). Deklarationen har i princip formen: private AKlassen a... och den säger då att namnet på klassen som skapat objektet a är det namn som står på den plats ordet AKlassen ovan står. Man får då gå till koden för den klassen och leta upp metoden med namnet b. Man tittar efter vilken typ av objekt metoden b returnerar, dvs namnet på den klass som skapar returobjektet, och i denna klass letar man upp metoden med namnet c osv. Det finns inget annat sätt än att tolka från vänster till höger. Att en metod t.ex. har namnet e säger ingenting om vad den gör, om jag inte vet i vilken klass just den aktuella metoden är definierad.