Fichas
Programmierung
Fichas del conjunto (174)
- 1CompilerÜbersetzt Befehle in Maschinenbefehle
- 2COMPILER VORTEILE- Hohe Ausführungsgeschwindigkeit der Programme,
- Optimale Nutzung der Prozessoreigenschaften,
- Quellcode gut geschützt - 3Compiler Nachteile• Langwieriger Übersetzungsvorgang
• Programme auf Zielrechner spezialisiert
• Zusätzlicher Aufwand für Anpassungen
• Verschiedene Compiler notwendig (Mac, Windows) - 4Interpreter Vorteile• KEIN LANGWIERIGER ÜBERSETZUNGSVORGANG
• QUELLCODE DIREKT AUSFÜHRBAR, WENN INTERPRETER VERFÜGBAR - 5Interpreter Nachteile• Langsame Ausführung
• Quellcode lesbar
• Verschiedene Interpreter notwendig - 6InterpreterSchritt für Schritt unmittelbare Ausführung
- 7Java: Mischung Compiler Interpreter Vorteile• Nur ein Compiler
• Sprache ist Plattformunabhängig
• Quellcode teilweise geschützt - 8Java: Mischung Compiler Interpreter Nachteile• Langsame Ausführung
• Verschiedene Interpreter notwendig - 9Variable- Platzhalter für Wert eines bestimmten Typs
- Mit Adresse im Hauptspeicher assoziiert
z.B. x - 10Deklaration- Erwähnen der Variable
- Typfestlegung der Variable
dadurch wird festgelegt:
- Art der Operationen
- Speicherplatzbedarf
- Werte des Speicherinhalts
z.B. double x; - 11Zuweisung- Weist einer Variable einen Wert zu: mit Zuweisungsoperator "="
- x = Wert einer Zahl
int i = 10; i%10 ; i = 0;
Bedingungen verändern auch die Variable - 12DatentypBauplan für Werte von Variablen oder Konstanten, der festlegt:
• Wie die Darstellung der Werte im Speicher erfolgt
• Welche Operationen erlaubt sind
• Welche Standardwerte (Default-Werte) festgelegt sind - 13AusdruckKombination von Operanden und Operatoren als Vorschrift zur Berechnung eines Wertes
- Liefert immer Ergebnis - 14OperandKonstante: 1
Variable: x - 15Operator=
/
* - 16Anweisung- Kombination von Ausdrücken und Methoden zur Ausführung einer Aktion
- x = 5: Wertzuweisung
- Print(x): Ausgabeanweisung: Methodenaufruf „Drucke x“
() Argumentklammer - 17Anweisungs-Sequenz:mehrere Anweisungen, die nacheinander ausgeführt werden
- 18Anweisungs-Block:logisch zusammengefasste Anweisungen oder Programmteile, die als eine Anweisung aufgefasst werden können
- 19Bedingte Anweisung / Entscheidungsanweisung:Anweisung mit mehreren Alternativen
- 20Wiederholungsanweisung / Schleife:mehrfach ausgeführter Anweisungsteil
- 21Java-Programm ausführen1. Editieren:
Programmtext erstellen;
in einer Datei speichern: notepad Kehrwert.java
2. Übersetzen in Java-Bytecode: Compiler
javac Kehrwert.java -> dabei entsteht gleichnamige Datei mit Endung .class
3. Bytecode Ausführen mit Interpreter:
Java Kehrwert - 22C-Programm ausführen1. Editieren:
Programmtext erstellen;
in einer Datei speichern: nano kehrwert.c
2. Übersetzen in Maschinencode:
Programmtext mit Compiler in Maschinencode übersetzen
gcc –o kehrwert kehrwert.c //ausführbare Datei kehrwert entsteht
3. Ausführen:
./kehrwert - 23GrammatikDer Compiler übersetzt nur korrekte Java-Programme
Die Korrektheit wird anhand der Grammatik überprüft - 24Grammatik, festgelegt durch:1. Alphabet:
erlaubter Zeichenvorrat
2. Syntax:
zulässige Zeichenfolgen
3. Semantik:
Bedeutung & Bezeichnung zwischen Sprachelementen, die die Bedeutung des Programms festlegen - 25Der Compiler...1. Scannt zunächst die Zeichenfolge
2. Sucht Gruppen von Zeichen, indem nach Trennern gesucht wird
3. Zeichen zwischen zwei Trennern sind lexikalische Elemente (Token) Wort der Sprache
Trenner: Whitespace, Kommentare, Satzzeichen, Operatoren - 26Bezeichner: Lexikalische Elemente (Tokens)beliebig lange Zeichenfolge, beginnend mit Buchstaben
- 27Keywords: Lexikalische Elemente (Tokens)reservierte Wörter mit vordefinierter Bedeutung
-> können kein Bezeichner sein
Abstract, new, return, if, static, this, long - 28Literale: Lexikalische Elemente (Tokens)repräsentieren konstante Werte von Datentypen
Int, float, true, false, ‚char‘, „String“, Nullreferenz - 29Satzzeichen: Lexikalische Elemente (Tokens). , ; )( }{][
- 30Operatoren: Lexikalische Elemente (Tokens)(Trenner und Token)
+ && >>> - 318 Goldene Regeln:1. 1 Anweisung pro Zeile
2. Blöcke einrücken
3. } stehen alleine in ihrer Zeile & in der gleichen Spalte
4. switch-Blöcke gut formatiert
5. Klassennamen beginnen groß
6. Variablen und Methoden klein am Anfang
7. Konstanten komplett GROSS_GESCHRIEBEN public static final int GROSS = 10;
8. eine Return-Anweisung pro Funktion (Methode mit Rückgabetyp) - 32Einfache (elementare) Datentypen = Primitive Datentypen:o Boolean, nummerische ganzzahlige Typen (byte, short, int, long), Gleitkommatypen, char
- 33Referenztypen:o Klassen, Interfaces, Felder
- 34bytebyte 8 Bit -128 127 0
- 35shortshort 16 Bit -32768 32767 0
- 36intint 32 Bit
-2147483648 2147483647
0 - 37longlong 64 Bit -9223372036854775808 9223372036854775807
L 0L - 38floatfloat 32 Bit
1.4E-45 3.40282347E38
f 0.0F - 39doubledouble 64 Bit 1.7976931348623157E308 4.9E-324
1.3E7d 0.0D - 40booleanboolean 8 Bit
false true
false - 41charchar 16 Bit
0 6553
\u0000 - 42Typumwandlung Problemevon unten nach oben immer Datenverlust
int = long
int = float
long = double
float = double - 43Einstellige Operatorenmonadische, unäre
++
beziehen sich auf einen einzelnen Operanden - 44Zweistellige Operatorendyadische, binäre Operatoren
*, &&,< - 45Dreistellige Operatorentriadische, ternäre Operatoren
?: - 46Präfix-Notation:-a
- 47Postfix-Notation:n++
- 48Infix-Notation:a+b
oder
max = (a>b) ?a : b; - 49int i = 0; feld[++i + i++] = i++ + ++i;feld[2] = 2+4;
- 50true & truetrue
- 51false & truefalse
- 52true && falsefalse
- 53false && truefalse && egal
false - 54true | true= true
- 55false | true= true
- 56true || falsetrue || egal = true
- 57false || true= true
- 58true ^ false= true
- 59true ^ true= false
- 60false ^ true= true
- 61false ^ false= false
- 62a=-55; ~a; a=?a = -55;
~a = 54 - 63a << b:Schiebt die Bits in a um b Stellen nach links
i = 2<<3 ; 2*23= 16 - 64a>>b:Schiebt die Bits in a um b Stellen nach rechts
füllt mit dem höchsten Bit von a auf - 65a>>>b:o Schiebt die Bits in a um b Stellen nach rechts
o füllt mit 0-Bits auf - 66Auswertungsreihenfolge in AusdrückenEinstellig ++ vor multiplikativ * vor additiv + vor vergleichend < vor logisch & vor zuweisend =
++ * + > < &| = - 67Switch-Ausdruck verbotene Datentypenlong, float, double, boolean
- 68Switch- Werte sind konstant
- break & default (nur wenn Wert davor nicht vordefiniert) nicht vergessen - 69Switch Codeswitch (){
case : break;
case : break;
default: break; //optional
} - 70while-Schleife:o der Schleifenkörper wird solange ausgeführt, wie die Bedingung wahr ist
o ist die Bedingung falsch, wird die Schleife verlassen
o wenn man eine while-Schleife unterbrechen möchte, z.B. if(x==10) break; - 71do-while-Schleife:o Der Schleifenkörper wird einmal abgearbeitet, erst danach wird die Bedingung geprüft.
o Bei positivem Test, wird die Schleife durchlaufen, bei negativem beendet - 72Syntax Bestandteile der for schleife:for-Schleife
Syntax Bestandteile der for schleife:
for (Initialisierungsliste; Logischer Ausdruck; Update-Liste) {
Anweisung bzw. Block mit Anweisungsfolge
} - 73break- break: Wenn man einer Schleife raus möchte, z.B. if(x==10) break;
- 74continue:- continue: beendet den aktuellen Durchlauf der Schleife und man gelangt wieder in den Schleifenkopf (bei for wird dadurch iteriert )
- 75int [ ] iv; was wird hier gespeichert?dort wird die Adresse abgespeichert, in der der Inhalt vom Feld gespeichert wird.
Hier steht noch null drinnen - 76int [ ] iv = new int [3]; was wird hier gespeichert?- Im Speicher wird Platz für 3 Variablen gesucht
- Die Speicheradresse der 3 Variablen wird als Referenz im Array gespeichert - 77Gleichheit zwei einfacher Datentypenwenn gilt (b == a)
- 78Gleichheit zweier Referenzdatentypenwenn sie auf die gleiche Referenz zeigen (r==s)
- 79Dynamische Array Allokationdouble[ ] x = new double[3];
- 80Fachwörter dafür: double[] x = new double[3];[] = new [];
= Typ oder Klasse
= Feldlänge; Feldelemente von 0 bis -1 - 81Statische Array Allokationdouble[ ] y = {3.0, 6.0,9.0};
- 82Was passiert, wenn man die Array-Größe verändert?- die Referenz wird auf ein neues Array gelegt
- die Informationen des alten Arrays sind nicht mehr zugreifbar -> Garbage-Collector - 83Array Fehler• fehlende Initialisierung durch new oder Werte
• System.out.println (feldname); -> hier bekommt man die Speicheradresse
• Bei Schleifen immer feld.length -1
• Länge kann nur ganzzahlig sein
• Beim Initialisieren müssen immer die gleiche Anzahl von Klammern rechts und links stehen
• Bei mehrdimensionalen Feldern, müssen immer zuerst die ersten Dimensionen initialisiert werden
o int [] [] [] big = new int [] [] [2]; - 84Was passiert? int[ ] f1 = new int[2]; int[ ] f2 = new int[5]; f2 = f1;Referenzkopie:
- f2 hat nun die gleiche Referenz wie f1
- f2.length = 2
- Eine Veränderung von f2 bewirkt eine Veränderung von f1 - 85Flache Kopie:o Die erste Ebene einer Struktur wird dupliziert
o Die hinteren Referenzen werden kopiert
o Änderung der ersten Ebene von f2 wirkt sich nicht auf f1 aus
o f2 = f1.clone(); - 86Tiefe KopieTiefe Kopie = Clonen
o Die komplette Struktur wird dupliziert
o f2 ist völlig unabhängig von f1 - 87Klassen:- selbstdefinierte Baupläne für einen Datentyp
- zum Erzeugen von Objekten,
die aus mehreren Komponenten unterschiedlicher Typen entstehen
- sind Referenzdatentypen - 88Klassen SyntaxModifizierer-Folge class Bezeichner {
public class Datum {
Modifizierer-Folge kann entfallen
} - 89Wo können Klassen deklariert werden?- Innerhalb einer Klasse geschachtelt
o inner classes: non static
o nested classes: static
- Außerhalb einer Klasse, in eigenständiger Datei (bevorzugt)
- Außerhalb der Klasse, in gleicher Datei - 90Nachteile geschachtelter Klasseno unübersichtliche Dateistruktur
o größerer Programmtext
o Schwere Korrektur
-> lieber als Elementklasse/Top-Level-Klasse auslagern - 91Zugriffs-Modifizierer:+ public: Zugriff für alle Klassen
- private: Zugriff nur innerhalb der Klasse
# protected: Zugriff für vererbte Klassen + Paket
~ package: default „package-private“ Zugriff für alle Klassen des Pakets - 92Wie kann man private Variablen erfragen?public String getName() {
return this.name;
}
System.out.println(charly.getName()); - 93Instanzvariablen• stehen nicht in einer Methode, nur in einer Klasse
• beim Erzeugen eines Objekts dieser Klasse werden
• diese Variablen automatisch miterzeugt und können individuell belegt werden
Zugriff: . - 94Klassenvariablen:static: Kennzeichnung von Komponenten, die genau einmal erzeugt werden (Beim Laden der Klasse)
- Diese Komponenten haben für jedes Objekt der Klasse den selben Wert
Beispiel: Wechselkurs Euro in Dollar
Zugriff: . (auch über Objektreferenz möglich) - 95Konstruktor Aufgabeo Objekterzeugung mit Startwerten
• statt drei nur ein Befehl
o Initialisierungsarbeiten
o Das Bilden von Objekten
z.B. Belegen von Instanzvariablen mit den Werten vom Benutzer - 96Konstruktor Codepublic class Sudent {
String name;
Student (String name) {
this.name = name;
}}
Student charly = new Student("Charly"); - 97Instanzmethode:• Methode ohne static, die zu einem Objekt gehört (einer Klasseninstanz)
public String toString() {
return "Student " + this.name; }
System.out.println(charly.toString()); - 98Klassenmethoden:- statische Methoden haben nur Zugriff auf statische Variablen
(Instanzvariablen brauchen ein Objekt objekt.variablenname)
- Klassenvariablen brauchen kein Objekt - 99Prozeduren & FunktionenProzeduren: liefern keinen Rückgabewert
Funktionen liefern einen Rückgabewert - 100Methodeneigenschaften4 Eigenschaften
1. Unterprogramm
2. Über Methodenaufruf ausführbar
3. Können Parameter/Argumente übergeben bekommen
4. Können Rückgabewert zurückliefern - 101Bedeutung von Methoden3 Bedeutungen
1. Strukturieren das Programm
2. Reduzieren den Programmieraufwand
3. Leichtere Anpassbarkeit von Programmen - 102Vorteile von Methoden8 Vorteile von Methoden
1. Wiederverwendung von Code
2. Erleichtern das Testen des Programms
3. Jede Methode kann / sollte vor Gebrauch getestet werden
4. Können leichter geändert werden
5. Definierter Zugriff auf gekapselte Daten ist durch Methoden möglich (getter,setter)
6. Methoden unterstützen: Generalisierung, Vererbung, Kapselung, Polymorphie
7. Erleichtern Rekursion und damit Divide&Conquer und das Top-Down-Prinzip
(schrittweise Verfeinerung)
8. Unterstützung des Paradigmas der modularen Programmierung - 103Zusammenfassungen von Methoden6 Zusammenfassungen von Methoden
1. Zusammenfassung von Code unter einem Namen
2. Kann unter Verwendung von Parametern formuliert sein
3. Übergabe der Parameter ist Pass/Call-by-Value
4. Methoden -> Modularisierung: eigenständige Einheiten mit Teilaufgaben
5. Wiederverwendbarkeit: sollte nur eine einzelne, wohldefinierte Aufgabe haben
6. Wenn 5 nicht funktioniert, sollte man Methode in kleinere Stücke zerlegen - 104Divide & Conquer – VerfahrenDivide: Problem in möglichst viel gleichgroße Teilprobleme derselben Art wie das
Originalproblem aufspalten, die dann unabhängig gelöst werden
Conquer: Die Lösung der Teilprobleme werden zu einer Lösung des Gesamtproblems zusammengefügt - 105Top-Down-Prinzipin der modularen Programmierung Gang und Gäbe
- Bei jedem Entwurfsschritt wird festgelegt, was die Untermodule leisten sollen, nicht aber WIE sie es leisten sollen - 106Modulare ProgrammierungModul in der Praxis wird als ein in sich zusammenhängender Baustein aufgefasst, der folgende Eigenschaften besitzen sollte:
- Logisch oder funktional abgeschlossen
- Information hiding: wie er arbeitet oder implementiert ist, braucht außen nicht bekannt zu sein
- Klar definierte Schnittstellen nach außen
- Überschaubar und leicht testbar
- Sollte möglichst wenig andere Module verwenden - 107Softwaremodulabgeschlossene Programmeinheit aus
- Konstanten, Variablen, Datentypen, Operationen
die genau definierten Funktionen ausführen und bestimmte Eigenschaften besitzen - 108System ist modular, wennEs aus abgrenzbaren Einheiten zusammengesetzt ist
o Diese Einheiten einzeln ausgetauscht verändert oder hinzugefügt werden können
o Ohne, dass andere Teile des Systems beeinflusst werden - 109Call-by-Value / Pass-by-Value- Die Parameter werden nicht verändert
- Außer es ist eine Referenz Veränderungen möglich - 110MethodensyntaxModifizierer Ergebnistyp Bezeichner (Formale Parameter){
Methoden-Rumpf
Ausführungsende/Rückgabe des Wertes
} - 111Sichtbarkeit und Verdecken von VariablenInnerhalb von Methoden verdecken lokale Variablen und formale
Variablen (übergebene) die Klassenvariablen - 112Klassenmethode- static
main:
MeineKlasse.derenMethode(x); - 113Instanzmethodekein static
main:
MeineKlasse objName= new MeineKlasse();
objName.zuveränderndevariable=7; - 114Überladen- Variablen dürfen nicht denselben Namen haben
- Methoden dürfen gleichen Namen haben, aber brauchen unterschiedliche Signatur
- Unterscheidung der überladenen Methoden anhand der Signatur:
o Name der Methode
o Anzahl der Parameter
o Datentyp der Parameter
o Reihenfolge der Parameter
- Es wird immer die spezifischste aufgerufen - 115Iteration- Problem wird durch die wiederholte Anwendung desgleichen Verfahrensschritt gelöst
- Jeder Iterationsschritt liefert Ergebnisse, die im nächsten Schritt wiederverwendet werden
- Abbruch, wenn die Abbruchbedingung erfüllt wird - 116Rekursion- Problem wird durch Zurückführen auf einfacheres Problem gelöst
- greift auf sich selbst zurück
- Wichtig:
o Rekursionen müssen abbrechen
o ein oder mehrere Fälle müssen gesondert behandelt werden
- direkt: Im Rumpf der Methode m steht der Aufruf für Methode m
- indirekt: Im Rumpf der Methode m steht der Aufruf für Methode a, in Methode a steht der Aufruf für Methode b; in Methode b steht der Aufruf für Methode m
- Vorteil: elegant und kurz für viele Problemstellungen
- Nachteil: Manchmal ineffizient (Fibonacci) - 117Fakultätsberechnung iterativstatic long fak(long n){
long fa = 1;
for (long i = 1; i<=n; i++){
fa = fa * i;
return fa;
} - 118Fakultätsberechnung rekursivstatic long fak (long n){
if (n==0)
return 1;
else
return n * fak(n-1);
} - 1193 Motivationsgründe für OOP1. Grafische Benutzeroberflächen: Bedarf vervielfacht sicht
2. Kosten für Wartung sind zu hoch; dauert zu lange -> 70% der Gesamtkosten entstehen durch die Softwarewartung
3. Softwarekrise: Imageschaden - 120Paradigmen= Denkmuster/Philosophie, wie ein Programm auf dem Rechner verfasst werden sollte
• Funktionales Programmieren
o Gofer, Lisp
• Imperatives Programmieren
o C, Pascal, Basic
• Prozedurales Programmieren
o Funktionalität realisieren
o m(a) - 121Objektorientiertes Programmiereno a.m()
o Java, C++
o Modell des Systems realisieren
o Grundsatz: Spiegelt ein Teil der Welt wider; Objekte sollten daher abgebildet werden können
o Klasse dient als Bauplan (abstrakter Datentyp) und repräsentiert Eigenschaften eines Objekts
o Objekt einer Klasse erzeugen -> Instanziierung - 1224 Grundprinzipien1. Abstraktion
2. Kapselung
3. Vererbung
4. Polymorphismus
-> Entwicklungszeit sparen
-> Fehlerquellen reduzieren - 123Abstraktion/Generalisierung:• Zusammenfassung von Klassen mit gleichen Merkmalen zu Oberklasse
• ist-ein Säugetier
Ziele:
1. Hierarchie mit verschiedenen Beziehungen, wie in der Realität
-> Superklasse und Subklasse
2. Gemeinsame Eigenschaften einheitlich modellieren - 124Kapselung:• Daten und Methoden fest an ihr Objekt binden
• Leichtere Umstrukturierung der Klasse
• Trennung von Schnittstelle (nach außen sichtbare Methode) und interne Realisierung:
information hiding: Daten werden vor direkten Zugriffen geschützt
o private, public, protected…
o dennoch getter und setter - 125Vererbung• Weiterreichen von Eigenschaften an Subklassen (extends)
• Ziele:
1. gemeinsame Eigenschaften einheitlich modellieren
2. viel Programmcode wiederverwenden
• Wenn man nicht weiß, welchen Rückgabewert eine Oberklasse hat z.B. die Klasse Währung kann kein Geld zurückgeben und sie ist nicht konkretisiert wie € oder $
Übergang zum Polymorphismus
-> abstrakt: - 126abstrakte Klasseno Definition einer Schnittstelle:
Array eines Objekts der abstrakten Klasse ist füllbar mit den verschiedenen Subklassen
o es werden keine Methoden ausformuliert { } ; -> Objekte daraus zu bilden ist daher nicht möglich
erst in Subklasse wird durch Override die Methode mit Methodenrumpf überschrieben {}; - 127Polymorphismus:• Individualisieren -> Override ->
• Individuelle Ausprägung verschiedener Objektklassen unter der einheitlichen Schnittstelle der Superklasse
• Mutterklasse: Währung; Kindklasse: USDollar
• geht: Waehrung quarter = new USDollar(0.25);
• Ziele:
1. Besonderheiten bei Subklassen berücksichtigen
2. einheitliche Schnittstellen erzeugen - 128Typumwandlung:wenn es sich bei einem übergegebenen Objekt um einen bestimmten Typ handelt, dann soll etwas gemacht werden
public static void klaeff(Hund obj){
if(obj instanceof Bernhardiner){
Bernhardiner berni = (Bernhardiner) obj;
berni.jaul();
Variablenname = (Klasse) Objektname; - 129Warum Typecast• Elementtyp einer Collection kann nicht spezifiziert werden
• daher beim Zugriff immer Typecast zur Klasse
• Dadurch überprüft Compiler, ob mit den Typen alles in Ordnung ist - 130Variablen überschreibenPolymorphismus gilt nicht für Variablen (Verdeckung ist möglich)
Superklasse gewandelt = (Superklasse) sub;
gewandelt = Objekt sub + Instanz Superklasse
sout(gewandelt) = sub weil toString Methodenaufruf
sout(gewandelt.name) = Super weil Variablenname - 131Klasse ObjectObject – Mutter aller Klassen
• java.lang.Object
• steht über allen Klassen jede Klasse erbt automatisch z.B. toString-Methode, Hashtabelle - 132Interfaces implements• Warum? In Java kann nur von einer Klasse geerbt werden
• Beispiel: Firmenvermögen = Bargeld + Immobilien + Aktien: Wertgegenstände haben unterschiedliche Eigenschaften daher schwer in einer allgemeinen Klasse zu definieren -> Alle Objekte, die das Interface implementieren können als Wertgegenstände aufgefasst werden
• Unterschied zu abstrakten Klassen: Die Methoden im Interface müssen alle abstrakt sein ();
• Mehrfachvererbung erlaubt - 133Hilfs-/Hüllklasse String1. Alle Zeichenketten-Literale z.B. „abc“ sind Instanzen der Klasse String
2. Werte eines Strings sind konstant und können nicht mehr verändert werden
3. -> Änderung = neues Objekt - 134Verschiedene Möglichkeiten ein String zu erzeugenString s1 = "abc";
String s2 = new String("abc");
char[] a = {'a', 'b', 'c');
String s3 = new String(a);
byte[ ] b= {97,98,99);
String s4 = new String(b);
String s5 = new String (s4); - 1355. Methoden der Klasse String:o Zugriff auf einzelne Zeichen der Zeichenkette
indexOf(„n“); charAt(4);
o Vergleich von Zeichenketten compareTo; equals
o Suchen von Teil-Zeichenketten
substring(3); (ab dem 3. Buchstaben)
o Herausgreifen von Teil-Zeichenketten
replace(‚e‘,‘E‘);
o Wandeln von Groß- in Kleinbuchstaben und umgekehrt
toLowerCase(); toUpperCase();
o Aneinanderhängen mehrerer Strings + - 136StringBuffer (veränderbare Zeichenketten)• StringBuffer x = new StringBuffer();
• x = new StringBuffer(“start“).append(“s“).insert(4,“le“);
o start + s = starts
o 4. Stelle le einfügen star__ts
• x = „starlets“ - 137Hüllklassen(wrapper classes)• Listen sind z.B. nicht für primitive Datentypen erlaubt, daher verwende ich die Klasse davon: Integer, Float … und muss davon ein neues Objekt erstellen
o Integer x = new Integer(10); // Einpacken
o x.intValue(); 10 (int) // Auspacken - 138Hüllklassen(wrapper classes) Methoden• Double valueOf(String s){…}: String -> Double-Objekt
• double doubleValue() {…}: Double-Objekt-> double-Wert
• double parseDouble (String s) {…}: String -> double-Wert
• double x = Double.valueOf(„12.345“).doubleValue(); entspricht
• double x =Double.parseDouble(„12.345“); - 139C++ KlassenKlassen:
• können verwendet werden
• Methoden können auch außerhalb einer Klasse auftreten - 140C++ Vorwärtsdeklaration:• man kann keine Variable aufrufen, die zuvor nicht deklariert worden ist zyklische Aufrufe sind unmöglich
-> Methodenordnung ist schwierig
• Lösung: Header-Datei pro Klasse zum Deklarieren der Variablen - 141C++ Header-DateienHeader-Dateien (.h)
enthalten:
• Deklarationen von Funktion, Datenstrukturen und Klassen
• Attributen und Methoden
• private / public Modifizierer können für ganze Blöcke verwendet werden - 142C++ Source-DateienSource-Dateien (.cpp)
• Implementierung der Methoden
• Können auf Variablen des Headers zugreifen
• :: zeigt Zugehörigkeit zur Klasse - 143C++ Objekte:Objekte:
• können direkt deklariert und angesprochen werden
• Objekte werden wie einfache Datentypen behandelt
• Variablen von Objekten sind keine Referenzen oder Pointer, sondern wirklich das Objekt selbst
• Ansprechen durch Punktnotation
• -> Wenn man einen Pointer auf ein Objekt oder struct hat
• ptr -> y == (*ptr).y; - 144C++ Speicherverwaltung• Stack:
o Objekt-Deklaration
o Objekte sind nur für Code-Block instanziiert
• Heap:
o Allokation mit malloc() und free()
• new:
o Allokiert Speicher
o führt Konstruktor aus
o liefert Pointer zurück
• delete:
o Deallokiert Speicher des Objekts
o führt Destruktor aus
o räumt Speicher im Heap auf - 145Enumeration• gewisse Menge an aufgelisteten KONSTANTEN Werten
• Klassentyp
• Jeder deklarierte Wert ist eine eigene Instanz der enum-Klasse
o public, static, final
• Vergleich durch equals und ==
• Enums sind sortierbar - 146Enum Vorteile1. Liefert Typsicherheit zur Compile-Zeit
2. Lesbare Namen für ihre Zustände
3. Robust (hinzufügen etc. von Konstanten erfordert Rekompilierung)
4. Können zu Collections hinzugefügt werden, weil es Objekte sind
5. Können auch Attribute und Methoden enthalten, weil es Klassen sind - 147Enum Methoden• String toString()
o gibt Name des Enum-Objektes als Konstante zurück
• boolean equals (Object other)
o vergleicht die enum-Konstanten
• int compareTo (E o)
o Ordnung zum sortieren -1, 0, 1
• static enum-type valueOf (String s)
o gibt das Enum Objekt mit dem Namen s zurück
• static enum-type[] values()
o gibt ein Array der Enum-Objekte zurück - 148Array Eigenschafteno Eigenschaften:
• Lineare Folge fester Größe
• length-Attribut
• enthält primitive Datentypen oder Referenzen auf Objekte
• Nur Objekte eines Typs - 149Array Vorteile• sehr effizient
• Typüberprüfung zur Compile-Zeit - 150Array Nachteile• Feste Größe
• Nur ein Typ
• Wenig Methoden
Wegen der Nachteile gibt es Container - 151Was sind Container?= Objekt, das eine Sammlung von Referenzen auf andere Objekte enthält
- 152Zwei Konzepte von Containern• Collection Interface
o Enthält einzelne Objekte
o ( Set, ArrayList, LinkedList)
o Die Verwendung generischer Interfaces erleichtert den Austausch von z.B. ArrayList zu LinkedList
• Map: Interface
o Schlüssel-Wert Paare
o Ein Schlüssel darf nur einmal vorkommen
o HashMap, HashTable - 153Container Eigenschaften1. Können Verschiedene Typen beinhalten
2. Keine feste Größe -> automatische Größenanpassung
3. Enthalten nur Referenzen auf Objekte
4. Keine primitiven Typen - 154Container Methoden• add (Object o)
• remove (int index)
• size()
• get(int index)
• put(Object key, Object value) //Map - 155Iteratoren:• besser als get, da eine get Iteration immer von vorne anfängt
• boolean hasNext()
• Object next()
Iterator e = songs.iterator();
return ((Song) e.next()),toString(); - 156Iteratoren Nachteile• Weniger effizient als Arrays
• manuelle Typumwandlung notwendig, da keine Typüberprüfung - 157GenericsGenerische Programmierung
= Programmierung von Klassen und Methoden mit parametrisierten Typen
• Werkzeug zur Erstellung wiederverwendbarer objektorientierter Typen und Bibliotheken
• Generische Methoden können in normalen und generischen Klassen definiert werden
• beim Aufruf kann der Typ spezifiziert werden - 158Vorteile Generics• Mehr Sicherheit und Lesbarkeit
• Keine sichtbaren Typecasts
• für allgemeine Datenstrukturen nützlich
• Frühe Compile-Zeit Erkennung von Typverletzung
(Kein String einfügen in ArrayList) - 159Dokumentation• Code ist für den Menschen geschrieben, daher sollte man ihn auch nach längerer Zeit noch verstehen
• javadoc: Code und Dokumentation in einer Datei
• @param, @return erzeugt HTML Dokumentation - 160Compilerfehler:o z.B. System.outprint Punkt vergessen Fehlermeldung + Interpretieren nicht möglich
o ausführen ist nicht möglich, man merkt aber schnell, wenn etwas falsch ist - 161Exceptions• Exception = Ausnahmesituation
• hilft beim Verstehen von Problemen, statt es nur abstürzen zu lassen
• Abfangen (catching) einer Exception durch try and catch
• Beim Abfangen auf Hierarchie achten - 162Exceptions Hierarchie1. Throwable
2. Exception + Error
3. RuntimeException
4. NullPointerException - 163Skriptsprachen• Python
• Keine Kompilierung
• Nur Zeile für Zeile interpretieren
• Sobald ein Fehler auftaucht, wird an dieser Stelle abgebrochen - 164Iterator – Erweiterung• kann auch durch Doppelpunktnotation ersetzt werden
• for each: Für jeden String song aus songs
for (String song:songs) - 165Programmierparadigmen- Imperativ
- Deklarativ
- Prozedural
- Objektorientiert
- Ereignisorientiert
- Logisch
- Funktional - 166Imperativ1. Abfolge von Befehlen, die Computer in Reihenfolge auszuführen hat
2. Compiler übersetzt Befehle in Maschinenbefehle
o vergleichbar mit Möbelbau-Anleitung
o Sprachen: Java, C, Assembler - 167Deklarativ1. Nicht der Weg zum Ziel, sondern WAS? ist das Ziel
2. Menge von Definitionen, Relationen und Regeln
3. Befehle sind aus Relationen und Regeln extrahierbar
o Vergleichbar mit mathematischen - 168Prozedurale ProgrammierungImperative Programmiersprachen beinhalten prozeduralen Ansatz
1. Anweisungsfolgen in Teilfolgen (Prozeduren) zerlegen
2. Prozeduren sind nach Außen durch Schnittstellen definiert
3. Prozeduren können sich untereinander aufrufen
o z.B.: Fortan, C, COBOL - 169Objektorientierte Programmierung1. Objekte instanziieren Objekt-Templates (Klassen)
2. Objekte haben Eigenschaften (Attribute) und können Aktionen (Methoden) ausführen
3. Objekte zur Modularisierung vom Code
4. Methoden oft nach prozeduralen Paradigmen definiert
o Java, C#, C++ - 170Ereignisorientierte Programmierung1. kein linearer Vorgang (parallel)
2. Ereignisbehandlungsroutinen werden ausgeführt, wenn ein bestimmtes Ereignis auftritt
3. Routinen können andere Ereignisse auslösen
o gut mit objektorientierten Sprachen vereinbar
o Typische Anwendung bei GUI-Programmierung
o Sprachen: Visual Basic, Pascal - 171Logische Programmierung1. beruht auf mathematischer Logik
2. Statt Anweisungsfolgen, Menge von Axiomen
3. Lösung wird aus Fakten und Regeln hergeleitet
o deklarative Programmiersprache
o Was gilt, nicht wie
o Sprache: Prolog - 172Funktionale Programmierung1. deklarativ: ausschließlich mathematische Funktionen
2. besteht aus Funktionsaufrufen
3. Verbietet: Variablen, Schleifen, Objekte, Anweisungsfolgen
4. Rekursion ist wichtig
o Künstliche Intelligenz
o Sprachen: Haskell, Erlang, Scala - 173C Ein Student mit id Und name (vor- + nachname)struct student{
int id;
struct{char vorname [20];
char nachname[20];
} name;
}; - 174C Stundent mit id oder name (vor- + nachname)union student {
int id;
struct{
char vorname [20];
char nachname [20];
} name;
};
Información
- Descripción
- Einführung in die Programmierung
- Creado por
- So Li
- Visitas
- 81
- Etiquetas
- Valoración