Zbliża się egzamin i patrzę na wcześniejsze artykuły, aby dowiedzieć się, czego się spodziewać. Trochę utknąłem w poniższym i naprawdę doceniłbym, gdyby ktoś mógł podać kilka przykładowych odpowiedzi.
Napisz warunki wstępne i dodatkowe w OCL dla każdej z następujących operacji (zawartych w klasie Stack w pakiecie java.util):
- (1) Boolean empty () - Sprawdza, czy ten stos jest pusty
- (2) E peek () - Patrzy na obiekt na górze tego stosu bez usuwania ze stosu
- (3) E pop () - Usuwa obiekt na górze stosu i zwraca ten obiekt jako wartość tej operacji
- (4) E push (E item) - pcha przedmiot na wierzch tego stosu
Tutaj E oznacza rodzaj elementów na stosie.
Moje próby są następujące:
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.
Nie wiem też, czy powinienem odwoływać się do elementów na stosie. Na przykład: self.elements -> IsEmpty () = true
Gdyby ktoś mógł mi pomóc, bardzo bym to docenił.
EDYTOWAĆ
Przyjaciel ma następujące pomysły:
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