Teoria

Introdução

Fala, tudo tranquilo?

Dando continuidade na nossa jornada em Programa Orientada a Objetos, no tópico de hoje nós vamos falar dos membros públicos e privados de uma classe.

Vamos entender também o que é o encapsulamento, pra que serve, como e quando o usamos no nosso código.

Tá preparado? Então vamos nessa!

Membros Públicos

Imagina que você foi contratado para programar o sistema de cadastro de funcionários de uma empresa. Pensando nisso, você resolveu usar os seus conhecimentos em C++ e POO para criar uma classe f u n c i o n a r i o que possua todos os atributos e métodos necessários para fazer o cadastro do funcionário.

Vamos supor que as informações necessárias para o cadastro de um funcionário sejam o seu nome, um número inteiro que seria o seu ID e o cargo desse funcionário, que pode ser “RH”, “vendedor”, “estagiário” e “gerente”.

Vamos precisar também de um método chamado d a d o s , que irá imprimir na tela os dados de um funcionário.

Nesse código nós criamos a classe f u n c i o n a r i o e colocamos os atributos necessários para criarmos o cadastro de um funcionário e fizemos o método para imprimir os seus dados.

No entanto, esse código tem um problema. Se tentarmos acessar algum atributo ou método dessa classe fora do código classe, vai ocorrer um problema. Por exemplo, se salvarmos esse arquivo com o nome “funcionário.cpp”, criarmos outro arquivo .cpp na mesma pasta e fizermos a inclusão do arquivo com a classe, não conseguiremos acessar nada dela:

Se tentarmos rodar esse código, haverá um erro de compilação, indicando que esse método não está acessível.

Para consertarmos isso, nós podemos escrever o seguinte comando na linha 9:

Ao utilizarmos o comando public:, nós tornamos todos os atributos e métodos abaixo dele públicos, ou seja, passa a ser possível acessá-los fora do código da classe.

Com isso, podemos acessar os atributos e métodos dessa nossa classe no outro arquivo que criamos usando a notação ponto:

Nesse código, nós estamos basicamente acessando cada atributo desse objeto e colocando um valor para ele. Ao fim, nós acessamos o método d a d o s e imprimimos os valores dos atributos. Perceba que, tanto para os métodos quanto para os atributos, usamos a notação ponto para acessá-los.

Para esse código, teremos a seguinte saída:

Membros Privados

Algo que é importante de entendermos sobre o código que fizemos é que, ao tornamos todos os atributos públicos, nós demos a liberdade de que qualquer usuário desse código modifique os valores dos atributos pro que ele quiser, inclusive algo errado.

Por exemplo, seria possível instanciar um objeto onde o cargo seja algo inexistente:

Esse código irá rodar normalmente, mesmo que estejamos colocando um valor que não faça o menor sentido para o objetivo do nosso código, tendo a seguinte saída:

Para contornarmos esse problema, o C++ permite que tornemos parte do código de nossa classe público (acessível) e parte dele privado (inacessível fora do código fonte da classe).

Para isso, usamos o comando private:

Ao utilizarmos esse comando, fazemos com que tudo que esteja após o private e antes do comando de public seja algo privado, que não pode ser acessado fora do código fonte da classe.

O processo de dividir o nosso código em membros públicos e privados é o que chamamos de encapsulamento. O que serve para separar o programa em partes deixando nosso software mais flexível.

Public, Private e as boas práticas de programação

O próximo problema no nosso código é que agora não podemos modificar o valor do atributo c a r g o . Para resolvermos isso, vamos criar um método para modificar esse valor. Dentro desse método nós vamos checar se os casos para fazermos com que o atributo c a r g o receba um valor coerente. Primeiramente, vamos declarar o método r e g i s t r a r _ c a r g o na região do código da classe.

Agora, vamos especificar o que esse método faz. Iniciaremos checando se o valor passado como parâmetro é algum dos valores aceitos como cargos da empresa. Casa sim, vamos fazer o atributo c a r g o receber o valor, e, em caso negativo, fazermos com que cargo admita o valor " e s t a g i a r i o " como padrão.

O processo de tornar privado um parâmetro que possa dar algum erro no nosso código e usarmos um método para que possamos tratar o valor recebido para que ele seja coerente com o que precisamos no nosso código é uma boa prática de programação. Dessa forma, não podemos fazer com que o usuário utilize o nosso código da melhor forma possível.

Uma outra boa prática de programação é deixarmos sempre explícito quais membros são privados e quais são públicos dentro do nosso programa, pois, no C++, caso não especificarmos, ele admite que o membro é privado por convenção.

Mas como sabemos quando colocar um elemento como privado ou público no nosso código?

Isso é algo que vai depender muito da aplicação que estamos fazendo. Precisamos entender bem o que queremos fazer com o programa, as variáveis, os atributos e os métodos que estamos programando nele para sabermos qual será a melhor decisão.

Normalmente, quando há alguma possibilidade do usuário passar valores que não fazem sentido ou quando há algum atributo que, ao ser modificado, pode causar algum problema ao código escrito, é recomendado que estes fiquem privados.

Quando algum atributo ou método pode ser acessado sem causar problema ao restante do código, mantê-lo público pode ser uma opção viável. E, por fim, há o caso de precisarmos deixar o membro como público, que normalmente ocorre com métodos que precisam ser acessados para que o programa cumpra o seu objetivo.

Agora, vamos aplicar os conhecimentos adquiridos para resolver as questões de fixação. Então bora lá!

Membros Públicos

Membros Privados

Public, Private e as boas práticas de programação