TNSL04 – IT grundkurs. VT2008. Föreläsning nr 3, torsdag 7 feb. kl. 10-12. Del 1. Klasser, objekt, metoder, konstruktorer, samlingar och tillstånd. Hur.

Slides:



Advertisements
Liknande presentationer
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.
Advertisements

Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Klasser och objekt.
Imperativ Programmering
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
TNSL04 – IT grundkurs. VT2008. Föreläsning nr 4, torsdag 28 feb. kl Klasser, objekt, metoder, parametrar, konstruktorer, samlingar och tillstånd.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik 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.
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Objektorienterad programmering i Java
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
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.
Klasser och objekt Klasser, objekt och instansvariabler
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.
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
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.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
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.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
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.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
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.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
INTRODUKTION TILL PROGRAMMERING
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.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 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.
Ö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 5 Klasser och instanser
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
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.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
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 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.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

TNSL04 – IT grundkurs. VT2008. Föreläsning nr 3, torsdag 7 feb. kl Del 1. Klasser, objekt, metoder, konstruktorer, samlingar och tillstånd. Hur hänger det ihop, och hur används det? En tillbakablick på kapitel 1-4 i kursboken med hjälp av ett exempel: ett enkelt bil- och personregister.

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. Vi vill hålla reda på ett antal enkla bilobjekt med: registreringsnummer, bilmodell och färg och ett antal enkla personobjekt med: namn, födelseår och bostadsort och vi vill sedan kunna koppla ihop dessa, så att det för varje bil finns kopplat ett personobjekt: ägaren, och att det till varje person finns kopplat inget, ett eller flera bilobjekt: ägda bilar.

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. Vi börjar med att starta BlueJ och definiera ett nytt projekt fl-3-a och där definiera två klasser Person och Car. Anm.: Alla namn på klasser variabler objekt och allt annat inom ett javaprogram representeras i 16-bitars Unicode som innefattar de flesta teckenuppsättninar som används i olika språk, bl.a. då våra svenska Å Ä Ö å ä ö. Vi kan då använda svenska namn på alla begrepp i javakoden och den är flyttbar mellan olika plattformar. Dock är det vanligt att javakoden för varje klass lagras som en separat fil, åtminstone under utvecklingsfasen, och då vållar det ofta problem om man använder ”oamerikanska” tecken i filnamnet. Därför är det klokt att undvika inte bara åäö utan också specialtecknen etc i namn på klasser i java. I namn på objekt, metoder etc är det däremot fritt fram för alla sorters ”bokstäver”

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. Vi börjar med att starta BlueJ och definiera ett nytt projekt fl-3-a och där definiera två klasser Person och Car.

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. /* * Klassen Car definierar enkla Car-objekt. * (Bengt Lennartsson) (Version ) */ public class Car { // instance variables private String registreringsNummer; private String modell; private String färg; /** * Constructor for objects of class Car */ public Car(String regNr, String mod, String frg) { registreringsNummer = regNr; modell = mod; färg = frg; } /* Kommentarer i javakoden, dvs * text avsedd för mänskliga läsare * och inte för kompilator och * interpretator, kan anges på två * sätt. Som här över flera rader */ // Eller som här (i slutet) på en rad /* String och Car är namn på klasser * enges enligt konvention med stor * begynnelsebokstav. Objektnamnen * modell, mod, färg, frg anges med * liten begynnelsebokstav. */

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. /** * Instans- eller objektmetoder */ public String getRegNr() { return registreringsNummer; } public String getModell() { return modell; } public String getFärg() { return färg; } public void setRegNr(String nyttRegNr) { registreringsNummer = nyttRegNr; } public void setFärg(String frg) { färg = frg; } public String toString() { return registreringsNummer + ", "+ modell + ", "+ färg; } /* Här finns två ”mutant-metoder” * public void setRegNr (String nyttRegNr) * och * public void setFärg(String frg) * som ändrar ett Car-objekts tillstånd, * och fyra andra metoder, som rapporterar * eller ”returnerar”, men inte förändrar * detta tillstånd */

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. /** * Klassen Person definierar enkla Person-objekt. * (Bengt Lennartsson) (Version ) */ public class Person { // instance variables - replace the example below with your own private String namn; private String personNummer; private String adress; /** * Constructor for objects of class Person */ public Person(String nm, String pnr, String ad) { namn = nm; personNummer = pnr; adress = ad; }

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. /** * Objekt- eller instansmetoder */ public String getNamn () { return namn; } public String getPnr () { return personNummer; } public String getAdress () { return adress; } public String toString () { return namn +", "+ personNummer + ", " + adress; } public void setNyAdress (String nyAd) { adress = nyAd; } /* Biblioteksklassen String innehåller 63 olika * metoder som gör diverse saker med * strängobjekt. I java är till skillnad från * många andra språk string ingen primitiv * datatyp utan en biblioteksklass. Se API! */ /* Metoden * public String toString( ) * gör att objekt, t ex p1 och * p2, från klassen Person * direkt kan skrivas ut på * människoläsbar form med * System.out.println(p1); * och * System.out.println(p2); */

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. Nu kan man skapa de bil- och personobjekt man vill ha. Dock finns ingen mekanism att koppla ihop en viss bil med en viss person, dvs att representera ett ägande. Det finns åtminstone tre olika sätt att göra detta: 1. Inför class CarOwnership vars objekt refererar till ett Car-objekt och ett Person-objekt, ägaren. 2. Inför en referens till Person-objekt ägare i class Car 3. Inför referens till ett Car-objekt, ägd bil, i class Person.

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. Vi har också ett behov att hålla reda vilka bilar och vilka personer som totalt finns i systemet. För att hålla reda på en mängd, fix eller varierande, av objekt använder man i java begreppet Collection, samling. Här i början av kursen använder vi bara en implementation ArrayList av detta begrepp. ArrayList allaPersoner = new ArrayList (); ArrayList allaBilar = new ArrayList (); definierar två sådana samlingar allaPersoner och allaBilar, och Man kan enkelt göra operationer på mängderna. Exempelvis lägger allaBilar.add (bengtsGamlaBil); in bilobjektet bengtsGamlaBil i samlingen/mängden allaBilar.

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. I projekt fl-3-b har jag utökat klasserna Car och Person så att det dels finns ”samlingar” allCars och allPersons, dels i varje Car-objekt finns en ägare i form även referens till ett Person- objekt. Varje person kan få äga flera bilar, så jag har avstått från att lägga in ett fält ”ägd bil” i personobjektet. Det finns klassmetoder för att skriva ut objekten i allaCars och allaPersons.

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister.

TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. I projekt fl-3-c har jag lagt in i varje Person-objekt ett objekt som är en samling/mängd av Car-objekt. Samlingen innehåller alla av detta Person-objekt ägda Car-objekt

TNSL04 – IT grundkurs. VT2008.

Enkelt bil- och personregister. När vi klarat av kapitel 11 kan vi förse det enkla registret med dels ett trevligare användaregränssnitt, dels sökfunktioner, så att man snabbt och enkelt kan hitta de person- eller bilobjekt man letar efter. Lek gärna lite med mitt register. Allt finns i mappen FL/fl-03

TNSL04 – IT grundkurs. VT2008. Föreläsning nr 3, torsdag 7 feb. kl Del 2 Objekt och objektreferenser (referensvariabler) i java. Vad betyder det att ”två objekt är lika”? Vad betyder ” o1==o2 ” och ” o1.equals(o2 ) ” ? Om o1, o2 och o3 är (referenser till) objekt är ( o1 == o2 ) true, om de refererar till samma objekt, och o1.equals(o2) är true om de innehåller ”samma saker”, tolkat av metoden equals i den klass som skapat objekten. Använd alltid equals om du vill testa "innehåll" i objekt! o1 "Anna" o2 "Uffe" o3

TNSL04 – IT grundkurs. VT2008. public class Fl_3_3_1 { Person p1, p2, p3; public static void main(String [] args) { new Fl_3_3_1(); } public Fl_3_3_1( ) { p1 = new Person ("Maria", "850101", "Rimforsa"); p2 = new Person ("Maria", "850101", "Rimforsa"); p3 = p1; System.out.println("p1 == p2: " + (p1==p2)); System.out.println("p1 == p3: " + (p1==p3)); System.out.println("p1.equals(p2): " + p1.equals(p2)); System.out.println("p1.equals(p3): " + p1.equals(p2)); } } Ger utskriften: p1 == p2: false p1 == p3: true p1.equals(p2): true p1.equals(p3): true

TNSL04 – IT grundkurs. VT2008. public class Fl_3_3_1 { Person p1, p2, p3; public static void main(String [] args) { new Fl_3_3_1(); } public Fl_3_3_1( ) { p1 = new Person ("Maria", "850101", "Rimforsa"); p2 = new Person ("Maria", "850101", "Rimforsa"); p3 = p1; System.out.println("p1 == p2: " + (p1==p2)); System.out.println("p1 == p3: " + (p1==p3)); System.out.println("p1.equals(p2): " + p1.equals(p2)); System.out.println("p1.equals(p3): " + p1.equals(p2)); } } Ger utskriften: p1 == p2: false p1 == p3: true p1.equals(p2): true p1.equals(p3): true I klassen Person: public boolean equals (Person p) { return (p.getNamn().equals(namn))&& (p.getPnr().equals(personNummer))&& (p.getAdress().equals(adress)); }

TNSL04 – IT grundkurs. VT2008. public class Fl_3_3_2 { String p1, p2, p3; public static void main(String [] args) { new Fl_3_3_2(); } public Fl_3_3_2( ) { p1 = ”Maria”; p2 = "Maria"; p3 = p1; System.out.println("p1 == p2: " + (p1==p2)); System.out.println("p1 == p3: " + (p1==p3)); System.out.println("p1.equals(p2): " + p1.equals(p2)); System.out.println("p1.equals(p3): " + p1.equals(p2)); } } Ger utskriften: p1 == p2: true p1 == p3: true p1.equals(p2): true p1.equals(p3): true

TNSL04 – IT grundkurs. VT2008. Hur kan detta komma sig? Jo. I implementationen av javasystemet har man gjort strängobjekt “immutable”, dvs ett skapat objekt kan inte ändras. Däremot kan det avskaffas och ersättas med ett annat. I och med detta kan man spara minnesutrymme när det gäller lagring av strängar. När jag skapar ett nytt strängobjekt String p2=”Maria”; kollar systemet om det möjligen i minnet redan finns något strängobjekt med samma innehåll, och om det gör det får p2 helt enkelt bara bli en ny referens till detta redan existerande objekt.