문제

프로그램의 구조를 나타내는 방법에는 여러 가지가 있습니다 (UML 클래스 다이어그램 등). 프로그램을 엄격하고 수학적으로 설명하는 컨벤션이 있으면 관심이 있습니다. 나는이 목적을 위해 수학 표기법의 사용에 특히 관심이 있습니다.

: 클래스는 세트 (필드, 속성) 및 함수 (세트 요소에서 작동)로 표시됩니다. 부모 클래스 '필드는 아동 클래스의 하위 집합'입니다. 기능은 이와 같이 보이는 의사 코드에서 설명되어 있습니다.

도움이 되었습니까?

해결책

Z 표기법은 소프트웨어의 공식적인 검증에서 어느 정도 사용되었음을 알고 있습니다. 토키너 프로젝트.

Z 표기법

Z 참조 매뉴얼

다른 팁

많은 방법이 있지만, 기본 수학 개념에서 구조가 종종 표현 될 수 없기 때문에 대부분의 구조를 표현하는 데 불편하다고 생각합니다. 주요 예외는 물론 기능 프로그래밍 언어입니다. 주름 (catamorphisme), 그룹, 대수 등에 대해 생각하십시오.

명령적인 프로그래밍을 위해 나는 (순수하고 확장 된) Lambda 미적분학 세트 이론과 (첫 번째 순서) 술어 논리를 사용하는 Z의 존재를 알고 있습니다. 그러나 나는 그것이 매우 편리하다고 생각하지 않습니다. 구조를 표현하기 위해 수학을 사용하여 구조를 표현하는 유일한 상승은 당신이 그것에 대해 물건을 증명할 수 있다는 사실입니다. 그러나 그렇게하고 싶다면 JML, Spec# 또는 Eiffel을 살펴보십시오.

당신이 달성하려는 것에 달려 있지만, 특정 언어 로이 길을 따라 가면 곤경에 처할 수 있습니다.

예를 들어, 참조 원형 토론 C ++ FAQ 라이트.

이 책은 연역적 방법을 프로그램에 의해 프로그램에 의해 프로그래밍에 적용하여 추상적 인 수학 이론을 통해 작동 할 수 있습니다. [...

나는 그것을 믿는다 프로그래밍 요소 Alexander Stepanov와 Paul McJones는 당신이 찾고있는 것과 매우 가깝습니다.

개념

개념은 절차의 존재 및 속성, 유형 속성 및 유형에 정의 된 유형 함수 측면에서 명시된 하나 이상의 유형에 대한 요구 사항에 대한 설명입니다.

이미 언급 된 Z는 당신이 묘사 한 것입니다. 객체 지향 모델링에는 일부 변형이 있지만 클래스를 모델링하려면 "Standard Z의"스키마로 상당히 멀리 갈 수 있다고 생각합니다.

또한 있습니다 합금, 그것은 더 새롭고 Z에서 영감을 얻었습니다.이 표기법은 아마도 객체 지향에 약간 더 가깝습니다. 또한 분석 가능합니다. 즉, 특정 조건을 충족하는지 여부를 작성하는 모델을 확인할 수 있지만 속성이 유지되는 것을 증명할 수는 없으며 유한 한 범위 내에서 반박을 시도합니다.

기사 디자인 별 신뢰할 수있는 소프트웨어 이용 가능한 유사한 도구 테이블과 함께 합금과 ILK에 대한 좋은 소개입니다.

당신이 찾고있는 기능적 프로그래밍. 몇 가지 기능 프로그래밍 언어가 있으며 모두 기본적인 수학 이론을 기반으로합니다. 람다 미적분학. LISP와 같은 기능적 프로그래밍 언어로 작성된 프로그램은 그 자체의 수학적 표현입니다. ;-)

실제로 프로그램이나 운영을 설명하는 수학적 언어가 있습니다. 초기 상태를 취한 다음 원하는 대상 상태에 도달 할 때 까지이 상태를 변형시킵니다. 변환은 실행 해야하는 프로그램 코드를 산출합니다.

참조 Hoare Logic에 관한 Wikipedia 기사.

기본 아이디어는 모든 기능에 대해 (클래스를 클래스 나 구식 기능에 넣더라도) 사전 및 사후 조건이 있다는 것입니다. 예를 들어, 전제 조건은 배열이있는 것일 수 있습니다. >= 0 집단. 조건 이후는 모든 요소 [i]가 <= 요소 [j]에 의해 모든 i <= j에 대해야한다는 것입니다.

일반적인 설명은 "함수는 배열을 정렬"합니다. 그러나 수학적 용어를 사용하면 입력 (전제 조건과 일치해야 함)을 출력 (사후 조건과 일치해야 함)으로 변환 할 수 있습니다.

특히 더 복잡한 프로그램의 경우 사용하기가 다루기 쉬운 것이지만 일부 예제는 매우 인상적입니다. 종종, 당신은 결과적으로 매우 복잡해 보이지만 처음에는 시도하는 결과적으로 컴팩트 한 코드를 얻습니다.

제안하고 싶습니다 프로그래밍의 대수. 프로그램에 대한 계산 접근법입니다 관계 대수, 그리고 갈로이 연결.

이 주제에 더 많은 관심이 있다면 놀라운 논문을 찾을 수 있습니다. 여기, Shin-Cheng Mu 및 José Nuno Oliveira (슬라이드).

관계형 대수와 1 차 논리를 사용하면 시너지 효과도 있습니다. 합금, 기능 프로그래밍 및 계약 별 설계 (객체 지향 프로그래밍에 쉽게 적용됨).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top