Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avThomas Pålsson
1
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 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.
2
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.
3
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”
4
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.
5
TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. /* * Klassen Car definierar enkla Car-objekt. * * @author (Bengt Lennartsson) * @version (Version-0 2006-09-02) */ 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. */
6
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 */
7
TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister. /** * Klassen Person definierar enkla Person-objekt. * * @author (Bengt Lennartsson) * @version (Version-0 2006-09-02) */ 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; }
8
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); */
9
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.
10
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.
11
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.
12
TNSL04 – IT grundkurs. VT2008. Enkelt bil- och personregister.
13
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
14
TNSL04 – IT grundkurs. VT2008.
15
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
16
TNSL04 – IT grundkurs. VT2008. Föreläsning nr 3, torsdag 7 feb. kl. 10-12. 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
17
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
18
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)); }
19
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
20
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.
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.