60
252-0027 Einführung in die Programmierung I 12:00 Finale Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved.

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

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

§ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

§ 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

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

§ 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

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

§ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

§ 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

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

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

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

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

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

81

“There’snosenseinbeingprecisewhenyoudon’tevenknowwhatyou’retalkingabout.”

J.vonNeumann

Aber…erwareinStudentanderETH(Chemie)bevoresdasDepartementInformatikgab!