Laboration 16. Uppgift 1

Relevanta dokument
Malmö högskola 2007/2008 Teknik och samhälle. public String tostring() { return "Media: ID = " + this.id + ", Titel = " + this.

Laboration 3. Uppgift 1

Malmö högskola 2008/2009 CTS

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

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

Laboration 13, Arrayer och objekt

TENTAMEN OOP

TENTAMEN OOP

Klasshierarkier - repetition

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

OOP Objekt-orienterad programmering

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

Objektorienterad programmering i Java

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

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

Konstruktion av klasser med klasser

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

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

OOP Objekt-orienterad programmering

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

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

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

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

Lösningsförslag till tentamen

Laboration 1 - Grunderna för OOP i Java

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.

OOP Tentamen

Del A (obligatorisk för alla)

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.

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

TENTAMEN OOP

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

OOP Objekt-orienterad programmering

OOP Tenta

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

Föreläsning 9: Arv och UML

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Laboration A Objektsamlingar

TDDD78 Viktiga begrepp, del 2

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

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

Tentamen. Lösningsförslag

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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.

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

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

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

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

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

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

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

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

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

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

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

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Del A (obligatorisk för alla)

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

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

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

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

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

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

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

Lösningsförslag övning 2.

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

Design av en klass BankAccount som representerar ett bankkonto

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

DD1342 Programkonstruktion för F1,

Malmö högskola 2012/2013 Teknik och samhälle

Lösningsförslag till exempeltenta 2

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

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

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

Objektorienterad Programmering (TDDC77)

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen i Programmeringsteknik I, ES,

Polymorfi. Objektorienterad och komponentbaserad programmering

JAVAUTVECKLING LEKTION 11

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

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

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

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

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

Lösningsförslag till exempeltenta 1

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

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

Lösningar till tentamen i EDAF25

Repetition av viktiga begrepp inom objektorienterad programmering

Tentamen, EDAA20/EDA501 Programmering

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

Transkript:

Laboration 16 Avsikt Avsikten med denna laboration är att öva på arv i objektorienterad programmering. Du ska skapa en klasshierarki som ser ut som figuren till höger: Fordon MotorFordon Bil Motorcykel Uppgift 1 Skriv klassen Fordon enligt beskrivningen nedan. Ägaren är av typen String. Klassen Fordon instansvariabel: ägare metoder: konstruktorer setägare getägare tostring Skapa sedan en testklass med följande main-metod: public static void main(string[] args){ Fordon f1= new Fordon(); Fordon f2= new Fordon("Lina Nilsson"); System.out.println(f1); System.out.println(f2); f1.setägare("ola Torstensson"); System.out.println(f1.getÄgare()); Körning ger följande utskrift: Ägare: Okänd ägare Ägare: Lina Nilsson Ola Torstensson DA129A Programmering 1 1

Uppgift 2 Skriv klassen MotorFordon enligt beskrivningen nedan. Hästkrafter är av typen int. Klassen MotorFordon: är subklass till kassen Fordon (ärver från Fordon) instansvariabler: hk (hästkraft) metoder: konstruktorer gethk sethk tostring I tostring-metoden ska ett anrop till tostring-metoden i superklassen Fordon göras: super.tostring() Skapa en testklass med följande main-metod: public static void main(string[] args){ MotorFordon m1= new MotorFordon(); MotorFordon m2= new MotorFordon("Lina Nilsson",100); System.out.println(m1); System.out.println(m2); m1.setägare("ola Torstensson"); m1.sethk(200); System.out.println(m1); Körning ger följande utskrift: Ägare: Okänd ägare Motorns hästkrafter: 0 Ägare: Lina Nilsson Motorns hästkrafter: 100 Ägare: Ola Torstensson Motorns hästkrafter: 200 Uppgift 3 Skriv klasserna Bil och Motorcykel enligt nedanstående beskrivningar: Klassen Bil är subklass till klassen MotorFordon (ärver från MotorFordon) instansvariabler: regnr (registreringsnummer) metoder: konstruktorer getregnr setregnr tostring 2

Klassen Motorcykel är subklass till klassen MotorFordon (ärver från MotorFordon) instansvariabler: regnr (registreringsnummer) metoder: konstruktorer getregnr setregnr tostring I tostring-metoden ska ett anrop till tostring-metoden i superklassen MotorFordon göras: super.tostring() Gör en testklass som har följande main-metod: public static void main(string[] args) { Fordon[] fordonslista= new Fordon[3]; fordonslista[0]=new Bil("Doris Bengtsson",80,"FGT 450"); fordonslista[1]=new Motorcykel("Klas Bengtsson",70,"KKI 333"); Bil b=new Bil(); b.setägare("fredrik Hansson"); b.sethk(100); b.setregnr("hhh 778"); fordonslista[2]=b; for (int i=0;i<fordonslista.length;i++){ System.out.println(fordonslista[i].getClass()); System.out.println(fordonslista[i]); System.out.println(); Körning ger följande utskrift: class Bil Ägare: Doris Bengtsson Motorns hästkrafter: 80 Registeringsnummer: FGT 450 class Motorcykel Ägare: Klas Bengtsson Motorns hästkrafter: 70 Registeringsnummer: KKI 333 class Bil Ägare: Fredrik Hansson Motorns hästkrafter: 100 Registeringsnummer: HHH 778 Uppgift 4 Skapa ny klass Cykel med en ägare och ett antal växlar. Vad är det lämpligt att Cykel ärver ifrån? Gör lämpliga metoder åt den nya klassen. Testa denna klass genom att göra en testklass med en main-metod. 3

Extrauppgift 1 Lägg till metoden public int compareto(object o) i klassen MotorFordon. Anropet b1.compareto(b2) ska retunera 1 om b1 har en motor med fler hästkrafter än b2. -1 om b2 har en motor med fler hästkrafter än b1 och 0 om deras motoerer har lika många hästkrafter. Använd denna metod för att skapa en metod i en testklass som utifrån en lista av MotorFordon och ett intervall returnerar en ny lista med de MotorFordon som har motorer med antalet hästkrafter inom intervallet. Metodhuvudet ska se ut så här: public MotorFordon[] inomintervallet(motorfordon[] inlista,int min,int max) Om det inte finns några MotorFordon inom intervallet retuneras en lista med längden 0. Testa din metod. Extrauppgift 2 Lägg till metoden public boolean equals(object o) hos alla klasserna i klassheirakin. Använd denna metod för att söka i en lista över olika fordon och se om ett fordon finns i listan. Du ska skapa en testklass som har en lista av fordon bestående av alla typer av fordon d.v.s. minst fem stycken. Du ska sedan låta användaren mata in en beskrivning på ett fordon och skapa ett objekt utifrån beskrivningen. Sedan ska du undersöka om fordonet finns i listan med hjälp av metoden equals. Ett krav för att två objekt ska vara lika det är att de är av samma typ. Ett sätt att kontrollera om två objekt tillhör samma klass är att använda getclass-metoden på båda objekten och sedan jämföra class-objekten med varandra (med equals-metoden). Ex. Class cls1 = this.getclass(); Class cls2 = o.getclass(); if( cls1.equals(cls2) ) {... eller if( this.getclass().equals(o.getclass()) ) {... returnerar true om this och o refererar till samma typ av objekt. Det kan vara lämpligt att kolla detta innan man försöker omvandla objektet till en mer specialiserad typ. 4

Förslag till lösningar public class Fordon { private String ägare; public Fordon() { this("okänd ägare"); public Fordon(String ägare) { this.ägare = ägare; public void setägare(string ägare) { this.ägare = ägare; public String getägare() { return ägare; return "Ägare: " + ägare; Fordon f = (Fordon) o; lika = ägare.equals(f.getägare()); ------------------------------------------------------ public class MotorFordon extends Fordon { private int hk; public MotorFordon() { public MotorFordon(String ägare, int hk) { super(ägare); this.hk = hk; public void sethk(int hk) { this.hk = hk; public int gethk() { return hk; return super.tostring() + " Motorns hästkrafter: " + hk; 5

MotorFordon m = (MotorFordon) o; lika = (hk == m.gethk()) && (super.equals(o)); // Extrauppgift 1 public int compareto(object o) { MotorFordon m = (MotorFordon) o; if(hk<m.gethk()) return -1; else if(hk>m.gethk()) return 1; else return 0; // Extrauppgift 1 public static MotorFordon[] inomintervallet(motorfordon[] inlista, int min, int max) { int antal = 0; MotorFordon[] res; for(int i=0; i<inlista.length; i++) if( (inlista[i].gethk()>=min) && (inlista[i].gethk()<=max) ) antal++; res = new MotorFordon[antal]; // fungerar även då antal==0 for(int i=inlista.length-1; i>=0; i--) if( (inlista[i].gethk()>=min) && (inlista[i].gethk()<=max) ) { antal--; res[antal] = inlista[i]; return res; // Test av extrauppgift 1 public static void main(string[] args){ MotorFordon[] fordon = {new MotorFordon("A",100), new MotorFordon("B",150),new MotorFordon("C",80), new MotorFordon("D",100),new MotorFordon("E",110); MotorFordon[] resultat = inomintervallet(fordon, 95, 110); for(int i=0; i<resultat.length; i++) System.out.println(resultat[i]); ------------------------------------------------------ public class Bil extends MotorFordon { private String regnr; public Bil() { regnr=""; public Bil(String ägare, int hk, String regnr) { super(ägare, hk); this.regnr = regnr; public void setregnr(string regnr) { this.regnr = regnr; 6

public String getregnr() { return regnr; return super.tostring() + " Registreringsnummer: " + regnr; Bil b = (Bil) o; lika = regnr.equals(b.getregnr()); // Registreringsnummer unika ------------------------------------------------------ public class Motorcykel extends MotorFordon { private String regnr; public Motorcykel() { regnr=""; public Motorcykel(String ägare, int hk, String regnr) { super(ägare, hk); this.regnr = regnr; public void setregnr(string regnr) { this.regnr = regnr; public String getregnr() { return regnr; return super.tostring() + " Registreringsnummer: " + regnr; Motorcykel m = (Motorcykel) o; lika = regnr.equals(m.getregnr()); // Registreringsnummer unika ------------------------------------------------------ public class Cykel extends Fordon { private int växlar=1; /** Creates a new instance of Cykel */ public Cykel() { public Cykel(String ägare, int växlar) { 7

super(ägare); this.växlar = växlar; public void setväxlar(int växlar) { this.växlar = växlar; public int getväxlar() { return växlar; return super.tostring() + " Antal växlar: " + växlar; Cykel c = (Cykel) o; lika = (växlar == c.getväxlar()) && (super.equals(o)); public static void main(string[] args){ Cykel c1= new Cykel(); Cykel c2= new Cykel("Sven Jakobi",21); System.out.println(c1); System.out.println(c2); c1.setägare("inga Bok"); c1.setväxlar(3); System.out.println(c1.getÄgare() + " " + c1.getväxlar() + " växlar"); 8