java.util 패키지의 스택 용 OCL (Object Constraint Language)


10

시험을 치르고 있으며 과거의 논문을보고 무엇을 기대해야하는지에 대한 아이디어를 얻고 있습니다. 나는 다음 중 하나에 약간 붙어있어 누군가가 몇 가지 예를 들어 줄 수 있다면 정말 감사하겠습니다.

다음 각 조작 (java.util 패키지의 Stack 클래스에 포함됨) 각각에 대해 OCL에 사전 조건 및 사후 조건을 작성하십시오.

  • (1) Boolean empty ()-이 스택이 비어 있는지 테스트합니다
  • (2) E peek ()-스택에서 제거하지 않고이 스택의 맨 위에있는 개체를 봅니다.
  • (3) E pop ()-이 스택의 맨 위에있는 객체를 제거하고 해당 객체를이 연산의 값으로 반환합니다
  • (4) E 푸시 (E 항목)-아이템을이 스택의 맨 위로 밉니다

여기서 E는 스택의 요소 유형을 나타냅니다.

내 시도는 다음과 같습니다.

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. 

또한 스택의 요소를 참조 해야하는지 모르겠습니다. 예를 들면 : self.elements-> IsEmpty () = true

누군가 나를 도울 수 있다면 정말 감사하겠습니다.

편집하다

친구에게는 다음과 같은 아이디어가 있습니다.

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

여기에 도움이 없으면 Google 그룹스에서 UMLforum 그룹을 사용해보십시오.
Stephen C

1
아니면 :-)에 StackOverflow에
스티븐 C

당신은 여기에 설명 OCL 샘플을 찾을 수 있습니다 www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
악셀 켐퍼

답변:


1

사전 및 사후 조건은 계약입니다.

  • 사전 조건은 호출자가 충족해야하는 계약의 일부입니다. 전제 조건이 아닌 true경우 함수는 오류를 발생시켜야합니다.
  • 사후 조건은 기능에 의해 충족되어야하는 계약의 일부이며 객체 / 세계에 대한 예상 변경을 설명합니다. 사후 조건이 아닌 true경우 구현에 버그가 있습니다.

사전 및 사후 조건은 모두 부울 표현식이어야합니다.

empty?예를 들어 봅시다 . 이 함수는 항상 호출 할 수 있으므로 전제 조건이 없습니다. 그리고이 기능은 부작용이 없으므로 사후 조건이 없습니다.

pop다른 예를 들어 보자 . 이 함수가 빈 스택에서 예외를 발생시키는 경우 전제 조건은입니다 self.size > 0. 반면, nil빈 스택 에서 함수가 반환되면 전제 조건이 없습니다. 둘 다 유효한 디자인 선택이며 Java의 선택에 익숙하지 않습니다. 두 경우 모두 self.size = previous.size - 1계약 조건이 요소를 제거하는 것이므로 사후 조건이 발생합니다 .

등등 …

NB, 의사 코드는 OCL에 익숙하지 않기 때문에 사용되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.