Java.util paketindeki Stack için Nesne Kısıtlama Dili (OCL)


10

Bir sınavım var ve ne beklemeniz gerektiğine dair fikir edinmek için geçmiş makalelere bakıyorum. Aşağıdaki bir parça takılıp kalmış ve birileri bazı örnek cevaplar verebilir eğer gerçekten takdir ediyorum.

Aşağıdaki işlemlerin (java.util paketindeki Stack sınıfına dahil) her biri için OCL'ye önkoşulları ve sonkoşulları yazın:

  • (1) Boolean empty () - Bu yığının boş olup olmadığını test eder
  • (2) E peek () - Yığından çıkarılmadan bu yığının üstündeki nesneye bakar
  • (3) E pop () - Bu yığının en üstündeki nesneyi kaldırır ve bu nesneyi bu işlemin değeri olarak döndürür
  • (4) E itme (E öğesi) - bir öğeyi bu yığının üstüne iter

Burada E, destedeki elemanların türünü belirtir.

Girişimlerim şöyle:

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. 

Yığındaki öğelere referans verip vermemem gerektiğini de bilmiyorum. Örneğin: self.elements -> IsEmpty () = true

Biri bana yardım edebilirse gerçekten çok memnun olurum.

DÜZENLE

Bir arkadaşın aşağıdaki fikirleri vardır:

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

Burada yardım almazsanız Google Grupları'ndaki UMLforum grubunu deneyebilirsiniz.
Stephen C

1
Veya belki StackOverflow :-)
Stephen C

Örnek OCL örneklerini burada bulabilirsiniz: www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
Axel Kemper

Yanıtlar:


1

Ön ve son koşullar bir sözleşmedir.

  • Önkoşul, sözleşmenin arayanın yerine getirmesi gereken kısmıdır. Ön koşul değilse trueişlev bir hata atmalıdır.
  • Son koşul, sözleşmenin işlev tarafından yerine getirilmesi gereken kısmıdır ve nesnede / dünyada beklenen değişikliği açıklar. Eğer son koşul değilse true, uygulamanın bir hatası vardır.

Hem ön koşul hem de son koşul, boole ifadeleri olmalıdır.

empty?Örnek olarak ele alalım. Bu işlev her zaman çağrılabilir, bu nedenle önkoşul yoktur. Ve işlevin hiçbir yan etkisi yoktur, bu nedenle bir koşul yoktur.

popBaşka bir örnek olarak ele alalım. Bu işlev boş bir yığında bir istisna oluşturursa self.size > 0, öte yandan, işlev nilboş bir yığına dönerse önkoşul yoktur. Her ikisi de Java'nın seçimine aşina olmayan geçerli tasarım seçimleridir. Her iki durumda da self.size = previous.size - 1, sözleşmeye bağlı yan etki bir öğenin kaldırılmasıdır.

Ve bunun gibi …

NB, OCL'ye aşina olmadığından yalancı kod kullandı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.