Programación orientada a objetos¶
Definición y creación de objetos¶
En Kotlin todo es un objeto. Podemos definir clases y crear objetos a partir de ellas.
Declaración de una clase simple¶
class Persona(val nombre: String, var edad: Int)
val→ propiedad inmutable.var→ propiedad mutable.
Crear un objeto¶
fun main() {
val persona1 = Persona("Ana", 30)
println("Nombre: ${persona1.nombre}, Edad: ${persona1.edad}")
persona1.edad = 31
println("Edad actualizada: ${persona1.edad}")
}
Métodos dentro de una clase¶
class Coche(val marca: String, var velocidad: Int) {
fun acelerar() {
velocidad += 10
}
}
fun main() {
val miCoche = Coche("Toyota", 100)
miCoche.acelerar()
println("Velocidad: ${miCoche.velocidad}")
}
Ejemplo de manejo de objetos¶
class Persona(val nombre: String, var edad: Int) {
fun presentarse() {
println("Hola, soy $nombre y tengo $edad años.")
}
}
class Empleado(nombre: String, edad: Int, val puesto: String, var salario: Double)
: Persona(nombre, edad) {
fun trabajar() {
println("$nombre está trabajando como $puesto.")
}
fun mostrarSalario() {
println("El salario de $nombre es $salario €.")
}
}
fun main() {
val persona = Persona("Ana", 28)
persona.presentarse()
val empleado = Empleado("Carlos", 35, "Desarrollador", 2800.0)
empleado.presentarse() // heredado de Persona
empleado.trabajar()
empleado.mostrarSalario()
}
class vs data class¶
Si usamos data class en Kotlin, qseue añade automáticamente `toString(), equals(), hashCode() y copy()
data class Persona(val nombre: String, var edad: Int) {
fun presentarse() {
println("Hola, soy $nombre y tengo $edad años.")
}
}
data class Empleado(
val puesto: String,
var salario: Double,
val nombreEmpleado: String,
var edadEmpleado: Int
) : Persona(nombreEmpleado, edadEmpleado) {
fun trabajar() {
println("$nombreEmpleado está trabajando como $puesto.")
}
fun mostrarSalario() {
println("El salario de $nombreEmpleado es $salario €.")
}
}
fun main() {
val persona = Persona("Ana", 28)
persona.presentarse()
println(persona.toString()) // generado automáticamente por data class
val empleado = Empleado("Desarrollador", 2800.0, "Carlos", 35)
empleado.presentarse() // heredado de Persona
empleado.trabajar()
empleado.mostrarSalario()
// Usando copy() (disponible en data class)
val empleado2 = empleado.copy(salario = 3000.0)
println(empleado2.toString())
}
A tener en cuenta
Con data class:
- Menos código repetitivo.
- Métodos útiles (
toString(),copy(),equals()) vienen listos. - Muy recomendable para modelos de datos en apps.
Actividades (no evaluables)¶
-
AR K01. Crea una clase llamada Producto que tenga como atributos el nombre y el precio. La clase debe permitir:
- Mostrar la información del producto (nombre y precio).
- Aplicar un descuento al precio.
Tareas:
- Crea varios objetos Producto.
- Aplica descuentos diferentes a cada producto.
- Muestra el precio final después de aplicar el descuento.
-
AR K02. Crea una clase base llamada
Animalque tenga como atributo el nombre y un método llamadohacerSonido(). Después, crea una clasePerroque herede deAnimaly sobrescriba el métodohacerSonido(). Además, añade un método propio de la clasePerro.Tareas:
- Crea un objeto de tipo
Animaly un objeto de tipoPerro. - Llama al método
hacerSonido()en ambos casos y observa la diferencia. - Añade una nueva clase
Gatoque también herede deAnimale implemente su propio sonido. - Crea una lista de animales (perros, gatos, animales genéricos) y recórrela invocando el método
hacerSonido()en todos los casos.
- Crea un objeto de tipo