quarta-feira, 27 de fevereiro de 2013

C++: Entenda os modificadores de Acesso (Public, Protected e Private)

Isso não é só no C++, mas na maiorias das linguagens orientadas ao objeto, sempre nos deparamos com esses três modificadores de acesso: Public, Protected e Private. Eles estão praticamente sempre, nos métodos e nos atributos, mas poucas pessoas sabem o que realmente faz. (Ok, na verdade, poucas pessoas sabem usar as vantagens do Orientado ao Objeto, mas isso fica para outro dia)

Para entender melhor, vamos supor que temos três classes, dessa forma:


Aqui vemos uma classe C que herda os métodos da classe B. E temos uma classe A que possui um objeto da classe C. Isso é importante para entender os conceitos dos modificadores de acesso.
Na classe B, temos três atributos (atr1, atr2, atr3), um usando cada modificador, com o mesmo para os métodos (met1, met2, met3). A classe C herda da classe B as heranças e métodos, e é aí que entra os modificadores de acessos: a classe C. Além dos atributos e métodos que ele possui, possui os mesmos métodos e atributos da classe B, PORÉM, a classe C não pode usar o método met3() e nem acessar o atributo atr3, pois são privados a classe B e somente a própria classe B é que mode acessar/modificar/usar.

Agora temos a classe A que possui um objeto da classe C. Partindo do objeto instanciado, eu posso acessar métodos ou atributos da classe C, inclusive os herdados da classe B. Entretanto, eu não posso acessar os métodos/atributos privados e nem os protegidos. Então a classe A pode executar os métodos públicos met1 e met 4 e os atributos atr1 e atr2.

Resumindo a história:

  • Private: somente a própria classe pode acessar o método/atributos. Classes derivadas ou que possui um objeto da classe não podem acessar;
  • Protected: somente a própria classe e suas classes derivadas é que podem ter acesso aos métodos e atributos. Classes que possui um objeto da classe não tem acesso.
  • Public: todas as classes podem ter acesso.
Vamos converter em código essas três classes:

class B{
 public:
  tipo atr1;
  void met1();

 private:
  tipo atr2;
  void met2()

 private:
  tipo atr3;
  void met3(); 

}

class C:public B{
 public:
  tipo atr4;
  void met4();

 private:
  tipo atr5;
  void met5()

 private:
  tipo atr6;
  void met6(); 

}

class A{
 C* meuObjeto;

}

Perceberam alguma coisa no código? Na linha onde inicia a classe C, a herança de B está como público. O que quer dizer? No C++, é possível alterar a acessibilidade dos métodos e atributos que herdam, onde você define qual é a acessibilidade mínima. Em outras palavras, se a classe C estivesse herdando um protect B, todos os métodos públicos de B se tornariam métodos protegidos na classe C. E o mesmo ocorreria se fosse private, mas nesse caso, não somente os públicos se tornariam privados, mas como os protegidos. Quando colocamos para herdar a classe de forma pública, dizemos que não vamos alterar em nada os acessos dos métodos e atributos.

Espero que esteja claro. Qualquer dúvida deixe um comentário que assim eu posso ajudar.

                                                                                                                                                                                                                                     

Nenhum comentário:

Postar um comentário