Linguagem de restrição de objeto (OCL) para pilha no pacote java.util


10

Eu tenho um exame chegando e eu estou olhando documentos anteriores para ter algumas idéias do que esperar. Estou um pouco preso no seguinte e realmente apreciaria se alguém pudesse dar algumas respostas de exemplo.

Escreva pré-condições e pós-condições no OCL para cada uma das seguintes operações (incluídas na classe Stack no pacote java.util):

  • (1) Boolean empty () - Testa se esta pilha está vazia
  • (2) E peek () - Olha o objeto no topo desta pilha sem removê-la da pilha
  • (3) E pop () - remove o objeto no topo desta pilha e retorna esse objeto como o valor desta operação
  • (4) E push (item E) - empurra um item para o topo desta pilha

Aqui E denota o tipo de elementos na pilha.

Minhas tentativas são as seguintes:

Boolean empty()
pre: none
post: self -> IsEmpty() = true
//should this be result -> IsEmpty() = true because it returns a boolean value?

E peek()
pre: self -> NotEmpty() = true
post: result = ??? 
// I lose hope at this stage. 

Também não sei se devo referenciar os elementos na pilha. Por exemplo: self.elements -> IsEmpty () = true

Se alguém pudesse me ajudar, eu realmente aprecio isso.

EDITAR

Um amigo tem as seguintes idéias:

context Stack empty()
pre: self.data.size = 0

context Stack peek()
pre: self.data.AsSequence.first

context Stack pop()
pre: !self.data.isEmpty
post: self.data.AsSequence.first.remove (not sure about this one)
post: self.data.count = @pre:data - 1

context Stack push(E Item)
post: self.data.asSquence.prepend(E.asSequence)
post: self.data.size = @pre.data.size + 1

Se você não obtiver ajuda aqui, tente o grupo UMLforum nos Grupos do Google.
Stephen C

11
Ou talvez no StackOverflow :-)
Stephen C

Você pode encontrar exemplos ilustrativos de OCL aqui: www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
Axel Kemper

Respostas:


1

Pré e pós-condições são um contrato.

  • Pré-condição é a parte do contrato que o chamador deve cumprir. Se a pré-condição não for, truea função deve gerar um erro.
  • A pós-condição é a parte do contrato que deve ser cumprida pela função e descreve a mudança esperada no objeto / mundo. Se a pós-condição não for, truea implementação possui um erro.

As condições pré e pós-condição devem ser expressões booleanas.

Vamos dar empty?como exemplo. Essa função sempre pode ser chamada, portanto, não há pré-condição. E a função não tem efeito colateral, portanto não há pós-condição.

Vamos tomar popcomo outro exemplo. Se essa função gerar uma exceção em uma pilha vazia, a pré-condição será self.size > 0, por outro lado, se a função retornar nilem uma pilha vazia, não haverá pré-condição. Ambos são opções de design válidas, não familiarizadas com a escolha de Java. Nos dois casos, a pós-condição ocorre self.size = previous.size - 1porque o efeito colateral contratual é remover um elemento.

E assim por diante …

NB, usava pseudo-código, pois não estava familiarizado com a OCL.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.