Orientação a Objetos – OO

Neste post, tentarei explicar de uma maneira fácil o que é a orientação a objetos.

Basicamente orientação a objetos ou OO é a técnica que tem por finalidade aproximar o mundo real de um mundo que os programadores estão familiarizados, ou seja, um mundo virtual. No começo é um pouco confuso mais vou simplificar. Pense nas coisas que existem no mundo real, temos pessoas, casas, carros e inúmeras outras coisas. Em OO tudo isso é tratado como objeto, desta forma temos um objeto pessoa, um objeto casa, um objeto carro e assim por diante. Partindo deste ponto fica fácil entender o que seria um objeto em OO, agora o ponto mais importante em OO é que cada objeto obrigatoriamente tem uma identificação e esta identificação precisa ser única e independente do conteúdo do objeto. Com isto um programador pode criar coleções de objetos, que ao fim também vem a se tornar um objeto em si.

Agora que compreendemos o que é um objeto em OO, vamos aprofundar mais um pouco.  A grosso modo objetos parados não servem pra nada. Então entra o nosso grande amigo “Programador” que no mundo virtual seria uma espécie de “Deus”. A ele cabe ha função de moldar e ditar o comportamento dos objetos, ou seja, o programador é o cara que da vida aos objetos do mundo virtual. Como no mundo real, os objetos precisam comunicar-se, o programador volta a agir nesta questão. Os objetos se comunicam por mensagens e o programador é quem vai especificar quais mensagens o objeto vai enviar e a ação que vai tomar. Os programadores com certeza se sentiram valorizados agora, sendo comparados com “Deus”. Mais é isso ai mesmo, temos que dar valor a nossa profissão, afinal estudamos para isso e não é nada fácil descrever uma situação real para uma situação virtual.

Agora já sabemos também qual a função do programador, voltaremos a falar de objetos.

A estrutura de um objeto é formatada por atributos, e seu comportamento é representado pelos métodos que ele pode realizar. Objetos são agrupados por classes que é uma abstração de um tipo de objeto. Confuso não é? Vou exemplificar utilizando um conceito biológico que achei na internet e por ele achei muito simples exemcplificar e quando o cara faz um trabalho deste nível temos que dar o crédito a ele, afinal ninguém quer reinventar a roda.

Vamos ao exemplo:

“Um animal é uma classe, e tem suas características: é um ser vivo capaz de pensar, precisa se alimentar para viver, etc, etc. O Ser Humano é uma subclasse dos animais. Ele tem todas as características de um animal, mas também têm algumas peculiaridades suas não encontradas nas outras subclasses de animais. Os pássaros também são animais, mas possuem características próprias. Note que uma Classe não tem vida, é só um conceito. Mas os Objetos (animais, serem humanos, pássaros, etc.) possuem vida. O seu cachorro rex é um Objeto (ou instância) da classe Cachorro. A classe Cachorro não pode latir, não pode fazer xixi no poste, ela apenas especifica e define o que é um cachorro. Mas Objetos do tipo Cachorro, estes sim podem latir, enterrar ossos, ter um nome próprio, etc. [Marcio Frayze David – 2007].

Creio que ficou fácil entender o que é uma classe com o exemplo e como o exemplo está fresquinho na mente de todos, vamos falar de herança.

Basicamente herança é um mecanismo que permite compartilhar atributos e métodos entre classes relacionadas. Desta forma podemos utilizar o exemplo acima. Vamos pegar a classe Animal e Ser Humano novamente. Em OO como sabemos todo ser humano já herda as características da classe animal, se parássemos por ai o ser humano simplesmente seria um animal, então como ser humano já é uma animal não precisamos implementar novamente todas características de um animal vamos nos preocupar em implementar somente o que o ser humano possui de diferente. Por exemplo, o ser humano: fala, trabalha, compra, e etc. Ou seja, animal seria a superclasse e ser humano uma subclasse de animal.  Todo mundo agora pensou em sair criando códigos e fazendo herança de todas classes, se você foi um destes esta completamente errado. A herança ajuda muito um programador mais também pode se tornar uma arma quando não se sabe utiliza-la corretamente, pois se você for herdando uma classe de outra classe chegará a um ponto que não se sabe mais o que herda o que, você não saberá qual classe é pai de qual classe e terá feito uma verdadeira bagunça. Digo isso por que quando comecei aprender herança pensei desta forma e meu amigo Altieres que acaba de entrar pra turma da galera que tem o certificado OCJP (Oracle Certified Java Programer 6.0) me disse isto: “A herança pode ser uma arma se utilizada de forma incorreta”. E realmente ele estava certo, tanto que normalmente as linguagens de programação permitem apenas uma classe pai, a única que eu conheço que permite herança múltipla é C++, e por sinal não é um exemplo de OO a ser seguido.

Pra quem leu até aqui muito bem, então vamos para o assunto que eu não tenho até medo de falar, pois eu acho um tanto quanto complicado, vamos falar de Polimorfismo.

Bom, que polimorfismo que é complicado todo mundo já deve imaginar, o próprio nome já deixa isso claro.  Vamos lá, Polimorfismo significa que um objeto pode ter formas diferentes. Pense no seu Objeto pessoa tendo varias formas. Como assim? Eu tenho um objeto Pessoa, Como ele pode ter diversas formas diferentes? Complicado não?  Vou tentar exemplificar isto de uma forma que acho funcional e que diversas vezes topamos em programação. Pessoa física e jurídica.

Quem desenvolve sistema sabe que quando isto aparece em um diagrama até causa um arrepio na coluna. Mais vamos lá temos uma classe Pessoa, até ai tudo bem, mais minha regra de negocio agora apresenta dois tipos de pessoa, uma física e uma jurídica. O que fazer? Bom, primeira coisa é pensar no que difere uma pessoa da outra, exemplo obvio CPF e CNPJ, certamente existem mais coisas que diferem mais neste caso nossa regra de negocio exige somente isto. Muito bem temos uma classe abstrata Pessoa e nela vamos informar os atributos que uma pessoa teria, como exemplo nome e endereço. Partindo dai temos uma pessoa jurídica que possui CNPJ e uma jurídica que possui CPF. Ficaria assim.

Classe Pessoa:

public abstract class Pessoa {

 public String nome = "Pessoa";
 public String endereço = "Endereço de pessoa";

}
 

Classe Fisica

 public class Fisica extends Pessoa {

 protected String cpf = "000.000.000-00";

 public String toString() {
 return "Nome: " + nome + ", Endereço: " + endereço + ", Documento: " + cpf;
 }

 }
 

Classe Juridica:

 public class Juridica extends Pessoa {

 protected String cnpj = "00.000.000/000-00";

 public String toString() {
 return "Nome: " + nome + ", Endereço: " + endereço + ", Documento: " + cnpj;
 }

 }
 

Para o exemplo eu acima usei protected em algunss atributos, bom protected é um modificador de acesso mais isto não será explicado neste post, deixarei para um próximo. Além disto, eu atribui um valor direto para cada atributo, mais isto foi para simplificar o resultado.

Executando:

public static void main(String[] args) {

 System.out.println("Executando pessoa fisica");
 Pessoa f = new Fisica();
 System.out.println(f);

 System.out.println("Executando pessoa juriica");
 Pessoa j = new Juridica();
 System.out.println(j);

 }

Agora pergunto a vocês qual será o resultado?

———————————————————————————————————————

Executando pessoa fisica

Nome: Pessoa, Endereço: Endereço de pessoa, Documento: 000.000.000-00

 
Executando pessoa juridica

Nome: Pessoa, Endereço: Endereço de pessoa, Documento: 00.000.000/000-00

———————————————————————————————————————-

Pra quem pensou nisto:

Acertou, você entendeu completamente isto que escrevi acima.

Pra quem não entendeu.

Leia este post. Nele você  encontra mais alguns exemlos.

Bom, encerro por aqui este post espero ter ajudado.

Até o próximo.

12 comentários sobre “Orientação a Objetos – OO

  1. Bacana, Godoy meus parabés mas gostaria de chamar a atenção para um detale na usa resposta

    ” Executando pessoa fisica

    Nome: Fisica, Endereço: Endereço de pessoa, Documento: 000.000.000-00

    Executando pessoa juriica

    Nome: Fisica, Endereço: Endereço de pessoa, Documento: 00.000.000/000-00 ”

    Não seria assim a resposta visto q no atributo nome da classe pessoa vc definiu como sendo “Pessoa”

    ” Executando pessoa fisica

    Nome: Pessoa, Endereço: Endereço de pessoa, Documento: 000.000.000-00

    Executando pessoa juriica

    Nome: Pessoa, Endereço: Endereço de pessoa, Documento: 00.000.000/000-00 ”

    é um detale mas q pode confundir o leitor q esteja iniciando😉

    abraço

  2. Amazing blog! Do you have any recommendations for aspiring writers?
    I’m planning to start my own website soon but I’m a little lost on everything.
    Would you propose starting with a free platform like
    Wordpress or go for a paid option? There are so many choices out there that I’m completely overwhelmed .. Any ideas? Thanks!

    • Hello, Thanks for the comment. It is always stimulating.
      Then start to believe that free platforms would be the best option.
      The wordpress itself has many interesting features worth checking out.

      Thank you.

  3. I got this site from my friend who told me regarding this web site and at the moment this time I am
    visiting this web page and reading very informative content at this place.

  4. hämorrhoiden behandeln
    I drop a leave a response each time I especially
    enjoy a post on a website or if I have something to contribute
    to the conversation. It is a result of the sincerness communicated
    in the post I looked at. And on this post
    Orientação a Objetos – OO | Fernando Godoy. I was actually moved enough to post
    a comment🙂 I actually do have 2 questions for you if it’s okay. Is it only me or do a few of the remarks come across like left by brain dead individuals?😛 And, if you are writing on additional places, I’d like to
    follow you. Would you make a list every one of your social sites like your twitter feed, Facebook page
    or linkedin profile?

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s