kennen:begriffe
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende Überarbeitung | |||
— | kennen:begriffe [2024-02-08 17:22] (aktuell) – [C++26] rrichter | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Glossar: Begriffe aus C++, OOP und Software-Engineering ====== | ||
+ | [[#A]] | ||
+ | [[#B]] | ||
+ | [[#C]] | ||
+ | [[#D]] | ||
+ | [[#E]] | ||
+ | [[#F]] | ||
+ | [[#G]] | ||
+ | [[#H]] | ||
+ | [[#I]] | ||
+ | [[#J]] | ||
+ | [[#K]] | ||
+ | [[#L]] | ||
+ | [[#M]] | ||
+ | [[#N]] | ||
+ | [[#O]] | ||
+ | [[#P]] | ||
+ | [[#Q]] | ||
+ | [[#R]] | ||
+ | [[#S]] | ||
+ | [[#T]] | ||
+ | [[#U]] | ||
+ | [[#V]] | ||
+ | [[#W]] | ||
+ | [[#X]] | ||
+ | [[#Y]] | ||
+ | [[#Z]] | ||
+ | |||
+ | > Man sollte die Dinge beim Namen nennen und auf dem aufbauen, was wir schon kennen. Die Mathematik hat keinen kommerziellen Hintergrund. | ||
+ | > Aber das Computerwesen wird sehr stark von kommerziellen Interessen dominiert, und neue Worte finden eben mehr Gehör. | ||
+ | >> --- Niklaus Wirth [European Software Festival 1990] | ||
+ | |||
+ | ===== A ===== | ||
+ | ==== abgeleitete Klasse ==== | ||
+ | (engl. derived class, sub class, Kind, Erbe, Unterklasse)\\ | ||
+ | |||
+ | durch [[# | ||
+ | aus einer [[# | ||
+ | hergeleiteter benutzerdefinierter [[#Typ]]. | ||
+ | |||
+ | ==== abstrakte Klasse ==== | ||
+ | enthält mindestens eine [[# | ||
+ | spielt eine wichtige Rolle in [[# | ||
+ | wo sie Gemeinsamkeiten einer Gruppe von Unterklassen definiert. | ||
+ | Sie kann keine Objekte bilden. Zuvor muss eine Klasse [[# | ||
+ | werden, die die bisher abstrakten Methoden redefiniert. | ||
+ | |||
+ | ==== abstrakte Methode ==== | ||
+ | ist bewusst unvollständig, | ||
+ | ihr Methodenrumpf fehlt. | ||
+ | Sie ist in [[# | ||
+ | |||
+ | ==== Abstraktion ==== | ||
+ | (von lat. abstrahere = wegziehen) | ||
+ | |||
+ | geistige Tätigkeit, um unter einem bestimmten Gesichtspunkt | ||
+ | wesentliche Merkmale eines Begriffes herauszusondern. | ||
+ | |||
+ | ==== AC/DC ==== | ||
+ | (acquisition in constructor, | ||
+ | siehe [[# | ||
+ | |||
+ | ==== ADA ==== | ||
+ | (benannt nach Lady Augusta Ada Byron, Countess of Lovelace) | ||
+ | |||
+ | Programmiersprache mit [[# | ||
+ | mit Konzepten für objektbasiertes und generisches (typunabhängiges) Programmieren, | ||
+ | Ausnahmebehandlung und Nebenläufigkeit. | ||
+ | Die Standard-Schablonen-Bibliothek (STL) von C++ hatte einen Vorläufer in ADA. | ||
+ | |||
+ | ==== Aggregation ==== | ||
+ | Sonderform der [[# | ||
+ | in der die beteiligten [[# | ||
+ | eine Teil-Ganzes-Hierarchie darstellen. | ||
+ | Die Teile sind existenzunabhängig von Ganzen. | ||
+ | |||
+ | ==== Algorithmus ==== | ||
+ | (aus: Dixit algoritmi... = Es sprach al Khoresmi..., | ||
+ | den Anfangsworten der im 12.Jh. erfolgten lateinischen Übersetzung des | ||
+ | Buches "Über die indischen Ziffern" | ||
+ | Abu Jafar Mohammed ibn Musa al Khowarizmi ca. 780-850, | ||
+ | - Mohammed, Vater des Jafar, Sohn des Mose aus Choresm, der Gegend um Samarkand und Buchara) | ||
+ | |||
+ | endliche Folge von eindeutig bestimmten Elementaranweisungen, | ||
+ | die den Lösungsweg eines Problems exakt und vollständig beschreiben | ||
+ | [Jochen Ziegenbalg: Algorithmen von Hammurapi bis Gödel. Spektrum, Heidelberg (1996)]. | ||
+ | |||
+ | Ein praktisch durchführbarer Algorithmus muss | ||
+ | |||
+ | * korrekt (ohne Fehler), | ||
+ | * effektiv (zum richtigen Ergebnis führend), | ||
+ | * endlich und effizient sein (in " | ||
+ | In C++ werden bestimmte Standardaufgaben auf Datenmengen als Algorithmen bezeichnet | ||
+ | und in der Standard-Bibliothek als [[# | ||
+ | |||
+ | ==== Almost always auto ==== | ||
+ | Einleitung der Variablendefinition mit dem Schlüsselwort '' | ||
+ | Dieser Schreibstil hat den Vorzug, dass eine Anfangswertbelegung der Variable zwingend erforderlich ist. | ||
+ | |||
+ | |||
+ | ==== Aktion ==== | ||
+ | durch eine [[# | ||
+ | ausgelöste Operation (Aufruf einer [[# | ||
+ | |||
+ | ==== Anweisung ==== | ||
+ | (engl. statement)\\ | ||
+ | |||
+ | [[# | ||
+ | für den [[# | ||
+ | oder zur Laufzeit auszuführender Befehl. | ||
+ | |||
+ | ==== Anwendungsfall ==== | ||
+ | (engl. use case) | ||
+ | |||
+ | Menge von Aktivitäten eines Systems aus der Sicht seiner Akteure, | ||
+ | die für die Akteure zu einem sichtbaren Ergebnis führen, | ||
+ | wird stets durch einen Akteur angestoßen. | ||
+ | |||
+ | ==== Anwendungsrahmen ==== | ||
+ | (engl. application framework) | ||
+ | |||
+ | Menge von zusammenarbeitenden [[# | ||
+ | die einen wiederverwendbaren Entwurf | ||
+ | für einen bestimmten Anwendungsbereich implementieren, | ||
+ | besteht aus konkreten und insbesondere [[# | ||
+ | die [[# | ||
+ | definieren. Im allgemeinen wird vom Programmierer erwartet, | ||
+ | dass er [[# | ||
+ | |||
+ | ==== Argument ==== | ||
+ | (seltener: aktueller Parameter) | ||
+ | |||
+ | Wert, Variable oder [[# | ||
+ | der / die beim [[# | ||
+ | an die Stelle eines formalen [[# | ||
+ | |||
+ | ==== Assoziation ==== | ||
+ | modelliert Verbindungen zwischen [[# | ||
+ | einer oder mehrerer [[# | ||
+ | wird beschrieben durch Assoziations- oder Rollennamen und [[# | ||
+ | Sonderfälle: | ||
+ | |||
+ | ==== Assoziationsklasse ==== | ||
+ | Modellelement, | ||
+ | und einer [[# | ||
+ | verfügt. | ||
+ | |||
+ | ==== Attribut ==== | ||
+ | OOP: (engl. member data, member variable) | ||
+ | Variable als Datenbestandteil einer [[# | ||
+ | oder [[# | ||
+ | |||
+ | [[#C++11]]: [[kennen: | ||
+ | ==== Attributwert ==== | ||
+ | aktuell einem [[# | ||
+ | zugeordneter Wert. | ||
+ | |||
+ | ==== Ausdruck ==== | ||
+ | (engl. expression) | ||
+ | |||
+ | ein oder konstanter Wert, [[# | ||
+ | oder mehrere, durch geeignete [[# | ||
+ | verknüpfte Teilausdrücke. | ||
+ | [[#C++11]] teilt Ausdrücke in folgende Kategorien ein: | ||
+ | * [[#lvalue]] : verweist auf ein Objekt (oder eine Funktion), | ||
+ | * [[#rvalue]] (prvalue oder xvalue) : kann auf der rechten Seite einer [[# | ||
+ | * prvalue (" | ||
+ | * xvalue (" | ||
+ | * glvalue (" | ||
+ | Die drei letztgenannten Begriffe wurden eingeführt, | ||
+ | ausdruck | ||
+ | / | ||
+ | glvalue | ||
+ | / | ||
+ | lvalue | ||
+ | |||
+ | |||
+ | ==== Ausnahme ==== | ||
+ | (engl. exception) | ||
+ | |||
+ | Situation, in der der " | ||
+ | nicht mehr sinnvoll fortgesetzt werden kann. | ||
+ | Der Programmierer hat an einer solchen Stelle die Wahl zwischen mehreren Möglichkeiten: | ||
+ | |||
+ | * die Situation ignorieren, | ||
+ | * eine Fehlervariable setzen und hoffen, dass der Anwender dies prüft, | ||
+ | * irgendwie stillschweigend reparieren, | ||
+ | * einen Fehlerwert zurückzugeben, | ||
+ | * den " | ||
+ | |||
+ | In C++ wird auch das den Ausnahmezustand auslösende Objekt als Ausnahme bezeichnet. | ||
+ | |||
+ | ==== Ausnahmebehandlung ==== | ||
+ | (engl. exception handling) | ||
+ | |||
+ | das Fangen einer geworfenen [[# | ||
+ | und Beheben der Ursachen, die zur Ausnahmesituation geführt haben, oder | ||
+ | zumindest die Überführung in einen Zustand, | ||
+ | in dem das Programm sicher, d.h. ohne Ressourcenlecks beendet werden kann. | ||
+ | |||
+ | ===== B ===== | ||
+ | ==== Basisklasse ==== | ||
+ | (engl. base class, super class, Elter, Vorfahr, Oberklasse) | ||
+ | |||
+ | [[# | ||
+ | verwandte, d.h. ähnliche, modifizierte Typen abgeleitet werden. | ||
+ | |||
+ | ==== BCPL ==== | ||
+ | (Basic Combined Programming Language) | ||
+ | |||
+ | von Martin Richards entworfene Programmiersprache, | ||
+ | bildete den Ausgangspunkt für die Entwicklung der Programmiersprache C. | ||
+ | |||
+ | ==== Bedingung ==== | ||
+ | ein Testausdruck, | ||
+ | oder Anweisungsfolge überhaupt ([[# | ||
+ | oder wiederholt ([[# | ||
+ | |||
+ | ==== " | ||
+ | (engl. "uses a" relationship) | ||
+ | |||
+ | gerichtete [[# | ||
+ | in der ein Kunde-Objekt (client) Dienste eine anderen Objektes (server) | ||
+ | in Anspruch nimmt, um seine Aufgabe zu erfüllen. | ||
+ | |||
+ | ==== Bezeichner ==== | ||
+ | (engl. identifier, Name) | ||
+ | |||
+ | Folge von Buchstaben, Zifferzeichen oder Unterstrichen zur eindeutigen Benennung | ||
+ | von [[#Typ]]en, [[# | ||
+ | |||
+ | ==== Beziehung ==== | ||
+ | (engl. relationship) | ||
+ | |||
+ | Verbindung zwischen Modellelementen mit semantischem Gehalt, | ||
+ | Oberbegriff für [[# | ||
+ | [[# | ||
+ | [[# | ||
+ | [[# | ||
+ | [[# | ||
+ | und [[# | ||
+ | |||
+ | ==== Bibliothek ==== | ||
+ | (engl. library) | ||
+ | |||
+ | Sammlung von zusammengehörenden Typen und Funktionen, | ||
+ | insbesondere in vorübersetzter Form, | ||
+ | die zu einem Anwendungsprogramm hinzu gebunden werden kann oder gar muss, | ||
+ | wie z.B. die Laufzeitbibliothek. | ||
+ | Die Verwaltung von Programmteilen ([[# | ||
+ | erfolgt meist mit einem speziellen Programm, | ||
+ | Bibliothekar / Archivar (in UNIX: ar) genannt | ||
+ | |||
+ | ==== Binden ==== | ||
+ | (engl. to link, [[# | ||
+ | |||
+ | Vorgang, bei dem (getrennt) übersetzte Programmteile ([[# | ||
+ | und [[# | ||
+ | |||
+ | ==== Bindung ==== | ||
+ | C und C++: ordnet dem Funktionsnamen beim Aufruf eine Operation (Befehlsfolge) zu. | ||
+ | Frühe (statische) Bindung erfolgt zur Übersetzungszeit durch den [[# | ||
+ | späte (dynamische) Bindung bei [[# | ||
+ | erst zur Laufzeit beim Aufruf der virtuellen Methode. | ||
+ | |||
+ | Software-Engineering: | ||
+ | ==== Bitfeld ==== | ||
+ | (engl. bit field structure) | ||
+ | |||
+ | zusammengesetzter [[#Typ]], dessen einzelne [[# | ||
+ | nur einzelne oder wenige Bits umfassen, | ||
+ | so dass ihre Zusammenfassung platzsparend in einem Maschinenwort | ||
+ | untergebracht werden kann. | ||
+ | Wegen der Unterschiede in den Hardwarearchitekturen sind Bitfelder schlecht portierbar. | ||
+ | |||
+ | ==== Block ==== | ||
+ | von einem Paar geschweifter Klammern '' | ||
+ | [[# | ||
+ | |||
+ | Der C-Block-[[# | ||
+ | ''/ | ||
+ | |||
+ | ==== Botschaft ==== | ||
+ | (engl. message, Nachricht) | ||
+ | |||
+ | Aufforderung an ein [[# | ||
+ | eine bestimmte Dienstleistung zu erbringen. | ||
+ | Der Empfänger interpretiert die Botschaft und führt eine Operation aus. | ||
+ | Durch [[# | ||
+ | kann die Botschaft zum Aufruf einer von mehreren unterschiedlichen | ||
+ | Operationen führen. | ||
+ | |||
+ | ===== C ===== | ||
+ | ==== C++98 ==== | ||
+ | ISO-Standard 14882:1998 Programmiersprache C++, erster Sprachstandard. | ||
+ | ==== C++03 ==== | ||
+ | ISO-Standard 14882:2003 Programmiersprache C++, blieb bis auf kleine Korrekturen unverändert. | ||
+ | |||
+ | ==== C++11 ==== | ||
+ | ISO-Standard 14882:2011 Programmiersprache C++, umfangreiche [[: | ||
+ | Die vormalige vorläufige Benennung C++0x wurde zum Insiderwitz: | ||
+ | ==== C++14 ==== | ||
+ | ISO-Standard 14882:2014 Programmiersprache C++, kleinere [[: | ||
+ | ==== C++17 ==== | ||
+ | ISO-Standard 14882:2017 Programmiersprache C++, | ||
+ | bedeutende [[: | ||
+ | |||
+ | ==== C++20 === | ||
+ | ISO-Standard 14882:2020 Programmiersprache C++. | ||
+ | Vorläufige Bezeichnung war C++2a. | ||
+ | |||
+ | ==== C++23 === | ||
+ | Abkürzung für den Sprachstandard 2023. | ||
+ | Vorläufige, | ||
+ | |||
+ | ==== C++26 === | ||
+ | Der nächste Standard wird für 2026 erwartet. In Arbeit. | ||
+ | ==== Closure ==== | ||
+ | Einschluss der in der [[# | ||
+ | ==== Compiler ==== | ||
+ | Entwicklungswerkzeug, | ||
+ | in Maschinenbefehle übersetzt und diese | ||
+ | als Datei für ein spätere Ausführung abspeichert. | ||
+ | Im Gegensatz dazu führt ein Interpreter die Maschinenbefehle sofort aus. | ||
+ | |||
+ | ==== Computer ==== | ||
+ | |||
+ | (engl. Rechner, ehemals auch Mensch, der Rechenaufgaben bearbeitet) | ||
+ | |||
+ | elektronische Datenverarbeitungsanlage, | ||
+ | ==== Concept ==== | ||
+ | ab [[#C++20]] | ||
+ | |||
+ | benannte Anforderung an [[# | ||
+ | |||
+ | ==== Container ==== | ||
+ | Datenbehälter, | ||
+ | die Folgen oder Mengen von gleichartigen Elementen im Hauptspeicher halten. | ||
+ | Der Anwender wird von Routineaufgaben der Speicherverwaltung entlastet. | ||
+ | Die [[# | ||
+ | der Container ist auf die Zusammenarbeit mit [[# | ||
+ | |||
+ | ==== CRC-Karten ==== | ||
+ | (engl. class, responsibilities, | ||
+ | |||
+ | Karteikarten, | ||
+ | ihre Aufgaben ([[# | ||
+ | und ihre [[# | ||
+ | beschrieben werden. | ||
+ | |||
+ | ==== CTAD ==== | ||
+ | (engl. constructor template argument deduction), ab [[#C++17]] | ||
+ | |||
+ | Herleitung von [[# | ||
+ | |||
+ | ==== CTAD Guide ==== | ||
+ | Hilfsanweisungen für den [[# | ||
+ | |||
+ | ===== D ===== | ||
+ | ==== Datenabstraktion ==== | ||
+ | ([[# | ||
+ | |||
+ | Prinzip, nur die auf ein [[#Objekt]] | ||
+ | anwendbaren Operationen nach außen sichtbar zu machen. | ||
+ | |||
+ | ==== Definition ==== | ||
+ | Festlegung eines Typs, einer Variable, eines Funktionsrumpfes. | ||
+ | Jede Definition ist zugleich eine [[# | ||
+ | Die Definition eines [[# | ||
+ | ([[#one definition rule]]). | ||
+ | |||
+ | ==== Deklaration ==== | ||
+ | Anmeldung eines Namens ([[# | ||
+ | für eine Typ, eine Variable oder eine [[# | ||
+ | durch Angabe des [[# | ||
+ | Die Deklaration eines Namens kann mehrfach erfolgen, | ||
+ | darf aber nicht zu Widerspüchen führen. | ||
+ | |||
+ | Bevor ein Name benutzt werden kann, muss er deklariert werden | ||
+ | (" | ||
+ | Bestimmte Bezeichner dürfen nicht neu deklariert werden, | ||
+ | da ihnen eine besondere Rolle als [[# | ||
+ | zugedacht ist. | ||
+ | |||
+ | ==== Delegation ==== | ||
+ | [[#Objekt]] | ||
+ | leitet [[# | ||
+ | an ein anderes Objekt weiter ([[# | ||
+ | |||
+ | ==== Destruktor ==== | ||
+ | Methode, die (automatisch) beim Zerstören eines [[# | ||
+ | ausgeführt wird, soll u.a. dynamisch belegte Ressourcen (z.B. Speicher) | ||
+ | freigeben, | ||
+ | im Besitz des Objektes waren. | ||
+ | |||
+ | ===== E ===== | ||
+ | ==== Einfachvererbung ==== | ||
+ | (engl. single inheritance) | ||
+ | |||
+ | Jede [[#Klasse]] | ||
+ | besitzt maximal eine direkte [[# | ||
+ | Es entsteht eine Baumstruktur ([[# | ||
+ | |||
+ | ==== Element ==== | ||
+ | Bestandteil einer Folge, z.B. einem [[#Feld]] | ||
+ | oder Datenwert in einem [[# | ||
+ | |||
+ | ==== Entscheidung ==== | ||
+ | (bedingte Anweisung) | ||
+ | |||
+ | [[# | ||
+ | die anhand einer [[# | ||
+ | entscheidet, | ||
+ | oder Anweisungsfolge ausgeführt oder übersprungen werden muss. | ||
+ | Die Auswahl zwischen zwei oder mehreren möglichen | ||
+ | Anweisung(sfolg)en heißt [[# | ||
+ | |||
+ | ==== Entwurfsmuster ==== | ||
+ | (engl. design pattern) | ||
+ | |||
+ | bewährte, allgemeine Lösung für ein wiederkehrendes Entwurfsproblem. | ||
+ | Ein Muster ist keine fertige Lösung, es beschreibt nur den Lösungsweg. | ||
+ | |||
+ | ==== Erben einer Implementation ==== | ||
+ | Einsatz der [[# | ||
+ | zur Wiederverwendung von Code. | ||
+ | Eine "ist implementiert mit Hilfe von" | ||
+ | [[# | ||
+ | realisiert werden. | ||
+ | |||
+ | ==== Erben einer Schnittstelle ==== | ||
+ | Einsatz der [[# | ||
+ | um gemeinsame [[# | ||
+ | (Oberbegriffe) für eine Hierarchie von [[# | ||
+ | deren Verhalten durch [[# | ||
+ | ihrer [[# | ||
+ | und [[# | ||
+ | angepasst wird. | ||
+ | |||
+ | ===== F ===== | ||
+ | ==== Faktorisierung ==== | ||
+ | Herauslösen und Zusammenfassen der Gemeinsamkeiten verwandter Klassen | ||
+ | zu einer gemeinsamen [[# | ||
+ | |||
+ | ==== Faltausdruck ==== | ||
+ | (engl. fold expression), | ||
+ | |||
+ | löst ein [[# | ||
+ | Siehe [[wp> | ||
+ | ==== Feld ==== | ||
+ | (engl. array, vector, indizierte Variable, Reihe) | ||
+ | |||
+ | Variable, die eine Folge von Datenwerten (Elementen) enthält. | ||
+ | Ein [[# | ||
+ | eines eindimensionalen Feldes | ||
+ | kann über den [[#Index]] | ||
+ | angesprochen werden. | ||
+ | Felder können mehrstufig aufgebaut sein (zwei- und höherdimensional), | ||
+ | dann erfolgt der Elementzugriff mit mehreren Indizes. | ||
+ | |||
+ | ==== Formatierung ==== | ||
+ | Gestaltung des Quelltextes durch zusätzliche Leerzeichen und Zeilenumbrüche, | ||
+ | erhöht die Lesbarkeit und Erfassungsgeschwindigkeit für den menschlichen Leser. | ||
+ | |||
+ | Formatierung beeinflusst auch das Erscheinungsbild der Ein- und Ausgaben in Programmen: | ||
+ | Zahlen werden intern kompakt als Bitmuster gehalten, | ||
+ | bei der Kommunikation mit dem Menschen (oder anders aufgebauter Hardware) | ||
+ | jedoch als lesbare Zeichenfolgen übermittelt. | ||
+ | |||
+ | ==== FORTRAN ==== | ||
+ | (aus FORmula TRANslator; IBM, John Backus 1954) | ||
+ | |||
+ | erste " | ||
+ | erforderte. Da sie erstmals den Programmierern die Arithmetik | ||
+ | auch für gebrochene Zahlen " | ||
+ | umfangreiche numerische Programmbibliotheken im technischen Bereich. | ||
+ | |||
+ | ==== Freund ==== | ||
+ | (engl. friend) | ||
+ | |||
+ | [[#Klasse]] | ||
+ | oder [[# | ||
+ | die [[# | ||
+ | auf nichtöffentliche Bestandteile einer Klasse hat. | ||
+ | Dieses Zugriffsrecht wird bei der [[# | ||
+ | der Klasse verliehen, auf deren Bestandteile zugegriffen werden soll. | ||
+ | Die Klasse selbst legt fest, wen sie zum Freund haben will. | ||
+ | Eine nachträgliche " | ||
+ | |||
+ | ==== Funktion ==== | ||
+ | (engl. function, subroutine) | ||
+ | |||
+ | Programmteil, | ||
+ | unter einem Namen ([[# | ||
+ | Durch Nennung des Funktionsnamens ([[# | ||
+ | kann diese Anweisungsfolge an beliebigen Stellen im Programm | ||
+ | als Unterprogramm ausgeführt werden. | ||
+ | |||
+ | Die Anweisungen innerhalb der Funktion können von [[# | ||
+ | abhängig sein, die der Funktion beim Aufruf als [[# | ||
+ | mitgegeben werden. | ||
+ | Eine Funktion kann als Ergebnis einen Rückgabewert liefern | ||
+ | oder auch [[# | ||
+ | Kommt es nur auf den Seiteneffekt kann, | ||
+ | braucht eine Funktion in C und C++ keinen Rückgabewert zu liefern, | ||
+ | der Aufrufer kann einen gelieferten Rückgabewert auch ignorieren | ||
+ | (verwerfen). | ||
+ | |||
+ | Funktionen im strengen, | ||
+ | mathematischen Sinn überführen Argumentwerte ohne Seiteneffekte | ||
+ | in einen eindeutig bestimmten Wert vom [[# | ||
+ | (Funktion = math. eindeutige, injektive Abbildungsvorschrift | ||
+ | vom Definitionsbereich in den Ergebnisbereich). | ||
+ | In diesem strengeren Sinn wird ein Unterprogramm ohne Rückgabewert | ||
+ | als [[# | ||
+ | bezeichnet. | ||
+ | |||
+ | ==== Funktionsaufruf ==== | ||
+ | (engl. function call, Auswertung) | ||
+ | |||
+ | verursacht die Abarbeitung der irgendwo im Programm definierten Anweisungsfolge | ||
+ | durch Nennung des vorher deklarierten Funktionsnamens, | ||
+ | gefolgt von runden Klammern mit der passenden Anzahl von [[# | ||
+ | in einem [[# | ||
+ | Der entstehende Ergebniswert vom [[# | ||
+ | kann zur weiteren Berechnung genutzt werden | ||
+ | (sofern die Funktion nicht vom [[#Typ]] | ||
+ | '' | ||
+ | |||
+ | ==== Funktionskopf ==== | ||
+ | (engl. function prototype) | ||
+ | |||
+ | verbindet [[# | ||
+ | [[# | ||
+ | und Liste der [[# | ||
+ | zur [[# | ||
+ | einer [[# | ||
+ | |||
+ | ==== Funktionsobjekt ==== | ||
+ | (Funktor) | ||
+ | |||
+ | Objekt von einem zusammengesetzten [[#Typ]], | ||
+ | das wie eine [[# | ||
+ | für einen [[# | ||
+ | genutzt werden kann. | ||
+ | Für diesen Typ muss der [[# | ||
+ | '' | ||
+ | definiert sein. | ||
+ | |||
+ | ==== Funktionsrumpf ==== | ||
+ | (engl. function body) | ||
+ | |||
+ | [[#Block]], der auf einen [[# | ||
+ | folgt, ist die [[# | ||
+ | der Anweisungen, | ||
+ | abzuarbeiten sind. | ||
+ | |||
+ | ==== Funktionsschablone ==== | ||
+ | (engl. template function) | ||
+ | |||
+ | als [[# | ||
+ | definierte [[# | ||
+ | mit mindestens einem allgemein gehaltenen Parametertyp. | ||
+ | |||
+ | ==== Funktor ==== | ||
+ | ([[# | ||
+ | |||
+ | ==== fußgesteuerte Schleife ==== | ||
+ | [[# | ||
+ | deren Wiederholungs-[[# | ||
+ | nach dem Schleifenrumpf steht. | ||
+ | Der Anweisungs-[[# | ||
+ | wird mindestens einmal durchlaufen (nicht abweisender Test). | ||
+ | |||
+ | ===== G ===== | ||
+ | ==== geächtet ==== | ||
+ | Veraltete Teile des Sprachstandards können in künftigen Standards entfernt werden. Es gibt bessere Lösungen. | ||
+ | |||
+ | ==== Geheimnisprinzip ==== | ||
+ | (engl. information hiding) | ||
+ | |||
+ | von [[wp> | ||
+ | |||
+ | * Anwender nur die Schnittstelle der von ihnen genutzten Bibliotheken, | ||
+ | * Bibliotheksprogrammierer nur die Anforderungen an die Schnittstellen, | ||
+ | |||
+ | damit die [[# | ||
+ | |||
+ | ==== Geltungsbereich ==== | ||
+ | (engl. scope) | ||
+ | |||
+ | Quelltextabschnitt, | ||
+ | bekannt ist ([[# | ||
+ | |||
+ | ==== generisch ==== | ||
+ | (allgemeingültig, | ||
+ | |||
+ | [[# | ||
+ | und Anwendung von [[# | ||
+ | |||
+ | ==== global ==== | ||
+ | nicht von [[# | ||
+ | |||
+ | ==== Grammatik ==== | ||
+ | (grch. syntax) | ||
+ | |||
+ | Satz von Regeln, der die Reihenfolge von Bausteinen einer Sprache festlegt. | ||
+ | Für formale Sprachen verbreitet ist die Darstellung | ||
+ | als (erweiterte) Backus-Naur-Form (BNF, EBNF). | ||
+ | |||
+ | Die " | ||
+ | beim Übersetzen geprüft, ihre Nichteinhaltung wird bemerkt und bemängelt, | ||
+ | dann entsteht kein lauffähiges Programm. | ||
+ | |||
+ | Gefährlicher als Syntax-Fehler sind logische Fehler (Denkfehler), | ||
+ | weil diese nicht vom Compiler abgefangen werden. | ||
+ | Sie können nur durch sorgfältige Prüfung oder | ||
+ | Testläufe mit entsprechenden Eingangsdaten erkannt werden. | ||
+ | Der Aufwand zur Fehlererkennung kann beträchtlich sein. | ||
+ | |||
+ | ===== H ===== | ||
+ | ==== "hat ein" | ||
+ | (engl. "has a" relationship, | ||
+ | |||
+ | in umgekehrter Richtung: "ist Teil von". | ||
+ | |||
+ | ==== Hardware ==== | ||
+ | Gesamtheit aller elektronischen und mechanischen Bestandteile eines [[# | ||
+ | ==== Header ==== | ||
+ | (Vorspanndatei, | ||
+ | |||
+ | Quelltextdatei, | ||
+ | seltener [[# | ||
+ | [[# | ||
+ | |||
+ | [[#Typ]]en und [[# | ||
+ | können [[# | ||
+ | Die fehlerhafte mehrfache Definition muss unterbunden werden. | ||
+ | |||
+ | Headerdateien enthalten alle notwendigen Informationen | ||
+ | über die [[# | ||
+ | und benutzerdefinierten [[#Typ]]en. | ||
+ | |||
+ | ==== Heap ==== | ||
+ | (dt. Halde) | ||
+ | |||
+ | Als [[wpde> | ||
+ | Darüber hinaus besitzt der Heap eine " | ||
+ | Damit kann der Heap als Sequenz ohne Lücken aufgefasst werden: | ||
+ | |||
+ | 9 | ||
+ | | ||
+ | | ||
+ | 1 3 0 | ||
+ | |||
+ | Manchmal wird der Freispeicherbereich eines Programms für die dynamischer Speicherverwaltung ebenfalls als Heap bezeichnet. | ||
+ | ===== I ===== | ||
+ | ==== Identität ==== | ||
+ | unterscheidet ein [[#Objekt]] | ||
+ | von allen anderen, auch wenn es möglicherweise gleiche Attributwerte hat. | ||
+ | |||
+ | Programmiersprachen und Datenbanksysteme nutzen Variablennamen, | ||
+ | um temporäre Objekte zu unterscheiden. | ||
+ | Sie vermischen Addressierbarkeit und Identität. | ||
+ | Datenbanksysteme nutzen Identifikatorwerte, | ||
+ | um persistente Objekte zu unterscheiden. Sie vermischen Datenwert und Identität. | ||
+ | Der Übergang von temporären Speicheradressen individueller Objekte | ||
+ | und zu persistenten Identifikatoren der Objekte auf Massenspeichern, | ||
+ | und vor allem zurück, | ||
+ | ist das Hauptproblem bei der Implementierung von [[# | ||
+ | |||
+ | Den Unterschied zwischen dem Namen des Objektes und dem Objekt selbst nicht zu erkennen, | ||
+ | ist die Quelle vieler Fehler in der objektorientierten Programmierung. | ||
+ | |||
+ | ==== IILE ==== | ||
+ | (engl. immediately invoked lambda expression) | ||
+ | |||
+ | [[# | ||
+ | |||
+ | ==== Index ==== | ||
+ | (lat. index = Zeiger, Zeigefinger) | ||
+ | |||
+ | ganzzahliger Wert, mit dessen Hilfe die [[# | ||
+ | eines [[#Feld]]es | ||
+ | durchnummeriert und angesprochen werden. | ||
+ | |||
+ | Zur Kennzeichnung eines Index | ||
+ | dienen in C und C++ eckige Klammern: '' | ||
+ | Die Nummerierung beginnt mit '' | ||
+ | und endet mit '' | ||
+ | Fehlerhafte Indizierung wird nicht abgefangen | ||
+ | und führt zu schwer auffindbaren Laufzeitfehlern. | ||
+ | |||
+ | Wird die Ganzzahligkeit des Index fallengelassen, | ||
+ | spricht man von einem " | ||
+ | |||
+ | ==== Instanz ==== | ||
+ | (engl. instance, [[# | ||
+ | |||
+ | unzulässige (?) Bedeutungsüberwälzung | ||
+ | vom engl. instance " | ||
+ | auf das gleichlautende dt. Instanz " | ||
+ | aus mittellat. instans " | ||
+ | |||
+ | ==== "ist ein" | ||
+ | (engl. "is a" relationship) | ||
+ | |||
+ | Zugehörigkeits-[[# | ||
+ | zwischen einem [[#Objekt]] | ||
+ | und seiner [[# | ||
+ | |||
+ | ==== "ist eine Art von" | ||
+ | (engl. "is a kind of" relationship) | ||
+ | |||
+ | asymmetrische Teilmengen-[[# | ||
+ | einer [[# | ||
+ | und ihrer [[# | ||
+ | |||
+ | ==== Iterator ==== | ||
+ | (von lat. iterare = wiederholen) | ||
+ | |||
+ | zeigerartiges Objekt, mit dessen Hilfe Folgen von Objekten | ||
+ | in einem [[#Feld]] | ||
+ | oder einem [[# | ||
+ | durchlaufen und angesprochen werden. | ||
+ | |||
+ | ===== J ===== | ||
+ | ===== K ===== | ||
+ | ==== Kapselung ==== | ||
+ | (engl. encapsulation, | ||
+ | |||
+ | Einschließen und bewusstes Verbieten der Manipulation | ||
+ | von internen Daten durch außenstehende Anwender | ||
+ | zum Schutz vor unzulässigen inneren Zuständen. | ||
+ | Nach außen wird eine [[# | ||
+ | bereitgestellt. | ||
+ | |||
+ | Da das Verbot der Manipulation ([[# | ||
+ | oft mit dem Verbergen von Information | ||
+ | über den inneren Aufbau durch opake (undurchsichtige) Typen | ||
+ | verbunden wird, werden Kapselung und [[# | ||
+ | gern verwechselt. | ||
+ | |||
+ | ==== Kardinalität ==== | ||
+ | Anzahl der Elemente in einer [[# | ||
+ | |||
+ | ==== Klasse ==== | ||
+ | (engl. class) | ||
+ | |||
+ | zusammengesetzter [[#Typ]] | ||
+ | aus [[# | ||
+ | und [[# | ||
+ | zu deren Bearbeitung. | ||
+ | Durch Einschränkung der [[# | ||
+ | kann eine [[# | ||
+ | erreicht werden. | ||
+ | Variablen eines Klassen-Typs werden als [[# | ||
+ | bezeichnet. | ||
+ | |||
+ | Im mathematischen Sinn ist eine Sammlung von | ||
+ | Objekten mit mindestens einem gemeinsamen Merkmal eine Klasse. | ||
+ | Danach müssten zumindest alle zu leeren Klassendefinitionen gehörenden Objekte | ||
+ | denselben Typ besitzen. | ||
+ | In C++ sind jedoch Klassen auch bei gleichen inneren Merkmalen | ||
+ | anhand ihres verschiedenen Namens unterscheidbar. | ||
+ | |||
+ | ==== Klassenbibliothek ==== | ||
+ | (engl. class library) | ||
+ | |||
+ | organisierte Sammlung von [[# | ||
+ | |||
+ | ==== Klassendefinition ==== | ||
+ | [[# | ||
+ | legt [[# | ||
+ | fest, deklariert [[# | ||
+ | und verleiht [[# | ||
+ | |||
+ | ==== Klassendeklaration ==== | ||
+ | [[# | ||
+ | führt einen Klassennamen ein, muss die [[#Klasse]] | ||
+ | aber nicht [[# | ||
+ | |||
+ | ==== Klassendiagramm ==== | ||
+ | stellt die Konzepte [[# | ||
+ | [[# | ||
+ | [[# | ||
+ | und [[# | ||
+ | ([[# | ||
+ | in grafischer Form dar. | ||
+ | |||
+ | ==== Klassenentwurf ==== | ||
+ | (engl. class design) | ||
+ | |||
+ | Identifikation und Beschreibung der Merkmale einer [[# | ||
+ | Aufteilung ([[# | ||
+ | und Verschmelzung zu kleiner, nicht tragfähiger Konzepte. | ||
+ | Entwurfsziele sind | ||
+ | |||
+ | * geringe Kopplung zwischen den Klassen, | ||
+ | * starke Kohäsion innerhalb einer Klasse, | ||
+ | * Hinlänglichkeit (genügend Merkmale), um eine eigenständige Klasse zu bilden, | ||
+ | * Vollständigkeit der Schnittstelle, | ||
+ | * Einfachheit der Operationen. | ||
+ | |||
+ | ==== Klassenschablone ==== | ||
+ | (engl. template class)\\ | ||
+ | |||
+ | typparametrisierte [[# | ||
+ | wird als [[# | ||
+ | definiert. | ||
+ | |||
+ | ==== Klassenvariable ==== | ||
+ | (engl. static member data) | ||
+ | |||
+ | Variable im [[# | ||
+ | der [[# | ||
+ | die nur einmal für die gesamte Klasse , | ||
+ | unabhängig von der Existenz von [[# | ||
+ | vorhanden ist. | ||
+ | Sie muss für das [[#Binden]] | ||
+ | außerhalb der Klasse in einem [[#Modul]] | ||
+ | definiert werden. | ||
+ | |||
+ | ==== Kollaboration ==== | ||
+ | (Zusammenarbeit) | ||
+ | |||
+ | Kontext einer Menge von Interaktionen. | ||
+ | |||
+ | ==== Kollaborationsdiagramm ==== | ||
+ | ein um [[# | ||
+ | erweitertes [[# | ||
+ | zeigt Interaktionen zwischen ausgewählten Objekten in einer bestimmten begrenzten Situation | ||
+ | und betont die Beziehungen zwischen den Objekten und ihre Anordnung. | ||
+ | |||
+ | ==== Kommentar ==== | ||
+ | (engl. comment) | ||
+ | |||
+ | Quelltextabschnitt, | ||
+ | sondern nur zur Information des menschlichen Lesers gedacht ist. | ||
+ | C++ kennt zwei Arten von Kommentaren: | ||
+ | |||
+ | * Kommentare im [[# | ||
+ | * Blockkommentare im C-Stil. | ||
+ | |||
+ | ==== Komplexität ==== | ||
+ | * ** Laufzeitkomplexität, | ||
+ | * ** Entwurfskomplexität ** : Die Komplexität eines Software-Entwurfs ist ein Maß dafür, wieviele Funktionen, Module, Klassen, Teilsysteme miteinander in Beziehung treten. | ||
+ | |||
+ | ==== Komponente ==== | ||
+ | (engl. member) | ||
+ | |||
+ | (Daten-)Bestandteil eines zusammengesetzten [[#Typ]]s. | ||
+ | |||
+ | ==== Komposition ==== | ||
+ | strenge Form der [[# | ||
+ | bei der die Teile vom Ganzen existenzabhängig sind. | ||
+ | Beim Löschen des Ganzen werden auch alle Teile gelöscht. | ||
+ | Jedes Teil kann zu einem Zeitpunkt immer nur zu einem Ganzen gehören, | ||
+ | kann jedoch evtl. einem anderen Ganzen zugeordnet werden. | ||
+ | |||
+ | ==== Konkretisierung ==== | ||
+ | ([[# | ||
+ | |||
+ | Ableitung einer konkreten [[#Klasse]] | ||
+ | aus einer [[# | ||
+ | durch [[# | ||
+ | und [[# | ||
+ | aller [[# | ||
+ | Bei [[# | ||
+ | [[# | ||
+ | eines konkreten Typs durch Festlegen der Typparameter einer Schablone. | ||
+ | |||
+ | ==== Konstante ==== | ||
+ | unveränderlicher Wert. | ||
+ | Dies kann ein Literal sein (eine Zeichenfolge für eine Zahl, ein Zeichen oder eine Zeichenkette) | ||
+ | oder ein mit ''# | ||
+ | den der [[# | ||
+ | beim Übersetzen in ein Literal umwandelt. | ||
+ | |||
+ | Als '' | ||
+ | Für sie sind die [[# | ||
+ | das Erhöhen und Absenken sowie das Einlesen aus Datenströmen untersagt. | ||
+ | |||
+ | Konstante [[# | ||
+ | haben nur Leserechte. Sie können nur lesend auf [[# | ||
+ | zugreifen und dürfen wiederum nur '' | ||
+ | Andererseits sind allein konstante Methoden bei konstanten [[# | ||
+ | aufrufbar. | ||
+ | |||
+ | ==== Konstruktor ==== | ||
+ | (engl. constructor, | ||
+ | |||
+ | zur [[#Klasse]] | ||
+ | gehörende Erzeugerfunktion für ein [[# | ||
+ | die das Objekt anlegt und dessen [[# | ||
+ | mit gültigen Werten belegt. | ||
+ | Eine [[#Klasse]] | ||
+ | kann mehrere Konstruktoren mit unterschiedlichen | ||
+ | [[# | ||
+ | Ein Konstruktor ohne Parameter wird Standardkonstruktor genannt. | ||
+ | |||
+ | ==== Kontravarianz ==== | ||
+ | (lat. kontravariant = sich entgegengesetzt verändernd) | ||
+ | |||
+ | Parametertypen von Methoden können beim Überschreiben allgemeiner gemacht werden. | ||
+ | Die Implementierung kann toleranter sein und einen allgemeineren Typ zulassen. | ||
+ | Die [[# | ||
+ | der implementierenden [[#Klasse]] | ||
+ | geht einher mit gegenläufiger [[# | ||
+ | des Parametertyps. [ [[# | ||
+ | Diese Art von Kontravarianz ist in C++ nicht möglich, | ||
+ | da beim [[# | ||
+ | die Parameterliste exakt gleich lauten muss. | ||
+ | Andernfalls wird eine andere [[# | ||
+ | definiert ([[# | ||
+ | deren Existenz bei den Aufrufen zu Mehrdeutigkeiten führt. | ||
+ | |||
+ | Ein [[#Zeiger]] | ||
+ | auf einen Bestandteil ([[# | ||
+ | oder [[# | ||
+ | kann sicher an einen Zeiger auf ein Bestandteil einer [[# | ||
+ | übertragen werden, | ||
+ | weil jede abgeleitete Klasse auch alle Bestandteile der Basis besitzt, | ||
+ | aber nicht umgekehrt. | ||
+ | Diese Kontravarianz-Regel in C++ scheint das Gegenteil der Regel zu sein, | ||
+ | dass man einen Zeiger auf ein abgeleitetes Objekt an einen Basiszeiger | ||
+ | übergeben kann ([[# | ||
+ | Tatsächlich garantieren beide Regeln, | ||
+ | dass ein Zeiger nie auf Objekt zeigt, | ||
+ | welches nicht mindestens die versprochenen Eigenschaften hat. | ||
+ | |||
+ | ==== Kopierkonstruktor ==== | ||
+ | (engl. copy constructor) | ||
+ | |||
+ | erzeugt ein [[#Objekt]] | ||
+ | als Kopie eines schon existierenden Objektes | ||
+ | i.a. mit denselben [[# | ||
+ | |||
+ | ==== kopfgesteuerte Schleife ==== | ||
+ | [[# | ||
+ | deren Durchführungs-[[# | ||
+ | vor dem Schleifenrumpf steht. | ||
+ | Der Anweisungs-[[# | ||
+ | wird nur durchlaufen, | ||
+ | Nach Abarbeitung des Schleifenrumpfes wird der Test wiederholt. | ||
+ | |||
+ | ==== Kopplung ==== | ||
+ | Software-Engineering: | ||
+ | |||
+ | ==== Kovarianz ==== | ||
+ | (lat. kovariant = sich mit verändernd) | ||
+ | |||
+ | [[# | ||
+ | können beim [[# | ||
+ | spezieller werden. Diese entsprechen wegen [[# | ||
+ | immer noch der in der [[# | ||
+ | definierten [[# | ||
+ | Die [[# | ||
+ | der implementierenden Klasse | ||
+ | geht mit der gleichgerichteten Spezialisierung des Rückgabetyps einher. | ||
+ | |||
+ | ===== L ===== | ||
+ | ==== Lambda-Ausdruck ==== | ||
+ | (engl. lambda expression), | ||
+ | |||
+ | aus funktionalen Programmiersprachen übernommenes Konzept einer anonymen oder Adhoc-[[# | ||
+ | Diese [[# | ||
+ | Sie übernehmen dabei wahlweise Werte oder Referenzen ihrer Umgebung ([[# | ||
+ | ==== Lebensdauer ==== | ||
+ | (engl. lifetime)\\ | ||
+ | |||
+ | Existenzdauer einer [[# | ||
+ | C++ bietet drei Speicherkonzepte ([[# | ||
+ | |||
+ | * Für automatische ([[# | ||
+ | * Statische und [[# | ||
+ | * Dynamische, durch [[#Zeiger]] referenzierte Variablen erhalten auf Anforderung Adressen auf dem Heap (" | ||
+ | |||
+ | ==== Linker ==== | ||
+ | Entwicklungswerkzeug, | ||
+ | und [[# | ||
+ | In UNIX heißt dieses Programm " | ||
+ | |||
+ | ==== Logik ==== | ||
+ | (hier: zweiwertige Aussagenlogik) | ||
+ | |||
+ | grundlegendes Teilgebiet der Mathematik. | ||
+ | Der Logikkalkül wurde von George Boole (1815-1864) ausgearbeitet. | ||
+ | |||
+ | Aussageformen (Prädikate) lassen sich als '' | ||
+ | formulieren. Sie liefern jeweils einen von zwei Wahrheitswerten | ||
+ | ('' | ||
+ | Diese können mit den Junktoren (logischen Operatoren) UND ODER NICHT | ||
+ | verknüpfen. | ||
+ | Logische Ausdrücke dienen als [[# | ||
+ | der Tests in [[# | ||
+ | und [[# | ||
+ | |||
+ | ==== lokal ==== | ||
+ | innerhalb eines [[# | ||
+ | |||
+ | ==== lvalue ==== | ||
+ | (engl. left hand value) | ||
+ | |||
+ | [[# | ||
+ | der auf der linken Seite einer [[# | ||
+ | zulässig ist (aus [[#BCPL]]). | ||
+ | |||
+ | ===== M ===== | ||
+ | ==== Makro ==== | ||
+ | durch ''# | ||
+ | der vom [[# | ||
+ | ausgewertet und bei weiteren Vorkommen im Quelltext ersetzt wird. | ||
+ | |||
+ | ==== Makrofunktion ==== | ||
+ | ein [[#Makro]] | ||
+ | mit Klammern und [[# | ||
+ | |||
+ | ==== Mehrfachvererbung ==== | ||
+ | (engl. multiple inheritance) | ||
+ | |||
+ | [[# | ||
+ | von mehreren [[# | ||
+ | zu einer [[# | ||
+ | Gleichnamige [[# | ||
+ | oder [[# | ||
+ | in den Basisklassen ruft Namenskonflikte hervor, | ||
+ | die nachträglich aufgelöst werden müssen. | ||
+ | |||
+ | ==== Mehrfachverzweigung ==== | ||
+ | [[# | ||
+ | mit mehr als zwei möglichen Ausgängen (Anweisungsfolgen). | ||
+ | |||
+ | ==== Methode ==== | ||
+ | (engl. member function, Operation) | ||
+ | |||
+ | innerhalb einer [[#Klasse]] | ||
+ | definierte Funktion, kann nur für ein [[#Objekt]] | ||
+ | der Klasse ausgerufen werden. | ||
+ | |||
+ | Methoden legen das Verhalten der Objekte fest. | ||
+ | In der objektorientierten Denkweise wird das Ausführen | ||
+ | der Operation als Reaktion des Objektes auf eine [[# | ||
+ | den [[# | ||
+ | aufgefasst. | ||
+ | |||
+ | Die Methode hat Zugriff auf die [[# | ||
+ | des Objektes und auf [[# | ||
+ | Nichtkonstante Methoden können den Objektzustand ändern. | ||
+ | |||
+ | ==== Methodendefinition ==== | ||
+ | kann (und sollte in C++ zumeist) außerhalb der [[# | ||
+ | erfolgen (Trennung von [[# | ||
+ | und Implementierung, | ||
+ | |||
+ | ==== Methodendeklaration ==== | ||
+ | erfolgt bei der [[# | ||
+ | |||
+ | ==== Modul ==== | ||
+ | C und C++: Quelltext oder Menge von Quelltexten, | ||
+ | in eine [[# | ||
+ | übersetzt wird. | ||
+ | |||
+ | C++20: kann aus mehreren Quellen (Schnittstelle, | ||
+ | |||
+ | Software-Engineering: | ||
+ | Ein Modul als (wiederholt verwendbarer) Programmbaustein | ||
+ | ist eine Sammlung inhaltlich zusammengehörender Funktionen. | ||
+ | Diese können für sich in einem Testrahmen überprüft werden, | ||
+ | bevor sie in ein größeres Programm integriert werden. | ||
+ | |||
+ | |||
+ | ==== Modularisierung ==== | ||
+ | Aufteilung der Programmquellen in [[# | ||
+ | zur Verringerung der [[# | ||
+ | eines Programmentwurfes. | ||
+ | Angestrebt sind enge [[# | ||
+ | Modularisierung erlaubt verteiltes Programmieren | ||
+ | und frühzeitige Tests. | ||
+ | |||
+ | ==== Most vexing parse ==== | ||
+ | (dt. etwa: irreführendste Lesart) | ||
+ | |||
+ | Die Grammatik von C++ liest '' | ||
+ | während (unerfahrene? | ||
+ | Die [[#uniform initialization]] mit geschweiften Klammern ([[# | ||
+ | <code cpp> | ||
+ | std:: | ||
+ | std:: | ||
+ | std:: | ||
+ | </ | ||
+ | |||
+ | ===== N ===== | ||
+ | ==== Namenskonvention ==== | ||
+ | Übereinkunft einer Gruppe von Programmierern über die Schreibweise von [[# | ||
+ | |||
+ | ==== Namensraum ==== | ||
+ | (engl. namespace) | ||
+ | |||
+ | [[#Block]], der die Sichtbarkeit von [[# | ||
+ | beschränkt und dadurch die " | ||
+ | Namensraums mit gleichnamigen Bezeichnern verhindert. | ||
+ | |||
+ | Die Standard-Bibliothek definiert ihre Bezeichner | ||
+ | im Namensraum '' | ||
+ | Der Anwender kann bei Bedarf qualifizierte Namen benutzen, | ||
+ | einzelne Namen oder ganze Namensbereiche importieren. | ||
+ | |||
+ | Eine [[#Klasse]] | ||
+ | ist gleichzeitig Namensraum für die darin deklarierten Namen. | ||
+ | |||
+ | ===== O ===== | ||
+ | ==== Objekt ==== | ||
+ | (engl. object, instance variable) | ||
+ | |||
+ | Variable eines Klassentyps. | ||
+ | Ein Objekt belegt alle in der [[#Klasse]] | ||
+ | definierten [[# | ||
+ | mit individuellen Werten ([[# | ||
+ | und kann die in der [[#Klasse]] | ||
+ | deklarierten [[# | ||
+ | ausführen. | ||
+ | Die Methoden legen das [[# | ||
+ | des Objektes fest. | ||
+ | Die Attributwerte repräsentieren den [[# | ||
+ | des Objektes. | ||
+ | (Nicht konstante) Methoden können den Zustand ändern. | ||
+ | |||
+ | ==== Objektdatei ==== | ||
+ | vom [[# | ||
+ | aus einem [[# | ||
+ | erzeugtes Zwischenprodukt mit verschieblichem Maschinencode, | ||
+ | das in [[# | ||
+ | aufgenommen oder beim [[#Binden]] | ||
+ | zu einem ausführbaren Programm komplettiert wird. | ||
+ | |||
+ | ==== Objektdiagramm ==== | ||
+ | grafische Darstellung der Objekt-[[# | ||
+ | zu einem bestimmten Zeitpunkt, siehe auch | ||
+ | [[# | ||
+ | |||
+ | ==== objektorientiert ==== | ||
+ | enhält drei Konzepte: [[# | ||
+ | |||
+ | ==== objektorientierte Analyse (OOA) ==== | ||
+ | verwendet die Konzepte [[# | ||
+ | [[# | ||
+ | zur Modellierung der Anforderungen an ein Softwareprodukt. | ||
+ | |||
+ | ==== objektorientierter Entwurf (OOD) ==== | ||
+ | (objektorientiertes Design) | ||
+ | |||
+ | Im Vordergrund steht die Festlegung der [[# | ||
+ | die zur Lösung der Aufgabe erforderlich sind. | ||
+ | Klassen werden mit möglichst eng definierten Aufgaben versehen. | ||
+ | Größere Aufgaben werden durch Kooperation ([[# | ||
+ | von [[# | ||
+ | gelöst. Dabei treten wiederkehrende Teilaufgaben auf, | ||
+ | für die bereits Lösungen bekannt sind ([[# | ||
+ | |||
+ | ==== objektorientiertes Programmieren (OOP) ==== | ||
+ | Philosophie des Programmierens, | ||
+ | die aus gleichberechtigten und einheitlich erscheinenden [[# | ||
+ | besteht. | ||
+ | Objekte erledigen Aufgaben prinzipiell in eigener Verantwortung. | ||
+ | Um die Fähigkeiten anderer Objekte nutzen zu können, | ||
+ | schicken sich die Objekte [[# | ||
+ | |||
+ | ==== One definition rule ==== | ||
+ | Die Definition einer Funktion oder einer | ||
+ | [[# | ||
+ | Übertretugnen dieser Regel führen zu Fehlern beim [[#Binden]] | ||
+ | (mehrfach definierte oder fehlende Symbole). | ||
+ | |||
+ | ==== Operator ==== | ||
+ | vordefiniertes Zeichen oder Zeichengruppe, | ||
+ | deren Anwendung auf einen [[# | ||
+ | oder mehrere Ausdrücke | ||
+ | zu einer auswertenden Handlung führt, | ||
+ | in deren Ergebnis ein Ergebniswert steht. | ||
+ | Operatoren können einen [[# | ||
+ | produzieren. | ||
+ | |||
+ | Je nach Anzahl der benötigten Operanden | ||
+ | heißen Operatoren einstellig (unär), | ||
+ | zweistellig (binär) oder dreistellig (ternär). | ||
+ | |||
+ | Für einen benutzerdefinierten [[#Typ]] | ||
+ | ([[# | ||
+ | lassen sich die (meisten) Operatoren [[# | ||
+ | |||
+ | ===== P ===== | ||
+ | ==== Parameter ==== | ||
+ | im [[# | ||
+ | hinter dem Funktionen aufgelistete lokale Variablen, | ||
+ | die als Platzhalter für die beim [[# | ||
+ | zu übernehmenden [[# | ||
+ | dienen. | ||
+ | Die Parameter übernehmen eine Kopie des Argumentwertes, | ||
+ | der im Inneren der Funktion beliebig verändert werden kann, | ||
+ | ohne dass dies sich auf das aufrufende Argument auswirkt | ||
+ | (Kopierverhalten, | ||
+ | Wertparameter bilden eine " | ||
+ | |||
+ | Wird der Typ des Parameters durch ein nachfolgendes ''&'' | ||
+ | gekennzeichnet, | ||
+ | Eine solche Referenz wird mit dem typgleichen Speicherplatz | ||
+ | der Argumentvariable gleichgesetzt. | ||
+ | Änderungen an dieser Variable wirken sich direkt auf das aufrufende Argument aus. | ||
+ | (Referenzverhalten). | ||
+ | |||
+ | Ein [[#Feld]] | ||
+ | als Funktionsparameter wird nicht kopiert, | ||
+ | sondern mit dem Feldnamen nur als Zeiger auf die Anfangsadresse des Argumentfeldes | ||
+ | an die Funktion übergeben. Da auch bei Feldern direkt auf dem Speicher | ||
+ | des Argumentes gearbeitet wird, haben auch Feldparameter Referenzverhalten. | ||
+ | |||
+ | ==== Parameter pack ==== | ||
+ | durch '' | ||
+ | |||
+ | ==== PASCAL ==== | ||
+ | (benannt nach dem Mathematiker Blaise Pascal) | ||
+ | |||
+ | von Niklaus Wirth entworfene Programmiersprache | ||
+ | als Ableger der (immer komplizierter werdenden) Sprache ALGOL. | ||
+ | Die Sprache entstand mit dem Ziel einer | ||
+ | einfach erlernbaren Quelltextstruktur | ||
+ | und strenger Typprüfung. | ||
+ | Erfolgreiche Weiterentwicklungen sind Modula, Oberon und Delphi. | ||
+ | |||
+ | ==== Persistenz ==== | ||
+ | Daten überleben das Programm. | ||
+ | Daten existeren zwischen Programmausführungen, | ||
+ | sogar verschiedenen Versionen eines Programms weiter. | ||
+ | |||
+ | ==== POD ==== | ||
+ | (engl. plain old data structure) | ||
+ | |||
+ | [[# | ||
+ | |||
+ | ==== Polymorphie ==== | ||
+ | (grch. Vielgestaltigkeit) | ||
+ | |||
+ | Gleichlautende Botschaften an Objekte verwandter, [[# | ||
+ | bewirken unterschiedliches Verhalten. | ||
+ | |||
+ | Objekte abgeleiteter Klassen können dort eingesetzt werden, | ||
+ | wo [[#Zeiger]] | ||
+ | oder [[# | ||
+ | auf Objekte der [[# | ||
+ | erwartet werden. | ||
+ | Für bestimmte, in der Basisklasse als virtuell markierte [[# | ||
+ | wird das [[#Binden]] | ||
+ | des Methodenrumpfes nicht beim Übersetzen (frühe Bindung) durchgeführt, | ||
+ | sondern bis zum Methodenaufruf | ||
+ | verzögert (späte Bindung). Die Zuordnung der richtigen (virtual = tatsächlichen) Methode | ||
+ | erfolgt über eine im Objekt versteckt mitgeführte, | ||
+ | |||
+ | Neben dieser dynamischen Polymorphie gibt es in C++ | ||
+ | auch statische oder Typ-Polymorphie. | ||
+ | Es können gleichnamige [[# | ||
+ | mit unterschiedlichen Parameterlisten überladen werden. | ||
+ | Beim [[# | ||
+ | wird anhand der übergebenen Argumenttypen entschieden, | ||
+ | welche Funktion aufgerufen werden soll. | ||
+ | [[# | ||
+ | verallgemeinern dieses Überladen auf beliebige Argumenttypen. | ||
+ | |||
+ | ==== Prädikat ==== | ||
+ | [[# | ||
+ | |||
+ | |||
+ | ==== Präprozessor ==== | ||
+ | Entwicklungswerkzeug zum Einbinden von Dateien | ||
+ | und zum Textersatz ([[# | ||
+ | während des Übersetzungsvorgangs. | ||
+ | |||
+ | ==== Priorität ==== | ||
+ | ([[# | ||
+ | |||
+ | ==== Programmierstil ==== | ||
+ | Herangehensweise und Auswahl der Sprachmittel für die Programmentwicklung: | ||
+ | |||
+ | * ** strukturiertes Programmieren **: Einsatz von [[# | ||
+ | * ** funktionales Programmieren **: [[# | ||
+ | * ** prozedurales Programmieren **: Definition und Aufruf von [[# | ||
+ | * ** modulares Programmieren **: Aufteilung des Quelltextes in inhaltlich zusammengehörende Abschnitte ([[# | ||
+ | * ** objektbasiertes Programmieren | ||
+ | * ** objektorientiertes Programmieren **: Einsatz von [[# | ||
+ | * ** generisches Programmieren ** : Entwurf von typunabhängigen, | ||
+ | |||
+ | C++ ist eine Hybridsprache. | ||
+ | Sie erlaubt den Einsatz einer Reihe unterschiedlicher Programmierstile, | ||
+ | diese können auch gemischt eingesetzt werden. | ||
+ | In den Augen eines Theoretikers ist dies ein Makel: | ||
+ | C++ ist unrein. | ||
+ | Einem Praktiker geht es jedoch nicht um das Prinzip der reinen Lehre: | ||
+ | er muss praktische Probleme lösen, | ||
+ | deren Vielfalt und Komplexität unterschiedliche Herangehensweisen erforderlich machen; | ||
+ | ein ständiger Wechsel zwischen " | ||
+ | |||
+ | ==== Prozedur ==== | ||
+ | (engl. void function, subroutine, procedure, Unterprogramm) | ||
+ | |||
+ | Programmteil, | ||
+ | unter einem Namen ([[# | ||
+ | Im Gegensatz zu einer [[# | ||
+ | liefert eine Prozedur kein Ergebnis. | ||
+ | Es kommt hier nur auf den Seiteneffekt an. | ||
+ | |||
+ | C und C++ unterscheiden in ihrer [[# | ||
+ | nicht zwischen Funktionen und Prozeduren. | ||
+ | Beide werden unter der Bezeichnung Funktion zusammengefasst. | ||
+ | Eine Prozedur ist eine Funktion mit dem [[# | ||
+ | '' | ||
+ | |||
+ | ===== Q ===== | ||
+ | ==== Quelltext ==== | ||
+ | (engl. source code) | ||
+ | |||
+ | in einer Programmiersprache geschriebenes Programmtext, | ||
+ | das einem [[# | ||
+ | oder Interpreter übergeben wird. | ||
+ | |||
+ | ===== R ===== | ||
+ | ==== RAII-Prinzip ==== | ||
+ | (engl. resource acquisition is initialisation), | ||
+ | auch [[# | ||
+ | |||
+ | Besitzübernahme an angeforderten Ressourcen (Speicher, Dateien) durch [[# | ||
+ | dass Ressourcen durch den [[# | ||
+ | |||
+ | |||
+ | ==== Rangfolge ==== | ||
+ | (Priorität) | ||
+ | |||
+ | legt fest, in welcher Reihenfolge unterschiedliche [[# | ||
+ | in einem mehrgliedrigen Ausdruck ausgewertet werden. | ||
+ | Bei gleicher Rangstufe muss auch die Bindungsrichtung der Operatoren beachtet werden. | ||
+ | Damit liegt in C und C++ aber immer noch nicht fest, | ||
+ | in welcher Reihenfolge Teilausdrücke und nebeneinander stehende [[# | ||
+ | als Operanden ausgewertet werden. | ||
+ | Haben die Funktionen sich [[# | ||
+ | die sich gegenseitig beeinflussen, | ||
+ | ist die Wirkung implementationsabhängig. | ||
+ | |||
+ | ==== Referenz ==== | ||
+ | (engl. reference, Alias, Verweis) | ||
+ | |||
+ | [[#Typ]], | ||
+ | der einen [[# | ||
+ | mit einem schon existierenden Objekt dauerhaft verbindet. | ||
+ | |||
+ | ==== Rückgabetyp ==== | ||
+ | [[#Typ]] | ||
+ | für den von einer [[# | ||
+ | zurückgelieferten Wert. | ||
+ | |||
+ | ==== Rule of Five ==== | ||
+ | Verschiebekonstruktor und Verschiebezuweisung erweitern seit [[#C++11]] die [[# | ||
+ | Sie erlauben dem Nutzer, verwaltete Ressourcen leicht in andere Objekte zu übertragen. | ||
+ | Compiler folgen [[..: | ||
+ | Die Kapselung der Ressourcenverwaltung in solchen Klassen erlaubt diese Nutzern, der [[# | ||
+ | |||
+ | ==== Rule of Three ==== | ||
+ | Regel der großen Drei (Destruktor, | ||
+ | Wird eine dieser Methoden einer Klasse vom Programmierer definiert, | ||
+ | so müssen meist auch die anderen beiden definiert oder verboten werden | ||
+ | (Ausnahme: trivialer virtueller Destruktor einer [[# | ||
+ | Mit der ab [[#C++11]] vorhandenen [[# | ||
+ | wird dies zur Regel der großen Fünf ([[# | ||
+ | |||
+ | |||
+ | ==== Rule of Zero ==== | ||
+ | Gute Programmierpraxis kapselt die Ressourcenverwaltung in [[# | ||
+ | So definierte Klassen müssen gar keine [[..: | ||
+ | Sie werden automatisch definiert, sofern die Bestandteile der Klasse Kopier- bzw. Verschiebeverhalten erlauben. | ||
+ | ==== rvalue ==== | ||
+ | (engl. right-hand side value) | ||
+ | |||
+ | [[begriffe# | ||
+ | |||
+ | ==== Rvalue-Referenz ==== | ||
+ | '' | ||
+ | |||
+ | ==== RVO ==== | ||
+ | (engl. return value optimization) | ||
+ | |||
+ | vermeidet unnötige Kopie des Rückgabewertes einer [[# | ||
+ | ===== S ===== | ||
+ | ==== Schablone ==== | ||
+ | (engl. template, Vorlage) | ||
+ | |||
+ | allgemeingültige (generische) [[# | ||
+ | oder [[# | ||
+ | bei deren [[# | ||
+ | ein oder mehrere [[#Typ]]en | ||
+ | und / oder ganzzahlige [[# | ||
+ | bewusst nicht festgelegt werden. | ||
+ | Die Festlegung dieser Schablonen-[[# | ||
+ | erfolgt bei Bedarf durch Spezialisierung beim Übersetzen | ||
+ | eines [[# | ||
+ | bzw. Bildung einer konkreten Klasse. | ||
+ | |||
+ | ==== Schleife ==== | ||
+ | (engl. loop, wiederholte Anweisung) | ||
+ | |||
+ | [[# | ||
+ | zur wiederholten Ausführung einer [[# | ||
+ | oder eines Anweisungsblocks (Schleifenrumpf). | ||
+ | Je nach Reihenfolge von [[#Block]] | ||
+ | und Ausführungs-[[# | ||
+ | werden Schleifen als [[# | ||
+ | bzw. [[# | ||
+ | bezeichnet. | ||
+ | Ist die Testbedingung stets erfüllt, | ||
+ | liegt eine Endlosschleife vor. | ||
+ | |||
+ | ==== Schlüsselwort ==== | ||
+ | (engl. keyword) | ||
+ | |||
+ | reservierter Bezeichner mit besonderer, | ||
+ | in der Programmiersprache festgelegter Bedeutung. | ||
+ | |||
+ | ==== Schnittstelle ==== | ||
+ | (engl. interface) | ||
+ | |||
+ | Zusammenfassung aller von außen benötigten | ||
+ | und aller von außen abrufbaren Größen, | ||
+ | umfasst Vereinbarungen über die Art und Weise, | ||
+ | wie Informationen ausgetauscht werden, | ||
+ | ermöglicht die unabhängige Implementierung von Programmteilen | ||
+ | ([[# | ||
+ | erleichtert Benutzung und Fehlersuche. | ||
+ | |||
+ | Die Schnittstelle einer [[# | ||
+ | ist ihr Funktionskopf. | ||
+ | Die Schnittstelle einer [[#Klasse]] | ||
+ | umfasst alle [[# | ||
+ | ([[# | ||
+ | und [[# | ||
+ | |||
+ | ==== Seiteneffekt ==== | ||
+ | Einige [[# | ||
+ | lesen die Werte ihrer Operanden nicht nur aus. | ||
+ | Sie verändern diese auch, bewirken Ausgaben in einen Datenstrom, | ||
+ | fordern Ressourcen an oder geben diese frei. | ||
+ | Diese Wirkungen sind Seiteneffekte der Auswertung. | ||
+ | |||
+ | Auch [[# | ||
+ | können neben der Auswertung der [[# | ||
+ | und der Rückgabe eines Ergebnisses | ||
+ | globale Variablen oder Objektzustände ändern. | ||
+ | |||
+ | Der Seiteneffekt einer [[# | ||
+ | '' | ||
+ | |||
+ | Da die Auswertungsreihenfolge von gleichrangigen Operanden | ||
+ | innerhalb einer Anweisung implementationsabhängig ist, | ||
+ | sollten mehrere, sich beeinflussende Seiteneffekte | ||
+ | vermieden werden: | ||
+ | |||
+ | <code cpp> | ||
+ | int a = 1; | ||
+ | int b = a++ + a--; // Welchen Wert hat b? 1, 2 oder 3 ? | ||
+ | </ | ||
+ | |||
+ | ==== SFINAE ==== | ||
+ | (engl. spezialization failure is not an error) | ||
+ | |||
+ | Tritt bei der [[# | ||
+ | ==== SIMULA ==== | ||
+ | (SIMULAtion language) | ||
+ | |||
+ | von Ole-Johan Dahl und Kristian Nygaard 1965-1967 entworfene | ||
+ | Programmiersprache für ereignisgesteuerte Simulationen, | ||
+ | Ableger von ALGOL, mit Objektkonzept und Koroutinen. | ||
+ | |||
+ | ==== Sequenzdiagramm ==== | ||
+ | grafische, zeitbasierte Darstellung von [[# | ||
+ | mit vertikaler Zeitachse, | ||
+ | siehe auch: [[# | ||
+ | |||
+ | ==== SmallTalk ==== | ||
+ | objektorientierte Programmiersprache und Programmierumgebung, | ||
+ | 1974/1980 im XEROX PARC entwickelt. | ||
+ | |||
+ | ==== Software ==== | ||
+ | Gesamtheit aller zur Steuerung einer Datenverarbeitungsanlage ([[# | ||
+ | |||
+ | ==== Software-Engineering ==== | ||
+ | (dt. Softwaretechnik) | ||
+ | |||
+ | Ingenieurdisziplin, | ||
+ | ==== Speicherbereinigung ==== | ||
+ | (engl. garbage collection) | ||
+ | |||
+ | Mechanismus in der Laufzeitumgebung (objektorientierter) Softwaresysteme, | ||
+ | mit dem der Speicherbereich nicht mehr benutzter [[# | ||
+ | wieder bereitgestellt wird, | ||
+ | entbindet Programmierer von der Pflicht, | ||
+ | dynamisch angeforderten Speicher nach der Nutzung manuell freizugeben. | ||
+ | C++ enthält keinen " | ||
+ | allerdings können solche über [[# | ||
+ | eingebunden werden. | ||
+ | |||
+ | ==== Speicherklasse ==== | ||
+ | (engl. storage class) | ||
+ | |||
+ | legt Lebensdauer [[# | ||
+ | Variablen (automatisch, | ||
+ | bzw. die Bindung (Sichtbarkeit) [[# | ||
+ | Bezeichner (statisch oder extern) fest. | ||
+ | |||
+ | ==== Spezialisierung ==== | ||
+ | taxonomische [[# | ||
+ | zwischen einer allgemeinen und der speziellen Einheit, | ||
+ | wobei das speziellere weitere Eigenschaften ([[# | ||
+ | hinzufügt, die Semantik erweitert und sich kompatibel zum allgemeinen verhält. | ||
+ | |||
+ | ==== Sprung ==== | ||
+ | (engl. jump) | ||
+ | |||
+ | Anweisung, das Programm an anderer Stelle fortzusetzen. | ||
+ | In C ist der Sprung auf das Innere einer [[# | ||
+ | beschränkt. | ||
+ | |||
+ | ==== Standardkonstruktor ==== | ||
+ | [[# | ||
+ | ohne Angabe von [[# | ||
+ | |||
+ | ==== Steueranweisung ==== | ||
+ | [[# | ||
+ | und [[# | ||
+ | gestatten Abweichungen von der sequentiellen Abarbeitung von [[# | ||
+ | |||
+ | ==== STL ==== | ||
+ | (engl. standard template library) | ||
+ | |||
+ | ursprünglich von [[wp> | ||
+ | für [[# | ||
+ | die in [[#C++98]] eingeflossen ist. | ||
+ | |||
+ | Auch: | ||
+ | ==== Structured Bindings ==== | ||
+ | seit [[#C++17]]: Definition mehrerer Variablen aus den Bestandteilen von [[# | ||
+ | |||
+ | ==== Struktur ==== | ||
+ | (engl. structure, record, Datenverbund) | ||
+ | |||
+ | benutzerdefinierter [[#Typ]], | ||
+ | der mehrere [[# | ||
+ | als Einheit zusammenfasst. | ||
+ | |||
+ | ==== Syntax ==== | ||
+ | ([[# | ||
+ | |||
+ | ==== Szenario ==== | ||
+ | bestimmte Folge von Aktionen, z.B. ein konkreter Ablaufpfad in einem [[# | ||
+ | siehe [[# | ||
+ | |||
+ | ===== T ===== | ||
+ | ==== TMP ==== | ||
+ | (engl. template meta programming) | ||
+ | |||
+ | nutzt die Auswertung von [[# | ||
+ | |||
+ | ==== Typ ==== | ||
+ | Festlegung von Speicherplatzbedarf, | ||
+ | Wertebereich und Operationen, | ||
+ | wird bei der Übersetzung überprüft und [[# | ||
+ | zugeordnet. | ||
+ | |||
+ | Neben einfachen Grunddatentypen und in Bibliotheken vordefinierten Typen | ||
+ | können vom Programmierer eigene Typen festgelegt und benutzt werden. | ||
+ | [[# | ||
+ | und [[# | ||
+ | sind zusammengesetzte Typen. | ||
+ | |||
+ | ==== Typecast ==== | ||
+ | zwangsweise Uminterpretation des Speicherabbildes einer Variable, | ||
+ | setzt die [[# | ||
+ | außer Kraft. | ||
+ | Die Verantwortung für die Sinnhaftigkeit muss der Programmierer übernehmen. | ||
+ | |||
+ | ==== Typumwandlung ==== | ||
+ | (engl. type conversion) | ||
+ | |||
+ | im stillen vollzogene (implizite) | ||
+ | oder ausdrücklich angeforderte (explizite) | ||
+ | Umwandlung eines Wertes in einen anderen [[#Typ]]. | ||
+ | |||
+ | Grunddatentypen sind in einem großen Maße ineinander wandelbar. | ||
+ | Passt der Wert nicht in den Wertebereich des Zieltyps, | ||
+ | kann das zu Datenverlust (Zahl signifikanter Stellen) führen. | ||
+ | Dabei vom [[# | ||
+ | ausgebene Warnungen können durch | ||
+ | ausdrückliche Umwandlungsanweisung unterbunden werden. | ||
+ | |||
+ | Ist keine Umwandlung möglich, wird vom Compiler ein Fehler gemeldet. | ||
+ | Ein [[# | ||
+ | setzt auch solche Fehlermeldungen außer Kraft. | ||
+ | |||
+ | Klassen können die bei Typumwandlung vorzunehmenden Aktionen | ||
+ | durch einstellige [[# | ||
+ | und durch Typumwandlungs-[[# | ||
+ | festlegen. | ||
+ | |||
+ | ===== U ===== | ||
+ | ==== Überladen ==== | ||
+ | (engl. overload) | ||
+ | |||
+ | belegt einen [[# | ||
+ | einer [[# | ||
+ | oder einen [[# | ||
+ | mit einer neuen Bedeutung in einem anderen Zusammenhang. | ||
+ | Die mehrfache Verwendung desselben Funktionsnamens oder eines Operators | ||
+ | mit unterschiedlicher Parameterliste oder [[# | ||
+ | unterschiedlicher Typen erlaubt statische [[# | ||
+ | |||
+ | ==== Überlauf ==== | ||
+ | (engl. overflow, underflow) | ||
+ | |||
+ | Übertreten einer Wertebereichsgrenze. | ||
+ | Bei Ganzzahlen wird in C++ am anderen Ende des Wertebereichs weitergezählt | ||
+ | (Zahlenring, | ||
+ | Fließkommazahlen gehen (bei heute üblichen Implementierungen) " | ||
+ | zu große Werte können als " | ||
+ | |||
+ | ==== Überschreiben von Methoden ==== | ||
+ | (engl. redefinition, | ||
+ | |||
+ | Eine [[# | ||
+ | definiert eine geerbte [[# | ||
+ | der [[# | ||
+ | unter dem gleichen Namen neu. | ||
+ | Anzahl und Typen der Parameter müssen gleich bleiben, | ||
+ | sonst wird die Methode [[# | ||
+ | |||
+ | ==== Übersetzungseinheit ==== | ||
+ | Eine Quelltextdatei, | ||
+ | ==== UML ==== | ||
+ | (engl. Unified Method Language) | ||
+ | |||
+ | graphische Notation für objektorientierte Softwareentwürfe, | ||
+ | |||
+ | * [[# | ||
+ | * [[# | ||
+ | * [[# | ||
+ | * [[# | ||
+ | * [[# | ||
+ | |||
+ | ==== uniform initialization ==== | ||
+ | Seit [[#C++11]]: Angabe von Anfangswerten in geschweiften Klammern. Erlaubt keine implizite Konversion in " | ||
+ | Ein [[# | ||
+ | <code cpp> | ||
+ | int x { 3 }; // int x = 3; | ||
+ | int y {}; // int y = 0; auch für lokale Variable | ||
+ | std:: | ||
+ | // aber: | ||
+ | std:: | ||
+ | </ | ||
+ | |||
+ | ==== Unterklasse ==== | ||
+ | ([[# | ||
+ | |||
+ | ===== V ===== | ||
+ | ==== Variable ==== | ||
+ | benannter Speicherplatz, | ||
+ | angesprochen wird und einen Wert von einem bestimmten [[#Typ]] | ||
+ | aufnimmt. | ||
+ | Durch Operationen wie [[# | ||
+ | oder Einlesen aus einem Datenstrom | ||
+ | kann der Wert der Variable verändert werden. | ||
+ | Bei bekannter Speicheradresse kann der Wert auch indirekt über [[#Zeiger]] | ||
+ | manipuliert werden. | ||
+ | [[# | ||
+ | und [[# | ||
+ | hängen von der Art und Lage der [[# | ||
+ | ab. | ||
+ | |||
+ | ==== Verallgemeinerung ==== | ||
+ | (Generalisierung, | ||
+ | |||
+ | geistiges Verfahren zur Zusammenfassung gemeinsamer Eigenschaften | ||
+ | einer Gruppe von [[# | ||
+ | als [[# | ||
+ | |||
+ | ==== Verantwortlichkeit ==== | ||
+ | (engl. responsibility, | ||
+ | |||
+ | umfasst die [[# | ||
+ | und die interpretierbaren [[# | ||
+ | eines [[# | ||
+ | |||
+ | ==== Vereinigung ==== | ||
+ | benutzerdefinierter zusammengesetzter [[#Typ]], | ||
+ | dessen [[# | ||
+ | denselben Speicherplatz überdecken. | ||
+ | |||
+ | ==== Vererbung ==== | ||
+ | (engl. inheritance, | ||
+ | |||
+ | programmiersprachliches Konzept für die Umsetzung einer Beziehung | ||
+ | zwischen einer [[# | ||
+ | und einer [[# | ||
+ | wodurch die abgeleiteten Klassen die Eigenschaften der Basisklassen | ||
+ | mitnutzen können. | ||
+ | Die Vererbung implementiert normalerweise bestimmte | ||
+ | Generalisierungs- und Spezialisierungsbeziehungen von Objekttypen, | ||
+ | meist im Zusammenhang mit [[# | ||
+ | |||
+ | ==== Vererbungshierarchie ==== | ||
+ | (Klassenhierarchie) | ||
+ | |||
+ | Geflecht der [[# | ||
+ | bei [[# | ||
+ | ein Baum oder Wald, | ||
+ | bei [[# | ||
+ | ein gerichteter, | ||
+ | |||
+ | ==== Verhalten ==== | ||
+ | beobachtbare Effekte aller Operationen, | ||
+ | angewendet werden können. | ||
+ | Wie das Objekt agiert und reagiert, wie sich sein [[# | ||
+ | ändert, ist vollständig durch seine Operationen festgelegt. | ||
+ | |||
+ | ==== Verschiebekonstruktor ==== | ||
+ | (engl. move constructor) | ||
+ | |||
+ | erzeugt ein [[#Objekt]] mit den [[# | ||
+ | Das neue Objekt übernimmt den Besitz an den Ressourcen und hinterlässt diese als leere Hülle ([[# | ||
+ | |||
+ | ==== Verschiebesemantik ==== | ||
+ | Besitzübernahme durch [[# | ||
+ | Die übernommene [[# | ||
+ | ==== Verzweigung ==== | ||
+ | (Auswahl, Entscheidung) | ||
+ | |||
+ | Steueranweisung, | ||
+ | entscheidet, | ||
+ | bzw. Anweisungsfolgen ausgeführt werden muss. | ||
+ | |||
+ | ==== virtuelle Basis ==== | ||
+ | (engl. virtual base class) | ||
+ | |||
+ | Bei der [[# | ||
+ | über mehrere Vererbungspfade (Rhombusmuster bei [[# | ||
+ | wird nur ein gemeinsames Basisklassenobjekt angelegt. | ||
+ | |||
+ | ==== virtuelle Methode ==== | ||
+ | (engl. virtual member function, polymorphe Methode) | ||
+ | |||
+ | realisiert dynamische [[# | ||
+ | Erst zur Laufzeit wird bestimmt, welche Operation ausgeführt wird | ||
+ | (dynamische, | ||
+ | |||
+ | ==== Vorbedingung ==== | ||
+ | [[# | ||
+ | der vor dem Ablauf einer Operation gegeben sein muss ([[# | ||
+ | |||
+ | ===== W ===== | ||
+ | ==== Wertebereich ==== | ||
+ | Menge der möglichen Datenwerte eines [[#Typ]]s. | ||
+ | |||
+ | ==== Wiederverwendbarkeit ==== | ||
+ | (engl. reusability) | ||
+ | |||
+ | Entwurfziel zur Erhöhung der Produktivität beim Softwareentwurf. | ||
+ | |||
+ | ===== X ===== | ||
+ | ===== Y ===== | ||
+ | ===== Z ===== | ||
+ | ==== Zeiger ==== | ||
+ | (engl. pointer) | ||
+ | |||
+ | [[#Typ]], | ||
+ | dessen Objektwerte Speicheradressen von (anderen) Objekten sind. | ||
+ | Über Zeiger sind zeitweilige Verweise | ||
+ | und Zugriffe auf Daten ([[# | ||
+ | Zeiger sind an einen Typ gebunden, | ||
+ | der zu den verwiesenen Daten passen muss. | ||
+ | |||
+ | ==== Zeigerarithmetik ==== | ||
+ | Rechenregeln für den Umgang mit [[# | ||
+ | in zusammenhängenden Speicherbereichen ([[# | ||
+ | |||
+ | ==== Zugriffsrecht ==== | ||
+ | (engl. granted access) | ||
+ | |||
+ | von [[# | ||
+ | und [[# | ||
+ | zu verleihende Erlaubnis, [[# | ||
+ | und [[# | ||
+ | in einem [[# | ||
+ | zu benutzen. | ||
+ | C++ hat ein dreistufiges System der Rechtevergabe | ||
+ | (öffentlich, | ||
+ | welches noch durch ausdrücklich ausgewiesene Freunde ergänzt wird. | ||
+ | |||
+ | ==== Zusicherung ==== | ||
+ | (engl. assertion, Behauptung) | ||
+ | |||
+ | [[# | ||
+ | für einen korrekten Ablauf einer [[# | ||
+ | oder Anweisungsfolge. | ||
+ | [[# | ||
+ | sollen prüfen, ob die Eingangsgrößen zulässige Werte enthalten, | ||
+ | die Voraussetzung für den korrekten Ablauf eines [[# | ||
+ | sind. | ||
+ | Nachbedingungen sollen sicherstellen, | ||
+ | dass die Ergebnisse im erwarteten Bereich liegen. | ||
+ | Korrektheitsbeweise können nicht erbracht werden, | ||
+ | dennoch sind Zusicherungen ein wesentliches Hilfsmittel | ||
+ | zur frühzeitigen Erkennung von Fehlern (design by contract). | ||
+ | Bei nicht erfüllter Zusicherung kann das Programm mit einer | ||
+ | Fehlermeldung beendet oder eine [[# | ||
+ | geworfen werden. | ||
+ | |||
+ | ==== Zustand ==== | ||
+ | (engl. state) | ||
+ | |||
+ | wird bestimmt durch die [[# | ||
+ | und seine Verbindungen zu anderen Objekten, | ||
+ | die zu einem bestimmten Zeitpunkt existieren. | ||
+ | |||
+ | ==== Zustandsdiagramm ==== | ||
+ | (engl. state transition diagram) | ||
+ | |||
+ | grafische Darstellungsform eines Zustandsautomaten. | ||
+ | |||
+ | ==== Zuweisung ==== | ||
+ | (engl. assignment) | ||
+ | |||
+ | Ausdruck, der einer Variable (allgemeiner einem [[# | ||
+ | einen neuen Wert zuweist. | ||
+ | |||
+ | ===== Quellen ===== | ||
+ | - Balzert, Helmut: Lehrbuch der Software-Technik. Spektrum, Heidelberg (2000). | ||
+ | - Booch, Grady: Object Oriented Design with Applications. Benjamin Cummings, Redwood (1991). | ||
+ | - Herkunftswörterbuch. Bertelsmann, | ||
+ | - Informatik-Duden. Dudenverlag, | ||
+ | - McGregor, John D.; Sykes, David A.: Object-Oriented Software Development: | ||
+ | - Oesterreich, | ||
+ | - Rechenberg, Peter; Pomberger, Gustav: Informatik-Handbuch. Hanser, München (1999). | ||
+ | - Stroustrup, Bjarne: | ||
+ | - [[http:// | ||