Fachhochschule Esslingen Hochschule für Technik Sommersemester 2003 Zahl der Blätter: 7 Blatt Nummer: 1 Studiengang: Fachnummer: Wirtschaftsinformatik Prüfungsfach: Informatik 1/ 2 1 WF 2010 Semester: 2 Hilfsmittel: Name: Skript(e), Bücher Zeit: Vorname: 120 Minuten Matr.Nr.: Teil 1: Grundeigenschaften von Rechnern und Software Aufgabe 1.1 [3P] Nennen Sie mindestens 3 Arten von Programmen zur Softwareentwicklung Editor, Compiler, Linker, Debugger, Interpreter, ... Aufgabe 1.2 [6P] Nennen Sie die Rollen bei einem Software-Entwicklungsprojekt Projektleiter, Systemdesigner, Qualitätsverantwortlicher, Techn. Redakteur, Config. Manager, Programmierer Aufgabe 1.3 [6P+2ZP] Nennen Sie 3 “Arten” von Programmiersprachen, jeweils mit einem Beispiel. Was versteht man unter einer hybriden Programmiersprache? Prozedurale/Imperative- (Pascal,C), Objektorientierte (Smalltalk), Funktionale (ML), Logische (Prolog). Eine hybride Sprache enthält die Eigenschaften mehrerer Arten, z.B. prozedural und objektorientiert (C++) Aufgabe 1.4 [2P] Was versteht man unter strukturierter Programmierung bzw. welche 3 elementaren Anweisungen werden dabei zur Steuerung des Kontrollflusses verwendet? Nachvollziehbarer Kontrollfluß durch Verwendung strukturierter Anweisungen und Verzicht auf Sprünge um die Lesbarkeit/Wartbarkeit von Programmen zu verbessern. Elementare Anweisungen: Sequenz, Verzweigung, Schleife Aufgabe 1.5 [3P] Erläutern Sie den Unterschied zwischen Kopf- und Fußgesteuerten Schleifen. Wann würden Sie welchen Schleifentyp einsetzen? Kopfgesteuerte Schleife = abweisende Schleife, wird u.U. gar nicht betreten. Somit Einsatz wenn Schleifenbedingung am Anfang falsch sein kann (z.B. Referenz==null). Fußgesteuerte Schleife wird mindestens einmal durchlaufen. Aufgabe 1.6 [5P] Erläutern Sie die Gründe für die Wichtigkeit der Lesbarkeit von Programmen und nennen Sie Maßnahmen zu deren Verbesserung. Lesbarkeit ist wichtig weil (1) Programme im Team entwickelt werden (2) Mehr Software gewartet als neu erstellt wird (3) Lesbarkeit das Verständnis verbessert und Fehler vermeiden hilft. Maßnahmen sind z.B. Einrückung/Formattierung, sinnvolle Namen, Kommentare, kleine Module Fachhochschule Esslingen Hochschule für Technik Sommersemester 2003 Zahl der Blätter: 7 Blatt Nummer: 2 Studiengang: Fachnummer: Wirtschaftsinformatik Prüfungsfach: Informatik 1/ 2 1 WF 2010 Semester: 2 Hilfsmittel: Name: Skript(e), Bücher Zeit: Vorname: 120 Minuten Matr.Nr.: Teil 2: Grundlagen der objektorientierten Softwareentwicklung Aufgabe 2.1 [3P] Beschreiben Sie den Vorteil der Objektorientierung im Umgang mit Kunden. Bei der objektorientierung wird das Problem des Kunden “in dessen Sprache” mit Objekten aus der realen Welt modelliert. Dadurch wird das Verständnis verbessert, die Hürde zwischen realer Welt und technischer Lösung reduziert und Mißverständnisse / Fehlentwicklungen vermieden. Aufgabe 2.2 [2P] Erläutern Sie den Unterschied in der Struktur “klassischer” Programme mit Funktionen im Vergleich zu objektorientierten Programmen. Klassische Programme bestehen aus einer (baumförmigen) Funktionshierarchie, objektorientierte Programme bestehen aus einem Netz von Objekten, die über “Botschaften” kommunizieren. Aufgabe 2.3 [5P] Welche Bedeutung hat der Begriff der Kapselung bzw. des Information-Hiding für die Entwicklung und Wartung von Software (v.a. in Teams)? Durch Kapselung und Information-Hiding können Objekte / Module Implementierungsdetails verstecken. Somit können diese jederzeit ohne Konsequenzen für andere Objekte (bzw. deren Entwickler) geändert werden. Die Kooperation zwischen Objekten erfolgt über Schnittstellen. Aufgabe 2.4 [5P] Nennen Sie zu jeder der folgenden Beschreibungen den passenden Begriff Die Oberklasse aller Klassen Object Die Kombination aus Rückgabetyp, Name und Typ der formalen Parameter einer Methode Signatur der Methode Verfahren, bei dem ein Ergebnis mit Hilfe einer Schleife berechnet wird Iteration Erprobtes Muster zur Lösung von häufig wiederkehrenden Problemen (Design) Pattern Beziehung, bei der ein Objekt von einem oder mehreren anderen verwendet wird Aggregation Aufgabe 2.5 [5P] Erläutern Sie folgende Begriffe abstrakte Klasse: Eine Klasse, bei der mindestens eine Methode abstrakt, d.h. nicht implementiert ist.(nur Schnittst.) Vererbung (Spezialisierung, ist-ein Beziehung): Übernahme aller Einschaften aus einer Oberklasse zur Spezialisierung einer Abstraktion Fachhochschule Esslingen Hochschule für Technik Sommersemester 2003 Zahl der Blätter: 7 Blatt Nummer: 3 Studiengang: Fachnummer: Wirtschaftsinformatik Prüfungsfach: Informatik 1/ 2 1 WF 2010 Semester: 2 Hilfsmittel: Skript(e), Bücher Name: Zeit: Vorname: 120 Minuten Matr.Nr.: Teil 3: Elementare Java Syntax Aufgabe 3.1 [5P] Wie nennt man die Schlüsselwörter, die in Java zur Implementierung der Kapselung verwendet werden. Zählen Sie diese in der Reihenfolge von max. Kapselung bis gar keine Kapselung auf. Die Zugriffsmodifizierer : “private”, “” (package), “protected”, “public” Aufgabe 3.2 [5P] Nennen Sie die Konventionen zur Schreibweise der Namen von Klassen, Variablen und Konstanten in Java. Welche Schlüsselworte sind zur Definition von Konstanten notwendig? Klassen normale Großschreibung, Variablen Kleinschreibung, Konstanten komplett in Großbuchstaben als final static Aufgabe 3.3 [5P] Warum ist Java nicht “richtig objektorientiert”, was sind Wrapper-Klassen und wozu werden diese benötigt? In Java gibt es noch primitive Datentypen, deren Werte keine Objekte sind. Für diese Datentypen stehen Wrapper-Klassen zur Verfügung, die die jeweiligen Werte in ein Objekt verpacken (z.B. zum Speichern in objektbasierten Containern wie ArrayList). Daneben dienen Wrapper-Klassen auch zur Konvertierung von und zu Zeichenketten, z.B. Integer.parseInt(String) und Integer.toString(int). Aufgabe 3.4 [5P] Erläutern Sie anhand eines Beispiels die Syntax einer for-Schleife in Java und wandeln Sie diese anschließend in eine äquivalente while-Schleife um. for (int i=0; i<5; i++) { // mach was } int i = 0, Deklaration der Schleifenvariablen und Anfangsbedingung i<5, Abbruchbedingung i++, Zustandsänderung für Schleifenfortschritt und späteren Abbruch int i = 0; while (i<5) { // mach was i++; } Fachhochschule Esslingen Hochschule für Technik Sommersemester 2003 Zahl der Blätter: 7 Blatt Nummer: 4 Studiengang: Fachnummer: Wirtschaftsinformatik Prüfungsfach: Informatik 1/ 2 1 WF 2010 Semester: 2 Hilfsmittel: Name: Skript(e), Bücher Zeit: Vorname: 120 Minuten Matr.Nr.: Aufgabe 3.5 [5P] Ergänzen Sie in die get- und set-Methoden in folgendem Code-Fragment und implementieren Sie anschließend die Methode printAllValues() mit Hilfe des IteratorPatterns um alle Elemente auf der Konsole auszugeben. public class PersonenListe { ArrayList persons; public int getPerson(int index) { return (Person)persons.get(index); } public void setPerson(int index, Person p) { persons.add(index, p); } public void printAllValues() { Iterator iter = persons.iterator(); while (iter.hasNext()) { System.out.println( iter.next()); } } } Fachhochschule Esslingen Hochschule für Technik Sommersemester 2003 Zahl der Blätter: 7 Blatt Nummer: 5 Studiengang: Fachnummer: Wirtschaftsinformatik Prüfungsfach: Informatik 1/ 2 1 WF 2010 Semester: 2 Hilfsmittel: Skript(e), Bücher Name: Zeit: Vorname: 120 Minuten Matr.Nr.: Teil 4: Verständnis von Java Programmen Aufgabe 4.1 [10P] Skizzieren Sie das Fenster, das von folgendem Code implementiert wird. Was passiert nachdem man auf den OK-Button klickt? package klausur.ss2003; import java.awt.event.*; import javax.swing.*; public class LayoutAnalyse extends JFrame { JTextField nameField; JButton okButton; JButton cancelButton; public LayoutAnalyse() { super("Login"); setDefaultCloseOperation( EXIT_ON_CLOSE); JPanel contentPane = new JPanel(); contentPane.setLayout( new BoxLayout( contentPane, BoxLayout.Y_AXIS)); JPanel inputPane = new JPanel(); inputPane.setLayout( new BoxLayout( inputPane, BoxLayout.X_AXIS)); inputPane.add( new JLabel("Name")); nameField = new JTextField(20); inputPane.add( nameField); contentPane.add( inputPane); JPanel buttonPane = new JPanel(); buttonPane.setLayout( new BoxLayout( buttonPane, BoxLayout.X_AXIS)); okButton = new JButton("OK"); okButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e) { System.out.println("Hello, " + nameField.getText()); System.exit(0); } }); cancelButton = new JButton("Cancel"); cancelButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e) { System.exit(1); } }); buttonPane.add( okButton); buttonPane.add( cancelButton); contentPane.add( buttonPane); getContentPane().add(contentPane); pack(); } public static void main(String[] args) { new LayoutAnalyse().show(); } } 2-zeiliges Fenster mit Eingabe oben und Buttons unten; bei OK folgt Begrüssung mit Namen Fachhochschule Esslingen Hochschule für Technik Sommersemester 2003 Zahl der Blätter: 7 Blatt Nummer: 6 Studiengang: Fachnummer: Wirtschaftsinformatik Prüfungsfach: Informatik 1/ 2 1 WF 2010 Semester: 2 Hilfsmittel: Skript(e), Bücher Name: Zeit: Vorname: 120 Minuten Matr.Nr.: Aufgabe 4.2 [10P] Finden und korrigieren Sie die Fehler in folgendem Programm package klausur.ss2003; public class Errors { int errorCount; public void Errors(boolean errorCount) { // wrong type errorCount = errorCount; // missing this } public String toString() { return toString() + ": errorCount=" + errorCount; // missing super } public static void main(String args) { // missing[] System.out.println( new Errors(5)) // missing ; } } Fachhochschule Esslingen Hochschule für Technik Sommersemester 2003 Zahl der Blätter: 7 Blatt Nummer: 7 Studiengang: Fachnummer: Wirtschaftsinformatik Prüfungsfach: Informatik 1/ 2 1 WF 2010 Semester: 2 Hilfsmittel: Skript(e), Bücher Name: Zeit: Vorname: 120 Minuten Matr.Nr.: Aufgabe 4.3 [10P] Implementieren Sie die fehlenden Stellen in folgendem Programm package klausur.ss2003; import java.awt.*; import java.awt.event. *; import javax.swing. *; public class TrafficLight extends JPanel { public final static int RED = 1; public final static int YELLOW = 2; public final static int GREEN = 3; int status = RED; JPanel redPanel; JPanel yellowPanel; JPanel greenPanel; JButton toggleButton; public TrafficLight() { setLayout( new BoxLayout( this, BoxLayout.Y_AXIS)); redPanel = new JPanel(); add( redPanel); yellowPanel = new JPanel(); add( yellowPanel); greenPanel = new JPanel(); add( greenPanel); toggleButton = new JButton("toggle"); toggleButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e) { toggleStatus(); } }); add( toggleButton); toggleStatus(); } void toggleStatus() { switch (status) { case RED: redPanel.setBackground( Color.red); yellowPanel.setBackground( Color.black); greenPanel.setBackground( Color.black); status = YELLOW; break; case YELLOW: redPanel.setBackground( Color.black); yellowPanel.setBackground( Color.yellow); greenPanel.setBackground( Color.black); status = GREEN; break; case GREEN: redPanel.setBackground( Color.black); yellowPanel.setBackground( Color.black); greenPanel.setBackground( Color.green); status = RED; break; } } }