polymorfism
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 PresentationTRANSCRIPT
![Page 1: Polymorfism](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/1.jpg)
Polymorfism
![Page 2: Polymorfism](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022072015/56812fe3550346895d955a90/html5/thumbnails/10.jpg)
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.