¿Qué son los principios de la programación orientada a objetos?
sobes.tech AI
Respuesta de la IA
Principios de POO:
-
Encapsulación: Agrupación de datos (propiedades) y métodos que operan con estos datos en un solo objeto y ocultando la implementación interna del mundo exterior. El acceso a los datos se realiza a través de interfaces públicas específicas (métodos).
// Ocultación de la implementación interna de la propiedad balance class Account { private var balance: Double = 0.0 func deposit(amount: Double) { if amount > 0 { balance += amount } } func getBalance() -> Double { return balance } } -
Herencia: Mecanismo que permite crear una nueva clase (hija) basada en una existente (padre), heredando sus propiedades y métodos. Esto favorece la reutilización del código.
// Las clases Dog y Cat heredan las propiedades y métodos de la clase Animal class Animal { let name: String init(name: String) { self.name = name } func makeSound() { print("\(name) emite un sonido") } } class Dog: Animal { override func makeSound() { print("\(name) ladra") } } class Cat: Animal { override func makeSound() { print("\(name) maúlla") } } -
Polimorfismo: Capacidad de objetos de diferentes clases para responder a un mismo mensaje (llamada a método) de manera distinta, dependiendo de su tipo.
// Diferentes implementaciones del método makeSound() en las clases Dog y Cat func playSound(of animal: Animal) { animal.makeSound() // Llamada polimórfica } let myDog = Dog(name: "Bobby") let myCat = Cat(name: "Murka") playSound(of: myDog) // Mostrará "Bobby ladra" playSound(of: myCat) // Mostrará "Murka maúlla" -
Abstracción: Destacar las características esenciales de un objeto e ignorar las no esenciales. Crear representaciones generales de objetos.
// Representación de una figura geométrica sin implementación concreta protocol Shape { func calculateArea() -> Double func calculatePerimeter() -> Double } // Implementaciones concretas para círculo y cuadrado struct Circle: Shape { let radius: Double func calculateArea() -> Double { return Double.pi * radius * radius } func calculatePerimeter() -> Double { return 2 * Double.pi * radius } } struct Square: Shape { let side: Double func calculateArea() -> Double { return side * side } func calculatePerimeter() -> Double { return 4 * side } }