English version available below.
Dieses Projekt war für die Einführung in Werkzeugunterstützte Softwareentwicklung gedacht. Dabei war uns Studierenden freigestellt in welchem Projekt die Werkzeuge zum Einsatz kommen. In diesem Projekt habe ich Folgende Werkzeuge benutzt:
- Eclipse
- Git
- Maven
- Maven Unit Tests / JUnit
- Jenkins
- Doxygen
Ich habe mir überlegt, eine Klassenhierarchie zu entwickeln, mit der Basiseinheiten als Klassen erstellt werden können, wie z.B. Distanz: Meter, Zentimeter; Zeit: Stunde,Sekunde. Diese Basiseinheiten stellen Funktionen bereit, sich mit anderen Basiseinheiten addieren zu können. Somit sollte eine "Meter" Klasse nicht mit einer "Stunde" Klasse addierbar sein. Dies habe ich über eine dreistufige Typisierungshierarchie gelöst:
Deklaration einer Einheit:
public class Meter extends Distance_Abstract<Meter> {…}
Deklaration einer einheitenspezifischen Klasse:
public abstract class Distance_Abstract<T extends Distance_Abstract> extends BaseUnit<T,Distance_Abstract> {…}
Deklaration der Basiseinheitenklasse:
public abstract class BaseUnit<T extends F, F extends BaseUnit> {
public T plus(F toAdd) {…}
}
Des Weiteren gibt es Einheiten, die durch die Kombination der Basiseinheiten entstehen, wie z.B. km/h. Diese wurden durch die "Units" Klasse implementiert.
Die "HelloWorld" Klasse zeigt Beispiele zur Benutzung auf.
In diesem Projekt konnte ich viel über generic Abhängigkeiten in Java inclusive der Benutzung von unbounded Wildcards (in der Klasse "Units") erfahren.
This project was for showing Tool Assisted Software Development in a hands on project. We studends were allowed to use any project and tools for this course. I chose following tools:
- Eclipse
- Git
- Maven
- Maven Unit Tests / JUnit
- Jenkins
- Doxygen
I chose to use a class hirarchie to create base units as classes, like distance: meter, centimeter; time: hour, second. Those base units provide functionality to interact with base units of the same kind. Therefore a "meter" should not be, for example addable to an hour. I managed to do this via a three staged type hirarchie.
Declaration of a specific unit:
public class Meter extends Distance_Abstract<Meter> {…}
Declaration of a specific unit class:
public abstract class Distance_Abstract<T extends Distance_Abstract> extends BaseUnit<T,Distance_Abstract> {…}
Declaration of the base unit:
public abstract class BaseUnit<T extends F, F extends BaseUnit> {
public T plus(F toAdd) {…}
}
Furthermore there are Units, that can be created through combining base units, for example km/h. This Funktion is Provided through the class "Units".
The "HelloWorld" class shows usage examples.
In this project I could learn a lot about dependency generics including the usage of unbounded wildcards (in the class "Units").