Polymorfism Polymorfa variabler class Person class Teacher Person
Polymorfism
Polymorfa variabler class Person {} class Teacher : Person {} Tillåtet, eftersom alla Studenter och Lärare är Personer. class Student : Person {} … Person a = new Person(); Person b = new Student(); Person c = new Teacher(); … … Teacher x = new Person(); Student y = new Person(); … Inte tillåtet, eftersom inte alla Personer är Studenter och Lärare. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 2
Polymorfism och dynamisk bindning Fordon Stanna () Fordons. Stannare Stanna. Fordon () Bil Stanna () Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 3
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. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 4
Parameterpolymorfism class 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; } } Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 5
Överskuggning (funktionspolymorfism) • 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 Cykel märke modell beräkna. Livslängd. Kvar() Växelcykel antal. Växlar beräknadrevlivslängd() beräkna. Livslängd. Kvar() Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 6
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 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur : Vykort porto() : Paket porto() : Brev porto() 7
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 } } Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 8
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 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 9
Funktionspolymorfism class Person { public void write() { // 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…. . . class Student : Person { public new void write() { // Annan kod } } Person p = new Student(); Student s = new Student(); p. write(); s. write(). . . Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur Kör write från Personklassen. Kör write från Studentklassen. 10
- Slides: 10