12.07.2015 Views

JCML - Java Card Modeling Language: Definição e ... - Ifrn

JCML - Java Card Modeling Language: Definição e ... - Ifrn

JCML - Java Card Modeling Language: Definição e ... - Ifrn

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CAPÍTULO 3. JML - JAVA MODELING LANGUAGE 4601 public class Person {02 private /*@ spec_public non_null @*/ String name;03 private /*@ spec_public @*/ int weight;0405 /*@ invariant !name.equals("")06 @ && weight >= 0;07 @*/0809 //@ ensures \result == weight;10 public /*@ pure @*/ int getWeight();1112 /*@ requires weight + kgs >= 0;13 @ ensures kgs >= 014 @ && weight == \old(weight + kgs);15 @*/16 public void addKgs(int kgs);1718 /*@ requires n != null && !n.equals("");19 @ ensures n.equals(name)20 @ && weight == 0; @*/21 public Person(String n);22 }Figura 3.5: Especificação JML da classe Person .que zero ao peso.Na Figura 3.5 é definida a especificação JML para a classe Person. É usada a cláusulaspec public para as variáveis da classe. Isso ocorre pelo fato destas serem declaradascomo privadas (private). A cláusula spec public representa que esta variável é públicano escopo da especificação. Se as variáveis não fossem definidas como spec public,não seria possível serem utilizadas na especificação JML. Se uma das variáveis fossedefinida com visibilidade pública não seria necessário utilizar a cláusula spec public paraela. A cláusula non null determina que a variável name não pode ser nula. A construçãonon null é utilizada para objetos em variáveis globlais e parâmetros de métodos. Adefinição de uma variável não nula na contrução de um invariante assume a forma name!= null.É possivel utilizar expressões ou chamada de métodos <strong>Java</strong> nas especificações JML.Por exemplo, o objeto name é do tipo String. Este objeto pode executar o método equals,método este que é utilizado na definição do invariante. O invariante da classe Persondefine propriedades como o valor do name, que não pode ser vazio, e o valor de weight,que deve ser sempre maior que zero.A especificação do método getWeight utiliza a cláusula ensures para definir a pós-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!