object pascal에서의 self와 sender

http://www.borlandforum.com/impboard/impboard.dll?action=read&db=del_qna&no=4112

일단 위의 강좌를 기초로하면 이러한 결과물을 볼 수가 있습니다

object pascal에서의 sender와 self예제
object pascal에서의 sender와 self예제

조금 더 생각을 해서 이걸 분석해 보도록 하겠습니다.

현재 저 예제 대로라면

Sender :: Tbutton

self :: TForm1

이런 결과가 나오게 됩니다.

 

자아.. 멀쩡히 TButton의 OnClick을 눌렀는데 왜 이런 결과가 나오게 될까요?

여기에는 기본 전제가 필요합니다.

button이고 뭐고.. Form위에 얹혀진 객체들은 OnClick 이벤트를 눌렀다고 하더라도  실행되는건 TForm의 method이다

 

사실 대단히 당연한겁니다. 해당되는 method의 이름은 TForm1.Button1Click 이니깐요.

Form의 위에서 뭔가를 추가한다고 해도 사실 TForm을 벗어나지는 못한다는 얘기죠.

당연히 Sender는 Button1의 OnClick이벤트가 TForm1.Button1Click을 호출하는거니깐 TButton이 되는거고

self는 TForm1.Button1Click 이라는 method가 TForm의 method기때문에 메소드가 소속된 객체이름인 TForm이 되는겁니다.

 

간단한건데 여태까지 별 생각없이 살았네요…-.-;

스크린샷 한장으로 보는 메소드 생성

메서드 생성

일단 까먹을까봐 주석을 달아 스샷을 올리기는 했습니다만..

사실 smalltalk의 기본 방향은 주석을 가능한한 쓰지 않는거죠 😀

그래도 이런거 하나 해놓으면 나중에 도움될거같아 흔적삼아 남겨놓습니다.

여러분은 이러시면 안돼요 😀

 

아래의 주소를 참고로한 내용입니다.

http://trans.onionmixer.net/mediawiki/index.php?title=SqueakByExample:2.6

 

Class에 새로운 method를 추가할때 squeak과 pharo의 차이

http://trans.onionmixer.net/mediawiki/index.php?title=SqueakByExample:2.6

이 부분을 보다보면 조금은 생소한 pharo의 화면에 조금 움찔하게 됩니다.

그래봤자 단계의 차이라는 생각은 듭니다만.

squeak에서의 메세지

 

pharo에서의 메세지

 

squeak과 pharo는 이정도의 차이가 있는데

당황하지말고 잘 보면 실제로 instance변수를 선언하는건데 모습만 다른걸 쉽게 알 수 있습니다.

공부를 하시다가 이런게 나와도 당황하지 마시고 메세지만 침착하게 보면 별 문제 없겠네요~