polymorfism

10
Polymorfism

Upload: rudyard-wyatt

Post on 31-Dec-2015

28 views

Category:

Documents


0 download

DESCRIPTION

Polymorfism. Polymorfa variabler. class Person {}. Tillåtet, eftersom alla Studenter och Lärare är Personer. class Teacher : Person {}. class Student : Person {}. … Person a = new Person(); Person b = new Student(); Person c = new Teacher(); …. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Polymorfism

Polymorfism

Page 2: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22

Polymorfa variabler

class Person {}

class Teacher : Person {}

class Student : Person {}

Person a = new Person();

Person b = new Student();

Person c = new Teacher();

Teacher x = new Person();

Student y = new Person();

Tillåtet, eftersom alla Studenter och Lärare är

Personer.

Inte tillåtet, eftersom inte alla Personer är

Studenter och Lärare.

Page 3: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 33

Bil

Stanna ()

Fordon

Stanna ()

FordonsStannare

StannaFordon ()

Polymorfism och dynamisk bindning

Page 4: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 44

Metodpolymorfism

Det finns två slags ”metodpolymorfism”:

• Parameterpolymorfism (överbelastning)Även om operationen har samma namn, blir det en annan metod om vi har en annan argumentlista, dvs en annan signatur.

• Funktionspolymorfism (överskuggning)Om en operation i en subklass har samma signatur som en operation i dess basklass, kan subklassens metod överskugga superklassens metod.

Page 5: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 55

Parameterpolymorfismclass Person{

string namn;int age;

void ändra(int aa) {age = aa;

}void ändra(string nn) {

namn = nn;}void ändra(string nn, int aa) {

namn = nn;age = aa;

}}

Page 6: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 66

Överskuggning (funktionspolymorfism)

Cykelmärkemodell

beräknaLivslängdKvar()

VäxelcykelantalVäxlarberäknadrevlivslängd()beräknaLivslängdKvar()

• Ibland omdefinieras operationer

• Samma operation (med samma

namn) finns då hos både subklassen och superklassen, men med olika metoder (annan kod som skall utföras)

• Kallas i programmeringen för ” överskuggning”

förändrad metod

Page 7: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 77

Polymorfism• Samma meddelande

kan sändas till flera olika mottagare

• Olika mottagare exekverar varsin sekvens av instruktioner

• Att det finns flera beteenden, för det som betraktas som samma tjänst, kallas polymorfism

:Brev

porto()

:Vykort

porto()

:Paket

porto()

Page 8: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 88

Funktionspolymorfism

class Person {

public virtual void write() {

// Kod}

}

class Teacher : Person

{

public override void write() {

// Annan kod}

}

class Student : Person

{public override void write() {

// Annan kod}

}

Page 9: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 99

Dynamisk bindning• I ett objektorienterat program kan till namnet samma

operation implementeras olika i olika specialiseringar

• En referens till en variabel ur en klass kan i själva verket referera till en specialisering

• Det fastställs inte vilken av de till namnet lika operationerna som skall anropas förrän programmet körs

• Detta innebär att det är lätt att förändra/utöka ett system

• Det är lätt att återanvända kod

Page 10: Polymorfism

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 1010

Funktionspolymorfismclass Person {

public void write() {

// Kod}

}

class Student : Person

{public new void write() {

// Annan kod}

}

Men om vi inte har gjort superklassens metod ”virtual” då?

Med ”new” talar vi om att vi vill dölja den ärvda metoden men…

...

Person p = new Student();

Student s = new Student();

p.write();

s.write()

...

Kör write från Person-klassen.

Kör write från Student-

klassen.