Einführung in die Informatik Zusammenfassung WS 2015/16 PDF

Title Einführung in die Informatik Zusammenfassung WS 2015/16
Author Yannis Ha
Course Einführung in die Informatik
Institution Technische Universität Berlin
Pages 8
File Size 328.7 KB
File Type PDF
Total Downloads 615
Total Views 700

Summary

Klausurvorbereitung InfTechMain Methode:  public static void main(String[] args) {...}  Startpunkt des ProgrammsVariablen und Datentypen:  Primitive Datentypen: o Typ Wertebereich grobe Interpretation Werte o boolean true, false Wahrheitswerte true,false o char alle Unicode Zeichen Zeichen auf Ta...


Description

Klausurvorbereitung InfTech Main Methode:  public static void main(String[] args) {...}  Startpunkt des Programms Variablen und Datentypen:  Primitive Datentypen: o Typ Wertebereich grobe Interpretation o boolean true, false Wahrheitswerte o char alle Unicode Zeichen Zeichen auf Tastatur o int -231, ... , +231 – 1 ganze Zahlen o double ≈ ±4, 9 · 10−324 ... ± 1, 7 · 10+308 reelle Zahlen  spezieller Typ “String“: o String Zeichenkette aus Unicode-Zeichen Wörter, Sätze Literale:  Sind KONSTANTEN der Datentypen welche als Teil des Codes gelten  Haben einen Typ (Literal 3 hat Typ int, Literal true hat Typ boolean)

Werte true,false ’A’, ’d’, ’#’ ... 7, -5, 0, 356, ... 2.6, 5.0, -1.125, ... “Hallo!“

Deklaration, Initialisierung und Zuweisung einer Variablen:  Deklaration: Stück Arbeitsspeicher wird reserviert und mit einem Namen versehen  Initialisierung: allererste Zuweisung eines Wertes  Zuweisung: einer existierenden Variable wird ein neuer Wert zugewiesen  Deklaration und Initialisierung können in einem Schritt erfolgen Regeln für Variablenbezeichner: • Alle 26 Buchstaben, Unterstrich, ’$’, alle Ziffern (0-9) • Dürfen NICHT mit Zahl beginnen • Individuelle Länge • Dürfen KEINE Schlüsselwörter sein • Java unterscheidet zw. Groß- und Kleinschreibung • Jeder Name darf nur EINMAL verwendet werden pro Programm Operatoren: • Reihenfolge der O.:



() Ausdrücke in Klammern zuerst +Vorzeichen (plus, minus) * / % Multiplikation, Division, Modulo +Addition, Subtraktion = Zuweisung (Zugewiesener Wert ist das Ergebnis (NICHT das math. “=“)) Zuweisung erfolgt von recht nach links x = x + 1 (zuerst wird x +1 brechnet, dann wird der Wert dem x zugeordnet)

Typumwandlung – Cast: • Expliziter cast:

• •

double d = 3.9; int i = (int)d;

Impliziter cast (von int nach double):

int i = 3; double d = i; Bei cast von double nach int bzw. bei Division zweischer int werden etwaige Nachkommastellen abgeschnitten

Eingabe: • •

Wir benutzen zur Verfügung gestellte Terminal.java Beispiele: Terminal.readString(); Terminal.askDouble(„Double eingeben: „);

Logische und Vergleichsoperatoren: • Vergleichsoperatoren: o Relationale Operatoren, besitzen Booleschen Rückgabewert, Vergleich zw. 2 Variablen oder Literale o Gleich (x==y), ungleich (x!=y), größer (x>y), größer gleich (x>=y), kleiner (x i = i – 1; For-Schleifen: for( Startwert; Bedingung; update-Regel) { Anweisung; }

Arrays: • •





Mehrere Messwerte in Messreihe wird mir einzelnen Variablen schnell unübersichtlich Deklaration & Erzeugung: o Variablentyp[] Variablenname; o Arrays sind Referenzdatentypen o Nur ein Verweis auf den Arbeitsspeicher da nicht klar, wie viele Werte das Array annehmen wird o Unspezifischer Verweis Verweis aus “nichts“: double[] temperaturen = null; o 2 Schritte: (i) Festlegen der Größe & Erzeugen von fester Anzahl hintereinander liegender Boxen im Arbeitsspeicher, auf die der Variablenname verweist (ii) Füllen der Boxen mit Werten. o Um etwas an der Stelle eines Verweises zu erzeugen benutzt man new o Variablenname = new Variablentyp[Laenge]; (Bsp.: temperaturen = new double[7];) o Deklarieren und Erzeugen geht auch in einer Zeile:  Variablentyp[] Variablenname = new Variablentyp[Laenge]; Zuweisung & Zugriff der Elemente: o Array[Offset]  Offset bedeutet, dass das erste Element bei 0 und das Letzte bei Laenge – 1 liegt o Abfrage der Länge: int laenge; laenge = temperaturen. length; o Werte anlegen, ablegen etc.: int Mittwoch = 2; //da Offset (0 = Mo, 1 = Di, 2 = Mi, ...) temperaturen[0] = 8.2; temperaturen[1] = 7.2; temperaturen[mittwoch] = 11.7; o Wertzuweisung bei der Deklaration in vereinfachter Form:  int[] a = {1, 3, 7, 9, 12, 0, 14};  Länge wird durch Anzahl der Elemente in den geschweiften Klammern bestimmt o Arrays sind Referenzdatentypen, d.h. beim Kopieren wird nur die Referenz kopiert, nicht die Daten (a und b verweisen dann auf ein und dasselbe Datenpaket, ändere ich einen Wert in a wird er auch in b geändert) o Arrays kann man gut mit einer For-Schleife füllen oder auch ausgeben 2D-Arrays: o Mehrdimensionale Arrays z.B. zur Darstellung von Tabellen o int[][] array2 = {{1, 2, 3, 5}, {9, 8, 7, 6, 5}};

Kapseln mithilfe von Methoden: • Fluss des Programms: main-Methode ist der Einstiegspunkt, von dort aus werden andere Methoden aufgerufen • Vorteile des Kapselns in Methoden: o Code muss nur einmal geschrieben werden und kann auf viele Variablen angewendet werden o Wenn Code falsch  nur an einer Stelle korrigieren o Code wird übersichtlicher Statische Methoden: • Syntax: static ( ) { ... return ; } • Jede statische Methode hat: o Sichtbarkeit (public, private, ...) o Schlüsselwort static zeigt, dass auf Methode zugegriffen werden kann o Einen Rückgabewerttyp o Einen Bezeichner, damit man sie aufrufen kann o Parameter(liste) o Einen Körper (alles zw. den geschweiften Klammern) o Ggf. eine Rückgabeaufforderung return o Bekanntestes Beispiel: public static void main (String[] args) {..} • Parameter: o Setzen sich immer aus Parametertyp und einem Parameternamen zusammen o Methoden können beliebige Anzahl haben, auch keine Parameter sind möglich o Methoden bilden dabei abgeschlossene Blöcke, auf Übergabeparameter kann nur innerhalb der jeweiligen Methode zugegriffen werden, nicht in anderen Methoden) • Rückgabe: o Von aufgerufener Methode werden nur Werte zurückgegeben, die durch return übertragen werden o Rückgabetyp muss mit der Variable übereinstimmen o Es kann immer nur einer, aber jeder uns bekannte Datentyp zurückgegeben werden (auch Arrays) o Methodendurchlauf endet bei return, d.h. Code der unter dem return steht wird (außer er kann durch else erreicht werden) nie ausgeführt o Der zurückgegebene Datentyp kann mit einer Variable des Datentyps zugewiesen werden o void zeigt an, dass die Methode keinen Rückgabewert hat • Namen: o Es gelten dieselben Regeln wie für Variablennamen o Methodennamen können mehrfach verwendet werden, wenn sich die Methoden in den Parametern unterscheiden • Lokale Variablen und Parameter: o Jede Methode hat eigene Variablen, diese können nur innerhalb verwendet werden o In mehreren Methoden können daher Variablen mit dem gleichen Namen verwendet werden o Die Namen der Übergabeparameter müssen nicht mit den Namen der übergebenen Parameter bei Methodenaufruf übereinstimmen • Aufruf einer Methode: o boolean bool = hat22(nums); // dem Wert bool wird die Rückgabe der Methode hat22 mit dem sdsdag übergebene Wert nums zugewiesen • Ordnen in Klassen: o Zur Übersichtlichkeit lagern wir Methoden in thematische Klassen aus o Aufruf: ... . ( ... ); •

Rekursion: o Rekursiver Methodenaufruf: Methode ruft sich selbst wieder auf o Rekursive Methodenaufrufe brauchen:  Einen Grundzustand (Abbruchbedingung) bei dem sie aufhören  Rekursiven Funktionsaufruf o Auch indirekt: f1 ruft f2 auf, f2 ruft wieder f1 auf

Objekte & Klassen: • Klassen: o Klassen dienen als Datentypen (Datentypen legen Mengen (von mögl. Elementen) fest) o Klassen liefern Bauplan einer Variable o Entwurf einer Klasse setzt Kontext voraus, der die Charakteristika der Klasse bestimmt o Beispiele: Personen-Klasse sollte Geschlecht, Gewicht und Größe enthalten o Vereint vereint Attribute, die alle zu einem Objekt gehören o Weitere Elemente sind Konstruktoren und Methoden • Objekte: o Initialisierte Variablen eines Klassendatentyps o Objekt ist Instanz einer Klasse, d.h. ein konkretes Exemplar der Klasse, gebaut nach deren Bauplan o Objekte haben:  Identität Speicherplatz, Behälter, auf den verwiesen wird  Attribute Eigenschaften  Verhalten Spezifiziert durch Methoden • Mehrere Klassen: o Ein Programm kann aus mehreren Java-Klassen bestehen, jede Klasse ist in eigener Datei o Ein Klasse ist die Hauptklasse, sie besitzt eine main-Methode o Kompilieren du Ausführen mit mehreren Klassen:  Alle Klassen eines Programms im gleichen Verzeichnis  Kompiliere die Hauptklasse, den Rest kompiliert Java automatisch mit  Führe die Hauptklasse aus Arrays von Objekten: • Beispiel: Viele Personen kann man in einem Array von Objekten speichern Objekte und Referenzen: • Objekte sind Referenzdatentypen vom Typ Klasse • Referenzen in Objekten sind auch nur Referenzen Sichtbarkeit und Zugriffsmodifikatoren: • Gültigkeit innerhalb einer Klasse: o Gültigkeitsbereich (Scope) eines Bezeichners ist derjenige Bereich des Codes, in dem durch ihn auf die Variable zugegriffen werden kann o Im Scope einer Variable kann man ihren Wert lesen/ ändern o Strenge Hierarchie der Scopes innerhalb einer Klasse: • •



Unterste Stufe: Deklariert innerhalb eines Blocks, bezeichnet als „lokale Variable“ Mittlere Stufe: Deklariert auf Methodenebene, bezeichnet als „lokale Variable“, wenn im Methodenkopf auch „Paramter“ Obere Stufe: Deklariert auf Klassenebene, bezeichnet als „Parameter“

Zugriffsmodifikatoren • Sichtbarkeit von Klassen sowie deren Attribute und Methoden wird mithilfe von Zugriffsmodifikatoren realisiert • Sichtbarkeit spielt v.a. in Softwareprojekten eine große Rolle • 4 versch. Zugriffsmodifikatoren: o private: nur innerhalb derselben Klasse sichtbar o (default) kein Schlüsselwort nur innerhalb des Packages (aktuell wie public) o protected: innerhalb desselben Packages überall sichtbar, von außerhalb nur für Klassen, die von dieser Klasse erben o public: von überall sichtbar • Generell sollte man alles mit minimal möglicher Sichtbarkeit versehen Objektmethoden • Klassen können auch Methoden enthalten • Methoden können Zustand eines Objekts ändern (Attributswerte ändern) • Besitzen ebenfalls Übergabeparameter und einen Rückgabetyp • Deklaration erfolgt wie bei statischen Methoden, aber ohne das Schlüsselwort static • Aufruf erfolgt mit Objektname und nur nach Erzeugung eines Objekts Spezielle Methoden – Getter & Setter • Methoden, die nur dazu dienen, den Wert eines Attributs auszulesen, werden Getter genannt. o Getter bekommen in der Regel einen Namen, der mit "get" beginnt o Getter haben immer einen Rückgabewert und bekommen in der Regel keine Parameter übergeben



Methoden, die nur dazu dienen, den Wert einem Attribut einen neuen Wert zuzuweisen, werden Setter genannt o Setter bekommen i.d.R. einen Namen, der mit "set" beginnt o Setter haben i.d.R. void (also keinen Rückgabewert), aber bekommen immer Parameter übergeben

Objekt- vs. statische Methoden • statische Methoden werden verwendet, wenn eigenständige Funktion ausgeführt werden soll • Objektmethoden werden verwendet, wenn mit dem konkreten Objekt interagiert werden soll • Wenn eine statische Methode oder eine statische Variable in einer Klasse vorkommt, wird am Anfang des Programmverlaufs eine einzige Klasseninstanz mit allen statische Methoden und Variablen angelegt. Auf diese kann dann mit KlassenName.methodenName() oder KlassenName.variablenName zugegriffen werden • Objektmethoden können nur für explizit instanziierte Objekte aufgerufen werden, nicht direkt dem Klassennamen angehängt sondern dem Objektnamen

Konstruktoren • Wir wollen den Attributen bei der Objekterzeugung andere als die Standartwerte zuweisen o Standardwerte: Primitive Datentypen: boolean  false char  '\u0000' int 0 double  0.0 Referenzdatentypen (immer null): int[]  null String  null Person  null • Beispielsweise soll Kontonummer "00000" und bei Name "Max Mustermann" eingetragen werden, und weil man immer ein Startguthaben bekommt, soll Betrag auf "30" gesetzt werden • Für solche Wertzuweisungen bei der Erzeugung gibt es Konstruktoren • Konstruktoren: o sind spezielle Methoden zur Initialisierung von Attributen o werden bei Erzeugung von Objekten mit new aufgerufen o haben denselben Namen wie die Klasse! o haben (fast) immer Sichtbarkeit public o besitzen keinen Rückgabewert (also auch kein void!) • existiert kein Konstruktor wird default-Konstruktor benutzt, dieser setzt alle Attribute auf Standardwerte (siehe oben) • sobald min. ein Konstruktor explizit implementiert wird, steht default-Konstruktor nicht mehr zur Verfügung

Parametrisierter Konstruktor • es gibt auch parameterlose Konstruktoren, sind aber nicht sehr sinnvoll, da man nicht direkt bei der Erzeugung z.B. neue Kontonummer und neuen Namen eingeben kann • Werte werden direkt bei Objekterzeugung übergeben und den Attributen zugewiesen • Unterscheiden sich Konstruktoren in Typ und Anzahl der Parameter, so kann Klasse mehrere Konstruktoren besitzen

Vererbung • • • •

Grundlegende Idee: wir haben ähnliche Objekte, die in gewissen Eigenschaften gleich sind, in anderen aber massiv anders Vererbung erlaubt es, gemeinsame Attribute und Methoden den spezialisierten Klassen zur Verfügung zu stellen, wobei diese dann nur einmal geschrieben werden müssen Man spricht bei den generellen Klassen (unter die spezielle Klassen untergeordnet werden) von Superklassen Superklassen & Subklassen:

Wenn diese sichtbar sind (nicht private), können Objekte der Sub-Klasse die Methoden und Attribute der Super-Klasse verwenden o Methoden können überlagert werden o Attribute und Methoden können überschrieben werden (selber Name & selbe Anzahl und Typen in gleicher Reihenfolge von Parametern) o Vererbte, überschriebene Methoden können nie eine kleinere Sichtbarkeit haben als deren Super-Klassen Methoden o extends  Schlüsselwort, wenn Klasse von anderer erben soll public class Subclass extends Superclass { ... } o Alle Klassen die kein extends enthalten, stammen von der Klasse Object ab o super  auf überschriebene Methoden & Attribute kann jedoch noch zugegriffen werden, wenn man die Referenz auf die Superklasse verwendet o super weist große Ähnlichkeit mit der Selbstreferenz this bei verschatteten Attributen auf ... super.methodenName(Werte ...); Konstruktoren o Der Konstruktor der Superklasse wird nicht vererbt (er hätte ja auch einen anderen Namen als die Klasse) o Die super-Referenz bezieht sich auf die ganze Superklasse und kann damit auch verwendet werden, um den Konstruktor aufzurufen o explizit wird der (hier parameterlose) Konstruktor der Super-Klasse aufgerufen mit: super(); o Wichtig: Dieser Befehl ist der erste im Sub-Konstruktor o Wenn in der Super-Klasse nur der default-Konstruktor (oder ein Konstruktor ohne Parameter) verwendet wurde, wird dieser automatisch als erste Methode aufgerufen o Wenn der Super-Konstruktor Parameter enthält und augerufen werden soll, muss er immer explizit als erster Methodenaufruf im Sub-Konstruktor aufgerufen werden o





Polymorphie o Typ der Objekte:  Segelschiff ist Schiff, also Objekt, auch Containerschiff ist Schiff und Objekt, aber kein Segelschiff  Also ist auch nicht jedes Schiff ein Segelschiff  Das gilt auch für Datentypen in Java. Wenn also ein Objekt einer Klasse erzeugt worden ist, die Superklassen hat, dann hat sie auch zusätzlich deren Typ  instanceof  Mit diesem Befehl kann Typ eines Objekts festgelegt werden

o

o

Polymorphie ist die Eigenschaft von Objektvariablen der Superklasse, Objekte von Subklassen aufnehmen zu können Schiff schiff = new Containerschiff("Aida",5000,false); Wir können in allgemeine Variablen speziellere Objekte packen, aber nicht anders herum, da nicht alle Methoden und Attribute, die in der Klasse Containerschiff angelegt worden sind, in Schiff vorkommen

o o

Für schiff werden wir mit (schiff instanceof Containerschiff) wieder true erhalten Jedoch geht der Compiler davon aus, dass es sich um eine Variable der Superklasse handelt und diese hat keine Methoden der Subklasse, deshalb muss man dann schiff nach Containerschiff casten, wenn man die Methoden der Subklasse aufrufen möchte

Abstrakte Methoden & Klassen • Es kommt des Öfteren vor, dass die Superklasse der Subklasse eine Methode vorschreiben soll, wobei für diese jedoch keine allgemeingültige Realisierung besteht • Bsp.: Wir haben eine SchachFigur-Klasse, die die Superklasse für die Klassen Laeufer und Turm ist o Alle Schachfiguren können sich auf dem Schachbrett bewegen, jedoch unterscheiden sich ihre Bwegungen o Für die SchachFigur-Klasse gibt es keine generelle Methode bewegen • Abstrakte Klassen erlauben es Methoden vorzugeben, die von allen Subklassen realisiert werden müssen • Klassen die abstrakte Methoden enthalten sind immer abstrakt, das heißt auch, dass kein Objekt von ihnen erzeugt werden kann, da die Methoden in der abstrakten Klasse ja nicht realisierbar sind • Abstrakte Methodendeklaration o Methoden und Klassen werden als abstrakt durch das Schlüsselwort abstract gekennzeichnet public abstract void methode(), public abtract double[] methode2(double b, String a); o Man sieht, sie haben keine Methodenrümpfe o Der Methodenrumpf wird in einer konkreten Methode, die die abstrakte Methode (in der Vererbungshierarchie) überschreibt, implementiert o Abstrakte Methoden werden solange als abstrakt vererbt, bis sie in einer Subklasse implementiert werden, anschließend werden sie als konkrete Methode weitervererbt o sie sind i. d. R. nicht private o Abs. Methodendekl. dienen als Vertrag der Superklasse mit den Subklassen o Damit eine Klasse konkret ist, muss dieser Vertrag für jede Methode erfüllt sein o Das Erfüllen des Vertrages erfolgt durch das Implementieren der Methode in der Vererbungshierarchie von der die konkreten Subklassen erben oder in der konkreten Subklasse selbst • Abstrakte Klassen o Klassen, die abstrakte Methoden enthalten, sind immer abstrakt o Solange nicht alle Verträge von Subklassen erfüllt worden sind (nicht alle abstrakten Methoden implementiert sind) bleiben die Klassen abstrakt o Abstrakte Klassen enthalten deklarierte aber nicht implementierte Methoden, daher fehlen konkrete Information zum Erzeugen von Objekten: A. Klassen können keine Objekte erzeugen o Abstrakte Klassen können konkrete Methoden (mit Methodenrumpf) enthalten, diese werden dann konkret weitervererbt Interfaces • Interfaces definieren Schnittstellen in Form von Methoden, um versch. Objekte miteinander zu verknüpfen (oft vgl.) • Sie ermöglichen es, allgemeingültige Algorithmen zu schreiben • Interfaces enthalten ausschließlich Methodendeklarationen (ohne Implementierung) • Deklarieren eines Interfaces: o Ein Interface, das es generell erlauben soll, von Objekten anhand einer später implementierten Größenrelation das größte zu finden, sieht so aus: public interface Vergleichbar { public boolean istGroesser(Vergleichbar anderes); } o Interfaces werden wie Klassen in gleichnamige separate Dateien geschrieben o Sichtbarkeit der Methoden des Interfaces = der des Interfaces o Die implementierte Klasse erbt alle Methodendeklarationen aus dem Interface • Implementieren des Interfaces: o ein Interface wird mit implements der Klasse zugefügt. Der Kopf der Form-Klassen, wenn diese das Interface implementieren soll, sieht so aus: public class Rechteck implements Vergleichbar { o Alle abstrakten Methoden (also alle Methoden) des Interfaces müssen wieder implementiert werden o Erst wenn alle Methoden implementiert sind, kann man von der Klasse Objekte erzeugen o Im Gegensatz zur Vererbung kann eine Klasse mehrere Interfaces implementieren, dieses werden einfach durch Kommata getrennt...


Similar Free PDFs