SqueakByExample:11.1
Morphic의 역사
Morphic은 John Maloney와 Randy Smith가 1993년경 개발을 시작하여 자체 프로그래밍 언어(the self-programming language)로 완성하였습니다. Maloney는 나중에 스퀵을 위한 새로운 버전의 Morphic을 작성하였지만 자체 버전(the self- version)의 근간을 이루는 직접성(directiveness)과 활동성(liveness)와 같은 기본 아이디어는 여전히 살아 있으며 Squeak Morphic에 잘 반영되어 있습니다. 직접성은 화면에 있는 모양(shapes)을 직접 검사하고 변경할 수 있다는 것을 의미하며, 그 작업들은 마우스 포인터를 사용하여 수행할 수 있습니다. 활동성(liveness)는 유저 인터페이스는 항상 유저의 액션들에 반응할 수 있다는 것을 의미합니다: 화면의 정보는 변경사항들을 기술하는 world로서 지속적으로 업데이트 됩니다. 이것의 보다 단순한 예로서, 여러분은 메뉴 아이템을 떼어 분리할 수 있으며 버튼으로서 유지할 수 있습니다.
월드 메뉴(the world menu)를 불러옵니다. Morphic halo를 불러내기 위해 월드 메뉴에서 한번 파랑 클릭을 하고, 여러분이 그 halo를 불러내기 위해, 여러분이 떼어 분리하기 원하는 메뉴 아이템을 다시 한번 파랑 클릭합니다. 이제 그림 11.1에 보이는 것 처럼 검정색 handle 을 붙잡아 화면 위의 원하는 장소에 드레그 합니다.
여러분이 스퀵을 실행할 때 화면에서 볼 수 있는 모든 오브젝트들은 Morph 들이며, 그 Morph들은 클래스 Morph의 서브클래스들의 인스턴스들 입니다. Morph 자체는 많은 메서드를 가진 큰 클래스(large class)이며, 이것은 적은 코드로 서브클래스로 하여금 흥미로운 동작을 실행하는 것을 가능하게 만듭니다. 비록 좋은 모양은 얻는 것은 오브젝트에 달려있지만 모든 오브젝트를 나타내기 위해 morph를 만들 수 있습니다.
문자열 오브젝트(string object)를 표시하기 위해 morph를 만듭니다. 워크스페이스에서 한번에 한개의 라인씩 다음 코드를 실행합니다.
s := 'Morph' asMorph openInWorld.
s openViewerForArgument
첫 번째 라인은 문자열 ‘Morph’를 나타내기 위해 Morph를 만들고, 그 다음 화면에 스퀵이 부여하는 이름인 “world”에서 그 Morph를 엽니다(그 말은 morph를 디스플레이 한다는 것입니다). 여러분은 파랑 클릭으로 조작할 수 있는 그래픽 구성요소 –Morph-를 얻을 수 있으셔야만 합니다. 두 번째 라인은 화면에서 Morph의 x와 y 좌표와 같은 이 Morph의 속을 보여주는 “viewer”를 엽니다. 노랑 느낌표중의 하나를 클릭하면 메시지를 Morph에 발송하며, 이 발송은 적합한 반응을 나타냅니다.
물론, 여러분이 방금 본 그래픽 표현 보다 좀더 흥미로운 그래픽 표현을 가진 Morphs로 정의하는 작업이 가능합니다. 메서드 asMorph는 단지 StringMorph를 만드는, Object class의 클래스에서 디폴트 실행(default implementation)을 갖고 있습니다. 그러므로 예컨데 Color tan asMorph는 Color tan printString의 결과로 라벨을 붙인 StringMorph를 리턴합니다. 이것을 변경하면, 대신에 우리가 색깔이 칠해진 직사각형을 얻게 됩니다.
Color class에서 브라우저를 열고 다음 메서드를 추가합니다:
메서드 11.1: Color의 인스턴스를 위해 morph 얻기
Color»asMorph
↑ Morph new color: self
이제 워크스페이스에서 Color orange asMorph openInWorld를 실행합니다. 여러분은 문자열과 같은 morph 대신에 오렌지색 직사각형을 얻을 수 있습니다.