Orientação a Objetos em cinco minutos (parte 2 – encapsulamento)
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…
Loading ...
3 Responses so far
Wenderson Lisardo
fevereiro 3rd, 2011
16:58
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é
Eduardo Gomes
fevereiro 3rd, 2011
20:40
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!
Acessando atributos privados com reflection | Grupo Haw
março 17th, 2011
11:50
[...] 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