Capítulo 7

Propaganda
UNIVERSIDADE FEDERAL DE SANTA CATARINA
Acesso remoto a horários de ônibus
Uma aplicação para dispositivos móveis utilizando
frameworks e padrões
Ramon Hugo de Souza
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
Acesso remoto a horários de ônibus
Uma aplicação para dispositivos móveis utilizando
frameworks e padrões
Ramon Hugo de Souza
Orientador: Prof. Mario Dantas
Banca Examinadora:
Palavras-Chave: Dispositivos Móveis, Banco de Dados, Frameworks, Padrões de Projeto
Florianópolis, Dezembro de 2004
Um filósofo de estatura imponente não pensa em um vazio. Mesmo suas idéias mais
abstratas são, em alguma medida, condicionadas pelo que é ou não é conhecido na
época em que ele vive.
Alfred North Whitehead
Sumário
RESUMO .................................................................................................................................................... 6
ABSTRACT ................................................................................................................................................ 7
INTRODUÇÃO .......................................................................................................................................... 8
CAPÍTULO 1 - DISPOSITIVOS MÓVEIS ........................................................................................... 10
CAPÍTULO 2 - PROGRAMAÇÃO ORIENTADA A OBJETOS ....................................................... 11
2.1 DEFINIÇÃO........................................................................................................................................ 11
2.2 HISTÓRICO ........................................................................................................................................ 11
2.3 CONCEITOS ....................................................................................................................................... 12
2.3.1 Classificação ............................................................................................................................ 12
2.3.2 Identidade ................................................................................................................................ 13
2.3.3 Encapsulamento ....................................................................................................................... 13
2.3.4 Herança ................................................................................................................................... 13
2.3.5 Polimorfismo ............................................................................................................................ 13
2.3.6 Observações ............................................................................................................................. 13
2.4 LINGUAGENS .................................................................................................................................... 14
2.4.1 Simula ...................................................................................................................................... 14
2.4.2 Smalltalk .................................................................................................................................. 14
2.4.3 C++ ......................................................................................................................................... 15
2.4.4 Objective-C .............................................................................................................................. 15
2.4.5 Java .......................................................................................................................................... 16
2.4.6 CLOS........................................................................................................................................ 17
2.4.7 Eiffel ......................................................................................................................................... 17
CAPÍTULO 3 - FAMEWORKS .............................................................................................................. 19
3.1 DEFINIÇÃO........................................................................................................................................ 19
CAPÍTULO 4 – PADRÕES DE PROJETO ........................................................................................... 20
4.1 DEFINIÇÃO........................................................................................................................................ 21
4.2 ALGUNS EXEMPLOS DE PADRÕES ..................................................................................................... 21
4.2.1 Encapsulamento ....................................................................................................................... 21
4.2.2 Derivação de classes ................................................................................................................ 21
4.2.3 Iteração .................................................................................................................................... 22
4.2.4 Exceções................................................................................................................................... 22
4.3 PADRÕES DE CRIAÇÃO ...................................................................................................................... 22
CAPÍTULO 5 - BANCOS DE DADOS RELACIONAIS ...................................................................... 23
5.1 DEFINIÇÃO........................................................................................................................................ 23
CAPÍTULO 6 - MAPEAMENTO DO PARADIGMA OO PARA O MODELO RELACIONAL .... 24
CAPÍTULO 7 - PROJETO ...................................................................................................................... 25
CAPÍTULO 8 - IMPLEMENTAÇÃO .................................................................................................... 26
CONCLUSÃO .......................................................................................................................................... 27
REFERÊNCIAS BIBLIOGRÁFICAS.................................................................................................... 28
Resumo
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Palavras-Chave: Dispositivos Móveis, Banco de Dados, Frameworks, Padrões de Projeto.
Abstract
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Introdução
A utilização de sistemas que possam prover serviços comuns no decorrer do
nosso dia a dia através da utilização de dispositivos móveis é uma realidade que vem
tomando o mercado de forma lenta no Brasil devido à não cooperação das empresas de
telefonia – no exemplo de aplicações com celulares – com medo de uma perda de lucros
por serviçoes que poderiam ser cobrados – mas não existem – dos clientes.
Acredita-se que com o tempo se torne natural uma abertura das empresas quanto
a utilização de tecnologias que facilitem um estudo científico na área de comunicação
entre dispositivos móveis.
Este trabalho se trata de um estudo da utilização de frameworks e padrões tanto
na área de banco de dados como na área de computação móvel. Levando-se em conta
que um equipamento móvel possa se comunicar com um servidor de dados que lhe
provenha o serviço adequado.
Como exemplo para estudo foi tomada uma aplicação para acesso remoto à
horários de ônibus, provendo também alguns outros serviços relacionados a esta
funcionalidade.
Levando-se em conta que os dados referentes à cobrança e direção da linha estão
armazenados no ônibus, poderíamos no caso de uma rede de transmissão sem fio,
também supor que o ônibus transmitisse para a central quando da mudança de direção –
quando da chegada no bairro por exemplo. Assim haveria a possibilidade do cliente
saber se quando o oniobus do referido horário que ele gostaria de pegar chega no bairro,
mesmo que ele se atrasasse ou no caso de um adiantamento, evitando assim que o
cliente perdesse o ônibus.
Começando com uma abordagem sobre os dispositivos móveis que se pretende
utilizar no estudo referido, passase por uma breve explanação sobre programação
orientada a objetos, com um histórico – apenas demonstrativo – sobre as linguagens
OO, passando-se a explanação de frameworks e padrões, para então abordar as
tecnologias que serão utilizadas no estudo.
É então colocada a necessidade de mapeamento de uma abordagem orientada a
objetos para um banco de dados relacional.
A parte principal trata-se do projeto e da implementação do sistema em si.
Capítulo 1 - Dispositivos Móveis
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Capítulo 2 - Programação orientada a
objetos
2.1 Definição
Programação Orientada a Objetos pode ser definida como “a programação que é
implementada pelo envio de mensagens a objetos” [3].
2.2 Histórico
As linguagens orientadas a objeto foram originadas a partir da necessidade de se
organizar o processo de programação em uma linguagem. A programação orientada a
objetos é por si, só uma técnica. Uma linguagem é dita uma linguagem orientada a
objetos, se ela suporta o estilo de programação orientada a objetos [2].
Um dos objetivos da engenharia de software é particionar o projeto de um
programa em diversos módulos, de tal forma que o desenvolvimento do software e sua
manutenção possam ser implementados com baixo custo. No passado, os paradigmas da
engenharia de software derivavam os módulos baseados na funcionalidade de um
sistema. Esses módulos correspondiam basicamente a módulos procedimentais, que
eram alimentados por dados, gerando novos dados. O paradigma de orientação a objeto
mudou essa concepção, idealizando a idéia de objetos, como módulos que se
comunicam por meio de mensagens, encapsulando ao mesmo tempo dados e funções,
por meio de um mecanismo conhecido como tipo de dados abstratos [2].
A primeira linguagem orientada a objetos que se tem notícia foi o Simula,
desenvolvido em 1967. Posteriormente veio o Smalltalk em 1970. Atualmente, existe
uma enorme diversidade de linguagens orientadas a objeto, abrangendo desde
linguagens de propósito geral, até linguagens para multimídia e programação em lógica
[2].
2.3 Conceitos
A nossa teia de relações com o mundo se dá em boa parte por meio do
conceito de objetos, temos a tendência natural de identificar o que são estas diferentes
entidades, observando como aparentam ser e qual seu comportamento para o nosso
ponto de vista, podemos definir quais são. Exemplo: um simples usuário de uma TV ou
um técnico que vai concertá-la [1].
Ao observar um rádio, nós reconhecemos sua forma retangular, seu tamanho
usual, colorido típico e aplicação. O rádio que observamos não é o único existente,
existem diversos como tipos de rádios como o radio portátil, de mesa, etc. Um tipo
específico de rádio carrega consigo uma utilização reservada, mesmo que apresente
algumas características idênticas a outros rádios, tem outras utilizações. O termo rádio
portátil caracteriza mais do que a identidade do objeto, é um tipo de objeto que
apresenta características próprias. Devemos lembrar que existem diversos tipos de
rádios que transmitem diferentes tipos de informações por outros canais (privado ou
público) e com diversas utilizações (militar ou doméstico) [1].
Agora analisando por outro ponto mais particular. Como utilizamos o rádio?
Podemos ligar por meio de um botão on/off na parte inferior esquerda, temos o controle
de volume na superior direita e o seletor de estações na parte direita superior, conforme
o modelo outras opções. Mesmo sem conhecer sua estrutura interna, as pessoas podem
utilizar este objeto ligando e desligando, aumentando ou diminuindo o volume ou
sintonizando na sua estação predileta. Os detalhes da sua estrutura ficam ocultos,
podemos então utilizar apenas o que o projetista julgou necessário [1].
Por meio deste exemplo de relação com objetos que utilizamos no nosso dia-a-dia,
podemos descrever informalmente as principais características da programação
orientada por objetos [1].
2.3.1 Classificação
É a categorização daquilo que nos rodeia. Criamos classes de objetos para
identificar objetos que compartilham de características em comuns, embora distintas,
em cada objeto. Como os seres humanos que tem características em comum, mas podem
ser distinguidos pela altura, idade, peso, etc [1].
2.3.2 Identidade
Nossa relação com os objetos ao nosso redor não se resume a simples
classificação. Por exemplo, nossa teia de relações com outras pessoas fazem elas
assumirem uma posição singular, assumindo assim uma identificação. Conhecendo mais
alguém descobrimos seu nome e sobrenome, por exemplo [1].
2.3.3 Encapsulamento
Essa característica permite que possamos utilizar um objeto conhecendo apenas
sua interface, sua aparência exterior. Como no exemplo de utilização do rádio que
descrevemos acima. O encapsulamento permite preservar informações consideradas
importantes ou sigilosas dentro do objeto, disponibilizando apenas o que se julgue
conveniente [1].
2.3.4 Herança
É o mecanismo de criação de novas classes de objetos a partir de outras já
existentes. A herança utiliza características do objeto de origem, usando uma forma
especial de compartilhamento de código. Agora podemos criar varias classes,
hierarquicamente relacionadas, especializando as classes [1].
2.3.5 Polimorfismo
Refere-se a capacidade de conhecermos em um objeto um outro mais geral. Por
exemplo, tratamos um radio como um objeto de forma geral podemos classificar o radio
como um eletrodoméstico [1].
2.3.6 Observações
A utilização da orientação à objetos no desenvolvimento de um programa se
baseia na construção de classes e na criação de objetos dessas classes, para que
trabalhem em conjunto no bom funcionamento do programa [1].
O Java é uma linguagem que carrega consigo todas as características necessárias
de orientação a objetos:
a definição de classes;
a construção de objetos contendo dados internos não acessíveis;
a disponibilidade de um mecanismo de herança.
Mesmo sendo complexa, esta forma de programação é a mais apropriada para o
desenvolvimento de sistemas, pois permite tratar problemas nos aproximando da nossa
realidade de entendimento do mundo, em vez de dirigir a solução para as características
de funcionamento dos computadores, tal como faz a tradicional linguagem procedural
[1].
2.4 Linguagens
2.4.1 Simula
A linguagem Simula foi desenvolvida por O-J Dahl, B. Myhrhaug e K. Nygaard,
no Centro Norueguês de Computação, em Oslo, em 1967, como uma extensão do
ALGOL 60. A linguagem Simula mantém algumas propriedades do ALGOL 60, além
de extensões tais como os conceitos de classe e co-rotina, bem como os conceitos
associados de variável de referência, manipulação de textos e facilidades de
entrada/saída [2].
Um dos problemas com o Simula é que ela não provê proteção para uma classe,
o que foi resolvido posteriormente no Smalltalk [2].
2.4.2 Smalltalk
A linguagem Smalltalk foi desenvolvida em 1970. No Smalltalk, não se chama
uma função, mas manda-se uma mensagem para um objeto. Dessa maneira, nada do
mundo externo pode enxergar a definição de uma classe, o que protege essa classe de
qualquer interferência [2].
Um fator característico do Smalltalk é que qualquer dado é visto como um
objeto, mesmo um número. Assim, até mesmo cálculos aritméticos simples beneficiamse da técnica de orientação a objeto [2].
Entretanto, mandar mensagens para objetos pode significar um aumento de custo
computacional que as vezes se torna um desperdício. Algumas otimizações foram
efetuadas, portanto, para evitar a passagem de mensagens em funções simples, tais
como operações aritméticas [2].
2.4.3 C++
O C++ é uma linguagem de programação de propósito geral, desenvolvida por
Bjarne Stroustrup, nos laboratórios da AT&T Bell, no início dos anos 80, como uma
evolução do C, incorporando, dentre outras, as seguintes extensões: suporte para a
criação e uso de tipos de dados abstratos, suporte ao paradigma de programação
orientada a objeto, além de diversos outras pequenas melhorias nas construções
existentes no C. Algumas de suas características são o uso de tipos estáticos, a definição
de classes, funções virtuais e overload de operadores para o suporte à programação
orientada a objeto, o uso de templates para programação genérica, além de prover
facilidades de programação de baixo nível (a exemplo do C) [2].
Depois de seu “release” inicial pela AT&T, em 1985, diversas implementações
do C++ tornaram-se disponíveis, em mais de 24 tipos de sistemas, desde PCs até
mainframes. Em 1989, o número de usuários e diferentes implementações do C++
demandaram a geração de uma norma, sem a qual seria inevitável o surgimento de
diversos dialetos. Em 1995 os comitês de normalização da ANSI e ISO C++ chegaram a
um nível de estabilidade na linguagem. Basicamente, o C++ corresponde à linguagem
descrita em “The C++ Programming Language (2nd edition)” , de Bjarne Stroustrup, ed.
Addison Wesley, 1991. A norma que regula o C++ está atualmente em fase de “draft”,
sendo catalogada como X3J16/95-0087 pela ANSI e WG21/NO687 pela ISO [2].
2.4.4 Objective-C
Objective-C é uma linguagem de programação orientada a objetos, que
corresponde a um superconjunto do ANSI-C, provendo classes e passagem de
mensagens de um modo similar ao Smalltalk. A linguagem inclui, quando comparada ao
C, alguns termos e construções adicionais. Por ser também uma linguagem derivada do
C, assim como o C++, ela é frequentemente comparada a esta. O desenvolvimento do
C++ se baseia no estilo de programação orientada a objetos iniciado pela linguagem
Simula 67. O Objective-C, por seu lado, é originário do estilo de programação
encontrado no Smalltalk. No C++, o tipo estático de um objeto determina quando ele
pode receber uma mensagem, ao passo que no Objective-C, seu tipo dinâmico é
utilizado. O estilo de programação oriundo do Simula 67 é mais seguro, uma vez que
mais erros podem ser detectados ainda em tempo de compilação. O estilo desenvolvido
pelo Smalltalk é mais flexível [2].
Algumas das vantagens do Objective-C incluem a possibilidade de se carregar as
definições das classes e métodos em tempo de execução, o fato de os objetos serem
tipados dinamicamente, a possibilidade de se utilizar objetos remotos, a persistência e a
existência de protocolos de delegação e meta-ação. Alguns de seus principais problemas
são a inexistência de herança múltipla e a inexistência de variáveis de classe [2].
2.4.5 Java
A linguagem Java foi desenvolvida a partir de 1990 pela Sun Microsystems,
como uma linguagem que pudesse executar o mesmo programa em múltiplas
plataformas de hardware e software. Seu uso imediato seria a execução de programas
pela Internet. Para tanto, não poderia haver nenhum vínculo da linguagem com o
hardware e/ou o sistema operacional utilizado, de modo que em princípio qualquer
computador conectado à Internet e capaz de entender a linguagem, fosse capaz de
executar os programas. Outra especificação básica da linguagem seria a segurança, ou
seja, como as máquinas executando os programas em Java estariam em princípio
executando programas sem garantias de confiabilidade e procedência, um programa em
Java não poderia de modo algum influir na execução de outros programas e o próprio
sistema operacional. Com isso, alguns recursos como alocação dinâmica de memória e
acesso a arquivos foram sistematicamente eliminados. A linguagem Java foi
desenvolvida a partir de um subconjunto do C++, gerando uma linguagem que
originalmente foi chamada de Oak. Em 1995, a linguagem foi re-batizada como Java e
introduzida na comunidade Internet [2].
O Java é uma linguagem parcialmente compilada e parcialmente interpretada.
Um compilador Java transforma o programa fonte, escrito em Java, em arquivos-objeto
chamados bytecodes. Esses bytecodes precisam ser executados então por interpretadores
Java que são desenvolvidos para cada plataforma de hardware/software. Os bytecodes
podem ser basicamente de dois tipos. O primeiro tipo tem acesso completo à máquina,
ou seja, é capaz de manipular a memória, o console e o sistema de arquivos. Programas
desse tipo são chamadas de aplicações Java. O segundo tipo de bytecode sofre uma série
de restrições quanto ao acesso de memória, console e sistema de arquivos. Essas
restrições são colocadas em nome da segurança, visto que seu destino é a elaboração de
programas que serão distribuídos pela Internet, e por isso não provém de fonte
conhecida ou confiável. Esses bytecodes são chamados de Java applets. Os applets têm
uma capacidade de atuação bem restrita, de modo que não possam causar danos ao
sistema durante sua execução. Normalmente sua atuação se restringe a animações e
interações mínimas com o usuário, sendo que seu uso é marcadamente em browsers do
WWW (World Wide Web). Para executar applets, os browsers necessitam interpretar os
bytecodes Java. Browsers com essa capacidade são chamados de Java aware. Uma outra
variante da linguagem Java é o JavaScript, que são programas colocados em forma de
código fonte, incluídos nos textos das páginas HTML. Programas escritos com o
JavaScript não precisam ser compilados, nem geram bytecodes, sendo interpretados
diretamente pelos browsers quando a página HTML é interpretada [2].
2.4.6 CLOS
CLOS (Common Lisp Object System) é um padrão de programação orientada a
objetos desenvolvido a partir do Common Lisp. A maioria das implementações do
Common Lisp incluem atualmente uma implementação também do CLOS, por
exemplo: MCL, {A}KCL, Allegro CL (incluíndo-se Allegro CL\PC), Ibuki, Lucid,
Medley, Symbolics Genera, CLOE, e Harlequin LispWorks [2].
2.4.7 Eiffel
A linguagem Eiffel é uma avançada linguagem de programação orientada a
objetos, que enfatiza o projeto e a construção de “software” reutilizável de alta
qualidade. A linguagem Eiffel não corresponde a um sub-conjunto ou extensão de
nenhuma outra linguagem. É uma linguagem que enfatiza o uso de técnicas de
programação orientada a objeto, impedindo algumas práticas que podem ser
potencialmente perigosas, e que são encontradas em outras linguagens. Entretanto, ela
permite um interfaceamento com outras linguagens, tais como o C ou o C++. A
linguagem Eiffel suporta o conceito de “design by contract”, para garantir a consistência
do software gerado [2].
A linguagem Eiffel foi criada por Bertrand Meyer, e desenvolvida por sua
companhia, a “Interactive Software Engineering (ISE)”. Seu design é inspirado por
algumas preocupações levantadas por engenheiros de software, diante da criação de
sistemas mais complexos. Como linguagem, vem evoluindo continuamente, desde sua
concepção, em 1986 [2].
Compiladores para a linguagem Eiffel podem ser encontrados para diversos
sistemas operacionais e plataformas de hardware, destacando-se as seguintes:
PC: DOS, OS/2, Windows 3.1, Windows 95, Windows NT, PC Unix
(Interactive, SCO, and ESIX), Nextstep, Linux [2].
Outras plataformas de Hardware: Sparc (SunOS & Solaris), NeXTStep,
HP9000, DEC 5xxx, Sony News, DG Aviion, DEC Alpha OSF-1, DEC OpenVMS,
RS6000, Pyramid, QNX, Silicon Graphics, Macintosh (Motorola & PowerPC) [2].
Capítulo 3 - Fameworks
3.1 Definição
Frameworks são ambientes de desenvolvimento pré-concebidos que oferecem
uma estrutura comum para aplicações em um dado domínio.
Neste tipo de aplicação a estrutura é reaproveitada apenas completando-se os
detalhes específicos do problema.
Esta técnica assume que uma análise OO do domínio já foi feita para criar um
framework apropriado, normalmente exigindo um domínio maior dos conceitos de OO
antes da sua aplicação.
Frameworks podem ser classificados como White Box quando são compostos
apenas por especificações da estrutura de uma aplicação, como Black Box quando já
possuem as funcionalidades implementadas, ou ainda, mais comum, o tipo Gray Box
que é uma mescla dos dois tipos anteriores.
Capítulo 4 – Padrões de Projeto
Quando um projetista é inexperiente à tecnologia orientada a objetos, esse
projetista, freqüentemente tenta entender como os conceitos trabalham dentro do espaço
da solução do próprio problema que está sendo analisado. As várias metodologias de
desenvolvimento de software orientado a objetos mostram ao leitor como aplicar um
processo de desenvolvimento particular utilizando um conjunto de diagramas para
representar tais processos, o que restringe o leitor na aplicação dos conceitos [6].
A solução computacional é, portanto, passível de manutenção. A manutenção de
um produto de software nos anos 70 era responsável por aproximadamente 40% de todo
o esforço despendido por uma organização de produção de sistemas. Nos anos 80, esse
esforço passou para 60% e atualmente chega a 80%. É importante salientar que a
manutenção de um produto de software não resume-se somente à correção mas,
também, aplica-se as modificações e ampliações necessárias ao perfeito funcionamento
do sistema [6]. Portanto, na adaptação ou aperfeiçoamento de um sistema de software
deve-se determinar novos requisitos, reprojetar, gerar código e testar o sistema
existente. Estas tarefas são definidas como manutenção[4].
Outro ponto a ser considerado é que em muitos casos o projetista que fará a
manutenção no produto de software nem sempre é o mesmo que o criou, ou nenhuma
metodologia de projeto foi aplicada, ou ainda quando a documentação é incompleta e o
registro das mudanças passadas é superficial. Certamente, este projetista, irá despender
um esforço de entendimento do software existente para posterior processo de
modificações e correções. Assim deve-se avaliar a manutenibilidade que caracteriza o
grau de facilidade com que um software pode ser entendido, corrigido, adaptado e/ou
aumentado[5].
Possivelmente, a melhor idéia para projetar e entender sistemas de software
orientado a objetos seja a criação de padrões de projeto [7]. Os padrões em geral
mostram como representar a comunicação da informação sobre abstrações e soluções
apresentando um potencial para representar as abstrações comuns que projetistas
experientes de software utilizam para resolver problemas básicos de projeto[4].
4.1 Definição
Os padrões de projeto são estruturas de colaboração de classes identificadas
freqüentemente em projetos de software orientados a objetos. Utilizando textos e
diagramas, um padrão descreve, como um problema específico, que acontece
repetidamente em um projeto maior, pode ser resolvido [8].
Um padrão visa resolver um problema comum de programação de forma a tornar
o código mais flexível satisfazendo a alguns critérios. Padrões servem de conexão entre
componentes de programas.
4.2 Alguns Exemplos de Padrões
4.2.1 Encapsulamento
Problema: campos expostos podem ser manipulados diretamente a partir de
código externo, levando a violações da invariante de representação ou a dependências
indesejáveis que impedem a alteração da implementação [9].
Solução: esconda alguns componentes, permitindo apenas acessos estilizados ao
objeto [9].
Desvantagens: a interface pode não (eficientemente) fornecer todas as operações
desejadas. O acesso indireto pode reduzir a performance [9].
4.2.2 Derivação de classes
Problema: abstrações similares possuem membros similares (campos e
métodos). Esta repetição é tediosa, propensa a erros, e uma dor de cabeça durante a
manutenção [9].
Solução: derive membros padrão de uma super classe; em tempo de execução,
selecione a implementação correta através de resoluções a respeito de qual
implementação deve ser executada [9].
Desvantagens: o código de uma classe acaba ficando distribuído em várias,
reduzindo o potencial de compreensão. A utilização de resoluções em tempo de
execução introduz overhead (processamento extra) [9].
4.2.3 Iteração
Problema: clientes que desejam acessar todos os membros de uma coleção
devem realizar uma varredura especializada para cada tipo de coleção de dados na qual
a iteração irá ocorrer. Isto introduz dependências indesejáveis que impedem a extensão
do código para outras coleções [9].
Solução: implementações, realizadas com conhecimento da representação da
coleção, realizam varreduras e registram o progresso da iteração. Os resultados são
comunicados aos clientes através de uma interface padrão [9].
Desvantagens: a ordem da iteração é fixada pela implementação e não está sob o
controle do cliente [9].
4.2.4 Exceções
Problema: problemas que ocorrem em uma parte do código, normalmente,
devem ser manipulados em outro lugar. O código não deve ser poluído com rotinas de
manipulação de erro, e nem de valores de retorno para identificação de erros [9].
Solução: introduzir estruturas de linguagem para que se jogue e intercepte
exceções [9].
Desvantagens: desta forma o código ainda pode estar cheio de rotinas de
manipulação de erro. Pode ser difícil saber onde uma exceção será manipulada. Os
programadores podem ser tentados a utilizar exceções para o controle do fluxo normal
de execução, o que é confuso e normalmente ineficiente [9].
4.3 Padrões de criação
Capítulo 5 - Bancos de dados relacionais
5.1 Definição
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Capítulo 6 - Mapeamento do paradigma OO
para o modelo Relacional
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Capítulo 7 - Projeto
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Capítulo 8 - Implementação
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Conclusão
Da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da da da da da da da da
da da da da da da da da da da da da da da da da da da da da da da
Referências Bibliográficas
[1] THOMAZ, Igor. Programação Orientada a Objetos e o Java. Viva o Linux, 23/10/2003. Disponível
em: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=421. Acesso em: 13 de junho de 2004.
[2] GUDWIN, Ricardo R. . Linguagens de Programação. UERJ. 1997.Disponível em:
http://www.eng.uerj.br/~araujo/disciplinas/Caract/ling_prog.pdf. Acesso em: 13 de junho de 2004.
[3] PINSON, L. An Introduction to Object-Oriented Programming and Smalltalk. [S.l.]: Addison-Wesley
Publishing Company, 1988.
[4] FREITAS, Andre Luiz Castro. Inspeção de Aplicações Java Através da Identificação de Padrões de
Projeto. Congresso Brasileiro de Computação. 2003. Disponível em:
http://www.cbcomp.univali.br/anais/pdf/2003/eng121.pdf. Acesso em: 13 de junho de 2004.
[5] PETERS, J. Engenharia de Software. teoria e prática. Rio de Janeiro: Campus, 2001. p. 602.
[6] PRESSMAN, R. Software Engineering: a practitioner's approach. [S.l.]: McGraw-Hill, 2001.
p. 850.
[7] GAMMA, E. et al. Design Patterns: reusable elements of object oriented design. Reading: AddisonWesley, 1994, p. 416.
[8] APPLETON, B. Patterns and Software: essential concepts and terminology. Disponível em:
http://www.enteract.com/~bradapp/. Acessado em 13 de Junho de 2004.
[9] Padrões de Projeto. Disponível em: http://www.universiabrasil.net/mit/6/6.170/pdf/6.170_lecture12.pdf. Acesso em: 13 de Junho de 2004.
Download