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 - Nesse exemplo, a classe
Livropossui apenas as características essenciais para o sistema de gerenciamento de biblioteca, comotítulo,autor,ano de publicação,número de páginaseeditora. 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 objetoLivro, 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 - Nesse exemplo, os atributos
numeroetitularsão definidos como privados através da palavra-chaveprivate, 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,saldoedepositaresacarsã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 - Nesse exemplo, a classe
Personagemé a classe base ou classe pai, que define os atributos é métodos básicos de um personagem. As classesJogadoreInimigosão subclasses ou classes filhas que herdam esses atributos e métodos da classePersonagem, mas adicionam características específicas, como apontuaçãoe a recompensa, respectivamente. O métodosuperé 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!" - Nesse exemplo, as classes
CachorroeGatoherdam a classeAnimale implementam o métodofalarde forma diferente, para produzir o som característico de cada animal. Quando chamamos o métodofalarem 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)