TENTAMEN OOP

Relevanta dokument
TENTAMEN OOP

TENTAMEN OOP

Tentamen OOP

OOP Tenta

OOP Tentamen

OOP Tentamen

OOP Tentamen

OOP Omtenta

OOP Omtenta

OOP Omtenta

OOP Exempel Tentamen 2007

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

OOP Tenta

LÖSNINGSFÖRSLAG TENTAMEN

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

OOP Omtenta

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

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

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

Laboration 1 - Grunderna för OOP i Java

OOP Omtentamen

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.

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

OOP Objekt-orienterad programmering

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

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

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

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

PROGRAMMERING-Java TENTAMINA

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

OOP Objekt-orienterad programmering

Del A (obligatorisk för alla)

Lösningsförslag till tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen. Lösningsförslag

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

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

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

Malmö högskola 2008/2009 CTS

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Del A (obligatorisk för alla)

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

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

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

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

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

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

Lösningsförslag övning 2.

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

F4. programmeringsteknik och Matlab

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

OOP Objekt-orienterad programmering

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

Klasshierarkier - repetition

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

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

JAVA Mer om klasser och objektorientering

Tentamen i Programmering

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

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

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

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

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 DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

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

Tentamen i Grundläggande programmering STS, åk 1 lördag

LÖSNINGSFÖRSLAG TENTAMEN

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

PROGRAMMERING-JAVA TENTAMINA

Tentamen, EDAA10 Programmering i Java

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

Tentamen i Programmeringsteknik I, ES,

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

Tentamen i Programmeringsteknik I

Lösningsförslag tentamen FYTA11 Java

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

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

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

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

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.

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

Instuderingsfrågor, del D

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

DD1342 Programkonstruktion för F1,

DAT043 Objektorienterad Programmering

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

(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

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

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

Transkript:

TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli godkänd på tentan (minst betyg E) krävs dels minst 4 poäng sammanlagt på uppgift 1 och uppgift 2 och dels minst 15 poäng sammanlagt på hela tentan. För högre betyg krävs: Betyg D: minst 18 poäng samt högst en uppgift med 0 poäng. Betyg C: minst 21 poäng samt ingen uppgift med 0 poäng. Betyg B: minst 24 poäng samt ingen uppgift med 0 poäng. Betyg A: minst 27 poäng samt uppgifterna lösta med korrekt användande av objektorienterade principer (t.ex. inkapsling, ej upprepning av kod). Betyget Fx med möjlighet att komplettera ges till studenter som fått 12-14 poäng eller som fått mer än 14 poäng men missat att få 4 poäng på uppgift 1+2. HJÄLPMEDEL De enda tillåtna hjälpmedlen är en (1) valfri bok om Java och en (1) bok som inte behandlar programmering i någon form. Lycka till! Lösningsförslag läggs upp i Moodle senast tre arbetsdagar efter tentatillfället.

UPPGIFT 1: KODFÖRSTÅELSE IMPERATIV PROGRAMMERING (6 POÄNG) Om man exekverar följande programrader, vad kommer att skrivas ut på skärmen? Du skall i dina svar vara noga med vad som skrivs på vilken rad, alltså beakta skillnaden mellan print och println. DELUPPGIFT A (2 POÄNG) for (int i = 0; i < 2; i++) { switch (i) { case 2: System.out.println("Mellan 2 och 1"); case 1: System.out.println("Avbryt"); break; case 0: System.out.println("Mellan 0 och default"); default: System.out.println("Default"); KORREKT SVAR Mellan 0 och default Default Avbryt VARFÖR BLIR SVARET SOM DET BLIR? I det första varvet i loopen är i=0 så vi skriver ut Mellan 0 och default. Eftersom det inte finns något break efter detta så faller vi ner till nästa case, i detta fall default, och skriver ut Default. I det andra varvet är i=1 så vi skriver ut Avbryt. Eftersom detta följs av ett break så hoppar vi ut ur switch-satsen.

DELUPPGIFT B (2 POÄNG) for (int n = 3; n >= 0; n--) { for (int m = 1; m < 4; m++) { if (m <= n) { System.out.print(m); System.out.println(); KORREKT SVAR 123 12 1 <BLANK RAD> VARFÖR BLIR SVARET SOM DET BLIR? Den yttre loopen går fyra varv. I det första är n=3, så den inre loopen skriver ut talen 123 på samma rad innan den avslutas och en ny radstartas. I det andra varvet av den yttre loopen är n=2, så 12 skrivs ut. I det tredje är n=1 och 1 skrivs ut. I det fjärde varvet I den yttre loopen är n=0, så if-satsen blir aldrig sann och vi får en blankrad. DELUPPGIFT C (2 POÄNG) String s1 = "tenta"; String s2 = s1.touppercase(); System.out.println(s1 + s2); KORREKT SVAR tentatenta VARFÖR BLIR SVARET SOM DET BLIR? touppercase skapar en ny instans av strängen s1 med enbart stora bokstäver. Den ändrar INTE på s1. println ger en radbrytning efter att den sammanslagna strängen skrivits ut, inte mellan dem.

UPPGIFT 2: KODFÖRSTÅELSE KLASSER OCH OBJEKT (6 POÄNG) Givet nedanstående tre klasser, vad kommer att skrivas ut om man kör Java-programmet på nästa sida? abstract class Apa { private String namn; public Apa(String namn) { this.namn = namn; public String tostring() { return namn; class Gorilla extends Apa { private int vikt; public Gorilla(String namn, int vikt) { this.vikt = vikt; public String tostring() { return super.tostring() + " " + vikt; class Schimpans extends Apa { private static int ålder = 0; public Schimpans(int ålder) { this("cheeta", ålder); public Schimpans(String namn, int ålder) { Schimpans.ålder += ålder; public String tostring() { return super.tostring() + " " + ålder;

import java.util.arraylist; public class Apor { public static void main(string[] args) { ArrayList<Apa> apor = new ArrayList<Apa>(); apor.add(new Schimpans(80)); apor.add(new Gorilla("Kong", 1234)); apor.add(new Schimpans("Ola", 26)); for (Apa a : apor) { System.out.println(a); KORREKT SVAR Cheeta 106 Kong 1234 Ola 106 VARFÖR BLIR SVARET SOM DET BLIR? Programmet skapar tre apor och lägger dem i en ArrayList. Den första apan är en schimpans som är 80 år gammal. Den första konstruktorn i klassen Schimpans tar emot åldern som parameter och skickar den vidare till den andra konstruktorn tillsammans med ett default-namn: Cheeta. Den andra konstruktorn skickar namnet (Cheeta) till superklassens konstruktor där det sparas och lägger till åldern (80) till den statiska variabeln ålder i klassen Schimpans. Den andra apan är en gorilla som heter Kong och som väger 1234kg. Konstruktorn i Gorilla gör nästan precis samma sak som den andra konstruktorn i Schimpans: namnet skickas till superklassens konstruktor och vikten sparas, fast nu i en instansvariabel. Den tredje apan är åter en schimpans. Denna har ett eget namn (Ola) och använder därför den andra konstruktorn direkt. Åldern 26 läggs till till den statiska variabeln ålder som nu alltså har värdet 80+26=106. Därefter skriver vi ut alla aporna i en loop varvid tostring anropas på de olika objekten. Både Gorilla och Schimpans använder sig av superklassen Apa:s tostring för att få reda på namnet.

UPPGIFT 3: ANTAL ORD (6 POÄNG) Skriv ett program som ber användaren skriva in en mening och som därefter skriver ut hur många ord meningen innehåller. Ord separeras av en eller flera av mellanslag, punkt, komma, frågetecken och utropstecken. Ett exempel på hur programmet ska fungera är detta: Skriv en mening: Här är en mening. Meningen består av 4 ord I ovanstående exempel så finns det precis en avdelare efter varje ord. Som det står i uppgiften kan det dock finnas flera, och de kan dessutom komma innan meningen startar: Skriv en mening:,. Här Meningen består av 5 ord är en!?konstig mening Två metoder i klassen String som kan användas för att lösa uppgiften är: char charat(int index) o Returns the char value at the specified index. int length() o Returns the length of this string. LÖSNINGSFÖRSLAG import java.util.scanner; public class WordCount1 { public static void main(string[] args) { Scanner keyboard = new Scanner(System.in); System.out.print("Skriv en mening: "); String str = keyboard.nextline(); // Antal ord i den inskrivna meningen int words = 0; // Innan vi har sett några tecken så kan vi inte ha påbörjat ett ord. boolean wordstarted = false; // Gå igenom varje tecken i strängen for (int n = 0; n < str.length(); n++) { switch (str.charat(n)) { case ' ':

case '.': case ',': case '!': case '?': // Om vi stöter på något av avgränsningstecknen *PRECIS EFTER* // att vi/ stött på något annat tecken så vet vi att ett ord // just avslutats och kan därför räkna upp variabeln words. if (wordstarted) { words++; // Här sätter vi tillbaka wordstarted till false så att vi // inte dubbelräknar ord som följs av flera avgränsare. wordstarted = false; break; default: // Alla andra tecken vi stöter på måste vara en del av ett ord // så vi noterar att vi sett detta. wordstarted = true; break; // Om det sista ordet inte avslutades med en avdelare så kommer det inte // räknas av loopen ovan. if (wordstarted) { words++; System.out.println("Meningen består av " + words + " ord"); ALTERNATIVA LÖSNINGSVARIANTER Ett alternativt sätt att lösa uppgiften är att använda metoden split i String. Denna metod är något enklare, men kräver att man känner till metoden och hur den fungerar.

UPPGIFT 4: TID (6 POÄNG) Denna uppgift går ut på att skriva en klass 1 som representerar en tidpunkt inom ett dygn. Följande krav finns: Tidpunkten representeras med två heltal, ett för timmar och ett för minuter. Klassen ska ha två konstruktorer. Den ena ska vara parameterlös och sätta tiden till 00:00, och den andra ska ta två parametrar: timmar och minuter. Du kan anta att den som använder klassen alltid kommer att ange korrekta tidpunkter till den andra konstruktorn och behöver därför inte lägga in någon felhantering i denna. Det ska gå att läsa av timmar och minuter som heltal med hjälp av metoder, men inte ändra på dem på annat sätt än att skapa ett nytt objekt. Det ska gå att omvandla objekt av klassen till textsträngar på Javas vedertagna sätt med en tostringmetod. LÖSNINGSFÖRSLAG public class Time { private int hour; private int minutes; public Time() { // Vi behöver inte anropa den andra konstruktorn eftersom hour och // minutes är satta till 0 per default. public Time(int hour, int minutes) { this.hour = hour; this.minutes = minutes; public int gethour() { return hour; public int getminutes() { return minutes; public String tostring() { return hour + ":" + minutes; 1 Observera att uppgiften bara ber dig att skriva en klass. Du ska alltså INTE skriva ett program som använder sig av din klass.

UPPGIFT 5: DRAKTÅR (6 POÄNG) En egenskap som skiljer en kejserlig kinesisk drake från andra kinesiska drakar är att den har fem tår på varje fot istället för det normala tre eller fyra. Vi vill nu skapa klasser som kan representera detta och har därför skapat de tre klasserna på nästa sida. Din uppgift är nu att kompletter dessa klasser så att tostring-metoden i klassen Drake fungerar. Till exempel ska nedanstående två rader: System.out.println(new KejserligDrake("Huangdi")); System.out.println(new KinesiskDrake("Long")); ge följande utskrift: Huangdi är en drake med fem tår. Long är en drake med tre eller fyra tår. En restriktion i uppgiften är att du INTE får ändra på någonting av det som redan står i klasserna. Du får lägga till hur många metoder, variabler, etc. du anser nödvändigt, men inte lägga till några parametrar till redan existerande metoder, ändra typer på variabler, etc. Du får inte heller överskugga tostring i subklasserna. Det var ju tostring i klassen Drake som skulle fungera.

abstract class Drake { private String namn; public Drake(String namn) { this.namn = namn; public String namn() { return namn; public String tostring() { return namn + " är en drake med " + tår() + " tår."; class KinesiskDrake extends Drake { public KinesiskDrake(String namn) { class KejserligDrake extends KinesiskDrake { public KejserligDrake(String namn) {

LÖSNINGSFÖRSLAG abstract class Drake { private String namn; public Drake(String namn) { this.namn = namn; public String namn() { return namn; // Metoden tår MÅSTE finnas i klassen Drake, annars skulle vi inte kunna // anropa den i tostring. Eftersom antalet tår varierar mellan olika // draktyper så gör vi den abstrakt här. protected abstract String tår(); public final String tostring() { return namn + " är en drake med " + tår() + " tår."; class KinesiskDrake extends Drake { public KinesiskDrake(String namn) { // Sedan implementerar vi den här public String tår() { return "tre eller fyra"; class KejserligDrake extends KinesiskDrake { public KejserligDrake(String namn) { // och här public String tår() { return "fem";