O conceito de programacao orientada por objetos nao e novo. No final da decada de 60, a linguagem Simula67, desenvolvida na Noruega, introduzia conceitos hoje encontrados nas linguagens orientadas a objetos. Em meados de 1970, o Centro de Pesquisa da Xerox (PARC) desenvolveu a linguagem Smalltalk, a primeira totalmente orientada a objetos. No inicio da decada de 80, a AT&T lancaria a Linguagem C++, uma evolucao da linguagem C em direcao a orientacao a objetos.Atualmente, a grande maioria das linguagens incorpora caracteristicas de OO, como Java e Object Pascal. Alem das linguagens de programacao, e possivel encontrar o conceito de OO em sistemas operacionais, como no caso do Windows 2000, e em banco de dados, como no Oracle8 e, principalmente, Jasmine da CA.A programacao orientada a objetos tem como principais objetivos reduzir a complexidade no desenvolvimento de software e aumentar sua produtividade. A analise, projeto e programacao orientadas a objetos sao as respostas para o aumento da complexidade dos ambientes computacionais que se caracterizam por sistemas heterogeneos, distribuidos em redes, em camadas e baseados em interfaces graficas.A programacao orientada a objetos nao tem a intencao de substituir a programacao estruturada tradicional. Podemos considerar que a programacao OO e uma evolucao de praticas que sao recomendadas na programacao estruturada, mas nao formalizadas, como o uso de variaveis locais, visibilidade e escope. O modelo de objetos permite a criacao de bibliotecas que tornam efetivos o compartilhamento e a reutilizacao de codigo, reduzindo o tempo de desenvolvimento e, principalmente, simplificando o processo de manutencao das aplicacoes.A grande dificuldade para compreender a programacao OO e a diferenca de abordagem do problema. Enquanto a programacao estruturada tem como principal foco as acoes (procedimentos e funcoes), a programacao OO se preocupa com os objetos e seus relacionamentos. Alem do conceito de objeto, a programacao OO tem como alicerces os conceitos de encapsulamento, classe, heranca e polimorfismo.Conceitos BasicosA abordagem de orientacao a objetos favorece a aplicacao de diversos conceitos considerados fundamentais para o desenvolvimento de bons programas, tais como abstracao e encapsulacao. Tais conceitos nao sao exclusivos desta abordagem, mas sao suportados de forma melhor no desenvolvimento orientado a objetos do que em outras metodologias. AbstracaoAbstracao consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar propriedades ``acidentais.'' Em termos de desenvolvimento de sistemas, isto significa concentrar-se no que um objeto e e faz antes de se decidir como ele sera implementado. O uso de abstracao preserva a liberdade para tomar decisoes de desenvolvimento ou de implementacao apenas quando ha um melhor entendimento do problema a ser resolvido.Muitas linguagens de programacao modernas suportam o conceito de abstracao de dados; porem, o uso de abstracao juntamente com polimorfismo e heranca, como suportado em orientacao a objetos, e um mecanismo muito mais poderoso.O uso apropriado de abstracao permite que um mesmo modelo conceitual (orientacao a objetos) seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua analise ate sua documentacao. EncapsulacaoEncapsulacao, tambem referido como esconder informacao, consiste em separar os aspectos externos de um objeto, os quais sao acessiveis a outros objetos, dos detalhes internos de