Arv.

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

Avlusning Debugger (”avlusare”) Breakpoints Watch.
Relationsdatabasdesign
10. Elementen i strukturerad programmering
Klasser och objekt.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 6
Datatyper C# C/C++ Java VB Fortran Pascal bool boolean Boolean
Klassarv och inkapsling
Repetition av objektorientering
OOP Objekt-orienterad programmering
Några standardalgoritmer
Filhantering Grundprincipen för filhantering Öppna filen
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Arv.
Abstract & sealed.
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.
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.
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
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.
Programmering i C# 3. Klasser.
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
Sid 41 Fordon int antalhjul; int vikt;
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.
4. Arv och dynamisk bindning
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.
Polymorfism.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Räckvidd och synlighet. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det.
Programmering i C# 5. Structer.
UTVECKLING MED RAMVERKET.NET Marcus Medina. Dagens visdomsord ” Ingen vet vad han klarar innan han har försökt. ” - Publilius Syrus (85 f.Kr.-43 f.Kr.).
TÄNK PÅ ETT HELTAL MELLAN 1-50
Programmeringsteknik för Media1 & K1
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
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.
Objektorientering.
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 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
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.
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
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.
Länkade listor Binära träd
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
1 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
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.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
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.
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.
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.
TDP004 Objektorienterad Programmering Fö 6 Objektorientering forts.
Presentationens avskrift:

Arv

Generalisering/Specialisering: Arv Klasser kan organiseras i hierarkier. En subklass ”ärver” samtliga egenskaper (attribut och operationer) från sin superklass Abstrakta superklasser används enbart för att kunna skapa subklasser med gemensamma egenskaper G/S med polymorfism En subklass kan ”överskugga” metoden för en ärvd operation, dvs ha en egen metod (kod) för samma operation (tjänst)

Klasshierarkier Generella klasser Applikationsspecifika klasser utskriftsenhet däggdjur moderklasser katt hund marsvin plotter skrivare tax golden schäfer matris laser bläck Applikationsspecifika klasser

Arv Objekt kan uppvisa likheter med varandra även om de inte tillhör samma klass Då innehåller dessa klasser delvis identiska beskrivningar

Arv Fordon Bil Lastbil Flygplan Tåg class Fordon {} class Bil extends Fordon {} class Lastbil extends Fordon {} class Tåg extends Fordon {} class Flygplan extends Fordon {}

Arv Person födelsedag : DateTime namn : string telefon : string Telefon(value : string) Namn () : string Födelsedag () : DateTime DagarTillNästaFödelsedag () : int Student inskrivningsår : int betaldKåravgift : bool Student(födelsedag : DateTime, namn : string, telefon : string, år : int, betalt : bool) Inskrivningsår() : int Inskrivningsår(value : int) betaldKåravgift() : bool betaldKåravgift(betalt : bool)

Specialisering - generalisering Person Superklass Subklass Student Lärare Kan läsas som ”är ett slags” ( ”is a” )

Klassbibliotek C#: using Klassbibliotek Applikationsspecifika utvidgningar

superklass Varje klass K i C# (utom klassen Object) är en utvidgning av åtminstone en bestämd klass, som kallas den omedelbara superklassen till K. Att en klass är en omedelbar utvidgning av en annan klass anges med kolon : Anger vi inget arv ärver vi i C# ändå alltid från klassen Object.

Enkelt arv En klass har vid enkelt arv högst en omedelbar superklass En klass får ha godtyckligt antal subklasser superklass subklass subklass subklass

Enkelt arv Subklassen har alla egenskaper som superklassen har och eventuellt fler Arv av alla attribut, operationer och associationer Cykel märke modell beräknaLivslängdKvar() Växelcykel

Arv med tillägg (utvidgning) Cykel märke modell beräknaLivslängdKvar() Man kan lägga till attribut och/eller operationer Växelcykel antalväxlar beräknaDrevlivslängd() nytt attribut ny operation

Abstrakta klasser Konto saldo : double Saldo () : double LöneKonto SparKonto kredit : double LoneKonto(saldo : double, kredit : double) Kredit() : double

Abstrakta klasser Om varje instans ur klassen T skall vara en instans ur en subklass, så är klassen T en abstrakt klass En klass som saknar objekt Fångar det som är gemensamt i flera klasser Gemensamma attribut, operationer och relationer Deklaration av metoder (tala om att de finns men de är ej implementerade) Konto saldo: Money Kursiv stil = abstrakt klass LöneKonto SparKonto

Interface Endast operationer, interface kan inte ha några metoder ISkrivbart «interface» ILäsbart Endast operationer, interface kan inte ha några metoder Måste implementera egna metoder för interfacets operationer Ett interface kan liknas vid en abstrakt klass, med enbart abstrakta operationer, dvs utan metoder Skriv () Läs () Dokument Skriv () Läs ()

Exempel: interface interface ISkrivbart { public void Skriv(); } interface ILäsbart { public void Läs(); } class Dokument : ISkrivbart, ILäsbart { public void Skriv() // Kod för att skriva } public void Läs() // Kod för att läsa I C# finns interface. I C++ används istället abstrakta klasser med ”virtuella” metoder!

Interface Interface och objekt Alla objekt som implementerar ett ”interface” är också instanser av detta interface. Instanser av ett interface kan inte skapas som sådana, utan kan endast skapas som instanser av en klass som implementerat interfacet ... IList c = new ArrayList(); «interface» IList För att förenkla förståelsen av ”interface” kan vi tänka på dem som ”abstrakta klasser”, där vi endast angett vilka metoder som skall finnas, men utan att ange någon implementation för dessa metoder. ArrayList

Generalisering/specialisering Interface Generalisering/specialisering Även interface kan organiseras i hierarkier. Ett subinterface ärver samtliga operationer från sitt superinterface «interface» ICollection interface IList : ICollection { ... } «interface» IList «interface» IDictionary ArrayList SortedList

this, base vid anrop av konstruktor I en konstruktor kan vi anropa en annan konstruktor för samma klass (this), eller en konstruktor för den omedelbara överklassen (base) i en s.k. “initieringslista”. class B : A { int b; int c; public B (int x, int y, int z) : base(x) b = y; c = z; } public B (int x, int y) : this(x, y, 0) {} class A { int a; public A (int x) a = x; }

base vid anrop av överklassens metoder Andra metoder i överklassen än konstruktorn kan vi anropa var som helst inom en metod. För att nå överskuggade metoder i överklassen använder vi base. class A { int a; public int f () return a; } class B : A { int b; public int f () int x = base.f(); return x + b; } I många OO-språk används istället för base nyckelordet super

Multipelt arv Fördelar Nackdelar Speglar verkligheten bättre Minimal redundans Flexibelt Nackdelar Kan öka komplexiteten Namnkonflikter Stöds ej av alla programspråk (exempelvis inte av C# eller Java) Radio Klocka frekvens : int frekvens : int KlockRadio Vilken frekvens ärvs?

Exempel: multipelt arv class Klocka { int frekvens } class Radio { int frekvens } OBS! Exemplet är från C++, går inte i C# class KlockRadio : Klocka, Radio { } Hur detta i verkligheten fungerar är kompilatorberoende! I C# är multipelt arv inte tillåtet!

En vanlig lösning i C#: komposition class Klocka { int frekvens } class KlockRadio { private Klocka k = new Klocka(); private Radio r = new Radio(); public int KlockFrekvens get { return k.frekvens; } set { k.frekvens = value; } } public int RadioFrekvens get { return r.frekvens; } set { r.frekvens = value; } class Radio { int frekvens }

Ett exempel till: Multipelt arv Ägare Kanslist Person ÄgarPerson KanslistPerson ÄgarKanslistPerson

Exempel: Anpassa till enkelt arv Person Roll 1 1..2 Ägare Kanslist Använd en abstrakt rollklass och en association

Exempel: enkelt arv class Roll { } class Aegare : Roll { } class Kanslist : Roll { } class Person { Roll[] roller = new Roll[2]; roller[0] = new Aegare(); roller[1] = new Kanslist(); }