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.

Slides:



Advertisements
Liknande presentationer
OOP Objekt-orienterad programmering
Advertisements

Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
TILLÄMPAD DATALOGI (TILDA) Övning 3
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
1. Ett problem/uppgift.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
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.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
TILLÄMPAD DATALOGI (TILDA) Övning 2
TILLÄMPAD DATALOGI (TILDA) Övning 2
Programmeringsteknik för K och Media
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Uppgifter/Läxa Lös uppgifterna: 120, 121, 123, 125, 126, 128, 130, 133, 142, 144, 145.
Administration Distribution Metabolism Exkretion
KPP053, HT2016 MATLAB, Föreläsning 2
Praktiska grejer Lärare: Erik Ramm-Schmidt Läxorna finns på Wilma
Kapitel 1 Algebra och linjära modeller manada.se.
Så tycker de äldre om äldreomsorgen 2016
Är en radikal omställning till hållbar konsumtion möjlig och hur påverkar det våra möjligheter till välbefinnande? Jörgen Larsson Assistant professor in.
Välkommen till.
Medelhavsbuffé 11/ Bildkavalkad.
Lagen om Energikartläggning i stora företag
Växtekologisk orienteringskurs
Lagen om Energikartläggning i stora företag
KPP053, HT2016 MATLAB, Föreläsning 3
Lars Calmfors Föreläsning 2 för Riksrevisionen 25/2-2016
Täthet hos flänsförband mellan stora polyetenrör och ventiler
Dagens ämnen Matriser Räkneoperationer och räknelagar
Ledarutveckling över gränserna
Regiongemensam enkät i förskola och familjedaghem 2016
Uppföljning av år 2016 HFS-nätverket
Vårdprevention - en introduktion för medarbetare på sjukhus
Trygg, säker och samordnad vård- och omsorgsprocess
Föräldraenkät 2017 Förskola
Finansiell samordning
KLUBBOVERALL DIF P06 Spelarens namn: Storlek överdel: Storlek byxa:
Marknadsutblick FEBruari 2017.
Fallpresentation nr Tandläkare …..
Tillgänglig primärvård
Medborgare i norr - uppfattningar om regionalisering
Vad kostar lånet? INTRODUCERA KAPITLET
DESIGNPROJEKT Fas 2: STRATEGI
Välkomna!.
Kursens innehåll Ekonomin på kort sikt: IS-LM modellen
Dagens ämnen Determinanten Definition och grundläggande egenskaper
TURBOKRAFT Tekniska högskolan vid Linköpings universitet
Rapport till Örebro läns landsting om Medarbetarundersökning
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Presentationens avskrift:

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 this

OOP F6:2 Stefan Möller public static void main(String[]args){ Myra[]allaMyror=new Myra[100]; int antal=0; Myra m = new Myra("Myrre", 43); allaMyror[antal] = m; antal++; m = new Myra("Ante", 73); allaMyror[antal++] = m; allaMyror[antal++] = new Myra(32); Vi vill ofta hantera många objekt i ett program: Nya myror läggs in sist i arrayen. Om vi vill placera dem på annat ställe? Vad händer när antal blir 100?

OOP F6:3 Stefan Möller Få plats med mer Vi kan INTE utöka en array. Däremot kan vi skapa en ny array som är större och kopiera över innehållet. if (antal==allaMyror.length){ Myra[] tmp = new Myra[antal*2]; for (int x=0; x<allaMyror.length; x++) tmp[x]=allaMyror[x]; allaMyror=tmp; }

OOP F6:4 Stefan Möller Om vi vill ta bort en Myra? System.out.print("Vem skall bort?"); String namn=scan.nextLine(); for (int x=0; x<antal; x++) if (allaMyror[x].getNamn().equals(namn)){ allaMyror[x]=null; break; } Vi riskerar att få "hål" i arrayen, kan ge problem: System.out.println("Dessa myror finns:"); for (int x=0; x<antal; x++) System.out.println(allaMyror[x].getNamn());

OOP F6:5 Stefan Möller ArrayList En klass som används för att hantera objekt. Har "byggt in" problematiken med storlek och eventuella hål så att programmeraren slipper de problemen. Klass ArrayList ligger i java.util-delbiblioteket. Vid skapande anges vilken sorts objekt som skall hanteras: ArrayList allaMyror = new ArrayList (); Innehåller ett antal metoder som kan anropas: Myra m = new Myra("Myrre", 43); allaMyror.add(m); Internt en array som automatiskt utökas vid behov, detta slipper man tänka på som programmerare.

OOP F6:6 Stefan Möller Några av metoderna hos ArrayList : add(E nytt)Objektet nytt adderas sist i listan add(int index, E nytt)Objektet hamnar på plats index clear()Ta bort alla objekt get(int index)Returnerar objektet på plats index isEmpty()Returnerar true om listan är tom remove(int index)Tar bort objektet på plats index size()Returnerar antal objekt i listan E är vilken sorts objekt som hanteras: ArrayList allaMyror = new ArrayList (); Här hanteras Myra-objekt. ArrayList namn = new ArrayList (); Här hanterar man textsträngar.

OOP F6:7 Stefan Möller public static void main(String[]args){ ArrayList allaMyror = new ArrayList (); Myra m = new Myra("Myrre", 37); allaMyror.add(m); allaMyror.add(new Myra(112)); allaMyror.add(new Myra("Ante", 12)); allaMyror.add(0, new Myra("Anna")); //Ta bort en myra: System.out.print("Vem skall bort?"); String vem = scan.nextLine(); for (int x=0; x<allaMyror.size(); x++) if (allaMyror.get(x).getNamn().equals(vem)){ allaMyror.remove(x); break; } //OBS – inget "hål" i strukturen

OOP F6:8 Stefan Möller Innehållet i en ArrayList är objekt. Fungerar INTE för javas primitiva datatyper. FEL: ArrayList talen = new ArrayList (); Till de olika primitiva datatyperna finns Wrappers: ArrayList talen = new ArrayList (); Sedan Java 5 automatisk konvertering talen.add(17); talen.add(43); int x = talen.get(0); intInteger doubleDouble charCharacter booleanBoolean Wrapper-klasserna finns i java.lang. Innehåller även ett antal metoder, t.ex. parseInt

OOP F6:9 Stefan Möller Att skriva ut en Myra class Myra{ private String namn; private int barr; //Konstruktorer mm som tidigare public void skriv(){ System.out.println(namn+" har "+barr+" barr"); } Kan sedan anropas om man har en Myra-referens Myra m = new Myra(137); m.skriv();

OOP F6:10 Stefan Möller INTE utskrift inuti Myra-klassen utan en metod som returnerar en String med myrans "presentation" class Myra{ private String namn; private int barr; //Konstruktorer mm som tidigare public String getText(){ return namn+" har "+barr+" barr"; } Vid anrop kan man sedan göra "vad man vill" med texten Myra m = new Myra(137); System.out.println(m.getText()); JOptionPane.showMessageDialog(null, m.getText());

OOP F6:11 Stefan Möller Utskrift av en Myra-referens Myra m = new Myra("Myrre", 25); System.out.println(m); Borde väl inte fungera??? Jo, utskriften blir (ungefär...): Varför? Java-systemet anropar en metod som heter toString. Varje klass har en sådan metod som default skriver som ovan. Denna metod kan göras om: I Myra: public String toString(){ return namn+" har "+barr+" barr"; } Utskriften blir nu: Myrre har 25 barr

OOP F6:12 Stefan Möller Metoden som returnerar en Myras presentation döps till toString class Myra{ private String namn; private int barr; //Konstruktorer mm som tidigare public String toString(){ return namn+" har "+barr+" barr"; } toString blir automatiskt anropad Myra m = new Myra(137); System.out.println(m); JOptionPane.showMessageDialog(null, m);

OOP F6:13 Stefan Möller Utskrift av alla Myror i en ArrayList for (int x=0; x<allaMyror.size(); x++) System.out.println(allaMyror.get(x)); Med alternativ for-loop for (Myra m : allaMyror) System.out.println(m); ArrayList har en egen toString-metod System.out.println(allaMyror);

OOP F6:14 Stefan Möller this Man kan få en referens ”till sig själv” med this. Anta att två myror skall kunna gifta sig med varandra. Vi lägger till attributet partner i class Myra samt en metod gifterSig: class Myra{ private Myra partner = null; public boolean gifterSig(Myra m){ if (m!=null && partner==null && m.partner==null && m!=this){ partner = m; m.partner = this; return true; } return false; }

OOP F6:15 Stefan Möller public static void main(String[]args){ ArrayList myrstack=new ArrayList (); Scanner sc=new Scanner(System.in); for(;;){ System.out.print("1-Skapa myra\n2-Ändra barr\n"+ "3-Giftemål\n4-Skriv ut alla\n"+ "5-Avsluta\nAnge Kommando: "); int kom=Integer.parseInt(sc.nextLine()); switch (kom){ case 1: //Koden för att skapa en myra break; case 2: //Koden för att ändra antal barr break; case 3: break; case 4: break; case 5: System.exit(0); default: System.out.println("Felaktigt kommando"); }//switch }//for }//main Ett kommandostyrt program:

OOP F6:16 Stefan Möller //Skapa en Myra: System.out.print("Myrans namn: "); String namn=sc.nextLine(); System.out.print("Antal barr: "); int antBarr=Integer.parseInt(sc.nextLine()); Myra ny = new Myra(namn, antBarr); myrstack.add(ny); //Ändra en Myra's antal barr: System.out.print("Vilken Myra: "); String namn=sc.nextLine(); Myra vem=null; for (Myra m : myrstack) if (m.getNamn().equals(namn)) vem=m; if (vem!=null){ System.out.print("Antal nya barr: "); int x=Integer.parseInt(sc.nextLine()); vem.changeBarr(x); } else System.out.println("Den Myran fanns ej i stacken.");