OOP Ruby: encapsulamento
O curso trata de como uma classe Ruby decide quais métodos formam a sua interface pública. Com uma classe BankAccount que cobra taxa de saque, ele mostra por que deixar métodos internos públicos permite que código de fora dependa deles. Depois apresenta os métodos private, chamados sem receiver explícito, e a exceção do self literal, válida desde o Ruby 2.7. Explica os métodos protected, que aceitam receiver de dentro da mesma classe, compara os dois pelas mensagens de NoMethodError e aplica as mesmas regras aos métodos gerados por attr_accessor.
O que você vai aprender
- ✓Por que todo método Ruby é público por padrão e quando estreitar isso
- ✓Como chamar métodos private sem receiver explícito
- ✓A exceção do self literal ao private, válida desde o Ruby 2.7
- ✓Como protected aceita receiver de dentro da mesma classe ou de uma subclasse
- ✓Como distinguir private e protected pelas mensagens de NoMethodError
- ✓Como definir a visibilidade de métodos gerados por attr_reader, attr_writer e attr_accessor
Por que encapsulamento esconde implementação
O curso Variáveis e atribuição construiu esta classe. Leia de novo com outros olhos:
Ler a aula completa grátis →Currículo
7 aulasPor que encapsulamento esconde implementação
Mostra como um service_fee público deixa código de fora depender de um detalhe de implementação de BankAccount.
private: sem receiver explícito
Marca service_fee como private: a chamada sem receiver funciona e account.service_fee levanta NoMethodError.
A exceção do self ao private
Explica por que self.service_fee funciona desde o Ruby 2.7, mas a chamada por uma variável igual a self falha.
protected: um receiver explícito, da mesma classe
Torna balance protected para richer_than? chamar other.balance, enquanto chamadas de fora da classe levantam NoMethodError.
private vs protected, lado a lado
Compara private e protected lado a lado, inclusive chamadas em outra instância e a partir de uma classe sem relação.
A suposição escondida do attr_accessor
Mostra que attr_writer e attr_accessor geram métodos públicos comuns e como chamar um setter privado.
Juntando tudo: BankAccount, totalmente encapsulado
Revisa a classe BankAccount completa e liga cada escolha de visibilidade à regra que a justifica.