Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Relevanta dokument
Typkonvertering. Java versus C

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Tentamen OOP

Input. Programmering. Andra källor

Algoritmer. Två gränssnitt

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Föreläsning 3-4 Innehåll

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

OOP Objekt-orienterad programmering

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

Föreläsning 8: Exempel och problemlösning

Föreläsning REPETITION & EXTENTA

Föreläsning 2, vecka 8: Repetition

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Föreläsning 9-10 Innehåll

Föreläsning 6: Metoder och fält (arrays)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

DAT043 Objektorienterad Programmering

Att skriva till och läsa från terminalfönstret

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

OOP Objekt-orienterad programmering

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Objektorienterad programmering i Java

SMD 134 Objektorienterad programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Tentamen , Introduktion till Java, dtaa98, dtea53

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

TENTAMEN OOP

Föreläsning 5-6 Innehåll

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsnings 9 - Exceptions, I/O

OOP Objekt-orienterad programmering

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Chapter 4: Writing Classes/ Att skriva egna klasser.

F4. programmeringsteknik och Matlab

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Skillnader mellan Python och Java

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

[] Arrayer = Indexerad variabel

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

JAVA Mer om klasser och objektorientering

System.out.println("Jaså du har "+ antaldollar + " stycken.");

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Läsanvisning: Dessa OH bilder samt kap 1-3

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

JAVAUTVECKLING LEKTION 7

TDDC77 Objektorienterad Programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

"if"-satsen. Inledande programmering med C# (1DV402)

Hur ser ett Java-program ut?

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Föreläsning 2 Datastrukturer (DAT037)

LÖSNINGSFÖRSLAG TENTAMEN

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

TENTAMEN OOP

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Grundläggande programmering med C# 7,5 högskolepoäng

Objektorienterad Programmering (TDDC77)

Föreläsning 1 & 2 INTRODUKTION

Dugga i Grundläggande programmering STS, åk

Transkript:

orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[] v1 = new double[100]; double[] v2 = new double[100];... kod som fyller v1 och v2... double[] w = new double[100]; w = LinearAlgebra.vectorSum(v1,v2); Rita en bild av minnesförbrukningen då denna kod exekveras. Mer om fält: att uppdatera ett parameterfält Vad skrivs ut när programmet körs? public class Reset { Kontrast: Parametrar av primitiv typ Vad skrivs ut när programmet körs? public class Swap { public static void reset(int[] a) { for (int i=0; i< a.length; i++) a[i] = 0; public static void main(string[] args) { int[] x = {3, 7, 3, 6; reset(x); for (int i=0; i<x.length; i++) System.out.print(x[i] + ", "); System.out.println(); public static void swap(int x, int y) { int tmp = x; x = y; y = tmp; public static void main(string[] args) { int a = 5; int b = 3; swap(a,b); System.out.println("a=" + a + ", b=" + b);

Fält är objekt Ett fält är ett objekt. i Java karakteriseras av att variabler av objekttyp innehåller en referens (eller pekare) till objektet, och inte objektet själv. Värden av primitiva typer är inte objekt; variabler innehåller själva värdet. En variabel av referenstyp kan innehålla det speciella värdet null. Ett objekt som ingen variabel längre pekar på återvinns av skräpsamlaren. Andra objekt Den viktigaste användningen av klasser är inte som funktionsbibliotek, utan som mallar att skapa objekt från. Klasser som mallar; ett första exempel public class Vector2 { private double x; private double y; public Vector2(double x0, double y0) { x = x0; y = y0; public double getx() {return x; public double gety() {return y; public double length() { return Math.sqrt(x*x + y*y); Klasser som mallar; att skapa objekt Anatomin hos en klass som mall Vi kan skapa objekt av typen Vector2: Vector2 v1 = new Vector2(3,5); Vector2 v2 = new Vector2(-1.5,7); double v1length = v1.length(); Varje objekt har sina egna x och y. Värdena på x och y ges i konstrueraren. Metoderna length, getx och gety hör till objektet, inte till klassen (de är inte static). v1 v2 3 5 1.5 7

Strängar är objekt Paketet java.lang String är en klass i paketet java.lang. Klasser i detta paket är tillgängliga utan import. Här finns förutom String också bl a Integer, Math och System. Klassen String String s = "string example"; skapar ett nytt objekt av klassen String; s innehåller en referens till detta objekt. Exempel på metoder: Anrop Resultat s.length() 14 s.charat(8) x s.substring(7,11) "exam" s.endswith("ring") false Standard input och output Varje Java-program har tillgång till följande objekt: System.out, av klassen PrintStream. Här finns bland annat metoderna print och println. System.in, av klassen InputStream. Denna är inte lämpad för direkt användning; normalt skapar man en Scanner för att läsa indata. För C-programmerare: printf Klassen PrintStream innehåller också metoden printf. (överkurs) printf tar som argument först en formatsträng och sedan ett godtyckligt antal argument som ska skrivas ut. Kan användas för bättre kontroll över formattering, t ex i tabeller. Exempel: System.out.printf("%6d %8.4f\n",i,hSum(i)); Klassen java.util.scanner Exempel på användning av Scanner kan skapas på olika sätt Syfte Från en InputStream: Scanner in = new Scanner(System.in); Från en fil: Scanner in = new Scanner(new File "data.txt"); Från en sträng: Scanner in = new Scanner("1.57 3.2356-1.2"); Enklaste användning: Indata delas upp i ord åtskilda av blanktecken och radbyten. Man kan testa om fler ord finns, om nästa ord kan ses som int, double, osv och i så fall läsa och konvertera ordet. import java.util.scanner; public class Statistics { public static double average(scanner in) { double sum = 0; int count = 0; while (in.hasnextdouble()) { sum = sum + in.nextdouble(); count++; return sum/count;

En användning av Statistics import java.util.scanner; public class StatisticsClient { public static void main(string[] args) { Scanner in = new Scanner(System.in); double avg = Statistics.average(in); System.out.println("Medelvärdet är " + avg); Två sätt att köra programmet java StatisticsClient Användaren skriver in talen; avsluta med Ctrl-D. java StatisticsClient < data.txt Programmet läser tal från filen data.txt. Telefonboken Exempel: Telefonboken Uppgiften Vi ska skriva ett program som kan användas på följande sätt: lect3code> java Main > put kalle 123456 > put lisa 654321 > get kalle Number is 123456 > get eva eva not found > put kalle 111111 > get kalle Number is 111111 > quit Observera Programmet är värdelöst: Vi sparar inte data när programmet avslutas, så nästa gång vi kör programmet måste vi skriva in alla kontakter igen. Vi fixar detta i föreläsning 9. Design Hur kan vi representera telefonboken i vårt program? Detta är en bättre fråga än att börja med att fundera på hur main ska skrivas. Telefonboken Programmets uppbyggnad Två klasser Vi bygger upp programmet av två klasser: Entry och PhoneBookProg. Klassen Entry Instanser av Entry innehåller två strängar, ett namn och ett telefonnummer. Förutom konstrueraren finns två metoder: public String getname() public String getnumber() Klassen PhoneBookProg Här finns main-rutinen, som deklarerar ett fält Entry[] book; där alla data lagras, samt en loop som om och om igen läser ett kommando samt utför detta. Vi definierar här också en hjälprutin prompt. Nästa gång ska vi göra om programmet så det får en bättre struktur. Likhetstest För primitiva typer Man testar på likhet med operatorn ==: int n;... if (n==0) handlezerocase(); else handlenonzerocase(); För heltal, tecken och booleska värden fungerar detta som man förväntar sig; för double kan avrundningsfel ställa till det. För referenstyper Test med == betyder här att testa om två variabler pekar på samma objekt. Normalt ska man i stället använda metoden equals: String cmd;... if (cmd.equals("quit")) System.exit(0); För egna klassser måste man definiera metoden equals.

Klassen Song, början Att använda färdiga klasser public class Song { private byte[] data; private int next; public Song(int duration) { data = new byte[2*duration* SoundDevice.SAMPLING_RATE]; next = 0; public void play(sounddevice device) { SourceDataLine line = device.getline(); line.write(data, 0, next); line.drain(); I labb 2 används klasserna Song och SoundDevice. Ni laddar ner dem och kan titta på dem men det är viktigt att lära sig att kunna använda klasser som man inte vet hur de är uppbyggda genom att studera deras API (Application Programmer s Interface). Vi tittar på API erna för dessa två klasser. Ni ska senare lära er hur man genererar API-dokumentation för klasser som ni själva skriver. Klassen SoundDevice, del av import javax.sound.sampled.*; public class SoundDevice { public static final int SAMPLING_RATE = 44100; private SourceDataLine line; private AudioFormat format = new AudioFormat(SAMPLING_RATE, 16, 1, true, false); Paket Standardbibliotekets klasser är indelade i paket. Klassen AudioFormat ingår i paketet javax.sound.sampled Använder vi denna klass måste vi först i vår fil skriva import javax.sound.sampled.audioformat; Utan detta hittar inte kompilatorn klassen. Använder man flera klasser från paketet kan man i stället skriva import javax.sound.sampled.*;... delar överhoppas... AudioFormat getformat() {return format;

Konstanter Härnäst I SoundDevice fanns också deklarationen public static final int SAMPLING_RATE = 44100; Deklarationer som är public static final används för att definiera konstanter. Det är bättre att införa och använda namnet SAMPLING_RATE än att skriva 44100 på flera ställen i koden. Namn på konstanter skrivs konventionellt med versaler (stora bokstäver). Olika typer av variabler Lokala variabler i funktioner/subrutiner/metoder. Tillståndsvariabler i objekt (x och y i Vector2). Konstanter ( public static final ). Gör färdig labb 2 Ska redovisas senast vid labbtiden på onsdag. Gör övningar På torsdagens övning jobbar vi med funktioner som använder fält. Tänk på objekt Titta på dagens exempel, ladda ner dem och experimentera!