Objektorientierte Programmierung OOP

KE 2 Datentypen und Kontrollstrukturen; Begriffe, Beispiele und Definitionen

KE 2 Datentypen und Kontrollstrukturen; Begriffe, Beispiele und Definitionen


S. H.
Diese Lernkarten bieten einen umfassenden Überblick über die Grundlagen der objektorientierten Programmierung (OOP) auf Universitätsniveau. Sie behandeln zentrale Konzepte wie Variablen, Typen, Ausdrücke, Operatoren und Schleifen, wobei der Fokus auf der praktischen Anwendung in Java liegt. Die Karteikarten enthalten zahlreiche Beispiele und Definitionen, die das Verständnis von Anweisungen wie break und continue vertiefen. Besonders hilfreich sind die Erklärungen zu Gültigkeitsbereichen und Sichtbarkeitsbereichen von Variablen, die durch Abbildungen veranschaulicht werden. Diese Lernkarten eignen sich ideal für Studierende, die sich auf Prüfungen vorbereiten oder ihr Wissen in der objektorientierten Programmierung festigen möchten.
Flashcards
90
Students
4
Language
German
Category
Computer Science
Level
University
Created / Updated
16.02.2013 / 29.04.2022

Flashcards

Definition: Datentyp  

Datentyp Ein Datentyp (engl. datatype) ist eine Menge von Werten und eine Menge von Operatoren, um diese Werte zu verknüpfen, zu vergleichen oder ineinander zu überführen.

Begriff: primitive Datentypen sind z.B. int oder char.

Wie werden diese Typen noch bezeichnet?

elementare und einfache Datentypen

Begriff: ganze Zahlen

Welche Typen gibt es und wie ist deren Wertebreich?

-byte; -2hoch7, ..., 0, ..., 2hoch7-1; -128, ..., 127

-short; -2hoch15, ..., 0, ..., 2hoch15-1; -32768, ..., 32767

-int; -2hoch31, ..., 0, ..., 2hoch31-1; -2147483648, ...,2147483647  

-long -2hoch63, ..., 0, ..., 2hoch63-1; -9223372036854775808L,..., 9223372036854775807L

Definition: Literale

Literale (engl. literal) sind Folgen von Zeichen, die Werte symbolisieren. [JLS: § 3.10]

Bemerkung: Interpretation von Literalen

  Diese Kennzeichnungen wurden bei Java eingeführt, um eine eindeutige Interpretation von Literalen zu gewährleisten. Anderenfalls könnte z. B. das Literal 123 nicht nur für den Dezimalwert 123, sondern auch für den Dezimalwert 83 stehen, wenn 123 als Oktalzahl aufgefasst wird, oder den Dezimalwert 291 darstellen, wenn 123 als Hexadezimalzahl aufgefasst wird.

 

Beispiel: Werte von Literalen

  Die Tabelle stellt jeweils denselben Wert als dezimale, oktale bzw. eine hexadezimale ganze Zahl dar

 

Begriff: Gleitkommazahl

• Gleitkommazahlen mit einfacher Genauigkeit vom Typ float   

• Gleitkommazahlen mit doppelter Genauigkeit vom Typ double

 

Gleitkommazahlen sind vom Typ double, falls kein Buchstabe (d, D, f, F) am Ende des Literals angegeben ist.

Bemerkung: Präzision

  Die Präzision von Gleitkommazahlen ist beschränkt. Bei float-Zahlen beträgt die Genauigkeit ungefähr sieben Dezimalstellen, bei double-Zahlen ungefähr 15 Dezimalstellen. Operationen auf Gleitkommazahlen können die Genauigkeit weiter reduzieren. Betrachten Sie daher Gleitkommazahlen stets als Näherungen.

 

Beispiel: Rundungsfehler

Das Ergebnis der Division 10000000000.0 / 3.0 ist 3.3333333333333335E9.

Das Ergebnis der Multiplikation 100.0 * 4.35 ist 434.99999999999994.

Definition: Operator

  Ein Operator führt eine Funktion (wie Negation, Addition, Subtraktion, Multiplikation usw.) auf seinem oder seinen Operanden aus und liefert einen Wert zurück. Der Typ des Ergebniswerts wird durch den oder die Typen der Operanden bestimmt. Der Ergebniswert hängt vom Operator und von den Werten seiner Operanden ab. Die einstelligen Operatoren + und - bestimmen den positiven bzw. negativen Wert eines arithmetischen Ausdrucks. Die zweistelligen arithmetischen Operatoren: +, -, *, /, % stellen die Addition, Subtraktion, Multiplikation, ganzzahlige Division bzw. Restwertdivision (engl. modulo division) für zweistellige Operatoren dar. Diese Operatoren und ihre Bedeutungen sind zusammen mit einem Beispiel in Tab. 9.3-1 angegeben. [JLS: § 3.12, § 4.2.2, § 4.2.4]

 

Bemerkung: Operanden

Neben Literalen werden wir im Laufe des Kurses noch weitere Alternativen für Operanden in Ausdrücken kennen lernen. Operatoren, die auf mehr als einen Typen anwendbar sind, nennen wir überladen (engl. overloaded).

Definition: Arithmetischer Ausdruck

Ein arithmetischer Ausdruck (engl. arithmetic expression) wird gemäß folgender Regeln gebildet [JLS: § 15]: • Jede Variable eines numerischen Typs und jedes Literal eines numerischen Typs ist ein arithmetischer Ausdruck. • Wenn x ein arithmetischer Ausdruck ist, dann ist auch (x) ein arithmetischer Ausdruck. • Wenn x ein arithmetischer Ausdruck und eop ein einstelliger arithmetischer Operator ist, der vor dem Operanden steht, dann ist auch eop x ein arithmetischer Ausdruck. • Wenn x ein arithmetischer Ausdruck und eop ein einstelliger arithmetischer Operator ist, der nach dem Operanden steht, dann ist auch x eop ein arithmetischer Ausdruck. • Wenn x und y arithmetische Ausdrücke sind, und zop ein zweistelliger arithmetischer Operator, dann ist auch x zop y ein arithmetischer Ausdruck.

 

Begriff: Präzedenzregeln und Rangfolge von Operatoren

Wenn in einem Ausdruck mehrere Operatoren auftreten, wendet der Java- Übersetzer Präzedenzregeln an, um den Ausdruck auftretenden Operatoren auszuwerten, es sei denn, dass durch Klammern eine andere Reihenfolge vorgegeben wurde. Die Präzedenzregeln sind in Tab. 9.4-1 angegeben. (Die Tabelle enthält auch einige Operatoren, die wir erst in einem späteren Abschnitt besprechen werden.) Die Operatoren in der ersten Zeile haben den höchsten Rang, die in der letzten den niedrigsten. Operatoren gleichen Rangs werden von links nach rechts ausgewertet.

Definition: Auswertung arithmetischer Ausdrücke

Ein arithmetischer Ausdruck wird in einer strikten Reihenfolge gemäß folgender Regeln berechnet [JLS: § 15.7]:

• Ausdrücke, die in Klammern eingeschlossen sind, werden zuerst berechnet; im Falle von Verschachtelungen von innen nach außen. Klammerausdrücke erhalten somit die höchste Priorität bei der Auswertung.

• Zweistellige Operatoren werden von links nach rechts ausgewertet.

• Einstellige Operatoren werden von rechts nach links ausgewertet.

• Anschließend werden die Operatoren ihrem Vorrang entsprechend (s. Tab. 9.4- 1) ausgewertet.

• Wenn ein Ausdruck mehrere Operatoren des gleichen Vorranges enthält, werden die Operatoren von links nach rechts berechnet.

 

Beispiel: Auswertung arithmetischer Ausdrücke

Unter Berücksichtigung der Regeln in Definition wird der Ausdruck 17 * 2 % - (4 - 11) / (-3 + 5) in folgender Reihenfolge berechnet (gelesen von oben nach unten, der als Nächstes auszuwertende Unterausdruck ist unterstrichen): Auswertungsreihenfolge |Regel Auswertungsrichtung

17 * 2 % - (4 - 11) / (-3 + 5) | () von links nach rechts

-> 17 * 2 % - (- 7) / (-3 + 5) | () von links nach rechts

-> 17 * 2 % - (- 7) / 2 | - von rechts nach links

-> 17 * 2 % 7 / 2 | * von links nach rechts

-> 34 % 7 / 2 | % von links nach rechts

-> 6 / 2 | / von links nach rechts

-> 3 |

 

Begriff: Vergleichsoperatoren

==, !=, >, >=, <, <=, um zwei Werte gleichen oder verträglichen Typs miteinander zu vergleichen. Syntax und Bedeutung dieser Operatoren sind in Tab. 9.4-2 angegeben. [JLS: § 15.20, § 15.21]

Definition: Datentypboolean

Der Datentyp boolean umfasst die beiden Literaletrue und false sowie die folgenden booleschen Operatoren:

• den einstelligen Präfixoperator!, der eine logische Negation beschreibt,

• fünf zweistellige Operatoren &&, ||, &, | und ^, um logische Ausdrücke aufzubauen und

• zwei zweistellige Vergleichsoperatoren == und !=, die die logische Gleichheit bzw. Ungleichheit beschreiben. Alle Operatoren vom Typ boolean sind mit ihrer Bedeutung und Anwendungsbeispielen in Tab. 9.5-1 angegeben. [JLS: § 3.10.3, § 4.2.5, § 15.22.2, § 15.23, § 15.24]

 

Begriff: Datentyp Char

Java bietet den einfachen Datentyp char an, der alle Unicode-Zeichen umfasst und seine Werte vorzeichenlos speichert. Unicode ist ein internationales Codiersystem für Zeichen, das es ermöglicht, mehr als 65000 Zeichen darzustellen. UnicodeZeichen umfassen:

• Groß- und Kleinbuchstaben,

• Ziffern,

• Interpunktionszeichen,

• Sonderzeichen für Operatoren,

• Sonderzeichen und -buchstaben, die in verschiedenen Sprachen benutzt werden, und

• Steuerzeichen, die es ermöglichen, Aufteilung und Umbruch einer Computerausgabe zu bestimmen.

 

Definition: Zeichen (char)

Zeichen erscheinen zwischen einzelnen Anführungszeichen (’) wie: ’a’, ’B’, ’§’, oder ’-’. Steuerzeichen beginnen mit dem Rückwärts-Schrägstrich (engl. backslash) „\“. [JLS: § 3.10.4]

 

Beispiel: Steuerzeichen

Steuerzeichen Die Zeichen ’\n’, ’\t’ und ’\b’ stehen zum Beispiel für die Steuerzeichen „neue Zeile“, „Tabulatorsprung“ bzw. „Rücktaste“.

 

Definition: Variablen

Eine Variable besteht aus einem Namen und einem Wert. [JLS: § 4.12]

Definition: Variablenvereinbarung

Eine Variablenvereinbarung oder Variablendeklaration ist eine Anweisung, die einen Namen mit einem Datentyp verknüpft. Die einfachste Form einer Variablendeklaration verbindet einen Namen name mit einem Datentyp type. Jede Deklaration wird durch ein Semikolon abgeschlossen. [JLS: § 14.4]   type name;

 

Definition: Aufbau von Variablennamen

Namen von Variablen bestehen aus einer Folge von Zeichen. Als Zeichen sind alle Unicodezeichen zugelassen. Das erste Zeichen darf jedoch keine Ziffer (0-9) sein. Ein Variablenname darf nicht mit einem reservierten Schlüsselwort der Sprache Java (s. Tab. 10.1-1) oder den Literalen true, false und null übereinstimmen. (Es gelten noch einige weitere Einschränkungen, die wir im Rahmen des Kurses nicht näher erläutern.) [JLS: § 3.8]

 

Beispiel: Variablendeklaration

Der Ausdruck int menge; vereinbart eine Variable mit Namen menge vom Typ int, deren Wert noch unbestimmt ist

 

Bemerkung: Eindeutigkeit von Variablen

In jedem speziellen Umfeld darf eine Variable nur einmal vereinbart werden.

Beispiel: Ungültige Variablenvereinbarung

int breite;

double breite;

Die zweite Vereinbarung für den Namen breite ist unzulässig - unabhängig vom gewählten Typ.

 

Java-Konventionen: Variablennamen

Nach den Java-Konventionen beginnen Variablennamen mit einem Kleinbuchstaben. Namen sollten i. d. R. beschreibend und selbsterklärend sein. Namen, die mehr als ein Wort umfassen, sollten mit gemischten Buchstaben geschrieben werden, wobei Großbuchstaben für Wortanfänge in zusammengesetzten Namen verwendet werden: int anzahlBestellungen; boolean istPremiumkunde; Im Rahmen dieses Kurses verwenden wir für kurze Beispiele ohne Kontext gelegentlich Variablennamen aus einem einzelnen Zeichen. [JLS: § 6.8.7]

Definition: Zuweisung

Eine Zuweisung ist ein Ausdruck und zugleich eine Anweisung der Form:

varName = expression;

Wenn w(expression) den Wert des Ausdrucks expression bezeichnet, dann gilt unmittelbar nach der Ausführung der Zuweisung: w(varName = expression) == w(varName) == w(expression) [JLS: § 15.26, § 16]

 

Beispiel: Zuweisung

Sei x eine Variable vom Typ int. Die Zuweisung x = 42; hat zur Folge, dass der Variablen x der Wert 42 zugewiesen wird. Die Zuweisung x = 158 - 99; hat zur Folge, dass der Variablen x der Wert 59 zugewiesen wird, der sich als Ergebnis der Auswertung des Ausdrucks 158 - 99 ergibt. Die Zuweisung x = y; hat zur Folge, dass der Variablen x der Wert der Variablen y zugewiesen wird. Dies setzt voraus, dass die Variable y zuvor deklariert und bereits mit einem Wert belegt worden ist.

 

Beispiel: Auswertung und Zuweisung für dieselbe Variable

Die Variable x sei vom Typ int und habe den Wert 3. Dann wird durch die Anweisung:  

x = 2 + 3 * x;  

der Wert von x auf 11 geändert, weil die Auswertung des Ausdrucks 3 * x das Ergebnis 9 hat und 2 + 9 den Wert 11 ergibt.

 

Beispiel: Operator für verkürzte Schreibweisen von Zuweisungen

Seien

int x = 2;

int y = 5;

Der Ausdruck

x += 3;

ist die Abkürzung für den Ausdruck

x = x + 3;

Die Variable x nimmt als Ergebnis der Ausführung der Zuweisung den Wert 5 an. Der Ausdruck

y += 6 % 4;

steht abkürzend für

y = y + (6 % 4);

Nach Ausführung der Zuweisung hat y den Wert 7.

 

Bemerkung: Auswertungsreihenfolge

Beachten Sie, dass Operatoren für die verkürzte Schreibweise von Zuweisungen zuletzt ausgewertet werden. Wir können deshalb die verkürzte Schreibweise nicht in jedem Fall anwenden, wo rechts und links des Zuweisungsoperators dieselbe Variable auftritt. So lässt sich die Zuweisung als Beispiel x = 2 + 3 * x; nicht verkürzt schreiben, da ansonsten die Auswertungsreihenfolge verändert würde

 

Begriff: final

In Java kann eine Variable als endgültig oder final erklärt werden. Der Wert einer finalen Variablen kann, nachdem ihr zum ersten Mal ein Wert zugewiesen wurde, nicht mehr verändert werden. Um eine Variable als finale Variable zu deklarieren, wird das Schlüsselwort final dem Variablentyp vorangestellt. Der Wert einer finalen Variablen kann bei der Deklaration oder zu einem späteren Zeitpunkt der Programmausführung festgesetzt werden. Ein zweiter Versuch, einer finalen Variable einen Wert zuzuweisen, würde vom Übersetzer mit einer Fehlermeldung zurückgewiesen werden. [JLS: § 4.12.4]

Beispiel: Finale Variable final

  final double PI = 3.147;

Die oben stehende Deklaration führt eine finale Variable einund belegt sie mit dem Wert 3.147. Die nachstehende Folge von Anweisungen zeigt eine Situation, in der eine finale Variable zunächst deklariert, aber noch nicht initialisiert wird und erst in einer nachfolgenden Anweisung mit ihrem endgültigen Wert belegt wird:

final int BLANKFINAL;

...

BLANKFINAL = 0;

 

Java-Konventionen: Konstanten, final-Variablen

Namen von Konstanten sollten nur Großbuchstaben enthalten. Das UnterstrichSymbol „_“ kann verwendet werden, um unterschiedliche Wörter in einem Konstantennamen zu trennen.

Beispiel: Formel deklaration

a)

    double g = ...;    double t = ...;    double s;    s = 0.5 * g * t * t;

b)

    final double PI = 3.14;    double r = ...;    double a;    a = PI * r * r;

c)

    final double PI = 3.14;    double h = ...;    double r1 = ...;    double r2 = ...;    double v;    v = (PI * h) / 3 * (r1 * r1 + r1 * r2 + r2 * r2);

Begriff: implizite Typanpassung und Typerweiterung

Numerische Typen weisen gewisse Familienbeziehungen in dem Sinne auf, dass bestimmte Typen im Wertebereich anderer Typen enthalten sind. Die Werte vom Typ byte zum Beispiel sind im Wertebereich des Typs int enthalten. Da Java jedoch eine stark typisierte Sprache ist, muss jeder Wert mit einem Datentyp verbunden sein, so dass der byte-Wert 23 vom int-Wert 23 unterschieden wird.   Durch die Erweiterung (engl. widening) einer Zahl des Typs t wird diese in eine Zahl des Typs u umgewandelt. Der Wertebereich des Typ t muss eine Teilmenge des Wertebereichs des Typs u sein. Der Java-Übersetzer wendet solche Erweiterungsanpassungen automatisch an, falls eine Typverträglichkeit (engl. type compatibility) zwischen ungleichen Typen gegeben ist.

Definition: Typverträglichkeit

Ein Datentyp t ist verträglich mit einem anderen Datentyp u, abgekürzt:

t < u

falls die Werte des Typs t in Werte vom Typ u ausgeweitet werden können.

 

Beispiel: Typenverträglichkeit

Während der Auswertung des Ausdrucks

31.51 + 12

wird die Zahl 12 (vom Typ int) in die Zahl 12.0 vom Typ double umgewandelt. Als Ergebnis erhalten wir den Wert 43.51 vom Typ double.

 

Bemerkung: Typumwandlung

Beachten Sie, dass Typumwandlungen nur während der Auswertung eines Ausdrucks und nur auf Werten vorgenommen werden. Der Typ einer Variablen ändert sich hierbei nicht. Hätten wir im vorherigen Beispiel anstelle der Zahl 12 eine int-Variable a verwendet, deren aktueller Wert 12 ist, so wäre diese nach Auswertung des Ausdrucks 31.51 + a unverändert eine int-Variable mit dem Wert 12.

 

Étudier