252-0027 einführungin dieprogrammierungi 12:00 finale · 2016-12-23 · prüfungsstoff...
TRANSCRIPT
![Page 1: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/1.jpg)
252-0027Einführung indie Programmierung I
12:00FinaleThomasR.Gross
DepartmentInformatikETHZürichCopyright(c)Pearson2013andThomasGross2016Allrightsreserved.
![Page 2: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/2.jpg)
Uebersicht
§ 12.1Prüfungsstoff (allgemein)
§ 12.2Javaüber die"Einführung"hinaus
§ 12.3Realität undAbstraktion
2
![Page 3: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/3.jpg)
Prüfungsstoff
§ Probeprüfung kommt.
§ Fragen undAntworten am16.1.17(10:15,hier)
§ Prüfung am30.1.17(9:00,Hönggerberg Campus)§ Prüfung aufDeutsch§ Antworten aufEnglisch akzeptiert§ [NEU]Wörterbuch erlaubt
3
![Page 4: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/4.jpg)
Prüfungsstoff
§ Verständnis,nicht Details
§ Beispiel:"checked"Exceptionund"unchecked"Exception§ Nicht:alle Exceptions
§ Graphische Benutzeroberfläche§ Nicht Prüfungsstoff
4
![Page 5: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/5.jpg)
§ Heutige Themen sind nicht Prüfungsstoff (sofern nicht schonvorher behandelt)
5
![Page 6: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/6.jpg)
Abstraktion undADT
§ Zentrales Thema für dieEntwicklung vonSoftwareSystemen
§ [20.Dez.16]:"Wenn Klienten dieDatenabstraktionrespektieren (oder respektierenmüssen)"§ Programmiersprache stellt verschiedene Mittel zur Verfügung den
Klienten zu zwingen,dieDatenabstraktion zu respektieren§ private Keywordhatten wir schon kennen gelernt – aber nicht die
ganze Geschichte
8
![Page 7: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/7.jpg)
JavaPackages
§ Sub-packages können ähnliche Namen haben sind aber nicht wirklich ineiner Packageenthalten§ java.awt enthält nicht java.awt.event
§ Gebrauch vonJavaPackages:§ Weg zusammengehörende Klassenzu bündeln§ Schafft einen Raum für Namen (`’namespace”)umNameskonflikte zu
vermeiden§ Kontrolliert Zugriff bzw bietet Schutzvor unerwünschten Zugriffen§ Erlaubt Gliederung eines grossen SoftwareProjektes
§ Paket (“package”):Eine Ansammlung vonzusammengehörenden Klassen.§ Kann auch Unter-Pakete (sub-packages)
”enthalten”.
![Page 8: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/8.jpg)
PackagesundDateienverzeichnisse
§ Package ßà Verzeichnis (“directory”,“folder”)
§ Klasse ßà Datei
§ Eine Klasse mit Namen D inder Packagea.b.c sollte indieser Datei gespeichert sein:
a/b/c/D.class
§ (relativ zur RootIhres Projektes)§ Das"root"Verzeichnis der PackageHierarchie wird vorgeben
durch denclasspath oder ist dasVerzeichnis vondem ausjava aufgerufen wurde.
![Page 9: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/9.jpg)
Classpath
§ classpath:DerOrt(Directory)bzw.dieOrte indem/denenJava“class”Filessucht .§ .classFile:übersetzte .javaFile
§ Der ClassPathkann beinhalten:§ Dasaktuelle "workingdirectory"indem javac /javaaufgerufen wurde
§ Bzw.EclipsedieUebersetzung durchführt§ Andere Verzeichnisse§ JARArchive(JAR:JavaArchive)§ URLs§ ...
![Page 10: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/10.jpg)
Classpath
§ Konfiguriert inEclipse
§ Kann explizit gesetzt werden wenn manJavavonder Shellausstartet:§ java -cp /home/eprog/libs:/foo/bar/jbl MyClass
12
![Page 11: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/11.jpg)
Deklaration einer Packagepackage packageName;
public class className { ... }
Beispiel:package pacman.model;public class Ghost extends Sprite {
...}
§ FilesGhost.java undSprite.java sollten im Folderpacman/model sein.
![Page 12: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/12.jpg)
Importeiner Packageimport packageName.*; // all classes
Beispiel:package pacman.gui;import pacman.model.*;
public class PacManGui {...Ghost blinky = new Ghost();
}
![Page 13: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/13.jpg)
Importeiner Package§ PacManGuimussdie“model”Packageimportieren umdie
Klassenverwenden zu können§ PacManGuimussim Folderpacman.gui liegen
15
![Page 14: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/14.jpg)
Importeiner Klasseimport packageName.className; // one class
Beispiel:package pacman.gui;
import pacman.model.Ghost;
public class PacManGui {
Ghost blinky = new Ghost();
}
![Page 15: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/15.jpg)
ImportvonKlassen vs.Importeiner Package
§ (Klassen)Namenskonflikte werden unterschiedlich behandelt:
§ Importeiner einzelnen Klasse gibt der Klasse einen hohenStellenwert:§ Mit import foo.* gilt:eine Klasse mit dem selben Nameindieser
Packageüberschreibt (verdeckt)dieimportierte Klasse§ Mit import foo.className gilt:dieKlasse mit dem selben Namen
verdeckt nicht dieimportierte Klasse
17
![Page 16: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/16.jpg)
Arbeiten mit PackagesAuch ohne import können wir uns aufeine Klasse beziehen.
packageName.className
Beispiel:java.util.Scanner console =
new java.util.Scanner(java.lang.System.in);
![Page 17: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/17.jpg)
Arbeiten mit Packages
§ Sie können sich aufKlassen(Typen)anderer Packagesbeziehen (ohne import)wenn Sie denvollständigen Namenangeben.
§ Diesist manchmal praktisch wenn es Namenskonflikte gibt:§ Beispiel:java.awt.List undjava.util.List§ Odereine Klasse importieren (unddann für dieandere den
vollständigen Namen verwenden)
20
![Page 18: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/18.jpg)
Arbeiten mit Packages
§ DiePackageAngabe mussimmer als erstes ineiner .javaDateierscheinen§ Vor derersten Klasse/dem ersten Interface§ Nur einmal proDatei
§ Waspassiert wenn wir (wie bisher)keine Packagedeklarieren?
21
![Page 19: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/19.jpg)
DiedefaultPackage
§ Dateien (d.h.,dieKlassen/InterfacesinderDatei),diekeinePackageDeklaration enthalten,gehören ineine namenlosedefaultPackage.
§ Klassen inder defaultPackage:§ Können nicht importiert werden§ Können nicht vonanderen Klasseninanderen Packagesverwendet
werden.
§ Kein Problemfür einfache Programme
![Page 20: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/20.jpg)
Der defaultImport
§ DiePackagejava.lang wird implizit vonallen Packages(unddamit Programmen)importiert.import java.lang.*;
23
![Page 21: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/21.jpg)
PackagesundSichtbarkeit
§ InJavagibt es diefolgenden Zugriffsmodifizierer (“accessmodifiers”):§ public :Sichtbar für alle anderen Klassen(nach Import).§ private :Sichtbar nur indieser Klasse (undggf.ineingeschlossenen
Klassen/Typen – später mehr).§ protected :Sichtbar nur indieser Klasse,allen Unterklassen der
Klasse,undallen anderen Klassen/Typen dieindieser Packagedeklariert sind.
§ default(package):Sichtbar indieser Klasse undallen anderenKlassen/Typen dieindieser Packagedeklariert sind.
![Page 22: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/22.jpg)
PackagesundSichtbarkeit
§ Damit ein Attribut/eine Methode diedefaultSichtbarkeit hat,brauchen Sie keinen Modifizierer anzugeben.package pacman.model;public class Sprite {
int points; // default: visible to pacman.model.*String name; // default: visible to pacman.model.*
}
public class Xray {int direction; // default: visible in default packageString name; // default: visible in default package
}25
![Page 23: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/23.jpg)
DasIntList Interface// Represents a list of int(egers).public interface IntList {
public void add(int value);public void add(int index, int value);public int get(int index);public int indexOf(int value);public boolean isEmpty();public void remove(int index);public void set(int index, int value);public int size();
}
public class ArrayIntList implements IntList { ...public class LinkedIntList implements IntList { ...
![Page 24: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/24.jpg)
Verschiedene Klassen
§ Wir haben diese beiden Klassenimplementiert,dieListen(An)sammlungen realisierten:§ ArrayIntList
§ LinkedIntList
index 0 1 2value 4
2-317
frontdata next42
data next-3
data next17
![Page 25: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/25.jpg)
Probleme§ Wir wollen Instanzen dieser Klassen im Klienten gleich behandeln§ DieListenkönnen nur intWerte speichern,nicht beliebige Objekte§ Einige Methoden sind inbeiden Klassen durch identischen Code
implementiert (Redundanz).§ DieVariante derLinkedIntList musste noch diezusätzliche
Klasse derIntNodes deklarieren.
28
![Page 26: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/26.jpg)
Gemeinsamer Code
§ Einige derMethoden können für beide Klassendurch denselben Codeimplementiert werden (d.h.sind identisch für dieArray-basierte als auch dieKetten-basierte Klasse)
§ add(value)§ contains
§ isEmpty
![Page 27: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/27.jpg)
Auszug aus ArrayIntList undLinkedIntList
public void add(int value) {add(size(), value);
}
public boolean contains(int value) {return indexOf(value) >= 0;
}
public boolean isEmpty() {return size() == 0;
}
30
![Page 28: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/28.jpg)
§ Sollten wir unser Interfaceineine Klasse umwandeln?Warum/Warum nicht?
§ Können wir aufandere Weisediese (häufige)Situationbehandeln?
31
![Page 29: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/29.jpg)
Abstrakte Klassen (“AbstractClasses”)
§ abstractclass: Eine spezielle Klasse dieeine Mischformzwischen InterfaceundKlasse ist.§ Definiert einen Superclass-Typ mit Methodendeklarationen (wie ein
Interface)undvollständigen Methoden (mit Rumpf/Body)(wie eineKlasse).
§ Wie Interfaceskönnen abstrakte Klassennicht instanziert werden(d.h.der new Operatorkann nicht Objekte diesesTyps generieren).
![Page 30: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/30.jpg)
§ Wasgehört ineine abstrakte Klasse?§ Implementationgemeinsamen Zustandes (Attribute)oder
gemeinsamen Verhaltens dasvonallen Subclassesgeerbt werden soll(abstrakte Klassen sind Superclasses/Eltern inder Ableitungs-hierarchie)
§ Schreiben Verhalten vor,dass Subklasses implementieren müssen(Rolleeines Interfaces)
33
![Page 31: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/31.jpg)
Abstract ClassSyntax// declaring an abstract class
public abstract class name {
...
// declaring an abstract method
// (any subclass must implement it)
public abstract type name(parameters);
}
![Page 32: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/32.jpg)
§ Eine Klasse kann als abstract deklariert werden auch wennsie keine abstrakten Methoden enhält.
§ Esist erlaubt,Variable(aber nicht Objekte)desabstraktenTyps zu deklarieren§ Wie bei Interfaces
§ Eine Erweiterung (mittels extends)ist auch wieder abstrakt(undmussals abstract deklariert sein)sofern nicht alleabstrakten Methoden implementiert sind.
35
![Page 33: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/33.jpg)
AbstractClassesvs.Interfaces
§ Normale Klassendiebehaupten,ein Interfacezuimplementieren,müssen alleMethoden desInterfacesimplementieren:public class Empty implements IntList {} // error
§ Abstractclasses können behaupten,ein Interfacezuimplementieren ohne Codefür dieMethoden zu enthalten –dieSubclassesmüssen dieMethoden implementieren.
public abstract class Empty implements IntList {} // ok
public class Child extends Empty {} // error
![Page 34: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/34.jpg)
Uebung
§ Definieren sie eine geignete abstrakte Klasse für dieListen.
37
![Page 35: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/35.jpg)
Eine abstrakte ListenKlasse// Superclass with common code for a list of integers.public abstract class AbstractIntList implements IntList {
public void add(int value) {add(size(), value);
}
public boolean contains(int value) {return indexOf(value) >= 0;
}
public boolean isEmpty() {return size() == 0;
}}
public class ArrayIntList extends AbstractIntList { …public class LinkedIntList extends AbstractIntList { ...
![Page 36: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/36.jpg)
Abstrakte Klassen vs. Interfaces
§ Warum gibt es inJavaabstrakte Klassen undInterfaces?§ Eine abstrakte Klasse kann alles machen wasein Interfacekann,und
mehr.§ Warum sollten wir jeInterfacesverwenden?
§ Antwort:Java erlaubt nur Einfachvererbung.§ Können nur eine Superclassverwenden§ Können viele Interfacesimplementieren
§ Interfaceserlauben es uns,eine Klasse Teil einer Hierarchie seinzu lassen(wichtig für Polymorphismus)ohne dass wir Vererbung einschränken.
![Page 37: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/37.jpg)
Abstrakte Klassen vs.Interfaces
§ Auch Interfaceserlauben es,für Methoden eineImplementationanzugeben§ Aberwir können keine Variabledeklarieren (gleich welchen Typs)
§ Kein Thema für einfaches Beispiel
42
![Page 38: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/38.jpg)
Probleme§ Wir wollen Instanzen dieser Klassen im Klienten gleich behandeln§ DieListenkönnen nur intWerte speichern,nicht beliebige Objekte§ Einige Methoden sind inbeiden Klassen durch identischen Code
implementiert (Redundanz).§ DieVariante derLinkedIntList musste noch diezusätzliche
Klasse derIntNodes deklarieren.
45
![Page 39: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/39.jpg)
Innerclasses
§ Innere Klasse (“innerclass”):Eine Klasse dieinnerhalb eineranderen Klasse definiert ist.§ Können als static oder non-staticKlassendefiniert werden§ Wir betrachten hier nur dieeinfachen (Standard)non-static
(geschachtelt,"nested")inneren Klassen
§ Warum:§ Innere Klassensind nicht sichtbar für andere Klassen(Abkapselung)§ Innere Objekte können dieAttributedesäusseren Objekts
lesen/modifizieren
![Page 40: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/40.jpg)
Inner ClassSyntax// outer (enclosing) classpublic class outerName {
...
// inner (nested) classprivate class innerName {
...
}
}
![Page 41: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/41.jpg)
Innere Klassen§ Nur der Codeindieser Datei kann dieinnere Klasse sehen oder
instanzieren.
§ Jedes innere Objekt ist mit dem äusseren Objekt,welchesesinstanzierte,verbunden undkann sodieAttribute/Methoden desäusseren Objektes lesen/modifizieren/aufrufen.§ Wenn nötig kann dasäussere Objekt über dieReferenzvariable
OuterClassName.this erreicht werden.
§ Uebung:Aendern Sie dieLinkedIntList sodass eine innereKlasse verwendet wird. 49
![Page 42: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/42.jpg)
Generics undinnere Klassenpublic class Outer<T> {
private class Inner<T> {} // incorrect
private class Inner {} // correct}
§ Wenn dieäussere Klasse einen Typparameter deklariert dann kann dieserTypparameter auch vondeninneren Klassenverwendet werden.
§ Innere Klassensollten nicht denTypparameter erneut deklarieren (dieswürde einen 2.Typparameter deklarieren der den1.verdeckt).
![Page 43: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/43.jpg)
EvaluationvonAusdrücken
§ Zwei Konzepte§ Precedence(Präzedenz)a+b*c➝ a+(b*c)§ Associativity(Assoziativität)
§ Links--assoziativ:a+b+c➝ (a+b)+c§ Rechts—assoziativ:x=y=z➝ (x=(y=z))
§ Dazu:Klammern umexplizit Reihenfolge anzugeben
55
![Page 44: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/44.jpg)
EvaluationvonAusdrücken
§ Reihenfolge bestimmt durch§ Klammern§ Associativity(Assoziativität)§ Precedence(Präzedenz)
§ Ausdruck wird vonlinksnach rechts evaluiert
§ Jeder Operandwird evaluiert§ Assoziativität entscheidet worauf sich Operatorbezieht§ Operatormit höchster Präzedenz wird zuerst ausgeführt
56
![Page 45: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/45.jpg)
58
![Page 46: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/46.jpg)
59
P:Precedence,A:Associativity(L:left,R:right)fromhighestprecedencetolowestfrom:D.Flanagan,JavainaNutshell,O'Reilly,5thEdition,2005
![Page 47: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/47.jpg)
Realität undAbstraktion
§ Gegebenint i;
Gilti*i >= 0 ?
public class Weird {public static void main (String[] args) {
int i = 40000;int j = 50000;System.out.println(i*i); // 1600000000System.out.println(j*j); // -1794967296
}}
62
![Page 48: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/48.jpg)
Endliche Darstellung(en)
§ Eine int Variablewird durch 32Bitsdargestellt§ Allgemein:XhatwBitsxw-1 xw-2 ..x1 x0
§ Wir hatten früher schon gesehen wie für Xdiese AbbildungBit➜Integer (Integer(X))realisiert ist:
63
Integer(X) = xi ⋅2i
i=0
w−1
∑
![Page 49: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/49.jpg)
Endliche Darstellung
§ Mit dieser Abbildung können wir mit wBitsZahlen inBereichvon0…2w – 1darstellen§ ZahlenohneVorzeichen("unsigned")§ SeitJava8auchinJava...
§ DieAbbildungnennenwirdaherB2U(Binary-to-Unsigned)
64
B2U(X ) = xi ⋅2i
i=0
w−1
∑
![Page 50: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/50.jpg)
NegativeZahlen
§ Wenn wir wBitszur Verfügung haben dann ist eine praktischeDarstellung dasZweierkomplement (Two'sComplement)§ B2T– Binary-to-Two'scomplement
§ Bitw-1ist dasVorzeichenbit (daher auch "signed")§ 0:Zahl positiv§ 1:Zahl negativ
65
B2T (X ) = −xw−1 ⋅2w−1 + xi ⋅2
i
i=0
w−2
∑
![Page 51: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/51.jpg)
Positive&negativeZahlen
§ Umuns ein Bild zu verschaffenarbeiten wir mit w==4§ UnsignedBereich:0…15§ SignedBereich:-8...7
§ (– 2w-1)…(2w-1 – 1)
§ Addition/Subtraktion könneneffizient implementiert werden§ Identische Hardwarefür signedund
unsigned 66
X B2T(X)B2U(X)0000 00001 10010 20011 30100 40101 50110 60111 7
–88–79–610–511–412–313–214–115
1000 1001 1010 1011 1100 1101 1110 1111
01234567
![Page 52: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/52.jpg)
Positive&negativeZahlen
§ Beispiel Addition:2+42:00104:01006:0110
§ Waspassiert wenn unser Ergebnis nicht dargestellt werdenkann:§ Wrap-around
68
![Page 53: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/53.jpg)
Positive&negativeZahlen
§ Beispiel Addition:5+45:01014:0100-7:1001
71
Wäre 9wenn wir keinVorzeichen hätten (alsomitunsignedZahlen arbeiteten)
Aberwir arbeiten mitZahlenmit Vorzeichenarbeiten (signed)
![Page 54: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/54.jpg)
§ Daher gilt(für 4-BitAddition):7+1==-8int bigInt = Integer.MAX_VALUE;
System.out.println(bigInt); // 2147483647
System.out.println(bigInt+1); // -2147483648
§ aber ….(Java8!)sInt = Integer.toUnsignedString(bigInt);
System.out.println(sInt); // 2147483648
73
![Page 55: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/55.jpg)
Warum ist daswichtig?§ Für int gilt(leider)nicht
§ intA > intB ⇒ (intA+1) > (intB+1)
§ Müssen sicherstellen dass unser Programm nur Werte imBereich von(– 2w-1)…(2w-1 – 1)produziert.
74
![Page 56: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/56.jpg)
Dasist aber nicht alles …
§ Giltdenn wenigstens (a + b) + c == a + (b + c) ?§ Für int ja.
75
![Page 57: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/57.jpg)
Realität undAbstraktion
§ Gegebendouble d, e, f;
Gilt(d + e) + f == d + ( e + f) ?
public class Weird {public static void main (String[] args) {
double d = 1e308;
System.out.println( (d + -d) + 3.14); // 3.14
System.out.println(d + (-d + 3.14)); // 0.0}
} 77
![Page 58: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/58.jpg)
Dasist aber nicht alles …
§ Giltdenn wenigstens (a + b) + c == a + (b + c) ?§ Für int/long ja.§ Für float/double nein.
78
![Page 59: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/59.jpg)
Vorsicht
§ wenn Ihr Programm rechnet
§ Mehr Bits(long,double vsfloat)helfen nur begrenzt
79
![Page 60: 252-0027 Einführungin dieProgrammierungI 12:00 Finale · 2016-12-23 · Prüfungsstoff §Probeprüfungkommt. §Fragenund Antwortenam 16. 1. 17 (10:15, hier) §Prüfungam 30. 1. 17](https://reader033.vdocuments.pub/reader033/viewer/2022042419/5f361b228e68140189333b53/html5/thumbnails/60.jpg)
81
“There’snosenseinbeingprecisewhenyoudon’tevenknowwhatyou’retalkingabout.”
J.vonNeumann
Aber…erwareinStudentanderETH(Chemie)bevoresdasDepartementInformatikgab!