Design by Contract
Heinäkuu 11th, 2007
Etsiskelin tänään Javaan DbC-kirjastoa, joka tarjoaisi vastaavat ominaisuudet kuin Spec#. Optimaalisesti tämä tarkoittaisi siis kääntäjää, joka tarkistaisi pre-, post- ja invariant-säännöt metodeista ja muuttujista.
Lähimmäksi etsimääni pääsivät JML (Java Modeling Language) ja Contract4J. Jälkimmäinen käytti genericsejä ja ajonaikaista AspectJ:hin perustuvaa tarkistusta, kun taas ensimmäinen tarkisti säännöt jo käännösvaiheessa, mutta näytti syntaksiltaan aika rumalta.
Contract4J:
@Invar ("name != null")
private String name;
@Pre ("times > 0")
@Post("$return != null && $return.isValid()")
public String greet(int times) {
JML:
// In JML everyhing is not null by default:
private /*@ spec_public @*/ String name;
/*@
@ requires times > 0;
@ ensures \result != null && \result.isValid();
@ modifies \nothing
@*/
public String greet(int times) {
Itse pidän enemmän genericseistä, mutta tärkeämpää olisi kuitenkin saada virheet kiinni jo käännösaikana.
Paras vaihtoehto tietysti olisi, jos uuteen JSR 305:een saataisiin DbC-säännöt mukaan.
Artikkeli on luettu 960 kertaa. Kuuluu luokkiin: Ohjelmointi, Java, Test-Driven Development
1 Kommentti Lisää kommentti
1. Artti Jaakkola | Heinäkuu 16th, 2007 at 21.15
Kappas vaan. Javaan eniten toivottu uusi ominaisuus on tällä hetkellä nimenomaan Design by Contract:
http://bugs.sun.com/bugdatabase/top25_rfes.do
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4449383
Jätä kommentti
Sallitut HTML-elementit:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed