Modificadores de acesso: public, protected e private


Um dos fundamentos da orientação a objetos é evitar que classes tenham acesso a um código que não tenha a ver com sua lógica.

Imagine a classe Corpo, que possui massa, volume e consequentemente densidade. Se alterarmos a massa de um corpo sem alterarmos a densidade, criamos uma inconsistência dentro da classe. Logo esse é um caso em que não podemos permitir livre acesso a esses campos.

Para garantir que problemas não aconteçam, utilizamos modificadores de acesso (public, protected e private). De um modo geral:

public: permite acesso a qualquer código externo a classe
protected: permite acesso às classes filhas, mas proíbe a qualquer outro acesso externo
private: proíbe qualquer acesso externo à própria classe, inclusive das classes filhas

Vamos exemplificar:

Crie a classe Corpo:


	class Corpo
	{
		private float massa;
		private float densidade;
		private float volume;
	 
		public Corpo(float massa, float volume)
		{
			this.massa = massa;
			this.volume = volume;
			densidade = massa / volume;
		}
	}
O construtor define o valor da densidade logo na criação do objeto. O modificador private impede que qualquer código externo à própria classe Corpo tenha acesso aos campos de Corpo, evitando que alterações indevidas gerem inconsistência.

Mas agora temos o problema de não conseguirmos nem mesmo ver os campos de Corpo. Para resolver isso, vamos adicionar métodos públicos que retornem esses valores (getters):


	public float GetMassa()
	{
		return massa;
	}
	public float GetVolume()
	{
		return volume;
	}
	public float GetDensidade()
	{
		return densidade;
	}
E criar métodos que façam as atualizações necessárias para que os campos estejam sempre consistentes entre si (setters):


	public void SetMassa(float massa)
	{
		this.massa = massa;
		densidade = massa / volume;
	}
	public void SetVolume(float volume)
	{
		this.volume = volume;
		densidade = massa / volume;
	}
Agora crie a classe Esfera que herda de Corpo. Crie para ela um método que tente acessar um campo private de Corpo, como segue no exemplo:


	class Esfera : Corpo
	{
		public float GetRaioAoCubo()
		{
			return 3f/4*3.14f*volume;
		}
	}
A classe Esfera não vai compilar. Não é possível acessar volume porque private não permite acesso a classes filhas.

Como precisamos que esses campos sejam acessados por Esfera, ao mesmo tempo que queremos manter o acesso proibido a códigos externos, usamos o modificador protected.

Temos que alterar os campos private em Corpo necessários para que a classe Esfera compile:

	class Corpo
	{
		protected float massa;
		private float densidade;
		protected float volume;
	...

Fonte: https://sites.google.com/site/itabits/treinamento/poo-1/modificadores-de-acesso-public-protected-e-private




Comentários

Copyright © 2018 Anderson Bravo
www.andersonbravo.com.br
anderson@andersonbravo.com.br