Constructor Primario y Secundario en Kotlin
¡Bienvenidos a una nueva clase sobre Kotlin! En esta oportunidad, continuaremos nuestro viaje en la programación orientada a objetos con un enfoque en constructores.
En clases anteriores, hemos cubierto los conceptos básicos de clases y constructores primarios. Ahora, es hora de llevar nuestro conocimiento al siguiente nivel.
Constructor: La Base de la Inicialización
Un constructor es una función especial dentro de una clase que se utiliza para inicializar sus objetos. Es el punto de partida para configurar los atributos y preparar la instancia para su uso.
Hasta ahora, hemos trabajado con constructores primarios, pero hay más en este asunto.
Constructor Primario
Como recordarás, el constructor primario se declara directamente en la declaración de la clase. Puede incluir parámetros que definen los atributos necesarios para inicializar un objeto. Aquí un ejemplo simple:
class Persona(val nombre: String, val edad: Int)
Constructor Secundario: Más Flexibilidad
Un constructor secundario es una función dentro de la clase que te permite crear objetos con diferentes conjuntos de atributos. Estos constructores son ideales cuando necesitas diferentes formas de inicializar tus objetos según situaciones específicas.
Para crear un constructor secundario, primero debemos asegurarnos de tener un constructor primario presente. Luego, podemos agregar más atributos que queramos inicializar opcionalmente.
class Cancion(val titulo: String, val artista: String) {
constructor(titulo: String, artista: String, duracion: Int) : this(titulo, artista) {
// Lógica adicional para manejar la duración
}
}
Puedes ver cómo se invoca al constructor primario cuando ponemos this(titulo, artista)
.
Múltiples Constructores Secundarios: La Versatilidad de Opciones
La magia radica en que puedes tener varios constructores secundarios, cada uno con su propio conjunto de parámetros. Esto te brinda la flexibilidad de inicializar objetos de diferentes maneras, según las necesidades.
class Cancion(val titulo: String, val artista: String) {
constructor(titulo: String, artista: String, duracion: Int) : this(titulo, artista) {
// Lógica adicional para manejar la duración
}
constructor(titulo: String, artista: String, duracion: Int, fecha: LocalDate) : this(titulo, artista) {
// Lógica adicional para manejar la duración
}
}
El Criterio de Elegir Constructores Secundarios
La pregunta clave es cuándo y cómo usar los constructores secundarios. Aquí entra en juego el criterio basado en las historias de usuario.
Si tu entidad puede ser creada con múltiples combinaciones de atributos, los constructores secundarios son la elección correcta.
Cada constructor secundario puede contener lógica adicional o atributos adicionales, lo que agrega flexibilidad y adaptabilidad.
Ejemplo Práctico
Imagina que estamos creando un blog en Kotlin.
Tenemos dos formas de crear un post: una forma rápida y una forma detallada.
En la forma rápida, solo necesitamos name
, author
y date
. En la forma detallada, añadimos content
y category
.
Utilizaremos los constructores secundarios para lograr esto de manera efectiva.
class Post( // <-- constructor primario
val name: String,
val author: String,
val date: LocalDateTime
) {
var body: String = ""
var category: String = ""
constructor( // <-- constructor secundario
name: String,
author: String,
date: LocalDateTime,
content: String,
category: String
) : this(name, author, date) {
body = content
this.category = category
}
fun publish(): String {
return """
Post Name: $name
Author: $author
Date: $date
${getCategorySection()}
${getContent()}
""".trimIndent()
}
private fun getContent(): String {
return if (body.isNotBlank() && body.isNotEmpty()) {
"""Content: $body
""".trimIndent()
} else ""
}
private fun getCategorySection(): String {
return if (category.isNotBlank() && category.isNotEmpty()) {
"""Category: $category
""".trimIndent()
} else ""
}
}
fun main() {
val quickPost = Post("Tutorial de Kotlin", "Anahí Salgado", LocalDateTime.now())
println(quickPost.publish())
val detailedPost = Post("Clases de Kotlin", "Anahí Salgado", LocalDateTime.now(), "Aprende las bases de Kotlin", "Programación")
println(detailedPost.publish())
}
En este ejemplo, hemos implementado constructores secundarios que permiten diferentes niveles de inicialización.
Tiene atributos como el name
, author
, date
, content
y category
.
El constructor primario inicializa name
, author
, date
, mientras que un constructor secundario permite establecer content
y category
adicionalmente.
El método publish()
formatea y devuelve los detalles de la publicación, incluyendo nombre, autor, fecha, contenido y categoría.
En main()
, se crean dos instancias de Post
, una básica y otra detallada, cuyos detalles se imprimen usando publish()
.
Conclusión
Los constructores en Kotlin son un pilar fundamental para crear objetos inicializados y flexibles.
Desde los constructores primarios que definen los atributos esenciales hasta los constructores secundarios que ofrecen múltiples formas de inicialización, dominar esta herramienta te dará un mayor control sobre tus objetos.
¡Con esta comprensión más profunda de los constructores en Kotlin, estás preparado para crear objetos más versátiles y adaptados a diferentes situaciones!
En mi Curso de Diseño Orientado a Objetos y Principios SOLID te enseño todo desde cero y paso a paso con ejemplos reales, te dejé un regalo en este link para que lo adquieras a un precio especial.
😊 Gracias por comparitr haces un excelente trabajo divulgando conocimiento.