Saltar al contenido principal

Clases y Objetos

Programación orientada a objetos

La programación orientada a objetos (POO) es un paradigma de programación que se enfoca en el uso de "objetos" como unidades básicas de programación. Un objeto es una instancia de una clase, que es una plantilla o molde para crear objetos.

Un objeto tiene dos partes principales: propiedades (también conocidos como variables de instancia) y métodos (también conocidos como funciones de instancia). Las propiedades representan las características de un objeto, mientras que los métodos representan las acciones que un objeto puede realizar.

La POO se basa en tres principios fundamentales: encapsulamiento, herencia y polimorfismo. El encapsulamiento se refiere a la ocultación de los detalles de implementación de un objeto, permitiendo que los objetos interactúen entre sí a través de una interfaz pública. La herencia permite que una clase herede las características y comportamientos de otra clase, mientras que el polimorfismo permite que un objeto tome diferentes formas dependiendo del contexto.

En JARU, se pueden crear clases utilizando la palabra clave class seguida del nombre de la clase. Dentro de la clase, se pueden definir propiedades (variables) y métodos (funciones) que son específicos para esa clase.

Declaración de clases

En JARU, las clases son una herramienta fundamental para la programación orientada a objetos. Una clase es un molde o plantilla para crear objetos que comparten características y comportamientos específicos.

La declaración de una clase en JARU se inicia con la palabra clave class seguida del nombre de la clase:

class Persona
// propiedades y metodos van aqui
end

En este caso, acabamos de crear una clase llamada "Persona". Dentro de esta clase podemos declarar propiedades y métodos.

Declaración de propiedades

En JARU, las propiedades son valores asociados a una instancia de una clase. Estas propiedades pueden ser creadas en tiempo de ejecución y pueden ser accedidas y modificadas tanto desde dentro de la clase (utilizando la palabra clave this) como desde fuera de la clase con la sintaxis miClase.propiedad.

this

La palabra clave this en JARU se refiere a la instancia actual de un objeto en una clase. Se utiliza para acceder a las propiedades y métodos de la clase desde dentro de la misma.

La declaración de propiedades en JARU se realiza de manera dinámica, es decir, no es necesario declararlas previamente en la clase. El método init es una forma común de inicializar las propiedades al momento de crear una nueva instancia de una clase.

class Persona
def init(nombre)
this.nombre = nombre
end
end

var p1 = Persona("Juan")
var p2 = Persona("Maria")

print(p1.nombre) // muestra "Juan"
print(p2.nombre) // muestra "Maria"

Las propiedades también pueden ser creadas y modificadas desde fuera de la clase:

class Persona
def init()
end
end

var juan = Persona()
juan.alias = "Krilin" // Crea la propiedad "alias" en el objeto "juan"
print(juan.alias)
info

Las propiedades son asociadas a una instancia de un objeto, no a la clase en sí. Esto quiere decir que cada vez que se crea una nueva instancia de una clase, se crea una copia independiente de sus propiedades asociada a la instancia.

Declaración de métodos

Los métodos son funciones que se definen dentro de una clase y tienen acceso a las propiedades de la misma. La sintaxis para declarar un método en JARU es la palabra clave def seguida del nombre del método, los parámetros entre paréntesis, y debe finalizar con end.

class Persona
def saludar()
print("Hola!")
end
end

Los métodos también pueden tener parámetros y retornar valores:

class Calculadora
def sumar(a, b)
return a + b
end
end

Los métodos pueden acceder a las propiedades de una clase usando this:

class Persona
def init()
this.nombre = ""
end

def saludar()
print("Hola! " + this.nombre)
end
end

Constructores

El constructor es un método especial llamado init() que se utiliza para inicializar un objeto de una clase al momento de su creación:

class NombreDeLaClase
def init()
// código de inicialización
end
end
info

El constructor se llama automáticamente cuando se crea un nuevo objeto de una clase. El nombre del constructor siempre debe ser init y debe estar dentro de la definición de la clase.

class Persona
def init()
this.nombre = "Sin nombre"
this.edad = 0
end
end

También es posible pasar parámetros al constructor:

class Persona
def init(nombre, edad)
this.nombre = nombre
this.edad = edad
end
end

Sobrecarga de Constructores

En JARU se permite la sobrecarga del método constructor init, que se refiere a la capacidad de tener varias versiones de este método con diferentes argumentos:

class Persona
def init(nombre, edad)
this.nombre = nombre
this.edad = edad
end

def init(nombre)
this.nombre = nombre
this.edad = 0
end
end

var p1 = Persona("Juan", 25)
var p2 = Persona("Maria")

La sobrecarga del método init es una técnica muy útil para crear objetos de diferentes formas y adaptarse a las necesidades específicas del programa.

Herencia de clases

La herencia en programación orientada a objetos es un mecanismo que permite a una clase (llamada clase hija o subclase) heredar las propiedades y métodos de otra clase (llamada clase padre o superclase).

En JARU, el concepto de herencia se implementa mediante el uso de los dos puntos ::

class Padre
def init()
propiedad1 = "Valor"
end

def metodo1()
print("Hola, soy el método 1 del padre")
end
end

class Hijo : Padre
def metodo2()
print("Hola, soy el método 2 del hijo")
end
end

En este ejemplo, la clase Hijo hereda de la clase Padre, por lo que tiene acceso a la propiedad "propiedad1" y al método "metodo1", y puede también tener sus propias propiedades y métodos.

Encapsulamiento

El encapsulamiento es un principio fundamental de la programación orientada a objetos que se refiere a la ocultación de detalles de implementación de una clase. En JARU, el modificador de acceso private se utiliza para declarar propiedades y métodos que solo pueden ser accedidos desde dentro de la clase.

class Persona
private edad

def init(edad)
this.edad = edad
end
end

var p = Persona(25)
print(p.edad) // Error, la propiedad edad es privada
info

En JARU no existe la cláusula protected, pero sí se puede acceder a las propiedades y métodos privados desde una clase hija mediante la herencia.

Polimorfismo

El polimorfismo es uno de los pilares de la programación orientada a objetos que permite que un objeto de una clase pueda ser tratado como si fuera de otra clase relacionada. Esto significa que una misma acción puede tener distintos comportamientos en diferentes objetos, dependiendo de su clase.

Por ejemplo, imagine que tiene una clase llamada "Animal" y dos subclases "Gato" y "Perro". La clase "Animal" tiene un método llamado "hacerRuido" que se sobreescribe en las subclases "Gato" y "Perro" para emitir un sonido diferente. Cuando se crean objetos de cada subclase y se les llama a hacerRuido, cada objeto emite un sonido distinto, pero aún así pueden ser tratados como si fueran objetos de la clase "Animal".

El polimorfismo permite que se utilice una misma acción o método con distintos objetos, y dependiendo de su clase, se realice una acción diferente.