Junior
Quais são os princípios da Programação Orientada a Objetos?
sobes.tech IA
Resposta da IA
Princípios de POO:
-
Encapsulamento: Agrupamento de dados (propriedades) e métodos que operam com esses dados num único objeto e ocultando a implementação interna do mundo exterior. O acesso aos dados é feito através de interfaces públicas específicas (métodos).
// Ocultação da implementação interna da propriedade balance class Account { private var balance: Double = 0.0 func deposit(amount: Double) { if amount > 0 { balance += amount } } func getBalance() -> Double { return balance } } -
Herança: Mecanismo que permite criar uma nova classe (filha) baseada numa existente (pai), herdando as suas propriedades e métodos. Isto favorece a reutilização de código.
// As classes Dog e Cat herdam as propriedades e métodos da classe Animal class Animal { let name: String init(name: String) { self.name = name } func makeSound() { print("\(name) emite um som") } } class Dog: Animal { override func makeSound() { print("\(name) late") } } class Cat: Animal { override func makeSound() { print("\(name) mia") } } -
Polimorfismo: Capacidade de objetos de diferentes classes responderem a uma mesma mensagem (chamada de método) de forma distinta, dependendo do seu tipo.
// Diferentes implementações do método makeSound() nas classes Dog e Cat func playSound(of animal: Animal) { animal.makeSound() // Chamada polimórfica } let myDog = Dog(name: "Bobby") let myCat = Cat(name: "Murka") playSound(of: myDog) // Mostrará "Bobby late" playSound(of: myCat) // Mostrará "Murka mia" -
Abstração: Destacar as características essenciais de um objeto e ignorar as não essenciais. Criar representações gerais de objetos.
// Representação de uma figura geométrica sem implementação concreta protocol Shape { func calculateArea() -> Double func calculatePerimeter() -> Double } // Implementações concretas para círculo e quadrado 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 } }