Polymorfism (objektorienterad programmering)

Polymorfism innebär inom objektorienterad programmering att flera olika subklasser under en superklass kan hanteras som om de vore instanser av superklassen.[1] Det innebär att klasser med olika behov vad gäller implementering av en viss metod, ändå kan anropas på samma sätt. Den verkställande programkoden finns i respektive subklass, medan det gemensamma gränssnittet definieras i superklassen.

Programexempel

Antag att klasserna Turtle och Hare båda är subklasser till klassen Animal. I sådana fall kan metoder som är gemensamma för haren och sköldpaddan samlas i klassen Animal, till exempel en metod som skriver ut den aktuella hastigheten med vilken djuret rör sig. Det finns också egenskaper hos en sköldpadda och en hare som är gemensamma, men som inte kan implementeras på samma sätt i de båda klasserna, till exempel springer en hare mycket fortare än en sköldpadda. Sådana metoder lämpar sig mycket väl för att implementeras polymorfiskt.

Följande är ett exempel på en arvshierarki i programmeringsspråket C++ där metoderna run() och walk() används polymorfiskt. Detta program ger följande utskrift:

Djuret Sköldpadda har hastigheten 1
Djuret Sköldpadda har hastigheten 2
Djuret Sköldpadda har hastigheten 1
Djuret Hare har hastigheten 1
Djuret Hare har hastigheten 11
Djuret Hare har hastigheten 1

Nedan definieras de tre klassernas gemensamma gränssnitt i superklassen, och metoderna implementeras. I huvudprogrammet (där klasserna skapas och anropas) skapas en array som håller pekare till ett objekt av typen Hare och ett objekt av typen Turtle. Sedan skapas en for-loop som itererar över arrayen och anropar metoden print_current_speed() för att sedan anropa de polymorfa metoderna run() och walk() som höjer respektive sänker djurets hastighet. Däremellan anropas print_current_speed() för att kontrollera att hastigheten verkligen förändras.

#include <iostream>
#include <string>
class Animal //Den gemensamma superklassen
{
	protected: //Attribut som bara har synlighet från subklasser 
		std::string name; //Djurets namn
		int speed; //Djurets hastighet
	public: //Metoder med allmän synlighet
		Animal(int s, std::string n); //Konstruktor
		void print_current_speed(); //Metod för att skriva ut hastigheten
		void virtual run() = 0; //Två virtuella metoder som ändrar djurets hastighet
		void virtual walk() = 0;
};
Animal::Animal(int s, std::string n) //Implementering av konstruktorn för klassen Animal
{
	speed = s;
	name = n;	
}
//Nedan är implementeringen av hastighetsutskriften
void Animal::print_current_speed() {std::cout << "Djuret " << name << " har hastigheten " << speed << std::endl;}

class Turtle: public Animal //Subklassen Turtle
{
	public: //Metoder med allmän synlighet
		Turtle();
		void run();
		void walk();
};

Turtle::Turtle(): Animal(1, "Sköldpadda"){} //Konstruktorn för Turtle anropar här bara superklassens konstruktor
void Turtle::run() {speed++;} //Sköldpaddans springmetod ökar hastigheten med ett
void Turtle::walk() {speed--;} //Sköldpaddans gåmetod minskar hastigheten med ett

class Hare: public Animal //Subklassen Hare
{
	public: //Metoder med allmän synlighet
		Hare();
		void run();
		void walk();
};
Hare::Hare(): Animal(1, "Hare"){} //Konstruktorn för Hare anropar också bara superklassens konstruktor
void Hare::run() {speed = speed + 10;} //Harens springmetod ökar dock hastigheten med 10
void Hare::walk() {speed = speed - 10;} //och gåmetoden sänker den följaktligen också med 10

int main(int argc, char** argv) //Huvudprogrammet
{
	Animal *animal_arr[2]; //Deklarera en array med pekare till Animalobjekt
	animal_arr[0] = new Turtle(); //Här läggs en pekare till ett Turtleobjekt in i arrayen
	animal_arr[1] = new Hare(); //Här läggs en pekare till ett Hareobjekt in i arrayen
	
	for(int i = 0; i < 2; i++) //Här skapas en for-loop som går igenom arrayen
	{
		animal_arr[i]->print_current_speed(); //Skriv ut hastigheten
		animal_arr[i]->run(); //Anropa springfunktionen för det aktuella objektet
		animal_arr[i]->print_current_speed(); //Skriv ut hastigheten igen
		animal_arr[i]->walk(); //Anropa gåfunktionen för det aktuella objektet
		animal_arr[i]->print_current_speed(); //Skriv återigen ut hastigheten
	}
	
	return 0; //Programmet avslutas
}

Referenser

Fotnoter

  1. ^ Deitel 2014, s 442 ff

Litteratur

  • Deitel, Paul J.; Deitel Harvey M. (2014) (på engelska). Visual C# 2012: how to program (5. ed., Internat. ed.). Boston: Pearson. Libris 14932043. ISBN 9780273793304 

Se även

Read other articles:

Disambiguazione – Se stai cercando altri significati, vedi Sarca (disambigua). SarcaSarca nei pressi di DroStato Italia Regioni Trentino-Alto Adige Province Trento Lunghezza78 km[1] Portata media39 m³/s Bacino idrografico1 291 km²[1] Altitudine sorgente770 m s.l.m. NasceMadonna di Campiglio 46°09′29.98″N 10°45′16.24″E / 46.158328°N 10.75451°E46.158328; 10.75451 AffluentiSarca Val Genova SfociaLago di Garda a Torbole del Gard...

 

Ino いの町Kota kecil BenderaLambangLokasi Ino di Prefektur KōchiNegara JepangWilayahShikokuPrefektur KōchiDistrikAgawaPemerintahan • Wali kotaMakiko IkedaLuas • Total471 km2 (182 sq mi)Populasi (Oktober 1, 2015) • Total22.767 • Kepadatan48,34/km2 (12,520/sq mi)Zona waktuUTC+09:00 (JST)Kode pos781-2192Simbol  • PohonEdgeworthia chrysantha • BungaRhododendron • Burung...

 

Keuskupan Agung MalaboArchidioecesis MalaboensisArquidiócesis de MalaboKatolik Katedral Santa Isabel di MalaboLokasiNegara Guinea KhatulistiwaProvinsi gerejawiMalaboInformasiDenominasiKatolik RomaRitusRitus RomaPendirian10 Oktober 1855KatedralKatedral Santa IsabelKepemimpinan kiniPausFransiskusUskup agungJuan Nsue Edjang MayéKeuskupan Agung Malabo adalah Tahta Metropolitan Gereja Katolik untuk provinsi gerejawi Malabo di Guinea Khatulistiwa. Riwayat 1855.10.10: Didirikan sebagai V...

Amrullah Salehامرالله صالحSaleh 2011 Presiden Afganistan (terakhir)Masa jabatan17 August 2021 – 6 September 2021 PendahuluAshraf GhaniPenggantiJabatan dihapuskanWakil Presiden Afganistan Yang ke-5Masa jabatan19 February 2020 – 6 September 2021PresidenAshraf Ghani PendahuluAbdul Rashid DostumPenggantiSirajuddin Haqqani (sebagai Wakil Pemimpin Pertama)Menteri dalam negeriMasa jabatan23 December 2018 – 19 January 2019PresidenAshraf Ghani PendahuluWais ...

 

Artikel ini bukan mengenai Anatomi manusia atau komposisi tubuh (kebugaran fisik).Komposisi tubuh dapat dianalisis dengan berbagai cara. Misalnya dikaitkan dengan unsur-unsur kimiawi yang ada, atau berdasarkan jenis molekul seperti air, protein, jaringan ikat, lemak (atau lipida), hidroksilapatit (dalam tulang), karbohidrat (seperti glikogen dan glukosa) dan DNA. Berdasarkan jenis jaringannya, tubuh dapat dianalisis menjadi air, lemak, jaringan ikat, otot, tulang, dan sebagainya. Berdasarkan ...

 

У этого термина существуют и другие значения, см. Народный банк. Запрос «НБК» перенаправляется сюда; см. также другие значения. Народный банк Китая 中国人民银行 Zhōngguó Rénmín Yínháng Расположение  Китай, Пекин Дата основания 1948 год Президент (председатель) Пан Гуншень Валюта ...

Chemical compound TribromoethanolClinical dataTrade namesAvertinOther namesTribromoethyl alcoholIdentifiers IUPAC name 2,2,2-Tribromoethanol CAS Number75-80-9PubChem CID6400ChemSpider6160UNII149JI83A44CompTox Dashboard (EPA)DTXSID2023698 ECHA InfoCard100.000.822 Chemical and physical dataFormulaC2H3Br3OMolar mass282.757 g·mol−13D model (JSmol)Interactive imageMelting point73–79 °C (163–174 °F) [1][2]Boiling point92–93 °C (198–199 °F) at ...

 

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

 

Questa voce sull'argomento ciclisti tedeschi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Robert Bartko Robert Bartko (2018) Nazionalità  Germania Altezza 186 cm Ciclismo Specialità Pista, strada Termine carriera 2014 CarrieraSquadre di club 2001-2002 Deutsche Telekom2003-2004 Rabobank2009-2014LKT-BrandenburgPalmarès Competizione Ori Argenti Bronzi Giochi olimpici 2 0 0 Mondiali su pista 4 2 2 Vedi maggiori dettagli Statistiche ag...

Election for the Governor of Vermont 1830 Vermont gubernatorial election ← 1829 October 14, 1830 (1830-10-14) 1831 →   Nominee Samuel C. Crafts William A. Palmer Ezra Meech Party National Republican Anti-Masonic Democratic-Republican Popular vote 13,476 10,923 6,285 Percentage 43.9% 35.6% 20.4% Governor before election Samuel C. Crafts Democratic-Republican Elected Governor Samuel C. Crafts National Republican Elections in Vermont Federal governm...

 

SDN 8 TilongkabilaSekolah Dasar Negeri 8 TilongkabilaInformasiJenisSekolah DasarNomor Pokok Sekolah Nasional40500922Kepala SekolahIskandar SalehModeratorSiti QomariaJumlah kelas8Rentang kelasI-VIStatusNegeriAlamatLokasiJalan Dr. Zainal Umar Sidiki, Bone Bolango, Gorontalo, IndonesiaTel./Faks.085240691377Koordinat0°34′29″N 123°06′55″E / 0.5746000°N 123.1153000°E / 0.5746000; [email protected] SD Negeri 8 Tilongkabila atau nama...

 

Painting by Artemisia Gentileschi and Onofrio Palumbo Susanna and the EldersArtistArtemisia Gentileschi, Onofrio PalumboYear1652MediumOil on canvasDimensions200.3 cm × 225.6 cm (78.9 in × 88.8 in)LocationPinacoteca Nazionale, Bologna Susanna and the Elders is a 1652 painting by the Italian artist Artemisia Gentileschi. It currently hangs in the Pinacoteca Nazionale, Bologna. The painting, over two metres broad, was completed in collaboration with Ge...

أوليمبياس (بالإغريقية: Ὀλυμπιάς)‏  معلومات شخصية الميلاد -375 الوفاة -316بدنا  سبب الوفاة رجم  مواطنة مملكة مقدونيا  الزوج فيليب الثاني المقدوني (358 ق.م–)[1]  الأولاد الإسكندر الأكبر[2][3]كليوباترا المقدونية[2]  الحياة العملية المهنة سياسية  ال�...

 

Bilateral relationsJamaican – American relations Jamaica United States The United States maintains close and productive relations with Jamaica. History U.S. President Donald Trump and First Lady Melania Trump meet with Jamaican Prime Minister Andrew Holness in Palm Beach, Florida in March 2019 England established a sugar colony in 1655 following the successful invasion of Jamaica during the Anglo-Spanish War. Spain acknowledged English possession of Jamaica in the 1670 Treaty of Madrid led ...

 

Artikel ini sudah memiliki daftar referensi, bacaan terkait, atau pranala luar, tetapi sumbernya belum jelas karena belum menyertakan kutipan pada kalimat. Mohon tingkatkan kualitas artikel ini dengan memasukkan rujukan yang lebih mendetail bila perlu. (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini)Potongan daging sapi sistem Amerika Serikat dalam bahasa Indonesia Daging sapi (bahasa Inggris: beef) adalah daging yang diperoleh dari sapi yang biasa dan umum digunakan un...

Japanese actress Michiko MaedaMichiko Maeda in a movie posterBorn (1934-02-27) February 27, 1934 (age 90)[1]Osaka, Japan Michiko Maeda (前田通子, Maeda Michiko) is a Japanese film and television actress who became known as the first Japanese actress to appear in a nude scene in a mainstream film. Life and career Michiko Maeda was born in Osaka Prefecture on February 27, 1934. She was working in a department store in the Nihonbashi district of Tokyo when she began working as a...

 

  关于名为胡赟的其他人物,請見「胡定安」。 胡贇基本資料代表國家/地區 中国→ 香港(2006年)出生 (1981-08-31) 1981年8月31日(42歲)[1] 中国湖北省武汉市身高1.80米(5英尺11英寸)[1]體重71公斤(157英磅)[1]握拍右手主項:男子單打職業戰績216勝–193負(男單)0勝–2負(男雙)最高世界排名第4位(男單)(2013年6月13日[2])現時世...

 

NS32016 マイクロプロセッサ 320xxまたはns32000はナショナル セミコンダクター (NS) のマイクロプロセッサシリーズである。320xxシリーズにはコプロセッサインターフェイスがあり、FPUやMMUといったコプロセッサを接続することができる。320xxシリーズは Swordfish CPUに受け継がれた。 始まり:32016と32032 このシリーズの最初のチップは16032である(後に32016と改称)。1970年代後�...

In criminal law, the guilty act The examples and perspective in this article deal primarily with the United States and the United Kingdom and do not represent a worldwide view of the subject. You may improve this article, discuss the issue on the talk page, or create a new article, as appropriate. (April 2023) (Learn how and when to remove this message) Criminal law Elements Actus reus Mens rea Causation Concurrence Scope of criminal liability Accessory Accomplice Complicity Corporate Princip...

 

Questa voce sull'argomento calciatori azeri è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Zaur TağızadəNazionalità Azerbaigian Altezza176 cm Peso77 kg Calcio RuoloAttaccante Termine carriera2010 CarrieraSquadre di club1 1994-1995 Kur-Nur Mingachevir6 (1)1996-1997 Milli Komandasi14 (5)1997-1998 Lelle2 (0)1998 ÍA Akraness1 (0)1998-1999 Şəfa10 (1)1999 Flora Tallinn5 ...