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 aopen
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 clasePhDStudent
o la sobrescritura de los métodos.
Similitudes entre Kotlin y Swift​
- Herencia controlada: Ambos lenguajes promueven una herencia explÃcita, donde las clases deben ser marcadas como
open
(en Kotlin) oopen
(en Swift) para permitir su herencia fuera del módulo. - Clases cerradas por defecto: Las clases en ambos lenguajes son cerradas por defecto a menos que se especifique lo contrario.
- Métodos sobrescribibles: Ambos lenguajes requieren que los métodos se marquen explÃcitamente como sobrescribibles (
open
en Kotlin yopen
en Swift).
Diferencias entre Kotlin y Swift​
- 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 comoopen
para ser heredado dentro o fuera del módulo. - 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​
Aspecto | Kotlin | Swift |
---|---|---|
Clases abiertas por defecto | No | No, pero abiertas dentro del módulo |
Clases cerradas por defecto | Sà | SÃ, fuera del módulo |
Palabra clave para abrir clases | open | open |
Palabra clave para cerrar clases | Cerradas por defecto o final | final |
Métodos sobrescribibles | open | open |