TENTAMEN OOP

Relevanta dokument
TENTAMEN OOP

TENTAMEN OOP

OOP Tenta

OOP Tentamen

OOP Tentamen

OOP Tentamen

OOP Omtenta

OOP Omtenta

Tentamen OOP

OOP Omtenta

OOP Exempel Tentamen 2007

OOP Tenta

LÖSNINGSFÖRSLAG TENTAMEN

OOP Omtenta

OOP Omtentamen

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

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

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

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

OOP Objekt-orienterad programmering

Laboration 1 - Grunderna för OOP i Java

Del A (obligatorisk för alla)

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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.

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

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

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

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

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

Klasshierarkier - repetition

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

Instuderingsfrågor, del D

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

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 med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

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

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

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. Lösningsförslag

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

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

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

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

Objektorienterad programmering i Java

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

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

Lösningsförslag övning 2.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 13 Innehåll

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

TDDD78 Viktiga begrepp, del 2

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

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

OOP Objekt-orienterad programmering

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Laboration A Objektsamlingar

Tentamen i Programmeringsteknik I

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

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

OOP Objekt-orienterad programmering

Del A (obligatorisk för alla)

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

DAT043 Objektorienterad Programmering

OOP Objekt-orienterad programmering

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

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

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

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

Malmö högskola 2008/2009 CTS

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

Lösningsförslag: Instuderingsfrågor, del D

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen, EDAA10 Programmering i Java

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

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)

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

Tentamen i Programmering

PROGRAMMERING-JAVA TENTAMINA

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

Tentamen i Grundläggande programmering STS, åk 1 fredag

Konstruktion av klasser med klasser

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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 Programmeringsteknik I, ES,

PROGRAMMERING-Java TENTAMINA

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

Lösningsförslag tentamen FYTA11 Java

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

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

Lösningsförslag till exempeltenta 2

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Transkript:

TENTAMEN OOP 2014-01-19 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) int tal = 4; switch (++tal) { case 4: System.out.println(tal); break; case 5: System.out.println(tal++); default: System.out.println(++tal); int tal2 = tal + 3; System.out.println(tal + tal2); KORREKT SVAR 5 7 17 VARFÖR BLIR SVARET VAD DET BLIR? Den första raden sätter variabeln tal = 4. ++tal på rad två ökar tal till 5 innan valet av case sker. I fall 5 skriver vi ut tal++, alltså 5, som efter utskriften ökas till 6. Eftersom det inte finns något break så faller vi igenom till default och skriver ut ++tal, alltså 7 eftersom tal ökas innan utskriften. Efter switch-satsen sätts tal2 till 7 + 3, alltså 10, och vi skriver ut 7+10, alltså 17. Alla utskrifter använder println, så de kommer på varsin rad. DELUPPGIFT B (2 POÄNG) int[] arr = new int[5]; for(int i=1; i<=arr.length; i+=2){ arr[arr.length-i]=i; for(int x: arr){ System.out.print(x);

KORREKT SVAR 50301 VARFÖR BLIR SVARET VAD DET BLIR? Den första raden skapar en array med fem platser: 0 0 0 0 0 0 1 2 3 4 När man skapar en array av heltal så sätts samtliga värden till noll från början. Den första loopen går tre varv och variabeln i sätts i tur och ordning till 1, 3 och 5, Under det första varvet så sätts plats arr.length-1 (4) till 1, under det andra arr.length-3 (2) till 3 och slutligen arr.length-5 (0) till 5 vilket ger oss följande array som sedan skrivs ut av den andra loopen: 5 0 3 0 1 0 1 2 3 4 DELUPPGIFT C (2 POÄNG) for (int i = 0; i < 5; i++) { int j = 5 - i; while (j > 0) { if (j % 2 == 0) { System.out.print(j); j--; System.out.println(); KORREKT SVAR 42 42 2 2 TOM RAD VARFÖR BLIR SVARET VAD DET BLIR? Den här koden går att följa för hand, men blir mycket enklare om man funderar på vad koden inuti for-loopen gör. While-loopen skriver ut alla jämna tal från j och ner till 2. I det första varvet på forloopen blir j 5-0, alltså 5, och vi skriver därför ut först 4 och sen 2. I det andra varvet blir j 5-1,

alltså 4, och vi gör samma sak. I det tredje varvet blir j 5-2, alltså 3, och vi skriver bara ut 2, vilket även gäller det fjärde varvet när j är 2. I det sista varvet i forloopen blir j 5-4, alltså 1, och ingen siffra skrivs ut, men däremot radbrytningen.

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 programmet? class SuperClass { private String data; public SuperClass(int data) { this.data = "" + data + data; public String tostring() { return "" + data; class SubClass extends SuperClass { private int data; private static int merdata = 79; public SubClass(int data) { super(data + data); this.data = data; merdata = data + data + data; public String tostring() { return super.tostring() + merdata; class MainClass { public static void main(string[] args) { SuperClass c1 = new SuperClass(3); SuperClass c2 = new SubClass(4); SubClass c3 = new SubClass(5); System.out.println(c1); System.out.println(c2); System.out.println(c3);

KORREKT SVAR 33 8815 101015 VARFÖR BLIR SVARET VAD DET BLIR? I main-metoden skapas tre stycken objekt, en instans av SuperClass och två av SubClass. Låt dig inte luras av att typen på c2 är SuperClass, det är bara typen på objektet som spelar roll för beteendet. (Variabelns typ spelar däremot roll för vilket gränssnitt man kan använda sig av för interaktion med objektet, men det är inte relevant i denna uppgift.) När c1 skapas så får den en instansvariabel data som sätts till 33 eftersom + i konstruktorn i superklassen avser strängkonkatenering, inte addition. När c2 skapas så blir det lite svårare. Här finns det förutom parametrarna två instansvariabler som bägge heter data, en sträng i superklassen och en int i subklassen. + betyder också olika saker vid olika tillfällen. Låt oss följa med 4:an på dess väg: 1. Parametern data i subklassens konstruktor sätts till 4 2. Superklassens konstruktor anropas med 4+4, alltså 8 som argument 3. Parmetern data i superklassens konstruktor sätts till 8 4. Instansvariabeln data i superklassen sätts till +8+8 = strängen 88 5. Superklassens konstruktor är klar och vi återgår till subklassens 6. Subklassens instansvariabel data sätts till 4, värdet på parametern data 7. Den statiska variabeln merdata sätts till 4+4+4=12 När c3 skapas sker samma sak: 1. Parametern data i subklassens konstruktor sätts till 5 2. Superklassens konstruktor anropas med 5+5, alltså 10 som argument 3. Parmetern data i superklassens konstruktor sätts till 10 4. Instansvariabeln data i superklassen sätts till +10+10 = strängen 1010 5. Superklassens konstruktor är klar och vi återgår till subklassens 6. Subklassens instansvariabel data sätts till 5, värdet på parametern data 7. Den statiska variabeln merdata sätts till 5+5+5=15 Därefter anropas tostring på samtliga objekt i följd och resultatet skrivs ut. Eftersom en statisk variabeln är gemensam för alla objekt så är det bara det sista värdet på merdata som kommer att komma med vid utskriften.

UPPGIFT 3: RÖVARSPRÅKET (6 POÄNG) Rövarspråket är ett enkelt kodspråk som blev populärt i och med Astrid Lindgrens böcker om Kalle Blomkvist. När man kodar en text med rövarspråket så dubblerar man varje konsonant och placerar ett o mellan dubletterna, till exempel byts b ut mot "bob" och g mot "gog". Vokalerna är oförändrade. "Jag talar rövarspråket" blir alltså "jojagog totalolaror rorövovarorsospoproråkoketot". Din uppgift är att skriva en metod som tar in en sträng som parameter och som returnerar strängen konverterad enligt ovan. Två metoder i klassen String som är nödvändiga 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 1 public static String version1(string str) { String resultat = ""; for (int i = 0; i < str.length(); i++) { char ch = str.charat(i); switch (ch) { case 'b': case 'c': case 'd': // osv för resten av konsonanterna resultat += ch + "o" + ch; break; default: // Hanterar såväl vokaler som skiljetecken och blanksteg resultat += ch; return resultat;

LÖSNINGSFÖRSLAG 2 Vi kan naturligtvis byta ut switch-satsen mot en if-sats. public static String version2(string str) { String resultat = ""; for (int i = 0; i < str.length(); i++) { char ch = str.charat(i); if (ch == 'b' ch == 'c' ch == 'd' /* osv */) { resultat += ch + "o" + ch; else { resultat += ch; return resultat; LÖSNINGSFÖRSLAG 3 En hjälpmetod kan göra koden enklare att läsa private static boolean konsonant(char ch) { return ch == 'b' ch == 'c' ch == 'd'; // osv public static String version3(string str) { String resultat = ""; for (int i = 0; i < str.length(); i++) { char ch = str.charat(i); if (konsonant(ch)) { resultat += ch + "o" + ch; else { resultat += ch; return resultat;

LÖSNINGSFÖRSLAG 4 Hjälpmetoden kan vara skriven på många olika sätt, tex med en array: private static final char[] konsonanter = { 'b', 'c', 'd' /* osv */; private static boolean konsonant(char ch) { for (char k : konsonanter) { if (ch == k) return true; return false; LÖSNINGSFÖRSLAG 5 Det finns många andra sätt och alternativ för att lösa uppgiften. Ett är att strunta i metoderna vi listade på tentan och byta ut alla konsonanter i strängen. private static final String[] konsonanter = { "b", "c", "d" /* osv */; public static String version5(string str) { for (String k : konsonanter) { str = str.replace(k, k + "o" + k); return str;

UPPGIFT 4: JÄMFÖRELSE (6 POÄNG) Här nedanför ser ni en delar av koden till en klass som representerar ett betyg. Uppgiften är att skriva klart equals-metoden så att det går att jämföra två betygsobjekt med varandra. Objekten är lika om både kurskoden och betyget är lika, annars inte. Du får inte ändra på equals-metodens signatur, den är bestämd eftersom vi överskuggar en metod som finns i Object. public class Betyg { private String kurskod; private char betyg; public Betyg(String kurskod, char betyg) { this.kurskod = kurskod; this.betyg = betyg; // Det är denna metod ni ska skriva klart public boolean equals(object obj) { // All övrig kod är ointressant för uppgiften och därför // inte medtagen här När equals-metoden fungerar som avsett så ska man kunna göra så här: Betyg b1 = new Betyg("OOS", 'C'); Betyg b2 = new Betyg("OOP", 'B'); Betyg b3 = new Betyg("OOP", 'B'); boolean skavarafalse = b1.equals(b2); boolean skavaratrue = b2.equals(b3); och de bägge boolska variablerna ska få rätt värde.

LÖSNINGSFÖRSLAG 1 Alla lösningar av denna uppgift måste kontrollera samma saker. Det enda som egentligen skiljer dem åt är hur man väljer att ställa upp dem. public boolean equals(object obj) { if (obj!= null && obj instanceof Betyg) { // Här vet vi att obj existerar och verkligen är ett betyg och // inget annat Betyg b = (Betyg) obj; return this.kurskod.equals(b.kurskod) && this.betyg == b.betyg; else { // Hamnar vi här så var antingen obj null, eller så var det något // annat än ett betyg så då kan de inte vara lika return false; LÖSNINGSFÖRSLAG 2 public boolean equals2(object obj) { if (obj == null) return false; if (!(obj instanceof Betyg)) return false; // Här vet vi att obj verkligen är ett betyg och inget annat Betyg b = (Betyg) obj; return this.kurskod.equals(b.kurskod) && this.betyg == b.betyg; LÖSNINGSFÖRSLAG 3 public boolean equals(object obj) { return (obj!= null) && (obj instanceof Betyg) && this.kurskod.equals(((betyg) obj).kurskod) && (this.betyg == ((Betyg) obj).betyg);

UPPGIFT 5: PACKA MJÖLK (6 POÄNG) När jag (Henrik) var student arbetade jag extra i förpackningen på ARLA, något som inspirerat till följande uppgift. Ett mjölkpaket har ett bäst-före-datum som vi för enkelhetens skull kan anta är ett heltal och en vikt i hela gram. Bägge dessa attribut sätts när mjölkpaketet skapas och kan sedan aldrig ändras. Däremot kan de läsas av när som helst. Det finns vidare två typer av lastbärare: rullpallar som rymmer 180 mjölkpaket och backar som rymmer 20. Med en lastbärare kan man göra följande saker: Lägga till ett mjölkpaket så länge som lastbäraren ännu inte är full. Läsa av antalet paket som finns på lastbäraren. Läsa av den totala vikten. Här antar vi att en tom rullpall väger 10kg, och en tom back 1kg. Du får själv välja om vikten här ska representeras i gram eller i kilo. Läsa av innehållets bäst-före-datum. Detta är det minsta bäst-före-datumet som något av mjölkpaketen i lastbäraren har, eller 0 om lastbäraren är tom. Din uppgift är att implementera ovanstående modell i Java. Du behöver inte implementera någon ytterligare funktionalitet än den som listas ovan. Du kan alltså strunta i tostring-metoder, att man inte kan ta bort paket från lastbärare, etc. För full poäng ska all funktionalitet vara implementerad och koden följa grundläggande regler för god programmering såsom namngivningskonventioner och användning av lämpliga skyddsnivåer. LÖSNINGSFÖRSLAG: MJÖLKPAKETEN public class Mjölkpaket { // Attributen ska inte kunna ändras, så de är privata. // De kan också göras final om man vill. private int bästföre; private int vikt; // Attributen ska sättas när man skapar mjölkpaketet public Mjölkpaket(int bästföre, int vikt) { this.bästföre = bästföre; this.vikt = vikt; // Eftersom attributen ska kunna läsas av måste vi ha get-metoder // för dem public int bästföre() { return bästföre;

public int vikt() { return vikt; LÖSNINGSFÖRSLAG 1 /** * En version av lastbärare som använder abstrakta metoder för att hålla * reda på hur många paket som får plats och hur mycket lastbäraren väger * Den totala vikten anges i gram. */ public abstract class LastbärareV1 { private ArrayList<Mjölkpaket> paket = new ArrayList<>(); protected abstract int maxpaket(); public void läggtill(mjölkpaket p) { if (antalpaket() < maxpaket()) { paket.add(p); public int antalpaket() { return paket.size(); protected abstract int lastbärarvikt(); public int totalvikt() { int total = lastbärarvikt(); for (Mjölkpaket p : paket) { total += p.vikt(); return total; public int bästföre() { if (antalpaket() == 0) { // Här saknas det information i uppgiften om vad som ska // returneras, så vi gör ett antagande och returnerar -1, en // vanlig felkod. return -1; else { int sämstdatum = paket.get(0).bästföre(); for (Mjölkpaket p : paket) {

if (p.bästföre() < sämstdatum) { sämstdatum = p.bästföre(); return sämstdatum; public class RullpallV1 extends LastbärareV1 { protected int maxpaket() { return 180; protected int lastbärarvikt() { return 10000; public class BackV1 extends LastbärareV1 { protected int maxpaket() { return 20; protected int lastbärarvikt() { return 1000;

LÖSNINGSFÖRSLAG 2 /** * En version av lastbärare som använder variabler satta i konstruktorn * för att hålla reda på hur många paket som får plats och hur mycket * lastbäraren väger. Den totala vikten anges i gram. */ public abstract class LastbärareV2 { private ArrayList<Mjölkpaket> paket = new ArrayList<>(); private int maxpaket; private int lastbärarvikt; public LastbärareV2(int max, int vikt) { maxpaket = max; lastbärarvikt = vikt; public void läggtill(mjölkpaket p) { if (antalpaket() < maxpaket) { paket.add(p); public int antalpaket() { return paket.size(); public int totalvikt() { int total = lastbärarvikt; for (Mjölkpaket p : paket) { total += p.vikt(); return total; public int bästföre() { if (antalpaket() == 0) { // Här saknas det information i uppgiften om vad som ska // returneras, så vi gör ett antagande och returnerar -1, en // vanlig felkod. return -1; else { int sämstdatum = paket.get(0).bästföre(); for (Mjölkpaket p : paket) { if (p.bästföre() < sämstdatum) { sämstdatum = p.bästföre();

return sämstdatum; public class RullpallV2 extends LastbärareV2 { public RullpallV2() { super(180, 10000); public class BackV2 extends LastbärareV2 { public BackV2() { super(20, 1000);