POO – Programação Orientada a Objetos

29 01 2008

Continuando com os posts sobre as matérias do meu 3° semestre de sistemas de informação, chegou a hora da POO.

O que é programar Orientado a Objetos?

Programar Orientado a Objetos é pensar em como criar seu código como você pensa na vida real. É você abstrair os objetos da vida real e leva-los para as linhas de código como eles são – com suas características, que são os atributos e suas ações, que são os métodos. Todo objeto tem características e ações.

A POO foi criada com o intuito de resolver os problemas da programação estruturada. A idéia era resolver problemas o mais rápido possivel e com a segurança que funcionaria em qualquer lugar a mesma solução. A grande vantagem disso é o reaproveitamento de código, isso traz uma redução no tempo que uma solução pode ser gerada. Tempo em programação pode ser muito caro, por isso a POO é tão bem aceita!

O que é um Objeto?

Um objeto é um elemento computacional que representa, no domínio da solução, alguma entidade (abstrata ou concreta) de interesse do sistema sob análise. Objetos similares são agrupados em classes. No paradigma da orientação a objetos, tudo pode ser potencialmente representado como um objeto. Sob o ponto de vista da programação, um objeto não é muito diferente de uma variável no paradigma de programação convencional.

Quando se define uma variável em Java, essa variável terá:

  • Um espaço em memória para registrar o seu estado atual (um valor)

  • Um conjunto de operações associadas que podem ser aplicadas a ela, através dos operadores definidos na linguagem que podem ser aplicados a valores inteiros (soma, subtração, inversão de sinal, multiplicação, divisão inteira, resto da divisão inteira, incremento, decremento).

Da mesma forma, quando se cria um objeto, esse objeto adiquire um espaço em memória para armazenar seu estado (os valores de seu conjunto de atributos, definidos pela classe) e um conjunto de operações que podem ser aplicadas ao objeto (o conjunto de métodos definidos pela classe).

Portanto um programa orientado a objetos é composto por um conjunto de objetos que interagem através de “trocas de mensagens” entre eles. Na prática, essa troca de mensagem traduz-se na chamada de métodos (funções) entre objetos.

Exemplo de um objeto:

Um Jaguar é um objeto. Ele tem como características a cor, peso, quantidade de portas, modelo, ano, etc. Também tem ações como frear, buzinar, acelerar, abrir os vidros, trocar de marchas, etc. Portanto programar Orientado a Objetos é você fazer essa abstração do mundo real e transforma-la em código. Mais adiante mostrarei um exemplo de código Orientado a Objetos.

A POO tem quatro pilares que a sustenta, seguindo:

Abstração:

É a capacidade de você pensar nos objetos da vida real e classifica-los. É o processo pelo qual modelamos sistemas reais ou imaginários, extraindo do seu contexto os seus principais elementos “Objetos”, e descrevemos cada objeto, com suas principais “características” de dados e funcionalidades.

Uma Ferrari por exemplo tem as mesmas características do objeto Jaguar citado acima, possui até mais, mas eles tem algo em comum, ou seja, ambos são carros, logo pertencem a classe carro. A Ferrari é um tipo de carro e o Jaguar também, mas cada um com suas características e ações particulares e comuns.

Programar Orientado a Objetos é fácil, o difícil é programar Orientado a Objetos bem. Pois se programando bem, você pode tirar proveito de todas as vantagens que a POO possui e para se programar bem Orientado a Objetos a principal característica que o programador deve ter é uma boa abstração do mundo real.

Encapsulamento:

Os objetos como dito acima contém atributos e métodos. O encapsulamento trata de dar alguma segurança aos objetos. Explico:

Um objeto Cliente por exemplo tem atributos como qualquer outro e estes não podem ser acessados por qualquer outro objeto diretamente. Existem dois tipos de atributos, os privados e os publicos. Em UML e OO (orientação a objetos) é definido que para atributos privados usa-se o sinal de “-” antes do nome e para atributos publicos usa-se o sinal de “+” antes do nome.

Exemplo:

objeto cliente

Para que o encapsulamento exista é preciso deixar os atributos privados e os métodos públicos, assim está sendo garantido que os valores atribuídos aos atributos serão sempre respeitados pelas regras existentes.

Exemplo:

O atributo cpf deve sempre ter 11 números, se o atributo não for privado, ele perde essa regra (11 números) pois alguém poderia acessar e colocar 12 ou 9 números tornando-o inválido.

Como os atributos privados não podem ser acessados diretamente por outros objetos, existem os métodos publicos que são os responsáveis em acessar os atributos e trazer ou levar algum dado para o objeto respeitando as regras.

Idéia de encapsulamento:

encapsulamento

Herança:

O que torna a orientação a objetos única é o conceito de herança que no inglês significa inheritence.

Herança é um mecanismo que permite que características comuns a diversas classes com comportamentos comuns ou parecidos, sejam abstraídas e centralizadas em uma classe base, ou superclasse. Tem uma relação “É um”.

Exemplo:

Um Jaguar “é um” carro. Logo ele foi herdado da classe carro, pois contém as características comuns de um carro.

A partir dessa superclasse outras classes podem ser especificadas. Portanto uma subclasse que é uma classe herdada da superclasse recebe sem codificação extra as características da superclasse. Ainda podemos adicionar elementos particulares a está subclasse.

Na linguagem Java uma subclasse somente pode herdar uma única superclasse diretamente.

Exemplo:

herançajaguar

Polimorfismo:

Analisando a palavra Polimorfismo, ela significa muitas formas. Ou seja, para uma árvore de herança, temos muitas formas de objetos e métodos a partir de uma superclasse e suas subclasses. Polimorfismo é o princípio pelo qual usamos objetos construídos a partir de uma árvore de herança, através de referências do tipo de uma superclasse da hierarquia.

Formas de polimorfismo:

  • Subclasses;
  • Sobrescrita de método;
  • Sobrecarga de método ou construtor

Sobrescrita de métodos – Overriding

Esta utilidade nos permite escrever numa subclasse um ou mais métodos presentes numa das superclasses podendo alterar o comportamento da superclasse.

Exemplo:

polimorfismo

Quando numa subclasse reescrevemos um método já existente numa superclasse, chamamos de sobreescrita de método ou reescrita de método mas o termo técnico é Method Overriding. Lembrando que a sobrescretica de métodos só é valida quando o método reescrevido na subclasse tem exatamente a mesma identificação (nome, tipos, etc.) do método da superclasse.

Sobrecarga de métodos – Overloading

O Polimorfismo ainda permite que numa mesma classe tenhamos métodos com o mesmo nome, desde que o número ou tipos de parâmetros passados sejam diferentes.

Exemplo:

sobrecarga

A sobrecarga de métodos é uma ferramenta poderosa, pois nos permite criar vários métodos com o mesmo nome, isso facilita o entendimento de problemas mais complexos, pois não é necessária a criação de nomes de funcionalidades sem sentido aparente.

Classes

Entendido todos os conceitos acima fica fácil entender o que é uma classe. Como na vida real existem diversos objetos do mesmo tipo, nos softwares também é assim. Imagine o sistema de gerenciamento de veículos do Detran. Quantos objetos do tipo carro este sistema deve manipular por dia? Se fosse feita uma descrição para cada um, o sistema jamais iria funcionar.

Assim, podemos descrever um mesmo tipo de objetos uma única vez e cada vez que um novo objeto precise ser criado, é só utilizar a mesma fôrma. Esta fôrma é chamada classe.

Pense em uma padaria, quando você vai escolher bolos se depara com muitos bolos idênticos. Ai você se pergunta, seria o padeiro capaz de produzir tantos bolos com a mesma forma apenas usando as mãos?NÃO! Ele usou uma fôrma para fazer estes bolos, a fôrma foi o molde que ele queria para seus bolos. Com os objetos não é diferente, as classes são os moldes (modelos, fôrmas, plantas) para criação dos os objetos em tempo de execução dos programas.

Ainda tem mais, uma classe é a descrição de um conjunto de objetos que possuem os mesmos atributos, operação e semântica. Dizemos que um objeto é uma instância de uma classe, quando ele é criado a partir dela, seguindo sua especificação.

Ainda existe a diferença entre abstração e instância

A abstração denota a essência ideal de uma coisa; a instância denota uma manifestação concreta.

Poderíamos também dizer que, na codificação existem somente as classes, não os objetos. Já em tempo de execução, o que existe são os objetos e não as classes. Também dizemos que uma variável é de um determinado tipo (inteiro, booleano, real, etc.) numa linguagem de programação, então dizemos que um objeto é de uma determinada classe.

Uma classe é a reunião de objetos idênticos por meio de atributos e métodos.

Neste post existe muitas possibilidades de assuntos mais profundos, mas eu tentei focar somente em OO.

Vou ficando por aqui e até o próximo post sobre Probabilidade e Estatística.

UltraG


Ações

Information

12 responses

1 10 2008
jefferson

muito bom
foi muito util pra mim
e aprimorou o meu conhecimento
muito obrigado

1 10 2008
Everton

Será que poderia me mandar ainda essa semana um exemlo de sobrecarga,pois estou fazendo um trabalho pra escola e naum entendi muito bem, estou aprencendo agora sobre o assunto.

Muito obrigado pela atenção!

29 12 2008
Marcos

Parabéns pelo excelente texto! Me ajudou bastante a enteder principalmente a diferença entre poliformismo e sobrecarga e o funcionamento prático do encapsulamento.

6 05 2009
Girlene

Parabéns pelo excelente contéudo, estou estudando POO na faculdade e sento dificuldades em entender a disciplina. Seu material me tirou várias dúvidas, continue com esse ótimo trabalho de esclarecimento, pois suas palavras são de simples entendimento e fácil assimilação.

Grata, Girlene.

21 09 2009
Misael T

Adorei o conteudo me ajudou muito, é simples, direto e objetivo estou estudando na AEMS-MS e esses conceitos são muito importantes e fundamentais, muitas pessoas fazem programas + ñ sabem o que é POO e o que ela pode te proporcionar.

30 09 2009
Vinicius Domingos Reis

Belo texto!
Não havia entendido em sala de aula sobre sobrecarga, sobrescrita.. e tenho uma prova de P.O.O esta semana.
Estou estudando para minha prova de P.O.O pelo seu post divulgado.
E já me sanou belas dúvidas que tinha.

Belo trabalho!

13 10 2009
kwimerA

Muito bom, comecei a aprender POO há pouco mais de 1 semana e este texto ajudou a esclarecer muitas dúvidas.

30 11 2009
LUCIENE

Ola td bem???
gostaria de saber se poderia me mandar algo sobre polimorfismo,pois tenho um trabalho e ainda não comprendi muito bem!!!
se possivel um exemplo de polimorfismo em UML e em JAVA e o por que sa simbologia ultilizada .
Grato pela atenção, muito obrigada!!!

6 07 2010
Diferenças sobre paradigmas : OO « Códigos, linguagens e agilidade

[…] BS Idéias – OO Na prática […]

10 09 2010
Camila

Gostei muito do conteúdo me ajudou a acabar com diversas dúvidas! ;D

29 01 2011
Milton

Apesar de este post ser antigo, foi de grande valia. Estou começando a estudar programação e fiz também um blog para meus estudos.

Nos meus estudos cheguei a POO.

O material encontrado na Internet é de difícil entendimento e muitas vezes contem apenas pequenas partes do todo.

Gostei muito do que você chamou de “Quatro Pilares” da POO. Na verdade, gostei mais da FORMA com que você explicou cada uma, principalmente Polimorfismo e Encapsulamento.
Sobre encapsulamento, dizem tanta, mas tanta coisa que é difícil de entender e a sua definição foi bem sucinta.

Grato,

Milton Bolonha Neto

2 04 2013
Maylson Fernandez

muito bommm conteúdo
me ajudouuuuuuuu pakass

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




%d blogueiros gostam disto: