Nuss… E Agora?!?

20ago/071

Orientação a Objetos: Q raios é isso!? (parte 2)

Continuando o artigo anterior, o básico da Orientação a Objetos pode ser entendido como um conjunto de classes e objetos que se relacionam. Hoje vou definir essas relações, começando pelo mais importante de tudo:

  • Encapsulamento

Vamos pensar num cofre. Ele tem uma área externa, com uma maçaneta para abrir/fechar a porta e um display onde você entra com a senha para destravar a porta. Essas partes às quais todos nós temos acesso, na orientação a objetos, são chamados de parte pública, sejam eles atributos ou métodos.

Nessa altura, nosso cofre está assim:

E pra que serve um cofre??? Ponto para quem disse que é para guardar as coisas. Na parte de dentro, protegido do acesso de pessoas indesejáveis, estão as coisas guardadas. Esse conteúdo protegiddo do acesso das pessoas é o que chamamos, em orientação a objetos, de parte privada. Como a parte pública, a parte privada pode ter métodos ou atributos. Nossa classe então ficaria assim:

E se você permitisse a somente algumas pessoas especiais o acesso ao conteúdo desse mesmo cofre, essa parte privada se tornaria uma parte protegida. Novamente, uma parte protegida pode ser composta por métodos, atributos ou ambos.

Encapsulamento é justamente isso: dar proteção diferente às diferentes partes de uma classe. Quando um atributo ou método é privado, somente a própria classe pode acessá-lo e usá-lo (somente o cofre pode tocar seu conteúdo). Se fosse público, qualquer classe poderia utilizar-se daqueles métodos ou atributos (qualquer um que passar poderá ir lá e entrar com uma senha no cofre). Agora, para explicar exatamente como funciona uma área protegida, temos que falar de herança.

  • Herança

Voltemos ao Cofre. O cofre é um tipo de contêiner, um objeto que contém outros objetos. Guardadas as devidas diferenças, um cofre é como uma bolsa, uma caixa, uma garrafa ou uma mala. Todos são feitos de algum material, guardam uma quantidade de coisas dentro e podem ter ou não uma senha. Você pode colocar ou retirar coisas do contêiner, bem como abrir e fechá-lo. Esses são, respectivamente, atributos e métodos intrínsecos do objeto: aquilo que todos os objetos daquela família possuem.

Quando falamos em herança, nós pegamos esses atributos intrínsecos e jogamos numa classe especial, a classe mãe. Todas as classes daquele tipo, os CONTÊINERS, herdam da classe mãe os atributos e métodos que ela tem a oferecer. A relação de nossas classes fica então assim:

Nesse tipo de relacionamento, existem as classes mães e as classes filhas. Quando uma classe (agora chamada de filha) herda algo de uma outra classe (agora chamada de mãe), ela passa a possuir não só aquilo que é dela, mas também aquilo que a classe mãe tem. Esses atributos que só a classe filha tem são os chamados atributos extrínsecos, coisas não comuns a todos os indivíduos daquele tipo. Adicionando alguns extrínsecos nas classes filhas, tudo ficaria assim:

Nesse exemplo, CAIXA, além de possuir o atributo “tampa”, possui os atributos “material”, “conteúdo” e “senha” por herança. Também por herança ela possui os métodos “colocarCoisaDentro()”, “retirarCoisaDeDentro()”, “abrir()” e “fechar()”. É assim que a herança funciona na orientação a objetos: passando tudo da classe mãe para a classe filha.

“Ta, ta. Mas e o raio do Protected???” Pois então, quando você define que um atributo ou método é Protected, você está permitindo acesso SOMENTE às classes filhas.

Vale lembrar que, quando fazemos uma herança, a gente pega cópias do que está escrito e joga naquela classe. Herança não significa que estamos gastando o dinheiro dos nossos pais milionários e sim que agora o dinheiro é todo nosso.

No próximo artigo, pretendo falar sobre sobrecarga e polimorfismo. Até!

[EDIT] Pegaê links para as Partes 1 e 3 do artigo!