Wie populär ist Design by Contract in Java und was haltet ihr davon?

icarus2

Top Contributor
Hi

Ich hatte letztes Semester eine Vorlesung "Einführung in die Programmierung mit Eiffel", die von Bertrand Meyer gehalten wurde. Natürlich lernten wir da das Design by Contract (Meyer ist ja der Erfinder davon und auch von Eiffel).

Wie sieht es mit DbC in Java aus? Ich habe im Internet verschiedene Ansätze gefunden. Habe auch ein par Artikel darüber gelesen. Nutzt jemand von euch DbC vom programmieren?

Vielleicht etwas zu meiner Erfahrung:
Als ich das erste mal von DbC hörte und es anwenden musste, empfand ich es als lächerlich. Ich dachte, man könnte es onehing nicht brauchen, da die Contracts meistens offensichtlich sind und solche Dinge. Nachdem ich ein halbes Jahr sehr viel mit Contracts programmiert habe habe ich sie jedoch sehr zu schätzen gelernt und aus meiner Sicht ist das DbC äusserst nützlich. Auch wenn es beim programmieren etwas mehr Zeit braucht, so findet man sehr schnell Fehler. Es ist definitiv ein mächtiges Hilfsmittel, um korrekte Software zu entwickeln.
 

jgh

Top Contributor
ich hatte davon schonmal was gehört, genutzt habe ich es noch nie...und nach kurzen Studium von Dbc der Wiki-Seite, sehe ich -wenn ich ehrlich bin- keine großen Unterschiede zu einem stinknormalen Interface.

Aber wenn du gute Erfahrung damit gemacht hast, würde ich mal interessieren...was denn der große Vorteil von Dbc gegenüber Interfaces ist?
 
M

maki

Gast
Aber wenn du gute Erfahrung damit gemacht hast, würde ich mal interessieren...was denn der große Vorteil von Dbc gegenüber Interfaces ist?
DbC bietet mehr Semantik als Interfaces, in Interfaces kannst du ja nur Typen festlegen, mit DbC kannst du für den Inhalt von Parametern Vorbedingungen und Nachbedingungen festlegen.

Es gitb ein neues Google Projekt dazu: cofoja - Project Hosting on Google Code
Leidet imho an 2 Problemen: Strings sind nicht wirklich refactoring freundlich (auch wenn zB. Eclipse auch dafür Unterstützung bietet), und baut auf Java Assertions auf, welche per default abgeschaltet sind.

Es gibt auch einen JSR der in diese Richtung geht(JSR-000303 Bean Validation), aber imho nicht soweit wie Google Contracts.
 

musiKk

Top Contributor
Die Semantik von Vor- und Nachbedingungen in Interfaces läuft bisher eben über JavaDoc. Der wahre Gewinn an einer Sprachunterstützung von DbC liegt imho bei den Invarianten. Zustand ist immer schwierig zu beurteilen und Invarianten können dabei sehr helfen.

Betonung auf Sprachunterstützung: Dass die Invarianten in o. g. Projekt als Strings beschrieben werden, sehe ich auch kritisch. Da haben wir im Prinzip einen Compiler im Compiler...

@icarus2: In welchem Zusammenhang hast Du denn DbC in der Praxis verwendet? Eiffel? Java?
 

icarus2

Top Contributor
@icarus2: In welchem Zusammenhang hast Du denn DbC in der Praxis verwendet? Eiffel? Java?

Ich habe es in Zusammenhang mit Eiffel gebraucht. In Java habe ich noch nie damit gearbeitet.


Ich finde auch die Invarianten unglaublich nützlich, weil die Invarianten einen gewissen Zustand einer Klasse garantieren, der sonst nur sehr mühsam zu überprüfen ist.

Die Preconditions finde ich gut, weil sofort klare Fehlermeldungen geworfen werden, wenn falsche oder ungültige Parameter übergeben werden. Somit ist die Klasse "geschützt" vor falschen Argumenten von aussen. Aus meiner Sicht sind aber auch Postconditions sehr nützlich, da sie dem Benutzer der Schnittstelle gewisse Zustände und ausgeführte Operationen garantieren. Gerade wenn die Implementierung später geändert wird und man vergisst bei der Änderung ein Detail, so wird zur Laufzeit eine klare Fehlermeldung geworfen wegen den Postconditions oder der Invariante (zumindest meinstes).

Was ich noch interessant fand waren die Invariante und Variante bei der Schleife in Eiffel. Ihr kennt ja bestimmt das Halteproblem, also dass ein Programm nicht überprüfen kann, ob ein anderes Program auf einem beliebigen Input hält. Programme, die unter speziellen Bedingungen in einer Endlosschleife enden sind ja nicht gerade wünschenswert, aber gemäss Meyer passiert das oftmals. Er meinte, dass wenn ein Programm "hängen" bleibt, es oftmals daran liegt, dass es sich in einer Endlosschleife befindet. Interessant finde ich nun, dass es in Eiffel mit DbC eine Technik gibt, um oftmals lokal beweisen zu können über eine Invariante und eine Variante, dass die Schleife bei beliebigem Input nach einer endlichen Anzahl schritten terminiert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
S ArrayList Design Allgemeine Java-Themen 4
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
M Diverse Design-Fragen Allgemeine Java-Themen 6
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
T OOP Fehler im Design Allgemeine Java-Themen 9
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
R Parameter Adapter - Design Allgemeine Java-Themen 1
D Bezüglich Design meines Codes Allgemeine Java-Themen 1
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Java Design Frage Allgemeine Java-Themen 10
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
M OOP Design Frage Allgemeine Java-Themen 2
J Domain Driven Design - Modellierungsfrage Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
H MVC Design Allgemeine Java-Themen 9
J Swing Eigenes Button-design Allgemeine Java-Themen 2
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
C Gutes Code Design (3 Schichten Modell) Allgemeine Java-Themen 19
D Design Stations-Gitter Allgemeine Java-Themen 4
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
G Design Patterns für Programm Allgemeine Java-Themen 3
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
J Aktionen im State-Design-Modell Allgemeine Java-Themen 3
S Design Oberfläche Allgemeine Java-Themen 2
L Design-Frage: Platzierung der Save-Methode Allgemeine Java-Themen 3
G Domain Driven Design Model Allgemeine Java-Themen 14
G konkretes Domain Driven Design Aggregate Allgemeine Java-Themen 2
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
B Design Problem Allgemeine Java-Themen 8
faulelotte Verständnisproblem Domain Driven Design Allgemeine Java-Themen 3
S Frage zum Design der Datenstruktur Allgemeine Java-Themen 10
D design gesucht - Angabe von zu ersetzenden substrings Allgemeine Java-Themen 2
D Design ohne Getter und Setter Allgemeine Java-Themen 8
D Design: on-the-fly-Parsing + Datenstrukturen Allgemeine Java-Themen 5
N Welches design pattern? Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
T Design-Frage Allgemeine Java-Themen 14
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
S JToolBar Design Allgemeine Java-Themen 3
M Bildersyncronisierung - Design Patterns? Allgemeine Java-Themen 2
T Design - Exception in Thread Allgemeine Java-Themen 3
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
M Frage zum Design :: allgemein Allgemeine Java-Themen 6
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
U Frage zu DB Design Allgemeine Java-Themen 3
K Design / Implementierung Allgemeine Java-Themen 5
N Checkstyle - Design for Extension Allgemeine Java-Themen 4
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
E Was ist ein gutes Design fuer meine Programm? Allgemeine Java-Themen 3
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
P Apple Design Allgemeine Java-Themen 5
S design frage Allgemeine Java-Themen 10
T Design-Tipp gesucht Allgemeine Java-Themen 2
M Design von Java Klassen Allgemeine Java-Themen 2
G java design von klassen und projekten Allgemeine Java-Themen 6
K Design: Klassen in Pakete aufteilen - Eure Meinung Allgemeine Java-Themen 8
S Programmierstil / design Allgemeine Java-Themen 9
S Exception design Allgemeine Java-Themen 2
m@nu Exception-Design Allgemeine Java-Themen 4
R Design-Frage Allgemeine Java-Themen 9
N Hilfe beim Design Allgemeine Java-Themen 13
D Design Pattern: Singleton Allgemeine Java-Themen 4
Torres Design-Problem mit Jakarta Struts Allgemeine Java-Themen 2
A Anwendungs-Design (Plugin-Architektur) Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben