内风湿是什么原因引起的| 乙肝两对半和乙肝五项有什么区别| 98年一月属什么生肖| 腰椎间盘突出挂什么科| 心包隐窝是什么意思| 职业资格证书有什么用| 3月14日是什么日子| 六七年属什么生肖| 早上起床手指肿胀是什么原因| 蓝颜知己是什么意思| 菊花脑是什么菜| 鸟屎掉手上有什么预兆| 梦见前男友结婚了是什么征兆| 驾校教练需要什么条件| 做馒头用什么面粉好| 不射精是什么原因| 匪夷所思什么意思| 葡萄什么时候种植| hr是什么品牌| 高是什么意思| 保守是什么意思| 想的偏旁是什么| 健脾去湿吃什么药| 上海特产是什么| 安吉白茶属于什么茶类| 抚摸是什么意思| 三岁宝宝喝什么奶粉比较好| 什么口什么心| 1点到3点是什么时辰| 低压高吃什么中成药| 灰指甲是什么症状| 西洋参适合什么人吃| 师团长是什么级别| 嗝什么意思| 痹症是什么病| 浑身酸疼是什么原因| 脑溢血是什么原因| 河蚌吃什么| 豆干炒什么好吃| 过三关 是什么意思| 总是感觉有尿意是什么原因| 躯体化障碍是什么病| 西瓜有什么功效和作用| 牙签肉是什么肉| poison是什么意思| 天生一对成伴侣是什么生肖| 立秋日有什么禁忌| 复方氨酚烷胺片是什么药| 社会公德的主要内容是什么| 拔智齿后要注意什么| 一什么桃花| 种植牙是什么| 疽是什么意思| spi是什么| 脑白质病变吃什么药| 5月25日什么星座| 爆肝是什么意思| 黄精什么味道| 重庆是什么地形| 阳虚吃什么药效果最好| 嗓子哑是什么原因引起的| 肝囊肿是什么| 五音不全是什么意思| 血栓是什么症状| 吃什么可以补气血| 无声无息是什么意思| 6月15日是什么日子| 心管是什么部位| scr是什么| 电光性眼炎用什么眼药水| dmf是什么溶剂| 龟吃什么食物| 下巴两边长痘痘是什么原因| 阴虚火旺有什么症状| 64年属什么生肖| 口苦尿黄是什么原因| 阿奇霉素治疗什么| 指甲盖上有竖纹是什么原因| 什么叫风热感冒| 荔枝什么季节成熟| 梦见在天上飞是什么意思| 办理港澳通行证需要什么证件| 第一个月怀孕有什么反应| 原始分是什么意思| 腿部青筋明显是什么原因| 潮热盗汗是什么意思| semir是什么牌子| 太妃糖为什么叫太妃糖| 阳痿是什么意思| 粉红粉红的什么| 肺结节不能吃什么食物| 什么是职业暴露| 硅胶是什么材料| 小孩积食吃什么药| 鸡代表什么数字| 不能晒太阳是什么病| 阿联酋和迪拜什么关系| utc是什么意思| 巨蟹女和什么座最配对| 一个家庭最重要的是什么| 老气横秋是什么意思| 肺型p波是什么意思| 为什么会得甲状腺| 花白鲢喂养什么长得快| 明天叫什么日| 月经一直不干净吃什么药| 立夏吃什么蛋| 高压低压是什么意思| 胸部正位片检查什么| 什么是三观不合| 不长毛的猫叫什么名字| 双子座是什么星座| classic什么意思| 心肌桥是什么意思| 一个草字头一个氏念什么| 白露节气的含义是什么| 牛腩炖什么好吃| 脚背痒是什么原因| 什么的蚂蚁| 白茶是什么茶| 长痱子是什么原因| 婴儿反复发烧是什么原因引起的| 祛痘用什么药膏| 圆脸适合什么发型| 护照和签证有什么区别| 小肚子疼挂什么科| 什么是内分泌| 喝酒脸红是什么原因造成的| 经常说梦话是什么原因| 脚背痒是什么原因| 定位是什么意思| 宫外孕是什么原因造成的| 腹水是什么原因引起的| 发烧咳嗽吃什么药| 肾上腺素是什么东西| 湛江有什么好吃的| poppy什么意思| 两榜进士是什么意思| 眉毛旁边长痘痘是什么原因| 瑜伽是什么运动| 吃狗肉有什么危害| 五行水多代表什么| 献血之后吃什么比较好| 什么旺土| 老年人贫血吃什么补血最快最有效| 梦见手机丢了又找到了是什么意思| 帝王蟹什么季节吃最好| 吃什么不上火| 三元及第是什么意思| 月子期间能吃什么水果| 颅压高有什么症状| 人的血压一天中什么时候最高| 侏儒症是什么原因引起的| 囚徒是什么意思| 375是什么意思| 高血压会引起什么并发症| 政委是什么级别| 狗狗身上有皮肤病用什么药| 为什么总是莫名其妙的想哭| 捐精有什么要求| 部长是什么级别| 平均分是什么意思| 海为什么是蓝色| 1978年是什么命| 人工念什么字| 外甥是什么关系| 合掌是什么意思| 梦见鸡死了是什么预兆| 腰酸背痛吃什么药| 身上长痘痘是什么原因| 六指是什么原因导致的| 血红蛋白偏低什么意思| 身份证号后四位代表什么| 翌是什么意思| 属蛇本命佛是什么佛| 查甲状腺功能挂什么科| 县检察长是什么级别| 1989年属什么生肖| 老年人口苦是什么原因| 免疫力低会引起什么病| 人流需要准备什么| 霍乱是什么病| 猫五行属什么| 焦俊艳和焦恩俊是什么关系| 血清检查能测出什么| 多吃蔬菜对身体有什么好处| 虚劳病是什么病| 小211是什么意思| 为什么感冒会全身酸痛| 腋下有异味用什么药| 排卵期是在什么时候| 入党有什么用| 什么原因引起甲亢| 利而不害为而不争是什么意思| 绝望是什么意思| 蓝莓什么季节成熟| 难道是什么意思| 肛门裂口是用什么药膏| 三七粉吃了有什么好处| 顶胯是什么意思| 山梨酸钾是什么添加剂| 拉肚子低烧是什么原因| 脑鸣吃什么药| 蝴蝶有什么寓意| 英语6级是什么水平| 呵呵哒什么意思| 蚕蛹是什么| 男生喜欢女生有什么表现| 股癣用什么药膏| 大姨妈血块多是什么原因| 肝胆湿热喝什么茶| 小猫来家里有什么预兆| 叶酸补什么| 主动脉钙化什么意思| 肺结核阳性是什么意思| 肛门下坠感是什么原因| 冰妹什么意思| 香港脚是什么意思| 螺旋杆菌阳性是什么病| 流产期间吃什么好| 1206是什么星座| 上寒下热体质吃什么中成药| 类风湿忌吃什么| 女命七杀代表什么| 场合是什么意思| 电视为什么打不开| 子宫肌瘤是什么原因导致的| 子宫肌瘤有什么症状| 咖啡色五行属什么| 做什么好赚钱| 查胆固醇挂什么科| 怀孕一个月什么症状| 麸质是什么意思| 10.28是什么星座| 难免流产什么意思| 感冒为什么会全身酸痛无力| 什么牌子的沐浴露好| 甲状腺吃什么盐好| 油头粉面是什么意思| 4c是什么| 游戏是什么| 什么是本科| 吃什么下奶| 肺大泡有什么危害| 猫咪呕吐吃什么药| 备孕吃什么水果| 自尊是什么意思| 荞麦和苦荞有什么区别| 葡萄糖为什么叫葡萄糖| 脑梗能吃什么水果| ig是什么意思| 前列腺钙化斑是什么意思| 什么叫化疗| 周围神经病是什么意思| 武汉都有什么区| 拉拉什么意思| 肋膈角锐利是什么意思| 三个全念什么| 罢黜百家独尊儒术是什么意思| 开山鼻祖是什么意思| trace是什么意思| 胸痛应该挂什么科| 什么鱼吃鱼粪便| 暮雪是什么意思| 百度Zum Inhalt springen

Exposición de Gemas y Minerales de Vancouver Spanish.xinhuanet.com

aus Wikipedia, der freien Enzyklop?die
百度 上港的比赛只是晚于阿尔多哈杜哈伊勒,所以只能排在第二。

Polymorphie oder Polymorphismus (griechisch für Vielgestaltigkeit) ist ein Konzept in der objektorientierten Programmierung, das erm?glicht, dass ein Bezeichner abh?ngig von seiner Verwendung Objekte unterschiedlichen Datentyps annimmt. In ?lteren typisierten Programmiersprachen wird dagegen jedem Namen und jedem Wert im Quelltext eines Programms h?chstens ein Typ zugeordnet. Dies bezeichnet man als Monomorphie.

Arten der Polymorphie

[Bearbeiten | Quelltext bearbeiten]

Polymorphie überladener Operatoren

[Bearbeiten | Quelltext bearbeiten]

Ein Bezeichner, der für einen Operator steht (bspw. ?+“, ??“), kann mehrmals mit anderer Bedeutung implementiert werden. Für jeden Kontext, in dem der Operator neu deklariert wurde, muss die Implementierung immer eindeutig sein.

Polymorphie der objektorientierten Programmierung

[Bearbeiten | Quelltext bearbeiten]

Die Polymorphie der objektorientierten Programmierung ist eine Eigenschaft, die immer im Zusammenhang mit Vererbung und Schnittstellen (Interfaces) auftritt. Eine Methode ist polymorph, wenn sie in verschiedenen Klassen die gleiche Signatur hat, jedoch erneut implementiert ist.

Gibt es in einem Vererbungszweig einer Klassenhierarchie mehrere Methoden auf unterschiedlicher Hierarchieebene, jedoch mit gleicher Signatur, wird erst zur Laufzeit bestimmt, welche der Methoden für ein gegebenes Objekt verwendet wird (Dynamisches Binden). Bei einer mehrstufigen Vererbung wird jene Methode verwendet, die direkt in der Objektklasse (d. h. jene Klasse, von der das Objekt ein Exemplar ist) definiert ist, oder jene, die im Vererbungszweig am weitesten ?unten“ liegt (d. h. die Methode, die von der Vererbung her am n?chsten ist).

Moderne Konzepte kennen jedoch auch Polymorphie über Klassengrenzen hinaus. So erlaubt die Programmiersprache Objective-C die Polymorphie zwischen zwei gleichnamigen Methoden, die in verschiedenen Klassen erstmals definiert sind.

// NSObject kennt nicht -doSomething
@interface KlasseA : NSObject {
    
}
- (void) doSomething;
@end

@interface KlasseB : NSObject {
    
}
- (void) doSomething;
@end
// irgendwo
id object =  // Ein Objekt einer beliebigen Klasse
[object doSomething]; // polymorph zwischen KlasseA und KlasseB

Die Subklasse-vor-Basisklasse-Regel gilt auch hier: Wenn die KlasseB zur KlasseC abgeleitet wird, würde die entsprechende Methode der KlasseC ausgeführt.

Polymorphie einer Funktion bzw. Prozedur

[Bearbeiten | Quelltext bearbeiten]

Ist der Rückgabewert oder ein Argument einer Funktion polymorph, so hei?t die Funktion polymorphe Funktion. Mit Hilfe polymorpher Funktionen kann die Generizit?t von Datenstrukturen auch in Algorithmen angewandt werden.[1]

Polymorphie von Datentypen oder Klassen

[Bearbeiten | Quelltext bearbeiten]

Wird für eigene Datentypen bzw. Klassen bei der Instanziierung bzw. beim Konstruktoraufruf ein Parameter für den tats?chlich verwendeten Datentyp übergeben, spricht man von parametrischer Polymorphie, welche semantisch mit Generizit?t übereinstimmt.

Weitere Unterteilungen

[Bearbeiten | Quelltext bearbeiten]

Folgende weitere Unterteilung ist m?glich:

  • universelle Polymorphie
    • parametrische Polymorphie
    • Inklusions-/Vererbungspolymorphie
  • Ad-hoc-Polymorphie
    • Coercion
    • überladung

Manchmal wird Ad-hoc-Polymorphie gleichgesetzt mit überladen. Das ist auf Christopher Strachey zurückzuführen,[2] der als Erster Polymorphie in parametrische und Ad-hoc-Polymorphie unterteilte.

Luca Cardelli und Peter Wegner erweiterten Stracheys Konzept um die Inklusionspolymorphie,[3] um Subtypen und Vererbung zu modellieren. Die obige Auflistung spiegelt also Stracheys Einteilung wider, erweitert um die Inklusionspolymorphie von Cardelli und Wegner.

Universelle und Ad-hoc-Polymorphie

[Bearbeiten | Quelltext bearbeiten]

Universelle Polymorphie unterscheidet sich von Ad-hoc-Polymorphie in mehreren Aspekten. Bei Ad-hoc-Polymorphie kann der einem Namen zugeordnete Wert nur endlich vielen verschiedene Typen angeh?ren. Diese sind zudem w?hrend der Kompilierung bekannt. Universelle Polymorphie dagegen erlaubt es, jedweden bekannten Typ zuzuordnen; auch solche, die vielleicht erst sp?ter definiert werden.

Ein weiterer Unterschied liegt darin, dass die Implementierung einer universell-polymorphen Funktion generell den gleichen Code unabh?ngig von den Typen ihrer Argumente ausführt, w?hrend ad-hoc-polymorphe (also überladene) Funktionen abh?ngig von den Typen ihrer Argumente v?llig unterschiedlich implementiert sein k?nnen.

überladen und Coercion

[Bearbeiten | Quelltext bearbeiten]

Funktionen sind überladen, wenn unterschiedliches Verhalten mit demselben Namen verbunden ist. Dies gilt analog für Bezeichner von Operatoren: Beispielsweise ist der Operator + in vielen Programmiersprachen von vornherein überladen. So k?nnen mit ihm sowohl ganze Zahlen als auch Gleitkommazahlen addiert werden. Oft wird er auch zur Stringkonkatenierung verwendet:

 42 + 3              (1)
 3.14 + 1.0          (2)
 "Hallo" + " Welt!"  (3)

Einige Programmiersprachen unterscheiden dabei, welche Namen überladen werden dürfen und welche nicht. In Java ist Methodenüberladung erlaubt, Operatorüberladung au?er den schon eingebauten überladungen wie der des +-Operators aber nicht. Auch in C# sind nicht alle Operatoren überladbar. C++ und manche andere Sprachen erlauben generell beides.

Coercion ist eine Art implizite Typumwandlung, sozusagen das Anwenden einer unsichtbaren, automatisch eingefügten Funktion, um zum Beispiel Argumente eines Unterprogramms oder einer Funktion in die erwarteten Typen umzuwandeln. Coercion ist mit dem überladen eng verknüpft, und die Unterschiede sind für den Programmierer nicht unbedingt gleich ersichtlich.

Beispiel:

 3.14 + 2            (4)
 3 + 2.14            (5)

In einer Sprache k?nnte der Additionsoperator lediglich für zwei reelle Zahlen definiert sein. Coercion würde dann dafür sorgen, dass ganze Zahlen zuerst in Gleitkommazahlen umgewandelt werden. In (4) und (5) würde dann Coercion zum Einsatz kommen. Es ist aber auch denkbar, dass der Additionsoperator für mehrere Varianten definiert ist.

Bei der überladung handelt es sich offenbar nicht um eine echte Form von Polymorphie, da man sich vorstellen k?nnte, der Compiler werde die Uneindeutigkeit durch die mehrfache Benutzung eines Symboles zur Kompilationszeit wieder aufl?sen. Wir erlauben also nur einem Symbol, verschiedene (funktionsartige) Werte zu denotieren, die allerdings unterschiedliche und m?glicherweise zueinander inkompatible Typen haben.

Mit Coercions verh?lt es sich ?hnlich. Man k?nnte meinen, ein Operator akzeptiere Operanden verschiedenen Typs (wie das + oben), jedoch müssen die Typen erst für den Operator gewandelt werden. Der Ausgabetyp des Operators h?ngt also nicht mehr mit den Typen der Operanden zusammen (oder nur partiell), daher kann keine echte Polymorphie vorliegen.

Parametrische Polymorphie

[Bearbeiten | Quelltext bearbeiten]

Parametrisierte Polymorphie repr?sentiert Typen, deren Definitionen Typvariablen enthalten. In Java spricht man auch von generischen Typen oder Generics. Die meisten modernen objektorientierten Programmiersprachen unterstützen parametrische Typdefinitionen, darunter auch Strongtalk (eine Variante von Smalltalk mit Typsystem), C# oder Eiffel. In C++ k?nnen generische Typen mit Hilfe sogenannter Templates nachgebildet werden.

Beispiel:

  • monomorph
TYPE iContainer IS ARRAY OF INTEGER;
  • polymorph durch Typvariable
TYPE Stack IS ARRAY OF [TYPVARIABLE]

Beschr?nkter parametrischer Polymorphismus

[Bearbeiten | Quelltext bearbeiten]

Man unterscheidet grunds?tzlich

  • einfachen parametrischen Polymorphismus und
  • beschr?nkten parametrischen Polymorphismus.

Letzterer behebt die Probleme der Typsicherheit, die innerhalb von Typdefinitionen dadurch entstehen, dass beim Erstellen der Typdefinition auf Grund der Parametrisierung noch nicht klar ist, Objekte welchen Typs eigentlich Gegenstand der Typ-Operationen (des Protokolls, der Methoden, die Terminologie variiert hier je nach Programmiersprache) sind. Wird durch einen Typ beispielsweise eine numerische Operation definiert, die auf den Elementen des Typs ausführbar sein soll, seine Typvariable dann aber mit einem nichtnumerischen Typen belegt, so würde es zu Laufzeitfehlern kommen. In der Regel verwendet man daher beschr?nkte parametrische Typen, die für ihre Typvariablen eine Beschr?nkung auf bestimmte Typen angeben. In Strongtalk wird hierzu bspw. die Typvariable mittels T < Supertyp angegeben, wobei Supertyp die Einschr?nkung der Typen angibt, die in die Typvariable T eingesetzt werden k?nnen. Java erm?glicht die Angabe solcher Einschr?nkungen mittels der Schreibweise <T extends Supertyp>. In C# gibt es verschiedene Arten von Einschr?nkungen ("Constraints"), die man für einen Typparameter verlangen kann: Abgeleitet von einer bestimmten Basisklasse, Vorhandensein eines bestimmten Interfaces oder eines parameterlosen Konstruktors sowie weitere. Kombinationen mehrerer Constraints sind m?glich, die dann alle erfüllt sein müssen.

Inklusionspolymorphie

[Bearbeiten | Quelltext bearbeiten]

Inklusionspolymorphie bezeichnet die Eigenschaft, jede Methode statt auf einem Subtyp auch auf einem Basistypen ausführen zu k?nnen. Subtyping ist demnach eine Form der Inklusionspolymorphie.

Man unterscheidet zwischen:

  • Kompilationszeit-Polymorphie (statisches Binden)
    Es kann zur Kompilationszeit der Typ des Objekts und somit die aufgerufene Funktion (auch ?Methode“ genannt) bestimmt werden.

Angenommen, eine Anwendung soll statistische Daten sowohl grafisch als auch schriftlich in Tabellenform darstellen. Au?erdem soll es m?glich sein, die Darstellungsmethoden über Plug-ins zu erweitern. Dann erlaubt das Konzept der Polymorphie über das VisualizationPlugin Interface jede beliebige Implementierung (hier GraphDisplayPlugin, TextDisplayPlugin, HistogramDisplayPlugin) aufzurufen.

Die Anwendung selbst muss bei neuen Plug-ins nicht ge?ndert werden und kann diese einfach über das Interface mit dem Aufruf von setData und display starten.

interface VisualizationPlugin {
    public void setData(DisplayData data);
    public void display();
}

class GraphDisplayPlugin implements VisualizationPlugin {
    public void setData(DisplayData data) { /* set data to be displayed */ }
    public void display() { /* Show Data as Graph */ }
}

class TextDisplayPlugin implements VisualizationPlugin {
    public void setData(DisplayData data) { /* set data to be displayed */ }
    public void display() { /* Show Data as table */ }
}

class HistogramDisplayPlugin implements VisualizationPlugin {
    public void setData(DisplayData data) { /* set data and calculate history data */ }
    public void display() { /* Show history data as Graph */ }
}

Das folgende Beispiel in der Programmiersprache C# zeigt Subtyping für die Methode berechneFlaecheninhalt(). Die Klassen Rechteck und Dreieck implementieren die Methode, die das Interface Polygon deklariert. Die Methode gibFlaecheninhalt(Polygon polygon) kann die Implementierung der Methode berechneFlaecheninhalt() für jeden Subtyp des Interface Polygon (siehe abgeleitete Klasse) aufrufen.

public interface Polygon
{
	double berechneFlaecheninhalt();
}

public class Rechteck : Polygon
{
	private double breite, hoehe;
	
	// Konstruktor
	public Rechteck(double breite, double hoehe)
	{
		this.breite = breite;
		this.hoehe = hoehe;
	}
	
	public double berechneFlaecheninhalt()
	{
		return breite * hoehe;
	}
}

public class Dreieck : Polygon
{
	private double a, b, c;
	
	// Konstruktor
	public Dreieck(double a, double b, double c)
	{
		this.a = a;
		this.b = b;
		this.c = c;
	}
	
	public double berechneFlaecheninhalt()
	{
		// Formel des Heron für den Fl?cheninhalt des allgemeinen Dreiecks
		return 0.25 * Math.Sqrt((a + b + c) * (-a + b + c) * (a - b + c) * (a + b - c));
	}
}

public static double gibFlaecheninhalt(Polygon polygon)
{
	return polygon.berechneFlaecheninhalt();
}

public static void Main(string[] args)
{
	double flaecheninhalt = gibFlaecheninhalt(new Rechteck(12, 16));  // flaecheninhalt = 192
	Console.WriteLine("Das Rechteck hat den Fl?cheninhalt " + flaecheninhalt);
	
	flaecheninhalt = gibFlaecheninhalt(new Dreieck(4, 13, 15));  // flaecheninhalt = 24
	Console.WriteLine("Das Dreieck hat den Fl?cheninhalt " + flaecheninhalt);
}

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Informatik. In: Duden. Mannheim 2001, ISBN 978-3-411-10023-1, S. 496.
  2. Fundamental concepts in programming languages. Lecture notes for International Summer School in Computer Programming, Copenhagen, August 1967.
  3. On Understanding Types, Data Abstraction, and Polymorphism. In: ACM Computing Surveys. Band 17, Nr. 4, 1985, S. 471–522.
当归有什么功效 兰桂齐芳是什么意思 男性查hpv挂什么科 飞是什么结构 产后漏尿是什么原因
景五行属性是什么 上课什么坐姿可以瘦腿 欲购从速什么意思 主动权是什么意思 脑脱髓鞘改变是什么病
有氧运动是指什么 什么时间艾灸效果最好 o型血与b型血生的孩子是什么血型 游泳比赛中wj是什么意思 咿呀咿呀哟是什么歌
psv医学是什么意思 阿佛洛狄忒是什么神 腿酸痛是什么原因 什么是双相情感障碍 什么蛋白质含量高
大张伟的真名叫什么hcv8jop7ns2r.cn 65什么意思hcv8jop6ns5r.cn hiv弱阳性是什么意思xinjiangjialails.com 为什么会长痱子hcv8jop6ns5r.cn 手会发抖是什么原因hcv8jop3ns3r.cn
钧鉴是什么意思hcv8jop7ns8r.cn 鼓目念什么hcv9jop3ns2r.cn 动则气喘是什么原因hcv8jop2ns9r.cn 手心脚心热吃什么药wuhaiwuya.com 妇科清洁度3度用什么药治疗hcv9jop1ns0r.cn
汗味酸臭是什么原因hcv7jop7ns4r.cn 拉肚子肚子疼吃什么药hcv7jop5ns2r.cn 心律不齐是什么症状hcv9jop6ns0r.cn 寻常疣是什么原因造成的hcv9jop5ns9r.cn 不对劲是什么意思hcv9jop2ns7r.cn
什么的落日hcv8jop8ns1r.cn 4ever是什么意思hcv8jop3ns9r.cn 脚臭用什么泡脚效果好baiqunet.com 儿童舌系带短挂什么科hcv9jop5ns5r.cn 梅花什么时候开放hcv8jop0ns9r.cn
百度