Programming 2 - Java

Vorbereitung Semesterprüfung.

Vorbereitung Semesterprüfung.


M. A.
Diese Lernkarten bieten einen umfassenden Überblick über fortgeschrittene Java-Programmierung an der Universität, mit Fokus auf objektorientierte Konzepte wie Klassen, Objekte, Design Principles und Multithreading. Sie decken Themen wie Coupling, Cohesion, Encapsulation und verschiedene UML-Diagramme ab, darunter Klassendiagramme und Sequenzdiagramme. Diese Lernkarten sind ideal für Studierende, die ihre Kenntnisse in Java vertiefen und die Prinzipien der objektorientierten Programmierung in der Praxis anwenden möchten.
Karten
21
Lernende
1
Sprache
Deutsch
Kategorie
Informatik
Stufe
Universität
Erstellt / Aktualisiert
15.06.2023 / 25.06.2025

Lernkarten

Was sind Ziele von OOP, bzw. welche 6 Eigenschaften sollte Code haben?

Efficient, extendable, maintainable, reliable, usable, reusable

Wie sieht eine CRC-Karte aus ? Was sind deren Inhalte?

 

Wie ist das Vorgehen beim Erstellen von CRC-Karten?

1. Auf Basis der Systemanforderungen ca. 5 Hauptkonzepte (= Nomen) finden. —> Classes

2. Sich fragen, was die Objekte dieser Klassen wissen und was sie mit diesem Wissen tun können. —> Responsibilities

3. Sich fragen, welche andere Objekte / Klassen eine Klasse kennen muss, damit sie ihre responsibilities wahrnehmen kann —> Collaborators

Was sind einige good practices beim Erstellen von CRC-Karten? (4)

- Papier und Stift verwenden
- Agil bleiben —> Mit Classes, Responsibilities und Collaborators spielen 
- Nicht die perfekte Lösung suchen —> Wird sowieso refactored
- Klassen challengen anhand den Design Principles

Welche 4 Arten von Klassen gibt es (im Kontext von CRC)?

1. Klassen, welche ein einzelnes Konzept aus der Problemumgebung repräsentieren (z.B. in der Geometrie -> Rechteck, im Banking -> BankAccount)

2. Klassen welche für die System-Implementierung benötigt werden (z.B. Controller, Factory, …)

3. Value Classes, welche essentielle Werte beinhalten (z.B. Position, Rechteck). Identität spielt keine Rolle und sind oft Immutable

4. Entity Classes. Identität spielt eine Rolle. (z.B. Pacman, Ghost)

Was sind 3 fundamentale Konzepte von OOP?

1. Encapsulation

2. Cohesion

3. Coupling

Was bedeutet Encapsulation? (4 Punkte)

- Klassen sind Blackboxes
- Konzept des Data Hiding -> Variablen sind gegenüber anderen Objekten nicht exposed
- Ist der Schlüssel für Reuse- und reliability
- Regel: Objekte sollen nur durch Method Calls miteinander interagieren

Was bedeutet Cohesion? (1 Punkt)
Wann ist Cohesion aus Sicht einer Klasse gegeben? (1 Punkt)

- Eine Klasse repräsentiert ein einzelnes Konzept
- Ein Public Interface ist cohesive, wenn dessen Feature mit dem Klassenkonzept übereinstimmen (z.B. Klasse Pacman darf das Spiel nicht starten können)

1. Was ist Coupling?
2. Wo ist Coupling grafisch dargestellt?

1. - Coupling = Klassenabhängigkeit. Ist gegeben, wenn Objekte einander gegenseitig brauchen
   - High Coupling = Viele Abhängigkeiten // Low Coupling = wenige
   - Coupling sollte minimiert werden, um den Impact von Interface-Änderungen zu minimieren


2.  - Diese Abhängigkeiten werden im Klassendiagramm visualisiert

Was sind Models?
Was ist das Go-To für Models? 

- Werden verwendet, um abstrakte Sicht des Systems zu erhalten (nur Relevantes wird gezeigt)
- UML (= 14 Diagramme, aufgeteilt in structure und behaviour diagrams)

Welche 2 Arten von Models gibt es und mit welchen Diagrammen werden diese räpresentiert?
Welcher Art sind diese Diagramme?
Was zeigen diese auf?

1. Static Model 
- Wird mit einem Klassendiagramm dargestellt
- Ist ein structure diagramm
- Sicht zur compile time

2. Dynamic Model 
- Wird mit dem Sequenzdiagramm dargestellt
- Ist ein behavour diagramm
- Sicht zur run time

Welche 6 Beziehungen kennt das Klassendiagramm?
Wie sehen die Symbole aus?

Wie werden folgende Multiplicities im Klassendiagramm angegeben:

- Beliebig viele
- Eines oder mehr
- Null oder eines
- Genau eines

Beliebig viele:   *
Eines oder mehr:   1..*
Null oder eines:   0..1
Genau eines:    1

Was ist ein Sequenzdiagramm? Beschreibe die Achsen, Formen, usw.

- Zeigt Objekte als „Lifelines“ (= Vertikale Balken)
- Zeit von oben nach unten, Objekte von links nach recht
- Zeigt Method Calls als Nachrichten zwischen Objekten (horizontale Pfeile)
- Returns von Methoden werden als gestrichelte Linien angegben

Was sind Design Principles?
Wie grenzen sich diese von den Fundamental Concepts ab? 
Welche gibt es?

Guidelines, um die Ziele der Fundamental Concepts zu erreichen

SOLID:
Single Responsibility Principle (SRP)
Open Closed Principle (OCP)
Liskov Substitution Principle (LSP)
Interface Segregation Principle (ISP)
Dependency Inversion Principle (DIP)

Was besagt das Singles Responsibility Principle (SRP) ?

Jede Klasse sollte nur eine Verantwortlichkeit haben —> Klassen bleiben klein und APIs überschaubar

Was besagt das Open Closed Principle (OCP) ?

System sollte offen für Erweiterung sein, jedoch geschlossen für Änderung

Existierender Code sollte nicht geändert werden müssen, um neue Funktionalitäten hinzuzufügen

Bsp: Geister in Pacman haben unterschiedliche Fortbewegungsarten —> Abstrakte Mover-Klasse mit spezifischen Subclasses statt 

Was besagt das Liskov Substitution Principle (LSP) ?

Wo immer ein Objekt einer SUPERKlasse erwartet wird, muss es auch möglich sein, ein Objekt einer SUBKlasse zu geben, ohne Änderungen vornehmen zu müssen.

- Preconditions der Superclass dürfen von abgeleiteten Klassen nicht eingeschränkt werden
- Postconditions dürfen nicht abgeschwächt werden

Was besagt das Interface Segregation Principle (ISP) ?

Clients (Objekte, die andere brauchen) sollten nicht von Methoden abhängen, die sie nicht verwenden
—> API einer Klasse sollte also in mehrere unabhängige Interfaces gesplittet werden (siehe SRP)

Was besagt das Dependency Inversion Principle (DIP) ?

Abhängigkeiten zwischen zwei Klassen unterschiedlicher Layers sollte nicht beidseitig sein, sondern vom oberen Layer zum unteren.

Welche 2 Arten gibt es, um Multithreading zu ermöglichen, wie implementiert man sie?

 

Gibt es Vor- / Nachteile?

1. ExampleClass extends Thread

ExampleClass e = new ExampleClass();

e.start();

 

2. ExampleClass implements Runnable

ExampleClass e = new ExampleClass();

Thread thread = new Thread(e);

thread.start();

 

Vor- / Nachteile

Das Implementieren via "extends Thread" braucht kein zusätzliches Thread-Objekt, dafür kann sie von keiner anderen Klasse extenden.

 

Die Implementation via Runnable Interface benötigt zwar ein zusätzliches Thread-Objekt, dafür wird die Inheritance nicht blockiert. Man kann mehrere Interfaces implementieren.

Erkläre die .join() Methode

thread1.join() pausiert den aktuellen thread so lange, bis thread1 fertig ist, und fährt danach weiter.

Lernen