Klausur Softwaretechnologie SS 2016

Ähnliche Dokumente
Klausur Softwaretechnologie SS 2017

Klausur Softwaretechnologie SS 2012

Klausur Softwaretechnologie WS 2014/15

Klausur Softwaretechnologie WS 2010/11

Klausur - Informatik I SS 05. Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel

Allgemeine Informatik II SS :30-11:30 Uhr

Klausur Grundlagen der Programmierung

Klausur Softwaretechnologie WS 2011/12

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Matrikelnummer: 1 Aufgabe 1: Quickies (30 Punkte) a) Wird das folgende Programm von einem Java-Übersetzer ohne Beanstandungen übersetzt? Falls nicht,

Einstieg in die Informatik mit Java

Aufgabe 1: Quer durch Java (4 Punkte) super abstract abstract protected

Semestralklausur Informatik I - Programmierung

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

UNIVERSITÄT SIEGEN Fachbereich 12, Elektrotechnik und Informatik Fachgruppe Betriebssysteme / verteilte Systeme

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Probeklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2017/18

OOSE 01 JAVA MIT BLUEJ UND UML-BY-EXAMPLE

Klausur Softwaretechnik I

Klausur Softwaretechnik

Mengen und Multimengen

7. Objektorientierung. Informatik II für Verkehrsingenieure

Klausur Algorithmen und Datenstrukturen I SS 03

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

Klausur. Softwareentwurf. 22. März 2011 Bearbeitungszeit: 120 Minuten

Softwareentwicklung II (IB) Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Java: Implemen'erung von Assozia'onen.

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten

Klausur. Softwareentwurf. 14. Februar 2011 Bearbeitungszeit: 120 Minuten

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Klausur. Softwareentwurf. 04. Februar 2013 Bearbeitungszeit: 120 Minuten

Probeklausur 2. Name: Vorname: Matrikelnr.: Datum:

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Konstruktor. public Rational(int i) { Zaehler = i; Nenner = 1; }

OOSE 9 OOA: Klassen und Objektdiagramme (Hörsaalübung)

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Klausur. Softwareentwurf. 13. März 2013 Bearbeitungszeit: 120 Minuten

Klausur zur Vorlesung Informatik 1 im Wintersemester 2014/2015 am 18. Februar Bearbeitungszeit: 90 Minuten Gesamtpunktezahl: 90 Punkte

Einführung in die Programmierung. (K-)II/Wb17

Aufgaben Objektentwurf

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.

Teil V. Generics und Kollektionen in Java

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Dynamische Datenstrukturen

HdM-Stuttgart, FB1, MI Probeklausur 1, Informatik 4 Prof. Dr. Edmund Ihler. Fachhochschule Stuttgart Hochschule der Medien.

Grundlagen der Informatik 0

Einstieg in die Informatik mit Java

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

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

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 15/16. Kapitel 12. Listen. Listen 1

Probeklausur zur Vorlesung

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

Allgemeine Informatik II SS :30-13:30 Uhr

JUnit. Software-Tests

Matrikelnummer:

Softwareentwicklung Lösungen zu Programmierung von Klassen mit BlueJ

Beispielprüfung CuP WS 2015/2016

OOSE11 OOA: Klassen- und Objektdiagramme

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Scheinklausur zur Vorlesung Praktische Informatik I. 12. November Punkteübersicht

Programmiermethodik. Übung 3

JAVA KURS COLLECTION

Software Entwicklung 1

KLAUSUR SOFTWARETECHNIK

Programmieren in Java -Eingangstest-

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Programmiermethodik 1. Klausur

Einführung in die Programmierung und Programmiersprachen (OOP)

Klausur: Java (Liste P)

Prof. Dr. Uwe Schmidt. 30. Januar 2017

Transkript:

Fakultät Informatik Institut für Software- und Multimediatechnik, Professur Softwaretechnologie Technische Universität Dresden, 01062 Dresden Klausur Softwaretechnologie SS 2016 Prof. Dr.rer.nat.habil. Uwe Aßmann Name: Vorname: Immatrikulationsnummer: Aufgabe Maximale Punktanzahl 1 20 2 13 Erreichte Punktanzahl 3 57 Gesamt 90 Hinweise: In der Klausur ist als Hilfsmittel lediglich ein A4-Blatt, beidseitig beschrieben, zugelassen. Die Klammerung der Aufgabenblätter darf nicht entfernt werden. Tragen Sie bitte die Lösungen auf den Aufgabenblättern ein! Verwenden Sie keine roten, grünen Stifte oder Bleistifte! Es ist kein eigenes Papier zu verwenden! Bei Bedarf ist zusätzliches Papier bei der Aufsicht erhältlich. Bitte jedes zusätzliche Blatt mit Name, Vorname und Immatrikulationsnummer beschriften. Es sind alle Aufgabenblätter abzugeben! Ergänzen Sie das Deckblatt mit Name, Vorname und Immatrikulationsnummer! Halten Sie Ihren Studentenausweis und einen Lichtbildausweis zur Identitätsprüfung bereit.

2 Aufgabe 1: GitHub (20 Punkte) GitHub ist eine webbasierte Plattform, die Software-Entwicklungsprojekte bereitstellt und diese einer Versions- und Konfigurationsverwaltung unterstellt. Im Folgenden wird eine vereinfachte Sicht auf GitHub beschrieben. In GitHub gibt es Nutzer (User) und Organisationen (Organization). Innerhalb einer Organisation ist ein Nutzer ein Teilnehmer (Participant), der wiederum entweder ein Owner und/oder ein Member ist. Eine Organisation kann beliebig viele Repositories (Repository) anlegen, die ausschließlich dieser Organisation gehören. Eine Organisation kann aus beliebig vielen Teams (Team) bestehen, die nur innerhalb der Organisation existieren. Ein Team besteht aus einer Menge von Teilnehmern. Ein Teilnehmer kann gleichzeitig verschiedenen Teams angehören. Ein Team hat Zugriff auf beliebig viele Repositories. Ebenso können beliebig viele Teams auf ein Repository zugreifen. Außer den Teilnehmern der Organisation können weitere Nutzer Zugriff auf beliebige Repositories der Organisation erhalten. Diese Nutzer werden als Outside_Collaborator bezeichnet. Es werden drei Arten von Zugriffsrechten (Permission) unterschieden: READ, WRITE, ADMIN, die ein Outside-Collaborator auf ein Repository haben kann. Organisationen, Repositories, Github Nutzer und Teams haben einen Namen (Name). Zusätzlich haben Organisationen, Repositories und Teams eine Sichtbarkeit (Visibility). Erstellen Sie ein Analyse-Klassendiagramm (Domänenmodell)! Berücksichtigen Sie dabei folgende Hinweise: Die Modellierung der Beziehungen soll aus der Sicht einer Organisation erfolgen! Denken Sie an Klassen, Enumerationen, Klassenbeziehungen, Rollennamen und Attribute! Es sollen keine Operationen modelliert werden! Alle domänspezifischen Begriffe, die im obigen Text kursiv geschrieben sind, müssen im Modell wiederzufinden sein!

3

4 Aufgabe 2: Wissensfragen (13 Punkte) Antworten Sie jeweils kurz auf die folgenden Fragen! (1) Nennen Sie die drei wesentlichen Eigenschaften eines Objektes im Kontext des objektorientierten Paradigmas (3 P.)! ----------------------------------------------------------------------------------------------------------- (2) Auf welches Modellelement der UML wird eine Verantwortlichkeit einer CRC- Karte abgebildet (1 P.)? ----------------------------------------------------------------------------------------------------------- (3) Was bedeutet das Testen von Klassen und Methoden? Kreuzen Sie die richtige Antwort an (1 P.)! o Validation o Stichprobenhafte Validation o Formale Verifikation o Stichprobenhafte Verifikation (4) Wie nennt man einen automatisierten Vergleich von Ausgabedaten (gleicher Testfälle) unterschiedlicher Versionen eines Programms (1 P.)? ----------------------------------------------------------------------------------------------------------- (5) Ordnen Sie die Merkmalsausprägungen von Datenstrukturen den Collection- Klassen in Java zu! Kreuzen Sie dazu das entsprechende Feld in der Tabelle an (2 P.)! mit Schlüssel geordnet sortiert mit Duplikate LinkedList HashSet TreeMap

5 (6) Welche Implementierung des Interfaces java.util.list bietet bei welcher vorherrschenden Operation auf der Liste die höhere Effizienz? Kreuzen Sie dazu das entsprechende Feld in der Tabelle an (2 P.)! Lesen eines Objektes Iterieren über alle Objekte Einfügen eines Objektes Löschen eines Objektes ArrayList LinkedList (7) Welche der folgenden Aussagen sind in Bezug auf JUnit richtig? Kreuzen Sie die richtigen Antworten an (2 P.)! o JUnit kann einen Defect wie z.b. fehlenden oder falschen Code erkennen. o Error Guessing wird durch JUnit unterstützt. o Ein Error tritt auf, wenn bei der Ausführung des Tests eine Exception bis in die Testmethode gelangt. o Ein Failure tritt auf, wenn in einer Testmethode eine falsche Berechnung festgestellt wird (falscher Ausgabewert). o Bei einem Bug handelt es sich um einen fehlgeschlagenen Assert-Aufruf. (8) Wie nennt man in Java eine Typumwandlung (1 P.)? -----------------------------------------------------------------------------------------------------------

6 Aufgabe 3: Rechnungen (Invoice) (57 Punkte) In einem Programmsystem sollen Rechnungen mit ihren Rechnungsposten implementiert werden. Der Entwurf dazu ist im Folgenden sowohl textuell als auch als Entwurfsklassendiagramm gegeben. Eine Rechnung (Invoice) besteht aus beliebig vielen Rechnungsposten (LineItem). Die dazugehörige Datenstruktur (mylineitems) wird durch eine TreeMap<Integer,LineItem> realisiert, wobei der Schlüssel der Map eine laufende Postennummer (position beginnend mit 1) ist. Auf der Rechnung können Rechnungsposten hinzugefügt werden (addlineitem()). Die tostring()-methode ist wie bei den anderen Klassen dazu da, die Konsolenausgabe (siehe Seite 8) geeignet zu formatieren. Das Gleiche gilt für die Methode discountdescription(). Ein Rechnungsposten kennt sein zu verkaufendes Objekt (Item) und dessen Stückzahl (number). Es gibt verschiedene Arten (Klassen) von Objekten. Alle diese Objekte haben einen Namen (name). Bei einzelnen Produkten (Product) wird ein fester Rechnungspreis (price) im Konstruktor des Objektes übergeben. Bei Packen (Bundle) von beliebigen Objekten wird der Rechnungspreis als Summe der Preise der in einem Packen enthaltenen Objekte berechnet (getprice()). Ein Packen entsteht, indem diesen Packen mit additem() beliebige Objekte hinzugefügt werden. Achtung, ein Objekt kann mehrmals hinzugefügt werden. Bei preisreduzierten Objekten (DiscountedItem), die zusätzlich einen Discount (discount) kennen, wird der Rechnungspreis (getprice()) durch Anwendung des Discounts (discount) berechnet. Dabei gibt es zwei Varianten von preisreduzierten Objekten: o Anwendung eines absoluten Discounts, bei dem der Discount in Euro angegeben wird (AbsoluteDiscount). o Anwendung eines prozentualen Discounts, bei dem der Discount in Prozent angegeben wird (PercentageDiscount). Objekte der Klasse LineItem werden anhand ihrer Objekte der Klasse Item verglichen. Objekte der Klasse Item werden anhand ihres Namens (name) verglichen. Lösen Sie folgende Teilaufgaben: I. Machen Sie sich die Struktur eines Rechnungsobjektes anhand eines Objektdiagramms klar. Dazu ist auf Seite 8 der Ausschnitt aus einer Client-Klasse mit der Erzeugung einer Rechnung als auch die dazugehörige Konsolenausgabe gegeben. Stellen Sie die erzeugten Objekte (Objektname reicht) und deren Links in einem Objektdiagramm dar! II. Vervollständigen Sie die Implementierung der Java-Klassen des gegebenen Codegerüstes! Parameter in Methoden (übergebene Objekte) müssen nicht auf null getestet werden! III. Welche Entwurfsmuster sind im Entwurf enthalten? Finden Sie mindestens zwei Entwurfsmuster! o Achtung, raten Sie nicht! Für falsch angegebene Entwurfsmuster gibt es Punktabzug. o Tragen Sie die gefundenen Entwurfsmuster als UML-Kollaboration in das Entwurfsklassendiagramm ein (nächste Seite)!

7

8 Eine Client-Klasse erzeugt eine Rechnung wie folgt: Invoice invoice = new Invoice(); Product product1 = new Product("p1", 20); Product product2 = new Product("p2", 10); Product product3 = new Product("p3", 1); Bundle bundle1 = new Bundle("b1"); bundle1.additem(product1); bundle1.additem(product1); bundle1.additem(product3); DiscountedItem discounteditem1 = new PercentageDiscount("d1", product2,10); DiscountedItem discounteditem2 = new AbsoluteDiscount("d2",product2,2); LineItem lineitem1 = new LineItem(product1,2); LineItem lineitem2 = new LineItem(product2,1); LineItem lineitem3 = new LineItem(bundle1,3); LineItem lineitem4 = new LineItem(discountedItem1, 1); LineItem lineitem5= new LineItem(discountedItem2,1); invoice.addlineitem(lineitem1); invoice.addlineitem(lineitem2); invoice.addlineitem(lineitem3); invoice.addlineitem(lineitem4); invoice.addlineitem(lineitem5); Der Aufruf der Methode System.out.println(invoice); gibt auf der Konsole Folgendes aus: LineItem 1: (Product p1, Preis: 20.0 EUR, Anzahl: 2, Postenpreis: 40.0) LineItem 2: (Product p2, Preis: 10.0 EUR, Anzahl: 1, Postenpreis: 10.0) LineItem 3: (Bundle b1 bestehend aus [Product p1, Preis: 20.0 EUR, Product p1, Preis: 20.0 EUR, Product p3, Preis: 1.0 EUR] Bundle Preis: 41.0, Anzahl: 3, Postenpreis: 123.0) LineItem 4: (PercentageDiscount p2, Preis: 9.0 EUR (Discount 10.0%, Originalpreis: 10.0 EUR), Anzahl: 1, Postenpreis: 9.0) LineItem 5: (AbsoluteDiscount p2, Preis: 8.0 EUR (Discount 2.0 EUR, Originalpreis: 10.0 EUR), Anzahl: 1, Postenpreis: 8.0)

Zeichnen Sie das Objektdiagramm (Teilaufgabe I)! 9

10 Vervollständigen Sie den folgenden Java-Code (Teilaufgabe II)! import java.util.*; // gilt für alle Klassen public class Invoice { public Invoice() { public void addlineitem (LineItem lineitem) { public String tostring(){ String out =""; Set<Map.Entry<Integer, LineItem>> set = mylineitems.entryset(); for (Map.Entry<Integer, LineItem> entry : set){ out = out + "LineItem " + entry.getkey() + ": " + entry.getvalue(); return out; public class LineItem { public String tostring(){ return "(" + item + ", Anzahl: " + number + ", Postenpreis: " + number*item.getprice() + ") \n" ;

11 public class Item { public String tostring() { return getclass().getname() + " " + name + ", Preis: " + getprice() + " EUR"; public class Bundle { public Bundle(String name) { public void additem (Item item){ public String tostring(){ return getclass().getname() + " " + name + " bestehend aus \n" + bundleitems.tostring() + " \n Bundle Preis: " + getprice(); public double getprice() {

12 public class DiscountedItem { public DiscountedItem(String name, Item item, double discount) { public String tostring() { return getclass().getname() + " " + name + ", Preis: " + this.getprice() + " EUR" + discountdescription()+", Originalpreis: " +item.getprice()+" EUR)"; public class AbsoluteDiscount { public AbsoluteDiscount(String name, Item item, double discount) { public String discountdescription() { return " (Discount " + discount + " EUR"; public class PercentageDiscount { public PercentageDiscount(String name, Item item, double discount) { public String discountdescription() { return " (Discount " + discount + "%";