2017-10-25 2 views
0

다음 서명은 사진 관리 응용 프로그램의 상태를 설명합니다. 이 경우 ApplicationStates 집합을 만듭니다.화살표 식에 사용될 때 필드가 다른 이유는 무엇입니까?</p> <pre><code>sig ApplicationState { catalogs: set Catalog, catalogState: catalogs -> one CatalogState } </code></pre> <p>서명은 물론, 세트를 만듭니다

ApplicationState0 
ApplicationState1 
... 

카탈로그는 필드입니다. 각 ApplicationState를 카탈로그 값 집합에 매핑합니다.

ApplicationState0, Catalog0 
ApplicationState0, Catalog1 
ApplicationState1, Catalog0 
... 

catalogState도 필드입니다. 각 ApplicationState를 관계로 맵핑합니다. 그 관계는 다음과 같습니다.

catalogs -> one CatalogState 

그 관계는 다음과 같습니다. 각 카탈로그 값을 하나의 CatalogState 값으로 매핑합니다.

ApplicationState0, Catalog0 
ApplicationState0, Catalog1 
ApplicationState1, Catalog0 
... 

그래서 관계가과 같이, 하나 CatalogState에 그 튜플의 각지도를 말한다 : 우리는 이미 내가 여기에 반복 것이다 카탈로그를 보았다

ApplicationState0, Catalog0, CatalogState0 
ApplicationState0, Catalog1, CatalogState0 
ApplicationState1, Catalog0, CatalogState0 
... 

좋아, 다시 catalogState합니다. 이전에 우리는 각 ApplicationState를 관계에 매핑하고 그 관계가 무엇인지 알았습니다. 나는 합금 평가자를 실행할 때, 그것은 catalogState는 삼항 관계라고 말한다

ApplicationState0, ApplicationState0, Catalog0, CatalogState0 
ApplicationState0, ApplicationState0, Catalog1, CatalogState0 
ApplicationState0, ApplicationState1, Catalog0, CatalogState0 
... 

을하지만 : 그래서, catalogState 그래서 같은 인수에 대응 = 4의 관계를, 의미 있다고 생각합니다. 이 예제의 테이크 어웨이는 다음과 같습니다.

  1. 일반적으로 필드 이름은 관계를 나타냅니다.

  2. 화살표 식에 사용 된 필드 이름은 관계를 나타내지 않습니다. 오히려 관계의 열 2 (관계의 범위)를 나타냅니다.

맞습니까? 소프트웨어 추상화 (Software Abstractions) 책에서이 부분은 어디에 설명되어 있습니까?

답변

1

섹션 (제 에디션 P. 97) Sofware 추상화의 4.2.2

관계가 서명 필드로 시작 선언된다.

귀하의 질문에 적어도 부분적으로 대응합니다. (나는 '필드'과의 관계에 대한 인덱스 항목을 통해 작동 그들이 가리 섹션을 읽고 도움이 될 수있다 생각합니다.) 당신은 화살표의 표현에 사용되는 필드 이름하지 않는

관계를 나타냅니다. 오히려 관계의 열 2 (관계의 범위)를 나타냅니다.

그것은 현학적 일 수도 있지만, 아니오 : 필드 이름은 항상 관계를 나타냅니다.그러나 서명 선언 컨텍스트 내에서 암시 적으로 접두사는 this.이며 관계의 첫 번째 열은 제거됩니다. 선언 catalogState: catalogs -> one CatalogState에서 catalogs에 대한 참조는 실제로 ApplicationState 및 Catalog에 대한 2 진 관계에 대한 참조입니다. 그러나이 컨텍스트에서는 this.catalogs으로 자동 확장되어 카탈로그 개인을 평가합니다. this 키워드는 4.2.2 절 소프트웨어 추상화에 소개되었습니다.

선언에서 카디널리티 제약 조건은 예제에서 복잡한 요소 일 수 있습니다. 여기에 그 효과를 설명하려고하지 않겠습니다. 카디널리티 제약에 문제가 생겼을 때 부록 B에있는 언어 참조 문서의 관련 부분을 매우 신중하게 읽으면 일반적으로 무슨 일이 일어나고 있는지 이해할 수 있다는 것을 알게되었습니다. (나는 때때로 그것이 하나 이상의 독서를 가졌음을 인정한다.)

+0

위대한 설명 - 마이클 감사합니다! –

관련 문제

 관련 문제