VisualWorksIntroduction2:Page2

From 흡혈양파의 번역工房
Jump to navigation Jump to search

cincom_tutorial_vwlogo
cincom_tutorial_cincomlogo
cincom_tutorial_vwtutorial2
cincom_tutorial_stlogo

입문서 : Aspect 어댑터
cincom_tutorial_openbook Aspect 어댑터가 무엇인지 설명하는 것은, 그것이 무엇을 하는지 이해하는 것 보다 매우 어렵습니다. 애스팩트 어댑터가 하는 일은 실제로 매우 간단합니다만, 튜토리얼에서 설명하는 것은 매우 어렵습니다.
cincom_tutorial_certificate 이 입문서는 Aspect 어댑터가 지닌 매우 복잡한 개념을 간단히 설명하는 것을 목적으로 하고 있습니다. 이것은 Smalltalk 가운데서도 매우 강력한 구조입니다. 그리고 VisualWorks의 GUI 어플리케이션 개발의 기초부분을 이루고 있습니다.
cincom_tutorial_question Aspect Adaptor는 무엇인가요?


백문이 불여일견입니다. 시작합시다.

그림 B-1. Aspect 어댑터의 시각적 표현

캔버스가 작성되었습니다. 캔버스상의 하단에 있는 두 개의 위젯은 입력필드입니다. 하얀 입력필드의 aspect에는 #messageInput을 지정했습니다. 노란 입력필드의 aspect에는 #messageInput 을 지정했습니다.


그림 맨 우측에 보이는 것은 AA 클래스의 인스턴스입니다. anAA 오브젝트는 두 개의 인스턴스 변수, #m1#m2를 보유하고 있습니다.


캔버스 입력필드에는 anAA 인스턴스 변수의 값을 표시하고 싶습니다. 더 좋은 것은, 캔버스 입력필드에, "만일 anAA의 인스턴스 변수 값이 변경되었다면 항시" 그 값을 표시하는 것입니다.


다시 한 번 이곳을 읽어주십시오. 기본적인 Aspect 어댑터의 성질이 기술되어 있습니다. Aspect 어댑터는 그 값을 지니지 않는 벨류 모델입니다. 위 예를 사용해 말하자면, #messageInout#messageOutput의 값은 anAA 오브젝트의 #m1#m2에서 값을 취득합니다.

cincom_tutorial_merge Aspect 어댑터는 어떻게 작동하나요?

Aspect 어댑터의 동작에는 두 가지 처리가 있습니다.

  1. "타겟"값(예를들어, #messageInput#messageInput)은 Aspect 어댑터 값으로 "선언"할 필요가 있습니다.
  2. "소스"값(예를들어, #m1#m2)는, 변경되었을 때 항시 변경된 값을 시스템 전체에 통지할 필요가 있습니다.


이곳은 그러한 작업을 실행하기 위한 방법입니다.

1. "소스"값에 대한 "세터(setter)"" 메서드는 아래와 같이 할 필요가 있습니다.

m1: anM1 
m1 := anM1. 
self changed: #m1.

중요한 부분은 "시스템 전체의 브로드 캐스트"를 실행하는 맨 마지막 행입니다.


2. "타겟"값에 대해서는 아래와 같이 초기화 되어야만 합니다. 이 예시에서는 anAA는 이미 인스턴스라고 가정하고 있습니다. (예: {{{1}}})

messageInput := (AspectAdaptor subject: anAA sendsUpdates: true) forAspect: #m1.

위 문에서 subject: 메서드에 그 값을 도출할 "소스" 오브젝트를 지정해서 forAspect: 메서드에 그 값을 도출할 변수를 지정하고 있습니다.

cincom_tutorial_certificate 정리

Aspect 어댑터는 하나의 연결부로 생각해 주십시오. Aspect 어댑터는 포인터로 생각해 주십시오. Aspect 어댑터는 참조로 생각해 주십시오. Aspect 어댑터는 메시지로 생각해 주십시오. 혹시 이러한 생각들을 하는중에 Aspect 어댑터의 성질에 대해 좀 더 깊게 생각할 계기가 될지도 모릅니다. 그 값을 어디에서 얻을 것인가, 그 뿐입니다.


| 이전으로 돌아가기 |