Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

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

Laboration 1 - Grunderna för OOP i Java

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Föreläsning 7: Objektorienterad programmering - introduktion

TENTAMEN OOP

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

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

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.

JAVA Mer om klasser och objektorientering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Lösningsförslag övning 2.

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

Objektorienterad Programmering DAT043

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

JAVAUTVECKLING LEKTION 11

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

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

TENTAMEN OOP

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

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

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Tentamen OOP

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

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

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

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

TENTAMEN OOP

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

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

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

(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

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

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

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

Del A (obligatorisk för alla)

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

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 Grundläggande programmering STS, åk 1 fredag

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

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ÖSNINGSFÖRSLAG TENTAMEN

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Objekt och referenser

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Objektorienterad Programmering (TDDC77)

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

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

Föreläsning 5-6 Innehåll

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

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Att skriva till och läsa från terminalfönstret

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

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 Grundläggande programmering STS, åk 1 fredag

TDDC77 Objektorienterad Programmering

Föreläsning 3-4 Innehåll

725G61 - Laboration 6 Objektorientering, modellering och arv. Johan Falkenjack

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

Laboration 3, uppgift En klass för en räknare

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

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Objektorienterad Programmering (TDDC77)

SMD 134 Objektorienterad programmering

Enkla variabler kontra referensvariabel

Malmö högskola 2008/2009 CTS

Objektorientering: Lagring, räckvidd och livstid

Design av en klass BankAccount som representerar ett bankkonto

Objektorienterad programmering D2

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 )

Lösningar för tenta 2 DAT043,

Arv. Objektorienterad och komponentbaserad programmering

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

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Objektorientering: Lagring och livstid

Introduktion till Java

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Objekt och klasser - Introduktion

Lösningsförslag till exempeltenta 2

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Tentamen, EDAA10 Programmering i Java

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad Programmering (TDDC77)

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

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

Klasser och objekt. Henrik Johansson. August 20, 2008

Transkript:

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel Eva Blomqvist eva.blomqvist@liu.se Linköpings universitet Sweden December 1, 2013 1

Innehåll OO-programmering fortsättning Skapa objekt baserat på data q Reguljära uttryck (överkurs) Exempel December 1, 2013 2

Vad ska en klass innehålla? (repetition) En klass kan innehålla följande: q En klassdeklaration (obligatoriskt) public class MittKlassNamn { q Klass- och instansvariabler "globala variabler" som kan kommas åt från vilken metod som helst (i klassen om de är private, även från andra klasser om de är public) Skrivs gärna högst upp i klassens kropp q En eller flera konstruktorer metod som talar om vad som händer när ett nytt objekt (instans) av metoden skapas q Klass- och instansmetoder metoder som representerar klassens och instansernas beteende - vad kan den här typen av objekt göra? q En main-metod...om det här är "huvudklassen" varifrån programmet ska köras December 1, 2013 3

Exempel: klassen Person Klassdeklaration: public class Person { December 1, 2013 4

Exempel: klassen Person...eller: class Person { December 1, 2013 5

Exempel: klassen Person Klass- och instansvariabler: public class Person { //Klassvariabel public static int noofpersons = 0; //Instansvariabler public String fname; public String lname; public int year; December 1, 2013 6

Exempel: klassen Person...men tänk på principen om inkapsling, då är det bättre såhär: public class Person { //Klassvariabel private static int noofpersons = 0; //Instansvariabler private String fname; private String lname; private int year; December 1, 2013 7

Exempel: klassen Person Konstruktor: public class Person { //Klassvariabel private static int noofpersons = 0; //Instansvariabler private String fname; private String lname; private int year; public Person(String fn, String ln, int yr){ fname = fn; lname = ln; year = yr; noofpersons++; December 1, 2013 8

Exempel: klassen Person En klassmetod: public class Person { //Klassvariabel private static int noofpersons = 0; //Instansvariabler private String fname; private String lname; private int year; public Person(String fn, String ln, int yr){ fname = fn; lname = ln; year = yr; noofpersons++; public static int getnoofpersons(){ return noofpersons; December 1, 2013 9

Exempel: klassen Person En instansmetod: public class Person { //Klassvariabel private static int noofpersons = 0; //Instansvariabler private String fname; private String lname; private int year; public Person(String fn, String ln, int yr){ fname = fn; lname = ln; year = yr; noofpersons++; public static int getnoofpersons(){ return noofpersons; public String getname (){ return fname + " " + lname; December 1, 2013 10

Exempel: klassen Person En till instansmetod: public class Person { //Klassvariabel private static int noofpersons = 0; //Instansvariabler private String fname; private String lname; private int year; public Person(String fn, String ln, int yr){ fname = fn; lname = ln; year = yr; noofpersons++; public static int getnoofpersons(){ return noofpersons; public String getname (){ return fname + " " + lname; public void setlastname (String newname){ lname = newname; 11

Exempel i Eclipse... December 1, 2013 12

Sammanfattning av modifierare (rep.) Klasser q Offentlig - public q Pakettillgänglig - (om inget sägs) q Nästlade klasser (klass i klass) - private Metod i en klass q Offentlig - public q Pakettillgänglig - (om inget sägs) q Skyddad (åtkomst från subklasser + paketet) - protected q Privat för den klassen - private q Klassmetod (statisk metod) - static q Instansmetod - (om inte static) December 1, 2013 13

Sammanfattning av modifierare (rep.) Variabel q Offentlig - public q Pakettillgänglig - (om inget sägs) q Skyddad (åtkomst från subklasser + paketet) - protected q Privat för den klassen - private q Klassvariabel (statisk variabel) - static q Instansvariabel - (om inte static) q Konstant - final Tre beslut q Åtkomst (offentlig, paket, skyddad, eller privat)? q Klass- eller instans (-variabel/-metod)? q Möjlig att ändra? December 1, 2013 14

Läsa från fil (repetition) och skapa objekt December 1, 2013 15

Ett exempel Anta att vi vill läsa in information om personer från en fil istället för att låta användaren mata in informationen via terminalfönstret Uppgift: En person har ett förnamn, ett efternamn och ett födelseår Hur lagrar vi detta i en fil? q q q Vi får bestämma oss för ett filformat som passar Vad sägs om: varje rad i filen representerar en person, och de olika dataelementen skiljs åt med hjälp av "," Vi måste välja något tecken som inte kommer att förekomma i de data vi vill läsa in - så att vi inte blandar ihop data och "separator-tecknet" Exempel på filinnehåll (alt1.txt): Anna,Andersson,1986 Arvid,Bengtsson,1947 December 1, 2013 16

Ett exempel baserat på uppgift 2.1 Alternativt exempel q Varje dataelement har en egen rad i filen. Vi antar att en person alltid representeras av exakt tre rader. q Fil enligt detta alternativ (alt2.txt): Anna Andersson 1986 Arvid Bengtsson 1947 OBS I projektet får ni anta att ni vet vad filerna heter, var de ligger och formatet på data i filerna (ni får en fil av oss för att testa med), men ni får inte göra några antaganden om innehållet (t ex måste ni kunna hantera ett okänt antal personer/kunder) December 1, 2013 17

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline(); br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer = " + Person.getNoOfPersons()); 18

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); Vi skapar en klass PersonFromFile, if (personarray.length den == 3){ är publik och innehåller endast en mainmetod. (Vi behöver även tala om vilket Person p = new Person(personarray[0], int fodelse = Integer.parseInt(personarray[2]); paket klassen ligger i och importera de personarray[1],fodelse); klasser vi behöver anävnda i main-system.out.println("skapametoden, syns inte här. person: " + p.getname()); s = br.readline(); br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer = " + Person.getNoOfPersons()); 19

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); Vi skapar ett File-objekt, som s = br.readline(); representerar filen alt1.txt (som ligger i vår projektkatalog) sedan försöker vi br.close(); skapa en FileReader och en catch (Exception e){ BufferedReader som använder den (kan e.printstacktrace(); kasta undantag om filen inte finns). Går det bra så läser vi in första raden i filen. System.out.println("Antal personer = " + Person.getNoOfPersons()); 20

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); Vi vill läsa in alla data i hela filen, så vi s = br.readline(); har en loop som säger att vi ska fortsätta tills vi inte längre har några br.close(); rader att läsa in, dvs vi får tillbaka null catch (Exception e){ av vår BufferedReader. e.printstacktrace(); System.out.println("Antal personer = " + Person.getNoOfPersons()); 21

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline(); För varje inläst rad gör vi följande: Dela upp raden i br.close(); sin "beståndsdelar", dvs dela catch strängen (Exception vid varje e){ kommatecken. Resultatet e.printstacktrace(); hamnar i en array av strängar. Vi vet hur formatet på filen ska System.out.println("Antal se ut, så vi vet att längden personer på = " + Person.getNoOfPersons()); arrayen borde vara 3, men kolla för säkerhets skull... 22

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline();...gör om den tredje delsträngen till ett heltal (vi vet att br.close(); årtalet ska vara ett tal och inte catch en textsträng (Exception e){ när vi skapar vår Person-instans). e.printstacktrace(); Skapa sedan en ny instans (new) av klassen System.out.println("Antal Person, genom att anropa personer = " + Person.getNoOfPersons()); konstruktorn, och lagra resultatet i variabeln p... 23

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); p String s = br.readline(); while (s = null){ String[] personarray = s.split(","); Person if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline();...gör om den tredje delsträngen till ett heltal (vi vet att br.close(); årtalet ska vara ett tal och inte catch en textsträng (Exception e){ när vi skapar vår Person-instans). e.printstacktrace(); Skapa sedan en ny instans (new) av klassen System.out.println("Antal Person, genom att anropa personer = " + Person.getNoOfPersons()); konstruktorn, och lagra resultatet i variabeln p... 24 Anna

Person public class Person { //Klassvariabel private static int noofpersons = 0; //Instansvariabler private String fname; private String lname; private int year; public Person(String fn, String ln, int yr){ fname = fn; lname = ln; year = yr; noofpersons++; public static int getnoofpersons(){ return noofpersons; public String getname (){ return fname + " " + lname; public void setlastname (String newname){ lname = newname; 25

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline(); br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer = " + Person.getNoOfPersons());...skriv sedan ut namnet på personen genom att anropa metoden getname() på den specifika instansen av Person som finns lagrad i varaibeln p. 26

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline(); br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer Sen = läser " + Person.getNoOfPersons()); vi in nästa rad och fortsätter loopen... 27

public class PersonFromFile { Arvid public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ Detta varv har vi en ny sträng att hantera. Vi delar upp den br.close(); på samma catch (Exception e){ sätt, och skapar en ny Person-instans e.printstacktrace(); som vi lagrar i varaibeln p och sedan skriver ut. s = br.readline(); int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); System.out.println("Antal personer = " + Person.getNoOfPersons()); Kom ihåg att konstruktorn även räknar antalet instanser och lagrar det i en klassvariabel... p Person 28

Person public class Person { //Klassvariabel private static int noofpersons = 0; //Instansvariabler private String fname; private String lname; private int year; public Person(String fn, String ln, int yr){ fname = fn; lname = ln; year = yr; noofpersons++; public static int getnoofpersons(){ return noofpersons; public String getname (){ return fname + " " + lname; public void setlastname (String newname){ lname = newname; 29

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline(); br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer Sen = läser " + Person.getNoOfPersons()); vi in nästa rad, men nu kommer vi få tillbaka null, vi har nått EOF... 30

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); System.out.println("Skapat person: " + p.getname()); s = br.readline(); br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer Vi stänger = " + Person.getNoOfPersons()); strömmen... 31

public class PersonFromFile { public static void main(string[] args) { File personfil = new File("alt1.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readline(); while (s = null){ String[] personarray = s.split(","); if (personarray.length == 3){ int fodelse = Integer.parseInt(personarray[2]); Person p = new Person(personarray[0], personarray[1],fodelse); Och avslutar med att skriva ut värdet på System.out.println("Skapat person: " + p.getname()); klassvariabeln noofpersons från Person-klassen. Den är private, så vi får s = br.readline(); använda en get-metod för att komma åt den br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer = " + Person.getNoOfPersons()); 32

public class PersonFromFile2 { public static void main(string[] args) { File personfil = new File("alt2.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String fornamn=br.readline(); while (fornamn = null){ String enamn = br.readline(); int fodelse = Integer.parseInt(br.readLine()); Person p = new Person(fornamn,enamn,fodelse); System.out.println("Skapat person: " + p.getname()); fornamn=br.readline(); br.close(); catch (Exception e){ e.printstacktrace(); System.out.println("Antal personer = " + Person.getNoOfPersons()); 33

Reguljära uttryck (överkurs) OBS Överkurs - men kan vara bra att ha t ex till projektet - läs igenom på egen hand December 1, 2013 34

Vad är ett reguljärt uttryck? Ett sätt att beskriva en mängd av textsträngar Ett sätt att beskriva ett "mönster" som textsträngar kan uppfylla Används ofta för att söka efter strängar, eller manipulera dem q q q Exempel: hitta alla textsträngar som innehåller bokstavssekvensen "abc" Exempel: byt ut alla förekomster av sekvensen "abc" mot bokstaven "d" Används när ni anropar s.split(","); -, är ett reguljärt uttryck Olika syntax i olika programmeringsspråk och gänssnitt men samma principer - här: Java-syntax December 1, 2013 35

Grundprincipen Ett tecken matchar sig självt q Exempel: det reguljära uttrycket a matchar index 0 och 2 i textsträngen apa q Exempel: det reguljära uttrycket ap matchar index 0-1, 3-4 och 6-7 i textsträngen apaapaapa q, matchar sig självt när vi ska dela upp strängen mha split() Men... om vi i vår Java-kod frågar om a matchar apa kommer svaret vara false - apa innehåller mer än bara ett enda a December 1, 2013 36

Operatorer... Konkatenering Alternativ Teckenklasser "Jokertecken" Upprepning I Java finns följande reserverade tecken för reguljära uttryck: < ( [ { \ ^ - = $ ] )? * +. > q Om man vill matcha tecknet självt används \ framför som "escape character" - Exempel: \? matchar strängen? December 1, 2013 37

Operatorer - översikt Konkatenering q det reguljära uttrycket ap matchar index 0-1, 3-4 och 6-7 i textsträngen apaapaapa - ap är konkateneringen av a och p Alternativ - q det reguljära uttrycket a p matchar antingen strängen a eller strängen p Teckenklasser = beskriver en mängd av tecken q Omgärdas av [ ] q q [abc] - matchar någon av bokstäverna a, b eller c [a-za-z] - matchar en (stor eller liten) bokstav i engelska alfabetet December 1, 2013 38

Operatorer - översikt Jokertecken q. matchar vilket tecken som helst Upprepning q q q? - 0-1 gång, exempel: a? = matchar tecknet a eller inget tecken alls * - 0-många gånger, exempel: a* = matchar inget tecken alls, eller tecknet a en eller flera gånger i rad + - 1-många gånger, exempel: a+ = matchar tecknet a en eller flera gånger i rad December 1, 2013 39

Exempel [a-za-z]*a matchar alla strängar som bara innehåller bokstäver i engelska alfabetet och avslutas med ett litet a [0-9][0-9] matchar alla heltal (uttryckta som en textsträng) med två siffror, dvs tal från 00 till 99 ; matchar ett semikolon, ;+ matchar ett eller flera semikolon i rad.[a-za-z]. matchar alla strängar med tre tecken där det mittersta tecknet är en bokstav i engelska alfabetet Från tidigare: s.split(","); q q Dela textsträngen runt den delsträng som matchar uttrycket, dvs "dela textsträngen runt alla kommatecken" Vi skulle kunna blanda separatorer: s.split(", ;"); December 1, 2013 40

Sammanfattning Att skapa en klass q q Klassens beståndsdelar Exempel: Person Repetition: modifierare Att skapa instanser av en klass q Exempel som läser in data från fil och skapar instanser December 1, 2013 41

December 1, 2013 42