SqueakByExample:11.1

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

Morphic 의 역사

Morphic 은 John Maloney 와 Randy Smith 가 Self 라는 프로그래밍 언어[1]로 1993 년경 개발을 시작하였습니다. Maloney 는 나중에 스퀵을 위한 새로운 버전의 Morphic 을 만들었습니다만 self 프로그래밍 언어버전에서 가지고있던 직접성directness 과 생동감liveness 등의 기본 아이디어는 여전히 살아 있으며, 스퀵 Morphic 에 잘 반영되어 있습니다. 직접성이란 화면에 있는 모양을 직접 검사하고 변경할 수 있다는 것을 의미하며, 이런 작업들은 마우스를 이용한 포인팅으로 가능합니다. 생동감이란 유저 인터페이스는 언제라도 유저의 조작에 반응할 수 있다는 것을 의미합니다: 즉 화면상의 정보는 정보를 보여주고 있는 world 가 변경될때마다 자동으로 갱신 됩니다. 간단한 예로서, 메뉴에서 항목을 떼어내서 버튼으로 사용할 수 있습니다.


Squeak comment.pngWorld 메뉴를 불러옵니다. Morphic 할로를 불러내기 위해 World 메뉴에서 한번 파랑 클릭을 하고, 할로를 불러내기 위해, 따로 분리하기 원하는 메뉴 아이템을 다시 한번 파랑 클릭하십시오. 이제 그림 11.1 에 보이는 것 처럼 검정색 손잡이Black handle button.png를 붙잡아 화면 위의 원하는 장소에 끌어다 놓아주세요.


그림 11.1: new morph 라는 메뉴 아이템을, 독립된 버튼으로 만들기 위해 morph 를 떼어 분리합니다.


스퀵을 실행한 후 화면에 보이는 모든 객체는 Morph 이며, 이런 객체들은 Morph 클래스의 인스턴스입니다. Morph 클래스는 많은 메서드를 가지고있는 큰 클래스이며, 작은 코드로도 재미있는 동작을 하는 서브클래스를 만들 수 있십니다. 모든 객체는 moprh 로 만들 수 있습니다만, 어느정도 좋은모양을 가지는지는 객체 자체에 달렸습니다.

Squeak comment.pngString 객체를 표시하기 위해 Morph 를 만드려면, 워크스페이스에서 한번에 한 줄씩 다음 코드를 실행하십시오.

s := 'Morph' asMorph openInWorld.
s openViewerForArgument


첫 번째 줄은, 문자열 'Morph' 를 world 에 나타내가 위해 Morph 를 만들고, 스퀵에서 부르는 이름인 "world" 라는 객체에서 만들어진 Morph 를 엽니다(만들어진 morph 를 표시한다는 거죠). 사용자는 파랑 클릭으로 조작이 가능한 그래픽 구성요소-Morph-를 얻을 수 있어야만 합니다. 두 번째 라인은 화면에서 Morph 의 x와 y 좌표와 같은 이 Morph의 내부를 보여주는 "viewer" 를 엽니다. 노랑 느낌표중 하나를 클릭하면 메시지를 Morph 에 전송하며, 전송한 메시지에 알맞는 결과를 얻을 수 있십니다.


물론, 지금 확인한 그래픽 표현보다 좀 더 재미있는 그래픽 표현을 가지는 Morph 를 정의하는것도 가능합니다. class Object 클래스에 있는 asMorph 메서드의 기본값은 단지 StringMorph 를 만들기만 합니다. 예를 들어 Color tan asMorph, 단지 Color tan printString 의 실행결과를 라벨로 가지는 StringMorph 를 반환합니다. 그러면 이것을 변경해서 색상이 지정되는 직사각형이 반환되도록 해보겠습니다.


Squeak comment.pngColor class에서 브라우저를 열고 다음 메서드를 추가하십시오:

메서드 11.1: Color 의 인스턴스를 위해 morph 얻기

Color>>asMorph
   Morph new color: self


워크스페이스에서 Color orange asMorph openInWorld 를 실행합니다. String 의 Morph 대신에 오렌지색 직사각형을 얻을 수 있습니다!


Notes

  1. Self programming Language 에 대한 내용은 http://en.wikipedia.org/wiki/Self_programming_language 에서 찾을 수 있습니다.