当前位置: 首页 > 工具软件 > iTcl > 使用案例 >

itcl class example

孟德曜
2023-12-01
itcl class example

package require Itcl

itcl::class Animal {
  variable name
  variable knowledge
  variable habitat
  variable topSpeed
  variable color
  variable picture

  method answer: {aString}
  method name: {aString}
  method talk {}
  method habitat: {aHabitat}
  method learn:action: {aString aBlock}
  method reset {}
  method reactTo: {aWord}
}

itcl::class Bird {
  inherit Animal
  variable flying
}

itcl::class Parrot {
  inherit Bird
  variable vocabulary
 
  method talk {}
  method vocabulary: {aString}
}

itcl::class Penguin {
  inherit Bird
}

itcl::class Mammal {
  inherit Animal
}

itcl::class Dog {
  inherit Mammal
  variable barksAlot
 
  method bark {}
  method beNoisy {}   
  method beQuiet {}   
  method talk {}
}

itcl::class Whale {
  inherit Mammal
}


itcl::body Animal::answer: {aString} {
  # "Display a message for the receiver animal
  #  on the Transcript window, consisting
  #  of the animal's class name and name preceding
  #  aString."
  puts "[$this info class] $name: $aString"}

itcl::body Animal::name: {aString} {
  # "Change the receiver animal's name to aString."
  set name $aString}

itcl::body Animal::talk {} {
  # "Display a message that the receiver can't talk."
  $this answer: "I can't talk"}



itcl::body Parrot::talk {} {
  # "Display a message containing the receiver
  #  parrot's vocabulary."
  $this answer: $vocabulary}
   
itcl::body Parrot::vocabulary: {aString} {
  # "Change the receiver parrot's vocabulary
  #  to aString."
  set vocabulary $aString}



itcl::body Dog::bark {} {
  #    "Have the receiver dog bark by ringing the bell
  #     and displaying a bark message."
  puts -nonewline "\a"    ;# Terminal bell
  if {$barksAlot} {
    $this answer: "Bow Wow, Bow Wow, Bow Wow!!"
  } else {
    $this answer: "Woof"
  }}
 
itcl::body Dog::beNoisy {} {
  #    "Change the status of the receiver dog to noisy."
  set barksAlot 1
  $this answer: "I'll bark a lot"}
   
itcl::body Dog::beQuiet {} {
  #    "Change the status of the receiver dog to quiet."
  set barksAlot 0
  $this answer: "I won't bark much"}
   
itcl::body Dog::talk {} {
  #    "Have the receiver dog talk by barking unless
  #     barksAlot is nil, in which case the superclass
  #     can decide how to talk."
  if {[info exists barksAlot]} {
    $this bark
  } else {
    chain   ;# super talk
  }}

 
  # "creating animals"
  Dog Snoopy
  Snoopy name: "Snoopy"
  Snoopy beQuiet
  Dog Lassie
  Lassie name: "Lassie"
  Lassie beNoisy
  Penguin Wally
  Wally name: "Wally"
  Parrot Polly
  Polly name: "Polly"
  Polly vocabulary: "Polly want a Cracker"
  Whale Moby
  Moby name: "Moby"
 
 
  # "let's hear them talk"
  Lassie talk
  Snoopy talk
  Wally talk
  Polly talk; Polly talk; Polly talk
  Polly vocabulary: "Screeech@#!? Don''t bother me!"
  Polly talk
  Moby talk
  Snoopy beNoisy; Snoopy talk
  Lassie beQuiet; Lassie talk  
  

转载于:https://www.cnblogs.com/greencolor/archive/2011/04/19/2020962.html

 类似资料:

相关阅读

相关文章

相关问答