www.wikidata.de-de.nina.az
Typsicherheit ist ein Begriff aus der Informatik speziell aus dem Bereich Programmiersprachen Er bezeichnet den Zustand einer Programmausfuhrung bei dem die Datentypen gemass ihren Definitionen in der benutzten Programmiersprache verwendet werden und keine Typverletzungen auftreten Inhaltsverzeichnis 1 Beschreibung 2 Nutzen 3 Statische und dynamische Typsicherheit 4 Beispiele 4 1 C 5 EinzelnachweiseBeschreibung BearbeitenTypsicherheit herzustellen ist Aufgabe des Compilers beziehungsweise des Interpreters Als Typprufung bezeichnet man dabei den Vorgang die Verwendung von Datentypen innerhalb des Typsystems zu prufen um etwaige Typverletzungen festzustellen Hierbei mussen beispielsweise bei Zuweisungen die beteiligten Typen nicht notwendig identisch sein da ganze Zahlen unter Umstanden Gleitkommavariablen zugewiesen werden konnen Die beteiligten Typen mussen aber zuweisungskompatibel sein Werden dementsprechende Typfehler spatestens zur Laufzeit erkannt spricht man von typsicheren Programmiersprachen Nutzen BearbeitenBei der Software Entwicklung gilt statische Typsicherheit als ein wesentlicher Faktor der die Code Qualitat und die Zuverlassigkeit des entwickelten Programms erhoht So weisen typsichere Programme eine hohe Betriebssicherheit und Informationssicherheit auf 1 Zudem erleichtert statische Typisierung den Arbeitsfluss beim Code Refactoring Gelegentlich wird argumentiert dass die Aspekte der Typsicherheit ebenfalls durch eine ausreichende Testabdeckung nachgewiesen werden konnen Die weit verbreitete Programmiersprache C ist im Gegensatz zur ebenfalls sehr verbreiteten Programmiersprache Java nur begrenzt typsicher Es wird daher haufig die Ansicht vertreten dass weniger erfahrene oder unaufmerksame Programmierer in C fehlerhaften oder leicht angreifbaren Programmcode erzeugen konnen 2 Statische und dynamische Typsicherheit BearbeitenBei den typisierten Programmiersprachen gibt es solche mit Typprufungen wahrend der Kompilierung statisch typisiert und solche bei denen strenge Typprufungen erst zur Laufzeit stattfinden konnen dynamisch typisiert wie zum Beispiel bei Smalltalk Ersteres Konzept erzeugt schneller ablaufenden Programmcode der insbesondere fur grossere Software Systeme erforderlich ist 3 letzteres erlaubt effizientere und flexiblere Datenmodellierung wie zum Beispiel bei der objektorientierten Programmierung Viele moderne Programmiersprachen wie zum Beispiel Oberon 4 oder C unterstutzen daher beide Konzepte 5 Beispiele BearbeitenC BearbeitenDie folgenden Beispiele veranschaulichen wie Umwandlungsoperatoren in der Programmiersprache C bei falscher Verwendung die Typsicherheit beeintrachtigen konnen Das erste Beispiel zeigt wie grundlegende Datentypen falsch umgewandelt werden konnen include lt iostream gt using namespace std int main int ival 5 integer float fval reinterpret cast lt float amp gt ival reinterpret Bitmuster cout lt lt fval lt lt endl Gibt integer als float aus return 0 In diesem Beispiel verhindert reinterpret cast explizit dass der Compiler eine sichere Konvertierung von einer ganzen Zahl in einen Gleitkommawert durchfuhrt 6 Wenn das Programm ausgefuhrt wird gibt es einen Garbage Floating Point Wert aus Das Problem hatte vermieden werden konnen indem stattdessen float fval ival geschrieben wurde Das nachste Beispiel zeigt wie Objektreferenzen falsch umgewandelt werden konnen include lt iostream gt using namespace std class Parent public virtual Parent Virtueller Destruktor fur RTTI class Child1 public Parent public int a class Child2 public Parent public float b int main Child1 c1 c1 a 5 Parent amp p c1 Der upcast ist immer sicher Child2 amp c2 static cast lt Child2 amp gt p Ungultiger downcast cout lt lt c2 b lt lt endl Gibt Datenmull aus return 0 Die beiden Child Klassen haben Member unterschiedlicher Typen Wenn Sie einen Parent Klassenzeiger auf einen untergeordneten Klassenzeiger ubertragen zeigt der resultierende Zeiger moglicherweise nicht auf ein gultiges Objekt des richtigen Typs Im Beispiel fuhrt dies dazu dass der Datenmull ausgegeben wird Das Problem hatte vermieden werden konnen indem static cast durch dynamic cast ersetzt wurde das bei ungultigen Umwandlungen eine Ausnahme auslost 7 Einzelnachweise Bearbeiten Hans J Schneider Geschichte der Programmiersprachen Memento des Originals vom 9 Juli 2016 im Internet Archive Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www2 cs fau de Friedrich Alexander Universitat Erlangen Nurnberg 2012 abgerufen am 9 Juli 2016 Aaron Greenhouse A Programmer Oriented Approach to Safe Concurrency Carnegie Mellon University Pittsburgh Mai 2003 abgerufen am 9 Juli 2016 Hanspeter Mossenbock Object Oriented Programming in Oberon 2 siehe auch Stichwort Smalltalk abgerufen am 9 Juli 2016 Hanspeter Mossenbock Niklaus Wirth The Programming Language Oberon 2 Institut fur Computersysteme ETH Zurich Oktober 1993 abgerufen am 9 Juli 2016 Hanspeter Mossenbock Object oriented Programming in Oberon Memento des Originals vom 27 September 2016 im Internet Archive Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www statlab uni heidelberg de ETH Zurich Institut fur Computersysteme 19 November 1997 abgerufen am 9 Juli 2016 cppreference com reinterpret cast conversion cppreference com dynamic cast conversion Abgerufen von https de wikipedia org w index php title Typsicherheit amp oldid 218860140