Clases y objetos
Importante: No hay mucha información sobre esto ya que este lenguaje no está basado en el paradigma orientado a objetos, sin embargo en la versión 1 se soporta el uso de clases y objetos de forma básica. En la versión 2 se ha quitado completamente esta estructura.
¿Qué son las clases?
Las clases son estructuras que encapsulan datos (propiedades o atributos) y funciones relacionadas (métodos) Que permiten crear instancias de un objeto utilizando el molde que proporciona la clase.
Vamos a crear una clase llamada Programas, la cual va a inicializarse con 2 variables predeterminadas (atributos de clase)
class Programas {
nombre := "Microsoft Edge"
ejecutable := "msedge.exe"
}
En el código anterior tenemos la clase, el molde para crear instancias de objetos. Sin embargo aún no hemos creado ninguno.
Para instanciar un objeto a partir de esta clase, creamos una variable que llame al Nombre de la clase precedido por la palabra New.
objeto := New NombreDeLaclase()
Y para obtener algún atributo de ese objeto, lo llamamos con notación de punto y el nombre de la propiedad.
objeto.propiedad
;inicio del código
class Programas {
nombre := "Microsoft Edge"
ejecutable := "msedge.exe"
}
programa := New Programas()
MsgBox, 0,% "Ahora vamos a abrir el programa " programa.nombre
Run,% programa.ejecutable
ExitApp
;fin del código
El constructor
En programación orientada a objetos, un constructor es un método especial que se llama automáticamente cuando se crea una instancia de una clase. El constructor es responsable de inicializar los valores de las propiedades y establecer el estado inicial del objeto. De esta manera podemos especificar el valor de esos atributos, y no solo contar con los definidos de forma predeterminada en la clase
En AutoHotkey, el constructor se define utilizando el método especial "new".
;inicio del código
class Programas {
__New(nombre, ejecutable) {
this.nombre := nombre
this.ejecutable := ejecutable
}
}
edge := New Programas("Microsoft Edge", "msedge.exe")
chrome := New Programas("Google Chrome", "chrome.exe")
notepad := New Programas("Bloc de notas", "notepad.exe")
MsgBox, 0,% "Nombre: " edge.nombre "- Nombre del ejecutable: " edge.ejecutable
MsgBox, 0,% "Nombre: " chrome.nombre "- Nombre del ejecutable: " chrome.ejecutable
MsgBox, 0,% "Nombre: " notepad.nombre "- Nombre del ejecutable: " notepad.ejecutable
;fin del código
En este código creamos la clase Programas. La misma tiene el constructor que inicializa las variables con lo recibido por parámetro.
El prefijo this hace referencia a la propia clase. Esto sirve para cuando hay que utilizar esa variable dentro de algún método de la misma. Con él se especifica que es la variable creada dentro de si misma y no alguna otra con el mismo nombre.
Luego creamos 3 objetos llamando a New y el nombre de la clase con los argumentos que requiere el constructor de esa clase que en este caso son 2.
Y por último llamamos a los atributos de esos objetos escribiendo el nombre del objeto, notación de punto, y el nombre del atributo.
Métodos
Los métodos de clase son funciones que se definen dentro de una clase y están diseñados para trabajar con las propiedades de esa clase. Los métodos de clase son una forma de encapsular la lógica y el comportamiento relacionados con la clase en un solo lugar. A simple vista son funciones, pero que sin embargo están encapsuladas dentro de un objeto. De tal forma que se pueden llamar al igual que los atributos, y que pueden interactuar con las variables creadas dentro de la instancia utilizando this.
;inicio del código
class Programas {
__New(nombre, ejecutable) {
this.nombre := nombre
this.ejecutable := ejecutable
}
abrir() {
MsgBox, 4,% "¿Seguro que quieres abrir el programa " this.nombre "?"
IfMsgBox Yes
run,% this.ejecutable
}
existe() {
Process, Exist,% this.ejecutable
if (ErrorLevel != 0) {
MsgBox, 0,% "El programa " this.nombre " está en ejecución."
} Else {
MsgBox, 0,% "El programa " this.nombre " no está en ejecución."
}
}
}
notepad := New Programas("Bloc de notas", "notepad.exe")
notepad.existe()
notepad.abrir()
sleep 2000
notepad.existe()
;fin del código
En este código creamos el objeto notepad, y llamamos al método existe. Al ser un método hay que colocar los paréntesis. Luego del mensaje que avisa si ese proceso existe, llamamos al método abrir. Este va a ejecutar el programa siempre y cuando pulsemos si en la ventana modal. Se realiza una espera de 2 segundos, y volvemos a llamar al método existe() Descargar el código de ejemplo