• Nenhum resultado encontrado

Modelagem Orientada a Objetos Com a UML - Jose Eduardo Zindel Deboni

N/A
N/A
Protected

Academic year: 2021

Share "Modelagem Orientada a Objetos Com a UML - Jose Eduardo Zindel Deboni"

Copied!
904
0
0

Texto

(1)
(2)

Dedicatória

Ao meu filho, Murilo, pelo estímulo, carinho e compreensão.

(3)

A quem se destina este

livro

Este livro se destina a diferentes

classes de leitores, que tem em comum o desejo de conhecer técnicas para se descrever um software, seja porque são profissionais da área da computação, seja porque acreditam que um software possa ajudá-los a melhorar o seu

negócio, seja ele qual for. Os leitores deste livro podem ser:

· Estudantes e Professores que podem encontrar neste livro apoio para o desenvolvimento de cursos de

(4)

Projeto de Sistemas e para o desenvolvimento de projetos de

software. Apesar da abordagem dada a este trabalho não ter uma ênfase

didática, ele pode ser utilizado como uma leitura complementar.

Especialmente nos capítulos iniciais, onde o livro tece os fundamentos da orientação a objetos, o teor introdutório pode ser de grande ajuda a estudantes de computação e áreas afins.

· Analistas de Sistema e

Programadores de Computador

envolvidos em projetos de sistemas de software, que encontrarão reunidas neste livro algumas técnicas úteis para o

(5)

a objeto destes projetos. A adoção destas técnicas pode ajudá-los a construir sistemas de software mais robustos, mais confiáveis e de manutenção mais fácil.

· Usuários ou Gerentes de

Projeto de Software que podem adotar

algumas das idéias presentes no livro para facilitar o planejamento de um projeto de software. A leitura ajudará a criar uma linguagem comum entre o usuário, o gerente de projeto e a equipe técnica de desenvolvimento. Como um projeto orientado a objetos requer uma grande dose de modelagem, este livro pode uniformizar os termos usados na comunicação com a equipe de projeto e

(6)

ajudar a definir as etapas e produtos do projeto de software.

(7)

Convenções adotadas

neste livro

Para facilitar a leitura, este livro adota as seguintes convenções tipográficas:

· Os termos e conceitos

importantes para o texto são escritos em

negrito na primeira vez em que eles

aparecem. Estes termos podem ser encontrados novamente no glossário, ao final do livro, onde recebem uma breve explicação.

· Os comandos e extratos de código, escritos em linguagem de programação usam fonte currier, assim

(8)

como os nomes de componentes e

elementos do modelo, quando citados no texto são escritos também em fonte

currier, para diferenciá-los do seu

significado fora do escopo do programa. · As citações, os extratos de textos da bibliografia e palavras em língua estrangeira são escritos com caractér itálico.

· A lista de referências

bibliográficas escontra-se no final do livro. Quando citadas no texto, as referências aparecem entre parênteses com o nome do autor e o ano de

publicação. Por exemplo: (Beck, 1999) ou citado por Beck (1999).

(9)

· Os endereços de websites citados no texto e na bibliografia que podem ser acessados pela internet são grifados como no exemplo:

(10)
(11)

1. Introdução

Este capítulo discute a importância de se criar um modelo nos projetos de software. Inicialmente, apresenta o caráter dualista do software: ora produto da criatividade, ora trabalho sistemático de engenharia, para então discutir o porquê, em ambos os casos, o modelo do software ser colocado no centro do processo de desenvolvimento, como forma de unificar a visão do software entre os participantes do projeto. O capítulo termina fazendo uma apresentação do restante do livro

(12)
(13)

1.1. Introdução ao

Desenvolvimento de

Software

software é um produto da inteligência humana, por meio dele é possível se preservar uma boa idéia e transmití-la para muitas outras pessoas. O software é uma das poucas maneiras disponíveis capazes de capturar o conhecimento de alguém e colocá-lo à serviço de outros. Existem algumas formas para se fazer isso, como os livros ou as aulas nas escolas, mas nenhuma delas tem a

capacidade de interação que o software oferece, e que pode transformar o

(14)

conhecimento capturado, diretamente, em uma habilidade para o seu usuário. Um usuário, de posse de um software adequadamente contruído, passa a ter novas habilidades e pode fazer coisas que antes não sabia. Esta versatilidade, faz com que haja um grande interesse em converter conhecimentos e habilidades, cada vez mais complexas, em software. Este livro trata desta conversão, discute-se aqui como discute-se transforma uma idéia em um software útil. Como se captura uma idéia para que o desenvolvedor crie um sistema de software que irá dar esta habilidade ao usuário:

(15)

Figura 1- O software pode transformar uma idéia em uma habilidade

Na construção de um software existe uma boa dose de criatividade, mas há uma dose ainda maior de pensamento lógico e trabalho discipliando. O

computador, uma das maiores invenções do homem, é uma mero escravo do

software. Todas as maravilhas que um computador é capaz de desempenhar, dependem, diretamente, da

(16)

disponibilidade de um software projetado para realizá-las. Além da criatividade são necessários métodos, procedimentos e muita disciplina para criar um software útil. Toda esta

organização é conseqüência da distância que separa os computadores dos

homens, e das suas idéias. Os

computadores são meros autômatos, sabem realizar com grande velocidade, e por repetidas vezes, tarefas simples, escritas em um programa de

computador. Os programas de computador são seqüências de comandos simples escritos em uma linguagem de programação que pode ser entendida pelo computador, e que ainda está muito longe da linguagem humana, e

(17)

da complexidade do pensamento humano.

A distância entre o conhecimento humano e as linguagens de programação se reflete nas inúmeras dificuldades encontradas durante o desenvolvimento de um software. Utiliza-se aqui o termo

software para descrever um conceito

muito mais amplo do que um mero programa de computador. O sofware, que se refere este livro, compreende toda a estratégia utilizada para resolver um problema real com apoio de um computador. Mais do que uma série organizada de instruções, o software atende uma finalidade, serve a um objetivo do seu utilizador. Nesta visão,

(18)

o software se completa ao hardware, o computador propriamente dito, e seus equipamentos periféricos, que em conjunto compõem o que se pode chamar de sistema computacional. O conjunto de partes relativa ao software no sistema computacional é o chamado

sistema de software.

A atividade de programação de computadores é apenas uma etapa do trabalho de desenvolvimento de um software. Programar é escrever a solução de um problema, que já está definida, em uma linguagem que possa ser entendida pelo computador.

Desenvolver um software compreende ainda muitas outras atividades como a

(19)

de analisar o problema que se pretende resolver, e fazer o design da solução. Desenvolver software é resolver problemas por intermédio da

programação de computadores é uma atividade de engenharia, da assim chamada “ Engenharia de Software”.

Engenharia de Software é a ciência

da computação aplicada na

transformação do computador em uma ferramenta de trabalho para os seus utilizadores. Ela é aplicada hoje aos mais diferentes desafios, desde a manipulação de dados administrativos em um sistema de informação gerencial até a transmissão de voz e imagem em equipamentos de telecomunicação. O

(20)

software é hoje uma tecnologia

onipresente. Do telefone ao despertador, da televisão ao supermercado, do

brinquedo ao avião, do elevador à

internet, o software está presente, dando uma importante contribuição à

produtividade das empresas e à qualidade de vida das pessoas.

Pressman (1995) destaca a importância da Engenharia de Software afirmando, que as práticas de engenharia de software se intensificaram com o

agravamento dos problemas relativos ao software:

a) A sofisticação dos problemas ultrapassaram a nossa capacidade de construir software que extraia o

(21)

potencial oferecido pelo hardware, b) Nossa capacidade de construir software de qualidade não pode acompanhar a demanda por novas aplicações da computação, e

c) Nossa capacidade de manter os software existentes foi ameaçada por projetos ruins e recursos inadequados

Observa-se, nestas considerações, que a Engenharia de Software lida

intimamente com as limitações da

capacidade humana em criar software. O crescimento do poder dos

microprocessadores torna mais aparente os limites da nossa capacidade de

(22)

todo esta potencialidade. As demandas crescentes por parte dos usuários pressionam os desenvolvedores para uma luta contra o tempo na busca por bons projetos de software, que possam ser construídos e mantidos

adequadamente. Os problemas atuais, a serem resolvidos pelo software, não apenas se tornaram complexos, eles estão se modificando continuamente, e se integrando a outros problemas, igualmente complexos, em uma

rede global de computadores que é a internet. A digitalização da informação, por exemplo, ajuda a criar novas

demandas por software, com a

possibilidade da distribuição ampla da informação promovida pela internet.

(23)

Aparentemente, a distância entre os desafios propostos para o software e as linguagens de programação disponíveis para construí-los é intransponível. As linguagens se mantém relativamente simples, com instruções elementares, criando programas de computador longos, ambígos e sujeitos à muitas falhas. A principal razão desta limitação é a própria arquitetura das máquinas de Von Neumann, base de todos

computadores e processadores

comerciais existentes hoje (Eck, 1995). Este uso, quase universal, da arquitetura de Von Neumann, como base para os computadores é o fator mais importante para o projeto de linguagens de

(24)

métodos disponíveis para se criar

software, como observa Sebesta (1996). Para se aproximar o mundo dos

problemas reais do universo virtual de um computador é necessário que se selecione um paradigma único, no qual se possam descrever os problemas reais, ao mesmo tempo, que possuam uma trqadução direta para a linguagem do computador. A busca deste

paradigma pode ser usada para retratar o histórico das linguagens de

programação desde a sua criação, e resulta no que hoje são as linguagens de programação que se utilizam do

paradigma de objetos, as chamadas linguagens orientadas a objetos.

(25)

Essencialmente, a programação

orientada a objetos busca a solução dos problemas de software pela

identificação objetos do mundo real, que são depois traduzidos em outros objetos de um modelo de software (Sebesta, 1996). As linguagens orientadas a objeto como Java, Delphi, Visual Basic, C++ e C# facilitam esta tradução por se

utilizarem dos mesmos fundamentos do paradigma de objetos que foram usados na modelagem. A disponibilidade e ampla divulgação destas linguages são as grandes motivadoras para a evolução da análise e do projeto de sistemas orientados a objeto, como tentativas para se transpor o abismo entre as boas idéias e o software que as

(26)

implementaria.

Este livro objetiva capacitar analistas, programadores e gerentes de projeto de software na construção de um modelo orientado a objetos de um problema do mundo real. A principal meta deste trabalho é organizar um conjunto

coerente de técnicas de análise e projeto de sistemas orientados a objetos, de modo que o modelo construído por estas técnicas sirva de ponte para a

(27)

1.2. Como este livro

está organizado

Para cumprir os objetivos propostos para este livro, a construção de modelo de um sistema de software foi dividida em 6 capítulos, um glossário de termos e um apêndice, que são descritos a seguir:

Capítulo 1 – Introdução. Apresenta

esta introdução aos objetivos do livro, a organização proposta, como ele pode ser lido, o seu público alvo e destaca a importância da modelagem para o desenvolvimento de software.

(28)

Modelagem Orientada a Objetos.

Apresenta os conceitos fundamentais da orientação a objetos e a sua relação com o processo de desenvolvimento de

software. As características que diferem a abordagem de objetos das outras

abordagens são aqui descritas com detalhe. Os conceitos de

encapsulamento, herança, mensagens e polimorfismo são definidos e

exemplificados por uma aplicação simples de automação comercial. É um capítulo de leitura obrigatória para quem deseja revisar os conceitos da tecnologia de objetos e conhecer a nomenclatura utilizada no restante do livro. Aos leitores que já possuem estes conceitos, a leitura deste capítulo pode

(29)

ser dispensada.

Capítulo 3 - O Modelo de Contexto.

Apresenta o primeiro modelo a ser desenvolvido para uma abordagem inicial de um problema de software. O modelo de contexto é um modelo alto nível baseado na análise funcional, que visa definir a fronteira do sistema e os seus objetivos principais. Neste modelo são utilizados os diagramas de casos de uso propostos por Jacobson (1992) e adotados porteriormente pela

UML (Jacobson, 1998). A fronteira isola o sistema de software dos

componentes externos ao software, mas que interagem com ele. Este capítulo é especialmente importante para os

(30)

leitores envolvidos nas definições iniciais de um sistema computacional, que devem, em contato direto com os clientes do software, especificar os requisitos do sistema.

Capítulo 4 - O Modelo Conceitual

apresentado é baseado nos cartões CRC. Descreve a técnica dos cartões

CRC aplicada na definição inicial de um sistema orientado a objetos. Esta técnica utiliza cartões comuns de arquivo para representar os objetos, e ajudam na distribuição das funcionalidades

esperadas entre os objetos do modelo. Este capítulo é recomendado para os leitores envolvidos na concepção de sistemas, com experiência ou não em

(31)

sistemas não orientados a objetos e que devem passar a "pensar" em objetos. Não é um capítulo essencial para quem já posssui os conceitos de objetos bem consolidados. Mesmo neste caso este leitores podem se servir da técnica dos cartões CRC como um método que permite envolver os clientes e usuários no levantamento de requsitos de projeto e no processo de concepção do

software.

Capítulo 5 - O Modelo de Detalhado

de Objetos. Descreve, finalmente, os diagramas do modelo orientado a

objetos na notação proposta pela UML: diagrama de classes, estados, seqüência, atividades, colaboração, componentes e

(32)

distribuição. Cada diagrama é descrito em conjunto com seus elementos

componentes e aplicado em diversos exemplos, que permitem ao leitor visualizar as diversas alternativas da sua aplicação na modelagem de

sistemas. É um capítulo essencial para a compreensão da notação e dos detalhes construtivos dos diversos diagramas que compõem os modelos orientados a

objeto.

Capítulo 6 – Estudo de Casos.

Aplica os modelos apresentados nos capítulos 3, 4 e 5 em três estudos de caso. Inicialmente o estudo de caso da aplicação comercial do capítulo 2 é revisado, assim como o exemplo do

(33)

jogo da forca utilizado no capítulo 4, e o exemplo de estoque do capítulo 5.

Desenvolvido com uma visão didática, ele permite ao leitor compreender a integração que existe entre os modelos e diagramas. O leitor pode, se desejar, iniciar a leitura do livro por este capítulo tendo uma abordagem inicial mais prática, para dai se aprofundar nos assuntos de maior interesse nos

capítulos anteriores.

Um Glossário finaliza o trabalho listando os principais termos utilizados na modelagem orientada a objetos. Como alguns destes termos pode ter um significado diferente fora do contexto da modelagem, o glossário deve ser

(34)

consultado sempre que surgir dúvida em algum termo durante a leitura do texto.

O Apêndice mostra o resultador da tradução dos modelos da UML em códigos Java, transformando os

exemplos em aplicações completas. Lá encontram-se os códigos dos programas e o endereço do website para executá-los. Todos os exemplos usados ao longo do texo estão disponíveis para acesso pela internet.

São várias as possibilidades de leitura do texto do livro, e elas estão

esquematizadas na figura abaixo,

partindo do interesse do leitor por uma visão teórica, uma visão prática ou por

(35)

um interesse específico por algum tema:

Figura 2 - Encadeamento possível para leitura dos capítulos

Pode-se iniciar a leitura pelo Capítulo 2 para os que desejam consolidar os

(36)

fundamentos da orientação a objetos. No entanto, se os leitores já são familiares a estes conceitos, podem utilizar este capítulo para familiarizarem-se com a nomenclatura utilizada no restante do texto. Os capítulos 3, 4 e 5 são

relativamente independentes por se tratarem de 3 modelos que diferem em escala e objetivo. Podem, por isso, ter uma leitura independente, mas que em conjunto apresentam as possibildades de modelagem que a orientação a objetos nos oferece. A leitura seqüencial destes três capítulos favorece o entendimento da evolução dos modelos que ocorre, naturalmente, durante o desenvolvimento de um sistema de software. Entretando, se o objetivo do leitor é apenas criar

(37)

uma especificação de alto nível do sistema pode interromper a sua leitura no capítulo 3. Se além do modelo de especificação deseja um

aprofundamento dos conceitos do sistema em um modelo

conceitual preliminar, ou se estiver diretamente envolvido na análise do sistema, deve continuar sua leitura pelo capítulo 4. O capítulo 5 se destina aos leitores que desejam compreender os detalhes de um modelo orientado a objetos criado com a notação da UML, provavelmente por estarem envolvidos nas etapas de design e construção de software. Uma alternativa possível para o leitor que desejar uma visão rápida das técnicas de modelagem apresentadas

(38)

aqui é ir diretamente para o capítulo 6 e utilizar-se das referências citadas neste capítulo para um aprofundamento nos itens de maior interesse nos capítulos anteriores. Se no decorrer da leitura houver dúvida sobre algum termo técnico empregado, o leitor pode

procurar uma explicação no glossário de termos.

Com esta organização é possível cobrir várias possibilidades de abordagem da orientação a objetos, desde uma abordagem mais formal, até uma abordagem mais prática e informal. Com um grande número de exemplos, procura-se sempre apresentar as aplicações típicas dos conceitos

(39)

apresentados. O leitor deve, entretanto, manter-se atento à limitação dos

exemplos propostos e imaginar como utilizar estes conceitos em seus próprios problemas e aplicações.

(40)

1.3. A importância

da modelagem

É fácil observar que outras áreas do conhecimento, as outras disciplinas de engenharia, usam extensivamente da modelagem para representar seus projetos. A figura clássica de um engenheiro civil é alguém envolvido com plantas e diagramas, gerenciando uma construção. Uma planta de uma obra civil é uma representação gráfica do produto final, o edifício. A planta

permite que o cliente avalie o produto e garanta que o resultado final é muito próximo do que ele deseja. A

(41)

indústria da construção civil, permite uma razoável precisão na data de

entrega das obras graças à padronização de processos de construção e a uma intensa padronização de componentes. Com exceção talvez apenas da

alvenaria, uma edificação é composta de partes já construídas e que são

integradas para formar o produto final. Estas partes pré-fabricadas são os objetos da construção civil.

A engenharia mecânica, na indústria automobilística por exemplo, é uma indústria com um alto nível de automação, padronização e

especialização. Um carro é fruto de um projeto básico que define os

(42)

requisitos para os projetos de cada peça. Ele movimenta uma grande mercado para as indústrias de auto-peças que criam, isoladamente, os objetos individuais do carro. A

construção do carro é uma montagem, uma integração de objetos.

A engenharia de software procura trazer para a ciência da computação estas lições, e incentivar a elaboração de um projeto de software, em um modelo orientado a objetos. Visando a padronização de componentes de software, o projeto e o processo de desenvolvimento são desenvolvidos segundo a orientação de se criar objetos.

(43)

construir um modelo do software. Um modelo que representa,

simplificadamente, o que se pretende construir, como uma planta de uma residência. Um modelo que mostra não só os requisitos do problema mas

também como eles serão atendidos pelos elementos da solução. Um modelo que permita avaliar a qualidade da solução e simular o resultado final, de modo que projetista, cliente, construtor tenham todos uma mesma visão do projeto.

O processso de desenvolvimento de software é um processo composto não apenas de componentes tecnológicos. Uma componente importante, e decisiva para o sucesso de um empreendimento, é

(44)

a componente social. A componente tecnológica nos projetos de software se encontra, principalmente, nas atividades de contrução do software. A

componente social está ligada ao relacionamento entre o usuário e o desenvolvedor, e uma parcela

importante da interação do usuário com o software. Pfleeger (1999) afirma que o sucesso do software depende mais até do sucesso das interações sociais do que da aplicação da tecnologia. Não se deve esquecer que software é desenvolvido por pessoas para ser utilizado por outras pessoas. A interação do software é uma interação entre pessoas, mediada pela tecnologia.

(45)

A qualidade de um software pode ser avaliada pela satisfação do cliente. O cliente que se serve do software cria, ao estabelecer os requisitos de um

software, uma expectativa que só verá realizada quando o software estiver concluído. Ao desenvolvedor cabe captar e atender estas expectativas com as possibilidades de realização. Para isso cliente deve contar, desde o início com um modelo do software.

Este trabalho objetiva auxiliar os desenvolvedores na criação de modelos orientados a objetos dos sistemas de software. A principal proposta é valorizar a atividade de criação do modelo para reduzir a incerteza do

(46)

software, aproximar a expectativa da realização, facilitar a padronização e a automação dos projetos, incentivar a reutilização dos componentes de software e aumentar a maturidade da engenharia de software nas equipes de projeto.

(47)
(48)

2. Fundamentos

da Modelagem

Orientada a

Objetos

Este capítulo descreve os conceitos fundamentais da modelagem orientada a objetos por intermédio de um

exemplo de aplicação. O exemplo mostra a herança, o encapsulamento e a troca de mensagens entre os objetos sob um ponto de vista prático.

(49)

Apresenta ainda as características principais do processo de

desenvolvimento de software, os fluxos de trabalho e a importância da

modelagem de objetos presentes neste processo.

(50)

2.1. Processo de

Desenvolvimento de

Software

O desenvolvimento de um software depende de muito trabalho disciplinado. Ter uma boa idéia para um software só não basta, ela deve vir acompanhada da organização e da disposição necessárias para realizar o trabalho de transformá-la em um produto. Um sistema de software é resultado da união da criatividade , da tecnologia e do trabalho organizado. Um não funciona bem sem os demais. A tecnologia sozinha não resolve os problemas, o esforço solitário fica

(51)

isolado se não for criativo. O que une a tecnologia com a criatividade e

direciona o trabalho é uma idéia comum, uma visão, representada em um modelo. Estudando-se as etapas para transformar uma idéia em um produto de software, verifica-se a importância em criar um modelo.

Os métodos para desenvolvimento de

software descrevem a organização

necessária para se criar um software. Métodos sugerem passos a serem

seguidos para cumprir o vazio existente entre a idéia e o produto de software. Este estudo não pretende desenvolver um novo método, nem tão pouco indicar um determinado método como sendo o

(52)

mais adequado. Pretende sim destacar algumas propriedades presentes em todos os métodos, e observar que as técnicas de modelagem estão no centro dos métodos, e dão a sustentação

necessária para a edificação do software.

Os métodos são organizados em fases, que caracterizam as etapas de evolução pelas quais o software deve passar. Em cada fase uma série de atividades são realizadas, produzindo documentos, esquemas e diagramas que finalizam no código do programa de computador. Sobre cada um destes subprodutos do método de desenvolvimento podem ser realizados testes, para garantir que se

(53)

está evoluindo na direção prevista, e com a qualidade esperada.

Ao avaliar as etapas de um projeto de software, observa-se que elas não são muito diferentes das etapas de qualquer outro projeto típico de engenharia. Como todo projeto de engenharia, o projeto de software tem como principal objetivo resolver um problema. A solução do problema irá trazer

benefícios para os usuários do produto do projeto, no caso, o software. A solução do problema, no caso da engenharia de software, é o próprio sistema de software.

(54)

os requisitos do problema são as

atividades realizadas na fase de análise. Os requisitos variam de caso para caso, e dependem de um bom entendimento da área de conhecimento na qual será

desenvolvida o projeto, das condições iniciais e das necessidades dos clientes. Pode-se dizer que a análise serve para se formular o problema que o sistema irá resolver. Conhecidos os requisitos e as necessidades do cliente pode-se elaborar uma estratégia para resolver o problema, ou fazer, o que se chama aqui, do design da solução. Na fase de

design são tomadas todas as decisões que envolvem a solução do problema, e a partir dele inicia-se a construção dos

(55)

componentes podem ser novos ou reutilizados de outros projetos, já testados e aprovados. Com os

componentes da solução disponíveis realiza-se a integração que coloca todas as partes juntas para se obter o produto final. É interessante notar que esta descrição aplica-se igualmente à construção de umar edificação, um projeto de instalação elétrica ou um projeto mecânico qualquer. Esta coincidência sugere uma grande semelhança na organização das

atividades de engenharia seja qual for a disciplina.

Um elemento importante e presente em todos os projetos de engenharia são as

(56)

plantas de engenharia. Todo projeto de

engenharia é realizado sobre uma planta, que é uma representação gráfica

minuciosa do que se pretende construir. Sobre a planta são avaliadas possíveis alternativas de solução, tomadas as decisões de projeto e a partir dela são obtidas as orientações para a construção do produto. A planta é, essencialmente, um elemento de comunicação entre os participantes do projeto. A planta representa o projeto de uma forma simplificada, é um modelo do sistema final.

Os modelos são contruídos para ajudar a entender um problema e para

(57)

simplicidade, própria dos modelos, permite apenas que ele represente as informações importantes, deixando de lado detalhes que dificultem a

compreensão do problema. Entendido o problema, o analista pode utilizar o modelo para comunicar ao cliente o que entendeu e como pretende resolvê-lo. O projetista comunica, por um modelo, como deverão ser construídos os componentes e como estes serão integrados na solução. Terminado o projeto, o modelo ainda ajuda a comunicar aos responsáveis pela operação e manutenção do sistema, os cuidados que devem ser tomados ao se realizar uma modificação ou um reparo no sistema. Como é uma poderosa

(58)

ferramenta de comunicação o modelo deve ser representado em uma

linguagem ao mesmo tempo precisa e clara, que comunique sem gerar dúvidas de interpretação. Este é talvez o maior desafio da modelagem, e a principal razão deste trabalho: como criar um modelo de software claro, preciso e ao mesmo tempo simples.

Outra propriedade importante dos modelos é a de poder acompanhar a evolução do projeto. No início, é

comum os modelos serem apenas linhas gerais e esboços. Em alguns casos, nem os limites do problema estão ainda em definidos. Com um entendimento melhor do problema, o modelo passa a agregar

(59)

mais informação e a se tornar-se uma visão mais completa de onde se pretende chegar. Um simples esboço pode dar lugar a um diagrama mais preciso, a partir do qual várias decisões de projeto podem ser tomadas.

Concluída a etapa de design, o modelo contém todas as informações necessárias para se iniciar a construção da solução, o modelo está agora bastante detalhado e preciso. Finalmente, com o produto construído e em operação é importante manter-se o modelo atualizado e vivo, refletindo nele as eventuais alterações feitas no produto quando ele sofre uma manutenção, ou são realizadas

(60)

O modelo é uma parte importante do projeto e deve evoluir com ele. Assim é possível resumir as qualidades

desejáveis de um modelo como sendo a clareza, a precisão, a simplicidade e a facilidade de evolução. A figura mostra um esquema das atividades em um

projeto de desenvolvimento de software qualquer, e a correspondente evolução do modelo deste sistema.

(61)

Figura 3 - Esquema de um projeto de software

Com base neste esquema analisa-se a evolução do modelo no projeto

de sistemas, as atividades realizadas para obtê-los e os principais

personagens envolvidos nestas

atividades. Estuda-se, inicialmente, os dois principais fluxos de atividades representados neste esquema: o ciclo de desenvolvimento, representado pelas atividades do lado do desenvolvedor, e o ciclo de teste do produto, representado pela seta vertical à esquerda, do lado do cliente.

(62)

2.1.1. Ciclo de

teste do software

O ciclo de teste do software é um processo de responsabilidade do cliente, ou do seu representante. Visa garantir que as necessidades levantadas para a definição dos problemas estejam sendo atendidas pelo produto. No ciclo de teste o cliente verifica se o produto fornecido pelo ciclo de

desenvolvimento está de acordo com os requisitos de projeto, e para isso ele realiza testes sobre o produto. Testes que colocam o produto em situações de uso normal, e procuram detectar falhas e novos requisitos não identificados

(63)

ainda. Como um sub-produto dos testes surgem correções e novas necessidades, que devem ser incorporadas aos

requisitos de uma nova versão deste produto, dando início a um novo ciclo de desenvolvimento.

Os clientes são todos os que contratam o serviço de desenvolvimento do

software, porque estão interessados pelo resultado que o software irá dar ao seu negócio. Os clientes podem ser os

usuários finais, que irão usar o software, podem ser seus gerentes que devem garantir a qualidade e a funcionalidade do software ou patrocinadores do software que irão incentivar o desenvolvimento e arcar com seus

(64)

custos

Gerente da aplicação é o

responsável pela operação do sistema no ambiente do usuário. Durante o desenvolvimento do projeto o gerente é o lider dos usuários e atua como facilitador dos relacionamento entre eles e a equipe de desenvolvedores. Uma vez desenvolvido o sistema de software o gerente da aplicação passa a responder por ele

internamente à organização.

Usuário final é quem se utilizará

do sistema para auxiliá-lo em suas atividades. Em problemas

(65)

variar de departamento, função, hierarquia na organização. Nestes casos é importante se criar um comissão de usuários,

representativa da comunidade, para orientar o desenvolvimento do sistema.

Patrocinadores fazem parte do

grupo de clientes que dão apoio financeiro, técnico ou político ao desenvolvimento do sistema. Este apoio é vital para que os

desenvolvedores possam ter acesso às informações e possam executar, se necessário, as alterações na organização para a implantação do sistema.

(66)

2.1.2. Ciclo de

desenvolvimento do

software

O ciclo de desenvolvimento do sistema é um fluxo de trabalho cíclico que gera novos produtos a partir das informações obtidas no levantamento de necessidades do problema. É dades cíclico porque o produto de saída

alimenta o ciclo seguinte, de modo que a cada volta aproxima-se o produto das necessidades levantadas. Espera-se que o ciclo seja convergente, isto é, em um determinado estágio o produto atenderá todos os requisitos e poderá ser

(67)

realizado inteiramento no lado do desenvolvedor, mas possui interações com o lado cliente, no ciclo de testes do produto.

O ciclo de desenvolvimento de um sistema é caracterizado por 4 atividades principais: análise, design, construção de componentes e integração. A seguir verifica-se o papel do modelos nas fases e os papel dos participantes de cada uma delas.

Fase de Análise

A análise é a fase de levantamento dos requisitos do problema a ser resolvido.

(68)

Nela estabelecem-se os limites do problema, e identificam-se as necessidades do sistema. Deve-se procurar limitar a análise

exclusivamente ao problema em estudo, evitando a influência de elementos que estão fora do escopo do problema. Detalhes de implementação que podem ofuscar a definição do problema, falsos requisitos, limitações inexistentes

devem ser deixadas de lado. Para ajudar o analista na busca de uma maior clareza nas definições inciais, ele deve criar um modelo do problema. Este modelo

deverá ter apenas as informações relevantes para o entendimento do problema e deverá receber a aprovação por parte do cliente, garantindo que o

(69)

caminho está correto e servindo de base para as demais fases do projeto.

As técnicas aplicáveis à análise são muitas, e dependem, grandemente, da experiência do analista. Quanto mais complexo o problema, mais difícil é a análise e mais importante o uso de modelos para reduzir e gerenciar esta complexidade. Todas as informações obtidas do cliente devem ser avaliadas e levadas em consideração na análise. Não existe um momento preciso que indica o final da análise, mas o analista pode identificar este momento quanto todas as facetas do problema foram exploradas e a visão que o modelo traduz é suficiente para iniciar as fases

(70)

seguintes do projeto. Mesmo que alguns requisitos foram esquecidos, não é motivo de preocupação, como o

processo de desenvolvimento é cíclico sempre será possível rever a análise e incluir estes novos requisitos.

A análise é tarefa do analista de

sistemas. Em projetos mais simples esta

atividade pode ser desempenhada por um desenvolvedor sênior, ou pelo próprio gerente de projeto, se estes possuirem um conhecimento básico de modelagem de sistemas, e a

disponibilidade para entrevistar usuários, levantar e organizar as informações disponíveis para o início do projeto. Em projetos mais complexos

(71)

esta tarefa pode ser dividida entre diversos profissionais como o Analista de Negócios, o Analista de

Documentação e o Analista de Banco de Dados.

Analista de Negócios - deve ser

um especialista na área de

conhecimento a que o sistema se destina, e tem como objetivo identificar as

responsabilidades que o sistema deve cumprir para o negócio do cliente. O analista de negócios pode desenvolver uma análise do retorno esperado com o

invetimento no sistema, e estudar a viabilidade técnica do sistema,

(72)

integrando-o ao ambiente computacional existente. Os requisitos de negócio, as regras e os processos de negócios devem ser modelados por este

profissional.

Analista de Banco de Dados

-como uma grande parte dos sistemas de informação são

baseados na tecnologia de banco de dados, é importante ter um

entendimento preciso das informações já existentes em bancos de dados, antes de iniciar um novo projeto. O analista pode se utilizar de técnicas próprias e ferramentas de software para criar os esquemas dos bancos de dados

(73)

existentes e que serão úteis para o novo projeto de sistema.

Analista de Documentação - é o

responsável por elaborar a documentação do sistema, os documentos de especificação, manuais e diagramas. Como a fase de análise é uma fase onde a

geração de documentos é maior, é importante ter-se um profissional técnico especializado encarregado da produção desta documentação. Uma prática interessante pode ser a de produzir o manual do usuário do sistema já na fase de análise, e utilizá-lo com parte da

especificação técnica de requisitos do sistema.

(74)

Como parte importante da fase de análise temos um modelo inicial do sistema que fará parte do documento de especificação, produto da fase de

análise. Porque as correções nas fases iniciais de um projeto são sempre mais fáceis de serem feitas, do que em fases mais avançadas, os documentos e os modelos desta fase devem ser,

continuamente, avaliados e verificados pelos clientes.

Fase de Design

O design se concentra na solução do problema identificado na fase de

(75)

os elementos que formam um sistema para resolver o problema de projeto. Como quase sempre a seleção de uma estratégia de solução traz compromissos com outros sistemas, deve-se, nesta fase, avaliar o melhor caminho, testar e

escolher a alternativa de solução mais adequada. O designer conta com a sua experiência e o apoio de modelos do sistema em projeto para apoiar sua decisão.

O design é uma tarefa para engenheiros de software experientes. Em um projeto mais complexo, diversos aspectos de um sistema de software devem ser

considerados, o que exige a participação de outros especialistas, como o

(76)

Engenheiro de Redes e o Designer de Interfaces.

Engenheiro de Software - é o

especialista em criar o operar os modelos dos sistemas para levá-los ao código. Deve possuir

habilidade de conceber os componentes do sistema e caracterizá-los de modo a que atendam os requisitos do problema. Pode testar soluções e se utilizar de padrões de soluções já consagradas e aplicá-las a novos problemas. O engenheiro de software deve garantir também que as boas práticas de engenharia sejam

(77)

a qualidade do produto.

Engenheiro de Redes - é um especialista importante quando o sistema será implementado em um ambiente de processamento

distribuído. Neste caso, a

comunicação entre os componentes do sistema será feita pela rede de comunicação de dados, que deve ser projetada para dar vazão ao volume de comunicação esperado. Existindo uma grande interação entre os componentes da solução pode exigir, em alguns casos, que componentes especiais de

comunicação sejam especificados e construídos.

(78)

especialista na comunicação entre os usuários e o computador. É um profissional muito importante em sistemas com grande interação com os usuários como os sistemas para internet. O aumento do número de usuários nos sistemas de

informação tem feito com que este profissional tenha um papel cada vez mais importante para a

aceitação e para a usabilidade do sistema. Ele deve possuir a

habilidade de e a criatividade para criar metáforas para a operação do sistema.

Ao final da fase de design todas as definições do projeto devem estar

(79)

registradas no documento de especificação. Modelos, listas e

esquemas servem como referências para os construtores dos componentes e para a integração do sistema. O modelo

produzido pelo design pode variar muito no nível dos seus detalhes. No início do projeto apresenta poucos detalhes

mostrando conceitualmente a solução, para uma avaliação inicial, ou para a validação de um cliente. Nos ciclos mais avançados do projeto, o modelo deve estar muito bem detalhado para determinar aos programadores todos os pormenores do software.

(80)

Componentes

Na fase de construção de

componentes inicia-se as atividades de

programação na construção do software. A boa prática de construção recomenda a adoção do conceito de componentes de software reutilizáveis para reduzir

prazos e custos no desenvolvimento, mantendo a qualidadade do produto. É cada vez mais comum se dispor de componentes pré-fabricados prontos para serem utilizados em diversos

projetos, organizados em um framework. Nestes casos a construção de

componentes se limitará a criar os

componentes que são específicos para o novo projeto.

(81)

A construção civil é um exemplo típico de padronização de peças

pré-fabricadas. Poucas são as partes criadas específicamente para uma construção. Na área mecânica o exemplo mais interessante de criação de componentes encontra-se na indústria automobilística, onde um carro é efetivamente a

montagem de peças e partes completas feitas por outras empresas,. Muitas vezes a mesma peça é utilizada em diferentes carros. Esta abordagem ainda é nova na engenharia de software, mas está, aos poucos, revolucionando o desenvolvimento de software.

A construção dos componentes é um trabalho para o programador de

(82)

computadores, que é o especialista nas

linguagens de programação. Um mesmo sistema pode possuir compontentes escritos em diferentes linguagens, no entanto, para facilitar a manutenção e simplificar o sistema quanto menor o número de linguagens mais facilmente o sistema será mantido. O programador segue princípios e práticas próprias, que não farão parte deste trabalho. Como uma grande parte dos sistema atuais se utiliza de um banco de dados para armazenar as informações e possui uma grande dose de interação com os

usuários, é importante também envolver na fase da construção outros

especialistas: o programador de banco de dados, o programador de

(83)

componentes e o programador de interfaces.

Programador de interfaces é o

profissional responsável por desenvolver os componentes de interação entre o sistema e os seus usuários. Os componentes de interface devem se caracterizar pela facilidade de uso e pela

precisão na comunicação. O uso de uma interface gráfica e regras

próprias para criar estes

componentes, projetador por um designer, exigem que um

programador especializado nesta tarefa seja convocado para realizá-la.

(84)

Programador de Componentes

escreve os componentes de negócio obedecendo as regras de negócio definidas pelo Analista de

Negócios e projetadas pelo Engenheiro de Software. Sua principal tarefa é garantir a qualidade do componente, sua eficáfica e robustez. Utiliza, em geral, uma linguagem robusta em um ambiente de desenvolvimento próprio.

Programador de Banco de

Dados é um profissional importante

na fase de construção se houver necessidade de criar componentes específicos para o armazenamento e recuperação de informação. Em

(85)

sistema orientados a objeto o uso do banco de dados é limitado e organizado pelos objetos, sendo que este profissional deve ser responsável por integrar os

sistemas orientados a objeto com os sistema legados em bancos de dados.

Analista de Teste. Como o

produto final da fase de construção são os próprios componentes. Cada componente próprio ou adquirido de ter terceiros deve ser testado

individualmente, para garantir que ele esteja de acordo com a

especificação do projeto. Este teste faz parte do processo de criação de

(86)

componentes mas não deve ser desprezado. Pode-se criar, em projetos maiores, uma função específica com esta

responsabilidade, garantindo a sua qualidade e funcionalidade. O analista de testes não pode ter uma função acumulada com a função de programador, para evitar um

conflito de interesses.

Fase de Integração

A fase de integração encerra o

processo de desenvolvimento gerando, como produto final, uma nova versão do software. Nesta fase, a atividade mais

(87)

importante é a de configuração da versão do software, compilando e instalando os componentes necessários nos equipamentos servidores. É uma fase de trabalho minucioso e organizado, onde se deve assegurar que todos os componentes necessários foram integrados. Após este integração é importante realizar uma fase de teste. É comum nesta fase se criar roteiros automatizados de teste, assim como pode ser necessária alguma atividade de programação para integração final dos componentes.

As atividades de integração podem, em sistemas mais simples, ser realizadas pelo Engenheiro de Software ou pelo

(88)

próprio Gerente de Projetos. Em sistemas mais complexos é comum encontrarmos o Gerente de integração ou Gerente de Configuração que irá coordenar uma equipe de profissionais, os Integradores que responderão pela união correta dos componentes.

Os modelos, na fase de integração, servem de mapa para a configuração do sistema, e união dos componentes. Em muitos casos, não se está interessado em criar um sistema totalmente novo, mas sim em adaptar um sistema existente para as necessidades específicas de um cliente. Chama-se ao processo de

adaptar um software especialmente para as necessidades de um cliente de

(89)

customização[1]. O processo de

customização passa por todas as fases do processo de desenvolvimento, mas tem uma ênfase maior na fase de

integração, onde são realizadas a maior parte das atividades de configuração do software.

(90)

2.2. Modelos de um

Software

O processo de desenvolvimento de um software apresentado é baseado na evolução de uma visão que os

desenvolvedores controem, em conjunto com os clientes, sobre o problema a ser resolvido. Esta visão é concretizada em modelos, que devem representar esta visão e evoluir com ela. No início, a visão é incompleta e pode possuir

ambiqüidades e distorções, que ao longo do processo de desenvolvimento, com o entendimento do problema, são

eliminadas. No final, o modelo

(91)

ao código gerado para implementar a solução do problema, eles devem ter igual riqueza de detalhes e precisão.

Em um problema complexo,

dificilmente uma visão única, completa e bem definida será obtida logo no início do processo. É importante que os compromissos do software

representados no modelo sejam

assumidos aos poucos, acompanhando o entendimento que se tem do problema. As técnicas de modelagem, que serão exploradas em detalhes nos próximos capítulos, ajudam os analistas e

designers a documentar e comunicar o entendimento que adquirem do problema em diagramas de forma precisa,

(92)

evitando a construção de sistemas de software inconsistentes.

Um único modelo apenas é insuficiente para representar todos os fenômenos existentes em um sistema complexo, são necessários um conjunto coerente de modelos com diferentes escalas, criados a partir de diferentes pontos de vista. Jacobson (1992) propõe que a

complexidade seja introduzida

gradualmente no modelo do sistema, com a ajuda de uma série de sucessivos modelos que aos poucos são capazes de gerenciar essa complexidade. Ele

propõe 5 tipos diferentes de modelos: modelo de requisitos, que captura requisitos funcionais do sistema,

(93)

modelo de análise, que dá ao sistema uma estrutura de objetos, modelo de design, que refina esta estrutura para a implementação, modelo de implementação, que efetivamente implementa o sistema, modelo de teste que verifica o sistema.

Este estudo utiliza apenas três modelos para representar os sistema de software:

modelo de contexto, modelo conceitual e modelo detalhado.

A idéia central aqui também é

introduzir a complexidade aos poucos. O modelo de contexto equivale ao

(94)

modelo de requisitos de Jacobson, enquanto o modelo conceitual se equivale ao modelo de análise de

Jacobson. O modelo detalhado pode ser aplicado ao design, à implementação ou ao teste do sistema, dependendo do nível de detalhes e da finalidade a que ele se destina; assim, substitui os 3 outros modelos propostos por Jacobson.

O modelo de contexto inicia a

definição do problema. É construído em uma escala grande, onde grande parte dos detalhes do problema estão

encobertos. Representa os aspectos funcionais de alto nível do sistema, analogamente ao modelo de

(95)

para representar o sistema proposto no contexto do negócio do cliente. Deve possuir uma representação simples, sem uma formalidade excessiva, para poder ser entendido e validado pelo cliente, que normalmente é leigo em assuntos de software. No modelo de contexto define-se a fronteira do problema e os

principais objetivos que o sistema deve cumprir para os seus usuários. Este modelo é, essencialmente, desenvolvido durante a fase de análise pois refere-se, principalmente, à uma visão do

problema a ser resolvido. Deve ser possível ao modelo de contexto situar o sistema no contexto do cliente,

identificando pontos de integração com outros sistemas já existentes e

(96)

caracterizar a contribuição do novo sistema.

O modelo conceitual é um modelo que reúne todos os conceitos presentes no problema em estudo. Construído com uma escala menor do que o modelo de contexto, cria a estrutura do sistema, usando para isso um modelo

simplificado de classes. Nele devem estar representadas os principais

componentes do sistema e suas relações. No modelo conceitual está caracterizada as proposta de solução do problema, mas sem o detalhe necessário para a sua implementação. A idéia central é

representar, simplificadamente, em poucos diagramas, o sistema como um

(97)

todo e as partes principais que o constituem. Como o modelo final do sistema pode ser muito complexo, o modelo conceitual serve de índice, de orientação, para que dele sejam

detalhados os modelos de implementação. É um modelo

desenvolvido nas fases de análise e design porque recebe não só os detalhes do problema a ser resolvido, como também os elementos incorporados ao modelo durante o design da solução.

A quantidade de detalhes do modelo conceitual deve estar entre a

abstração do modelo de contexto e a grande quantidade de detalhes do modelo detalhado. Como o modelo

(98)

conceitual possui um nível maior de detalhamento que o modelo de contexto, é possível, a partir dele estabelecer um planejamento do desenvolvimento e um dimensionamento mais preciso dos recursos necessários para a construção do sistema. Estas definições são

impossíveis de serem feitas apenas com o modelo contextual, assim o modelo conceitual assume também um

importante papel no gerenciamento do processo de desenvolvimento de software.

O modelo detalhado, por sua vez, incorpora todos os detalhes de uma versão projetada do software. O modelo detalhado pode possuir um nível de

(99)

detalhe equivalente ao código do software, podendo-se até criar uma correspondência biunívoca com ele. Para cada versão de um software o modelo detalhado pode mudar,

incorporando as novidades desta versão. Podem ser gerados quandos modelos detalhados quantas versões do produto existirem. O objetivo principal do modelo detalhado é a construção do sistema, assim nele devem estar representados todos os detalhes

construtivos e as definições de projeto. É um modelo que se inicia na fase de design, com os detalhes com

componentes a serem construídos e é detalhado na fase de construção. Como o modelo detalhado possui uma

(100)

escala ainda menor que o modelo conceitual, os detalhes do sistemas são revelados com precisão, na medida da necessidade do desenvolvimento, seja para uma maior definição precisa do design, seja para implementação ou seja para testes.

A figura abaixo mostra, de forma esquemática, as relações entre a escala proposta de modelos e os

produtos de software em suas diversas versões.

(101)

Figura 4 - Seqüência de Modelos em um Projeto de Software Típico

(102)

2.3. Documento de

Especificação de

Projeto

O principal documento do desenvolvimento do software é o Documento de Especificação de

Projeto. Como seu próprio nome diz, ele deve descreve, detalhadamente, o

projeto de um software. Normalmente, a especificação é tomada como um

documento feito para orientar a construção do software, mas neste estudo a especificação é tomada como um espelho do projeto do sistema, e assim deve ser mantida atualizada

(103)

durante toda a evolução do sistema, inclusive após a sua construção. Na fase de análise a especificação deve

considerar os objetivos do problema, apresentando os modelos de contexto e conceitual. Na fase de design a

especificação recebe os detalhes das soluções escolhidas, para que na construção todas as alterações no sistema possam ser representadas em modelos detalhados na especificação. Mantém-se assim o documento vivo, acompanhando todo o projeto do sistema.

Como este trabalho não se propõe a apresentar um método para

(104)

documento de especificação não será detalhado. Entretanto, é de esperar, encontrar muitos diagramas e modelos em um documento de especificação de software.

(105)

2.4. A Modelagem

Orientada a Objetos

Para criar um modelo é preciso escolher o que é considerado

importante, e por isso será representado no modelo, do que pode ser omitido. A seleção do que é, e do que não é,

importante segue um paradigma, um ponto de vista, uma forma de olhar a realidade que se vai modelar. Descreve-se aqui algumas características dos diferentes paradigmas usados para modelar sistemas de software.

Para desenvolver um sistema de software é necessário criar uma visão

(106)

do problema, representada em um modelo que orienta o processo de desenvolvimento. Para se estabelecer esta visão deve-se definir um ponto de vista, isto é, deve-se a olhar o software segundo um paradigma. O paradigma define uma unidade de decomposição do sistema, destacando alguns aspectos em prejuízo de outros. Algumas possíveis visões e as unidades de decomposição associadas são:

A Visão Funcional decompõe um sistema em funções;

A Visão dos Dados decompõe um sistema em estruturas de dados; e A Visão de Objetos decompõe um sistema em classes de objetos.

(107)

A visão funcional valoriza o fluxo de informação do sistema, buscando

responder o que o sistema deve fazer. A idéia, que se traduz em uma análise funcional, é a de definir o sistema como uma grande função, que pode ser

quebrada em funções menores, em uma técnica de análise chamada de análise top-down (de cima para baixo). Este procedimento parte do princípio que um sistema de software deve fazer algo para o seu usuário. Uma função complexa pode ser decomposta em funções mais simples, continuamente, até que a quebra funcional leva a funções tão simples a ponto de poderem ser implementadas e testadas. Testadas isoladamente, as funções elementares são agrupadas e

(108)

integradas em uma estratégia de integração botton-up (de baixo para cima). Integrando todas as

funcionalidades tem-se, ao final, o sistema completo com toda a funcionalidade pretendida.

O termo “função” é quem orienta todo o processo de desenvolvimento. O que o sistema deve fazer conduz o processo de análise e construção. Por isso, se for necessário introduzir alterações, modificações e novas funcionalidades nos softwares desenvolvidos sobre este paradigma a tarefa mais difícil. Ao se introduzir uma alterção, uma série de outras funcionalidades que decorreram desta podem ser afetada. A quantidade

(109)

de código envolvido pode ser muito grande, inviabilizando grandes

mudanças em sistemas desenvolvidos sob uma visão exclusivamente funcional.

Figura 5 - Esquema da Modelagem Funcional

Na modelagem de dados, outro

(110)

de software, o destaque se volta para a estrutura da informação que é tratada pelo sistema, ao contrário das operações ou funções às quais estas informações estarão sujeitas. A estrutura da

informação de um sistema corresponde ao conjunto organizado de entidades que guardam alguma informação para o software e como elas se relacionam. O princípio por trás da modelagem de dados é que um sistema de informação processa informação. Dá-se uma maior em qual informação é processada e não em como se dá este processamento.

Na modelagem de dados não há lugar para representar as características dinâmicas do problema, suas funções,

(111)

operações ou algorítmos. Ainda que algumas regras de negócio reflitam

apenas em elementos estáticos ou limites destes elementos, a maioria das regras de negócio exige a criação de

algorítmos mais complexos que não encontram abrigo no modelo de dados. Existe, entretanto, na modelagem de dados uma grande reutilização das informações armazenadas e da sua estrutura. A capacidade em se adaptar uma mesma estrutura de dados em problemas semelhantes é muito grande, dando amplas possibilidades de uma grande reutilização deste tipo de modelo. Problemas semelhantes usam estruturas de informação semelhantes.

(112)

É importante se observar que nem sempre a estrutura da informação reflete a estrutura do problema. Algumas vezes redundâncias e hierarquias presentes no problema são eliminadas ao se analisar apenas a informação armazenada. O processo de normalização de tabelas de um banco de dados é um exemplo desta simplificação.

Outra observação importante é que um sistema exige dados e funções, e que nem sempre uma abordagem permite uma visão se integra perfeitamento na outra. Desenvolver um sistema pelo paradigma de dados ou pelo paradigma funcional resulta em um sistema com grande acoplamento, onde qualquer

(113)

modificação necessária, seja em dados, seja em funções pode resultar em um trabalho complexo demais. A figura mostra que um dado pode ser necessário para mais de uma função e que que

modificar um dado requer modificar muitas funções.

(114)

Figura 6 - Um programa combina dados e funções

A orientação a objetos enfoca a busca da estrutura do problema, e não apenas da informação. Identifica em objetos, os elementos importantes do domínio do

(115)

problema, que guardam dados e

possuem funções que podem operar seus dados. Não são apenas as funções que o sistema deve desempenhar, como na modelagem funcional, nem somente os dados que serão armazendados, como na modelagem de dados; a importância maior é encontrar os elementos do problema que possuem todas estas propriedades.

Sebesta (1996) estuda a evolução das linguagens de programação e verifica que enquanto a programação procedural foi desenvolvida na década de 70, na década de 80 começou-se a combinação de algoritmos e estruturas de dados em objetos com a linguagem Smalltalk. As

(116)

idéias da programação orientada a

objetos foram incorporadas à linguagem C gerando C++ que ajudou a popularizar as linguagens orientadas a objeto.

Apesar de ser possível haver

programação orientada a objetos desde 1980, os conceitos que envolvem o projeto de sistema com esta filosofia não são simples, e por isso demoraram a ser utilizados pela comunidade de

desenvolvedores. Os programas

continuavam, até meados da década de 90, a serem projetados com uma

separação clara entre a análise funcional e a análise de dados. Num sistema onde qualquer função pudesse se utilizar de qualquer dado armazenado, seria

(117)

impossível saber quais dados são necessários para cada função, sem analisar cada uma das funções

separadamente. Esta grande dependência entre os dados e as funções dificulta uma alteração nos dados ou nas funções, porque as conseqüências são

imprevisíveis. É importante criar um critério para se unir dados e funções em conjuntos organizados e coerentes. Desta idéia surge a modelagem orientada a objetos.

Um objeto, segundo Jacobson et al (1992), é caracterizado por um conjunto de operações e um estado que armazena os efeitos das operações que o objeto é capaz de realizar. Assim os dados

(118)

armazenados no estado objeto servem para armazenar o efeito das funções, criando-se o vínculo desejado entre as operações e os dados. Os objetos tem uma dimensão maior do que apenas os dados e as funções isoladamente, como exemplifica a figura.

(119)

Figura 7 - Objetos reúnem dados e funções

A orientação a objetos parte da

constatação que o mundo é formado por elementos autônomos e relativamente independentes, e que criar um modelo de um sistema de software é identificar quais destes elementos são relevantes para o software. Os objetos que devem ser incluídos no modelo são os que realizam algo de destaque para o

problema em questão. Esta abordagem reduz a distância entre o modelo e o mundo real, porque utiliza elementos da realidade para criar o modelo,

facilitanto o entendimento do problema pelo analista e pelo cliente.

(120)

Selecionar a orientação a objetos para analisar um problema, inclui uma série de características intrínsicas à

tecnologia de objetos que devem ser bem entendidas para que o analista possa fazer um uso correto deste

paradigma. Dentre estas características destacam-se o conceito de

encapsulamento das classes, a herança, a troca de mensagens e o polimorfismo. Estas características serão apresentadas a seguir, acompanhadas de exemplos práticos que visam a facilitar o entendimento.

(121)

2.4.1.

Encapsulamento

Todos os dados e operações

necessárias para um objeto existir, e realizar suas responsabilidades para o sistema, devem estar armazenadas no próprio objeto. Diz-se que o

comportamento e os dados estão encapsulados no objeto. Envoltos em uma cápsula os dados dos objetos não estão mais isolados das funções, eles caminham juntos.

(122)

Figura 8 - Esquema do encapsulamento

O encapsulamento é a principal característica para se identificar um objeto. O princípio por trás desta idéia é que o objeto possua todos os dados e as funções necessárias para sua existência. Selecionar um objeto da realidade para

(123)

o modelo indica que ele representa algo que existe de fato no domínio do

problema, e que será transportado para o domínio do modelo do software, com toda a sua autonomia.

Figura 9 - Um objeto deve

representar algo que existe de verdade Um lâmpada, como a da figura, é um objeto importante, por exemplo, para um

(124)

sistema de controle doméstico. As propriedades que a lâmpada possui, para este sistema são uma tensão

elétrica e um preço. A lâmpada oferece para este sistema as funcionalidades de acender a um determinado preço pelo qual foi comprada.

O encapsulamento protege os dados de um objeto do acesso descontrolado por outros objetos. O acesso é realizado por intermédio de mensagens trocadas entre objetos, que nada mais são do que

chamadas das funções do objeto. Apenas a interface do objeto, formada pelo conjunto de funções, é exposta, oferecendo serviços deste objeto ao mundo exterior. Como as mensagens

Referências

Documentos relacionados

Consumo de nutrientes (g/cab/dia) Ingredientes PB NDT MS Milho (grão) Soja (grão) Uréia I Sulfato de amônio 1 Mistura mineral I 188 214 351 19 1.. Da mesma

Essa investigação tem por objetivo averiguar a qua- lidade dos serviços prestados na Mostra coletiva do Curso de Gemologia da Uni- versidade Federal do Espírito Santo (Ufes) tendo

Este trabalho teve por objetivo o estudo da dimensão das doenças crônicas, especificamente o diabetes mellitus, visando à elaboração de um modelo de processo

Depois que o cliente passou pela análise de crédito, ou teve seu crédito aprovado pelo convênio, ele fica com status “07-Crédito aprovado”, com isso pode ser emitido os cartões

Após efetuar o cadastro de um cliente, somente o departamento de crédito consegue alterar dados, desta forma os vendedores devem direcionar o e-mail sempre que houver a

Portanto, uma empresa de cartão de crédito, por exemplo, pode aplicar mineração de dados para extrair informações importantes do seu cliente (como gastos, hábitos de

Esses parques renderam à cidade o título de “Capital Mundial dos Parques de Diversão” e, por uma boa razão: abriga os 4 parques aquáticos mais visitados nos EUA e 7 dos 10

Crédito Concedido à Data Volume de Vendas ùltimos 12 meses ALERTA Nº1 - Cliente: CR.005479 - CLIENTE BFR.000091.. ALERTA Nº2 - Cliente: CR.021518 - CLIENTE BFR.000091