Classes – Encapsulamento – Public, Private, Protected – C++

Publicado: 11 de fevereiro de 2014 em C/C++

Encapsulamento que em programação orientada a objetos significa separar o programa em partes, o mais isoladas possível. A idéia é tornar o software mais flexível, fácil de modificar e de criar novas implementações. Objetos restringem a visibilidade de seus recursos (atributos e métodos) aos outros usuários. Todo objeto tem uma interface, que determina como os outros objetos podem interagir com ele. A implementação do objeto é encapsulada, isso é, invisível ou visível  fora do próprio objeto.

PublicQuando precede uma lista de membros de classe, o  públic  palavra-chave especifica que esses membros são acessíveis a partir de qualquer função. Isso se aplica a todos os membros declarados até o próximo especificador de acesso ou o fim da classe. Ou seja visível a todos.

Private – Quando precede uma lista de membros de classe, o private palavra-chave especifica que esses membros são acessíveis somente dentro de funções de membro e amigos da classe.  Isso se aplica a todos os membros declarados até o próximo especificador de acesso ou o fim da classe. Ou seja visível somente para membros dentro da classe.

Protected – O protected palavra-chave especifica o acesso a membros de classe no lista de membros até o próximo especificador de acesso (pública ou private) ou no final da definição de classe.  O Protected é mistura entre Public e Private ou seja é visível somente para membros da classe e visível para subclasses.

Publico VS Private

  • Publico todas as classes podem usar os métodos e campos.
  • Privado apenas a classe  podem usar os métodos e campos.

Por que Controlar o Acesso?

  • Proteger informação privada.
  • Esclarecer como outros programadores devem usar sua classe.
  • Manter a implementação separado da interface.

Exemplo:

imagine o seguinte cenário,  temos uma classe que é responsável por transações de cartões de credito geralmente este tipo de classe pertence a companhia de cartões de credito e foi desenvolvida por um outro programador e esta dentro de uma DLL ou OS, acontece que o desenvolvedor terceirizado cometeu um deslize deixando visível a propriedade numero do cartão. Um desenvolvedor malicioso pode facilmente capturar o numero do cartão referenciando o objeto.

Neste exemplo você deve brincar com o código fonte a fim de resolver o problema de controle de acesso , use CTRL+espaço após a classe para ver a visibilidade de acesso dos métodos e campos.

C++

Classe #1 – Principal

#include "stdafx.h"
#include <iostream>
#include <string>
#include "cartaocredito.h"

using namespace std;

void metodoMalicioso(CartaoCredito& cartao)
 {
    cartao.gastos = 0;
    cout << "Seu numero de cartão: " << cartao.numeroCartao;
 }

int _tmain(int argc, _TCHAR* argv[])
 {
   // Uma transação hipotetica
   CartaoCredito transacao;
   transacao.cobranca("3453 3636 0001 1267", 350.00);

   // Metodo malicioso Injeta um gasto valor de 0 e imprime o numero do cartão
   metodoMalicioso(transacao);

   cout << endl;

   system("pause");

   return 0;
 }

Classe #2 – Cartão de Credito

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class CartaoCredito
 {
  // Esta declaração esta errada
  // Deste modo é possive capturar o numero do cartão
  // A classe expos o numero para que seja acessivel de outra classe
  // para não expor os numero use private

// private:
 public:

string numeroCartao;
   double gastos;

//public:
  void cobranca(string nCartao, double valor)
  {
    numeroCartao = nCartao;
    gastos = gastos + valor;
  }

  CartaoCredito()
  {
  }
};
comentários
  1. Raoni Leandro Barros nascimento disse:

    Melhor explicação qu encontrei na web…

Deixe um comentário