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

Funktioner och programorganisation
Algoritmer och data strukturer -Länkade listor
Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Abstract & sealed.
Inkapsling.
Polymorfism.
Metoder.
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
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.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
Objektorienterad programmering i Java
Programmering i C# 3. Klasser.
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.
4. Arv och dynamisk bindning
Polymorfism.
Föreläsning 4. Arv – bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Katt pälsfärg smutsa_ned() klös_soffa() Kanin pälsfärg slaktvikt.
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.).
Arv.
Programmeringsteknik för Media1 & K1
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Multipelt arv Drawable draw() move() position bitmap Persistent save() restore() storage_file_name.
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.
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ör utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
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.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Objektorienterad programmering
Föreläsning 2. Allmänt STL genererar varningar i Visual C++ –”#pragma warning (disable : 4786)”
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
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
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.
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
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.
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 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
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.
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.
Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.
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ö 2 Objektorientering grunder.
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
TDP004 Objektorienterad Programmering Fö 6 Objektorientering forts.
TDP004 Objektorienterad Programmering Fö 8 Sammanfattning
Objektorienterad programmering forts
Presentationens avskrift:

Arv

Arv Vad är arv? Arv handlar om att klassificera d.v.s. att ange relationer mellan klasser och inte relationer mellan objekt. Arv gör det möjligt att skapa nya klasser utifrån befintliga, vilket är ett sätt att återanvända gammal kod. Arv är en grundläggande teknik för att organisera och skapa klasser.

Terminologi Basklass Härledd klass Arv UML Klassen som redan är definierad och som man vill ärva ifrån Härledd klass Klassen som ärver ifrån basklassen Kan även vara en basklass till andra klasser som ärver ifrån den. Arv Är mekanismen för denna teknik UML A C B Basklass Härledd klass Härledd klass

Arv När? Härledd klass ska representera något som är en sort av det basklassen representerar Inte för att återanvända koden Person Anställd Student Kund Chef Lärare Säljare Adress

Tre olika sett att se på arv Sedd som datatyp class Djur { protected String namn; protected double vikt; public void ät() { /* ... */ } public void sov() { /* ... */ } } class Fågel : Djur private double vingspann; public void flyg() { /* ... */ } class Fisk : Djur private double maxdjup; public void simma() { /* ... */ } Sedd som klass Sedd som mängder

Arv En klass kan ärva från högst en klass. En basklass får ha godtyckligt antal härledda klasser. Härledd klass kan alltså lägga till och omdefiniera, men inte ta bort. Det är grundprincip i objektorienterat arv att ett objekt av härledd klass har allt och kan allt som basklassobjekt har och kan. Det är ett slags objekt av basklassen. Men det kanske gör på ett annat sätt. Arv fungerar helt logiskt i hur många generationer som helst. Varje härledd klass är som om den innehöll allt den ärvde från sin basklass, och den utgör i sin tur utan problem basklass för ytterliggare härledda klasser.

Arv Klassen System.Object är grundläggande för alla klasser. Med andra ord är alla klasser implicit härledda från klassen System.Object. Person Anställd Student Kund Chef Lärare Säljare Object Adress

Åtkomst Härledda klasser Medlemmar i den här klassen kan komma åt icke privata medlemmar definierade i basklassen Publika data medlemmar i basklassen blir publika även i härledda klassen Protected data medlemmar i basklassen blir protected även i härledda klassen protected Mellanliggande skyddsnivå (public - private) Kan användas endast av basklassen och alla andra klasser som ärver från basklassen.

Nack- och fördelar med protected Nackdelar med protected Härledda klassen behöver inte använda egenskaper (set, get) för att ändra värden av protected data medlemmar (direkt åtkomst) Metoder i härledda klassen måste skrivas så att de beror av basklassens implementeringen (ändringar i basklassen medför ändringar i alla härledda klasser) x ändrar namn till xCoordinate Fördelar med protected Protected data medlemmar förbättrar prestanda Onödiga anrop till set och get behövs inte

Att rekommendera Deklarera basklassens data medlemmar som private Använd publika egenskaper och metoder så att härledda klassen kan komma åt data medlemmar i basklassen Anropa basklassens konstruktorn explicit i härledda klassen för att initiera variabler för basklassens objekt.

Exempel class Shape { private int x, y; public Shape() // tom-konstruktorn { } public Shape(int x, int y) // konstruktorn { this.x = x; this.y = y; } public double Area() // beräkna area { return 0.0; } }

Exempel I C# är det teknet ”:” för att låta en klass ärva från en annan class Circle : Shape { private int radius; public Circle() // konstruktorn { } public double Area() // beräkan area { return System.Math.PI * radius * radius; } }

Konstruktorer Konstruktorer ärvs inte. Konstruktor i härledda klasser har ett beteende att anropa närmaste basklass konstruktorn. När objektet av härledda klassen skapas, en kedja av konstruktoranrop påbörjas Härleda klassens konstruktorn anropar basklassens konstruktorn implicit, eller explicit Basklassens konstruktor exekveras först

base vid anrop av konstruktor I en konstruktor kan man anropa en konstruktor för den omedelbara basklassen (base) i en s.k. “initieringslista”. class Circle : Shape { int radius; public Circle (int x, int y, int radius) : base(x,y) this.radius = radius; } public Circle (int radius) : base(0, 0) class Shape { int x,y; public Shape (int x, int y) this.x = x; this.y = y; }

base vid anrop av basklassens metoder Andra metoder i basklassen än konstruktorn kan anropas var som helst inom en metod. För att nå överskuggade metoder i basklassen använder man base. class B : A { int b; public int f() int x = base.f(); return x + b; } class A { int a; public int f() return a; }

Destruktorer När Garbage Collector tar bort härledda klassens objekt från minne, GB anropar då klassens destruktorn och en kedja av anrop påbörjas GB anropar härledda klassens destuktorn Härledda klassens destruktor exekverar först, och när den exekverat anropar den närmaste basklass destruktor. Sist anropas Object-klassens destruktorn. Oavsett om man skriver destruktor eller inte, så kommer eventuell destruktor i basklassen att anropas. I klasser där Dispose implementeras bör Dispose metoden anropa basklassens Dispose om sådan finns. Viktigt! Destruktorer anropas aldrig explicit.

Arv kontra aggregering Arv ska endast användas när det logiska förhållandet mellan befintlig och ny klass verkligen är av den karaktären. Arv ska endast användas vid solklara fall Kom ihåg : en sorts Vid tvekan använd aggregering Befintliga klassens logik återanvänds genom att ett objekt utgör medlem Ställ frågan ”är detta verkligen en sorts av basklassen?”. Om svaret är solkart ja  använd arv Osäker  använd aggregering

Arv kontra aggregering Class Circle { int x, y; int radius; // diverse medlemmar } Class Cylinder : Circle { int height; // metoder för volym etc. } Exempel: Är en cylinder en slags cirkel? Eller kanske en cirkel en slags cylinder? Eller kanske är en cylinder ett specialfall av cirkel? Eller .. Det intressanta här är att en cylinder kan implementeras m.h.a. en cirkel, så koden ser anständig ut. Men logiken är fel. Aggregering Class Cylinder { int height; Circle myCircle; public Cylinder(Circle myCircle, int height) this.height = height; this.myCircle = myCircle; }