Sobes.tech
Junior

¿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
        }
    }