Grupo Haw

Compartilhando o que eu acho =)

fev

3

Orientação a Objetos em cinco minutos (parte 2 – encapsulamento)

By Eduardo Gomes

Olá amigos, depois de um bom tempo sem postar no GrupoHaw, volto novamente aqui para continuar o tema sobre Orientação a Objetos em Cinco Minutos, aproveito para informar–lhes que “cinco minutos ” não é um valor fictício, pois se você gostar realmente deste tema você aprenderá todos os conceitos em aparentes 5 cinco minutos de uma forma bem agradável, mas por outro lado se você não gostar…. e continuar insistindo nessa, o tempo será muito mais longoooooooo e muitas vezes chato, quem sabe você aprenda orientação a objetos em uns 250 anos.
Bom, deixe-me contar um fato que ocorreu com o código do programa para fábricas de carros, pois bem, um dia desses o Wenderson (o cara dos Posts de PHP) testou meu código e disse o seguinte:
- AHAHAAH seu código esta furado…. eu consigo fazer o carro decolar sem ter que atingir a velocidade máxima.. AHAHAHAHA
Ele me apresentou sua classe de testes assim:

 public class FabricaDeCarrosDoWenderson {

	public static void main(String[] args) {

		Carro carro1 = new Carro();
		carro1.nome = "Carro Alegórico";
		carro1.marca= "FastWend";
		carro1.velocidadeMaxima=1000;
		carro1.quantidadeDeMarchas=5;

		carro1.velocidadeAtual=1000;
		carro1.decola();

	}

}

Puuutz, realmente o Wenderson acabou de quebrar minha regra de negócio que diz: “Para um carro decolar ele precisa atingir a velocidade máxima”.
Eu tinha que fazer algo, mas o que???? O que?????
Foi aí que me lembrei dos modificadores de acesso (public, private e protected), ahahaaha Wenderson, quem ri por ultimo ri melhor….ahahah !!!
Minha classe Carro, possui atributos que estavam em “default”,
Eu explico melhor, o Wenderson verificou que meus atributos não possuiam modificadores de acesso como public, private ou protected e se aproveitou da oportunidade.
Atributos que não possuem esse modificadores de acesso, por padrão é default, ou seja, pode ser acessado por objetos em outras classes no mesmo pacote, como aconteceu no nosso caso.
Foi criado na classe FabricaDeCarrosDoWenderson um objeto do tipo Carro e foi acessado um atributo (velocidadeAtual) que serve unicamente para a regra de negócio funcionar não devendo ser manipulado por ninguém somente pelo próprio programa.
Na mesma situação estão os atributos marchaAtual e estaVoando (que devem ser acessados somente pelos métodos da classe Carro, caso contrário poderá mudar toda a regra de funcionamento do programa).
Mas como eu falei anteriormente, “vou quebrar as pernas do fulano” desta forma: vou bloquear o acesso direto a esses atributos colocando a palavra private na frente dos atributos que quero…AHAHAHAHAHA!!!
O código dos atributos da classe “Carro” vão ficar assim:

class  Carro{
	String nome;
	String marca;
	int velocidadeMaxima;
	int quantidadeDeMarchas;

	private int marchaAtual=0;
	private double velocidadeAtual=0;
	private boolean estaVoando;

- AHHAHAHAHAHAHAHAHA….. fechei o acesso a esses atributos… somente os métodos dessa classe tem permissão para acessar estes atributos… (falei para o Wenderson)…
Mas o Lucas que não tinha nada pra fazer e estava “fuçando” o código, descobriu mais alguns problemas….
- Esse “@$#%$$#$&!!%” só me arranja problemas…..
Só pra deixar claro o funcionamento dos modificadores de acesso, estes são utilizados não só em atributos, mas também em métodos e nas próprias classes contribuindo para garantir o encapsulamento
Definição para Encapsulamento: Encapsular é apenas o fato de esconder o funcionamento interno de rotinas ou atributos, pois quem utiliza um objeto de uma certa classe não precisa saber como ela funciona e sim o que ela faz.

Modificador de acesso Observação Onde pode ser usado
public Permite acesso em qualquer parte de um projeto. Classe, Método e Atributos.
private Não permite acesso fora da classe da qual pertence. Metódos e Atributos.
Protected Deixará visível para todas as classes e subclasses que pertençam ao mesmo pacote. Classe, Método e Atributo.
” “(default) Não é um modificador de acesso e permite acesso somente no mesmo pacote. Classe, Método e Atributo.

Bom termino este post, mas logo logo vou voltar aqui para resolver mais alguns probleminhas recém descobertos…

Eduardo Gomes

Postagens Relacionadas:

3 Responses so far

Ae Eduardo vou quebrar suas pernas de novo, com reflection ainda consigo fazer a mesma coisa, isso somente ficou um pouco mais trabalhoso.

Para quem ta viajando reflection não é nenhuma maracutaia ilegal e ruim não na verdade sem eles não teríamos a maioria dos frameworks do mercado como o hibernate (pelo menos não do jeito que foi projetado)

Uma boa sugestão é que quando vc terminar essa serie post de POO (kkk) em 5 minutos vc pode postar sobre como fazer isso em sua classe. Ou se eu consegui eu posto e mostro como quebrar suas pernas.

inté

Fala Wenderson, valeu pelo comentário, não esperava esse feedback ainda hoje. Então, vou fazer mais postagens sobre POO (1, 2, 3, POO, 5, 6, 7, POO…rsrsrrs), me passa o conceito que você em que em futuras postagens eu comento a respeito. Um abraço, meu camarada!

[...] a escrever uma serie de post sobre POO (Orientação a Objetos em Cinco Minutos e Orientação a Objetos em Cinco Minutos parte 2) sendo que nesse segundo ele me desafiou a burlar a regra de negocio da classe dele… se [...]

Leave a comment

*