Sid 41 Fordon int antalhjul; int vikt;

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.
Enkel dator teknik Tips och tricks.
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
ObjektOrienterad analys och design. SVP Vt2009 Föreläsning nr 2, måndag 8 april kl Diskussion (kurshemsida): Om designuppgiften Om projektuppgiften.
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Arv.
Abstract & sealed.
Inkapsling.
Objektorienterad tänkande
Polymorfism.
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
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
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Objektorienterad programmering i Java
Programmering i C# 3. Klasser.
Klasser och objekt Klasser, objekt och instansvariabler
Källor! Hur gör man egentligen?
Polymorfism.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmering i C# 5. Structer.
Felkalkyl Ofta mäter man inte direkt den storhet som är den intressanta, utan en grundläggande variabel som sedan används för att beräkna det som man är.
Arv.
Programmeringsteknik för Media1 & K1
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.
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.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
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.
Java paket och jar-filer
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
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. Ett problem/uppgift.
Objektorienterad programmering i Java
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.
Objektorienterad programmering
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
1 Föreläsning 8 Mer om klasser och objektorientering.
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
7. Delegerare och notifierare
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
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
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 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
OOP&M - teori1 OOP&M del II– Föreläsning 5 vecka 50 OBJEKT Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle Book String.
OOP&M - teori1 OOPM del II – Föreläsning vecka Sista föreläsning del II Kapitel 21 plus paket Abstrakta klasser/metoder igen Gränssnitt/Interface.
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.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering.
OOP&M - teori1 OOP2– Föreläsning vecka 0507 OBJEKT Mer om ärvning... Paket...
Enkel dator teknik Tips och tricks. Välja storlek och radavstånd Här väljer du storlek på texten vi vill att ni använder 14 p till rubriker och 12 p till.
Presentationens avskrift:

Sid 41 Fordon int antalhjul; int vikt; Bil private String regnr; private int årsmodell; Klassen Bil ärver från klassen Fordon. Istället för arv så kan man använda ordet härleds, klassen Bil härleds ur klassen Fordon. Superklass till Bil class Bil extends Fordon{ private int …. Subklass till Fordon (c) Ulf Kihlsten

Sid 42 Fordon int antalhjul; int vikt; Superklass till Bil private String regnr; private int årsmodell; Superklass till Bil Överst på sidan beskrivs i vilken ordning saker sker om man skriver Bil b = new Bil(); Först skapas Fordon och sedan Bil vilka tillsammans bildar det objekt som referensvariabel b ”pekar” på. Subklass till Fordon (c) Ulf Kihlsten

Sid 42 forts. Fordon int antalhjul; int vikt; Bil Personbil Lastbil Resten av sidan handlar om att man kan ha arv i flera led och att en klass kan vara superklass till flera klasser. I det här fallet är Bil superklass till klasserna Personbil och Lastbil. Observera att en klass bara kan ha en superklass, d.v.s. en klass kan bara ärva in en klass Bil private String regnr; private int årsmodell; På den här sidan finns det 2 superklasser och 3 subklasser. Längst ner på sidan nämns att om en klass inte använder nyckelordet extends så är det underförstått att den ärver in klassen Object. Alla klasser har alltså en superklass frånsett klassen Object förståssss. Personbil nt antplatser; Lastbil nt maxlast; (c) Ulf Kihlsten

Sid 43 Två nya saker dyker upp på denna sida En klass har försetts med en metod. Metoden borde också ha haft en synlighetsmodifierare enligt: public void visa() { Konstruktorn i klassen Cirkel styr vilken konstruktor den vill ”köra” i superklassen Punkt enligt: super(xx, yy); Detta är viktigt att förstå, eftersom det ger en väldig möjlighet att skapa flexibel kod, d.v.s. beroende på vilken konstruktor man anropar så får det skapade objektet olika egenskaper. (c) Ulf Kihlsten

Sid 44 Fordon Bil Personbil publiv void visa(){ Under rubriken ”Vilken metod används” så tas en viktig sak upp. I vidstående arvskedja så finns det två metoder med namnet visa. Om vi skriver följande kod: Personbil pb = new Personbil(); pb.visa(); så vill vi dels skapa ett objekt av typen Personbil och dels anropa metoden visa. Nu finns det ingen metod visa i klassen Personbil men det spelar ingen roll, JVM ser att Personbil har ärvt in klassen Bil, och fortsätter att leta i i den klassen och finner metoden där. Detta är en ”grundlag” i Java. En vanlig kodteknik är att låta en metod anropa en annan metod i sin superklass. Att låta metoden visa i klassen Bil anropa metoden visa i sin superklass Fordon enligt: super.visa(); skulle vara högst användbart. Bil publiv void visa(){ Personbil (c) Ulf Kihlsten

Sid 44 forts + sid 45. Längst ner på sidan tas synlighetsmodifierarna privat och default upp samt på sid 45 protected. Det som är ”märkt” med ordet private i en klass syns bara inom den egna klassen. Det som är ”märkt” med ordet protected inom en klass kan bara ses av de klasser som ärver klassen. Protected är alltså startkt förknippad med arv. Det som inte har någon synlighetsmodifierare alls (default) är bara synligt inom samma paket. Paket eller package blir riktigt intressanta först när du bygger upp ett eget utvecklingsbibliotek och skall hålla ordning på alla dina klasser. Just nu räcker det att se ett package som den mapp du lagrar dina Java program i. Paket tas upp lite grundligare på sid. 53 i boken. (c) Ulf Kihlsten

Sid 45. Kommentar till avsnittet Använda metoder…. Instansvariabler skall vara privata, det är liksom en av meningarna med OOP. De ”bäddas” på så sätt in i klassen och övriga klasser som vill utnyttja dem måste gå vägen via en metod som är public. På så sätt får vi säkrare kod eftersom ingen kan hitta på egna sätt att modifiera instansvariablerna. Public class Aclass{ private int posX; private int pos Y; public void setPosX( int v1 ){ posX = v1; Aclass a = new Aclass(); a.setPosX( 12 ); (c) Ulf Kihlsten

Sid 46 Punkt Cirkel Cylinder Om du skapar ett objekt enligt: Cylinder c = new Cylinder(); så kommer en kedja av konstruktorer att anropas. Anropen styrs antingen av hur du använder nyckelordet super eller av kompilatorn. Anropar du ingen konstruktor så kommer kompilatorn att skapa ett anrop på en tom konstruktor. Oavsett vilket, så kommer minst tre konstruktorer att anropas, en per klass. Först anropas en konstruktor för Cylinder, sedan en fär Cirkel och sedan en för Punkt. Sedan körs koden i konstruktorn fär Punkt, Cirkel och Cylinder, objektet byggs alltså uppifrån. Cirkel Cylinder (c) Ulf Kihlsten

Sid 46 övning 1 - 3 Kommentarer till övningar Gratte har dela upp lösningen i 1a, 1b och ic. 1a: Cirkel styr vilken konstruktor den vill anropa i Punkt, i annat fall skulle vi få kompileringsfel, eftersom det inte finns någon konstruktor med noll antal parametrar i Punkt. 1b: Instansvariablerna x och y i Punkt har definierats som protected, därför kan de anropas direkt i Cirkels: metod visa(). 1c: X och y är privata igen, därför krävs ett anropet super.visa() används i Cirkel för att kunna komm åt värdena, de är ju inkapslade i Cirkel. Överlagring av konstruktorer i Bil ger den som vill använda klassen flexibilitet. Nyckelordet super används på två olika sätt, anropa av en konstruktor eller en metod i superklassen. Protected används som i föeregående uppgift. Ett tryckfel, Utvidga klassen Kvadrat skall det stå. Inget nytt i exemplet. (c) Ulf Kihlsten

Sid 47-48 ”Flera nivåer”. Använd klassträdet på bild 9 ”sid 46” i denna presentation ihop med texten i boken, Den text som hänger ihop med klassträdet på bild 9 gäller för bokens text också. (c) Ulf Kihlsten

Sid 48 ”Polymorfism”. Punkt Cirkel Cylinder Polymorfism är en ganska avancerad programmerings-teknik som kan användas på klasser som utnyttjar arv. Polymorfism bygger på en enkel regel: En referensvariabel av en ”högre typ” i ett arvsträd kan alltid lagra en referensvariabel av en ”lägre typ”. Exempel: Punkt pkt; // En referensvariabel av typen Punkt. Vi kan nu skriva kod som: pkt = new Cirkel(); Cylinder cyl = new Cylinder(); pkt = cyl; Allt enligt regeln ovan. Vi kan dock inte skriva: Cylinder c = new Cirkel(); eftersom Cylinder är på en lägre nivå än Cirkel. Hur kan vi utnyttja detta? Se nästa bild. (c) Ulf Kihlsten

Sid 48 ”Polymorfism forts.”. Punkt Cirkel Cylinder Vi kan t.ex. skapa en metod enligt följande: public void myPolyMetod( Punkt p ) { Det fiffiga är att metoden kan ta emot objekt av typen Punkt, Cirkel och Cylinder, eftersom p är en referensvariabel av en ”högre typ” än övriga två. Nytt exempel: Punkt pArr[] = new Punkt(5); Vi har här ett fält som kan lagra referens variabler av typen Cylinder, Cirkel och punkt. Om vi sedan har en metod visa() i alla tre klasserna så kan vi skriva följande intelligenta kod: for( int i = 0; i < 5; i++){ pArr[i].visa(); } Koden ”bryr” sig inte om vilken typ det är på objektet, det får JVM sköta om. Det är detta sista exempel som Gratte använder för att beskriva polymorfism i boken. Polymorfism bygger på arv! (c) Ulf Kihlsten

Sid 50-51 ”Abstrakta klasser”. Det som skrivs om abstrakta klasser är ganska bra, framförallt texten på sidan 51. Här kommer ett litet bidrag till texten. En abstrakt klass är så generell att det inte är någon mening att instansiera den, den är "av naturen" en superklass och skall ärvas in i andra klasser där den kompletteras med kod. Abstrakta klasser hör nog mer hemma i OOD Objekt Orienterad Design än i OOP. (c) Ulf Kihlsten

Sid 51 ”Interface”. Om du implementerar ett interface, och det kommer vi att göra många gånger under resten av kursen, så sluter du ett avtal med kompilatorn. Avtalet går ut på att du förbinder dig att skriva kod för vissa metoder i din klass. I annat fall kommer kompilatorn inte att godkänna din kod. I boken visas ett exempel med ett interface som heter Bas. Du implementerar det med nyckelordet implements, och då förbinder du dig att skapa metoderna rita och sättfärg. Vitsen med detta kan uttryckas så här: om du vill använda en viss tjänst så måste du följa vissa regler för hur du skall använda tjänsten. I annat fall får du fixa tjänsten själv, d.v.s. uppfinna hjulet på nytt. (c) Ulf Kihlsten

public final void method myMethod{ Sid 51+ 52” final”. Ordet final betyder i Java slutgiltig. Alla gånger du ser ordet i Java så betyder det alltså att ”detta är den slutgiltiga versionen”. Några exempel: final class My { final int myInt = 10; public final void method myMethod{ I tur och ordning så betyder detta: klassen My kan inte ärvas myInte kan inte ges ett annat värde än 10. Metoden MyMethod kan inte överridas( override) (c) Ulf Kihlsten

Sid 53+ 54” Package”. Paket beskrivs på ett ganska bra sätt i boken. Trots det så är det ganska svårt att ta till sig vad som menas med begreppet. Detta vill jag dock att du skall förstå om paket: De används för att slippa skriva så mycket kod, se ordet import ii boken. Ditt paket som du alltid arbetar i under denna kurs har samma namn som mappen där du förvara dina java program i. Resterande kunskaper är överkurs. Dock, en liten reflektion: De som designade Java har i två fall gjort något som överraskar åtminstone mig. Det ena är när man namnger en javafil, klassnamnet måste ha samma namn som den fysiska filen. Det andra är att man använder fysiska mappnamn för att bygga upp det man kalla package. Att leva så nära verkligheten är mycket ovanligt i datavärlden, (c) Ulf Kihlsten