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

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

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

Algoritmer. Två gränssnitt

Tentamen i Objektorienterad programmering

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

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

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

Tentamen i Objektorienterad programmering E

Föreläsning 3-4 Innehåll

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Föreläsning 9-10 Innehåll

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

Objektorienterad Programmering (TDDC77)

Typkonvertering. Java versus C

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning REPETITION & EXTENTA

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

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

Instuderingsfrågor, del D

Programmering för språkteknologer II, HT2011. Rum

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Föreläsning 2, vecka 8: Repetition

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

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

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

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

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

DAT043 Objektorienterad Programmering

Laboration 24 Databasen MySQL och java

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

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

Tentamen, EDAA10 Programmering i Java

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

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

OOP Objekt-orienterad programmering

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

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

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

Tentamen OOP

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

Lösningsförslag övning 2.

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.

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

Föreläsning 5-6 Innehåll

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

JAVAUTVECKLING LEKTION 8

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.

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Lösningsförslag tentamen FYTA11 Java

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Laboration A Objektsamlingar

Att öva på och förstå ett program med flera samverkande klasser.

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Tentamen , Grundläggande programmering i Java

Tentamen. Lösningsförslag

LÖSNINGSFÖRSLAG TENTAMEN

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

JAVAUTVECKLING LEKTION 4

Lösningar för tenta 3 DAT043,

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Saker du ska kunna Föreläsning 13 & 14

TDDC77 Objektorienterad Programmering

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

Lösningsförslag till tentamen

TENTAMEN OOP

Tentamen, EDAA10 Programmering i Java

Tentamen i Objektorienterad programmering

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

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

Arrayer (fält)

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

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

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN OOP

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

F4. programmeringsteknik och Matlab

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen, EDAA20/EDA501 Programmering

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen, EDA501 Programmering M L TM W K V

Transkript:

Telefonboken Objektorienterad programmering Telefonboken igen, en bättre version Telefonboken, igen. Tvådimensionella fält. Exempel: femtonspelet. Modellklassen. Ett textbaserat program. Ett grafiskt program. Föreläsning 4 Tre klasser Vi bygger upp programmet av tre klasser: Entry, SimplePhoneBook och Main Klassen Entry Instanser av Entry innehåller två strängar, ett namn och ett telefonnummer. Förutom konstrueraren finns två metoder: public g getname() public g getnumber() Klassen SimplePhoneBook Själva telefonboken; innehåller ett fält av Entry-objekt. Metoder är public void put(g name, g phonenr) public g get(g name) Endast en instans skapas. Klassen Main Klassen innehåller main, som sköter dialogen med användaren. Telefonboken En jämförelse public class SimplePhoneBook { private Entry[] book; private int count; public SimplePhoneBook(int size) { book = new Entry[size]; count = 0; public void put(g name, g nr) { public g get(g name) { for(int i=0; i<count; i++) if (name.equals(book[i].getname())) return book[i].getnumber(); return null; public static void main(g [] args) { Entry[] book = new Entry[100]; int count = 0; Scanner in = new Scanner(System.in); while(in.hasnext()) { g cmd = in.next(); if (cmd.equals("quit")) System.exit(0); else if (cmd.equals("put")) { g name = in.next(); g nr = in.next(); else if (cmd.equals("get")) { g name = in.next(); for (int i=0; i<count;i++) if (name.equals(book[i].getname())) { System.out.println("Number is " + book[i].getnumber()); else System.out.println("Unknown command"); Telefonboken Klassen SimplePhoneBook public class SimplePhoneBook { private Entry[] book; private int count; public SimplePhoneBook(int size) { book = new Entry[size]; count = 0; public void put(g name, g nr) { public g get(g name) { for(int i=0; i<count; i++) if (name.equals(book[i].getname())) return book[i].getnumber(); return null; public static voi Entry[] book int count = 0 Scanner in = while(in.hasn g cm if (cmd.e Syste else if ( book[ count else if ( for ( i else Syste

Telefonboken Telefonboken, återstående problem Tvådimensionella fält Problemet Om samma namn sätts in igen med nytt nummer, placeras denna Entry sist och det tidigare finns kvar. Sökning ger bara det först insatta numret. Förslag till lösning Ny insättning med samma namn ska ersätta det gamla numret. I metoden put måste vi därför börja med att se om namnet finns. En sådan version (med en privat hjälpmetod getindex) finns i lect4code.zip. Matriser i Java En matris representeras i Java som ett fält av rader, där varje rad är ett fält av tal. Till skillnad från i matten indexerar vi alltid med början från 0. 3 5 0 7 0 7 4 6 2 Raden a[1]. Elementet a[2][1] 2 4 1 a har typen int[][]. Rita en bild över hur det ser ut i minnet! Att skapa matriser Att iterera över en matris Exempel Matrisen på föregående bild kan deklareras och skapas på ett av följande två sätt: Med många tilldelningar: int[][] a = new int[3][4]; a[0][0] = 3; a[0][1] = 7;... alla element tilldelas... a[2][3] = 1; Med initieringsuttryck: int[][] a = {{3,7,4,2, {5,0,6,4, {0,7,2,1; Nollställning av alla element for (int i=0; i< a.length; i++) { for (int j=0; j < a[0].length; j++) { a[i][j] = 0; En sådan nästad for-sats är mycket vanlig när man arbetar med matriser. Exempel Definiera en funktion som beräknar summan av alla element i en matris.

Mera linjär algebra Exempel: Femtonspelet Klassen LinearAlgebra Förra veckan definierade vi två funktioner double scalarproduct(double[] a, double[] b); double[] vectorsum(double[] a, double[] b); Lägg till en funktion som multiplicerar en matris med en (kolonn-)vektor. Fysiskt spel Grafisk variant i Java Textbaserad variant i Java lect4code> java TextMain 1 54 d36b Position of piece to move: 1 1 1354 d 6b Position of piece to move: 1 2 1354 d6 b Position of piece to move: En första analys Spelets tillstånd Läget (tillståndet) i spelet kan representeras med en 4x4-matris av heltal, som innehåller talen 0 15 (0 representerar hålet). Ett drag innebär att talet 0 i matrisen byter plats med en granne (dvs något av talen över, under, till vänster eller till höger). Den textbaserade main-rutinen Vi behöver göra följande: Initiera spelmatrisen slumpmässigt. Om och om igen: - Skriv ut matrisen på lämplig form. - Läs in användarens drag. - Uppdatera matrisen med detta drag. Skiss till tänkbar lösning public class Fifteen { public static void main(g[] args) { int[][] state = new int[4][4]; for (int r=0; r<4; r++) for (int c=0; c<4; c++) state[r][c] = 4*r+c+1; state[3][3] = 0; // Blanda slumpmässigt while(true) { // Skriv ut tillståndet // Läs in användarens drag // Om draget är tillåtet, uppdatera tillståndet

Att läsa in användarens drag Att skriva ut tillståndet... Scanner in = new Scanner(System.in); while(true) { // Skriv ut tillståndet System.out.print("Position of piece to move: "); int row = in.nextint(); int col = in.nextint(); if // (row,col) granne med hålet // byt plats på hålet och talet i (row,col) else System.out.println("Cannot move piece!"); for (int r=0; r<4; r++) { for (int c=0; c<4; c++) { int n = state[r][c]; if (n==0) System.out.print(" "); else if (n<=9) System.out.print(n); else // Om n=10, skriv "a", om n=11, skriv "b",... System.out.println(); Vad återstår? Delar som hittills bara är kommentarer Blanda slumpmässigt. Avgör om användarens valda bit är granne med hålet. Byt plats på den valda biten och hålet. Utskrift av bitarna 10 15. Förbättring: en objektorienterad design Vi lagrar matrisen state som tillstånd i en modellklass FifteenModel, som erbjuder endast följande metoder, förutom konstrueraren: public void shuffle(); public boolean trymovepieceat(int row, int col); public int getstate(int row, int col); Textbaserat vs grafiskt program Det textbaserade programmet Programmet består av två klasser, FifteenModel och TextMain. Den senare innehåller main-rutinen och en hjälprutin för utskrift. Det grafiska programmet Vi kan idag inte förstå detta program fullständigt, men titta på det; strukturen återkommer gång på gång! Programmet består av fyra klasser: Samma modellklass FifteenModel. En grafisk klass FifteenPanel, för att rita upp spelet på skärmen. En styrklass FifteenListener, som beskriver hur programmet ska reagera på användarens mustryck. Klassen GraphicsMain, som innehåller main-rutinen.

De två main-rutinerna Det textbaserade programmet I main skapas och blandas ett modellobjekt. Sedan startar main en loop där man i varje varv skriver ut modellen, begär en position av användaren, samt uppdaterar modellen om positionen är OK. main (och därmed programmet) fortsätter tills det avbryts av användaren (med Ctrl-C). Det grafiska programmet I main skapas och blandas ett modellobjekt. Dessutom skapas ett panelobjekt och ett grafiskt fönster (av klassen JFrame). I panelobjektets konstruerare skapas ett styrobjekt. Panelen placeras i fönstret som görs synligt på skärmen. Därefter tar main slut men inte programmet! Det väntar för evigt på händelser (användarens musklick). Härnäst Labb 3 I labb 3 ska vi betrakta ett program som implementerar Game of Life, en simulering av en population celler som följer enkla regler. Programmet är grafiskt och händelsestyrt, består av fyra klasser, varav en modellklass och det är den ni ska skriva. Titta gärna på de övriga klasserna, främst för att förstå modellklassens roll i programmet. Ni behöver inte förstå dessa klasser i detalj! Nästa veckas övning Vi övar på att definiera enkla klasser som mallar. Slutkommentar Vi befinner oss nu på förvirringsmaximum de flesta nya begrepp har introducerats men inte hunnit smältas. En stor del av resterande tid används för konsolidering.