DEV Community

Cover image for Programação Orientada a Objetos: Pilares
Fabiano Santos Florentino
Fabiano Santos Florentino

Posted on • Edited on

Programação Orientada a Objetos: Pilares

A programação orientada a objetos (POO) é um paradigma de programação que se baseia em quatro pilares: Abstração, Encapsulamento, Herança e Polimorfismo. A abstração envolve a identificação das características essenciais de um objeto, o encapsulamento protege o estado interno do objeto, a herança permite a criação de novas classes com base em outras classes já existentes e o polimorfismo permite que objetos de diferentes classes sejam tratados de forma semelhante. Esses pilares são fundamentais para a construção de programas orientados a objetos robustos, flexíveis e de fácil manutenção.

Abstração

É o processo de identificar as características e comportamentos essenciais de um objeto, ignorando os detalhes que não são relevantes para o contexto em que o objeto será utilizado. Isso permite que os programadores possam modelar a realidade de forma mais simplificada e focada nas necessidades do sistema em questão.

  • Exemplo

Imagine que você está criando um sistema de gerenciamento de biblioteca. Para modelar o objeto livro, você pode identificar suas características essenciais, como título, autor, ano de publicação, número de páginas, editora, etc. e ignorar detalhes que não são relevantes para o sistema, como cor da capa do livro.

  • Código
class Livro attr_accessor :titulo, :autor, :ano_publicacao, :num_paginas, :editora def initialize(titulo, autor, ano_publicacao, num_paginas, editora) @titulo = titulo @autor = autor @ano_publicacao = ano_publicacao @num_paginas = num_paginas @editora = editora end end 
Enter fullscreen mode Exit fullscreen mode
  • Nesse exemplo, a classe Livro possui apenas as características essenciais para o sistema de gerenciamento de biblioteca, como título, autor, ano de publicação, número de páginas e editora. A cor da capa, por exemplo, não é considerada essencial e não foi incluída na classe. Dessa forma, estamos aplicando o conceito de abstração na modelagem do objeto Livro, identificando e separando apenas características essenciais.

Encapsulamento

Principio de ocultar as informações de implementação de um objeto, expondo apenas a interface pública para o usuário. Isso permite que os objetos interajam de forma segura, garantindo que as informações internas não sejam acessadas ou modificadas de forma indevida.

  • Exemplo

Em um sistema de banco, você pode ter uma classe Conta Bancária, que possui informações como número de conta, saldo e titular. Para garantir a segurança dessas informações, você pode encapsular os atributos da classe, definindo-os como privados e criando métodos públicos para acessá-los e modifica-los de forma controlada.

  • Código
class ContaBancaria def initialize(numero, saldo, titular) @numero = numero @saldo = saldo @titular = titular end def saldo @saldo end def depositar(valor) @saldo += valor end def sacar(valor) if valor <= @saldo @saldo -= valor else puts "Saldo insuficiente" end end private def numero @numero end def titular @titular end end 
Enter fullscreen mode Exit fullscreen mode
  • Nesse exemplo, os atributos numero e titular são definidos como privados através da palavra-chave private, o que significa que eles só podem ser acessados dentro da classe. Isso garante que as informações sejam mantidas em segurança e não possam ser modificadas de forma indevida de fora da classe. Os métodos, saldo e depositar e sacar são públicos e permitem que o saldo da conta seja consultado e modificado de forma controlada.

Herança

Processo de criar uma nova classe a partir de uma classe já existente, herdando suas características e comportamentos. Isso permite a reutilização de código, já que as subclasses não precisam implementar todo o código novamente, apenas as partes que precisam ser modificadas ou adicionadas.

  • Exemplo

Em um jogo, você pode ter classe Personagem com atributos e métodos básicos, como saúde, energia, ataque e movimento. A partir dessa classe, você pode criar subclasses como Jogador e Inimigo, herdando os atributos e métodos da classe Personagem e adicionando características específicas de cada tipo de personagem.

  • Código
class Personagem attr_accessor :saude, :energia, :ataque, :movimento def initialize(saude, energia, ataque, movimento) @saude = saude @energia = energia @ataque = ataque @movimento = movimento end end class Jogador < Personagem attr_accessor :pontuacao def initialize(saude, energia, ataque, movimento, pontuacao) super(saude, energia, ataque, movimento) @pontuacao = pontuacao end def aumentar_pontuacao(valor) @pontuacao += valor end end class Inimigo < Personagem attr_accessor :recompensa def initialize(saude, energia, ataque, movimento, recompensa) super(saude, energia, ataque, movimento) @recompensa = recompensa end def aumentar_recompensa(valor) @recompensa += valor end end 
Enter fullscreen mode Exit fullscreen mode
  • Nesse exemplo, a classe Personagem é a classe base ou classe pai, que define os atributos é métodos básicos de um personagem. As classes Jogador e Inimigo são subclasses ou classes filhas que herdam esses atributos e métodos da classe Personagem, mas adicionam características específicas, como a pontuação e a recompensa, respectivamente. O método super é usado nas subclasses para chamar o construtor de classe pai e inicializar seus atributos.

Polimorfismo

Capacidade de objetos de uma mesma classe ou de classes diferentes responderem a uma mesma mensagem de maneiras diferentes. Isso permite a criação de código mais flexível e genérico, que pode ser aplicado a diferentes contextos e situações.

  • Exemplo

Em um sistema de formas geométricas, você pode ter uma classe Forma com um método CalcularÁrea. A partir dessa classe, você pode criar subclasses como Retângulo e Círculo, que implementam o método CalcularÁrea de formas diferentes, dependendo de suas características específicas. Quando você chama o método CalcularÁrea em um objeto de uma dessas subclasses, ele responderá de forma diferente, mesmo que a chamada seja feita a partir da classe Forma.

  • Código
class Animal def falar puts "Este animal não sabe falar!" end end class Cachorro < Animal def falar puts "Au Au!" end end class Gato < Animal def falar puts "Miau!" end end # Criando objetos de diferentes classes animal = Animal.new cachorro = Cachorro.new gato = Gato.new # Chamando o método "falar" em cada objeto animal.falar # "Este animal não sabe falar!" cachorro.falar # "Au Au!" gato.falar # "Miau!" 
Enter fullscreen mode Exit fullscreen mode
  • Nesse exemplo, as classes Cachorro e Gato herdam a classe Animal e implementam o método falar de forma diferente, para produzir o som característico de cada animal. Quando chamamos o método falar em cada objeto, é identificado a classe de cada objeto e chama o método correspondente a essa classe, permitindo que os objetos de diferentes classes sejam tratados de forma semelhante. Isso é um exemplo de polimorfismo.

Top comments (0)