LÖSNINGSFÖRSLAG

Relevanta dokument
F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

DAT043 Objektorienterad Programmering

Föreläsning 3. Stack

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

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

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Förra föreläsningen. Dagens agenda. Command Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

OOP Objekt-orienterad programmering

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Polymorfi. Objektorienterad och komponentbaserad programmering

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Generisk klass med typparameter Inre klass - ListIterator

Föreläsningsbilder EDAF10/EDA061 Ht 2015 HT1 2015, FÖRELÄSNING 3

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

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Föreläsning 4 Innehåll

DAT043 - föreläsning 8

Objektorienterad Programmering (TDDC77)

Föreläsning 2. Länkad lista och iterator

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Länkade strukturer. (del 2)

Föreläsning 2. Länkad lista och iterator

Föreläsning 3. Stack

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

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

Tentamen. DD2385 Programutvecklingsteknik vt 2011 Tisdagen den 24 maj 2011 kl Hjälpmedel: penna, suddgummi, linjal

Objektorienterad Programmering (TDDC77)

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

Dagens program. Objektorienterad modellering och diskreta strukturer / design. Model/View/Control-implementering. Model/View/Control-arkitektur

Repetition av OOP- och Javabegrepp

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

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

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

Laboration 13, Arrayer och objekt

DAT043 - Föreläsning 7

Repetition av OOP- och Javabegrepp

Språkkonventioner och redigering av tal.

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

Lösningar till tentamen i EDAF25

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

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

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Concurrency Saker händer samtidigt. Process En instans av ett program

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

TENTAMEN OOP

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

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

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

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

Arrayer. results

TDDD78 Viktiga begrepp, del 2

Lösningar till tentamen i EDAF25

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

Tentamen Nätverksprogrammering Lösningsförslag

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Innehåll. Sökning och hashtabeller. En bilsamling att söka i. En bil-klass att söka efter. Hur hittar vi alla bilar som uppfyller ett annat villkor

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Objektorienterad programmering med Java, Generics

Objektorienterad programutveckling, fk

Lösningsförslag till exempeltenta 2

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Tentamen Nätverksprogrammering Lösningsförslag

Del A (obligatorisk för alla)

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Lösningar för tenta 2 DAT043,

Tentamen i Objektorienterad modellering och design Helsingborg

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

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

Tentamen FYTA11 Javaprogrammering

Laboration A Objektsamlingar

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Transkript:

LÖSNINGSFÖRSLAG - 100406 Uppgift 1. a) Objekten som tillhör en icke-muterbar klass är oförändliga, dvs de behåller under hela sin livstid det tillstånd som de fick när de skapades. Icke-muterbara objekt har många fördelar: b) De är lätta att förstå. De är alltid trådsäkra. Det är ofarligt att lämna ut referenser till dem. Det gör inget om en massa olika objekt råkar använda ett och samma immutable object. Deras interna data kan återanvändas. Om ett nytt immutable object ska skapas där vissa fält inte skiljer sig från de i ett befintligt objekt av samma klass kan alla oförändrade fält referera till exakt samma instanser som i det befintliga objektet. Det är lätt att använda immutable objects som tillstånd i andra objekt. Det är ofarligt att skicka dem till andra processer i distribuerade system. A a = new A(); Skriver ut: A.A() B b = new B(); Skriver ut: A.A() B.B() A ab = new B(); Skriver ut: A.A() B.B() a.f(ab); Skriver ut: A.f(A) a.g(b); Skriver ut: A.g(A) b.f(ab); Skriver ut: B.f(A) b.g(a); Skriver ut: A.g(A) b.h(ab); Skriver ut: B.h(A) ab.f(a); Skriver ut: B.f(A) ab.h(a); Ger kompileringsfel, metoden h finns inte klassen A ab.f(ab); Skriver ut: B.f(A)

Uppgift 2. a) i) ABD ii) ACD b) Interfacet har två ansvarsområden och strider mot Single Responsibility Principle. public interface Contact { public void dial(string pno); public void hangup(); public boolean isconnected(); public interface Transmit { public void send(char[] c), public void recive(char[] c); c) import java.util.*; public class MyDS<T> { private List<T> data; public MyDS() { data = new ArrayList<T>(); public T first() { return data.get(0); public void append(t val) { data.add(val); // fler metoder som vi inte bryr oss om i denna uppgift

Uppgift 3. a) Om man skulle införa ytterligare en klass måste man ändra i metoden doswitch. b) Inför ett gränssnitt som klasserna A, B och C implementerar. Alternativt kan man införa en abstrakt klass som klasserna A, B och C utökar. Gränssnitt är att föredra eftersom klasser endast kan ärva från en klass, men kan implementera ett godtyckligt antal interface. // Inför ett interfac public interface I { public void doit(); public class A implements I { System.out.println("This is A"); public class B implements I { System.out.println("This is B"); public class C implements I { System.out.println("This is C"); public static void doswitch(i obj) { obj.doit(); // Inför en abstrakt klass public abstract class Abst { public abstract void doit(); public class A extends Abst { System.out.println("This is A"); public class B extends Abst { System.out.println("This is B"); public class C extends Abst { System.out.println("This is C"); public static void doswitch(abst obj) { obj.doit();

Uppgift 4. a) Ett problem Kalle kan få är att meddelanden försvinner eftersom set() skulle kunna anropas två gånger i följd av samma tråd. Ett annat problem som kan uppstå är att den läsande tråden stjäl all tillgänglig CPU-tid (busywait) vilket kan göra att andra trådar, t.ex. den som anropar set() aldrig får köra. b) public class Buffer { private String message; public synchronized void set(string m) { while (m!= null) { try { wait(); catch(interruptedexception e) { message = m; notifyall(); public synchronized String get() { while (message == null) { try { wait(); catch(interruptedexception e) { String m = message; message = null; notifyall(); return m;

Uppgift 5. Template-mönstret: public abstract class ArithmeticExpr implements Expr { private Expr expr1, expr2; protected ArithmeticExpr(Expr expr1, Expr expr2) { this.expr1 = expr1; this.expr2 = expr2; protected abstract String getopstring(); public String tostring() { StringBuffer buffer = new StringBuffer(); buffer.append("(").append(expr1); buffer.append(getopstring()); buffer.append(expr2).append(")"); return buffer.tostring(); // omissions public class Add extends ArithmeticExpr { public Add(Expr expr1, Expr expr2) { super(expr1, expr2); protected String getopstring() { return "+"; // omissions public class Mul extends ArithmeticExpr { public Mul(Expr expr1, Expr expr2) { super(expr1, expr2); protected String getopstring() { return "*"; // omissions

Strategimönstret: public interface OperationStrategy { public String oper(); public class Add implements OperationStrategy { public String oper() { return "+"; public class Mul implements OperationStrategy { public String oper() { return "-"; public class ArithmeticExpr implements Expr { private Expr expr1, expr2; private OperationStrategy strategy; protected ArithmeticExpr(OperationStrategy strategy, Expr expr1, Expr expr2) { this.strategy = strategy; this.expr1 = expr1; this.expr2 = expr2; public String tostring() { StringBuffer buffer = new StringBuffer(); buffer.append("(").append(expr1); buffer.append(strategy.oper()); buffer.append(expr2).append(")"); return buffer.tostring(); // omissions

Uppgift 6. import java.util.*; public class Synonyms { private Map<String, ArrayList<String>> ordbank = new HashMap<String, ArrayList<String>>(); public void add(string word1, String word2) { addsynonyms(word1, word2); addsynonyms(word2, word1); //add private void addsynonyms(string word, String synonym) { ArrayList<String> synonymer = ordbank.get(word); if (synonymer == null) { synonymer = new ArrayList<String>(); synonymer.add(synonym); ordbank.put(word,synonymer); else if (!synonymer.contains(synonym)){ synonymer.add(synonym); //addsynonymers public void remove(string word1, String word2) { removesynonyms(word1, word2); removesynonyms(word2, word1); //remove private void removesynonyms(string word, String synonym) { ArrayList<String> synonymer = ordbank.get(word); if (synonymer!= null) synonymer.remove(synonym); //removesynomymers public List<String> getsynonyms(string word) { return ordbank.get(word); //getsynonyms public String tostring() { return ordbank.size()+" ord med synonymer"; //tostring //Synonyms

Uppgift 7. import java.util.*; public class SortSynonyms implements Comparator<String> { public int compare(string s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); if (len1!= len2) else return len1 - len2; return s1.compareto(s2); //compare //SortSynonyms public static void printsynonyms(string word, List<String> synonyms) { if (synonyms == null synonyms.size() == 0) System.out.println("Ordet " + word + " finns ej"); else { SortSynonyms sort = new SortSynonyms(); Collections.sort(synonyms, sort); String res = "Synonymer till " + word + ": "; for (int i = 0; i < synonyms.size(); i++) { res = res + synonyms.get(i); if (i < synonyms.size()-1) res = res + ", "; System.out.println(res); //printsynonyms