Malmö högskola 2008/2009 CTS



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

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

Tentamen. Lösningsförslag

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

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

Laboration 13, Arrayer och objekt

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.

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

Laboration A Objektsamlingar

JAVAUTVECKLING LEKTION 11

Laboration 1 - Grunderna för OOP i Java

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.

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Lösningsförslag övning 2.

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

TENTAMEN OOP

Objektorienterad programmering D2

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

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

OOP Objekt-orienterad programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

Föreläsning 5-6 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.

DD1342 Programkonstruktion för F1,

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

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

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar

Tentamen OOP

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

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 2 Objektorienterad programmering DD1332. Typomvandling

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

Del A (obligatorisk för alla)

Del A (obligatorisk för alla)

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

Tentamen i Programmeringsteknik I

Laboration 16. Uppgift 1

TUTORIAL: KLASSER & OBJEKT

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

JAVA Mer om klasser och objektorientering

LÖSNINGSFÖRSLAG TENTAMEN

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

TENTAMEN OOP

Modeller, Objekt och Klasser

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

(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

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

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

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

Objektorienterad programmering i Java

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

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

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.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

DAT043 Objektorienterad Programmering

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Laboration 24 Databasen MySQL och java

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Objektorienterad programmering Föreläsning 5

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Objektorienterad Programmering DAT043

Objekt och referenser

Objektsamlingar i Java

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Mer om klasser och objekt

OOP Objekt-orienterad programmering

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Malmö högskola 2008/2009 CTS

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

OOP Objekt-orienterad programmering

Laboration 3. Uppgift 1

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

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

Transkript:

Laboration 8 Avsikten med laborationen är att du lära dig skapa objekt med hjälp av klasser. Detta är en introduktion till ett objektorienterat tankesätt. Med hjälp av detta tankesätt kan du så småningom skapa större program. Java är ett programmeringspråk som understödjer den objektorienterade programmeringsstilen. Skapa paketet laboration8 innan du fortsätter på laborationen. Uppgift 1a Du ska skapa en klass Anstalld. Klassdiagrammet till höger beskriver vad klassen Anstalld ska innehålla. Diagrammet visar i vanlig ordning: Klassens namn Klassens attribut (instansvariabler). Minus-tecknet före namnet anger att synligheten ska vara private. Klassens metoder (instansmetoder). Plus-tecknet före namnet anger att metoden ska vara public. En anställd har tre egenskaper (attribut): namn, arbetsgivare och lön. namn och arbetsgivare är av typen String och lön av typen double. Attributen ska ha modifieraren private. En deklaration av attributet namn ser ut så här: private String namn; Lägg till detta och de övriga två attributen i klassen. Anstalld - namn : String - arbetsgivare : String - lön : double + setnamn(string) + setarbetsgivare(string) + setlön(double) + getnamn() : String + getarbetsgivare() : String + getlön() : String Då attributen är deklararade med modifieraren private så kan bara metoder i klassen Anstalld komma åt värdet. Om man vill att andra klasser ska kunna påverka eller se attributensvärde så ska man ha get-metoder och/eller set-metoder. En set-metod för attributet namn ser ut så här: public void setnamn(string n){ this.namn = n; En get-metod retunerar ett attributsvärde. En get-metod för attributets namn ser ut så här: public String getnamn(){ return this.namn; Skriv set-metoder och get-metoder till alla attribut så att du kan testa klassen Anstalld med nedanstående testprogram. DA129A, Programmering 1 1

Testprogram // Den första anställda skapas Anstalld a1=new Anstalld(); a1.setnamn("anna Olsson"); a1.setarbetsgivare("eriksson"); a1.setlön(25700); // Den andra anställda skapas Anstalld a2=new Anstalld(); a2.setnamn("pontus Persson"); a2.setarbetsgivare("malmö högskola"); a2.setlön(23900); //De anställda skrivs ut System.out.println(); System.out.println(a1.getNamn()+ " har anställning hos " + a1.getarbetsgivare() + " med lönen " + a1.getlön() + "."); System.out.println(); System.out.println(a2.getNamn()+ " har anställning hos " + a2.getarbetsgivare() + " med lönen " + a2.getlön() + "."); Körresultat Anna Olsson har anställning hos Eriksson med lönen 25700.0. Pontus Persson har anställning hos Malmö högskola med lönen 23900.0. Uppgift 1b Skapa en metod tostring i din klass Anstalld med metodhuvudet: public String tostring() { return ""; // Ersätt "" med en vettig sträng Metoden tostring returnerar ett värde av typen String, vilket innebär att det i metodkroppen måste finnas en rad som ser ut på följande sätt: return en sträng ; Då du gör anropet System.out.println( a1.tostring() ); ska utskriften se ut så här: Anna Olsson har anställning hos Eriksson med lönen 25700.0. Ändra i testprogrammet för att testa din tostring-metod. Uppgift 2 Du ska skriva klassen Bostad vilken ska representera en bostad. Viktiga egenskaper i klassen är bostadsyta och antalet rum. Klassdiagrammet till höger beskriver de instansvariabler och metoder (instansmetoder) som ska ingå i klassen: Instansvariabler: private double bostadsyta; private int antalrum; Metoder: public void setbostadsyta(double yta) public void setantalrum(int antal) public double getbostadsyta() public int getantalrum() public String tostring() Bostad - bostadsyta:double - antalrum:int + setbostadsyta(double) + setantalrum(int) + getbostadsyta():double + getantalrum():int + tostring():string - private + public 2

Nedan ser du ett testprogram och körresultatet av programmet. Testprogram Bostad bostad1 = new Bostad(); Bostad bostad2 = new Bostad(); bostad1.setbostadsyta(55); bostad1.setantalrum(2); bostad2.setbostadsyta(108.6); bostad2.setantalrum(4); System.out.println(bostad1.toString()); System.out.println("Yta: " + bostad2.getbostadsyta() + " m2" + " Antal rum: " + bostad2.getantalrum()); Körresultat Bostad med ytan 55.0 m2 och 2 rum. Yta: 108.6 m2 Antal rum: 4 Uppgift 3 Du ska skriva klassen Vara vilken ska representera en vara i en affär. Viktiga egenskaper i klassen är varans namn, varans pris och antalet exemplar i affären. Klassdiagrammet till höger beskriver de instansvariabler och metoder (instansmetoder) som ska ingå i klassen. Nedan ser du ett testprogram och körresultatet av programmet. Testprogram Vara envara = new Vara(); envara.setnamn("standardmjölk"); envara.setpris(8.20); envara.setantal(120); Output.meddelande(enVara.toString()); envara.setnamn("7-växlad Crescent"); Output.meddelande(enVara.getNamn() + ": Pris=" + Output.format(enVara.getPris(),0,2) + " kr Antal=" + envara.getantal()); Körresultat Vara - namn : String - pris : double - antal : int + setnamn(string) + setpris(double) + setantal(int) + getnamn() : String + getpris() : double + getantal() : int + tostring():string 3

Uppgift 4 Nu ska du lägga till ett par metoder i klassen Anstalld. Gör en metod som beräknar årslönen för en anställd med följande metodhuvud public double årslön() Metoden ska alltså returnera en double. Returvärdet ska vara den anställdes årslön. Ändra i testprogrammet (Uppgift 1) för att testa din årslön-metod. Gör en metod som kontrollerar om två anställda har samma arbetsgivare: public boolean sammaarbetsgivare(anstalld a) Metoden ska returnera true om attributet arbetsgivare är det samma som a s arbetsgivare. Du ska använda metoden equals, som finns i klassen String, för att jämföra strängarna. String s1, s2; : if(s1.equals(s2)) { // s1.equals(s2) är true om strängarna samma, annars false : Ändra i testprogrammet (Uppgift 1) för att testa din sammaarbetsgivare-metod. Uppgift 5 Komplettera klassen Bostad med nedanstående metoder. Men testa metoderna en åt gången tills de fungerar. public double kvmperrum() Metoden ska räkna ut antalet kvadratmeter bostadsyta per rum för aktuellt objekt. Resultatet av beräkningen ska returneras. Bostad b = new Bostad(); b.setbostadsyta(110); b.setantalrum(5); System.out.println(b.kvmPerRum); Ger utskriften: 22.0 public double jämförbostadsyta(bostad b) Metoden ska jämföra två bostäder, aktuellt objekt och inparametern b, avseende deras yta. Beräkna skillnaden mellan ytan i aktuellt objekt och ytan i b. Returnera skillnaden. Detta innebär att * om aktuellt objekt har störst yta så returneras ett positivt värde (>0). * om bostäderna har samma yta så returneras 0. * om bostaden b har störst yta så returneras ett negativt värde (<0). Extrametod public Bostad flestrum(bostad b) Metoden ska returnera en referens till den bostad som har flest rum. Om de har lika många rum ska referens till aktuellt objekt returneras. 4

Uppgift 6 Komplettera klassen Bostad med följande konstruktorer: public Bostad() Denna konstruktor ska sätta bostadsytan till 100 m 2 och antalet rum till 4. public Bostad(double inbostadsyta, int inantalrum) Denna konstruktor ska föra över parametrarnas värde till attributen i klassen. Bostad bostad1 = new Bostad(); Bostad bostad2 = new Bostad(55,2); System.out.println(bostad1.toString()); System.out.println(bostad2.toString()); Ger utskriften Bostad med ytan 100.0 m2 och 4 rum. Bostad med ytan 55.0 m2 och 2 rum. - bostadsyta:double - antalrum:int Bostad + Bostad() + Bostad(double, int) + setbostadsyta(double) + setantalrum(int) + getbostadsyta():double + getantalrum():int + tostring():string + kvmperrum() : double +jämförbostadsyta(bostad b) : double + copybostad() : Bostad + flestrum(bostad b) : Bostad Extrametod public Bostad copybostad() Metoden ska returnera en kopia av aktuellt objekt. Uppgift 7 Komplettera klassen Vara med följande metoder: public boolean slut() Metoden ska returnera true om det finns minst ett exemplar av varan. Annars ska metoden returnera false. public Vara billigast(vara v) Metoden ska returnera en referens till den billigaste varan. Komplettera klassen Vara med följande konstruktorer: public Vara(String namn, double pris, int antal) Denna konstruktor ska föra över parametrarnas värde till attributen i klassen. public Vara(Vara v) Denna konstruktor ska föra v:s värde (på attributen) till attributen i klassen. Denna kosntruktor kallas ibland för kopieringskonstruktor. Det nya objektet blir en kopia av objektet som används som argument. Vara vara1 = new Vara("Standardmjölk", 8.20, 120); Vara vara2 = new Vara(vara1); vara2.setpris(8.45); System.out.println(vara1.toString()); System.out.println(vara2.toString()); Ger utskriften Standardmjölk: Pris=8.20 kr Antal=120 Standardmjölk: Pris=8.45 kr Antal=120 5

Uppgift 8 I denna uppgift ska du arbeta med klassen Anstalld. Lägg till följande konstruktorer i klassen: public Anstalld(String namn, String arbetsgivare, double lön) Denna konstruktor ska föra över parametrarnas värde till attributen i klassen. public Anstalld(String namn) Denna konstruktor ska skapa objektet anropa konstruktorn Anstalld(String, double). public Anstalld(String namn, double lön) Denna konstruktor ska skapa objektet anropa konstruktorn Anstalld(String, String, double). Anstalld a1=new Anstalld("Rut Andersson"); Anstalld a2=new Anstalld("Ragnar Olsson",20000); Anstalld a3=new Anstalld("Ragnar Olsson","Gambro", 23000); String res = a1.tostring() + "\n" + a2.tostring() + "\n" + a3.tostring(); javax.swing.joptionpane.showmessagedialog( null, res ); Ger körresultatet 6

Lösningsförslag package laboration8; public class Anstalld { private String namn; private String arbetsgivare; private double lön; public void setnamn(string n) { this.namn = n; public void setarbetsgivare(string a) { this.arbetsgivare = a; public void setlön(double l) { this.lön = l; public String getnamn() { return this.namn; public String getarbetsgivare() { return this.arbetsgivare; public double getlön() { return this.lön; public String tostring() { return (this.namn + " har anställning hos " + this.arbetsgivare + " med lönen " + this.lön + "."); package laboration8; public class Bostad { private double bostadsyta; private int antalrum; public void setbostadsyta(double yta) { this.bostadsyta = yta; public void setantalrum(int antal) { this.antalrum = antal; public double getbostadsyta() { return this.bostadsyta; public int getantalrum() { return this.antalrum; 7

public String tostring() { return "Bostad med ytan " + this.bostadsyta + " m2 och " + this.antalrum + " rum."; public static void main(string[] args) { Bostad bostad1 = new Bostad(); Bostad bostad2 = new Bostad(); bostad1.setbostadsyta(55); bostad1.setantalrum(2); bostad2.setbostadsyta(108.6); bostad2.setantalrum(4); System.out.println(bostad1.toString()); System.out.println("Yta: " + bostad2.getbostadsyta() + " m2" + " Antal rum: " + bostad2.getantalrum()); package laboration8; import javax.swing.*; public class Vara { private String namn; private double pris; private int antal; public void setnamn(string varunamn) { this.namn = varunamn; public void setpris(double varupris) { this.pris = varupris; public void setantal(int antalvaror) { this.antal = antalvaror; public String getnamn() { return this.namn; public double getpris() { return this.pris; public int getantal() { return this.antal; public String tostring() { String res = this.namn + ": Pris=" + String.format( "%1.2f", this.pris ) + " kr Antal=" + this.antal; return res; public static void main(string[] args) { Vara envara = new Vara(); envara.setnamn("standardmjölk"); 8

envara.setpris(8.20); envara.setantal(120); JOptionPane.showMessageDialog( null, envara.tostring() ); envara.setnamn("7-växlad Crescent"); JOptionPane.showMessageDialog( null, envara.getnamn() + ": Pris=" + String.format( "%1.2f", envara.getpris() ) + " kr Antal=" + envara.getantal() ); // Uppgift 4 public double årslön() { return 12 * this.lön; public boolean sammaarbetsgivare(anstalld a) { return this.arbetsgivare.equals(a.getarbetsgivare()); // Uppgift 5 public double jämförbostadsyta(bostad b) { return this.bostadsyta - b.getbostadsyta(); public double kvmperrum() { return this.bostadsyta / this.antalrum; // Extrauppgift public Bostad flestrum(bostad b) { if(this.antalrum < b.antalrum) return b; return this; // Uppgift 6 public Bostad() { this.bostadsyta = 100; this.antalrum = 4; public Bostad(double bostadsyta, int antalrum) { this.bostadsyta = bostadsyta; this.antalrum = antalrum; // Extrauppgift public Bostad copybostad() { return new Bostad( this.bostadsyta, this.antalrum ); // Uppgift 7 public boolean slut() { return this.antal==0; public Vara billigast(vara v) { if(this.pris <= v.getpris()) return this; return v; 9

public Vara(String namn, double pris, int antal) { this.namn = namn; this.pris = pris; this.antal = antal; public Vara(Vara v) { this(v.getnamn(), v.getpris(), v.getantal()); // Uppgift 8 // Arbetsgivare: Okänd, Lön: 0 public Anstalld(String namn) { this( namn, 0 ); // Arbetsgivare: Okänd public Anstalld(String namn, double lön) { this( namn, "Okänd arbetsgivare", lön ); public Anstalld(String innamn, String inarbetsgivare, double inlön) { this.namn = innamn; this.arbetsgivare = inarbetsgivare; this.lön = inlön; 10