Académique Documents
Professionnel Documents
Culture Documents
Tutorial POO
Tutorial POO
1 Edio
Criado em fevereiro de 2007.
Consideraes Iniciais
J vi algumas pessoas tentarem se aventurar em programao, mas sem obter sucesso. Qual a
causa disso? O desenvolvimento de sistemas uma tarefa bastante complexa. Alm disso,
muitas pessoas inexperientes na programao no conhecem os conceitos bsicos de orientao
a objetos.
Este ser o foco deste tutorial. Demonstrar os conceitos da programao orientada a objetos e
dar sugestes de como programar melhor, ou seja, as boas prticas de programao.
Este tutorial foi revisado extensivamente, mas, apesar disso, podem ocorrer erros. Por favor me
avisem caso encontrem algum.
Como j de praxe, gostaria de lembrar que no estou aqui querendo afirmar nada sobre nada
nem ningum. No quero ofender nenhum leitor, ou o vizinho, ou o cachorro do vizinho, ou o
papagaio de qualquer um que seja. No estou tentando provar nada. No sou guru da
programao. Portanto, tenham pacincia...
E me desculpem por qualquer tipo de transtorno e muito obrigado aos que me ajudaram e
incentivaram.
Cavaco's Creations
Voc pode copiar, distribuir, exibir, executar ou criar obras derivadas sob as seguintes condies:
Atribuio: Voc deve dar crdito ao autor original, da forma especificada pelo
autor ou licenciante.
Uso No-Comercial: Voc no pode utilizar esta obra com finalidades comerciais.
Para cada novo uso ou distribuio, voc deve deixar claro os termos da licena desta obra.
Qualquer uma destas condies podem ser renunciadas, desde que voc obtenha permisso do
autor. Qualquer direito de uso legtimo (ou "fair use") concedido por lei, ou qualquer outro direito
protegido pela legislao local, no so em hiptese alguma afetados pelo disposto acima.
Este um sumrio para leigos da Licena Jurdica (que pode ser obtida na ntegra em
http://www.4shared.com/file/11081399/19b3184f/Licena_de_Uso.html).
Esta Licena Simplificada no uma licena propriamente dita. Ela apenas uma referncia til
para entender a Licena Jurdica (a licena integral). Ela uma expresso dos seus termos-chave
que pode ser compreendida por qualquer pessoa. A Licena Simplificada em si no tem valor
legal e seu contedo no aparece na licena integral. A Cavaco's Creations no um escritrio de
advocacia e no presta servios jurdicos. A distribuio, exibio ou incluso de links para esta
Licena Simplificada no estabelece qualquer relao advocatcia.
Agradecimentos
Agradeo :
Sumrio
Tutorial POO............................................................................. 1
Consideraes Iniciais................................................................ 2
Cavaco's Creations..................................................................... 3
Agradecimentos......................................................................... 4
Sumrio................................................................................... 5
ndice de Ilustraes.................................................................. 7
Como Utilizar este Tutorial.......................................................... 8
Comeando............................................................................... 9
Programao Orientada a Objetos.............................................. 11
O que Programao Orientada a Objetos? ..............................................11
E o que so Objetos?..............................................................................12
Mas, afinal, qual a diferena entre Classe e Objeto?................................. 13
Conceitos Bsicos de POO....................................................................... 14
Abstrao.............................................................................................................. 15
Encapsulamento...................................................................................................... 15
Proteo da informao (information/data hiding) ....................................................... 17
Sobreposio (Overriding)........................................................................................ 19
Passagem de mensagens (parmetros)...................................................................... 20
Delegao ............................................................................................................. 20
Classes/objetos/instncias........................................................................................ 21
Herana (Generalizao/Especializao) .................................................................... 21
Polimorfismo ......................................................................................................... 23
Relacionamentos..................................................................................................... 23
Uma palavra de cautela ......................................................................... 24
Programar Orientado a Objetos modelar ................................................24
Criando Objetos....................................................................... 25
Identificao de substantivos ..................................................................25
Identificao das classes.........................................................................27
Concluso............................................................................... 48
ndice de Ilustraes
Figura 1: Diferena entre Classes e Objetos...................................................................................... 13
Figura 2: Programao Convencional................................................................................................ 15
Figura 3: Representao de uma classe/objeto.................................................................................. 15
Figura 4: Exemplo de Objeto........................................................................................................... 16
Figura 5: Objeto lmpada............................................................................................................... 16
Figura 6: Data hiding..................................................................................................................... 17
Figura 7: Analogia com um Iceberg.................................................................................................. 18
Figura 8: Passagem de mensagens.................................................................................................. 20
Figura 9: Exemplo de Herana........................................................................................................ 21
Figura 10: Outro exemplo de Herana.............................................................................................. 21
Figura 11: Definio de Herana...................................................................................................... 21
Figura 12: Exemplo de uma Classe.................................................................................................. 28
Figura 13: Exemplo detalhado de uma Classe.................................................................................... 28
Este tutorial de nvel bsico. A leitura deste tutorial aconselhvel para todos os leigos no
universos de desenvolvimento de sistemas e programao.
Existem diversos modelos de desenvolvimento de sistemas, mas o modelo que mais utilizado
atualmente a orientao a objetos. Portanto, veremos como chegar no mago deste
paradigma.
Este tutorial deve ser compreendido antes de qualquer aprofundamento em qualquer linguagem
orientada a objeto (Java, C, dentre outros, incluindo o Ruby). Principalmente se voc se
considera leigo no assunto. Agora, vamos deixar de enrolar e partir pro que interessa.
Comeando
A programao orientada a objetos (POO) um paradigma de programao que tenta aproximar
o cdigo fonte da realidade. Antigamente, o que existia era o paradigma procedural, ou seja,
procedimentos seqenciais. Este paradigma antigo distanciava a programao do mundo real,
pois uma seqncia lgica de procedimentos no se mostrava realista o suficiente.
No mundo real o que existem so objetos. Exemplo: Um copo! Para que serve este objeto? Ele
pode ser enchido com algum lqido, ou esvaziado, alm de possuir um volume mximo, etc. Na
programao orientada a objetos (POO) o Copo uma classe, a ao de Encher o Copo e
Esvaziar o Copo so dois mtodos que fazem duas coisas distintas e Volume Mximo um
atributo. Este o fator que diferencia a programao orientada a objetos (POO) de outros
paradigmas.
Por causa deste diferencial, a programao orientada a objetos (POO) se aproxima mais do
mundo como ns realmente o vemos.
As classes e objetos so uma forma de TAD que muito utilizado atualmente, mas... O que leva
um programador a mudar do paradigma procedimental para um novo?
A resposta esta na complexidade crescente dos sistemas e nas limitaes da capacidade humana
de compreenso de um sistema como um todo. Um sistema fica complexo quando se usa um
conjunto grande de tarefas e diversos de comportamentos tendo um longo ciclo de vida e muitos
usurios dependendo dele. A complexidade est na quantidade e diversidade.
Tudo o que vemos nossa volta so objetos. Estamos acostumados a ver objetos (classes) e
saber imediatamente para que eles servem (seus mtodos) e quais as suas caractersticas
(atributos). Por causa disso fica muito mais fcil compreender o sistema como um todo quando
se usa a POO.
Curiosidade:
Alm disso, os paradigmas (na cincia da computao) explicam como os elementos que
compem um programa so organizados e como interagem entre si.
10
Como ns j sabemos, no mundo real, tudo objeto! Estes objetos se relacionam entre si de
diversas maneiras. Exemplo: Copo e Garrafa. O objeto garrafa tem os mesmos mtodos e
atributos do copo, mas com valores diferente. Quando se esvazia a garrafa pode-se estar
enchendo o copo (se o copo no estiver cheio). Esta iterao entre os objetos muito freqente
na POO. Um programa orientado a objetos estruturado como uma comunidade de agentes que
interagem entre si. Os agentes so os denominados objetos. Cada objeto tem um papel a
cumprir e oferece um servio ou realiza uma ao que usada por outros membros da
comunidade, ou seja, outros objetos (o copo e a garrafa).
11
E o que so Objetos?
Um objeto uma varivel... Ele armazena dados. Ento uma estrutura de variveis um objeto,
mas um objeto pode ser mais que uma estrutura de variveis: voc pode pedir que determinadas
operaes sejam feitas sobre os objetos e suas variveis.
Um programa um conjunto de objetos dizendo uns para os outros o que fazer atravs do envio
de mensagens. Concretamente, pode-se pensar nas mensagens como sendo chamadas a funes
que pertencem a um objeto em particular.
Cada objeto tem a sua prpria regio de memria, que pode ser composta por outros objetos,
tambm. Exemplo: o objeto carro pode ser composto pelos objetos lataria, rodas, motor, dentre
outros.
12
Classes e objetos so praticamente a mesma coisa, com algumas pequenas diferenas. As classe
e objetos possuem uma combinao de dados e operaes em um elemento nico. A diferena
mais visvel a seguinte:
a) placa-me;
b) CPU;
c) placa de vdeo;
d) disco rgido;
e) teclado, etc.
13
Cada componente bastante sofisticado, mas o usurio no precisa saber como funciona
internamente, pois cada componente independente dos demais. Para quem est montando um
computador, interessa apenas como os componentes interagem entre si, ou seja:
exatamente isso que fazemos ao utilizar classes (objetos). Ns sabemos que elas existem e
como interagem, ento usamos elas de forma lgica e intuitiva.
Agora vamos nos aprofundar na POO um pouco mais conhecendo alguns dos princpios da
Orientao a Objetos. Os principais so:
a) Abstrao;
b) Encapsulamento;
c) Proteo/ocultao da informao (information/data hiding);
d) Sobreposio (Overriding);
e) Passagem de mensagens;
f) Delegao;
g) Classes/objetos/instncias;
h) Herana;
i) Polimorfismo;
j) Relacionamentos.
14
Abstrao
Abstrao, nada mais do que um conceito de POO que diz o seguinte: Devemos representar
numa entidade apenas os atributos mais importantes para um contexto particular. A abstrao de
sub-programas permitem especificar O QUE deve ser feito, sem detalhar COMO.
Encapsulamento
Dados Procedimentos
Figura 2: Programao Convencional.
Nos objetos a iterao maior e contm tanto os dados quanto a descrio das operaes que
manipularo ou alteraro aqueles dados.
Dados
15
Operaes:
ligar
Servios desligar
Dados
Dados:
ligada (s/n)
potncia
voltagem
Figura 4: Exemplo de Objeto. Figura 5: Objeto lmpada.
A interface (pblica) de um objeto declara todas as operaes permitidas. Todo o acesso aos
dados feito atravs da chamada a um mtodo definido pelo objeto. As mudanas na
implementao interna do objeto (que preservem a sua interface externa) no afetam o resto do
sistema.
Benefcios
a) Segurana: protege os objetos de terem seus atributos corrompidos por outros objetos.
b) Independncia: escondendo seus atributos, um objeto protege outros de complicaes
de dependncia da sua estrutura interna.
16
O objeto que contm os dados (atributos do objeto) define que servios esto disponveis para
outros objetos, ou seja, voc s pode usar os mtodos do objeto que o programador
disponibilizou para uso. Outra caracterstica, que os demais objetos podem no ter acesso a
dados individuais. A informao sobre como os servios so implementados tambm pode ser
protegida.
Servios
Dados
No possvel chegar aos dados diretamente. Para manipular os dados, necessrio recorrer aos
servios (mtodos, variveis pblicas, dentre outros).
17
Observe a diferena do que visto pelo cliente e do que realmente existe por trs da interface de
nosso programa. Note que os dados ficam escondidos. Esta uma forma de proteo dos dados.
Tudo que o cliente v atravs da interface e portanto o cliente no manipula os dados.
18
Sobreposio (Overriding)
Para utilizar este conceito, a declarao do mtodo deve ser feita com a mesma assinatura da
super-classe. O cliente que instancia a sub-classe no consegue mais acessar o mtodo que foi
sobreposto da super-classe.
19
Um objeto se comunica com outros pelo envio de mensagens. Uma ao iniciada por uma
requisio de servios (mensagem) e uma resposta enviada para um objeto especfico. Essa
ao uma operao que utiliza ou altera os dados do objeto. A implementao da ao
denominada mtodo.
Servios
Dados
Receptor (servidor)
Servios
Emissor (cliente)
Dados
As mensagens podem ser definas como sendo chamadas a funes que pertencem a um objeto
em particular. As mensagens identificam os mtodos a serem executados no objeto receptor.
Para invocar um mtodo, deve-se enviar uma mensagem para o objeto desejado. Para enviar
uma mensagem, deve-se identificar o objeto que receber a mensagem, identificar o mtodo que
o objeto dever executar, passar os argumentos requeridos pelo mtodo.
Delegao
O trabalho transferido, pelo envio de mensagens, de um objeto (cliente) para outro (servidor).
Da perspectiva do cliente, o servidor quem deve executar os servios que o cliente necessita.
Trabalho transferido continuamente at que atinja o objeto que possui os dados e os mtodos
para executar a tarefa.
20
Classes/objetos/instncias
Todo objeto criado a partir ( uma instncia) de uma classe. Geralmente um objeto a classe
sendo executada no aplicativo (criadas em tempo de execuo). Diversos dados (atributos)
podem ser associados a cada objeto. As classes normalmente contm atributos gerais e
independentes das diversas instncias (atributos de classe).
Herana (Generalizao/Especializao)
21
Normalmente, essas alteraes geram uma classe que representa um subconjunto da classe
base, por isso, muitas vezes denominada especializao.
Em algumas linguagens temos a herana mltipla, onde uma dada classe pode herdar de mais de
uma classe .
22
Polimorfismo
Uma certa operao, muitas vezes pode ser definida de forma equivalente para atributos de
entrada (parmetros) de formas diferentes. Polimorfismo permite que diversos mtodos (que
difiram em suas assinaturas/cabealhos) recebam o mesmo nome, ou seja, uma funo membro
de uma classe derivada pode ser sobrescrita para produzir um comportamento diferenciado para
a sub-classe. Isso permite que mtodos sejam identificados pelo seu efeito/finalidade de forma
uniforme, simplificando a tarefa do programador.
Exemplos:
area_triangulo = calcula_area(lado1,lado2,lado3);
area_triangulo = calcula_area(base,altura);
area_triangulo = calcula_area(registro_triangulo);
Resumindo:
Polimorfismo o processo pelo qual diferentes implementaes de mtodos podem ser acessadas
pelo mesmo nome, alm de permitir aplicar a mesma operao (conceitual) a objetos de tipos
diferentes.
Relacionamentos
Mecanismo pelo qual um objeto toma conhecimento dos demais em um programa. Basicamente,
entre os atributos de um objeto deve haver informao que lhe permita identificar um outro
objeto. H dois (2) tipos bsicos de relacionamento, que so:
23
Programar um computador uma das tarefas mais difceis que se pode enfrentar. A orientao a
objetos no muda isso. Ela apenas oferece um conjunto de abstraes, mtodos e padres que
viabilizam o desenvolvimento de programas melhores. No pense que por utilizar um paradigma
novo e mais funcional, tudo ser facilitado. Portanto, um estudo minucioso sempre bom para
um aprendizado eficiente.
24
Criando Objetos
Identificao de substantivos
Primeiro devemos obter (ou produzir) uma narrativa textual que contenha uma descrio do
problema a ser resolvido. Para tanto podemos recorrer a casos de uso (exemplo: RUP ou Praxis),
estatsticas, categorias de itens, dentre outros. Sempre devemos usar substantivos, pronomes e
oraes substantivas para identificar objetos e classes. Fora isso, os verbos e locues verbais
devem ser usadas para identificar servios e/ou mtodos.
25
a) abertura;
b) venda;
c) item vendido;
d) identificao;
e) quantidade;
f) cliente da mercearia;
g) ticket de caixa;
h) forma de pagamento;
i) baixa;
j) estoque;
k) mercadoria.
a) abertura operao
b) venda provvel classe
c) item vendido provvel classe (item de venda)
d) identificao atributo de item de venda
e) quantidade atributo de item de venda
f) cliente da mercearia entidade fora de escopo
g) ticket de caixa relatrio (item de implementao)
h) forma de pagamento atributo de venda
i) baixa operao
j) estoque possvel classe (conj. de itens cadastrados)
k) mercadoria provvel classe
26
Agora, vamos ver como devemos identificar nossas classes, ou seja, como dar nomes s classe
que vamos criar.
Vejamos agora alguns problemas na criao de classes e a soluo para estes problemas.
a) Nome;
b) Atributos (dados);
c) Operaes (mtodos).
27
28
Alm disso devemos desenvolver com coeso. Coeso o nvel de relacionamento entre as
operaes pertencentes a uma dada rotina, sendo que diferentes tipos de relacionamento
identificam diferentes nveis de coeso. Nossas rotinas, quando bem planejadas, devem possuir
uma coeso forte.
29
Programao Defensiva
Inclua cdigo para identificar situaes de erro extremas (que no deveriam ocorrer se o
programa estivesse certo). Isso evita situaes com erros de difcil identificao.
Exemplo:
Os Bitmaps so armazenados em arquivos. Estes arquivos devem ser carregados para variveis
antes de serem exibidos. Caso o arquivo no esteja disponvel, a carga dele gera um lixo. A
exibio deste lixo causa o fim do programa (aborta a execuo do aplicativo). Para evitar este
tipo de problema, crie um tratamento de erro que verifica se o arquivo est disponvel antes de
exibi-lo.
Agora, vamos ver algumas sugestes para a manipulao/criao de tipos de dados (variveis,
constantes, estruturas, etc).
Tipos em geral:
30
Tipos booleanos:
O que seria um escopo de varivel? basicamente o local onde a varivel pode ser usada, ou
seja, faixa do programa na qual uma varivel est acessvel. Normalmente o escopo de uma
varivel se inicia na declarao da mesma e termina no fim do bloco que a contm. Em blocos
aninhados, uma nova declarao oculta a varivel definida em um bloco mais externo. Cada
varivel deve ter o escopo mais limitado possvel. Lembre-se que cada varivel ocupa um espao
de memria diferente. Economizar nas variveis, evita gastar toda a memria do computador.
31
Cada varivel est ligada a uma posio de memria. Muitos detalhes referentes a isso podem
interferir nosso modo de programar. As caractersticas mais importantes sobre variveis que
devemos saber so:
J as variveis globais tendem a introduzir srios problemas de acoplamento. Seu uso deve ser
apenas quando a rotina requerer manuteno de valores comuns ao programa inteiro ou quando
os dados que precisam chegar a rotinas profundas. Quando usadas, as variveis globais
requerem algumas precaues:
32
Agora, vamos ver algumas sugestes para nomear funes, procedimentos e mtodos.
Ifs simples
Ifs aninhados
33
Layout de programa
Princpios
34
A indentao tambm tem algumas regras para a boa prtica de programao. So elas:
Exemplo errado:
case $idade
when 0 .. 18
"criana"
else
"adulto"
end
Exemplo correto:
case $idade
when 0 .. 18
"criana"
else
"adulto"
end
35
Comentrios
Cabealhos de mtodos e classes devem descrever as entradas, sadas e hipteses sobre essa
unidade, no o seu contedo.
Comentrios de linha
36
No basta que o programa execute corretamente, importante que ele seja legvel. As alteraes
futuras s sero possveis se o cdigo for bem organizado e as manutenes dependem do
entendimento do cdigo. O processo de documentao se torna mais simples se o cdigo for bem
organizado e comentado. E lembre-se: Mesmo o autor costuma ter dificuldade em entender um
programa complexo depois de algum tempo.
Resista s tentaes!!!
S porque uma linguagem permite que se escreva uma expresso de forma abreviada e
complexa no quer dizer que seja a forma correta de fazer algo. As demonstraes de domnio da
linguagem s impressionam programadores novatos. A qualidade do programador est na
qualidade do cdigo que ele gera, no na complexidade
37
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
38
39
40
41
42
43
44
45
46
Muito legal, se o objetivo ganhar o concurso de C ofuscado (ou servir exemplo nesta
discusso), mas, fora isso, o cdigo bagunado como estava antes no serve para mais nada.
47
Concluso
O desenvolvimento de sistemas uma das atividades mais interessantes e mais complexas na
rea da computao pois integra os mais diversos assuntos como Sistemas Distribudos,
Engenharia de Software, Estrutura de Dados e Multimdia.
recomendado que se crie um grupo de pessoas, cada um com um conhecimento especfico que
esteja relacionado com as tarefas que devem ser executadas para se desenvolver um bom
sistema.
Espero que este tutorial sirva como um estmulo para o desenvolvimento de outros trabalhos
voltados para a programao. Principalmente em regies onde ainda no h muitos
programadores.
O autor deste tutorial Marcelo Cavaco, formado em Processamento de Dados pela Faculdade
Rui Barbosa e formado em Engenharia de Produo pela Unibahia. J trabalhou como Analista de
Sistemas e Engenheiro e sempre teve um hobby, o RPG... mas esta uma outra histria.
Qualquer dvida, crtica, sugesto, reclamao, comentrio ou algo semelhante, favor mandar
um e-mail para marcelocavaco@click21.com.br.
48