home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / ckscripts / inheritance < prev    next >
Text File  |  2020-01-01  |  3KB  |  106 lines

  1. ; From: Dat Thuc Nguyen
  2. ; Newsgroups: comp.protocols.kermit.misc
  3. ; Subject: Inheritance in Kermit 95
  4. ; Date: Mon, 29 Mar 1999 15:57:20 GMT
  5. ; URL: http://www.smalltickle.com
  6. ; NO OBJECT-ORIENTED PROGRAMMING LEAVES HOME WITHOUT INHERITANCE.
  7. ; THE FOLLOWING SCRIPT DISPLAYS INHERITANCE IN KERMIT 95.
  8. ;
  9. ; CLASS PERSON IS THE BASE CLASS.
  10. ;
  11. ; CLASS EMPLOYEE DERIVES FROM CLASS PERSON. CLASS EMPLOYEE HAS
  12. ; ALL ATTRIBUTES AND BEHAVIOR OF CLASS PERSON AND SOME EXTRAS
  13. ;
  14. ; CLASS MANAGER DERIVES FROM CLASS EMPLOYEE. CLASS MANAGER HAS
  15. ; ALL ATTRIBUTES AND BEHAVIOR OF CLASS EMPLOYEE AND SOME EXTRAS
  16. ;
  17. ; THE KEY OF OBJECT-ORIENTED PROGRAMMING IN KERMIT 95 IS
  18. ; THE PROPER USAGE OF:
  19. ;
  20. ; ASSIGN  : ASSIGN EXPANDS ONLY R-VALUE VARIABLE.
  21. ; _ASSIGN : _ASSIGN EXPANDS BOTH L-VALUE AND R-VALUE VARIABLES.
  22. ; DEFINE  : DEFINE EXPANDS NEITHER L-VALUE NOR _R-VALUE VARIABLES.
  23. ; _DEFINE : _DEFINE EXPANDS ONLY L-VALUE VARIABLE.
  24. ;
  25. define PERSON {
  26.     local self
  27.     assign self \%1
  28.     _assign \m(self).age \%2
  29.     _assign \m(self).job \%3
  30.     _assign \m(self).introduce {
  31.         echo My name is \fcap(\%1)
  32.         echo I am \\m(\m(self).age) years old
  33.         echo I am a(n) \\m(\m(self).job)
  34.     }
  35.     _assign \m(self).destroy {
  36.         _define \m(self).age
  37.         _define \m(self).job
  38.         _define \m(self).introduce
  39.         _define \m(self).destroy
  40.     }
  41. }
  42.  
  43. define EMPLOYEE {
  44.     local self super \%s
  45.     assign self \%1
  46.     assign super person                 ; DERIVES FROM PERSON
  47.     \m(super) {\%1} {\%2} {\%3}         ; CREATE BASE COMPONENTS
  48.     assign \%s \m(self).introduce       ; SAVE SUPER CLASS METHOD
  49.                         ; introduce
  50.     _assign \m(self).introduce {        ; OVERLOAD METHOD introduce
  51.         \m(\%s)                         ; EXEC SUPER CLASS METHOD FIRST
  52.         echo I work for \%4             ; AND THIS EXTRA
  53.     }
  54. }
  55.  
  56. define MANAGER {
  57.     local self super \%s
  58.     assign self \%1
  59.     assign super employee               ; DERIVES FROM EMPLOYEE
  60.     \m(super) {\%1} {\%2} {\%3} {\%4}   ; CREATE BASE COMPONENTS
  61.     assign \%s \m(self).introduce       ; SAVE SUPER CLASS METHOD
  62.     _assign \m(self).introduce {        ; OVERLOAD METHOD introduce
  63.         \m(\%s)                         ; EXEC SUPER CLASS METHOD FIRST
  64.         echo I am a manager             ; AND THIS EXTRA
  65.     }
  66.     _define \m(self).fire {             ; ADD THE NEW METHOD fire
  67.         echo {\%1, you are fired}
  68.     }
  69.     _define \m(self).offer {            ; ADD THE NEW METHOD hire
  70.         echo {\%1, I would like to offer you \%2}
  71.     }
  72. }
  73.  
  74. ; JANE IS A 27 YEARS YOUNG STUDENT
  75. person Jane 27 student
  76. Jane.introduce
  77. echo
  78.  
  79. ; MARK IS A 36 YEARS OLD PROGRAMMER WORKING FOR BT&T
  80. employee Mark 36 programmer BT&T
  81. Mark.introduce
  82. echo
  83.  
  84. ; MARIO IS A 24 YEARS OLD PROGRAMMERS WORKING FOR METAS
  85. employee Mario 24 programmer METAS
  86. Mario.introduce
  87. echo
  88.  
  89. ; BOB IS A 47 YEARS OLD ENGINEER WORKING FOR METAS AS A MANAGER
  90. manager Bob 47 Engineer METAS
  91. Bob.introduce
  92. echo
  93.  
  94. ; MARIO KNOWS NO DIFFERENCE BETWEEN DEFINE AND _DEFINE.
  95. ; Bob DECIDES TO FIRE HIM:
  96. Bob.fire Mario
  97. echo
  98.  
  99. ; MARK KNOWS THE DIFFERENCE BETWEEN ASSIGN AND _ASSIGN.
  100. ; Bob DECIDES TO MAKE HIM AN OFFER:
  101. Bob.offer Mark 100K
  102. echo
  103.  
  104. end
  105.