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
Animal
que tenga como atributo el nombre y un método llamadohacerSonido()
. Después, crea una clasePerro
que herede deAnimal
y sobrescriba el métodohacerSonido()
. Además, añade un método propio de la clasePerro
.Tareas:
- Crea un objeto de tipo
Animal
y un objeto de tipoPerro
. - Llama al método
hacerSonido()
en ambos casos y observa la diferencia. - Añade una nueva clase
Gato
que también herede deAnimal
e 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