OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
Repetition av objektorientering
OOP Objekt-orienterad programmering
Objektorienterad utveckling Lektion 2 Objekt, överlagring, överskuggning, klasshierarkier och dynamisk bindning KTH Peter Mozelius.
Metoder i java Det finns två typer av metoder i java
Arv.
Abstract & sealed.
Polymorfism.
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Klasser och objekt Klasser, objekt och instansvariabler
int res2=Math.max(tal1,tal2);
4. Arv och dynamisk bindning
Vektorer (klassen Vector) Sortering
Föreläsning 10 Minnesbilder. Minnesbilder steg 1 char ch; int[] vek; Bil bilen; Bil int[] char ch vek bilen.
Arv.
Programmeringsteknik för Media1 & K1
OOP F6:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList toString() – metoden.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
1. Ett problem/uppgift.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Central-enhet PM CPU BIOS Skiv- minne Sekundär- minnes- enheter (SM)
7. Delegerare och notifierare
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
Arv, abstrakta klasser och gränssnitt
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
Länkade listor á la C/C++
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2

OOP F14:2 Stefan Möller Träd idnr höjd diameter volym antalGrenar idnr – trädets nummer, unikt för varje träd höjd – trädets höjd i (hela) decimeter diameter – trädets diameter i (hela) decimeter volym – trädets volym i kubikdecimetrar antalGrenar – trädets antal grenar

OOP F14:3 Stefan Möller class Trad{ private int idnr; private int höjd, diameter; private double volym; private int antalGrenar; } attribut initierade, har ett initialvärde int och double 0, eventuella referenser pekar på null Hur skall attributen få värden? Träd idnr höjd diameter volym antalGrenar

OOP F14:4 Stefan Möller class Trad{ private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private double volym; private int antalGrenar; } Variabeln idnr skall få automatiskt nummer. Första trädet som skapas 1, andra 2 osv. Träd idnr höjd diameter volym antalGrenar

OOP F14:5 Stefan Möller class Trad{ private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private double volym; private int antalGrenar; public Trad(int h, int d, int ag){ höjd=h; diameter=d; antalGrenar=ag; } höjd, diameter och antalGrenar anges vid skapandet av ett träd får värde via konstruktorn Träd idnr höjd diameter volym antalGrenar

OOP F14:6 Stefan Möller class Trad{ private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private double volym; private int antalGrenar; public Trad(int h, int d, int ag){ höjd=h; diameter=d; antalGrenar=ag; volym=Math.pow(diameter/2.0, 2)*Math.PI*höjd; } volymen beräknas ur höjd och diamater

OOP F14:7 Stefan Möller class Trad{ private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private int antalGrenar; public Trad(int h, int d, int ag){ höjd=h; diameter=d; antalGrenar=ag; } public double getVolym(){ return Math.pow(diameter/2.0, 2)*Math.PI*höjd; } volymen beräknas i en metod – bättre ifall diameter eller höjd ändras!

OOP F14:8 Stefan Möller import java.util.Random; class Trad{ private static Random rand = new Random(); private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private int antalGrenar; public Trad(int h, int d, int ag){ höjd=h; diameter=d; antalGrenar=ag; } public Trad(){ höjd=rand.nextInt(60)+30; diameter=rand.nextInt(10)+3; antalGrenar=rand.nextInt(25)+5; } public double getVolym(){ return Math.pow(diameter/2.0, 2)*Math.PI*höjd; } Extra konstruktor för genererande av slumpskapade träd (t.ex. för testning)

OOP F14:9 Stefan Möller import java.util.Random; class Trad{ private static Random rand = new Random(); private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private int antalGrenar; public double getVolym(){ return Math.pow(diameter/2.0, 2)*Math.PI*höjd; } public int getHöjd(){ return höjd; } public int getAntalGrenar(){ return antalGrenar; } Åtkomstmetoder för de attribut man behöver kunna avläsa. (behöver inte vara alla attribut)

OOP F14:10 Stefan Möller import java.util.Random; class Trad{ private static Random rand = new Random(); private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private int antalGrenar; public void ändraGrenar(int nya){ antalGrenar+=nya; if (antalGrenar<0) antalgrenar=0; } public void väx(){ höjd+=2; diameter+=1; } Förändringsmetoder för de attribut som skall kunna förändras. (behöver inte vara alla attribut)

OOP F14:11 Stefan Möller import java.util.Random; class Trad{ private static Random rand = new Random(); private static int antal = 0; private int idnr = ++antal; private int höjd, diameter; private int antalGrenar; public double getVolym(){ return Math.pow(diameter/2.0, 2)*Math.PI*höjd; } public String toString(){ return "Träd nr "+idnr+" Höjd="+höjd+" Diameter="+diameter +" Antal grenar="+antalGrenar+" Volym="+getVolym(); } toString-metod för enkel utskrift.

OOP F14:12 Stefan Möller Träd idnr höjd diameter volym antalGrenar Barr antalKottar Löv

OOP F14:13 Stefan Möller class Barr extends Trad{ private int antalKottar; } class Lov extends Trad{ } class Trad{ //som tidigare } Superklassen oförändrad. Subklasserna måste anpassas till superklassens konstruktor(er).

OOP F14:14 Stefan Möller class Barr extends Trad{ private int antalKottar; public Barr(int hö, int di, int gren, int kott){ super(hö, di, gren); antalKottar=kott; } class Lov extends Trad{ public Lov(int hö, int di){ super(hö, di, 15); } class Trad{ public Trad(int h, int d, int ag){ höjd=h; diameter=d; antalGrenar=ag; }

OOP F14:15 Stefan Möller class Barr extends Trad{ private int antalKottar; public Barr(){ antalKottar=100; } class Lov extends Trad{ public Lov(){ } class Trad{ public Trad(){ höjd=rand.nextInt(60)+30; diameter=rand.nextInt(10)+3; antalGrenar=rand.nextInt(25)+5; }

OOP F14:16 Stefan Möller class Barr extends Trad{ private int antalKottar; } class Lov extends Trad{ } class Trad{ public String toString(){ return "Träd nr "+idnr+" Höjd="+höjd+" Diameter="+diameter +" Antal grenar="+antalGrenar+" Volym="+getVolym(); }

OOP F14:17 Stefan Möller class Barr extends Trad{ private int antalKottar; public String toString(){ return "Barr"+super.toString()+" Kottar="+antalKottar; } class Lov extends Trad{ public String toString(){ return "Löv"+super.toString(); } class Trad{ public String toString(){ return "Träd nr "+idnr+" Höjd="+höjd+" Diameter="+diameter +" Antal grenar="+antalGrenar+" Volym="+getVolym(); }

OOP F14:18 Stefan Möller Träd idnr höjd diameter volym antalGrenar Barr antalKottar Löv Ofta(st) skapas objekt endast från lövnoder (noder utan subklasser). För att hindra att Träd-objekt skapas kan klass Träd göras abstract. abstract class Trad{ //resten som tidigare }

OOP F14:19 Stefan Möller Fordon Tåg BussBil Taxi Dock inte alltid, det finns tillfällen då man vill kunna skapa objekt från en klass som har subklass(er)

OOP F14:20 Stefan Möller Träden har ett värde. Barrträd är värda 100 per kubikdecimeter. Lövträd är värda 200 per kubikdecimeter plus 5 för varje gren. class Barr extends Trad{ public double värde(){ return 100*getVolym(); } class Lov extends Trad{ public double värde(){ return 200*getVolym()+5*getAntalGrenar(); } class Trad{ }

OOP F14:21 Stefan Möller Träden har ett värde. Barrträd är värda 100 per kubikdecimeter. Lövträd är värda 200 per kubikdecimeter plus 5 för varje gren. class Barr extends Trad{ public double värde(){ return 100*getVolym(); } class Lov extends Trad{ public double värde(){ return 200*getVolym()+5*getAntalGrenar(); } abstract class Trad{ abstract public double värde(); }

OOP F14:22 Stefan Möller Vi vill skapa ett nytt träd med attributvärden satta av en användare. Det nya trädet skall in i en samling. Följande finns: Scanner scan = new Scanner(System.in); ArrayList alla = new ArrayList (); Vad behöver matas in? De attributen som konstruktorerna kräver. Samt om det är ett barrträd eller lövträd.

OOP F14:23 Stefan Möller Vi vill skapa ett nytt träd med attributvärden satta av en användare. Det nya trädet skall in i en samling. Följande finns: Scanner scan = new Scanner(System.in); ArrayList alla = new ArrayList (); Vad behöver matas in? De attributen som konstruktorerna kräver. Samt om det är ett barrträd eller lövträd. class Barr extends Trad{ public Barr(int hö, int di, int gren, int kott){ super(hö, di, gren); antalKottar=kott; } class Lov extends Trad{ public Lov(int hö, int di){ super(h, d, 15); }

OOP F14:24 Stefan Möller System.out.print("Vilken sorts träd (1=Barr, 2=Löv): "); int sort = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets höjd: "); int höjd = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets diameter: "); int diameter = Integer.parseInt(scan.nextLine()); Trad nytt; if (sort==1){ System.out.print("Ange trädets antal grenar: "); int grenAntal = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets antal kottar: "); int kottAntal = Integer.parseInt(scan.nextLine()); nytt=new Barr(höjd, diameter, grenAntal, kottAntal); } else { nytt = new Lov(höjd, diameter); } alla.add(nytt); Indatakontroller!?

OOP F14:25 Stefan Möller try{ System.out.print("Vilken sorts träd (1=Barr, 2=Löv): "); int sort = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets höjd: "); int höjd = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets diameter: "); int diameter = Integer.parseInt(scan.nextLine()); Trad nytt; if (sort==1){ System.out.print("Ange trädets antal grenar: "); int grenAntal = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets antal kottar: "); int kottAntal = Integer.parseInt(scan.nextLine()); nytt=new Barr(höjd, diameter, grenAntal, kottAntal); } else { nytt = new Lov(höjd, diameter); } alla.add(nytt); } catch (NumberFormatException e){ System.out.println("Fel – skall vara ett numeriskt värde"); }

OOP F14:26 Stefan Möller int sort; for (;;){ try { System.out.print("Vilken sorts träd (1=Barr, 2=Löv): "); sort = Integer.parseInt(scan.nextLine()); break; } catch (NumberFormatException e){ System.out.println("Fel – skall vara ett numeriskt värde"); } System.out.print("Ange trädets höjd: "); int höjd = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets diameter: "); int diameter = Integer.parseInt(scan.nextLine()); Trad nytt; if (sort==1){ System.out.print("Ange trädets antal grenar: "); int grenAntal = Integer.parseInt(scan.nextLine()); System.out.print("Ange trädets antal kottar: "); int kottAntal = Integer.parseInt(scan.nextLine()); nytt=new Barr(höjd, diameter, grenAntal, kottAntal); } else { nytt = new Lov(höjd, diameter); } alla.add(nytt);

OOP F14:27 Stefan Möller int readInt(String fråga){ for(;;){ try{ System.out.print(fråga); int x=Integer.parseInt(scan.nextLine()); return x; } catch (NumberFormatException e){ System.out.println("Fel - skall vara numeriskt värde"); } int sort = readInt("Vilken sorts träd (1=Barr, 2=Löv): "); int höjd = readInt("Ange trädets höjd: "); int diameter = readInt("Ange trädets diameter: "); Trad nytt; if (sort==1){ int grenAntal = readInt("Ange trädets antal grenar: "); int kottAntal = readInt("Ange trädets antal kottar: "); nytt=new Barr(höjd, diameter, grenAntal, kottAntal); } else { nytt = new Lov(höjd, diameter); } alla.add(nytt);

OOP F14:28 Stefan Möller Lämplig struktur på inlämningsuppgift 2 En klass med ALL inmatning/användardialog Globala variabler för alla personer och ett Scanner-objekt Hjälpmetoder för inläsning readInt och readString Hjälpmetod för att hitta en person identifierad med namnet En metod för varje kommando En main-metod som anropar de olika kommando-metoderna

OOP F14:29 Stefan Möller import java.util.*; class HuvudProgram{ ArrayList alla = new ArrayList (); Scanner scan = new Scanner(System.in); int readInt(String fråga){ for(;;){ try{ System.out.print(fråga); int x=Integer.parseInt(scan.nextLine()); return x; } catch (NumberFormatException e){ System.out.println("Fel - skall vara numeriskt värde"); } String readString(String fråga){ System.out.print(fråga); String str=scan.nextLine(); return str; }

OOP F14:30 Stefan Möller Person getPerson(String namn){ for (Person p : alla) if (p.getNamn().equalsIgnoreCase(namn)) return p; return null; } void skapaPerson(){ String namn = readString("Nya personens namn: "); Person p = getPerson(namn); if (p!=null) System.out.println("Den personen finns redan"); else{ Person ny = new Person(namn); alla.add(ny); } void skapaPryl(){ //Koden för att skapa en pryl och ge till en person } void visaAlla(){ //Koden för att visa alla personerna }

OOP F14:31 Stefan Möller void visaRikaste(){ //Koden för att visa rikaste personen } //osv alla kommadona public static void main(String[]args){ HuvudProgram hp = new HuvudProgram(); System.out.println("Hej och välkommen till Prylprogrammet"); for(;;){ int val=hp.readInt("Ange kommando 1-7 "); switch (val){ case 1: hp.skapaPerson(); break; case 2: hp.skapaPryl(); break; case 3: hp.visaAlla(); break; case 4: hp.visaRikaste(); break; case 5: hp.visaViss(); break; case 6: hp.börskrasch(); break; case 7: System.out.println("Tack och hej då!"); System.exit(0); default: System.out.println("Fel kommando"); } }//klass HuvudProgram

OOP F14:32 Stefan Möller Träd idnr höjd diameter volym antalGrenar Barr antalKottar Löv Person 0..* 0..1