食道炎吃什么药好| 热休克蛋白90a检查高是什么原因| 享受低保需要什么条件| 五月二十五是什么星座| 肾积水是什么意思| 胆汁反流吃什么药最好| 为什么眼睛有红血丝| 6月19号是什么星座| 风热咳嗽吃什么药| 做梦梦见别人怀孕是什么意思| 腋下副乳有什么危害吗| 生命是什么意思| 什么人容易得帕金森| 尿频看什么科| 送对象什么礼物好| 什么是原发性高血压和继发性高血压| 金是什么结构的字| 冒节子是什么东西| 泌尿是什么意思| 牛乳是什么| 晚上七点半是什么时辰| 植树节是什么季节| 甲状腺炎吃什么药好得快| 弯脚杆是什么意思| 靖国神社是什么| 飞机什么时候停止登机| wbc是什么意思| 肿瘤切开了里面是什么| 试管进周期是什么意思| coo是什么| 屁股疼是什么原因引起的| 白色念珠菌是什么意思| 今天天气适合穿什么衣服| 什么是格林巴利综合症| 经常犯困是什么原因| 瓜尔佳氏现在姓什么| 武夷岩茶属于什么茶| 头皮发紧是什么病的前兆| 第一次查怀孕挂什么科| 低氧血症是什么意思| 什么是盗汗症状| 九月初十是什么星座| 带手串有什么讲究| 双重所有格是什么意思| 什么降压药副作用小且效果最好| 海苔吃多了有什么坏处| 1月13日什么星座| 彤五行属什么| 气管炎的症状吃什么药好得快| jc是什么牌子| 借力是什么意思| 不什么其什么的成语| 中秋节送什么水果好| 括约肌是什么| 铁棍山药和普通山药有什么区别| 空腹血糖高吃什么药| 身陷囹圄是什么意思| 非经期少量出血是什么原因| 生辰纲是什么东西| 七八年属什么生肖| 狼吞虎咽的意思是什么| 新生儿白细胞高是什么原因| 河北有什么特产| 嘴苦是什么原因| 身体机能是什么意思| 化疗有什么副作用| 一躺下就咳嗽是什么原因| 国防部部长什么级别| 格列本脲和格列美脲有什么区别| 瞅瞅是什么意思| 21.75是什么意思| 不知道自己适合什么工作| 饶有兴致是什么意思| 人生于世上有几个知己是什么歌| 男人小便刺痛吃什么药| 青少年流鼻血是什么原因引起的| 什么是躯体化| 花心大萝卜是什么意思| 心电图是什么科室| 活血化瘀是什么意思| 鸡毛信是什么意思| 什么叫蜘蛛痣| 两肺纹理增多什么意思| 自控能力是什么意思| 衤叫什么偏旁| cybex是什么牌子| 光年是什么单位| 蛇跟什么生肖相冲| 中秋是什么时候| 尿潜血十一是什么意思| 牙齿发黑是什么原因| 广州有什么特产必带| 胎儿头偏大是什么原因| 更年期失眠吃什么药效果好| 甲亢不能吃什么| 男人阴虚吃什么药最好| 整形什么医院好| 非文念什么| 羡慕的什么| 冲锋衣三合一是什么意思| 什么进曹营一言不发| 菠萝蜜不能跟什么一起吃| 穿刺检查是什么意思| 1972年是什么年| 头皮痒用什么洗发水效果好| 什么叫痤疮| 封建迷信是什么| 梦见花椒是什么意思| 手不释卷的释是什么意思| 做梦梦见剪头发是什么意思| 大陆人去香港需要什么证件| 5月6日什么星座| 尿不尽吃什么药| 梦遗是什么意思| 仓鼠可以吃什么蔬菜| 风疹病毒抗体阳性是什么意思| 掉头发去医院看什么科| prn是什么意思| 重金属是什么| 善茬是什么意思| 女生白带是什么| 11月26日是什么星座| 灵芝什么人不能吃| 试管婴儿长方案是什么| 肠镜挂什么科| 呼吸性碱中毒吃什么药| my什么牌子| 移动硬盘什么牌子好| 胃疼发烧是什么原因| 知了的学名叫什么| 疥疮用什么药膏好得快| 梦见床代表什么预兆| 马头琴是什么族的乐器| 吃什么盐比较好有利于健康| 经期吃榴莲有什么好处| 过年是什么时候| 亚甲蓝注射起什么作用| 斯夫是什么意思| bic是什么意思| 做什么运动能瘦肚子| 冬枣是什么季节的水果| 三维彩超和四维彩超有什么区别| 反酸是什么原因| 防弹衣为什么能防弹| 立flag是什么意思| 喝酒不能吃什么水果| 七月份出生是什么星座| 塞翁失马是什么意思| 流注是什么意思| 看见双彩虹有什么征兆| bbox是什么意思| mup是什么意思| 包饺子剩下的面团能做什么| 县级以上医院是指什么| img是什么意思| 手足口什么症状| 夏天出汗多是什么原因| 孕囊是什么东西| 吃什么对眼睛好| 吃杏仁有什么好处| 鼻窦炎都有什么症状| 拉稀吃什么药| 老是吐是什么原因| 性疾病都有什么症状| 空调什么牌子好| 宝宝头爱出汗是什么原因| 鼻涕是绿色的是什么原因| 腿膝盖疼是什么原因| 阴道痛什么原因| 鼓上蚤是什么意思| 小case是什么意思| 尿隐血阳性是什么意思| 1948属什么生肖| 8月20号什么星座| 手关节疼痛是什么原因| 前列腺炎不治疗有什么后果| 1926年属什么| 纸上谈兵是什么生肖| 小孩子上火吃什么能降火| 为什么白带是褐色的| 梦见苹果是什么意思| or发什么音| 斐然是什么意思| 孝道是什么意思| 处女膜什么样子| 慢性非萎缩性胃炎伴糜烂是什么意思| 犬字旁的字和什么有关| 肌酐高吃什么好| 独生子女证有什么用| 槟榔中间的膏是什么| 沙僧为什么被贬下凡间| 梦见洗衣服是什么意思| 98年属虎的是什么命| 老人流口水是什么原因| 爱因斯坦发明了什么| 2月1号什么星座| 锁钥是什么意思| 眉眼是什么意思| 什么水果对皮肤好祛痘| 丁毒豆泡酒能治什么病| 医院量身高为什么会矮| 鱼鳞云有什么预兆| 甲状腺结节有什么感觉| 什么桂什么香| 羊的守护神是什么菩萨| 素金是什么意思| cea升高是什么意思| zxj是什么意思| 猫有什么病会传染给人| 海鸥手表是什么档次| 经常喝咖啡有什么好处和坏处| 右胸上方隐痛什么原因| 体检尿常规查什么| 茭白是什么植物| 坐骨神经痛是什么原因引起的| 靶向治疗是什么| 沐字五行属什么| 西安古代叫什么名字| 梦见蜂蜜是什么意思| 篱笆是什么意思| 嗓子老有痰是什么原因| 糜烂性胃炎可以吃什么蔬菜| 喝藿香正气水不能吃什么| 血压200意味着什么| 好梦是什么意思| 口干舌燥吃什么药最好| 看望病人送什么花| 蔻依属于什么档次| 发热出汗是什么原因| 早饭吃什么| 条的偏旁是什么| 五行属木缺什么| 潮湿是什么意思| ct平扫能检查出什么| 梦见吃排骨是什么意思| 女性真菌感染是什么原因造成的| 水泡长什么样子图片| 款式是什么意思| 唐僧被封为什么佛| eap是什么| 翼字五行属什么| 孕晚期流鼻血是什么原因| 人肉搜索是什么意思| 普洱茶是什么茶类| ctc是什么意思| 金字旁土念什么字| 特点是什么意思| 什么症状提示月经马上要来了| 阴道息肉长什么样| 空巢老人什么意思| 男人都喜欢什么样的女人| 浅笑是什么意思| 捂脸表情什么意思| 芥蒂是什么意思| 福禄寿的禄是什么意思| 鸡蛋和面粉可以做什么好吃的| 龙虾不能和什么一起吃| 大便隐血阴性是什么意思| 嘴皮发白是什么原因| 空亡是什么意思| 脚上长疣是什么原因| 医保卡是什么样子的图| 天空为什么是蓝色的| 鲁班是什么家| 百度Zum Inhalt springen

锦州:开展清明文明祭祀宣传活动

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.
一语道破什么意思 阴阳互补什么意思 小孩子睡觉磨牙是什么原因 体检转氨酶高是什么原因 为什么有白带
敬请是什么意思 每天喝奶茶有什么危害 自渎是什么意思 首级是什么意思 维生素d3什么牌子好
为什么不呢 十周年是什么婚 吃什么对胆囊有好处 办理护照需要什么材料 不值一提是什么意思
豆腐和什么不能一起吃 须眉是什么意思 来加贝念什么 乙肝表面抗原大于250是什么意思 为什么会有月经
手术拆线挂什么科mmeoe.com 严重失眠吃什么药mmeoe.com 羲字五行属什么hcv9jop7ns3r.cn 天蝎什么象hcv8jop8ns8r.cn 吃韭菜有什么好处hcv8jop4ns6r.cn
电轴右偏什么意思hcv8jop8ns7r.cn 心脏官能症吃什么药hcv9jop3ns4r.cn 血小板减少吃什么能补回来hcv8jop7ns0r.cn 左手中指痛什么预兆hcv7jop9ns0r.cn 腰椎退行性变什么意思hcv9jop6ns9r.cn
授受不亲什么意思hcv9jop4ns4r.cn 女同是什么意思hcv8jop9ns5r.cn joseph是什么意思hcv9jop0ns7r.cn 快递已揽件是什么意思hcv8jop8ns4r.cn 屈服是什么意思hcv8jop0ns5r.cn
起死回生是什么生肖hcv8jop2ns5r.cn 见路不走是什么意思hcv7jop4ns6r.cn 国家穷为什么不多印钱hcv7jop6ns8r.cn 小儿麻痹是什么病hcv9jop0ns7r.cn 福不唐捐什么意思hcv8jop5ns0r.cn
百度