Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Relevanta dokument
Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

OOP Objekt-orienterad programmering

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

Datastrukturer. föreläsning 3. Stacks 1

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

OOP Tentamen

Classes och Interfaces, Objects och References, Initialization

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

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 13 Innehåll

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

OOP Objekt-orienterad programmering

Föreläsning 4 Innehåll

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

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

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

TENTAMEN OOP

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Kopiering av objekt i Java

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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Föreläsning 3. Stack

Föreläsning 12. Länkade listor

TDDC76 - Programmering och Datastrukturer

Föreläsning 2 Datastrukturer (DAT037)

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

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Länkade strukturer, parametriserade typer och undantag

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

TENTAMEN I DATAVETENSKAP

Föreläsning 3. Stack

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Länkade strukturer. (del 2)

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Arrayer. results

Tentamen i Objektorienterad modellering och design

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen OOP

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Laboration 1: Figurer i hierarki

LÖSNINGSFÖRSLAG

Kurskod D0010E Datum Skrivtid 5tim

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Polymorfi. Objektorienterad och komponentbaserad programmering

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Objektorienterad programmering i Java

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Föreläsning REPETITION & EXTENTA

Föreläsning Datastrukturer (DAT036)

Exempel på användning av arv: Geometriska figurer

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Repetition av OOP- och Javabegrepp

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

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

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Repetition av OOP- och Javabegrepp

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

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

OOMPA 2D1359 Föreläsning 8

F4. programmeringsteknik och Matlab

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

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Lösningar för tenta 3 DAT043,

Laboration 13, Arrayer och objekt

Transkript:

Pedher Johansson Institutionen för datavetenskap LÖSNINGSFÖRSLAG Lösningsförslag Tentamen Programmeringsmetodik, KV: Java och OOP 17 januari 2002 Uppgift 1 (20 p) Teoriuppgifter Resultat och uppgifter finns på webben. Uppgift 2 (15 p) Java Kompilerad Java-kod kan exekveras på alla maskinplattformar, förutsatt att det finns en korrekt JVM (Java Virtual Machine). Javamaskinen tar objektkod och översätter den till maskinspecifika instruktioner, därför kan programmet köras. Java kod (.java) Kompilator (javac) Objektkod (.class) Javamaskin (java) Dator AB CADRE VRDAF FSHSJ 01 110010 011001 001011 VM AMD Uppgift 3 (20 + 15 + 15 p) Arv a) Figure Oval Triangle Rectangle Circle Square Det är nog att föredra att cirkeln ärver ovalen än tvärt om, då cirkeln är ett specialfall av ovalen. Cirkeln är en oval (om än ett specialfall), men inte tvärt om. Figure är abstrakt. 1

b) Figure Oval # int r1; # int r2; Triangle # int b; # int h; Rectangle # int w; # int h; Circle Square Cirkelns uppgift blir att se till att r1 och r2 alltid förblir lika, smma med Kvadraten när det gäller w och b. c) Med omdefeniering menas att en klass skriver en egen version av en ärvd metod. Detta omdefenierar (skymmer) den tidigare metoden. I exemplet ovan skulle t. ex. Figure implementera en abstrakt metod area() som därefter varje klass som ärver Figure måste implementera en egen version av som beräknar arean hos den specifika figuren. Figure + area(); Oval # int r1; # int r2; + area() { Triangle # int b; # int h; + area() { Rectangle # int w; # int h; + area() { Circle Square Uppgift 4 (20 + 20 + 10p) Sortering a) 1 7 4 3 5 2 6 Ursprunglig vektor 1 4 3 5 2 6 7 1 3 4 2 5 6 7 1 3 2 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 Varv 1 byten: 7 4, 7 3, 7 5, 7 2, 7 6 Varv 2 byten: 4 3, 5 2 Varv 3 byten: 4 2 Varv 4 byten: 3 2 Varv 5 inga byten (färdig) 2(8)

b) 1 7 4 3 5 2 6 Orginalvektor 1 7 3 4 2 5 6 Resultat 1:a sorteringen 1 3 4 7 2 5 6 Resultat 2:a sorteringen 1 2 3 4 5 6 7 Resultat 3:e sorteringen c) Merge sort har lägre komplexitet, O(n log(n)), jämfört med bubble sort, O(n 2 ), vilket gör att mergesort kommer att gå fortast när datamängden ökas och datat är osorterat. Beroende på hur bubble sort är implementerad kan den dock avbryta i förtid, t. ex. när inga fler byten gjorts (som i exemplet ovan), då kommer bubble sort att kunna gå fortare om enbart några byten behöver göras. Uppgift 5 (70 p) Klassdesign I klassdesignen premieras lite tankearbete och god inkapsling av data med få beroenden. Det man bör ha löst är kommunikationen med banken, ansvar för kontoinformation och uppritning, vem som talar om för bankomaten att återlämna kort och ge ut pengar m.m. Uppgift 6 (45 + 10 p) Implementation a) /* Class: TrashCan * Created: Thu Jan 17 12:01:45 2002 * Author: Pedher Johansson */ import java.util.*; public class TrashCan { private Vector bin; public TrashCan() { bin = new Vector(); public boolean isempty() { return bin.size() == 0; 3(8)

public void addtrash(object trash) { bin.addelement(trash); public void emptycan() { bin.removeallelements(); public Object restorelast() { Object o = bin.lastelement(); bin.removeelementat(bin.size()-1); return o; public Vector restoreall() { Vector v = (Vector)bin.clone(); emptycan(); return v; // End TrashCan b) Objekt som allokerats av programmet som inte har någon referens som refererar till objektet, kan inte bidra till programmet längre. Vid jämna mellanrum kollar JVM efter sådana objekt. De funna objekten kommer att avallokeras. Innan objektet avavllokeras anropas metoden finalize hos objektet. Man kan som programmerare inte styra när ett visst objekt skall avallokeras. Uppgift 7 (10 + 30 + 35 + 15 + 10 + 10 p) Del I ADT a) SimpleList måste implementera samtliga metoder specificerade i gränssnittet. Metodkroppen kan dock vara tom. b) /* Class: Stack * Created: Thu Jan 17 13:05:32 2002 * Author: Pedher Johansson */ public class Stack { List list; public Stack() { list = new SimpleList(); 4(8)

public boolean isempty() { return list.isempty(); public int size() { return list.size(); public void push(object element) { list.insert(element, list.size()+1); public Object front() { Object o = null; if (!isempty()) o = list.inspect(list.size()); return o; public Object pop() { Object o = null; if (!isempty()) { list.inspect(list.size()); list.remove(size()); return o; // End Stack c) import java.text.parseexception;... public void parseparentheses(string s) throws ParseException { Stack stack = new Stack(); for (int i = 0; i < s.length(); i++) { char c = s.charat(i); switch(c) { case ( : stack.push(new Character( ( )); case ) : if (stack.isempty()) throw new ParseException("To many )",i); stack.pop(); 5(8)

default: if (!stack.isempty()) throw new ParseException("Missing )", s.length());... Om ni inte använt objekt av typer Character ger detta inte avdrag. Fördelen att använda en komplett stack i denna uppgift är kanske inte så stor. Den typ av stack som behövs när vi enbart har en typ av värden på stacken kan enkelt lösas med en variabel, vars värde får öka och minska. Denna lösning med en stack kan dock mycket enkelt utökas att också gälla [ ] och { för se att de är nästlade på ett korrekt sätt. public void parseparentheses(string s) throws ParseException { Stack stack = new Stack(); for (int i = 0; i < s.length(); i++) { char c = s.charat(i); switch(c) { case [ case { case ( : stack.push(new Character(c)); case ) : if (stack.isempty()) throw new ParseException("To many )",i); Character c = (Character)stack.pop(); if (c.charvalue()!= ( ) throw new ParseException("Missing (",i); case : if (stack.isempty()) throw new ParseException("To many ",i); Character c = (Character)stack.pop(); if (c.charvalue()!= { ) throw new ParseException("Missing {",i); case ] : if (stack.isempty()) throw new ParseException("To many ]",i); Character c = (Character)stack.pop(); if (c.charvalue()!= [ ) throw new ParseException("Missing [",i); default: 6(8)

if (!stack.isempty()) throw new ParseException("Missing parantheses", s.length()); Del II Algoritmanalys d) metod enkellänkad vektorbaserad isempty O(1) O(1) size O(1) O(1) push O(n) O(1) front O(n) O(1) pop O(n) O(1) e) Enkellänkad lista Fördelar Listan tar enbart upp minne efter hur många element som finns lagrade. Det kan vara relativt billigt att lägga till och ta bort element. Nackdelar Det är kostsamt att leta element i listan, speciellt element som ligger före en aktuell position. Vektorbaserad lista f) Fördelar Det går snabbt att finna element på en viss position i listan. Nackdelar Det kan vara kostsamt att lägga till och ta bort element i början av listan. Listan är begränsad i storlek och tar alltid upp en viss minnesmängd. Stacken som den är implementerad fungerar dåligt med en enkellänkad lista enligt figuren. Detta beror på att vi inte utnyttjar att det är billigt att jobba i listans främre del och dyrt att finna element i slutet. Stacken som den är implementerad är däremot optimerad för en lista implementerad som en vektor. För att bättre utnyttja en enkellänkad struktur, bör vi stacken i stället jobba med listans första position. 7(8)

Uppgift 8 (30 p) Konstruktorer och överlagring /* Class: BlackBox * Created: Wed Jan 16 13:45:37 2002 * Author: Pedher Johansson */ public class BlackBox { private int a; private double b; public BlackBox(int a) { this(a, 1.0); public BlackBox(int a, double b) { this.a = a; this.b = b; public String tostring() { return "("+a+","+b+")"; // End BlackBox 8(8)