<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Starke_Typisierung</id>
	<title>Starke Typisierung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Starke_Typisierung"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Starke_Typisierung&amp;action=history"/>
	<updated>2026-06-11T15:56:50Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Starke_Typisierung&amp;diff=248669&amp;oldid=prev</id>
		<title>imported&gt;Thoken: /* Realisierung strenger Typisierung in verschiedenen Programmiersprachen */ 2 externe Links geändert; ethoberon.ethz.ch no host anderer Ort, csharp-station.com iabot ok</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Starke_Typisierung&amp;diff=248669&amp;oldid=prev"/>
		<updated>2025-11-10T20:53:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Realisierung strenger Typisierung in verschiedenen Programmiersprachen: &lt;/span&gt; 2 externe Links geändert; ethoberon.ethz.ch no host anderer Ort, csharp-station.com iabot ok&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Starke Typisierung&amp;#039;&amp;#039;&amp;#039;, auch &amp;#039;&amp;#039;&amp;#039;strenge Typisierung&amp;#039;&amp;#039;&amp;#039; genannt (beide nur teilweise [[Lehnübersetzung|lehnübersetzt]] aus dem [[englische Sprache|englischen]] Ausdruck &amp;#039;&amp;#039;{{lang|en|strong typing}}&amp;#039;&amp;#039;), ist ein Prinzip bei der [[Typisierung (Informatik)|Typisierung]] von [[Programmiersprache]]n. In der Fachliteratur finden sich unterschiedlich strenge Definitionen. Man kann aber generell zwischen Sprachen ohne oder mit sehr schwacher Typisierung (z.&amp;amp;nbsp;B. [[PHP]]) und solchen mit stärkerer Typisierung (u.&amp;amp;nbsp;a. [[C++]]) unterscheiden. Oft hängt Strenge mit [[Statische Typisierung|statischer]] Typisierung zusammen und erweitert diese.&lt;br /&gt;
&lt;br /&gt;
Bei dynamischer Typisierung im Rahmen von [[Zeiger (Informatik)|Referenzvariablen]], [[Vererbung (Programmierung)|Vererbung]] oder [[Polymorphie (Programmierung)|Polymorphie]] – letztere können oft erst zur [[Laufzeit (Informatik)|Laufzeit]] der entsprechenden Programme überprüft werden –, gibt es sehr große Unterschiede in der Stärke der Typisierung. Programmiersprachen, die bei dynamischen Variablen nur sehr schwach typisiert sind, wie C, erlauben die [[Zuweisung]] von beliebigen Adressen an Referenzvariablen. Sehr rigoros entworfene Programmiersprachen erlauben nur streng [[Zuweisungskompatibilität|kompatible Zuweisungen]], viele Programmiersprachen tolerieren jedoch aus praktischen Erwägungen implizite Typenumwandlungen ohne oder mit vernachlässigbarem Informationsverlust.&lt;br /&gt;
&lt;br /&gt;
Starke Typisierung wird meist mehr als Vergleich denn als absolute Bezeichnung genutzt: &amp;#039;&amp;#039;Sprache X ist stärker/strenger typisiert als Sprache Y&amp;#039;&amp;#039;. Bei solchen Vergleichen spielt sehr oft das Vorhandensein impliziter oder auch expliziter [[Typumwandlung]]en eine Rolle; so ist PHP deshalb schwächer typisiert als C, weil PHP fast überall implizit umwandelt, C jedoch nur bei ähnlichen Typen. C++ ist wiederum deshalb stärker typisiert als C, da z.&amp;amp;nbsp;B. implizite Typumwandlungen von [[Void (Schlüsselwort)|void*]] in beliebige andere [[Zeiger (Informatik)|Zeiger]] nicht erlaubt sind. Noch stärker typisiert ist wiederum [[Object Pascal]], das im Gegensatz zu C++ keine impliziten Umwandlungen zwischen Boolean- und Integer-Werten vornimmt. [[Haskell (Programmiersprache)|Haskell]] und [[Rust (Programmiersprache)|Rust]] erlauben noch nicht einmal implizite Typumwandlungen von Ganz- in Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
== Abstufungen von Typisierung ==&lt;br /&gt;
&lt;br /&gt;
Absteigend, nach Strenge der jeweiligen Typisierung sortiert:&lt;br /&gt;
&lt;br /&gt;
* Es gibt keine Methoden zur Konvertierung einer Variable zu einem anderen Typ. Das Typsystem kann nicht umgangen werden.&lt;br /&gt;
* Es sind nur explizite Konvertierungen möglich.&lt;br /&gt;
* Typen werden zur Übersetzungszeit überprüft (&amp;#039;&amp;#039;statische Typisierung&amp;#039;&amp;#039;).&lt;br /&gt;
* Typen werden zur Laufzeit überprüft (&amp;#039;&amp;#039;dynamische Typisierung&amp;#039;&amp;#039;).&lt;br /&gt;
* Implizite Konvertierung ist nur zwischen ähnlichen Typen möglich (siehe auch [[Zuweisungskompatibilität]])&lt;br /&gt;
* Generelle Unterscheidung zwischen Typen (z.&amp;amp;nbsp;B. hat [[Tcl]] keine verschiedenen Typen)&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
&lt;br /&gt;
Vorteile strenger Typisierung sind zum Beispiel&amp;lt;ref&amp;gt;{{Webarchiv|url=http://www.christoph-probst.com/uni/presentations/files/20010731-ut/20010731-ut_Ausarbeitung.pdf|wayback=20100120074354|text=Christoph-Probst.com: Informelle Methode und Compilertechniken zur Aufdeckung von Programmierfehlern}} (PDF)&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Optimierungsmöglichkeiten&lt;br /&gt;
* Zurückweisung von fehlerhaftem Code schon zur Übersetzungszeit (besonders wichtig für hochkritische Einsatzgebiete, zum Beispiel Flugzeug- oder Satellitensteuerung)&lt;br /&gt;
* Frühzeitige Erkennung von Programmierfehlern mit der Reduktion des Aufwandes für die Fehlersuche mit entsprechendem Zeit- und Effizienzgewinn bei der Implementierung&lt;br /&gt;
* Durch statische Typumwandlung im Vergleich zu dynamischer Typumwandlung kann sich ein Performance-Gewinn ergeben&lt;br /&gt;
&lt;br /&gt;
Nachteile sind unter anderem:&lt;br /&gt;
* Mehrfachverwendung von Code ist teilweise eingeschränkt (es müssen eigene Funktionen für teilweise sehr ähnliche Typen geschrieben werden), was jedoch durch [[Vererbung (Programmierung)|Vererbung von Programmcode]] beziehungsweise durch [[Polymorphie (Programmierung)|Polymorphie]] beispielsweise im Rahmen der [[Generische Programmierung|generischen Programmierung]] nicht nur vermieden, sondern sogar besonders elegant und wohl-strukturiert gelöst werden kann.&lt;br /&gt;
* Bei Sprachen ohne [[Typinferenz]] mehr Schreibarbeit und eventuell schlechterer Lesefluss, somit Konfiguration vor Konvention (statt [[Konvention vor Konfiguration]]).&lt;br /&gt;
&lt;br /&gt;
== Realisierung strenger Typisierung in verschiedenen Programmiersprachen ==&lt;br /&gt;
&lt;br /&gt;
* [[C (Programmiersprache)|C]] besitzt eher schwache Typisierung, da es in sehr vielen Situationen implizite oder explizite Umwandlung erlaubt, vor allem im Zusammenhang mit [[Zeiger (Informatik)|Zeigern]]. Außerdem unterscheidet C die Datentypen von Wahrheitswerten, Buchstaben und kleinen Zahlen nicht.&lt;br /&gt;
* [[C++]] hat ein gegenüber C erweitertes Typsystem (aufgrund der [[Objektorientierung]] lassen sich eigene Typen definieren), in diesem sind implizite und explizite Umwandlungen insbesondere zwischen neu definierten Typen (Klassen) strenger geregelt; zum Beispiel dürfen Objektpointer nur dann implizit in einen Zeiger auf ein Objekt der Basisklasse umgewandelt werden, falls die Vererbung &amp;#039;&amp;#039;public&amp;#039;&amp;#039; ist. Außerdem dürfen im Gegensatz zu C void-Zeiger &amp;#039;&amp;#039;nicht&amp;#039;&amp;#039; in Zeiger auf beliebige Objekte umgewandelt werden, es muss eine explizite Umwandlung vorgenommen werden. In C wird eine implizite Konvertierung ausgeführt.&lt;br /&gt;
* In C, C++, [[Java (Programmiersprache)|Java]], [[C-Sharp|C#]], [[Pascal (Programmiersprache)|Pascal]], [[Ada (Programmiersprache)|Ada]] oder [[Visual Basic .NET]] (mit &amp;lt;code&amp;gt;Option Explicit On&amp;lt;/code&amp;gt;) müssen alle Variablen einen Typ besitzen.&lt;br /&gt;
* [[Perl (Programmiersprache)|Perl]] hat eine relativ schwache Typisierung, so teilen sich Zahlen und Zeichenketten einen Datentyp, der kontextabhängig, je nach benutztem Operator, als Zahl oder Zeichenkette verwendet wird. Nur bei gewünscht strenger Typisierung wird bei eventuell nicht-gewollten Umwandlungen eine Warnung ausgegeben.&lt;br /&gt;
* [[Ruby (Programmiersprache)|Ruby]] ist stark typisiert. Jedes Objekt hat eine feste Klasse und beim Umwandeln müssen stets explizite Methoden (to_s, to_i usw.) aufgerufen werden. Lediglich im booleschen Kontext wird implizit konvertiert (nil zu false, alles andere zu true).&lt;br /&gt;
* [[OCAML]], [[Haskell (Programmiersprache)|Haskell]] und [[Rust (Programmiersprache)|Rust]]&amp;lt;ref&amp;gt;{{Internetquelle |url=https://doc.rust-lang.org/book/second-edition/ch03-02-data-types.html |titel=Data Types - The Rust Programming Language |zugriff=2018-11-02 |sprache=en}}&amp;lt;/ref&amp;gt; erlauben keine impliziten Typwandlungen.&lt;br /&gt;
* [[PHP]] erlaubt seit Version 7, innerhalb einzelner Dateien die strenge Typisierung zu aktivieren.&amp;lt;ref&amp;gt;{{Internetquelle |autor= |url=http://php.net/manual/de/functions.arguments.php#functions.arguments.type-declaration.strict |titel=PHP: Funktionsparameter, Unterpunkt „Strenge Typisierung“ - Manual |werk= |hrsg= |datum= |zugriff=2017-12-20 |sprache=de}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Visual Basic Classic]] und [[Gambas (Programmiersprache)| Gambas]] besitzen sowohl statisch typisierte Variablen als auch den &amp;#039;&amp;#039;Variant&amp;#039;&amp;#039;-Typ, der jegliche Typen enthalten darf.&lt;br /&gt;
* [[Assemblersprache]] und [[Forth (Informatik)|Forth]]&amp;lt;ref&amp;gt;{{Internetquelle |url=http://rosettacode.org/wiki/Category:Forth |titel=Category:Forth - Rosetta Code |zugriff=2018-11-02 |sprache=en}}&amp;lt;/ref&amp;gt; besitzen keine Typisierung; allein der Programmierer darf/muss die Typüberprüfung erledigen.&lt;br /&gt;
* [[C-Sharp|C#]], [[Modula-2]] und [[Oberon (Programmiersprache)|Oberon]] haben strikte Typsysteme, bei denen [[Zuweisungskompatibilität]] sowohl statischer Typen als auch dynamischer Typen bereits beim Übersetzen streng geprüft wird.&amp;lt;ref&amp;gt;Daniel Larson : {{Webarchiv | url=http://www.csharp-station.com/Articles/StronglyTypedDatasets.aspx | wayback=20160325111507 | text=&amp;#039;&amp;#039;Introduction to strongly Typed Data Sets&amp;#039;&amp;#039;}}, 25. Januar 2003, abgerufen am 22. März 2016&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikibooks.org/wiki/Oberon/ETH_Oberon/white ETH Oberon White Paper], ETH Zürich, 13. März 2000, abgerufen am 10. November 2025&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Massimo Felici, Karama Kanoun, Alberto Pasquini: &amp;#039;&amp;#039;Computer Safety, Reliability and Security&amp;#039;&amp;#039;, 18th International Conference, SAFECOMP&amp;#039;99, Toulouse, France, 27. bis 29. September 1999, Proceedings Lecture Notes in Computer Science, Seite 195, Springer, 2003, ISBN 978-3-540-48249-9&amp;lt;/ref&amp;gt; Nur in speziellen Fällen kann die Zuweisungskompatibilität einer Variable zu einem abweichenden Datentyp im Quellprogramm explizit erzwungen werden. Oberon sieht für Instanzen von dynamischen Datentypen im Quellprogramm explizite Typenwächter (englisch: &amp;#039;&amp;#039;type guard&amp;#039;&amp;#039;) vor, die allerdings keine Typenkonversion durchführen, sondern lediglich zur Laufzeit die Zuweisungskompatibilität überwachen.&amp;lt;ref&amp;gt;[[Niklaus Wirth]]: [https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon.Report.pdf &amp;#039;&amp;#039;The Programming Language Oberon&amp;#039;&amp;#039;], ETH Zürich, 1. Oktober 1990, abgerufen am 22. März 2016&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Typisierung (Informatik)]]&lt;br /&gt;
* [[Typverletzung]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datentyp]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Thoken</name></author>
	</entry>
</feed>