드디어 올것이 왔군요..

지금까지 프로시저를 생각하지 않고 구현하고 있었습니다. 큰 문제가 없을 것이라고 생각 했지만

문제가 있긴하군요..

현재는 심볼 매니저와 캔버스가 하나의 쌍으로 있어서 그것이 뷰와 모델의 관계를 했었는데

이제 함수가 들어오면서 부터 여러개의 심볼 매니저와 캔버스가 있어야 합니다.

먼저 painter(controller)는 심볼매니져와 캔버스의 쌍을 관리 하고 있어야 합니다.

즉, 사용자가 활성화 한 캔버스에 대한 심볼 매니저가 적정하게 동작 해야 합니다.

그리고, 프로시저 심볼을 디자인 해야 합니다.

프로시저라는 심볼은 내부적으로 나의 심볼 매니저를 알고 있어야 합니다. 왜냐하면 심볼 매니저로 부터 해당 

프로시저의 시작 심볼을 가져 와야 하니까요(컴파일러가 추적할 수 있어야 함니다.)

일단 설계를 해보았습니다.

기본적으로 MVC패턴입니다.

symMng가 모델, canva가 뷰, painter가 컨트롤러 입니다.

각각의 참조가 MVC과 약간 달르고 아직 변경의 여지가 있기 때문에 association로 표현 했습니다.

페인터와 캔버스가 symMng의 데이터, 즉 심볼들의 변화에 따라서 상태와 겉모습이 바뀌어야 합니다.

캔버스는 심볼의 그림을 그려 주어야 하므로 draw옵저버가 되고,
페인터는 심볼이 선택됨에 따라 해당 심볼의 속성을 각 컨트롤에 반영해야 합니다 (이부분이 뷰에 대당하는 것 같은데 컨트롤이 painter에서 구현 되어 있습니다...)그래서 속성 옵저버가 되고, 프로시저가 생성되고 소멸됨에 따라 현재 캔버스와 심볼매니저의 쌍을 교체 해야 하므로 프로시저 옵저버가 필요합니다.
여기서는 표현 되어 있지않지만 사용자에 의해 현재 캔버스와 심볼매니저의 쌍을 교체 해주어야 하는데 이것은 페인터가 내부적으로 해결 할 수 있을 것 같습니다.

심볼 매니저는 만들어진 모든 옵저버를 받아드리고 notify하는 subject를 구현 하도록 하였습니다.