Arv. Objektorienterad och komponentbaserad programmering

Relevanta dokument
Polymorfi. Objektorienterad och komponentbaserad programmering

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Klasshierarkier - repetition

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

OOP Objekt-orienterad programmering

Introduktion till arv

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

OOP Objekt-orienterad programmering

Dynamisk bindning och polymorfism

Konstruktion av klasser med klasser

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Repetition av viktiga begrepp inom objektorienterad programmering

Klasshierarkier. Klasser kan byggas på redan definierade klasser

1 Repetition av viktiga begrepp inom objektorienterad programmering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TENTAMEN OOP

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

TDDC76 - Programmering och Datastrukturer

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

TDDC76 Programmering och datastrukturer

TDDC76 - Programmering och Datastrukturer

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Objektorienterad Programmering (TDDC77)

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Objektorienterad Programmering (TDDC77)

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 9: Arv och UML

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

OOP Objekt-orienterad programmering

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

5 Arv och dynamisk bindning FIGUR

Imperativ programmering. Föreläsning 4

Java, klasser, objekt (Skansholm: Kapitel 2)

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Högskolan Dalarna sid 1 av 5 Data-sektionen Hans-Edy Mårtensson

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

PROGRAMMERINGSTEKNIK TIN212

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

OOP Tenta

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

DAT043 Objektorienterad Programmering

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

OOP Objekt-orienterad programmering

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

TENTAMEN OOP

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

TDIU20 - Objektorienterad programmering i c++ - föreläsning 6

OOP Omtenta

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Arv Murach s: kap 14

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Föreläsning 13 Innehåll

TENTAMEN OOP

Objekt och referenser

JAVA Mer om klasser och objektorientering

Objektorienterad Programmering (TDDC77)

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

Objektorienterad programmering i Java

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Laboration 1 - Grunderna för OOP i Java

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

DAT043 - Föreläsning 7

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

Lösningsförslag övning 2.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Grundläggande programmering med C# 7,5 högskolepoäng

Tentamen. Lösningsförslag

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Transkript:

Arv Objektorienterad och komponentbaserad programmering

Arv Regel nr 1: Ett objektorienterat språk ska tillåta inkapsling av data Regel nr 2: Ett objektorienterat språk ska tillåta arv Regel nr 3: Ett objektorienterat språk ska tillåta dynamisk bindning av anrop till metoder Arv innebär att medlemmar i en klass blir tillgängliga i en annan klass Arv är en viktig teknik för att skapa lösningar som är Återanvändbara Förändringsbara Utbyggnadsbara

Arv Via arv kan man skapa hierarkier av klasser som modellerar egenskaper i systemet Varje ärvande klass utvecklas som en specialisering eller utökning av den ärvda klassen Ärvande klass kallas för härledd klass eller subklass Den ärvda klassen kallas för basklass eller superklass

Enkla eller multipla arv I C# så är endast enkla arv tillåtna Det vill säga en klass får endast ärva från en basklass

Åtkomlighet Medlemmar private, endast åtkomlig i den egna klassen internal, endast åtkomlig i en och samma assembly protected, endast åtkomlig via arv och i den egna klassen internal protected, kombination av internal och protected public, fullt åtkomlig utan restriktioner Medlemmar i klasser är default private Klasser public eller internal Klassens åtkomlighet kan begränsa åtkomligheten för dess medlemmar Klasser är default internal Om det i en klass är definierat en inre klass, så gäller samma åtkomstregler för den inre klassen som för övriga medlemmar i den yttre klassen.

Egenskaper kan ärvas i flera led Sådant som är public eller protected i basklassen är synligt via arv Sådant som är internal är endast synligt i en och samma assembly Sådant som är internal protected är fullt synligt i en och samma assembly men endast åtkomligt via arv mellan skilda assemblities

En enkel klass public class Person private string name; protected int ålder; public Person(string namn) //Anropas automatiskt när ett objekt skapas Console.WriteLine("Konstruktor Person"); name = namn; ~Person() //Destruktor, anropas automatiskt när ett objekt upphör att existera Console.WriteLine("Destruktor Person"); public string GetName()return name; //Metoder som så småningom kommer ärvas public void Write() Console.WriteLine("Write - Person: " + GetName()); public void Print() Console.WriteLine("Print - Person: " + GetName());

Klassen provas public class Program public static void Main() Person kalle = new Person("Kalle"); kalle.write(); kalle.print(); //Console.WriteLine( Ålder 0 år, ålder); //ålder ej synligt Konstruktor Person Write - Person: Kalle Print - Person: Kalle Destruktor Person

Ett arv public class Student : Person //Arv från klassen Person public Student(string namn) : base(namn) //OBS! base Console.WriteLine("Konstruktor Student"); ~Student() Console.WriteLine("Destruktor Student"); public new void Print() //new markerar omdefiniering av metoden Console.WriteLine("Print - Student: " + GetName()); public string Namn //En property get return GetName(); //Var är metoden GetName definerad??

Test av arvet public class Program public static void Main() Student stina = new Student("Stina"); stina.write(); stina.print(); OBS => Konstruktor Person Konstruktor Student Write - Person: Stina Print - Student: Stina Destruktor Student Destruktor Person

Referens av basklassen typ public class Program public static void Main() Student stina = new Student("Stina"); stina.write(); stina.print(); Person nisse = new Student("Nils"); nisse.write(); nisse.print(); Det här är ett exempel på statisk bindning av metoder till metodanrop. Metoderna binds till anropen redan vid kompilering och länkning av programmet Det sker med hjälp av referensens typ. OBS => OBS => Konstruktor Person Konstruktor Student Write - Person: Stina Print - Student: Stina Konstruktor Person Konstruktor Student Write - Person: Nils Print - Person: Nils Destruktor Student Destruktor Person Destruktor Student Destruktor Person

Ett arv till! public class Orienterare : Student public Orienterare(string namn) : base(namn) //OBS! base Console.WriteLine("Konstruktor Orienterare"); ~Orienterare() Console.WriteLine("Destruktor Orienterare"); public new void Print() base.print(); //base refererar till basklassen //Console.WriteLine("Print - Orienterare: " + name); Console.WriteLine("Print - Orienterare: " + GetName()); Console.WriteLine("Print Orienterare, ålder: " + ålder);

Ärvs properties? public class Program public static void Main() Orienterare lisa = new Orienterare("Lisa"); lisa.write(); lisa.print(); Console.WriteLine("Namnet är: " + lisa.namn); => Konstruktor Person Konstruktor Student Konstruktor Orienterare Write - Person: Lisa Print - Student: Lisa Print - Orienterare: Lisa Print - Orienterare, ålder: 47 Namnet är: Lisa Destruktor Orienterare Destruktor Student Destruktor Person

is och as, hjälp vid typomvandling av referenser class Program public static void Main() Orienterare lisa1 = new Orienterare("Lisa"); Person lisa2 = lisa1; //Console.WriteLine("Namnet är: " + lisa2.namn); //Varför blir det fel? if (lisa2 is Orienterare) //Är personen lisa2 en orienterare? Console.WriteLine("Namnet är: " + ((Orienterare)lisa2).Namn); Orienterare lisa3 = lisa2 as Orienterare; //Omvandla referensen if (lisa3!= null) //på ett säkert sätt Console.WriteLine("Namnet är: " + lisa3.namn);

Referenser vid arv Det är alltid möjligt att använda en referens av någon basklass-typ Vid statisk bindning så blir endast medlemmar i basklassen åtkomliga via basklassens referens Det är osäkert att använda en referens av en härledd klass på ett objekt av basklassens typ Vad händer om man anropar en metod som endast finns i den härledda klassen?

Design, vilken sorts relation? Test av Arv, Är den härledda klassen en specialisering av basklassen? Är en Student en Person? Är en Cykel ett Fordon? Test av Association, testa om ett objekt bör känna till ett annat objekt Känner hyresgästen till sin lägenhet? Test av Aggregation, testa om en helhet aggregerar delar till sig Har bilen extrahjus? Har studenten ett eller flera betyg? Test av Komposition, testa komponenter, är det frågan om en helhet uppbyggd av delar Är Bilföraren en förare om körkortet upphör att existera? Är Burken fortfarande en burk om dess botten upphör att existera? Komposition är speciell sorts aggregation Aggregation är en speciell sorts association Var försiktig med arv! Om inte testerna tyder på arv så välj en annan typ av relation