Você está na página 1de 6

Notcias Guias O que h de novo?

Criado 29/out/2007 s 10h14 por Marcio Frayze David 90


ndice - Artigos
Programao Orientada a Objetos:
uma introduo
Introduo
Um breve relato da histria da Programao Orientada a Objetos
O termo Programao Orientada a Objetos foi criado por Alan Kay, autor da linguagem de
programao Smalltalk. Mas mesmo antes da criao do Smalltalk, algumas das ideias da POO j
eram aplicadas, sendo que a primeira linguagem a realmente utilizar estas idias foi a linguagem
Simula 67, criada por Ole Johan Dahl e Kristen Nygaard em 1967. Note que este paradigma de
programao j bastante antigo, mas s agora vem sendo aceito realmente nas grandes
empresas de desenvolvimento de Software. Alguns exemplos de linguagens modernas utilizadas
por grandes empresas em todo o mundo que adotaram essas idias: Java, C#, C++, Object
Pascal (Delphi), Ruby, Python, Lisp, ...
A maioria delas adota as idias parcialmente, dando espao para o antigo modelo procedural de
programao, como acontece no C++ por exemplo, onde temos a possibilidade de usar POO, mas
a linguagem no fora o programador a adotar este paradigma de programao, sendo ainda
possvel programar da forma procedural tradicional. Este tipo de linguagem segue a idia de
utilizar uma linguagem previamente existente como base e adicionar novas funcionalidades a ela.
Outras so mais "puras", sendo construidas do zero focando-se sempre nas idias por trs da
orientao a objetos como o caso das linguagens Smalltalk, Self e IO, onde TUDO orientado a
objetos.
Idias bsicas da POO
A POO foi criada para tentar aproximar o mundo real do mundo virtual: a idia fundamental
tentar simular o mundo real dentro do computador. Para isso, nada mais natural do que utilizar
Objetos, afinal, nosso mundo composto de objetos, certo?!
Na POO o programador responsvel por moldar o mundo dos objetos, e explicar para estes
objetos como eles devem interagir entre si. Os objetos "conversam" uns com os outros atravs do
envio de mensagens, e o papel principal do programador especificar quais sero as
mensagens que cada objeto pode receber, e tambm qual a ao que aquele objeto deve realizar
ao receber aquela mensagem em especfico.
Uma mensagem um pequeno texto que os objetos conseguem entender e, por questes
tcnicas, no pode conter espaos. Junto com algumas dessas mensagens ainda possvel passar
algumas informaes para o objeto (parmetros), dessa forma, dois objetos conseguem trocar
informaes entre si facilmente.
Ficou confuso? Vamos a um exemplo prtico: imagine que voc est desenvolvendo um software
para uma locadora e esta locadora tem diversos clientes. Como estamos tentando modelar um
sistema baseado no sistema real, nada mais obvio do que existirem objetos do tipo Clientes
dentro do nosso programa, e esses Clientes dentro do nosso programa nada mais sero do que
objetos que "simulam" as caractersticas e aes no mundo virtual que um cliente pode realizar no
mundo real.
Vamos apresentar exemplo mais detalhadamente mais para frente, mas antes precisamos
especificar mais alguns conceitos.
O que uma Classe, Atributo e Mtodo? E pra que serve o Construtor?
Uma classe uma abstrao que define um tipo de objeto e o que objetos deste determinado tipo
tem dentro deles (seus atributos) e tambm define que tipo de aes esse tipo de objeto capaz
de realizar (mtodos).
normal no entender isso logo de cara, mas os conceitos de classes e subclasses so
relativamente simples: Tente pensar no conceito de Classes utilizado na Biologia: um animal
uma classe, e tem suas caractersticas: um ser vivo capaz de pensar, precisa se alimentar para
viver, etc, etc. O Ser Humano uma sub-classe dos animais. Ele tem todas as caractersticas
de um animal, mas tambm tem algumas peculiaridades suas, no encontradas nas outras sub-
classes de animais. Os pssaros tambm so animais, mas possuem caractersticas prprias.
Note que uma Classe no tem vida, s um conceito. Mas os Objetos (animais, serem humanos,
pssaros, etc) possuem vida. O seu cachorro rex um Objeto (ou instncia) da classe Cachorro.
A classe Cachorro no pode latir, no 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 prprio, etc.
Guia do hardware GDH Press Frum GdH Publique seu texto RSS
Notcias
hoje
Lanado kernel Linux 3.8
Cdigo e SDK do Tizen 2.0 so publicados
ontem
Leves mudanas de privacidade no Ubuntu viro para
evitar crticas
Empresa taiwanesa mostra prottipo de tela transparente
para telefones
Vdeo do Plasma Active rodando no Nexus 7
15/02
Preview do Ubuntu para Galaxy Nexus e Nexus 4 ser
lanado no dia 21
Steam para Linux lanado fora do beta, e h descontos
para o pinguim
14/02
JavaFX open source para Android e iOS ser lanado em
breve
Opera usar WebKit at nos desktops
12/02
Os planos atuais do GNU/Hurd
Bootloader da Linux Foundation com suporte ao Secure
Boot lanado
Lanado Minecraft para Raspberry Pi, de graa
07/02
Lanados Calligra 2.6 e LibreOffice 4.0
GNOME planeja novo modelo de segurana para os apps
desktop
05/02
Btrfs ganha recurso experimental de RAID 5 e 6
Demonstrao do WebRTC: chat em vdeo sem plugins
entre Firefox e Chrome
GNOME recomenda uso de JavaScript para novos
programas
04/02
Caso Gradiente: Apple poder ser proibida de usar a
marca iPhone no Brasil
Wine no Android permitir rodar apps do Windows em
breve
31/01
Boot do Linux pode estragar alguns notebooks da
Samsung com UEFI
Notcias do ms de Fevereiro de 2013
Home Equipe Efetuar Login
Page 1of 6 Programao Orientada a Objetos: uma introduo
19/2/2013 http://www.hardware.com.br/artigos/programacao-orientada-objetos/
Artigos Tuto Livr Dica An
Livros
Compre o seu. Livro atualizado!
A criao de uma nova Classe dividida em duas partes: os seus atributos e os seus mtodos.
Os atributos so variveis que estaro dentro de cada um dos objetos desta classe, e podem ser
de qualquer tipo. Por exemplo, a classe Cachorro poder ter o atributo nome que ser do tipo
String. Assim, cada Objeto desta classe ter uma varivel prpria chamada nome, que poder ter
um valor qualquer (Rex, Frodo, Atila, ...).
Mtodos sero as aes que a Classe poder realizar. Quando um objeto desta classe receber
uma mensagem de algum outro objeto contendo o nome de um mtodo, a ao correspondente
a este mtodo ser executada. Por exemplo, caso um objeto da classe Dono envie uma
mensagem para um objeto do tipo Cachorro falando "sente", o cachorro ir interpretar esta
mensagem e conseqentemente ir executar todas as instrues que foram especificadas na
classe Cachorro dentro do mtodo sente.
Um construtor tem uma funo especial: ele serve para inicializar os atributos e executado
automaticamente sempre que voc cria um novo objeto.
Quando voc especifica os atributos de uma classe, voc apenas diz ao sistema algo como
"objetos desta classe Pessoa vo ter uma varivel chamada Nome que do tipo String, uma
varivel chamada idade que do tipo inteiro, etc, etc". Mas estas variveis no so criadas, elas
s sero criadas no construtor. O construtor tambm pode receber parmetro, desta forma, voc
pode passar para o construtor uma String contendo o nome da Pessoa que voc est criando, sua
idade, etc. Normalmente, a sintaxe algo parecido com isto:
Pessoa j oao : = new Pessoa( " J oo" , 13 ) ;
Este cdigo gera um novo objeto chamado joao que do tipo Pessoa e contem os valores "Joo" como nome e 13 como idade.
Caso voc tenha entendido o texto acima, voc entendeu 99% do que esta por trs da orientao a objetos. O mais importante entender como funciona a
comunicao entre os objetos, que sempre segue o seguinte fluxo:
-Um objeto A envia uma mensagem para o objeto B.
-Objeto B verifica qual foi a mensagem que recebeu e executa sua ao correspondente. Esta ao est descrita no mtodo que corresponde a mensagem recebida, e
est dentro da Classe a qual este objeto pertence.
Exemplo
Voltando ao exemplo da locadora: Voc est desenvolvendo um software para uma locadora. Esta locadora ter diversos clientes. Podermos ento criar uma classe
explicando para o computador o que um Cliente: para isso precisaramos criar uma classe chamada Cliente, e com as seguintes caractersticas (atributos):
Nome
Data de Nascimento
Profisso
Mas um cliente mais do que simples dados. Ele pode realizar aes! E no mundo da POO, aes so descritas atravs da criao de mtodos.
Dessa forma, objetos da nossa classe Cliente poder por exemplo executar as seguintes aes (mtodos):
AlugarFilme
DevolverFilme
ReservarFilme
Note o tempo verbal empregado ao descrever os mtodos. Fica fcil perceber que trata-se de aes que um Cliente pode realizar.
muito importante perceber as diferenas entre Atributo e Mtodo. No comeo normal ficar um pouco confuso, mas tenha sempre em mente:
Atributos so dados.
Mtodos descrevem possveis aes que os objetos so capazes de realizar.
Assim, nosso sistema pode ter vrios Objetos do tipo Cliente. Cada um destes objetos possuir seu prprio nome, data de nascimento e profisso, e todos eles
podero realizar as mesmas aes (AlugarFilme, RevolverFilme ou ReservarFilme).
Herana
Voltando a idia das classes na Biologia: um ser humano um animal. Ele tem todas as caractersticas (atributos) e pode realizar todas as aes (mtodos) de um
animal. Mas alm disso, ele tem algumas caractersticas e aes que s ele pode realizar.
Em momentos como este, utilizado a herana. Uma classe pode estender todas as caractersticas de outra e adicionar algumas coisas a mais. Desta forma, a classe
SerHumano ser uma especializao (ou subclasse) da classe Animal. A classe Animal seria a classe pai da serHumano, e logicamente, a classe SerHumano seria
a classe filha da Animal.
Uma classe pode sempre ter vrios filhos, mas normalmente as linguagens de programao orientadas a objetos exigem que cada classe filha tenha apenas uma
classe pai. A linguagem C++ permite que uma classe herde as caractersticas de varias classes (herana mltipla), mas C++ no um bom exemplo quando se est
falando sobre conceitos de POO.
Um exemplo um pouco mais prximo da nossa realidade: vamos supor que estamos desenvolvendo um sistema para um banco. Nosso banco possui clientes que so
pessoas fsicas e pessoas jurdicas.
Poderiamos criar uma classe chamada Pessoa com os seguintes atributos:
Nome
Idade
Em seguida, criamos 2 classes que so filhas da classe Pessoa, chamadas PessoaFisica e PessoaJuridica. Tanto a classe PessoaFisia como a PessoaJuridica
herdariam os atributos da classe Pessoa, mas poderiam ter alguns atributos a mais.
A classe PessoaFisica pode ter por exemplo o atributo RG enquanto a classe PessoaJuridica poderia ter o atributo CNPJ.
Dessa forma, todos os objeto da classe PessoaFisica ter como atributos:
Nome
Idade
Page 2of 6 Programao Orientada a Objetos: uma introduo
19/2/2013 http://www.hardware.com.br/artigos/programacao-orientada-objetos/
RG
E todos os objetos da classe PessoaJuridica tero os seguintes atributos:
Nome
Idade
CNPJ
Os mtodos so anlogos: poderamos criar alguns mtodos na classe Pessoa e criar mais alguns mtodos nas classes PessoaJuridica e PessoaFisica. No final, todos
os objetos teriam os mtodos especificados na classe Pessoa, mas s os objetos do tipo PessoaJuridica teriam os mtodos especificados dentro da classe
PessoaJuridica, e objetos do tipo PessoaFisica teriam os mtodos especificados na classe PessoaFisica.
Polimorfismo
Um dos conceitos mais complicados de se entender, e tambm um dos mais importantes, o Polimorfismo. O termo polimorfismo originrio do grego e significa
"muitas formas".
Na orientao a objetos, isso significa que um mesmo tipo de objeto, sob certas condies, pode realizar aes diferentes ao receber uma mesma mensagem. Ou
seja, apenas olhando o cdigo fonte no sabemos exatamente qual ser a ao tomada pelo sistema, sendo que o prprio sistema quem decide qual mtodo ser
executado, dependendo do contexto durante a execuo do programa.
Desta forma, a mensagem "fale" enviada a um objeto da classe Animal pode ser interpretada de formas diferentes, dependendo do objeto em questo. Para que isto
ocorra, preciso que duas condies sejam satisfeitas: exista herana de uma classe abstrata e casting (outras situaes tambm podem resultar em
polimorfismo, mas vamos nos centrar neste caso).
Herana nos j definimos previamente, mas o que uma classe abstrata? E o que esse tal de casting?
Uma classe abstrata uma classe que representa uma coleo de caractersticas presentes em vrios tipos de objetos, mas que no existe e no pode existir
isoladamente. Por exemplo, podemos criar uma classe abstrata chamada Animal. Um Animal tem diversas caractersticas (atributos) e podem realizar diversas aes
(mtodos) mas no existe a possibilidade de criarmos objetos do tipo Animal. O que existem so objetos das classes Cachorro, Gato, Papagaio, etc. Essas classes,
estendem a classe Animal herdando todas as suas caractersticas, e adicionando algumas coisas a mais. "Animal" s uma entidade abstrata, apenas um conjunto
de caractersticas em comum, nada mais.
Voc pode olhar para um objeto da classe Cachorro e falar "isto um animal, pois estende a classe Animal", mas voc nunca vai ver um objeto que seja apenas da
classe Animal, pois isso no existe! como eu olhar para voc e falar "voc um objeto da classe SerVivo". Essa afirmao est correta, mas voc na verdade um
objeto da classe SerHumano, que por sua vez herda todas as caractersticas da classe SerVivo (que por sua vez uma classe abstrata, j que no podemos criar algo
que seja apenas classificado como "SerVivo", sempre vamos classifica-lo de forma menos genrica).
Resumindo: uma classe abstrata um conjunto de informaes a respeito de uma coleo de outras classes. Uma classe abstrata sozinha completamente intil, j
que no podemos instanciar um objeto desta classe, podemos apenas instanciar objetos de classes que estendem a classe abstrata inicial. Ela serve apenas para
simplificar o sistema, juntando em um nico lugar diversas caractersticas que so comuns a um grupo de classes.
Nunca esquea disso: voc nunca vai poder criar um objeto do tipo de uma classe abstrata. Sempre crie objetos das classes que estendem esta classe abstrata.
J o termo casting utilizado quando nos foramos o sistema a ver um certo objeto como sendo de um determinado tipo que no o seu tipo original. Supondo que
temos a situao a seguir:

Essa uma representao na notao UML (Unified Modeling Language) que nos informa que existe a definio de trs classes em nosso sistema: existe a classe
abstrata Animal (note que ela est em itlico, isso significa na notao UML que trata-se de uma classe abstrata) e existem tambm outras duas classes chamadas
Cachorro e Gato, que so filhas da classe Animal. Ou seja, todo objeto das classes Cachorro e Gato vo ter todas as caractersticas (atributos e mtodos)
presentes na classe Animal, e mais algumas caractersticas prprias.
Imagine que vamos criar um sistema de cadastro de animais. Vamos, por questes didticas, supor que todos os animais de nosso sistema fiquem armazenados em
um array. Ento existiria um array contendo objetos dos tipos Gato e do tipo Cachorro. Mas armazenar diversos tipos diferentes de objetos em um nico array no
uma boa idia, pois depois, para extrair essas informaes de volta bastante complicado. Mas pare e pense por um instante: objetos do tipo Cachorro e objetos do
tipo Gato so tambm objetos do tipo Animal, correto? Bom, ento podemos criar um array capaz de armazenar Animais! Assim nossa vida fica bem mais fcil,
bastando atribuir ao array os objetos (do tipo Cachorro e Gato - que estendem a classe Animal) que queremos guardar. Em forma algortmica, seria mais ou menos:
Ani mal [ ] l i st aDeAni mai s = new Ani mal [ 100] ; / / Cr i amos umar r ay com100 posi es que ar mazena obj et os do t i po Ani mal .
l i st aDeAni mai s[ 0] = new Cachor r o( " Fr odo" ) ; / / Cr i amos umnovo obj et o do t i po Cachor r o como nome Fr odo e ar mazenamos no ar r ay
l i st aDeAni mai s[ 1] = new Gat o( " Al an" ) ; / / Cr i amos umnovo obj et o do t i po Gat o como nome Al an e ar mazenamos no ar r ay
. . . . . . .
Certo! Agora temos um array com vrios objetos do tipo Animal. Agora vamos fazer um looping por todos esses objetos, enviando para cada um deles a mensagem
"fale". O que iria acontecer?
Inicialmente, vamos supor que a classe abstrata Animal possui o mtodo "fale", e que ele seja implementado (de forma algortmica) da seguinte forma:
Cl asse Ani mal {
mt odo f al e( ) {
i mpr i maNaTel a( " Eu sou mudo! " ) ;
}
}
Desta forma, todo objeto que de alguma classe que estenda a classe Animal vai ter automaticamente o mtodo "fale", e isso inclui todos os objetos das classes
Cachorro e Gato. Mas todos eles, atualmente, ao receber a mensagem "fale" vo responder imprimindo na tela a mensagem "Eu sou mudo!". Mas Gatos e Cachorros
Page 3of 6 Programao Orientada a Objetos: uma introduo
19/2/2013 http://www.hardware.com.br/artigos/programacao-orientada-objetos/
podem falar! O que podemos fazer sobreescrever o mtodo fale para cada uma das classes, substituindo ento seu contedo pelo comportamento que queremos
que cada subclasse tenha.
Por exemplo, poderamos escrever na classe Gato do seguinte mtodo:
Cl asse Gat o {
Mt odo f al e( ) {
i mpr i maNaTel a( " Mi aaaaaauuuuuu! " ) ;
}
}
Para a classe Cachorro, poderamos fazer de forma semelhante:
Cl asse Cachor r o {
Mt odo f al e( ) {
i mpr i maNaTel a( " Au au au! " ) ;
}
}
Agora, se fizermos um looping entre todos os objetos contidos em nosso array criado anteriormente enviando para cada objeto a mensagem "fale", cada um deles ir
ter um comportamento diferente, dependendo se um Cachorro ou um Gato. Nosso looping entre todos os animais cadastrado no nosso sistema seria mais ou menos
assim:
i nt cont ;
par a cont de 0 a 100 f aa {
l i st aDeAni mai s[ cont ] . f al e( ) ;
}
Isto polimorfismo! Uma mesma mensagem enviada para diferentes objetos da mesma classe (Animal) e o resultado pode ser diferente, para cada caso. :-)
Vantagens da POO
Os sistemas, em geral, possuem uma diviso de cdigo um pouco mais lgica e melhor encapsulada do que a empregada nos sistemas no orientados a objetos.
Isto torna a manuteno e extenso do cdigo mais fcil e com menos riscos de insero de bugs. Tambm mais fcil reaproveitar o cdigo.

mais fcil gerenciar o desenvolvimento deste tipo de software quando temos uma equipe grande. Podemos fazer uma especificao UML antes de iniciar o
desenvolvimento do software em si, e em seguida dividirmos o sistema em classes e pacotes, e cada membro da equipe pode ficar responsvel por desenvolver
uma parte do sistema.

Desvantagens da POO
Na minha opinio, o aprendizado do paradigma de programao orientada a objetos bem mais complicado no incio do que os velhos sistemas procedurais. Para
comear a programar necessrio ter estabelecido uma srie de conceitos bastante complexos. J na programao procedural tradicional, basta decorar meia
dzia de comandos e voc j consegue fazer um programa simples.

Dificilmente uma linguagem orientada a objetos conseguir ter um desempenho em tempo de execuo superior a linguagens no orientadas a objetos.
Concluses
Espero que com este texto voc tenha ao menos entendido o bsico da orientao a objetos. No se preocupe caso voc tenha "viajado" em algumas partes do texto,
perfeitamente normal. Agora siga em frente, continue estudando e leia um bom livro sobre a linguagem de programao que quer aprender. Caso esteja dando
seus primeiros passos no mundo orientado a objetos, um bom comeo pode ser a linguagem Ruby. Ela uma linguagem interpretada e bastante fcil de aprender, e
ainda assim, possui um bom sistema de orientao a objetos, sendo um timo ambiente para comear. Alm disso, Ruby uma linguagens que vem crescendo
bastante no mercado, sendo que tem se destacado bastante no desenvolvimento de softwares para web, substituindo linguagens como como PHP, Perl e Java.
' Or i ent acao a obj et os beml egal ! : ) At a pr xi ma! ' out .
Marcio Frayze David formado em Cincia da Computao pela PUC-SP e trabalha com desenvolvimento de softwares utilizando Java (J2SE, J2ME e J2EE) e
Smalltalk. Ele tambm membro do grupo Insaners, que desenvolve jogos open-source para Windows, Linux e celulares. Nas horas vagas gosta de sair com sua
namorada e tocar bateria. Pode ser contactado atravs do email "mfdavid em gmail.com" ou em seu blog.
Por Marcio Frayze David. Revisado 22/fev/2011 s 14h56
Comentrios
1 2 3 4 5 6 7 8 9
Excelente
Criado 23/jul/2012 s 16h58 por Gabriel Dias R.
Parabns, excelente texto.

Provavelmente j ajudou e vai continuar ajudando muita gente, criei uma conta apenas para realizar este comentrio.

Abraos
muito bom
Criado 21/jun/2012 s 19h22 por andersonDeSouzaCosta
achei bom d+.
90 comentrios
Entrar e fazer comentrio
Page 4of 6 Programao Orientada a Objetos: uma introduo
19/2/2013 http://www.hardware.com.br/artigos/programacao-orientada-objetos/
Gostou do texto?
Veja nossos livros impressos:
Smartphones | Linux | Hardware
Redes | Servidores Linux

... ou encontre o que procura usando a
busca:

timo texto.
Criado 20/jun/2012 s 22h04 por Shoram lee
Parabns pelo timo texto e espero que ele possa lhe servir de mrito (como um artigo publicado) pois deve ter despendido um bom tempo com ele, sem contar do
conhecimento.

Sanou completamente minha dvida sobre o que era POO e ainda explicou (de quebra) suas funcionalidades.

Deveria ir para o wikipdia.

Parabns novamente!!!
Parabns
Criado 12/jun/2012 s 13h49 por Fabio_Batista
Muito boa a explicao, parabns.
Sou zerada em relao programao...
Criado 25/fev/2012 s 18h42 por Lvian (annimo)
...e mesmo assim, compreendi completamente o sentido da coisa. Permite que, a partir daqui, eu pesquise os pormenores das definies. Texto maravilhoso!
Parabns!

:-)
Concordo por Chico Malak
Muito bom
Criado 4/jun/2012 s 22h43 por Chico Malak
Sou um curioso no mundo da informtica sei muita coisa devido minha curiosidade e perseverana; gostei do texto esse um dos primeiros que li sobre
programao, estou querendo adentrar mais nesse mundo da informtica, espero poder contar com voc para aprender a programar de verdade!!!! Valeu!!!!
Didatica muito boa
Criado 15/mai/2012 s 13h35 por Tamiris.Duarte
Foi a melhor explicao que encontrei sobre POO. Muito bom
Muito bom
Criado 28/mar/2012 s 16h44 por Leandro de Castro
Excelente para quem est comeando! Quem quiser tem um timo tutorial sobre OOP, aprendi muito l tambm www.cafeesoftware.com.
Excelente texto
Criado 14/fev/2012 s 10h51 por Guilherme Rodrigues (annimo)
Mesmo no sendo familiarizado com POO, consegui ter uma overview bastante proveitoso sobre o assunto. :)
timo
Criado 13/fev/2012 s 23h56 por FERNANDO (annimo)
po, parabens pelo texto. mto claro e conciso!
1 2 3 4 5 6 7 8 9
Destaques
Guia do Hardware agora Hardware.com.br
Hardware II, o Guia Definitivo
Siga-nos:
RSS | Twitter | Facebook
1999-2013 Hardware.com.br. Todos os direitos reservados.
Expandir rplicas
Buscar
Page 5of 6 Programao Orientada a Objetos: uma introduo
19/2/2013 http://www.hardware.com.br/artigos/programacao-orientada-objetos/
Home Frum GdH RSS Equipe Topo
Page 6of 6 Programao Orientada a Objetos: uma introduo
19/2/2013 http://www.hardware.com.br/artigos/programacao-orientada-objetos/