Tutoraufgabe 1 (Werkzeugkasten):

Größe: px
Ab Seite anzeigen:

Download "Tutoraufgabe 1 (Werkzeugkasten):"

Transkript

1 Prof. aa Dr. J. Giesl S. Dollase, M. Hark, D. Korzeniewski Tutoraufgabe 1 (Werkzeugkasten): In dieser Aufgabe wird eine Klasse implementiert, die eine Werkzeugkiste verwaltet. In einer Werkzeugkiste können Materialien (Schrauben, Nieten, etc.), einfache Werkzeuge (Zangen, Schraubendreher, etc.) und Elektrowerkzeuge (Bohrmaschinen, Schleifgerät, etc.) sein. Die meisten Materialien sind sehr klein. Deswegen können alle Materialien zusammen in einem einzelnen Fach der Werkzeugkiste untergebracht werden. Elektrowerkzeuge hingegen sind sehr groß. Jedes Elektrowerkzeug nimmt daher immer je drei benachbarte Fächer ein. Beachten Sie in allen Teilaufgaben die Prinzipien der Datenkapselung. a) Schreiben Sie einen Aufzählungstyp Tool für die drei Arten von Werkzeugen: PowerTool, SimpleTool und Materials. b) Schreiben Sie eine Klasse Toolbox, die vier Attribute hat: ein Array von Tool-Objekten als Fächer der Werkzeugkiste, eine ganzzahlige Variable für die freie Kapazität der Werkzeugkiste, ein String als Name der Werkzeugkiste und eine Konstante, die angibt, wie viele Fächer ein Elektrowerkzeug belegt. Schreiben Sie außerdem zwei Konstruktoren: Ein Konstruktor, der eine Kapazität übergeben bekommt und eine leere Werkzeugkiste mit entsprechender Kapazität erstellt. Ein Konstruktor, der eine beliebige Anzahl Tool-Objekte übergeben bekommt und eine Werkzeugkiste erstellt, die genau diese Werkzeuge enthält und keine zusätzlichen freien Fächer hat. Freie Fächer entstehen hier also nur, falls auch null als Tool-Objekt übergeben wird. Die Einschränkung, dass Elektrowerkzeuge immer drei Fächer benötigen, kann hier ignoriert werden, denn bei idealer Platzeinteilung kann man oft viel mehr auf gleichem Raum unterbringen. Beide Konstruktoren bekommen außerdem einen String übergeben, der als Name der Werkzeugkiste gesetzt wird. c) Schreiben Sie Methoden, um die freie Kapazität zu lesen, um den Namen der Kiste zu lesen und um das Werkzeug in Fach i zu lesen. Falls i keine gültige Fachnummer ist, soll null zurückgegeben werden. Schreiben Sie außerdem eine Methode, um den Namen zu ändern. d) Schreiben Sie eine Hilfsmethode checkroomforpowertool, die den ersten Index i ermittelt, an dem ein Elektrowerkzeug in die Werkzeugkiste passen würde. Als Rückgabewert hat die Methode einen boolean, der angibt, ob drei freie Plätze in Folge gefunden werden konnten. Als Eingabe bekommt die Methode ein Objekt der Klasse Wrapper, die auf der Webseite zur Verfügung steht. Sie speichert einen int-wert und bietet Getter und Setter Methoden für diesen int-wert. Als Seiteneffekt soll dieses Wrapper-Objekt so geändert werden, dass es den gefundenen Index i speichert. e) Diskutieren Sie die Sichtbarkeit der Methode checkroomforpowertool. f) Schreiben Sie eine Methode addtool, die ein Werkzeug zu einer Werkzeugkiste hinzufügt. Elektrowerkzeuge werden an die erste Stelle gespeichert, an der drei Fächer in Folge frei sind. Das Objekt wird in jedes dieser drei Fächer geschrieben. Normale Werkzeuge werden an den ersten freien Platz geschrieben. Materialien werden nur dann neu hinzugefügt, wenn kein Fach mit Materialien gefunden wurde, bevor ein freies Fach gefunden wurde. Die Methode sollte außerdem die Kapazität aktualisieren. g) Schreiben Sie ausführliche javadoc-kommentare für die gesamte Klasse Toolbox. Lösung: Listing 1: Toolbox.java 1 /** 2 * Objekte dieser Klasse repraesentieren eine beschriftete Werkzeugkiste. 3 * 4 * In den Faechern koennen je ein einfaches Werkzeug, eine grosse Menge Materialien 5 * oder, in drei nebeneinander liegenden Faechern, ein Elektrowerkzeug untergebracht werden. 1

2 6 */ 7 public class Toolbox { 8 /** 9 * Anzahl Faecher, die ein Elektrowerkzeug belegt. 10 */ 11 public static final int PowerToolSize = 3; /** 14 * Array, das die Faecher der Werkzeugkiste repraesentiert. 15 */ 16 private Tool [] tools ; 17 /** 18 * Anzahl freier Faecher in der Werkzeugkiste. 19 */ 20 private int capacity ; 21 /** 22 * Beschriftung der Werkzeugkiste. 23 */ 24 private String name ; /** 27 * Erstelle eine neue, leere Werkzeugkiste mit einer bestimmten Anzahl Faecher 28 name Beschriftung der Kiste 29 capacity Anzahl Faecher fuer die Kiste 30 */ 31 public Toolbox ( String name, int capacity ) { 32 this. name = name ; 33 this. capacity = capacity ; 34 this. tools = new Tool [ capacity ]; /** 37 * Erstelle eine neue Werkzeugkiste mit festgelegtem Inhalt. 38 name Beschriftung der Kiste 39 tools Werkzeuge, die in der Kiste enthalten sein sollen. 40 */ 41 public Toolbox ( String name, Tool... tools ) { 42 this. name = name ; 43 this. capacity = 0; 44 this. tools = tools ; 45 for ( Tool tool : tools ) { 46 if( tool == null ) { 47 this. capacity += 1; /** 53 * Lese das Werkzeug im i- ten Fach. 54 i Nummer des Fachs 55 Das Werkzeug im i- ten Fach 56 */ 57 public Tool gettool ( int i) { 58 if (0 <= i && i < this. tools. length ) { 59 return this. tools [i]; 60 else { 61 return null ; /** 66 * Lese Anzahl freier Faecher 67 Anzahl freier Faecher 68 */ 69 public int getcapacity () { 70 return this. capacity ; /** 74 * Lese Beschriftung 75 Beschriftung der Werkzeugkiste 76 */ 77 public String getname () { 78 return this. name ; /** 81 * Setze Beschriftung 82 name Neue Beschriftung 83 */ 84 public void setname ( String name ) { 85 this. name = name ; /** 89 * Finde den ersten moeglichen Platz fuer ein Elektrowerkzeug. 2

3 90 index Ausgabeparameter fuer den freien Platz. Falls Rueckgabewert 91 * false ist, dann ist dieser Wert ungueltig. 92 ob ein gueltiger Index gefunden wurde. 93 */ 94 private boolean checkroomforpowertool ( Wrapper index ) { 95 index. set (0); 96 boolean room = true ; 97 while ( index. get () <= this. tools. length - Toolbox. PowerToolSize ) { 98 for ( int j = index. get (); j < index. get () + Toolbox. PowerToolSize ; ++j) { 99 if( this. tools [j]!= null ) { 100 room = false ; 101 break ; room = true ; if( room ) { 106 return true ; index. set ( index. get ()+1); return false ; /** 114 * Fuege ein Werkzeug an erster passender Stelle zur Kiste hinzu, falls Platz ist. 115 t Das Werkzeug, das hinzugefuegt werden soll. 116 */ 117 public void addtool ( Tool t) { 118 switch (t) { 119 case PowerTool : 120 Wrapper i = new Wrapper (0); 121 if( this. checkroomforpowertool (i)) { 122 for ( int k = 0; k < Toolbox. PowerToolSize ; ++k) { 123 this. tools [i. get () + k] = t; this. capacity -= Toolbox. PowerToolSize ; break ; 128 case Materials : 129 for ( int k = 0; k < this. tools. length ; ++k) { 130 if( this. tools [k] == null ) { 131 this. tools [k] = t; 132 this. capacity -= 1; 133 break ; if( this. tools [k] == Tool. Materials ) { 136 break ; break ; 140 case SimpleTool : 141 for ( int k = 0; k < this. tools. length ; ++k) { 142 if( this. tools [k] == null ) { 143 this. tools [k] = t; 144 this. capacity -= 1; 145 break ; break ; public enum Tool { 2 PowerTool, SimpleTool, Materials 3 1 public class Wrapper { 2 private int i; 3 4 public Wrapper ( int i) { 5 this.i = i; public void set ( int i) { 9 this.i = i; public int get () { Listing 2: Tool.java Listing 3: Wrapper.java 3

4 12 return this.i; e) Die Methode sollte private sein, da sie stark mit der internen Struktur verknüpft ist. Eine Änderung der internen Struktur der Klasse könnte eine Änderung der Signatur nach sich ziehen. Dass der Rückgabewert existiert ein Platz für ein Elektrowerkzeug aber auch für den Benutzer der Klasse interessant ist, reicht nicht als Grund, die Methode öffentlich zu machen. Es wäre besser, eine zusätzliche Methode checkroomforpowertool ohne Parameter zu ergänzen. Aufgabe 2 (Digitale Signaturen): ( * + 4 = * Punkte) Alice möchte für einige Leute digitale Zertifikate ausstellen. Diese Zertifikate möchte Alice später überprüfen können, um sich davon zu überzeugen, dass sie wirklich von ihr ausgestellt wurden. Natürlich könnte Alice alle Daten speichern und zum Überprüfen in ihrer Datenbank nachsehen. Das klingt für Alice aber viel zu aufwendig, daher entscheidet sie sich, digitale Signaturen zu verwenden. Jedes Zertifikat enthält daher einen Inhalt und eine Signatur. Alice benötigt nun zur Überprüfung nur ein Secret 1. Aus dem Inhalt des Zertifikats und dem Secret wird mit Hilfe eines speziellen Algorithmus und einer kryptografischen Hashfunktion eine Signatur berechnet. Ohne das Secret von Alice ist es praktisch unmöglich, die korrekte Signatur zu erzeugen. Um später zu prüfen, dass sie das Zertifikat selbst ausgestellt hat, muss sie also nur die Signatur erneut berechnen und mit der Signatur des Zertifikats abgleichen. Andere können diese Überprüfung nicht vornehmen, da man das Secret zur Überprüfung benötigt. Es handelt sich also um ein symmetrisches Signaturverfahren. 2 In dieser Aufgabe werden die nötigen Klassen implementiert, um mit Hilfe der in Java verfügbaren Hashfunktionen digital signierte Zertifikate zu erzeugen. Ein Zertifikat besteht aus drei Teilen: Einem Header, der den Namen des verwendeten Signaturalgorithmus enthält, einen Body, der Paare von Schlüsseln und Werten enthält, und schließlich der Signatur. Header und Body bilden zusammen den Inhalt des Zertifikats. Der Aufbau von Zertifikaten wird also durch die folgende Grammatik in EBNF beschrieben: Header = (" HMAC_MD5 " " HMAC_SHA1 " " HMAC_SHA256 ") Key_Value_Pair = " " String " : " String " " Body = Key_ Value_ Pair { "," Key_ Value_ Pair Signatur = Hexadezimalzahl Inhalt = Header ";" Body ";" Zertifikat = Inhalt Signatur Die folgenden beiden Ausdrücke sind syntaktisch korrekte Zertifikate. HMAC_MD5 ; i : 42, string : string ;9 b55eef8e51651bb7f265204d281354c HMAC_SHA256 ; i : 1, str : value ; 93 d0de88bef2c1cc63d485e330e067d3096aaa6fcc8c722d2de4d87991a0b54e Auf der Webseite finden Sie eine Klasse Hasher.java, die Sie nutzen können. Die Klasse vereinfacht den Umgang mit den Hashfunktionen von Java und bietet zusätzlich Methoden, um zwischen byte[] und Strings mit Hexadezimalzahlen zu konvertieren. Alle öffentlichen Methoden dieser Klasse verfügen über ausführliche Erklärungen als Javadoc Kommentare. Zusätzlich gibt es eine main-methode in der Klasse Hasher, mit der Sie Ihren Code testen können. Hinweise: Beachten Sie bei Ihrem Entwurf der Klassen die Datenkapselung und versehen Sie jedes Attribut und jede Methode mit public, private, static und final soweit sinnvoll. 1 Ein Passwort oder kryptografischer Schlüssel 2 Dies ist im Gegensatz zu asymmetrischen Verfahren, bei denen es einen privaten Schlüssel zum Erzeugen und einen öffentlichen Schlüssel zum Überprüfen der Signaturen gibt. 4

5 Sie dürfen, unter Beachtung der Datenkapselung und soweit nötig, Hilfsmethoden oder Attribute zu den von Ihnen geschriebenen Klassen hinzufügen. Die vorgegebene Klasse Hasher darf nicht verändert werden! Halten Sie sich unbedingt an die vorgegebenen Namen für Klassen, Methodennamen und so weiter, damit Ihr Code getestet werden kann. Ihr Code muss nicht robust sein. Wenn falsche Parameter übergeben werden, darf sich Ihr Code beliebig verhalten. Falls z.b. ein String erwartet wird, der eine Zahl darstellt, aber "a" übergeben wird, darf Ihr Programm abstürzen. a) Schreiben Sie einen Aufzählungstyp (Enum) Algorithm. Dieser soll die drei möglichen Signaturalgorithmen HMAC_MD5, HMAC_SHA1 und HMAC_SHA256 repräsentieren können. b) Zunächst benötigen wir eine einfache Klasse für die Schlüssel-Wert-Paare, die den Body des Zertifikats bilden. Schreiben Sie dazu eine Klasse Pair. Ein Pair-Objekt soll jeweils einen Schlüssel und einen Wert (als Strings) speichern, die über die Selektoren getkey bzw. getvalue gelesen werden können. Einmal erstellt, sollen Schlüssel und Wert eines Objekts nicht mehr geändert werden können. Es soll zwei Konstruktoren geben, die jeweils als ersten Parameter den Schlüssel als String erhalten und als zweiten Parameter einen String oder ein Integer-Objekt (das dann in einen entsprechenden String überführt werden muss). Schließlich soll es eine tostring Methode geben, die eine Stringrepräsentation des Objekts gemäß der oben gezeigten EBNF Regeln für das Nicht-Terminal Key_Value_Pair erzeugt, und eine Methode fromstring für die umgekehrte Richtung. Der Aufruf Pair.fromString(" a : something ") sollte also ein Pair-Objekt mit dem Schlüssel "a" und dem Wert "something" zurückgeben. Hinweise: In der Klasse String gibt es eine Methode split(string pattern). Diese liefert ein Array von Strings, das entsteht, wenn man den String bei jedem vorkommen von pattern aufspaltet. Ruft man split(",") z.b. auf dem String ",a,bcd,e" auf, erhält man das Array {"", "a", "bcd", "e". Gehen Sie davon aus, dass weder der Schlüssel noch der Wert das Symbol enthalten. Andernfalls darf sich Ihr Code beliebig verhalten. c) Schreiben Sie eine Klasse Certificate, die ein Zertifikat repräsentiert. Ein Zertifikat besteht aus einem Algorithm, der für die Signatur verwendet werden soll, einer beliebigen, aber für ein Objekt festen Anzahl von Schlüssel-Wert-Paaren und einer Signatur. Der Algorithm und die Schlüssel-Wert-Paare sollen dem Konstruktor übergeben werden. Nutzen sie vararg-parameter, damit eine beliebige Anzahl Schlüssel-Wert-Paare übergeben werden kann. Die Signatur soll außerhalb der Klasse nicht zugreifbar sein. Auch der Algorithm ist extern nicht relevant. Für die Schlüssel-Wert-Paare soll es statt Selektoren eine Funktion get geben, die einen Schlüssel als String übergeben bekommt und den zugehörigen Wert zurückliefert, falls es ein entsprechendes Schlüssel- Wert-Paar in dem Zertifikat gibt. Ansonsten soll null zurückgegeben werden. Außerdem soll die Klasse eine Methode fromstring besitzen, die ein Objekt der Klasse aus einem String gemäß der EBNF Regeln für das Nicht-Terminal Zertifikat erstellt. Ruft man zum Beispiel Certificate.fromString auf dem ersten Beispiel-Zertifikat oben auf, sollte man ein Objekt vom Typ Certificate erhalten, bei dem der Algorithm HMAC_MD5 ist, die Signatur 9b55eef8e51651bb7f265204d281354c und das genau zwei Schlüssel-Wert-Paare besitzt. Die Schlüssel sollten "i" und "string" sein und die zugehörigen Werte "42" bzw. "string". Hinweise: Gehen Sie davon aus, dass weder die Schlüssel noch die Werte die Symbole oder ; enthalten. Andernfalls darf sich Ihr Code beliebig verhalten. 5

6 d) Schreiben Sie in der Klasse Certificate eine Methode getsignedstring(string secret), die eine Signatur als String aus dem gegebenen secret mit dem Algorithm des aktuellen Certificate-Objekts erstellt, die Signatur des aktuellen Certificate-Objekts mit der Hexadezimalstring-Darstellung dieser String-Signatur belegt und das vollständige Zertifikat als String zurück liefert, wie in der EBNF- Grammatik angegeben. Hat das aktuelle Certificate-Objekt bereits eine Signatur, z.b. weil es aus einem String erstellt wurde, soll diese nicht verändert werden! Schreiben Sie dazu zunächst eine nur intern verwendete Hilfsmethode getheaderbodystring, die eine String-Repräsentation des Inhalts des aktuellen Certificate-Objekts gemäß der EBNF Regeln für das Nicht-Terminal Inhalt zurückliefert. Für ein Objekt mit den Schlüssel-Wert-Paaren a : 42 und foo : bar und dem Algorithm HMAC_MD5 würde die Methode den String HMAC_MD5; a : 42, foo : bar ; zurückliefern. Um die Signatur zu berechnen, verwenden Sie die passende Funktion aus der Klasse Hasher. Ist der Algorithm des aktuellen Certificate-Objekts z.b. HMAC_SHA256, müssten Sie Hasher.sha256Hmac(String tosign, String secret) mit passenden Parametern aufrufen. Als erster Parameter sollte dabei das Ergebnis von getheaderbodystring übergeben werden. Schreiben Sie außerdem eine Methode validatesignature(string secret). Diese soll erneut eine Signatur berechnen und diese mit der in dem Objekt gespeicherten Signatur vergleichen. Sind beide gleich, soll true zurückgeliefert werden, sonst false. Hinweise: Sie können die Methode substring(int beginindex, int endindex) verwenden. Dieser erzeugt einen Teilstring, der genau die Zeichen von beginindex bis endindex-1 enthält. s.substring(0, s.length()) würde also den kompletten String s kopieren, "abcd".substring(1,3) würde den String "bc" zurückgeben. Verwenden Sie die Methode bytearraytohex aus der Klasse Hasher um byte-arrays in Strings (mit der entsprechenden Hexadezimalzahl) zu konvertieren. Ebenso enthält Hasher eine Methode für die umgekehrte Transformation. e) Alice bietet einen Webservice an, über den Bob und Chuck ihre Zertifikate überprüfen können. Leider ist Chuck nicht vertrauenswürdig und könnte versuchen, Zertifikate zu fälschen. Da Chuck die Zeit mitstoppen könnte, die eine Überprüfung dauert, muss Alice ihren Code gegen Timing-Attacken absichern. Bei einer Timing-Attacke stoppt Chuck die Laufzeit einer Operation und kann daraus Rückschlüsse auf geheime Informationen ziehen. In diesem Fall ist die kritische Information, wie weit die neu berechnete Signatur mit der vorhandenen übereinstimmt. Die Methode equals der Klasse String vergleicht zwei Strings nur bis zum ersten Unterschied. Je länger der Vergleich dauert, desto mehr Bytes der Signatur sind richtig. Chuck kann also Byte für Byte die Signatur fälschen. So braucht er nur Versuche, um eine SHA-256 Signatur zu fälschen, statt Versuche. Doch es ist noch schlimmer! Für einen Angriff würde es schon reichen, wenn man weiß, ob nur ein einziges Byte der gefälschten Signatur auch in der korrekten Signatur an gleicher Position auftritt. Dies würde Chuck ermöglichen, die Signatur in höchstens Versuchen zu fälschen, weil nicht jeder der 256 möglichen Byte-Werte in der aus 32 Byte bestehenden Signatur auftreten kann. Also muss es genau so lang dauern ein richtiges Byte zu verarbeiten, wie es braucht ein falsches Byte zu verarbeiten. Verändern Sie die Methode validatesignature(string secret) so, dass keine der oben beschriebenen Timing-Attacken mehr möglich sind. Kommentieren Sie ihren Code, sodass klar wird, wie die Timing- Attacke vermieden wird. Hinweise: Die Länge von secret oder des Inhalts ist keine kritische Information. In der Praxis werden grundsätzlich Geheimnisse mit der gleichen Länge wie die Block-Größe des Hash-Algorithmus verwendet. Die Block-Größe aller hier verwendeten Algorithmen ist 512 Bit. Diese Aufgabe benötigt große Präzision. Kleinste Fehler führen dazu, dass kritische Informationen verraten werden. Beispielsweise benötigt true && 1 == 1 eine längere Zeit zur Auswertung als false && 1 == 1 6

7 f) Versehen Sie die Klassen Certificate und Pair mit einer ausführlichen Javadoc Dokumentation. Private Methoden und private Attribute müssen nicht zwingend dokumentiert werden. Generieren Sie mit Javadoc eine HTML Version der Dokumentation und schicken Sie diese zusammen mit dem Programmcode an ihre Tutorin/ihren Tutor. Die generierte HTML Version braucht nicht ausgedruckt zu werden. Lösung: Listing 4: Certificate.java 1 /* c) */ 2 3 /** 4 * Diese Klasse repraesentiert ein Zertifikat mit einer HMAC Signatur. 5 * 6 * Um ein Zertifikat zu erstellen, wird der Konstruktor mit dem gewuenschten 7 * Signaturalgorithmus aufgerufen und anschliessend das signierte Zertifikat 8 * mit # getsignedstring ( String ) getsignedstring abgerufen. 9 * 10 * Um ein Zertifikat zu validieren, wird eine Instanz mit der Methode 11 * # fromstring ( String ) fromstring aus dem Zertifikatsstring erzeugt 12 * und die Signatur mit der Methode # validatesignature ( String ) validatesignature 13 * ueberprueft. 14 */ 15 public class Certificate { 16 private final Pair [] values ; 17 private String signature ; 18 private final Algorithm algo ; /** 21 * Generiert ein neues Zertifikat. 22 * 23 algo Der gewuenschte Signaturalgorithmus 24 values Die Daten des Zertifikats 25 */ 26 public Certificate ( Algorithm algo, Pair... values ) { 27 this. values = values ; 28 this. algo = algo ; /** 32 * Ruft den Wert zu einem Schluessel ab. 33 * 34 key Der Schluessel 35 Den Wert zum gegebenen Schluessel oder null, falls nicht existent 36 */ 37 public String get ( String key ) { 38 for ( Pair kv : values ) { 39 if(kv. getkey (). equals ( key )) { 40 return kv. getvalue (); return null ; /** 47 * Erstellt eine Instanz aus einem Zertifikatsstring. 48 str Der Zertifikatsstring 49 Eine Instanz, die den String repraesentiert 50 */ 51 public static Certificate fromstring ( String str ) { 52 String [] parts = str. split (";"); String [] values = parts [1]. split (","); Pair [] valuepairs = new Pair [ values. length ]; for ( int i = 0; i < valuepairs. length ; ++i) { 59 valuepairs [i] = Pair. fromstring ( values [i ]); Certificate sc = new Certificate ( Algorithm. valueof ( parts [0]), valuepairs ); 63 sc. signature = parts [2]; 64 return sc; /* c) ende */ /* d) */ /** 7

8 71 * Ruft den Zertifikatsstring ab und generiert bei Bedarf die Signatur 72 secret Das Geheimnis fuer die Signatur 73 Der signierte Zertifikatsstring 74 */ 75 public String getsignedstring ( String secret ) { 76 if( this. signature == null ) { 77 this. signature = Hasher. bytearraytohex ( this. computesignature ( secret )); return this. getheaderbodystring () + this. signature ; /** 83 * Berechnet die Signatur fuer diese Instanz mit dem gegebenen Geheimnis. 84 * Die gespeicherte Signatur wird nicht veraendert. 85 secret Das Geheimnis fuer die Signatur 86 Die digitale Signatur 87 */ 88 private byte [] computesignature ( String secret ) { 89 byte [] signature ; 90 switch ( this. algo ) { 91 default : 92 case HMAC_SHA256 : signature = Hasher. sha256hmac ( this. getheaderbodystring (), secret ); 93 break ; 94 case HMAC_SHA1 : signature = Hasher. sha1hmac ( this. getheaderbodystring (), secret ); 95 break ; 96 case HMAC_MD5 : signature = Hasher. md5hmac ( this. getheaderbodystring (), secret ); 97 break ; return signature ; /** 103 * Gibt den String, der signiert wird zurueck. 104 Der zu signierende String 105 */ 106 private String getheaderbodystring () { 107 String str = algo. tostring () + ";"; 108 for ( Pair kv : values ) { 109 str += kv + ","; str = str. substring (0, str. length () -1); 112 str += ";"; 113 return str ; /** 117 * ueberprueft ob die gespeicherte Signatur fuer das gegebene Geheimnis gueltig ist. 118 * Diese Variante ist anfaellig fuer Timing - Attacken. 119 secret Das Geheimnis mit dem geprueft wird. 120 True, wenn die Signatur gueltig ist, sonst false. 121 */ 122 public boolean insecurevalidatesignature ( String secret ) { 123 String expected = Hasher. bytearraytohex ( this. computesignature ( secret )); return expected. equals ( this. signature ); /* d) ende */ /* e*) */ /** 132 * ueberprueft, ob die gespeicherte Signatur fuer das gegebene Geheimnis gueltig ist. 133 * Diese Variante ist sicher gegen Timing - Attacken auf die Anzahl richtiger 134 * Bytes in der Signatur. 135 * 136 secret Das Geheimnis mit dem geprueft wird. 137 True, wenn die Signatur gueltig ist, sonst false. 138 */ 139 public boolean validatesignature ( String secret ) { 140 byte [] expected = this. computesignature ( secret ); 141 byte [] actual = Hasher. hexstringtobytearray ( this. signature ); 142 if( actual == null expected. length!= actual. length ) { 143 return false ; boolean result = true ; 146 // iteriere ueber das komplette Array, damit nicht erkannt werden kann, 147 // wie lang der korrekte Praefix ist. 148 for ( int i = 0; i < actual. length ; ++i) { 149 // kein if, sondern boolesche Operationen, da so das Verarbeiten eines korrekten 150 // Bytes genau so lang dauert wie das eines Falschen. 151 result = actual [i] == expected [i] && result ; return result ; 8

9 /* e*) ende */ Listing 5: Pair.java 1 /* b) */ 2 3 /** 4 * Repraesentiert ein Schluessel - Wert - Paar. Die Daten koennen nachtraeglich nicht veraendert werden. 5 */ 6 public class Pair { 7 private final String key ; 8 private final String value ; 9 10 /** 11 * Erstellt ein neues Paar fuer einen String Wert 12 key Der Schluessel 13 value Der Wert als String 14 */ 15 public Pair ( String key, String value ) { 16 this. key = key ; 17 this. value = value ; /** 21 * Erstellt ein neues Paar fuer einen Integer Wert und konvertiert 22 * den Integer zu einem String. 23 key Der Schluessel 24 value Der Wert als Integer 25 */ 26 public Pair ( String key, Integer value ) { 27 this. key = key ; 28 this. value = value. tostring (); /** 32 * Ruft den Schluessel ab 33 Der Schluessel 34 */ 35 public String getkey () { 36 return key ; /** 40 * Ruft den Wert ab 41 Der Wert 42 */ 43 public String getvalue () { 44 return value ; /** 48 * Erstellt eine String repraesentation 49 Schluessel : Wert 50 */ 51 public String tostring () { 52 return " " + key + " : " + 53 " " + value + " "; /** 57 * Erstellt eine neue Instanz aus einem String, wie ihn 58 * # tostring () tostring zurueck gibt. 59 str String - Repraesentation eines Paares 60 Eine Instanz mit Schluessel und Wert aus dem String. 61 */ 62 public static Pair fromstring ( String str ) { 63 String [] parts = str. split (" "); 64 return new Pair ( parts [1], parts [3]); Listing 6: Algorithm.java 1 /* a) */ 2 3 /** 4 * Dieser Aufzaehlungstyp repraesentiert die drei verfuegbaren Signaturalgorithmen. 5 */ 6 public enum Algorithm { 9

10 7 HMAC_SHA256, HMAC_MD5, HMAC_SHA1 ; 8 Tutoraufgabe 3 (Programmanalyse): Lösen Sie die folgende Aufgabe ohne Einsatz eines Computers. Bedenken Sie, dass Sie in einer Prüfungssituation ebenfalls keinen Computer zur Verfügung haben. Betrachten Sie das folgende Programm: public class A { public static void main ( String [] args ) { A a1 = new A (); System. out. println ( a1.f (5)); System. out. println (a1.d); System. out. println ( a1.f( Long. valueof (2))); A a2 = new A (1,1); System. out. println (a2.i); System. out. println (a2.d); private Integer i; private double d; public A() { this.i = 1; this.d = 4; public A( Integer x, double y) { this.i = x; this.d = y; public A( int x, double y) { this.i = 3; this.d = x + y; public int f( Integer x) { return this.i + x; public int f( double i) { this.d = i; return this.i; Geben Sie die Ausgabe dieses Programms an, wenn die main-methode ausgeführt wird. Begründen Sie Ihre Antwort. Lösung: a) Die erste Ausgabe ist 1. Da die implizite Typanpassung Vorrang vor dem Autoboxing hat, wird die zweite f Methode ausgeführt. Der Rückgabewert dieser Methode ist der Wert des i Attributs, welcher im ersten Konstruktor auf 1 gesetzt wurde. b) Die zweite Ausgabe ist 5.0. Bei der Ausführung der zweiten f Methode wurde das d Attribut auf den übergebenen Wert 5.0 gesetzt. c) Die dritte Ausgabe ist wieder 1. Hier wird zunächst das Long Objekt durch Unboxing in einen long Wert umgewandelt, der anschließend durch implizite Typanpassung in einen double Wert konvertiert wird. Also wird wieder die zweite f Methode ausgeführt und das (unveränderte) i Attribut ausgegeben. d) Die vierte Ausgabe ist 3. Dem Konstruktor werden zwei int Werte übergeben, sodass der dritte Konstruktor ausgeführt wird, da der zweite Konstruktor gegenüber dem dritten ein zusätzliches Autoboxing erfordern würde. Dieser belegt das i Attribut mit 3. e) Die fünfte Ausgabe ist 2.0. Auf dem für die letzte Ausgabe beschriebenen Ausführungsweg wurde der dritte Konstruktor mit den int Werten 1 und 1 aufgerufen. Deren Summe wird durch implizite Typanpassung zu 2.0 konvertiert und dem d Attribut zugewiesen. 10

11 Aufgabe 4 (Programmanalyse): (4 Punkte) Lösen Sie die folgende Aufgabe ohne Einsatz eines Computers. Bedenken Sie, dass Sie in einer Prüfungssituation ebenfalls keinen Computer zur Verfügung haben. Betrachten Sie das folgende Programm: public class B { public static void main ( String [] args ) { B b = new B (); b.a( Long. valueof (100)); b.a( Double. valueof (100)); b.a( Integer. valueof (100)); double r1 = b.b (100 D); int r2 = ( int ) b.b (100); c( Integer. valueof (100), "0"); c (100L, "0"); c (100L, 0 ); public void a( int p) { System. out. println ("a1"); public void a( double p) { System. out. println ("a2"); public void a( Double p) { System. out. println ("a3"); public int b( double p) { System. out. println ("b1"); return 0; public double b( int p) { System. out. println ("b2"); return 0; public static void c( Long p1, int p2) { System. out. println ("c1"); public static void c( long p1, String p2) { System. out. println ("c2"); public static void c( Long p1, String p2) { System. out. println ("c3"); 11

12 Geben Sie die Ausgabe dieses Programms an, wenn die main-methode ausgeführt wird. Begründen Sie Ihre Antwort! Lösung: a) Die erste Ausgabe ist a2, da der Parameter vom Typ Long durch Unboxing zu long und anschließend durch implizite Typumwandlung zu double wird. b) Die zweite Ausgabe ist a3, da die Signatur der Methode genau passt. c) Die dritte Ausgabe ist a1, da der Parameter vom Typ Integer durch Unboxing zu int wird. d) Die vierte Ausgabe ist b1, da die Signatur der Methode genau passt. Insbesondere ist der Typ des Rückgabewertes irrelevant. e) Die fünfte Ausgabe ist b2, da die Signatur der Methode genau passt. Insbesondere ist der Typ des Rückgabewertes irrelevant. f) Die sechste Ausgabe ist c2, da der erste Parameter vom Typ Integer durch Unboxing zu int und anschließend durch implizite Typumwandlung zu long wird. g) Die siebte Ausgabe ist c2, da die Signatur der Methode genau passt. h) Die achte Ausgabe ist c1, da der zweite Parameter vom Typ char durch implizite Typumwandlung zu int wird. Tutoraufgabe 5 (Rekursion): Betrachten Sie folgende Methode: public static int arraysum ( int [] a) { int res = 0; for ( int i = 0; i < a. length ; i ++) { res += a[i]; return res ; Schreiben Sie eine statische Methode arraysumrecursive, welche ein int-array erhält und eine int-zahl zurückliefert, sodass für jedes int-array a die Aufrufe arraysum(a) und arraysumrecursive(a) das gleiche Ergebnis liefern. Sie dürfen in dieser Aufgabe keine Schleifen verwenden. Die Verwendung von Rekursion ist hingegen erlaubt (inklusive der Definition von Hilfsmethoden). Hinweise: Wenn Sie Ihr Programm mit der Anweisung import java.util.arrays; beginnen, können Sie die vordefinierte statische Methode Arrays.copyOfRange benutzen. Hierbei liefert Arrays.copyOfRange(a, i, j) ein neues Array mit den Werten a[i], a[i+1],..., a[j-1] zurück. Lösung: Listing 7: ArraySum.java import java. util. Arrays ; /** * Klasse, welche eine rekursive Summen - Methode fuer Arrays enthaelt. */ 12

13 public class ArraySum { public static int arraysumrecursive ( int [] a) { return arraysumhelp (a, 0); private static int arraysumhelp ( int [] a, int i) { if ( i >= a. length ) { return 0; return a[ i] + arraysumhelp (a, i + 1); public static int alternativearraysum ( int [] a) { if( a. length <= 0 ) { return 0; else if ( a. length == 1) { return a [0]; else { return a [0] + alternativearraysum ( Arrays. copyofrange (a, 1, a. length )); public static void main ( String [] args ) { int [] arr = {1, 2, 3, 4; System. out. println ( alternativearraysum ( arr )); System. out. println ( arraysumrecursive ( arr )); Aufgabe 6 (Rekursion): (5 Punkte) Gegeben sei die Klasse Minimum in der Datei Minimum.java. Vervollständigen sie die statische Methode arraymin, die das kleinste Element eines int Arrays zurückgibt. In dieser Aufgabe sei das kleinste Element des int[] Arrays null bzw. des int[] Arrays der Länge 0 die größte darstellbare int Zahl. Das Benutzen von Schleifen ist nicht gestattet. Hinweise: Den größten darstellbaren int Wert können Sie durch den Aufruf Integer.MAX_VALUE erhalten. Wenn Sie Ihr Programm mit der Anweisung import java.util.arrays; beginnen, können Sie die vordefinierte statische Methode Arrays.copyOfRange benutzen. Hierbei liefert Arrays.copyOfRange(a, i, j) ein neues Array mit den Werten a[i], a[i+1],..., a[j-1] zurück. Die Benutzung von vordefinierten Java Methoden außer den hier explizit genannten ist nicht gestattet. Um Ihr Programm zu testen, legen Sie die auf der Website bereitgestellte Datei Test.class in dasselbe Verzeichnis wie Minimum.java. Führen sie nach dem Kompilieren von Minimum.java den Befehl java Test aus. Lösung: 1 import java. util. Arrays ; 2 public class Minimum { Listing 8: Minimum.java 13

14 3 public static int arraymin ( int [] inputarray ){ 4 if( inputarray == null inputarray. length <= 0){ 5 return Integer. MAX_ VALUE ; 6 7 int n = inputarray. length ; 8 if(n == 1){ 9 return inputarray [n -1]; int min1 = arraymin ( Arrays. copyofrange ( inputarray,0,n /2)); 12 int min2 = arraymin ( Arrays. copyofrange ( inputarray,n/2,n )); 13 int result = min1 < min2? min1 : min2 ; 14 return result ; Aufgabe 7 (Codescape): (Codescape) Lösen Sie die Räume von Deck 3 des Spiels Codescape. Ihre Lösung für Räume dieses Codescape Decks wird nur dann für die Zulassung gezählt, wenn Sie die Lösung bis Freitag, den um 12:00 abschicken. Lösung: 14

Tutoraufgabe 1 (Werkzeugkasten): Programmierung WS18/19 Übungsblatt 4 (Abgabe Freitag, den um 12:00) Allgemeine Hinweise:

Tutoraufgabe 1 (Werkzeugkasten): Programmierung WS18/19 Übungsblatt 4 (Abgabe Freitag, den um 12:00) Allgemeine Hinweise: Prof. aa Dr. J. Giesl S. Dollase, M. Hark, D. Korzeniewski Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden. Namen und

Mehr

Tutoraufgabe 1 (Programmanalyse): Programmierung WS17/18 Übungsblatt 5 (Abgabe ) Allgemeine Hinweise:

Tutoraufgabe 1 (Programmanalyse): Programmierung WS17/18 Übungsblatt 5 (Abgabe ) Allgemeine Hinweise: Prof. aa Dr. J. Giesl M. Hark, J. Hensel, D. Korzeniewski Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden.

Mehr

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Programmanalyse): Prof. aa Dr. M. Müller Programmierung WS15/16 C. Aschermann, J. Hensel, J. Protze, P. Reble Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 3 Studierenden aus der gleichen Kleingruppenübung

Mehr

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Programmanalyse): Prof. aa Dr. J. Giesl F. Frohn, J. Hensel, D. Korzeniewski Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden.

Mehr

Programmierung WS14/15 Lösung - Präsenzübung C. Aschermann, F. Frohn, J. Hensel, T. Ströder

Programmierung WS14/15 Lösung - Präsenzübung C. Aschermann, F. Frohn, J. Hensel, T. Ströder Prof. aa Dr. J. Giesl C. Aschermann, F. Frohn, J. Hensel, T. Ströder Aufgabe 1 (Programmanalyse): (14 + 6 = 20 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Tragen Sie hierzu

Mehr

Erste Java-Programme (Scopes und Rekursion)

Erste Java-Programme (Scopes und Rekursion) Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/

Mehr

Programmierung WS12/13 Lösung - Präsenzübung M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Programmierung WS12/13 Lösung - Präsenzübung M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Prof. aa Dr. J. Giesl M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Aufgabe 1 (Programmanalyse): (9 + 1 = 10 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Tragen Sie hierzu

Mehr

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Programmanalyse): Prof. aa Dr. J. Giesl Programmierung WS14/15 C. Aschermann, F. Frohn, J. Hensel, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung

Mehr

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017 Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2016/2017 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung

Mehr

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2 Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Tutoraufgabe 1 (Zweierkomplement): a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

Tutoraufgabe 1 (Seiteneekte):

Tutoraufgabe 1 (Seiteneekte): Prof. aa Dr. M. Müller C. Aschermann, J. Hensel, J. Protze, P. Reble Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 3 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet

Mehr

Tutoraufgabe 1 (Überladen von Methoden):

Tutoraufgabe 1 (Überladen von Methoden): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018 Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2017/2018 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung

Mehr

AuD-Tafelübung T-B5b

AuD-Tafelübung T-B5b 6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit

Mehr

Programmierung für Mathematik (HS13)

Programmierung für Mathematik (HS13) software evolution & architecture lab Programmierung für Mathematik (HS13) Übung 11 1 Aufgabe: Codeverständnis 1.1 Aufgabenstellung Notieren Sie, was der folgende Code ausgeben würde, wenn er so in einer

Mehr

Tutoraufgabe 1 (Seiteneekte):

Tutoraufgabe 1 (Seiteneekte): Prof. aa Dr. J. Giesl Programmierung WS14/15 C. Aschermann, F. Frohn, J. Hensel, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung

Mehr

Beispielprüfung CuP WS 2015/2016

Beispielprüfung CuP WS 2015/2016 Beispielprüfung CuP WS 2015/2016 Univ.-Prof. Dr. Peter Auer 23. Dezember 2015 Informationen zur Prüfung Die Prüfung wird als Multiple-Choice-Test mit 10 Fragen am Computer abgehalten. (Bei manchen Fragen

Mehr

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 5. Dezember 2016 Programmieren I 5. Übungsblatt Hinweis: Auf diesem und den folgenden Übungsblättern

Mehr

Programmierung für Mathematik HS11

Programmierung für Mathematik HS11 software evolution & architecture lab Programmierung für Mathematik HS11 Übung 8 1 Aufgabe: Codeverständnis (Repetition) 1.1 Lernziele 1. Code verstehen können. 2. Fehler im Code finden und korrigieren

Mehr

Tutoraufgabe 1 (Listen):

Tutoraufgabe 1 (Listen): Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet

Mehr

Tutoraufgabe 1 (Typcasting):

Tutoraufgabe 1 (Typcasting): Prof. aa Dr. J. Giesl Programmierung WS18/19 S. Dollase, M. Hark, D. Korzeniewski Tutoraufgabe 1 (Typcasting: Bestimmen Sie den Typ und das Ergebnis der folgenden Java-Ausdrücke. Begründen Sie Ihre Antwort

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Programmierung WS17/18 Lösung - Präsenzübung 09./

Programmierung WS17/18 Lösung - Präsenzübung 09./ Prof. aa Dr. J. Giesl M. Hark, J. Hensel, D. Korzeniewski Aufgabe 1 (Programmanalyse): (11.5 + 4.5 = 16 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Tragen Sie hierzu jeweils

Mehr

Tutoraufgabe 1 (Verifikation):

Tutoraufgabe 1 (Verifikation): Prof. aa Dr. M. Müller C. Aschermann, J. Hensel, J. Protze, P. Reble Allgemeine Die Hausaufgaben sollen in Gruppen von je 3 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden.

Mehr

Übung Programmierung WS 2007/08 - Blatt 6

Übung Programmierung WS 2007/08 - Blatt 6 RHEINISCH- WESTFÄLISCHE TECHNISCHE HOCHSCHULE AACHEN LEHR- UND FORSCHUNGSGEBIET INFORMATIK 2 RWTH Aachen D-52056 Aachen GERMANY http://programmierung.informatik.rwth-aachen.de LuFG Informatik II Prof.

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Aufgabenblatt 4 Prof. R. Westermann, A. Lehmann,

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Tutoraufgabe 1 (Fibonacci-Zahlen):

Tutoraufgabe 1 (Fibonacci-Zahlen): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Fibonacci-Zahlen): Die Folge der Fibonacci-Zahlen ist folgendermaßen definiert: F 0 = 0 F 1 =

Mehr

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4 Folienpaket 7 Themenschwerpunkte: Methoden in OOP 284 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4 Eine Klasse entwerfen Eine Klasse enthält folgende Information: Name der Klasse (ist auch der

Mehr

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen II.2.3 Datenabstraktion - 1 - public class Rechteck

Mehr

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 6. März 2013 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2013 PD Dr. Cyrill Stachniss Dr. Rainer Kümmerle Übungsblatt 13 Abgabe / Besprechung in Absprache

Mehr

Algorithmen und Programmierung III

Algorithmen und Programmierung III Musterlösung zum 4. Aufgabenblatt zur Vorlesung WS 2006 Algorithmen und Programmierung III von Christian Grümme Aufgabe 1 Amortisierte Analyse 10 Punkte Zu erst betrachte ich wie oft die letzte Ziffer

Mehr

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14 Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Iman Kamehkhosh, Marcel Preuß, Henning Timm Übungsblatt 11

Mehr

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Tag 5 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Methoden Deklaration

Mehr

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise:

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise: Prof. aa Dr. J. Giesl Programmierung WS17/18 M. Hark, J. Hensel, D. Korzeniewski Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Aufgabe 1 (Programmanalyse):

Aufgabe 1 (Programmanalyse): Prof. aa C. Bischof, Ph.D. M. Brockschmidt, F. Emmes, M. Lülfesmann, J. Willkomm Aufgabe 1 (Programmanalyse): (18 Punkte) Gegeben sei das folgende Java-Programm. Dieses Programm gibt sechs Zeilen Text

Mehr

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen Themen der Übung 1 Organisatorisches Methoden und Wrapperklassen 2 Methoden 3 Wrapper-Klassen CoMa-Übung IV TU Berlin 07.11.2012 Organisatorisches: Im Pool nur auf die Abgabeliste setzen, wenn ihr wirklich

Mehr

ADT: Java Collections und ArrayList

ADT: Java Collections und ArrayList ADT: Java Collections und ArrayList Überblick der Klassen Object File Collections Map List Set ArrayList LinkedList SortedSet HashSet SortedSet Methode ArrayList Klasse I Beschreibung void add(int position,

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Lernteam OOP3 SW Programmieren 1 - H1103 Felix Rohrer

Lernteam OOP3 SW Programmieren 1 - H1103 Felix Rohrer Aufgabe 1: Datentypen und Typecasting Geben Sie das Ergebnis für folgende mathematischen Ausdrücke im entsprechenden Datentyp in Java an. Beachten Sie hierzu die Folie 14 der Präsentation. Hinweis: Bei

Mehr

2 Programmieren in Java I noch ohne Nachbearbeitung

2 Programmieren in Java I noch ohne Nachbearbeitung 1 2 Programmieren in Java I noch ohne Nachbearbeitung 2.1 Was sind Programme? Eingabe = Verarbeitung = Ausgabe Die Eingabe kann sein Konstanten im Quelltext; Kommandozeilenparameter oder interaktive Eingabe

Mehr

Aufgabe 1 (Programmanalyse, Punkte)

Aufgabe 1 (Programmanalyse, Punkte) 2 Aufgabe 1 (Programmanalyse, 8 + 6 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Schreiben Sie hierzu jeweils die ausgegebenen Zeichen hinter den Kommentar OUT:. public class

Mehr

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Abschnitt 11: Beispiel: Die Klasse String (Teil 1) Abschnitt 11: Beispiel: Die Klasse String (Teil 1) 11. Beispiel: Die Klasse String (Teil 1) 11.1 Einführung 11.2 Die Klasse String und ihre Methoden 11.3 Effizientes dynamisches Arbeiten mit Zeichenketten

Mehr

Präsenzübung Programmierung WS 2016/2017

Präsenzübung Programmierung WS 2016/2017 Prof. aa Dr. J. Giesl F. Frohn, J. Hensel, D. Korzeniewski Vorname: Präsenzübung Programmierung WS 2016/2017 Nachname: Studiengang (bitte genau einen markieren): Informatik Bachelor Informatik Lehramt

Mehr

int x = 3; int y = 11; public A () { this.x = z; y *= z;

int x = 3; int y = 11; public A () { this.x = z; y *= z; Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Aufgabe 1 (Programmanalyse): (13 + 6 = 19 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Tragen

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 05.10.2017 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2017

Mehr

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Java Übung Übung 3 Universität Duisburg-Essen Kommedia, Übung EinPro SS06, 2. Mai 2006 (UniDUE) 2. Mai 2006 1 / 17 Aufgabe 1 Umwandeln von do while in for Schleife. Listing 1: aufgabe3 1.java 1 public

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen

Mehr

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Tutorium 2 Strings Skript zur Vorlesung Einführung in die Programmierung im Wintersemester 2012/13 Ludwig-Maximilians-Universität

Mehr

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen Teil 5 - Java Programmstruktur Operatoren Schlüsselwörter Datentypen 1 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: // Kommentar Alle Zeichen nach dem // werden ignoriert. für

Mehr

Klausur Einführung in die Informatik I für Elektrotechniker 16. Juli 2003

Klausur Einführung in die Informatik I für Elektrotechniker 16. Juli 2003 Fakultät Elektrotechnik/Informatik Klausur Einführung in die Informatik I für Elektrotechniker Name:...................... Matr.-Nr....................... Bearbeitungszeit: 120 Minuten Bewertung (bitte

Mehr

Strings in Java. Die String Klasse und Methoden. A. Müller

Strings in Java. Die String Klasse und Methoden. A. Müller Strings in Java Die String Klasse und Methoden Inhalt Stringklasse in Java - Grundlegende Eigenschaften - Methoden der Stringklasse - vergleichen - suchen - ersetzen - Methoden der Stringbuilder - klasse

Mehr

Tutoraufgabe 1 (Überladen von Methoden):

Tutoraufgabe 1 (Überladen von Methoden): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Überladen von Methoden): Lösen Sie die folgende Aufgabe ohne Einsatz eines Computers. Bedenken

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

Präsenzübung Programmierung WS 2017/2018

Präsenzübung Programmierung WS 2017/2018 Prof. aa Dr. J. Giesl M. Hark, J. Hensel, D. Korzeniewski Vorname: Präsenzübung Programmierung WS 2017/2018 Nachname: Studiengang (bitte genau einen markieren): Informatik Bachelor Informatik Lehramt (Bachelor)

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 04: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Tutoraufgabe 1 (Pilze):

Tutoraufgabe 1 (Pilze): Prof. aa Dr. J. Giesl Programmierung WS14/15 C. Aschermann, F. Frohn, J. Hensel, T. Ströder Tutoraufgabe 1 (Pilze): In dieser Aufgabe beschäftigen wir uns mit dem berühmten Gaunerpärchen Bonnie und Clyde.

Mehr

Einführung in Java, Teil 7

Einführung in Java, Teil 7 Einführung in Java, Teil 7 (a) Weitere grundlegende Konzepte, und (b) Applikationen Vorlesung Informatik I, 8 & 13.12.2005, Daniel Huson Grundtypen und ihre Wrapper - Klassen Die Grunddatentypen in Java

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2012/2013, SS 2013 Programmieren I + II Regeln der Code-Formatierung Die hier vorgestellten

Mehr

Aufgabenblatt 5. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Aufgabenblatt 5. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt: Aufgabenblatt 5 Kompetenzstufe 1 Allgemeine Informationen zum Aufgabenblatt: Die Abgabe erfolgt in TUWEL. Bitte laden Sie Ihr IntelliJ-Projekt bis spätestens Freitag, 05.01.2018 13:00 Uhr in TUWEL hoch.

Mehr

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen 1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen II.2.2 Methoden, Unterprogramme und Parameter - 1 - 2. Methoden

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2018 Prof. Dr. Wolfram Burgard Andreas Kuhner Daniel Büscher Übungsblatt 13 Abgabe / Besprechung

Mehr

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH 1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH Die Umgebungsvariable CLASSPATH kann im Hamster-Simulator sowohl für Compiler als auch für die Ausführung des Hamster-Programms gesetzt werden: Hierdurch

Mehr

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3 UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 3 Algorithmen mit Gedächtnis Besonderheit Beispiele Typische Algorithmen Realisierungsvarianten Institut für Pervasive Computing Johannes

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

hue12 January 24, 2017

hue12 January 24, 2017 hue12 January 24, 2017 1 Abgabehinweise Beachten Sie unbedingt diese Hinweise, sonst erhalten Sie keine Punkte aus dieser Abgabe! Für Details siehe z.b. Folien der nullten Zentralübung 1.1 Namen und Matrikelnummern

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

Mehr

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415 Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415 Alexander Bazo 10. April 2015 Allgemeine Hinweise 1. Die Bearbeitungszeit beträgt 60 Minuten. Sie könne

Mehr

Fakultät IV Elektrotechnik/Informatik

Fakultät IV Elektrotechnik/Informatik Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Klausur Grundlagen der Programmierung

Klausur Grundlagen der Programmierung Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel

Mehr

Praktikum 4: Grafiken und Ereignisse

Praktikum 4: Grafiken und Ereignisse Praktikum 4: Grafiken und Ereignisse Aufgabe 1: Java Applikation Bisher haben wir in Java (ebenso wie in C) jeweils selbständige Konsole-Applikationen erstellt. Java wurde als Programmiersprache für das

Mehr

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg Klassen und Objekte Einführung in Java Folie 1 von 28 12. Mai 2011 Ivo Kronenberg Inhalt Objekte Klassendefinitionen Datenelemente (Klassenattribute) Instanzieren von Objekten Konstruktoren Vergleich primitive

Mehr

Probeklausur zur Vorlesung

Probeklausur zur Vorlesung Dr. Jochen Hoenicke Alexander Nutz Probeklausur zur Vorlesung Einführung in die Informatik Sommersemester 2014 Die Klausur besteht aus diesem Deckblatt und elf Blättern mit den Aufgaben, sowie einem Blatt

Mehr

EPROG 2.Teilprüfung. Aufgabe 1:

EPROG 2.Teilprüfung. Aufgabe 1: EPROG 2.Teilprüfung Dauer 50min. Keine Unterlagen erlaubt. Loginname ist q (also x.b. q0697801). Passwort ist Ihre Matrikelnummer. Speichern Sie Ihre Lösungen in den dafür vorgesehenen

Mehr

Programmierung WS18/19 Lösung - Präsenzübung

Programmierung WS18/19 Lösung - Präsenzübung Prof. aa Dr. J. Giesl S. Dollase, M. Hark, D. Korzeniewski Aufgabe 1 (Programmanalyse): (9.5 + 4.5 = 14 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Tragen Sie hierzu jeweils

Mehr

Tutoraufgabe 1 (Hoare-Kalkül):

Tutoraufgabe 1 (Hoare-Kalkül): Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr

Anregungen zu Übung 2

Anregungen zu Übung 2 Anregungen zu Übung 2 Allgemeine Informatik II - SS 2007 Was sind Arrays und wie kann man sie verwenden? Ein Array ist ein spezieller Datentyp, der mehrere Werte zu einer Einheit zusammenfasst. Er ist

Mehr

Selbststudium OOP7 & ALG2 Auftrag

Selbststudium OOP7 & ALG2 Auftrag Selbststudium OOP7 & ALG2 Auftrag Kapitel 5.6 1. zu bearbeitende Aufgaben: 5.24 bis 5.30 5.24: Return Method Set entryset() V get(object key) Set keyset() V put(k key, V value) void

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Vorname: Nachname: Matrikelnummer: Studiengang (bitte ankreuzen): Informatik Bachelor Informatik Lehramt Mathematik Bachelor Sonstige:

Vorname: Nachname: Matrikelnummer: Studiengang (bitte ankreuzen): Informatik Bachelor Informatik Lehramt Mathematik Bachelor Sonstige: Prof. aa C. Bischof, Ph.D. M. Brockschmidt, F. Emmes, M. Lülfesmann, J. Willkomm Vorname: Nachname: Studiengang (bitte ankreuzen): Informatik Bachelor Informatik Lehramt Mathematik Bachelor Sonstige: Anzahl

Mehr

Tutoraufgabe 1 (Code-Analyse):

Tutoraufgabe 1 (Code-Analyse): Prof. aa Dr. J. Giesl M. Brockschmidt, F. Emmes, C. Fuhs, C. Otto, T. Ströder Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung bearbeitet werden. Namen

Mehr

Programmiermethodik 1. Klausur

Programmiermethodik 1. Klausur Programmiermethodik 1. Klausur 27. 6. 2013 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 21 2 20 3 19 4 19 5 21 6 20 Gesamt 120 1 Seite 2 von 18 Aufgabe 1) Objekt-Orientierung und Vererbung

Mehr

55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN

55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN D3kjd3Di38lk323nnm 394 55 Ring-Queue In dieser Aufgabe wird eine generische Containerklasse definiert. Ihre Kapazität wird beim Erzeugen festgelegt, im Gegensatz zu den Klassen des Collection- Frameworks.

Mehr

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise! Fakultät IV Elektrotechnik/Informatik Klausur Einführung in die Informatik II für Elektrotechniker Name:.................................... Matr.-Nr..................................... Bearbeitungszeit:

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 7 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 21.10.2015 Technische Universität Braunschweig, IPS Überblick OO in Java Vererbung Abstrakte Klassen und Interfaces 21.10.2015 Dr. Werner Struckmann

Mehr