블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
2006. 10. 11. 11:00 Programing/Smalltalk
1. Shell 클래스 아래 HouseKeepingBookShell 클래스를 만듭니다.(이것은 MVP에서 P인 Presenter에 해당합니다)

Workspace에서 HouseKeepingBookShell showOn: testBook 을 실행해 봅니다.


창이 새로 열리죠? 그것을 캡쳐해서 올려주세요.






2. Class Browser의 클래스트리에서 HouseKeepingBookShell 의 팝업메뉴 View... / New를 합니다. (이것은 MVP에서 V인 View에 해당합니다) 이름은 그냥 기본으로 있는 Default View로 엔터누릅니다. View Composer가 열렸죠. 1번 문제에서 봤던 창이 있을 겁니다. 이 창을 편집한다는 소리죠. View Composer로 왼쪽에 뷰툴박스를 열어서 ListPresenter.Default View를 찾아 이 창에다 추가해줍니다.(끌어다놓기하면 됩니다) 오른쪽 하단의 속성창에서 name이라는 항목을 찾아 문자열로 book list 라고 이름 지어줍니다. View Composer를 저장하고 닫습니다.


Workspace에서 HouseKeepingBookShell showOn: testBook 을 실행해 봅니다.


창이 새로 열리죠? 그것을 캡쳐해서 올려주세요.


/



3. HouseKeepingBookShell 에 items라는 객체변수를 만듭니다. createComponents라는 매쏘드를 검색(Definitions of...)해 봅니다. 그 매쏘드들을 보고 흉내내서 ListPresenter를 만들어 items변수에 대입하세요. View Composer로 지어줬던 이름을 정확히 문자열로 제공해야 한다는 점을 유의하세요. 작성하신 createComponents 매쏘드를 답으로 제출해 주세요.


createComponents
super createComponents.

items := self add:  ListPresenter new name: 'book list'.


Workspace에서 HouseKeepingBookShell showOn: testBook 해서 다시 창을 열어봅니다. 리스트가 추가 되었나요? 캡쳐해서 답으로 제출하세요.


/



4. 그런데 리스트박스가 비어있군요. 내용을 표시해야 합니다.
HouseKeepingBookShell에 model: 이라는 매쏘드를 추가합니다. 이것도 역시 3번 문제와 마찬가지로 model:의 정의를 참고합니다. model: 매쏘드는 이 GUI객체(Shell)에 모델을 넘길 때, 그것을 받아들이는 매쏘드입니다. 문제 3번에서 추가한 리스트는 Shell의 하위창이었죠? 이 하위창도 역시 MVP구조로 되어있기 때문에 모델을 공급해줘야 제대로 동작합니다. 무엇을 넘겨주면 좋을까요?

items model: ????????????????


HouseKeepingBookShell>>model: 매쏘드를 작성한 것을 답으로 제출하세요.


model: aHouseKeepingBook
items model: aHouseKeepingBook items.


Workspace에서 HouseKeepingBookShell showOn: testBook 를 캡쳐해서 답으로 제출하세요.




5. 이제 하위 창을 하나 더 추가 하겠습니다. 방법은 2번~4번에서 했던 것과 마찬가지로 진행하시면됩니다. 객체변수 pocketMoney를 만듭니다. Class Composer의 클래스트리에서 팝업메뉴 View/Edit···· 해서 View Composer를 엽니다. 뷰툴박스에서 NumberPresenter.Default View를 추가하고 이름을 pocket money로 짓고 저장한다음, HouseKeepingBookShell에서 createComponents매쏘드와 model:매쏘드를 수정해서 새 객체변수 pocketMoney도 items처럼 수정해줍니다.


수정된 createComponents매쏘드와 model:매쏘드를 답으로 제출하세요.


pocketMoney := self add: TextPresenter new name: 'pocket money'.


pocketMoney model: aHouseKeepingBook pocketMoney.



Workspace에서 HouseKeepingBookShell showOn: testBook 를 하여 원금과 가계부 항목이 잘 표시된 모습을 캡쳐해서 답으로 제출하세요.





6. 리스트에 아마 an HouseKeepingBookItem이라고만 표시되고 있을 겁니다. 그것은 리스트에게 받은 객체들을 어떤 형태로 표현할 지 말해주지 않았기 때문에 기본적으로 표시되는 문자열만 뵤여주고 있기 때문입니다. 다시 View Composer를 열어서 book list라는 리스트를 선택하면 오른쪽에서 속성으로 getTextBlock이라고 있습니다. selector에 #displayString이라고 되어 있을 겁니다. 그걸 #stringInTheListBox'라고 고쳐주고 저장한다음 View Composer를 닫습니다. 그런 다음 다시 showOn:해서 창을 열어봅니다. 에러가 날 겁니다. 디버거로 매쏘드를 추가하는 방법 기억하시죠? 그 방법으로 HouseKeepingBookItem에 매쏘드를 만들어줍니다. 방금 만든 그 매쏘드는 리스트가 자신의 아이템들인 HouseKeepingBook객체들에게 표시할 문자열을 요구하는 매쏘드입니다. HouseKeepingBookItem의 name과 value를 문자열로 답하는 매쏘드를 작성해보세요.(숙제하는 사람 마음대로) 다시 showOn:합니다.


HouseKeepingBookItems>>stringInTheListBox 매쏘드를 답으로 제출하세요.


stringInTheListBox
^self name,' : ',self value printString


showOn: 하여 리스트에 항목들이 제대로 표시된 모습을 캡처해서 제출하세요.





7. 합산을 표시하는 작은 창도 만들어 보겠습니다. View Composer를 열어 NumberPresenter.Default View를 추가하여 sum이라고 이름 짓습니다.
HouseKeepingBookShell에 sum이라는 객체변수를 만들고 createComponents와 model: 매쏘드를 다시 수정합니다. 모델인 HouseKeepingBook객체에게 sum을 물어서 그 것을 HouseKeepingBookShell의 sum에게 모델로 넘겨주면 되겠군요.


createComponents, model: 를 답으로 제출하세요.


sum := self add: NumberPresenter new name: 'sum'.

sum model: aHouseKeepingBook sum.


합산이 잘 표시된 창을 캡처해서 답으로 제출하세요.




8. 흑자와 적자를 표시하는 창도 만들어 보겠습니다. View Composer를 열어 TextPresenter.Stati text를 추가하여 status이라고 이름 짓습니다.
HouseKeepingBookShell에 status이라는 객체변수를 만들고 createComponents와 model: 매쏘드를 다시 수정합니다. 모델인 HouseKeepingBook객체에게 흑자인지 적자인지 문자열로 답해주는(그런 매쏘드가 있었지요?) 그것을 HouseKeepingBookShell의 status에게 모델로 넘겨주면 되겠군요.


createComponents, model: 를 답으로 제출하세요.


status := self add: TextPresenter new name: 'status'.

status model: aHouseKeepingBook statusString.



흑자/적자가 잘 표시된 창을 캡처해서 답으로 제출하세요.



posted by 초딩입맛제주아재