Skip to main content

Clases abiertas y cerradas en otros lenguajes

Swift​

Al igual que en Kotlin, Swift permite controlar la herencia mediante palabras clave como final para prevenir la herencia y open para permitir que las clases y métodos sean sobrescritos fuera del módulo donde fueron definidos. Sin embargo, Swift introduce un concepto adicional que es el acceso a clases y métodos basado en el módulo.

Clases Cerradas y Abiertas en Swift​

En Swift, las clases son cerradas por defecto al contexto del módulo en el que fueron definidas. Esto significa que, aunque puedas sobrescribir una clase o método dentro de su propio módulo, no podrás hacerlo fuera de él a menos que uses la palabra clave open. De manera similar a Kotlin, Swift fomenta una herencia controlada y explícita.

Clase abierta en Swift:

open class UniversityStudent {
let name: String
let university: String

init(name: String, university: String) {
self.name = name
self.university = university
}

open func study() {
print("Studying at \(university)")
}

open func party() {
print("Partying at \(university)")
}
}
  • open: Permite que una clase o método sea heredado y sobrescrito fuera del módulo actual. Similar a open en Kotlin.

Clases Finales en Swift​

Las clases y métodos pueden marcarse como final para prevenir su herencia o sobrescritura. Esto es similar a no marcar una clase como open en Kotlin, o usar final para métodos específicos.

Clase final en Swift:

final class PhDStudent: UniversityStudent {
let thesisTopic: String

init(name: String, university: String, thesisTopic: String) {
super.init(name: name, university: university)
self.thesisTopic = thesisTopic
}

override func study() {
print("I'm studying a lot!")
}

override func party() {
print("I'm too busy to party!")
}
}
  • final: Previene la herencia de la clase PhDStudent o la sobrescritura de los métodos.

Similitudes entre Kotlin y Swift​

  1. Herencia controlada: Ambos lenguajes promueven una herencia explícita, donde las clases deben ser marcadas como open (en Kotlin) o open (en Swift) para permitir su herencia fuera del módulo.
  2. Clases cerradas por defecto: Las clases en ambos lenguajes son cerradas por defecto a menos que se especifique lo contrario.
  3. Métodos sobrescribibles: Ambos lenguajes requieren que los métodos se marquen explícitamente como sobrescribibles (open en Kotlin y open en Swift).

Diferencias entre Kotlin y Swift​

  1. Módulos: En Swift, las clases y métodos pueden ser sobrescritos dentro del mismo módulo sin usar open, mientras que en Kotlin, una clase o método debe estar marcado como open para ser heredado dentro o fuera del módulo.
  2. Acceso por defecto: Mientras que en Kotlin las clases son cerradas por defecto en todos los contextos, en Swift, las clases pueden ser heredadas dentro del mismo módulo sin open.

Comparación Final​

AspectoKotlinSwift
Clases abiertas por defectoNoNo, pero abiertas dentro del módulo
Clases cerradas por defectoSíSí, fuera del módulo
Palabra clave para abrir clasesopenopen
Palabra clave para cerrar clasesCerradas por defecto o finalfinal
Métodos sobrescribiblesopenopen