2011-03-16 5 views
5

사전 및 사후 조건을 가진 함수 또는 메소드를 문서화 한 사람이 있습니까? (내 선생님이 그것이 공식/올바른 방법이라고 말하기 때문에 묻습니다.) 3 - "존재 함"으로 읽기 "& 존재"로 읽습니다.
E는 -
A (세트로)의 회원입니다 - 모든
을 위해 -> -함수/메소드의 사후 조건

가 s에 가정을 의미 비어 있지 않은 문자열입니다. B (s)를 문자열 s의 위치 색인을 제공하는 정수 집합이라고합시다.

postcondition: 
    (FirstOccurence(s,c) E B(s)) && (s.charAt(FirstOccurence(s,c)) == c) && 
    A int i B(s)[(i < FirstOccurence(s,c)) --> !(s.charAt(i) == c) ] 

당신이 중 하나가 이제까지 실시간으로 기능/방법을 문서화하는 방식 우연히나요) 전제 조건이 사후 대기의

int FirstOccurence(String s, Char c) 
precondition: 
    (s.lenght() > 0) && 3 int i in B(s) [s.charAt(i) == c]  

:
다음은이 기능의 문서를 시작합니다 세계?

+0

가치있는 강의 : 코드를 더 많이 읽습니다. 따라서 독서력을 향상시키는 요소는 글쓰기 부분에 약간의 영향을 줄 수 있습니다. 이러한 종류의 문서는 (가까운) 장래에 지불됩니다. –

+0

@Gamecat 그래서 현재 형태의 "전제 조건"(전제 조건)이 이해하기 쉽다는 것을 말하고 있습니다. c의 첫 번째 발생을 s로 반환하거나 c가 0이 아닌 경우 0을 반환합니다. –

답변

3

넵. 나는 업계에서 정상적인 관행이 아니지만 그것을 가로 질렀다.

특정 맥락에서

, 그것은 확실히 공식적으로 preconditions, postconditionsinvariants을 지정 가장 좋은 방법로 계산한다. 예 :

  • formal methods을 사용하는 경우; 예 : 공식적으로 프로그램이 올바른지 증명하기 위해
  • design by contract을 지원하는 Eiffel과 같은 프로그래밍 언어를 사용할 때.

계약에 따라 디자인을 지원하는 방법에 대한 예를 보려면 here을보십시오. 에 대한 '모든'A 거꾸로 '존재'를위한 BTW


, 뒤로 E는 표준 수학 표기법, 그리고 당신이 1 년 대학 수학 과정을했던 경우에 당신이 그들을 발견했을 것이다. 사람들이 사용하는 공식적인 방법이 친절하거나 표기법을 사용하는 것은 (틀림없이) 다소 불행한 일입니다. 그것은 불필요하게 (일반적으로) 수학에 불편한 프로그래머의 대다수를 불필요하게/두려워합니다.

+0

일부 링크를 가리 키시면 코드 예제를 알려주십시오. 개념은 나를 위해 퍼지. –

+0

+1. 링크에 대한 THX. –

1

나는 또한 대학에서 그것을 사용했고, 유용하다고 생각하는 일부 기능을 문서화 할 때. 은 "실제"세계에서

그렇게 일반적이지 입니다 (물론 일반적으로 사람들이 너무 많은 문서화하지 않습니다).

필자는 모든 문서가 훌륭하다고 생각하며 기능 전후에 입출력 매개 변수의 상태가 명확하지 않은 경우 전제 조건과 사후 조건을 사용하는 것이 좋습니다.

그런데 HTML에서는 &exist; -> ∃ &forall; -> & forall;을 사용할 수 있습니다. 나는 공식적인 방법으로, 사전 및 사후 조건, 및 클래스 불변을 작성했습니다

static void Main(string![] args) 
    requires args.Length > 0 
{ 
    foreach(string arg in args) 
    { 
     Console.WriteLine(arg); 
    } 
0

Spec# 문서는 조건을 게시 할 수 있습니다. 공식적인 표기법을 이해하는 중요한 대중이 없을 때의 문제가 발생합니다.

나는 A i in B(s): i < FirstOcc --> s[i] != c을 이해하는 데 단지 s has no occurence of c before firstOccurence(s,c)보다 오랜 시간이 걸린다는 것을 인정해야합니다. 함수의

  1. '직관적 인 이해가 너무 열심히 될 때

    형식주의

    에만 유용합니다. 그런 다음 올바른 방법으로 구현이나 사용법을 증명할 수있는 공식적인 방법으로 넘어갈 수 있습니다.
  2. 자동 검증은, 예를 들어 살펴 보자

필요 sgi/stl 문서 그들은 또한 준 공식 표기법을 사용하고 있으며, 너무 자주 나는 문서화 된 기능의 의미를 파악하기 위해 고군분투하는 사람들을 만난다.

0
+0

@xtolf 스티븐 C.가 제안하고있는 것처럼 수학에 두려워하지는 않습니다. (모든 A는 대학 1 학년에 있습니다.) 문제는 읽고 이해하는 것이 직관적이지 않다는 것입니다. 단어로 설명하기 까다로운 fncs의 매우 적은 수의 경우에만 사전/사후 조건을 설명하는 이러한 유형의 가치를 알 수 있습니다. –

0

Cofoja (Java 용 계약)은 특수 효과를 사용하여 에펠 계약을 제공합니다.

@Requires({ 
    "h >= 0", 
    "h <= 23" 
    }) 
    @Ensures("getHour() == h") 
    void setHour(int h); 
관련 문제