[incr Tcl] o itcl es una extensión del lenguaje de programación Tcl para darle soporte de programación orientada a objetos. Su nombre hace referencia al operador incremento de Tcl, así como C++ utilizaba el operador de incremento para la extensión de C. La sintaxis de la programación de objetos se inspira mayormente en la de C++.
#ejemplo.tcl
package require Itcl
#Se crea la clase Persona
itcl::class Persona {
private variable apellidos
private variable nombres
private variable edad 18
public variable nacimiento 1984
constructor {vapellidos vnombres} {
set apellidos $vapellidos
set nombres $vnombres
puts "¡Bienvenido, $nombres $apellidos!"
}
method setEdad {vedad} {
set edad $vedad
}
method getEdad {} {
return "$edad"
}
method saludo {lugar} {
puts "¡Buen día, $nombres!"
if {$lugar != ""} {
puts "Nosotros estamos en $lugar"
}
}
method esMayor {} {
expr {$edad>=18}
}
method nombrecompleto {} {
return "$nombres $apellidos"
}
}
#Se crea una instancia de la clase Persona
Persona unainstancia Hernández José
#Se fija la edad como 16 (encapsulamiento de edad)
unainstancia setEdad 16
#Se fija el nacimiento modificando la variable publica nacimiento (sin encapsular)
unainstancia configure -nacimiento [expr 2009 - [unainstancia getEdad]]
#Evalua el resultado del métoco esMayor
if {[unainstancia esMayor]} {
puts "[unainstancia nombrecompleto] es mayor."
} else {
puts "[unainstancia nombrecompleto] es menor, ya que tiene [unainstancia getEdad] años."
}
#Se obtiene el valor de la variable publica nacimiento
puts "[unainstancia nombrecompleto] nació en el año [unainstancia cget -nacimiento]."
#Se invoca al método saludo
unainstancia saludo "la Costa Azul"
# Se destruye la instancia de la clase Persona
itcl::delete object unainstancia
# Se destruye la clase Persona, esta clase ya no estará disponible en adelante
itcl::delete class Persona
Como resultado:
$ tclsh ejemplo.tcl ¡Bienvenido, José Hernández! José Hernández es menor, ya que tiene 16 años. José Hernández nació en el año 1993. ¡Buen día, José! Nosotros estamos en la Costa Azul