Sie sind auf Seite 1von 48

Tutorial POO

Tutorial POO
Tutorial POO
1 Edio
Criado em fevereiro de 2007.

Por Marcelo Cavaco (marcelocavaco@click21.com.br)

Programao Orientada a Objetos


Programaao Orientada a Objetos

O Mundo ao Alcance de suas Mos

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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.

Fora isso, boa leitura...

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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.

Compartilhamento pela mesma Licena: Se voc alterar, transformar, ou criar


outra obra com base nesta, voc somente poder distribuir a obra resultante sob
uma licena idntica a esta.

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).

Termo de exonerao de responsabilidade

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.

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Agradecimentos

Agradeo :

Minha famlia, por me criar e aturar...


Meus amigos de RPG, por jogarem comigo...
Meus colegas de programao por viverem 8 horas por dia comigo...
Aos amigos internautas, adquiridos nas horas de navegao e noites e madrugadas insones...

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Criando Objetos....................................................................... 25
Identificao de substantivos ..................................................................25
Identificao das classes.........................................................................27

Boas Prticas de Programao................................................... 29


Critrios para criao de funes, procedimentos e mtodos........................29
Programao Defensiva ......................................................................... 30
Recomendaes sobre dados................................................................... 30
Escopo das variveis.............................................................................. 31
Conceito de Memria (Variveis)..............................................................32
Nomes de variveis e constantes............................................................. 32
Nomes de funes, procedimentos e mtodos............................................33
Estruturas de controle: testes (ifs)........................................................... 33
Ifs simples............................................................................................................. 33
Ifs aninhados.......................................................................................................... 33
Estruturas de controle: loops...................................................................34
Layout de programa .............................................................................. 34
Princpios............................................................................................................... 34
Indentao das estruturas de controle...................................................... 35
Comentrios..........................................................................................36
Comentrios de linha .............................................................................................. 36
Refletindo sobre as boas prticas............................................................. 37
Uma ltima recomendao ..................................................................... 37
Voc sabe o que esse cdigo faz? ............................................................38

Concluso............................................................................... 48

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Como Utilizar este Tutorial


Para aproveitar da melhor forma possvel este tutorial, devemos saber para que ele serve. Este
documento onde estaremos exemplificando e demonstrando alguns dos conceitos da
programao orientada a objetos (POO).

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.

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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.

Os computadores no so apenas mquinas, mas ferramentas de amplificao da mente. As


ferramentas deveriam se parecer menos com a mquina e mais com nossas mentes (com o
mundo real). Para tanto, devemos buscar a reduo no desnvel entre as abstraes e a
implementao e utilizar abstraes bsicas como os algoritmos e tipos abstratos de dados.

As solues para se implementar Tipos Abstratos de Dados (TADs):

a) tipos compostos, funes e procedimentos;


b) mdulos;
c) classes/objetos.

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?

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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:

Paradigma um conjunto de regras que estabelecem fronteiras e descrevem como resolver os


problemas dentro destas fronteiras. Os paradigmas influenciam nossa percepo; ajudam-nos a
organizar e a coordenar a maneira como olhamos para o mundo...

Alm disso, os paradigmas (na cincia da computao) explicam como os elementos que
compem um programa so organizados e como interagem entre si.

10

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Programao Orientada a Objetos

O que Programao Orientada a Objetos?

um paradigma avanado de programao que engloba um conjunto de teorias, padres e


mtodos que juntos representam uma forma de organizar conhecimento. Este paradigma
baseado no conjunto de abstraes de classes e objetos e empacota dados e procedimentos em
um mesmo elemento (objeto). Os objetos se comunicam pela passagem de mensagens.

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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 objeto possui ento atributos (dados) e comportamentos (mtodos, procedimentos, funes,


que atuam sobre ele). Exemplos de objetos: cachorros, carros, videocassetes, edifcios,
funcionrios, indstrias, dentre outros.

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Mas, afinal, qual a diferena entre Classe e Objeto?

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) Classe: definio do tipo, ou seja, o cdigo fonte de seu objeto;


b) Objeto: cada instncia derivada da classe ( a classe sendo executada).

Figura 1: Diferena entre Classes e Objetos.

Um exemplo real da utilizao de objetos que podemos usar a montagem de um computador.


Um computador composto por vrios componentes:

a) placa-me;
b) CPU;
c) placa de vdeo;
d) disco rgido;
e) teclado, etc.

13

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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:

a) A placa de vdeo encaixa no slot ?


b) O monitor funciona com essa placa ?
c) A CPU compatvel com a placa-me ?
d) O disco rgido cabe na CPU ?

exatamente isso que fazemos ao utilizar classes (objetos). Ns sabemos que elas existem e
como interagem, ento usamos elas de forma lgica e intuitiva.

Conceitos Bsicos de POO

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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.

Este um conceito CRUCIAL de programao orientada a objetos. Com ele podemos


compreender grandes programas sem ler milhares de linhas de cdigo.

Encapsulamento

A programao convencional separa dados e procedimentos.

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.

Representao de uma classe/objeto

Operaes / mtodos / interface


(pblico)
Servios

Dados

Dados / propriedades / atributos


(privado)
Figura 3: Representao de uma classe/objeto.

15

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Exemplo de objeto: Lmpada.

Operaes:
ligar
Servios desligar

Dados

Dados:
ligada (s/n)
potncia
voltagem
Figura 4: Exemplo de Objeto. Figura 5: Objeto lmpada.

O encapsulamento definido como uma tcnica para minimizar as interdependncias entre


mdulos, atravs da definio de interfaces externas (servios). como se fosse uma Caixa
preta, ou seja, no necessrio saber como funciona internamente, mas sim como utilizar.

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Proteo da informao (information/data hiding)

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

Figura 6: Data hiding.

No possvel chegar aos dados diretamente. Para manipular os dados, necessrio recorrer aos
servios (mtodos, variveis pblicas, dentre outros).

17

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Podemos observar melhor o funcionamento do data hiding atravs da analogia do Iceberg.

Figura 7: Analogia com um Iceberg.

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Sobreposio (Overriding)

Algumas vezes, durante o processo de especializao, a sub-classe precisa modificar o


comportamento herdado da super-classe. Esta modificao perfeitamente possvel com a
sobreposio de mtodos. Quando um mtodo sobreposto, no h nenhuma alterao na
super-classe. A sobreposio modifica somente o mtodo herdado. Esta operao especfica da
sub-classe.

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Passagem de mensagens (parmetros)

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

Figura 8: Passagem de mensagens.

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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)

Nada mais que uma relao entre classes (tipos de objetos).


Este tipo de relao permite que classes compartilhem cdigo.
Uma classe pode herdar cdigo (ex: mtodos) de outra e a
classe herdeira pode criar uma nova verso do cdigo antigo
verso que seja mais genrica ou mais especfica que a verso
original da atividade.

Atravs da herana, desenvolvedores podem construir novas


classes usando como base classes j existentes. Uma classe
base (super-classe) utilizada como modelo para definir uma
casse derivada (sub-classe). As novas classes herdam tanto
as funes como os atributos da classe pr-existente. Figura 9: Exemplo de Herana.

Figura 11: Definio


de Herana

Figura 10: Outro exemplo de Herana

21

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Em relao classe base, a classe derivada pode ser alterada atravs:

a) da adio de novos membros de dados e novas funes membros (mtodos);


b) da modificao de membros j existentes;
c) da modificao dos privilgios de acesso aos mesmos.

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 .

Vantagens da herana mltipla:


a) encoraja o reuso de classes;
b) imita o modo das pessoas pensarem (um estagirio estudante e trabalhador ao mesmo
tempo).

Desvantagens da herana mltipla:


a) perda da simplicidade conceitual e de implementao;
b) definio da regra de ativao de mtodos herdados.

Como regra geral, deve-se evitar seu uso.

22

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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:

a) Associao: objetos independentes trocam mensagens;


b) Agregao: um objeto composto por/contm outros objetos.

23

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Uma palavra de cautela

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.

Programar Orientado a Objetos modelar

Um programa um modelo executvel de algum domnio ou atividade do mundo real. mais


fcil quando se usa representaes, abstraes e conceitos apropriados. Por isso que a
programao orientada a objetos surgiu. Para que possamos modelar nossas idias num
aplicativo funcional e simples.

24

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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.

Na anlise, devemos eliminar nomes relativos implementao, ou seja, nomes relativos a


relatrios, arquivos, estruturas de dados. No projeto, detalhes de implementao comeam a
aparecer. Depois devemos eliminar nomes no conexos com a misso do produto, por exemplo,
nomes relativos ao negcio mas no ao produto.

Exemplo de anlise de uma operao:

a) O caixeiro faz a abertura da venda.


b) O caixeiro registra os itens vendidos, informando a identificao e a quantidade do item.
c) O Sistema totaliza a venda para o cliente da mercearia.
d) O caixeiro encerra a venda.
e) O Sistema emite o ticket de caixa para o cliente da mercearia.
f) O caixeiro registra a forma de pagamento.
g) O Sistema faz a baixa no estoque das mercadorias vendidas.

25

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Substantivos descobertos (em letras vermelhas):

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.

Anlise das candidatas a classes:

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Identificao das classes

Agora, vamos ver como devemos identificar nossas classes, ou seja, como dar nomes s classe
que vamos criar.

Denominao das classes: Usar nomes significativos.

geralmente substantivos singulares, com ou sem adjetivo;


devem caracterizar a abstrao que a classe representa;
evitar nomes vagos ou ligados metodologia (classe, tipo etc.).

Vejamos agora alguns problemas na criao de classes e a soluo para estes problemas.

classes com nomes semelhantes e documentao parecida: Combinar as classes;


classes com documentao muito longa: Dividir a classe;
classes difceis de denominar ou documentar: Necessita-se de mais anlise.

Objetos podem ser de trs tipos:

a) objetos com classe indeterminada;


b) objetos com classe determinada e denominao prpria;
c) objetos annimos.

De forma geral, classes so identificadas com trs partes:

a) Nome;
b) Atributos (dados);
c) Operaes (mtodos).

27

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Vejamos um exemplo simplificado de classe:

Figura 12: Exemplo de uma Classe

Posteriormente, a classe pode ser representada com mais detalhes:

Figura 13: Exemplo detalhado de uma Classe.

28

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Boas Prticas de Programao

Critrios para criao de funes, procedimentos e mtodos

a) isolar operaes e expresses complexas;


b) aumentar a legibilidade do cdigo;
c) ocultar detalhes de implementao (TADs);
d) ocultar acessos a dados globais, se forem permitidos;
e) evitar duplicao de cdigo;
f) promover reutilizao de cdigo.

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.

As principais formas de coeso so:

a) funcional: aes relacionadas a uma nica tarefa;


Boa
Prtica b) seqencial: seqncia de tarefas correlatas;
c) procedimental: tarefas ordenadas mas no correlatas;
Evite
d) lgica: executa uma dentre vrias tarefas de acordo com um parmetro.

29

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Programao Defensiva

Lei de Murphy: se algo pode dar errado, dar.

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.

Recomendaes sobre dados

Agora, vamos ver algumas sugestes para a manipulao/criao de tipos de dados (variveis,
constantes, estruturas, etc).

Tipos em geral:

a) usar constantes no lugar de literais (exceto 0 e 1);


b) explicitar todos os casos de converso de tipo.

Tipos inteiros e ponto flutuante:

a) verificar se o valor dos divisores no pode ser 0;


b) prever casos de truncamento e estouro (overflow).

30

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Tipo ponto flutuante:

a) evitar somas de magnitudes muito diferentes;


b) evitar comparaes de igualdade;
c) considerar erros de arredondamento.

Tipos booleanos:

a) nomes devem ajudar na documentao;


b) dividir testes complexos com variveis intermedirias;
c) no necessrio fazer comparaes com true/false.

if (terminou) melhor que if (termino=true)


while (not achou) melhor que while (result=false)

Escopo das variveis

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Conceito de Memria (Variveis)

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:

a) Uma varivel corresponde a uma posio na memria do computador;


b) Cada varivel possui um nome, tipo, tamanho e valor;
c) Quando um novo valor atribudo a uma varivel, o valor anterior sobrescrito;
d) Ler valores de variveis no as destri, nem zera seu valor.

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:

a) Usar conveno que torne bvios os nomes globais;


b) Manter uma lista comentada das variveis globais;
c) Restringir os acessos a poucas funes;
d) No agrupar artificialmente em uma estrutura monstro.

Nomes de variveis e constantes

a) Devem ser consistentes (inclusive em idioma);


b) Descrevem elementos do problema (no da soluo);
c) Descrevem o contedo e/ou uso do elemento;
d) Em nomes compostos, separar as palavras constituintes de forma clara e objetiva.
Exemplos: SaldoFinal, shipLog, server_address;
e) Evitar abreviaturas e nomes longos demais (Devem ser diferenciveis pelos primeiros 15
caracteres);
f) Devem ser pronunciveis (teste do telefone).

32

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Nomes de funes, procedimentos e mtodos

Agora, vamos ver algumas sugestes para nomear funes, procedimentos e mtodos.

a) Devem descrever o que a rotina faz (verbos fortes). Exemplo: Relatrio.Imprimir();


b) Operaes semelhantes devem corresponder a nomes semelhantes (obter, consultar);
c) Podem ser longos, mas no demais.

Estruturas de controle: testes (ifs)

Ifs simples

Os Ifs devem sempre seguir estas 3 (trs) regras bsicas:

a) Primeiro caso normal, depois excees;


b) Caso normal depois do if, e no depois do else;
c) Se no houver clusula else, comentar por qu.

Ifs aninhados

Sobre os Ifs aninhados podemos dizer o seguinte:

a) Devemos minimizar os nveis de aninhamento;


b) Retestar condies se isso reduzir o aninhamento;
c) Passar cdigo profundamente aninhado para rotina independente ou redesenhar como
cadeias.

33

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Estruturas de controle: loops

Usar tipo adequado iterao (for, while, etc.):

a) Entrada deve ocorrer em um nico ponto;


b) Cdigo de iniciao deve vir logo antes do loop;
c) O ponto e a condio de sada devem ser claros.

Cada loop deve, preferencialmente:

a) Executar apenas uma tarefa;


b) Caber em uma tela ou um folha de listagem;
c) Usar no mximo trs nveis de aninhamento.

Layout de programa

Princpios

Os princpios bsicos para organizao do layout do cdigo de um programa so:

a) Deve refletir a estrutura lgica de forma consistente;


b) Objetivo principal a legibilidade, no a esttica;
c) O tamanho mximo das linhas de cdigo no deve exceder 80 caracteres (mesmo se sua
tela for de 21'');
d) Usar linhas em branco para separar blocos.

34

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Indentao das estruturas de controle

A indentao tambm tem algumas regras para a boa prtica de programao. So elas:

a) Ocupar de dois a quatro espaos (aconselho usar 3);


b) Evitar usar tabulao;
c) Consistente, sem dupla indentao.

Exemplo errado:

case $idade
when 0 .. 18
"criana"
else
"adulto"
end

Exemplo correto:

case $idade
when 0 .. 18
"criana"
else
"adulto"
end

35

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Comentrios

Os comentrio, devem ser:

a) Feitos enquanto se codifica, e alterados com o cdigo;


b) Focalizam o porqu;
c) Referentes a blocos de instrues e no instrues individuais;
d) Fceis de modificar;
e) Evitar comentrios bvios, obsoletos, irrelevantes, auto promocionais, insultos, obscenos,
preconceituosos, etc;
f) Atualmente, estamos na era da reduo dos comentrios, pois devemos criar um cdigo
auto explicado.

Cabealhos de mtodos e classes devem descrever as entradas, sadas e hipteses sobre essa
unidade, no o seu contedo.

Algumas coisas para por em comentrios de cabealhos: finalidade, parmetros, problemas


conhecidos, valor de retorno, excees.

Comentrios de linha

Agora, vamos ver algumas regras para os comentrios de linha:

a) Devem ser evitados (tentem a repetir a instruo);


b) Aparecem no final das linhas de cdigo (instruo # comentrio);
c) No devem ser usados em em linhas isoladas (sem uma instruo) e para comentrios
que se estendem por vrias linhas;
d) Podem ser usados em alguns casos:
1. para comentar declaraes de dados;
2. para anotaes de manuteno;
3. para marcar fim de blocos ( end # if result=true ).

36

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Refletindo sobre as boas prticas

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.

Uma ltima recomendao

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

O que um cdigo de qualidade? um cdigo correto, facilmente entendido, auditvel e de


manuteno simples.

37

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

Voc sabe o que esse cdigo faz?

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);}

(Um dos ganhadores do 1st International Obfuscated C Code Contest, 1984)

38

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

39

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

40

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

41

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

42

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

43

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

44

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

45

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

46

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)


Tutorial POO

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.

A grande dificuldade no processo de desenvolvimento de um sistema se deve sua


complexidade, ele um processo multidisciplinar e exige a participao de bastantes pessoas se
o objetivo construir algo grande. Uma das minhas principais dificuldades que encontrei no
desenvolvimento de sistemas foi a quantidade de tarefas de deve ser feita para atingir um
pequeno objetivo (teoria do Iceberg, lembra?).

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

Tutorial criado por Marcelo Cavaco (marcelocavaco@click21.com.br)