Podcast
Questions and Answers
Was ist das Hauptziel der Boundary-Analysis?
Was ist das Hauptziel der Boundary-Analysis?
Welches ist ein Beispiel für eine Partition bei der Schokoladenfabrik?
Welches ist ein Beispiel für eine Partition bei der Schokoladenfabrik?
Was wird zurückgegeben, wenn das Gesamtgewicht mit den verfügbaren Tafeln nicht erreicht werden kann?
Was wird zurückgegeben, wenn das Gesamtgewicht mit den verfügbaren Tafeln nicht erreicht werden kann?
Welche Funktion hat die Methode calculate in der Klasse ChocolateBags?
Welche Funktion hat die Methode calculate in der Klasse ChocolateBags?
Signup and view all the answers
Welcher Testfall könnte durch das Konzept der Äquivalenzklassen abgedeckt werden?
Welcher Testfall könnte durch das Konzept der Äquivalenzklassen abgedeckt werden?
Signup and view all the answers
Was passiert, wenn die Anzahl der großen Tafeln kleiner ist als die maximale berechnete Anzahl?
Was passiert, wenn die Anzahl der großen Tafeln kleiner ist als die maximale berechnete Anzahl?
Signup and view all the answers
In welchem Szenario wird die Methode calculate unterfordert?
In welchem Szenario wird die Methode calculate unterfordert?
Signup and view all the answers
Study Notes
Praktische Informatik I: Imperative Programmierung und Objektorientierung - Logging und Records
- Das Thema ist Praktische Informatik I, konzentriert sich auf imperative Programmierung und Objektorientierung, mit einem Fokus auf Logging und Records.
- Der Dozent ist Prof. Dr. Nico Hochgeschwender von der Universität Bremen.
- Das Material basiert teilweise auf Vorlesungsfolien von Prof. Gips von der Hochschule Bielefeld.
- Die Folien wurden am 10. Dezember 2024 präsentiert.
- Die Veranstaltung ist Teil des Software Engineering for Cognitive Robots and Systems (SECORO) Programms.
Lernziele
- Die Studenten sollen das Konzept der Partitionen verstehen und anwenden, um Testfälle für eigene Probleme zu entwickeln.
- Das Konzept der Äquivalenzklassen wird erklärt.
- Die Erstellung und Ausführung von parametrisierten Tests mit JUnit für Problemstellungen wird gezeigt.
- Das Konzept der Boundary-Analysis wird vermittelt, um es für eigene Problemstellungen anzuwenden.
Wiederholung: Testen der Randwerte
- Eine Schokoladenfabrik produziert Schokoladen-Pakete (ChocolateBags) mit variablen Gesamtgewichten.
- Die Pakete können mit kleinen (1 kg) und grossen (5 kg) Tafeln gefüllt werden.
- Die Füllung erfolgt zuerst mit grossen, dann mit kleinen Tafeln, falls notwendig.
- Partitionen für Gesamtgewicht-Berechnungen und benötigte Tafeln werden identifiziert (z.B., kleene Tafel 1, grosse Tafel 1, Gesamtgewicht 10).
- Codebeispiel (public class ChocolateBags) für die Berechnung der benötigten Tafeln ist in den Folien gegeben.
Wiederholung: Testen der Randwerte (Fs.)
- Beispiele für Tests (totallsTooBig, onlyBig) mit erwarteten Resultaten (z.B., Gesamtgewicht 10, kleene Tafel 5, grosse Tafel 3 -> Ergebnis 0, Gesamtgewicht 10, kleene Tafel 1, grosse Tafel 1 -> Ergebnis -1) werden gezeigt.
- Tests sind mit JUnit geschrieben und im Code gezeigt.
- Ein Fehlerbericht für ein fehlendes Ergebnis bei einer bestimmten Kombination von Gesamtgewicht und Anzahl an grossen und kleinen Tafeln wird thematisiert.
- Boundary-Value-Analyse (Grenzwert-Analyse) wird für Problemstellungen mit Gesamtgewicht 17 kg demonstriert.
Poor man's debugging mit System.out
- Der Ansatz, System.out zur Ausgabe von Debugging-Informationen zu verwenden, wird kritisch betrachtet.
- Der Ansatz hat Nachteile wie fehlende Übersichtlichkeit, geringe Wartbarkeit und ungünstige Performance.
- Die Ausgabe erfolgt direkt auf die Konsole, ohne Kontrolle über den Ausgabeort.
Java Logging API
- Die Java Logging API (java.util.logging) besteht aus Anwendung, Logger, Handler, Output und Formatter.
- Die Architektur ermöglicht eine strukturierte und erweiterbare Logarithmen.
Erzeugen neuer Logger
- Die Methode
getLogger
aus demjava.util.logging
-Paket wird verwendet, um einen neuen Logger zu erzeugen. - Die Nutzung des voll qualifizierten Klassennamens für die eindeutige Identifizierung des Loggers wird empfohlen, um z.B. Fehlerquellen leichter zu lokalisieren.
- Es gibt alternative Namen für die Lokalisierung der Herkunft des Fehlers.
Ausgabe und Wichtigkeit von Logmeldungen
- Java Logging definiert sieben log levels (SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST), um die Bedeutung und Priorität der Logmeldungen zu klassifizieren.
Logging-Handler
- Mehrere Handler können einem Logger zugeordnet sein.
- Jeder Handler hat seinen eigenen Log-Level.
- Standard-Handler (StreamHandler, ConsoleHandler, FileHandler) mit Formatter (z.B., SimpleFormatter, XMLFormatter) zur Ausgabe der Log-Informationen.
Logger-Hierarchie
- Logger bilden eine Hierarchie, welche über Namen (z.B., "a", "a.b") strukturiert ist.
- Jeder Logger kennt seinen Eltern-Logger und es ist möglich, Log-Level per
setUseParentHolders(false)
zu deaktivieren, um diese Log-Weiterleitung zu kontrollieren.
Record-Klassen: Motivation
- Der Boilerplate-Code für die Implementierung von Klassen mit Datenattributen und Gettern kann mit Record-Klassen vereinfacht werden.
- Ein
public record Berg(String name, int hoehe)
Beispiel wird gezeigt.
Klasse Berg als Record
- Record-Klassen sind immutable (unveränderlich), die Attribute sind private final und werden in den Konstruktoren initialisiert.
- Record-Klassen bieten Getter für die Attribute.
- Records werden von Java.lang.Record abgeleitet und können keine anderen Klassen erweitern.
Records: Prüfungen im Konstruktor
- Beispiele für die Überschreibung des Record-Konstruktors für die Validierung der Parameter (Name, Höhe) werden gezeigt.
- Überladene Konstruktoren erlauben initialisierte Werte oder default Werte für die Attribute.
Getter bei Records
- Es werden Beispiele für Records mit und ohne explizit deklarierten Gettern gegeben.
Kommandozeilenparameter und Auswertung von Kommandozeilenparametern
- Parameter (z.B.,
--debug
) können beim Start eines Programmes über die Kommandozeile übergeben werden. - Die übergebenen Parameter können geprüft und parsed werden, umz.B. Log Level zu setzen.
java.util.properties
-
java.util.Properties
wird für die Verwaltung von Schlüssel-Wert-Paaren (z.B., Configuration der Anwendung) eingesetzt. - Die Properties werden häufig mit der Endung
.properties
gespeichert. - Laden und Speichern von Properties ist möglich, z.B., mit
load()
undstore()
. - ISO-8858-1-Kodierung ist für den Standard von Properties definiert.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Description
In diesem Quiz zur Praktischen Informatik I werden zentrale Themen der imperativen Programmierung und Objektorientierung behandelt. Fokussiert auf Logging und Records, unterstützen die Lernziele die Studierenden dabei, Testfälle zu entwickeln und verschiedene Testmethoden wie Äquivalenzklassen und Boundary-Analysis zu verstehen. Ideal für Studierende im SECORO Programm.