HI1007, Objektorienterad programmering med Java

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

OOP Objekt-orienterad programmering

Föreläsning 10. ADT:er och datastrukturer

Objektorienterad programmering i Java

Objektorienterad programmering D2

Vi skall skriva uppsats

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

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

Tentamen, EDAA20/EDA501 Programmering

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

TENTAMEN: Design och konstruktion av grafiska gränssnitt DAT215

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

OOP Objekt-orienterad programmering

Skriva B gammalt nationellt prov

Föreläsnings 10 - Överlagring, Konstruerare, Arv, Mer Exceptions, Reguljära Uttryck

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Tentamen TEN1 HI

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

ELEV- HANDLEDNING (Ansökan via webben)

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Klasser och objekt i C#

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

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

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

TENTAMEN OOP

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

Tentamen OOP

Introduktion till arv

729G04 - Hemuppgift, Diskret matematik

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

Kopiering av objekt i Java

Tentamen i Programmering grundkurs och Programmering C

TENTAMEN OOP

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Fördjupad Java. Undantagshantering. Fel

Idag: Dataabstraktion

Laboration A Objektsamlingar

Lösningsförslag, tentamen FYTA11 Javaprogrammering

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

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

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Mera om generik. Innehåll. Generik och arv Wildcards Vektorer och generik Generiska metoder. EDA690 (Mera om generik) HT / 24

Tentamen Programmering fortsättningskurs DIT950

PROGRAMMERINGSTEKNIK TIN212

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.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Malmö högskola 2008/2009 CTS

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

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

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

Laboration 1 - Grunderna för OOP i Java

2D1310, 2D1311 Programmeringsteknik Tentamen (1p) 3 maj 2001, kl

Tentamen, EDA501 Programmering M L TM W K V

Generisk klass med typparameter Inre klass - ListIterator

Objektorienterad Programmering (TDDC77)

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

Konstruktion av klasser med klasser

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

Tentamen, EDAA10 Programmering i Java

Objektsamlingar i Java

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

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

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

Introduktion. Den objektorienterade modellen Grundläggande begrepp Klass Klassen som abstraktion

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Fiktiv Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java

Del A (obligatorisk för alla)

Partnerskapsförord. giftorättsgods görs till enskild egendom 1, 2. Parter 3. Partnerskapsförordets innehåll: 4

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

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 i Objektorienterad programmering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Individuellt Mjukvaruutvecklingsprojekt

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

Administration Excelimport

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

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

Praktisk programmering

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Java M1 V2 L2 K2 TM W. Tentamen i Programmering , kl LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap.

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Gissa det hemliga talet

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Distribuerade system. CORBA eller RMI

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.

Övningar Dag 2 En första klass

Transkript:

TENTAMEN Kurs, kursnummer Moment: Program: Åk: Examinator: Rättande lärare: Datum: Tid: Hjälpmedel: HI1027, Objektorienterad programmering/ HI1007, Objektorienterad programmering med Java TEN1, 3,5 hp/3,0 hp Datateknik/DP - Anders Lindström Anders Lindström Fredag 2011-10-21 13.15 18.00 Eclipse finns på Start-menyn: All programs/program Haninge/Utveckling/Eclipse_Local När Eclipse startar: ange Workspace till H:/prefixet_i_din_mailadress API-dokumentation och en kort syntaxlista finns på W: Använd Utforskaren för att leta upp filen W:\Java\api\index.html Högerklicka på filen och välj Open with och sedan Firefox Omfattning och betygsgränser: Övrig information: Max 38 poäng (20+18). För betyg E krävs totalt 19 poäng. 17-18 poäng ger möjlighet till komplettering för betyg E. I båda fallen krävs minst 6 poäng på både del A och B. För betyg D krävs 23 poäng; för betyg C 27 poäng; för betyg B 30 poäng och för betyg A krävs 34 poäng. Del A, Teoriuppgifter: Svara på separat papper. Del B, Programmeringsuppgifter: Lösningar lämnas på tentamenskontot. Skapa en workspace direkt under H:, med samma namn som prefixet i din e-post adress. För varje lösning ska det finnas ett projekt med namnet Uppgift Nr. Innan du avslutar tentamen: Kontrollera att du verkligen sparat dina lösningar på H:

Del A, Teoriuppgifter Svara, på separat papper, kort men koncist på frågorna. Otydliga lösningar, både vad gäller läslighet och begriplighet, rättas inte. 1. Förklara innebörden av de objektorienterade begreppen återanvändning, inkapsling och arv. (3 p) 2. Vad är, i språket Java, skillnaderna mellan en abstrakt klass och ett interface? 3. a) Betrakta följande kodfragment (du behöver inte bry dig om hur koden mellan try och första catch -blocket ser ut i detalj). BufferedReader fin = null; try { fin = new BufferedReader(new FileReader(filename)); String line; line = fin.readline(); catch(filenotfoundexception fnfe) { System.out.println(fnfe.toString()); catch(exception e) { throw e; finally { if(fin!= null) filescan.close(); Ange vad som sker och vilken kod som kommer att exekveras om i - inget exception kastas ii - ett FileNotFoundException kastas iii IOException, som inte är ett FileNotFoundException, kastas b) Vi vill lägga koden ovan i en separat metod, readfile(string filename). Metoden ska dock inte hantera exception som eventuellt kastas, utan detta ska hanteras i anropande kod. Däremot ska metoden garantera att filen stängs oavsett om exception kastas eller ej. Skissa ur denna metod ska se ut (du behöver inte skriva anropande kod). (2+1 p) 4. Betrakta följande klass. public class SecretCollection { privat List secretlist; public List getsecretlist() { return secretlist; a) Vilket potentiellt problem finns med metoden getsecretlist? Förklara, gärna med en figur. 1

b) Föreslå hur metoden kan skrivas för att undvika detta problem. 5. Vad menas med begreppen a) Omdefiniering av metoder (overriding) b) Polymorfism. Beskriv kort en situation där vi kan ha nytta av polymorfism. c) Varför är det en ofta en dålig idé att i en subklass direkt manipulera en superklass datamedlemmar? (3 p) 6. Klassen Account representerar ett bankkonto med saldo, balance, som ska hanteras I en multitrådad miljö. Kodexemplet nedan ger en bild av funktionaliteten i klassen. a) Skissa hur denna klass bör skrivas med fokus på att den ska vara trådsäker. Ange tydligt vilket objekt som fungerar som monitor i din lösning. Account a = new Account(); a.deposit(2500); a.deposit(200); double b = a.getbalance(); b) Objekt av typen java.util.arraylist är inte trådsäkra. Man kan dock få ett trådsäkert skal kring objekt av denna typ på följande sätt: List list = java.util.collection.synchronizedlist(new ArrayList()); Det finns ändå situationer då list inte är trådsäker. Ge ett exempel på en sådan situation och hur denna situation löses. 7. Rita ett klassdiagram som beskriver följande situation vid ett universitet: På universitetet finns studenter och anställda. En anställd är antingen administratör eller lärare. Universitetet ger ett antal kurser. En kurs har en examinator; en lärare har denna roll. En kurs kan ges vid olika tillfällen, d.v.s. ha flera olika kursomgångar. För en kursomgång finns en ansvarig lärare och ett antal studenter. En student är registrerad på ett antal kurser och har ett antal poäng. Relationer mellan klasserna, deras multiplicitet och roller ska tydligt framgå av diagrammet. Du behöver inte ange metoder i diagrammet. (3 p) 8. Förklara vad som menas med Model-View-Controler mönstret. Ange 2 poänger med att använda det i en applikation med grafiskt gränssnitt. 2

Del B, Programmeringsuppgifter Lösningar lämnas på tentamenskontot. Skapa en workspace direkt under H:, med samma namn som prefixet i din e-post adress. För varje lösning ska det finnas ett projekt med namnet Uppgift Nr. Kontrollera noga att du verkligen sparar dina lösningar på H:. Till dessa uppgifter kan du i vissa fall ha hjälp av Javas API-dokumentation. Som finns på W:/Java/api. 1. Du har fått till uppgift att bringa ordning på den lokala vårdcentralen. Det behövs klasser för att representera läkare, patienter samt journalanteckningar. a) Skriv klassen Person, och subklassen Physician (läkare). En person har ett namn och ett personnummer. Det ska finnas konstruktor, accessmetoder samt en tostring-metod för klassen Person. Subklassen Physician har dessutom en specialitet (t.ex. kirurgi eller medicin). I övrigt gäller samma krav som för klassen Person. b) Skriv klassen JournalNote, som representerar en journalanteckning. En journalanteckning har ett datum, en referens till den läkare som skrev anteckningen samt själva texten. Det ska finnas en konstruktor som tar en text och en referens till en läkare som argument. Använd klassen java.util.date för att representera datumet, den parameterlösa konstruktorn ger aktuell tid. Lägg till access-metoder och en tostring-metod. Skriv ett main där du skapar några läkare och en lista (ex. ArrayList) för journalanteckningar. Skapa journalanteckningar, lägg dessa i listan och skriv ut innehållet. (2+2 p) 2. a) Skriv klassen Patient som en subklass till Person. En patient har en lista med journalanteckningar, tostring-metod samt en metod, addnote(physician ph, String note), för att skapa och lägga till en ny anteckning i listan. b) Lägg till en metod, getjournal, i klassen Patient, som returnerar listan med journalanteckningar på ett sådant sätt att mottagaren inte kan ta bort några objekt i patientens privata lista. Skriv också en main-metod där du skapar objekt och demonstrerar funktionaliteten för klasserna. Ett exempel följer nedan (där en patient behandlas av två läkare). public static void main(string[] args) { Physician ph1 = new Physician("Sweeny Todd","111-111","kirurg"); Physician ph2 = new Physician("Lisa Larsson","222-222","medicin"); Patient patient = new Patient("Anders Lindström","333-333"); patient.addjournalnote(ph1, "Höger ben måste amputeras."); patient.addjournalnote(ph2, "Vaccinerad mot influensa."); patient.addjournalnote(ph1, "Hoppsan, fel ben."); System.out.println(patient.toString()); Exemplet bör ge följande utskrift liknande denna (via patientens tostring-metod). Patient Anders Lindström, 333-333 Mon Oct 20 10:00:13 CEST 2008, Physician Sweeny Todd,111-111,kirurg Höger ben måste amputeras. Mon Oct 20 10:00:13 CEST 2008, Physician Lisa Larsson,222-222,medicin Vaccinerad mot influensa. Mon Oct 20 10:00:13 CEST 2008, Physician Sweeny Todd,111-111,kirurg 3

Hoppsan, fel ben. (2+1 p) 3. Notera: I denna uppgift får du inte använda dig av färdigdefinierade Collection-klasser som Vector, ArrayList eller liknande. a) Skriv en klass, SList, för att lagra String-objekt via en privat array av String-referenser. Om arrayen är full ska dess storlek automatiskt fördubblas när man lägger till ett nytt objekt. Följande metoder ska finnas för klassen: - Två konstruktorer, en parameterlös som skapar en array av storlek 10 och en som tar arrayens storlek som argument. - size() returnerar antal element i listan (ej arrayens storlek). - get(int index) returnerar en referns till objektet på aktuellt index, utan att ta bort detta. - En privat metod för att dubbla arrayens storlek (och kopia över elementen). - add() lägger till ett String-objekt sist. Om arrayen är full ska den automatiskt utökas. - clear() tömmer listan. - tostring() returnerar en String på formen [element1,element2,,] Skriv sedan ett main som demonstrerar funktionaliteten. b) Lägg till en metod, remove(int index), som tar bort, och returnerar, ett element ur listan och packar denna automatiskt. Låt metoderna get och remove kastar ett java.lang.indexoutofboundsexception om index är felaktigt (index < 0 eller size()). c) Lägg till följande metoder: - equals() returnerar true endast om argument är en lista med samma storlek och de objekt som refereras är parvis lika. - clone() returnerar en kopia av objektet. Det är viktigt att kopian har en separat array för elementen i listan (så att ändringar i kopian inte påverkar det ursprungliga objektet). (4+1+2 p) 4

4. En iterator används för att lätt kunna löpa igenom en samling objekt. T.ex. för ett objekt av klassen SList från uppgift 2: SList list = new SList(); Iterator<String> it = list.iterator(); while(it.hasnext()) { String s = it.next(); System.out.println(s); Läs i API-dokumentationen om interfacet java.util.iterator. Implementera en klass Iterator till din klass SList, samt en metod, iterator(), som skapar och returnerar en sådan iterator. Iterator-metoden remove får implementeras så att den direkt kastar ett UnsupportedOperationException (se dokumentationen). Om du är ovan vid, eller har problem med, generics (typparametrisering) i Java, kan du definiera ett eget interface, Iterator, med samma metoder och använda detta istället. Skriv en main-metod där du använder dig av iteratorn. (4 p) 5