Entendendo POO (História e conceitos)

Sabemos que Java, C++ e Object Pascal são linguagens Orientadas a Objetos, mas sabemos o que isso significa? Entenda de uma forma dinâmica e objetiva os conceitos e as características dessa poderosa ferramenta.

[ Hits: 34.271 ]

Por: Hélder Gurgel Jr em 06/05/2005


Características



Herança


Objetos de uma mesma classe podem tirar proveito de relações de herança, onde objetos recém-criados absorvem características de outros já existentes e adicionam-se novas características. Um exemplo disso, sem fugir do nosso exemplo anterior, são os livros. Na verdade, eles são blocos de papéis que possuem capas e apresentam algum conteúdo em suas páginas. Os livros herdaram as características dos "blocos de papéis", como quantidade de folhas, flexibilidade, etc e foi adicionada a opção de ter uma capa e um conteúdo. Assim fica fácil de entender né? ;)

Polimorfismo


Pensemos agora um pouco em relação ao grupo dos objetos animados. Peguemos a Carla, que é um objeto da classe criança. Andar é um de seus métodos certo? É certo que não é um andar muito bonito, se apóia aqui, se apóia ali, mas cumpre o seu objetivo que é ir do ponto A para o ponto B.

Já o pai dela, o João, que é um objeto da classe adulto, tem o mesmo método, que é também Andar. Ele vai de um ponto A para o ponto B sempre que desejar, com a diferença que seus passos são firmes. O método é o mesmo nos dois casos, mas com ele funciona diferente. É para isso que existe o polimorfismo, para que isso possa ser implementado.

Já viu como está o nosso mundo? Temos João, que é um Adulto, temos a pequena Carla, que é uma Criança. Ambos são seres vivos, e por causa da característica de serem seres vivos fazem parte do grupo dos objetos animados. Só que a Carla adora desenhar e de presente posso dar para ela o Caderno, que é um objeto da classe dos "blocos de papéis", que por sua vez faz parte do grupo dos objetos inanimados. Mas poxa, como ela vai escrever? É para isso que existem os construtores.

Um construtor é um método que permite criar um objeto à custa de uma determinada classe. Tendo conhecimento de como criá-lo, eu faço criar um objeto que eu quero chamar de Lápis. Ele vai ser de uma classe chamada "escrevedores" (foi mal, mas não achei um nome melhor) que também fará parte dos objetos inanimados. Agora sim, Carla pode brincar à vontade com o seu lápis e o seu caderno, podendo desenhar quando quiser.

Viu como no mundo da POO tudo está relacionado? Eu diria que é um pouco de brincar de Deus... Algo poderoso quando se tem o conhecimento necessário! :)

Encapsulamento


Digamos que o objeto animado João é um médico. Ser médico é um de seus atributos. Todos os dias ele vai trabalhar em seu A4 preto, o carro mais potente do mundo (eita mentira né?). João sabe que para fazer o carro andar ele precisa somente colocar a chave, girá-la e o carro liga, daí é só pisar no acelerador para começar a se locomover. Mas, será que ele, com o seu nulo conhecimento em mecânica, sabe o que acontece quando ele gira a chave? Duvido! E é isso que quer dizer o encapsulamento. João pode não sabe como seu carro funciona, mas sabe como fazer funcionar.

Logo, o encapsulamento é o processo pelo qual se escondem os detalhes de implementação nas Classes. Além disso, é importante frisar que o motor de um carro tem um funcionamento independente das outras partes, como direção, pneus, bancos, etc. Ou seja, mesmo que um carro não tenha as quatro rodas, isto não impede de o motor funcionar, pois ele funciona como uma unidade independente, uma "caixa-preta".

Que tal um outro exemplo mais prático? Está vendo essa tela? O campo para busca, os botões no menu, esse texto em si? Você não sabe como eles estão aqui, o que existe por trás dessa tela, mas sabe que existe toda uma implementação que nos foi escondida (ainda bem né? ;P)... Entendeu?

E, finalmente, a...

Abstração


Criamos um mundo - bem diferente do real, é verdade, mas nele podemos brincar à vontade - com seus objetos, suas classes, seus comportamentos. Esse ato de representar cenários complexos com termos simples, de imaginar o mundo como um conjunto, de dividir os objetos para melhor classificá-los, de dar características e métodos, é o que chamamos de abstração.

É graças à abstração que podemos pensar em praias em vez de grãos de areia, em trânsito em vez de um só carro, em florestas em vez de árvores... Enfim, é através da abstração que podemos imaginar a lógica necessária para entender o nosso problema e montar a sua solução. Com a abstração vem uma maior facilidade de utilização da classe, diminuição da probabilidade de enganos, aumento na rapidez do desenvolvimento e melhoria na legibilidade do código.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Características
   3. História / Benefícios
   4. Conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Modelos de desenvolvimento

Polimorfismo - Uma visão em C++ e Java

Certificação Java - 1 - Java Programming Language Keywords (Exam Objective 4.4)

180 dias sem solução

Certificação Java - 2 - Literals and Ranges of All Primitive Data Types (Exam Objective 4.6)

  
Comentários
[1] Comentário enviado por tehb em 06/05/2005 - 14:59h

Bem Legal e didático. Bom Mesmo

[2] Comentário enviado por cvs em 06/05/2005 - 20:58h

olha, desculpa, eu não li o artigo todo mas o titulo realmente é POO? porque o que eu vi brevemente na faculdade não vi nenhuma referecia pra essa sigla ou se vi, não estou lembrado.

[3] Comentário enviado por gustavo_marcon em 07/05/2005 - 03:58h

POO = Programação Orientada á Objetos

[4] Comentário enviado por m4sk4r4 em 07/05/2005 - 06:33h

Olá Hélder,

Cara o artigo está muito legal,
bem claro e simples, essa comparação com o mundo real ajudou bastante, POO foi e é uma das barreiras que impedi o meu desenvolvimento no java.
Não sei o que é e o que foi, mais me atrapalhou muito
quando decidir estudar java por conta própria,
depois deste artigo vou ver se retorno.

t+, e Parabéns.

[5] Comentário enviado por theshadow em 07/05/2005 - 18:32h

Parabéns... Conseguiu resumir de forma simples e objetiva. Vou usar este "conceito" para demonstrar à alguns alunos iniciantes.

[6] Comentário enviado por redleh em 09/05/2005 - 11:02h

Valeu galera! ;)

Fiquei feliz com os comentários aqui postados e até com as dúvidas que me mandaram pelo e-mail, realmente é legal saber que a galera está empenhada em aprender mais sobre essa "nova onda"... ;)

Friso novamente que estou a inteira disposição caso tenham alguma dúvida e gostaria de ver sugestões para novos artigos ein galera... Fiquem em paz e valeu pela força! ;P

[7] Comentário enviado por eliana_varani em 10/01/2006 - 15:14h

Parabéns pelo seu artigo, muito bom mesmo, para incrementar, nas versões finais do Clipper já havia o conceito de biblioiteca, mesmo no Summer'87, trabalhei com ele e hoje estou passando para PHP, depois de uma estada de alguns anos no VB, acompanhei todo o processo muito bem definido por vc. Se vc não é professor, deveria ser.

[8] Comentário enviado por narixx em 24/01/2006 - 17:23h

Parabéns Redleh, ótimo artigo esse... principalmente pra mim que estou entrando agora no mundo da POO, estava mais perdido que cego em tiroteio, mas agora que vc me mostrou o caminho das pedras, ficou mais fácil...

Valeu... ficou muito fácil de compreender... muito bom mesmo.

[9] Comentário enviado por brejao em 23/02/2007 - 11:23h

Simplesmente a melhor explicação sobre POO que já lí... e olha q já lí muitas! Parabens pelo ótimo artigo e vc deveria mesmo dar aulas sobre o assunto cara!

valew!!
[]s

[10] Comentário enviado por f_Candido em 16/05/2008 - 15:20h

Excelente artigo. Muito Bom mesmo.

[11] Comentário enviado por altitdb em 24/01/2009 - 23:59h

Amigo,
Excelente Artigo, você está de Parabéns.
Explicou e se expressou muito bem.
Obrigado =D

[12] Comentário enviado por cybershark em 02/09/2009 - 22:37h

pow velho esta parabens.......

muito bom

[13] Comentário enviado por edu.linux em 04/04/2012 - 11:02h

Muito bom o artigo. Parabéns, muito simples e direto.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts