Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE...

87
INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Transcript of Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE...

Page 1: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE

Letícia Borges Figueredo

Uberlândia, Dezembro de 2.000

, 23/12/05
<!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]-->
, 23/12/05
<!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>manutencao</o:Author> <o:Template>Normal</o:Template> <o:LastAuthor>Jesus Paixão Neto</o:LastAuthor> <o:Revision>2</o:Revision> <o:TotalTime>9</o:TotalTime> <o:LastPrinted>2000-09-10T15:16:00Z</o:LastPrinted> <o:Created>2001-10-23T11:43:00Z</o:Created> <o:LastSaved>2001-10-23T11:43:00Z</o:LastSaved> <o:Pages>68</o:Pages> <o:Words>14393</o:Words> <o:Characters>82045</o:Characters> <o:Company>Oficina</o:Company> <o:Lines>683</o:Lines> <o:Paragraphs>164</o:Paragraphs> <o:CharactersWithSpaces>100757</o:CharactersWithSpaces> <o:Version>9.2812</o:Version> </o:DocumentProperties> </xml><![endif]-->
, 23/12/05
<!--[if gte mso 9]><xml> <w:WordDocument> <w:HyphenationZone>21</w:HyphenationZone> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery> <w:UseMarginsForDrawingGridOrigin/> <w:Compatibility> <w:FootnoteLayoutLikeWW8/> <w:ShapeLayoutLikeWW8/> <w:AlignTablesRowByRow/> <w:ForgetLastTabAlignment/> <w:LayoutRawTableWidth/> <w:LayoutTableRowsApart/> </w:Compatibility> </w:WordDocument> </xml><![endif]-->
, 23/12/05
<!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="2050"/> </xml><![endif]-->
, 23/12/05
<!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]-->
, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1028" style='position:absolute;margin-left:28.3pt;margin-top:-59.2pt; width:321.35pt;height:39.85pt;z-index:1' coordorigin=",-1107" coordsize="20000,21512" o:allowincell="f"> <v:rect id="_x0000_s1029" style='position:absolute;left:6544;width:13456; height:18489' filled="f" stroked="f"> <v:textbox inset="2pt,2pt,2pt,2pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:7.0pt;mso-bidi-font-size:10.0pt;font-family:"Arial Black"'>CENTRO UNIVERSITÁRIO DO TRIÂNGULO<o:p></o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:7.0pt;mso-bidi-font-size:10.0pt;font-family:"Arial Black"'>INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS<o:p></o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:7.0pt;mso-bidi-font-size:10.0pt;font-family:"Arial Black"'>CURSO DE CIÊNCIA DA COMPUTAÇÃO<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1030" style='position:absolute;top:-1107;width:6911; height:21512' filled="f" stroked="f" strokeweight="1pt"> <v:textbox inset="1pt,1pt,1pt,1pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:101.25pt; height:27.75pt' o:ole="" fillcolor="window"> <v:imagedata src="./mono1482000_arquivos/image001.wmz" o:title=""/> </v:shape><![if gte mso 9]><o:OLEObject Type="Embed" ProgID="CorelDraw.Gráficos.8" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1065335391"> </o:OLEObject> <![endif]></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect></v:group><![endif]-->
Page 2: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

INFLUÊNCIAS DOS PARADUGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1034" style='position:absolute;margin-left:40.3pt;margin-top:-47.2pt;width:321.35pt; height:39.85pt;z-index:2' coordorigin=",-1107" coordsize="20000,21512" o:allowincell="f"> <v:rect id="_x0000_s1035" style='position:absolute;left:6544;width:13456; height:18489' filled="f" stroked="f"> <v:textbox inset="2pt,2pt,2pt,2pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:7.0pt;mso-bidi-font-size:10.0pt;font-family:"Arial Black"'>CENTRO UNIVERSITÁRIO DO TRIÂNGULO<o:p></o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:7.0pt;mso-bidi-font-size:10.0pt;font-family:"Arial Black"'>INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS<o:p></o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:7.0pt;mso-bidi-font-size:10.0pt;font-family:"Arial Black"'>CURSO DE CIÊNCIA DA COMPUTAÇÃO<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1036" style='position:absolute;top:-1107;width:6911; height:21512' filled="f" stroked="f" strokeweight="1pt"> <v:textbox inset="1pt,1pt,1pt,1pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:101.25pt; height:27.75pt' o:ole="" fillcolor="window"> <v:imagedata src="./mono1482000_arquivos/image001.wmz" o:title=""/> </v:shape><![if gte mso 9]><o:OLEObject Type="Embed" ProgID="CorelDraw.Gráficos.8" ShapeID="_x0000_i1026" DrawAspect="Content" ObjectID="_1065335394"> </o:OLEObject> <![endif]></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect></v:group><![endif]-->
Page 3: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Letícia Borges Figueredo

Monografia apresentada ao Curso de

Ciência da Computação do Centro

Universitário do Triângulo – UNIT

como requisito básico à obtenção do grau

de Bacharel em Ciência da Computação

sob a orientação do Professor Hélio

Rubens Soares.

Uberlândia, Dezembro de 2.000

INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE

Letícia Borges Figueredo

Monografia apresentada ao Curso de Ciência da Computação do Centro Universitário do

Triângulo – UNIT, como requisito básico à obtenção do grau de Bacharel em Ciência da Computação.

Page 4: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

______________________________ ______________________________

Hélio Rubens Soares, Msc Marcos Rezende Ferreira, Msc

Orientador Coordenador do Curso

______________________________ ______________________________

Claúdia de Souza F. Spirandelli, Msc Marcelo Fernandes dos Santos, Msc

Avaliadora Avaliador

Page 5: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Aos meus pais, Guilherme e Sheila.

Page 6: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

AGRADECIMENTOS

Agradeço aos meus pais, Guilherme e Sheila, minha infinita gratidão por terem feito de tudo para

viabilizar meus estudos sem nunca medir esforços.

Aos meus amigos, em especial à Angela e ao Tuanir, que sempre me deram força, apoiando-me

em todos os desafios.

Aos meus tios, Ramiro e Elzi, que tanto me apoiaram nos momentos mais difíceis desta

caminhada.

Ao meu orientador, Hélio Rubens Soares, por sua dedicação na realização deste trabalho.

Aos meus colegas, que direta ou indiretamente contribuíram para realização deste trabalho.

Sobretudo, agradeço a Deus, que me protege todos os dias de minha vida.

Page 7: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

RESUMO

Um Software com qualidade vem sendo uma das grandes cobranças por parte dos clientes de modo geral. Com os paradigmas de análise e desenvolvimento de sistemas os analistas podem chegar a um software com qualidade. Esta monografia tem por objetivo apresentar definições de engenharia de software e diferenças entre os paradigmas de análise e desenvolvimento de sistemas, mostrando como estes conceitos podem influenciar na qualidade de um software. Isto envolve discussões relacionadas com a modelagens estruturada, que é composta de Modelo Essencial, dividido em Modelo Ambiental e Modelo Comportamental; e modelagem Orientada a Objetos, as quais podem auxiliar o analista para aumentar sua produtividade e conseqüentemente a qualidade do software. Para auxiliar o analista, esta monografia apresenta também as diferenças entre a Modelagem Estruturada e a Modelagem Orientada a Objetos com suas vantagens e desvantagens. O analista poderá observar os seus conceitos, funcionamentos, vantagens e desvantagens para chegar a uma forma eficiente de usá-los. Por fim, esta monografia contém os principais conceitos para auxiliar em trabalhos na área de qualidade de software.

Page 8: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

SUMÁRIO

AGRADECIMENTOS

RESUMO

1. INTRODUÇÃO..................................................................................................1

2. ENGENHARIA DE SOFTWARE ...................................................................3

2.1 O CICLO DE VIDA CLÁSSICO......................................................................4

Page 9: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

2.2. PROTOTIPAÇÃO............................................................................................6

2.3. O MODELO ESPIRAL.....................................................................................8

2.4. TÉCNICAS DE QUARTA GERAÇÃO...........................................................9

3. ASPECTOS DE QUALIDADE.......................................................................12

3.1. QUALIDADE.................................................................................................12

3.2. QUALIDADE DE SOFTWARE....................................................................14

4. MODELAGEM ORIENTADA A OBJETOS...............................................20

4.1. OBJETOS........................................................................................................22

4.2.

ATRIBUTOS..............................................................

....................................22

4.3. MÉTODOS.....................................................................................................23

4.4. CLASSES........................................................................................................23

4.5. TIPO DE OBJETOS.......................................................................................24

4.6. ENCAPSULAMENTO...................................................................................24

4.7. SUBCLASSES................................................................................................26

4.8. HERANÇA.....................................................................................................27

4.9. POLIMORFISMO...........................................................................................28

4.10. MENSAGENS..............................................................................................29

Page 10: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

4.11. ABSTRAÇÃO ..............................................................................................29

4.12. RETENÇÃO DE ESTADO..........................................................................30

4.13. REUTILIZAÇÃO.........................................................................................31

4.14. BENEFÍCIOS................................................................................................33

4.15. UML (Unified Modeling Language).............................................................34

5. MODELAGEM ESTRUTURADA.................................................................45

5.1. MODELO ESSENCIAL.................................................................................46

5.1.1. MODELO AMBIENTAL............................................................................47

5.1.2. MODELO COMPORTAMENTAL.............................................................50

6. DIFERENÇAS DA MODELAGEM ESTRUTURADA PARA MODELAGEM ORIENTADA A

OBJETOS ..................................................60

7. INFLUÊNCIA DA MODELAGEM ORIENTADA A OBJETOS NA QUALIDADE DE

SOFTWARE .......................................................................64

8. CONCLUSÃO..................................................................................................66

9. BIBLIOGRAFIA..............................................................................................68

Page 11: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

LISTA DE FIGURAS

Figura 2.1: O Ciclo de Vida Clássico.......................................................................5

Figura 2.2: Prototipação...........................................................................................7

Figura 2.3: O Modelo Espiral...................................................................................9

Figura 2.4: Técnicas de Quarta Geração (4GT).....................................................10

Page 12: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.1: Exemplo de classe-pai e classe-filho...................................................26

Figura 4.2: Exemplo de um Diagrama de Use-Case..............................................38

Figura 4.3: Exemplo do Diagrama de Classes.......................................................39

Figura 4.4: Exemplo do Diagrama de Objetos.......................................................40

Figura 4.5: Exemplo do Diagrama de Estado........................................................40

Figura 4.6: Exemplo do Diagrama de Seqüência...................................................41

Figura 4.7: Exemplo do Diagrama de Colaboração...............................................42

Figura 4.8: Exemplo do Diagrama de Atividade...................................................42

Figura 4.9: Exemplo do Diagrama de Componente...............................................43

Figura 4.10: Exemplo do Diagrama de Execução..................................................44

Figura 5.1: Diagrama de Contexto.........................................................................49

Figura 5.2 : Um Exemplo de Processo...................................................................51

Page 13: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 5.3: Um Exemplo de fluxo de dados.........................................................52

Figura 5.4: Exemplo do depósito de dados............................................................52

Figura 5.5 : Exemplo do terminador......................................................................53

Figura 5.6: Diagrama de Fluxo de Dados em níveis..............................................54

Figura 5.7: Um tipo de Objeto...............................................................................56

Figura 5.8: Um relacionamento..............................................................................57

Figura 5.9a: Exemplo de relacionamento...............................................................57

Figura 5.9b: Exemplo de relacionamento um-para-muitos....................................58

Figura 5.10: Exemplo de um indicador de tipo de objeto associativo...................58

Figura 5.11: Um indicador de supertipo/subtipo....................................................59

Page 14: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

1. INTRODUÇÃO

Esta monografia apresentará definições de Engenharia de Software, explicando as diferenças

entre os paradigmas de análise e desenvolvimento de sistemas. O objetivo desta monografia é apresentar

as principais características das modelagens Estruturada e Orientada a Objetos e como estas

características influenciam na qualidade de software.

Qualidade de software não é um termo bem definido na comunidade científica. Isto se dá pelo fato

de que os conceitos gerais de qualidade nem sempre se aplicam ao escopo de construção de software.

Muito se fala da utilização da modelagem Orientada a Objetos como um mecanismo de se

alcançar a qualidade. Porém nem sempre este paradigma consegue cumprir este objetivo.

É importante observar, portanto, não só as características particulares de cada modelagem mas

Page 15: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

também como utilizar de forma eficiente os recursos oferecidos por cada uma delas.

O capítulo 2 apresenta os conceitos gerais de Engenharia de Software e os seus paradigmas Ciclo

de Vida Clássico, Prototipação, Modelo Espiral e Técnicas de Quarta Geração, descrevendo suas

definições, objetivos e funcionamento. Já o capítulo 3 mostra os Aspectos de Qualidade e definições de

qualidade. O capítulo 4 apresenta a Modelagem Orientada a Objetos, mostrando como foi criada; seus

benefícios, conceitos e funcionamento de Classes, Objetos, Atributos, Operações, Métodos, Mensagens,

Herança, Encapsulamento, Abstração, Polimorfismo, Persistência e Reutilização, além dos conceitos que

envolve a UML. O capítulo 5 descreverá sobre Modelagem Estruturada, detalhando sobre Modelo

Essencial que é dividido em Modelo Ambiental e o Modelo Comportamental, explicando seus conceitos e

funcionamentos. O capítulo 6 mostrará as diferenças entre Modelagem Estruturada e Modelagem

Orientada a Objeto, suas semelhanças, vantagens e desvantagens. Já o capítulo 7 descreverá sobre as

influências da Modelagem Orientada a Objetos na qualidade de software, podendo ser observado que com

a Modelagem orientada a objetos se chegará a um software com qualidade. Por fim, o capítulo 8 apresenta

uma conclusão desta monografia e suas contribuições.

Page 16: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

2. ENGENHARIA DE SOFTWARE

Neste capítulo será mostrado definições de Engenharia de Software e explicações sobre seus

paradigmas.

Engenharia de Software visa abordar os processos de construção, implantação e manutenção de produtos de software com qualidade assegurada por construção, segundo cronogramas e custos previamente definidos. [Ma92 ]

A Engenharia de Software tem como objetivo o aumento da produtividade do engenheiros de

software e a qualidade do software, atendendo aos requisitos de eficácia e eficiência.

Page 17: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Engenharia de Software abrange três elementos fundamentais, são os métodos, ferramentas e procedimentos, que possibilita a construção de software de alta qualidade.

Os métodos de engenharia de software envolvem um amplo conjunto de tarefas que incluem

planejamento e estimativa de projeto, análise e requisitos de software e de sistemas, projeto da estrutura

de dados, arquitetura de programa e algoritmo de processamento, codificação, teste e manutenção. Os

métodos muitas vezes introduzem uma notação gráfica ou orientada à linguagem especial e introduzem

um conjunto de critérios para a qualidade do software.

Quando as ferramentas de engenharia de software são integradas de forma que a informação

criada por uma ferramenta possa ser usada por outra, é estabelecido um sistema de suporte ao

desenvolvimento de software chamado engenharia de software auxiliada por computador (CASE -

Computer-Aided Software Engineering). O CASE combina software, hardware e um banco de dados de

engenharia de software para criar um ambiente de engenharia de software que seja análogo ao projeto

auxiliado por computador/engenharia auxiliada por computador para o hardware.

Os procedimentos da engenharia de software definem a seqüência em que os métodos serão

aplicados, os produtos que se exige que sejam entregues, os controles que ajudam a assegurar a qualidade

e a coordenar as mudanças, e os marcos de referência que possibilitam aos gerentes de software avaliar o

progresso.

Os métodos, ferramentas e os procedimentos muitas vezes são citadas como paradigmas de

engenharia de software. Um paradigma de engenharia de software é escolhido tendo-se como base a

natureza do projeto e da aplicação, os métodos e as ferramentas a serem usados, os controles e os

produtos que precisam ser entregues.

2.1 O CICLO DE VIDA CLÁSSICO

O paradigma do ciclo de vida se inicia no nível do sistema e avança ao longo da análise, projeto,

Page 18: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

codificação, teste e manutenção. Ele abrange as atividades descritas na figura 2.1[Pr95].

Figura 2.1: O ciclo de vida clássico.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1038" style='position:absolute; left:0;text-align:left;margin-left:18pt;margin-top:13.35pt;width:381.6pt; height:148.65pt;z-index:4' coordorigin="2592,4320" coordsize="7632,2973"> <v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m0,0l0,21600,21600,21600,21600,0xe"> <v:stroke joinstyle="miter"/> <v:path gradientshapeok="t" o:connecttype="rect"/> </v:shapetype><v:shape id="_x0000_s1039" type="#_x0000_t202" style='position:absolute; left:8756;top:6480;width:1468;height:492' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1039'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Manutenção<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1040" style='position:absolute;flip:y' from="2944,7275" to="9402,7275"/> <v:line id="_x0000_s1041" style='position:absolute;flip:y' from="9402,7056" to="9402,7257"/> <v:group id="_x0000_s1042" style='position:absolute;left:2592;top:4320; width:7454;height:2973' coordorigin="1783,11523" coordsize="8841,3261"> <v:rect id="_x0000_s1043" style='position:absolute;left:1783;top:11523; width:1461;height:689' filled="f" strokeweight="1pt"/> <v:rect id="_x0000_s1044" style='position:absolute;left:3263;top:12023; width:1461;height:689' filled="f" strokeweight="1pt"/> <v:rect id="_x0000_s1045" style='position:absolute;left:4743;top:12503; width:1461;height:689' filled="f" strokeweight="1pt"/> <v:rect id="_x0000_s1046" style='position:absolute;left:6223;top:12963; width:1461;height:689' filled="f" strokeweight="1pt"/> <v:rect id="_x0000_s1047" style='position:absolute;left:7703;top:13443; width:1461;height:689' filled="f" strokeweight="1pt"/> <v:rect id="_x0000_s1048" style='position:absolute;left:9163;top:13863; width:1461;height:689' filled="f" strokeweight="1pt"/> <v:shape id="_x0000_s1049" type="#_x0000_t202" style='position:absolute; left:1820;top:11544;width:1580;height:700' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1049'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Engenharia de</span> sistema</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1050" type="#_x0000_t202" style='position:absolute; left:3300;top:12084;width:1360;height:580' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1050'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Análise<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1051" type="#_x0000_t202" style='position:absolute; left:4780;top:12547;width:1400;height:580' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1051'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Projeto<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1052" type="#_x0000_t202" style='position:absolute; left:6243;top:12964;width:1500;height:560' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1052'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Codificação</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1053" type="#_x0000_t202" style='position:absolute; left:7740;top:13484;width:1400;height:580' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1053'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Teste<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1054" style='position:absolute;flip:y' from="2223,12224" to="2223,14744"> <v:stroke startarrow="block" startarrowwidth="wide" startarrowlength="long" endarrow="block" endarrowwidth="wide" endarrowlength="long"/> </v:line><v:line id="_x0000_s1055" style='position:absolute;flip:y' from="5383,13144" to="5383,14744"> <v:stroke startarrow="block" startarrowwidth="wide" startarrowlength="long" endarrow="block" endarrowwidth="wide" endarrowlength="long"/> </v:line><v:line id="_x0000_s1056" style='position:absolute;flip:x y' from="6823,13624" to="6823,14784"> <v:stroke startarrow="block" startarrowwidth="wide" startarrowlength="long" endarrow="block" endarrowwidth="wide" endarrowlength="long"/> </v:line><v:line id="_x0000_s1057" style='position:absolute;flip:y' from="8463,14144" to="8463,14764"> <v:stroke startarrow="block" startarrowwidth="wide" startarrowlength="long" endarrow="block" endarrowwidth="wide" endarrowlength="long"/> </v:line><v:line id="_x0000_s1058" style='position:absolute;flip:x y' from="3943,12624" to="3943,14744"> <v:stroke startarrow="block" startarrowwidth="wide" startarrowlength="long" endarrow="block" endarrowwidth="wide" endarrowlength="long"/> </v:line><v:line id="_x0000_s1059" style='position:absolute' from="3220,11664" to="3840,11664"/> <v:line id="_x0000_s1060" style='position:absolute' from="4720,12204" to="5220,12204"/> <v:line id="_x0000_s1061" style='position:absolute' from="6220,12664" to="6820,12664"/> <v:line id="_x0000_s1062" style='position:absolute' from="7700,13144" to="8140,13144"/> <v:line id="_x0000_s1063" style='position:absolute' from="9180,13604" to="9820,13604"/> <v:line id="_x0000_s1064" style='position:absolute' from="3820,11684" to="3820,12004"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1065" style='position:absolute' from="5200,12224" to="5220,12484"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1066" style='position:absolute' from="6800,12644" to="6800,12944"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1067" style='position:absolute' from="8120,13164" to="8120,13484"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1068" style='position:absolute' from="9820,13604" to="9820,13844"> <v:stroke endarrow="block"/> </v:line></v:group></v:group><![endif]-->
Page 19: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Análise e Engenharia de Sistemas: Inicia-se com o estabelecimento dos requisitos para todos os

elementos do sistema e prossegue com a atribuição de certo subconjunto desses requisitos ao software.

Quanto mais dados forem coletados em nível de sistema, menor será a probabilidade de haver “bugs” no

sistema, consequentemente diminuirá os futuros reparos no mesmo.

Análise de Requisitos de Software: No software o processo de coleta de requisitos é intensificado e

concentrado. O engenheiro de software deve compreender o domínio da informação para o software e a

função de desempenho e interface exigidos. É importante saber o que o cliente quer que o sistema tenha,

com relação a recursos. Os requisitos são documentados e revistos com o cliente, tanto para o sistema

como para o software.

Projeto: O projeto envolve muitos passos que se divide em quatro atributos distintos do programa:

estrutura de dados, arquitetura de software, detalhes procedimentais e caracterização de interface. O modo

de fazer o projeto traduz quanto à qualidade antes de iniciar a codificação.

Codificação: O projeto deve ser traduzido numa linguagem de máquina legível.

Testes: Inicia a realização de testes em todas as instruções a procura de erros. O resultado real deve

concordar com o resultado exigido.

Manutenção: É provável que o software sofrerá mudanças depois que for entregue ao cliente. A

manutenção de software reaplica cada uma das etapas precedentes do ciclo de vida a um programa

existente, e não a um novo.

Alguns problemas podem surgir quando o paradigma de ciclo de vida clássico é aplicado como:

os projetos reais raramente seguem o fluxo seqüencial que o modelo propõe; muitas vezes é difícil para o

cliente declarar todas as exigências explicitamente; o cliente deve ter paciência, pois qualquer erro

detectado após a revisão do programa de trabalho pode ser desastroso.

Page 20: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

2.2. PROTOTIPAÇÃO

A prototipação é um processo que capacita o desenvolvedor a criar um modelo de software que

será implementado. O modelo pode assumir uma das três formas [Pr95]:

• um protótipo em papel ou modelo baseado em PC que retrata a interação homem-máquina de uma

forma que capacita o usuário a entender quanta interação ocorrerá;

• um protótipo de trabalho que implementa algum subconjunto da função exigida do software

desejado;

• um programa existente que executa parte ou toda a função desejada, mas que tem outras

características que serão melhoradas em um novo esforço de desenvolvimento.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1130" style='position:absolute;left:0;text-align:left; margin-left:66.6pt;margin-top:9.05pt;width:256pt;height:251.6pt;z-index:12' coordorigin="3120,8115" coordsize="5120,5032" o:allowincell="f"> <v:oval id="_x0000_s1131" style='position:absolute;left:3300;top:8307;width:4940; height:4840' fillcolor="gray" strokecolor="white"/> <v:oval id="_x0000_s1132" style='position:absolute;left:4640;top:9387;width:2240; height:2380'/> <v:line id="_x0000_s1133" style='position:absolute;flip:y' from="6420,8727" to="7120,9547" strokecolor="white"/> <v:line id="_x0000_s1134" style='position:absolute' from="6960,10547" to="8200,10547" strokecolor="white"/> <v:line id="_x0000_s1135" style='position:absolute' from="3320,10627" to="4600,10627" strokecolor="white"/> <v:line id="_x0000_s1136" style='position:absolute' from="4480,8647" to="5260,9507" strokecolor="white"/> <v:line id="_x0000_s1137" style='position:absolute;flip:x' from="4020,11627" to="4980,12387" strokecolor="white"/> <v:line id="_x0000_s1138" style='position:absolute' from="6480,11647" to="7380,12567" strokecolor="white"/> <v:shape id="_x0000_s1139" type="#_x0000_t202" style='position:absolute; left:5097;top:8547;width:1540;height:800' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1139'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'><b style='mso-bidi-font-weight: normal'>Coleta e <o:p></o:p></b></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Refinamento dos requisitos</b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1140" type="#_x0000_t202" style='position:absolute; left:6760;top:9387;width:1280;height:800' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1140'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoHeader style='tab-stops:0cm'><b style='mso-bidi-font-weight: normal'><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt'>Projeto<o:p></o:p></span></b></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>rápido<o:p></o:p></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1141" type="#_x0000_t202" style='position:absolute; left:6700;top:11027;width:1340;height:860' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1141'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Construção do protótipo<o:p></o:p></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1142" type="#_x0000_t202" style='position:absolute; left:4660;top:11810;width:2440;height:1200' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1142'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Avaliação do protótipo pelo cliente<o:p></o:p></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1143" type="#_x0000_t202" style='position:absolute; left:3440;top:10807;width:1520;height:740' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1143'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'><b style='mso-bidi-font-weight: normal'>Refinamento do protótipo<o:p></o:p></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1144" type="#_x0000_t202" style='position:absolute; left:3580;top:9467;width:1760;height:1100' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1144'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Engenharia do produto<o:p></o:p></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1145" style='position:absolute;flip:y' from="4700,9590" to="6440,10690"> <v:stroke dashstyle="1 1" endcap="round"/> </v:line><v:line id="_x0000_s1146" style='position:absolute;flip:y' from="5180,10470" to="6920,11570"> <v:stroke dashstyle="1 1" endcap="round"/> </v:line><v:line id="_x0000_s1147" style='position:absolute' from="4620,8115" to="4960,8455"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1148" style='position:absolute;flip:x y' from="3860,8595" to="4160,8895"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1149" type="#_x0000_t202" style='position:absolute; left:3120;top:8255;width:760;height:380' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1149'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Fim</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1150" style='position:absolute' from="6840,8255" to="8240,9195"> <v:stroke endarrow="block"/> </v:line><v:shapetype id="_x0000_t13" coordsize="21600,21600" o:spt="13" adj="16200,5400" path="m@0,0l@0@1,0@1,0@2@0@2@0,21600,21600,10800xe"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="val #0"/> <v:f eqn="val #1"/> <v:f eqn="sum height 0 #1"/> <v:f eqn="sum 10800 0 #1"/> <v:f eqn="sum width 0 #0"/> <v:f eqn="prod @4 @3 10800"/> <v:f eqn="sum width 0 @5"/> </v:formulas> <v:path o:connecttype="custom" o:connectlocs="@0,0;0,10800;@0,21600;21600,10800" o:connectangles="270,180,90,0" textboxrect="0,@1,@6,@2"/> <v:handles> <v:h position="#0,#1" xrange="0,21600" yrange="0,10800"/> </v:handles> </v:shapetype><v:shape id="_x0000_s1151" type="#_x0000_t13" style='position:absolute; left:5240;top:10224;width:1158;height:625;rotation:-2030336fd' fillcolor="#969696"/> </v:group><![endif]-->
Page 21: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 2.2: Prototipação

Como mostra a figura 2.2 . [Pr95], a prototipação inicia-se com a coleta de requisitos. Faz-se

então um projeto rápido contendo os aspectos que serão visíveis ao cliente. O projeto rápido leva à

construção de um protótipo que será avaliado pelo cliente/usuário. Esta avaliação será usada para refinar

requisitos para o software desenvolvido. O protótipo serve como um mecanismo para identificar os

requisitos do software.

A prototipação pode ser problemática pelas seguintes razões [Pr95]:

• o cliente quer resultados e muitas vezes não saberá ou não entenderá que um protótipo pode estar

longe do software ideal, que ele nem sequer imagina como é. Mesmo assim, a gerência de

desenvolvimento cede às reclamações e tenta encurtar o prazo de entregar, o qual já estava

prolongado.

• o desenvolvedor na pressa de colocar um protótipo em funcionamento, é levado a usar um sistema

operacional ou linguagem de programação imprópria, por simplesmente serem os únicos à disposição

ou estar mais familiarizado.

Page 22: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Mesmo que ocorrer em problemas, a prototipação é um

paradigma eficiente da engenharia de software. O segredo é o bom

entendimento entre o desenvolvedor e o cliente.

2.3. O MODELO ESPIRAL

O modelo espiral foi desenvolvido para abranger as melhores características tanto do ciclo de vida

clássico como da prototipação. O modelo define quatro importantes atividades representadas pelos quatro

quadrantes mostrados na figura 2.3 [Pr95], onde a cada ciclo tem-se uma versão:

Planejamento: determinação dos objetivos, alternativos e restrições.

Análise dos riscos: análise de alternativas e identificação/resolução dos riscos.

Engenharia: desenvolvimento do produto no nível seguinte.

Avaliação feita pelo cliente: avaliação dos resultados da engenharia.

Baseado principalmente em decisões de prosseguir/não prosseguir de acordo com a avaliação,

seja do cliente ou do desenvolvedor, o modelo espiral tende à um trajetória que ruma para o modelo mais

completo do sistema.

O paradigma de modelo espiral, é atualmente a abordagem mais voltada para o

desenvolvimento de software e sistemas em grande escala. Ele usa uma abordagem evolucionária,

capacitando o desenvolvedor e o cliente a entender e reagir aos riscos, em cada etapa evolutiva da espiral.

Usa a prototipação como um mecanismo de redução de riscos, e a mesma pode ser aplicada em qualquer

ponto evolutivo. Porém, pode ser difícil convencer grandes clientes de que a abordagem evolutiva é

controlável. Se um grande risco não for descoberto com certeza ocorrerão problemas.

Page 23: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000
, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1152" style='position:absolute;left:0;text-align:left; margin-left:84.05pt;margin-top:137.85pt;width:207.35pt;height:162.9pt; z-index:13' coordorigin="3949,6336" coordsize="4147,3258" o:allowincell="f"> <v:line id="_x0000_s1153" style='position:absolute' from="3949,9594" to="7499,9594" strokecolor="white"/> <v:line id="_x0000_s1154" style='position:absolute;flip:y' from="4464,6336" to="8096,6408" strokecolor="white"/> </v:group><v:group id="_x0000_s1179" style='position:absolute;left:0; text-align:left;margin-left:-12.6pt;margin-top:5.8pt;width:420.1pt;height:275.35pt; z-index:17' coordorigin="2016,2484" coordsize="8402,5507"> <v:rect id="_x0000_s1180" style='position:absolute;left:3830;top:2484;width:3534; height:5494' fillcolor="gray"/> <v:group id="_x0000_s1181" style='position:absolute;left:2016;top:2497; width:8402;height:5494' coordorigin="2016,2517" coordsize="8402,5494"> <v:line id="_x0000_s1182" style='position:absolute' from="5605,2517" to="5638,8011" strokecolor="white"/> <v:shape id="_x0000_s1183" type="#_x0000_t75" style='position:absolute; left:4173;top:3522;width:2987;height:3108'> <v:imagedata src="./mono1482000_arquivos/image006.wmz" o:title=""/> <v:textbox style='mso-next-textbox:#_x0000_s1183'/> </v:shape><v:shape id="_x0000_s1184" type="#_x0000_t202" style='position:absolute; left:4011;top:2607;width:1547;height:417' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1184'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Planejamento<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1185" type="#_x0000_t202" style='position:absolute; left:5721;top:2662;width:1824;height:686' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1185'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Análise de Riscos<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1186" type="#_x0000_t202" style='position:absolute; left:4011;top:7267;width:1498;height:581' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1186'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Avaliação do cliente<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1187" type="#_x0000_t202" style='position:absolute; left:5930;top:7304;width:1287;height:544' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1187'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Engenharia</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1188" style='position:absolute' from="5687,5345" to="7348,5889" strokeweight="2pt"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1189" style='position:absolute' from="4335,3568" to="5345,5037"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1190" style='position:absolute' from="3390,4783" to="4253,4783"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1191" style='position:absolute;rotation:-849303fd; flip:y' from="3406,4914" to="4529,4943"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1192" style='position:absolute;rotation:24257841fd' from="3336,4960" to="4924,5149"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1193" style='position:absolute;flip:y' from="3602,5454" to="5003,5853"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1194" style='position:absolute;rotation:-915027fd; flip:y' from="3595,5720" to="4910,6057"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1195" style='position:absolute;rotation:20956359fd; flip:y' from="3517,5969" to="4791,6367"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1196" style='position:absolute' from="7706,3204" to="8618,3204"/> <v:line id="_x0000_s1197" style='position:absolute;flip:x' from="5882,3204" to="7706,4819"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1198" style='position:absolute' from="7850,4068" to="8714,4068"/> <v:line id="_x0000_s1199" style='position:absolute;flip:x' from="6745,4068" to="7850,4693"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1200" style='position:absolute' from="6973,6270" to="7934,6270"/> <v:line id="_x0000_s1201" style='position:absolute' from="6875,6651" to="7836,6651"/> <v:line id="_x0000_s1202" style='position:absolute' from="6892,6923" to="7853,6923"/> <v:line id="_x0000_s1203" style='position:absolute;flip:x y' from="5898,5617" to="6957,6270"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1204" style='position:absolute;flip:x y' from="6029,5980" to="6875,6633"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1205" style='position:absolute;flip:x y' from="6094,6451" to="6892,6923"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1206" type="#_x0000_t202" style='position:absolute; left:2234;top:2789;width:1547;height:1160' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1206'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoPlainText><span style='font-family:"Times New Roman"'>Coleta inicial dos requisitos e planejamento do projeto<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1207" type="#_x0000_t202" style='position:absolute; left:7485;top:4788;width:2915;height:720' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1207'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Decisão de prosseguir/não prosseguir.</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1208" type="#_x0000_t202" style='position:absolute; left:7861;top:6084;width:2557;height:417' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1208'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoPlainText><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt;font-family:"Times New Roman"'>Protótipo de <i style='mso-bidi-font-style: normal'>software</i> inicial.<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1209" type="#_x0000_t202" style='position:absolute; left:7917;top:6948;width:2160;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1209'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'><span style='font-size:9.0pt; mso-bidi-font-size:10.0pt'>Sistema construído pela engenharia<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1210" type="#_x0000_t202" style='position:absolute; left:8637;top:3780;width:1440;height:1296' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1210'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoPlainText><span style='font-family:"Times New Roman"'>Análise dos riscos baseada na reação do cliente<o:p></o:p></span></p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1211" type="#_x0000_t202" style='position:absolute; left:7917;top:6516;width:2160;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1211'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoHeader style='tab-stops:0cm'><span style='font-size:9.0pt; mso-bidi-font-size:12.0pt'>Protótipo de <i style='mso-bidi-font-style: normal'>software</i> inicial.</span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1212" type="#_x0000_t202" style='position:absolute; left:8637;top:2625;width:1551;height:1083' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1212'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoPlainText><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt;font-family:"Times New Roman"'>Análise dos riscos baseada nos requisitos iniciais.<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1213" type="#_x0000_t202" style='position:absolute; left:2016;top:4209;width:1440;height:1152' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1213'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Planejamento baseado nos comentários do cliente.</p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1214" type="#_x0000_t202" style='position:absolute; left:2157;top:5652;width:1440;height:636' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1214'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Avaliação do cliente</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1215" type="#_x0000_t202" style='position:absolute; left:7488;top:5508;width:2613;height:611' o:allowincell="f" filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1215'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Na direção de um sistema concluído.<o:p></o:p></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1216" style='position:absolute' from="3600,3532" to="4320,3532" o:allowincell="f"/> <v:line id="_x0000_s1217" style='position:absolute' from="3888,5220" to="7344,5220" o:allowincell="f" strokecolor="white"/> </v:group></v:group><![if gte mso 9]><o:OLEObject Type="Embed" ProgID="CorelDraw.Gráficos.8" ShapeID="_x0000_s1183" DrawAspect="Content" ObjectID="_1065335397"> </o:OLEObject> <![endif]><![endif]-->
Page 24: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 2.3: O modelo espiral.

2.4. TÉCNICAS DE QUARTA GERAÇÃO

O paradigma técnicas de quarta geração (4GT) abrange um amplo conjunto de ferramentas para

o desenvolvimento de software que tem uma coisa em comum, cada uma delas possibilita que o

desenvolvedor especifique alguma característica do software num nível elevado. O código fonte é gerado

automaticamente, tendo por base a especificação do desenvolvedor. Praticamente pode-se dizer à

máquina, em linguagem natural, as especificações que se quer para o software.

O paradigma 4GT está representado na figura 2.4 [Pr95], inicia-se com uma etapa de coleta de

requisitos, possibilita resultados em um pequeno período de tempo. A parte de codificação, geração de

telas, relatórios, consultas, em fim a programação propriamente dita, se torna automatizada. A parte

considerada difícil, ou mesmo rotineira, seria a coleta de dados com o cliente. Saber o que o cliente quer,

ainda é o principal problema de todos os paradigmas.

Com a utilização da técnica de 4GT, talvez seja possível passar da coleta de exigências

diretamente para a implementação. Porém, mesmo usando uma técnica de 4GT é preciso fazer um

planejamento do sistema para evitar problemas de má qualidade, manutenção ruim e má aceitação do

cliente.

Page 25: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Os prós e contras deste paradigma: com raras exceções os 4GTs se limitam as aplicações de

sistemas de informação comercial. Mas, utilizando ferramentas CASE, que agora suportam o uso das

4GTs, para a geração automática de esqueleto de código para as aplicações de engenharia em tempo real.

Os dados preliminares coletados em empresas que estão usando 4GT parecem indicar redução na

qualidade de planejamento e análise para aplicações pequenas e intermediárias. Entretanto o uso das

4GTs ainda exige tanto ou mais análise planejamento e teste.

Figura 2.4: Técnicas de quarta geração (4GT).

Este capítulo mostrou definição de Engenharia de Software e os paradigmas Ciclo de Vida

Clássico, Prototipação, Modelo Espiral e Técnicas de Quarta Geração. Onde pode-se observar que a

Engenharia de Software tem por objetivo chegar a qualidade do software.

No próximo capítulo serão citados definições de Qualidade e de Qualidade de Software.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1427" style='position:absolute;left:0;text-align:left; margin-left:45pt;margin-top:4.85pt;width:306pt;height:2in;z-index:26' coordorigin="3168,8928" coordsize="6120,2880" o:allowincell="f"> <v:rect id="_x0000_s1428" style='position:absolute;left:7768;top:10596; width:1520;height:740'/> <v:rect id="_x0000_s1429" style='position:absolute;left:6228;top:10076; width:1520;height:868'/> <v:rect id="_x0000_s1430" style='position:absolute;left:4688;top:9556;width:1520; height:740'/> <v:rect id="_x0000_s1431" style='position:absolute;left:3168;top:8928;width:1520; height:740'/> <v:line id="_x0000_s1432" style='position:absolute' from="3688,11736" to="8628,11736"/> <v:line id="_x0000_s1433" style='position:absolute;flip:y' from="5488,10296" to="5488,11736"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1434" style='position:absolute;flip:y' from="8608,11336" to="8608,11716"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1435" style='position:absolute' from="4688,9196" to="5388,9196"/> <v:line id="_x0000_s1436" style='position:absolute' from="5368,9196" to="5368,9556"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1437" style='position:absolute' from="6228,9716" to="7008,9716"/> <v:line id="_x0000_s1438" style='position:absolute' from="6988,9716" to="6988,10076"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1439" style='position:absolute' from="7748,10276" to="8608,10276"/> <v:line id="_x0000_s1440" style='position:absolute' from="8568,10276" to="8568,10596"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1441" type="#_x0000_t202" style='position:absolute; left:3312;top:8992;width:1360;height:660' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1441'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Coleta de requisitos<o:p></o:p></span></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1442" type="#_x0000_t202" style='position:absolute; left:4752;top:9568;width:1540;height:648' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1442'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Estratégia de projeto<o:p></o:p></span></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1443" type="#_x0000_t202" style='position:absolute; left:6192;top:9996;width:1584;height:948' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1443'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Implementação usando Linguagem de 4ª Geração<o:p></o:p></span></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1444" type="#_x0000_t202" style='position:absolute; left:7828;top:10676;width:1400;height:600' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1444'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoHeading7 align=center style='text-align:center'><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Teste<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1445" style='position:absolute;flip:y' from="6912,10900" to="6912,11764"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1446" style='position:absolute;flip:y' from="3684,9648" to="3684,11808"> <v:stroke endarrow="block"/> </v:line></v:group><![endif]-->
Page 26: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000
Page 27: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

3. ASPECTOS DE QUALIDADE

A seguir são apresentadas definições sobre qualidade e qualidade de software mostrando os

benefícios de ter um produto com qualidade.

3.1. QUALIDADE

Existem diversas definições sobre qualidade. Algumas pessoas que tentaram uma definição

simples chegaram a frases como:

• Qualidade é estar em conformidade com os requisitos dos clientes [Jr00].

• Qualidade é antecipar e satisfazer os desejos dos clientes. [Jr00]

• Qualidade é escrever tudo o que se deve fazer e fazer tudo o que foi escrito [Jr00].

Segundo a atual norma brasileira sobre o assunto (NBR ISO 8402), qualidade é [Jr00]:

Page 28: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

A totalidade das características de uma entidade que lhe confere a capacidade de satisfazer às

necessidades explícitas e implícitas.

Esta definição formal exige alguns complementos, principalmente para definir o que são as

entidades, as necessidades explícitas e as necessidades implícitas. A entidade é o produto do qual está

sendo falado, que pode ser um bem ou um serviço. As necessidades explícitas são as próprias condições e

objetivos propostos pelo produtor. As necessidades implícitas incluem as diferenças entre os usuários, a

evolução no tempo, as implicações éticas, as questões de segurança e outras visões subjetivas.

Um aspecto interessante da qualidade é que não basta que ela exista. Ela deve ser reconhecida pelo

cliente. Por isso, é necessário que exista algum tipo de certificação oficial, emitida com base em um

padrão. Alguns certificados mais comuns são:

• O selo do SIF de inspeção da carne

• O selo da ABIC nos pacotes de café

• O certificado da Secretaria de Saúde para restaurantes (classe "A" são os melhores)

• A classificação em estrelas dos hotéis

• Os certificados de qualidade da série ISO-9000

ISO-9000 é um padrão de qualidade, reconhecido mundialmente para avaliação de empresas. Para que

seja possível realizar uma avaliação e um julgamento, é necessário haver um padrão ou norma. Existem

alguns organismos normalizadores reconhecidos mundialmente:

• ISO - International Organization for Standardization

• IEEE - Instituto de Engenharia Elétrica e Eletrônica

• ABNT - Associação Brasileira de Normas Técnicas

Page 29: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

A norma ISO-9000, por exemplo, foi criada pela ISO para permitir que todas as empresas do

mundo possam avaliar e julgar sua qualidade. Existindo um padrão único mundial, uma empresa do

Brasil, mesmo não tendo nenhum contato com uma outra empresa na Europa, pode garantir a ela a

qualidade de seu trabalho.

A Certificação em uma norma ou padrão, é a emissão de um documento oficial indicando a

conformidade com esta determinada norma ou padrão. É claro que, antes da emissão do certificado, é

preciso realizar todo um processo de avaliação e julgamento de acordo com uma determinada norma.

Embora uma empresa possa auto-avaliar-se ou ser avaliada por seus próprios clientes, o termo

Certificação costuma ser aplicado apenas quando efetuado por uma empresa independente e idônea,

normalmente especializada neste tipo de trabalho. No Brasil, o INMETRO é o órgão do governo

responsável pelo credenciamento destas instituições que realizam a certificação de sistemas de qualidade.

Uma das evoluções mais importantes no estudo da qualidade está em notar que a qualidade do

produto é algo bom, mas que qualidade do processo de produção é ainda mais importante.

Hoje em dia, é possível consultar normas e padrões tanto para produtos quanto para processos.

Obviamente, os certificados mais valiosos são aqueles que certificam o processo de produção de um

produto e não aqueles que simplesmente certificam o produto. Entretanto, é comum encontrar empresas

que perseguem os dois tipos de padrão de qualidade. [Jr00]

3.2. QUALIDADE DE SOFTWARE

Qualidade de software é definida como sendo a conformidade a requisitos funcionais e de

desempenho explicitamente declarados, a padrões de desenvolvimento claramente documentados e a

características implícitas que são esperadas de todo software profissionalmente desenvolvido [Pr95].

Esta definição serve para enfatizar três pontos importantes:

Page 30: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Os requisitos de software são a base a partir da qual a qualidade é medida. A falta de conformidade

aos requisitos significa falta de qualidade.

• Padrões especificados definem um conjunto de critérios de desenvolvimento que orientam a

maneira segundo a qual o software passa pelo trabalho de engenharia. Se os critérios não forem

seguidos, o resultado quase que seguramente será a falta de qualidade.

• Há um conjunto de requisitos implícitos que freqüentemente não são mencionados. Se o software

se adequar aos seus requisitos explícitos mas deixar de cumprir seus requisitos implícitos, a qualidade

de software será suspeita.

A qualidade de software é uma combinação complexa de fatores que variarão de acordo com diferentes aplicações e clientes que as solicitam.

Em uma organização de Sistemas de informação que aprende a partir dos seus próprios erros, a

prevenção é a ordem do dia. Prevenindo o aparecimento de defeitos, problemas, e retrabalho, libera-se

todos para que se concentrem na adição de valor ao cliente.

O melhoramento da qualidade leva à diminuição dos custos devido a diminuição de operações de depuração e retrabalho, aumentando-se a produtividade, que, por sua vez, aumenta a demanda de desenvolvimento de software e das habilidades de manutenção, fazendo com que a empresa e o departamento cresçam em tamanho e lucratividade

O melhoramento da qualidade possui um foco principal, a satisfação do cliente. A qualidade

alinha o negócio com as necessidades e expectativas presentes e futuras dos clientes. A satisfação dos

clientes possui diversos aspectos:

• Qualidade - conformidade para com as exigências válidas do cliente.

• Custo - tão baixo quanto possível, conforme as exigências do cliente.

• Distribuição - disponibilidade e confiabilidade do sistema de informação onde e quando for

Page 31: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

exigido.

• Entrega - pontualmente.

O gerenciamento da qualidade total possui três componentes: planejamento, resolução de

problemas e gerenciamento de processos. A qualidade começa com as exigências do cliente e termina

com o cliente satisfeito ou deliciado. O planejamento da qualidade identifica, em um nível superior, as

exigências dos clientes com relação à qualidade dos sistemas de software, confiabilidade, ciclo de vida,

taxa de defeitos e custos.

O planejamento da qualidade é mais qualitativo que quantitativo, concentra-se no entendimento

das necessidades dos clientes, e as traduz em objetivos quantitativos. A resolução de problemas e o

gerenciamento de processos são quantitativos, concentram-se nas medidas e análises para conduzir os

melhoramentos na qualidade e produtividade. O planejamento da qualidade ajuda a direcionar o

melhoramento dos processos de software, maximizando sua efetividade.

O planejamento da qualidade é liderado pela alta-gerência. Avaliando a voz do cliente, do negócio

e dos empregados, através de levantamentos, grupos focais e outros instrumentos de coleta de dados, a

alta-gerência identifica as principais preocupações de seus clientes. Entre estas prioridades principais, a

alta-gerência negocia com as hierarquias gerenciais para estabelecer metas, alvos e planos para a obtenção

de melhoramentos excepcionais em cada uma destas áreas de satisfação do cliente.

A qualidade não é apenas a ausência de defeitos. Na perspectiva do cliente, a qualidade significa

tanto a presença de valor assim como a ausência dos defeitos. Os clientes querem valor de longo prazo,

que lhes economize tempo, esforço e frustração. A qualidade não está apenas no produto, mas também em

todo o serviço fornecido, desde as exigências de desenvolvimento até os concertos de bugs, e do

relacionamento estabelecido com o cliente.

A qualidade custa dinheiro, mas o fornecimento de um produto de qualidade custa muito menos

do que o fornecimento de um produto ordinário. Os custos invisíveis de falha de software, desperdício de

tempo, retrabalho e possíveis multas de garantia ultrapassam enormemente os custos de fornecimento de

qualidade. Existem três custos de qualidade [Ar94]:

Page 32: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Custo de falha: aparecem quando o software falha antes ou depois de seu lançamento. As faltas e

falhas exigem análises, depuração, retrabalho, reteste, e instalação.

• Custos avaliáveis: incluem os custos de inspecionar ou testar o software antes de seu lançamento

para encontrar defeitos. Nas boas empresas estes custos são de até 25% do total; nas empresas mais

pobres, os custos avaliáveis podem chegar a até 50%.

• Custos de prevenção: incluem os custos de treinamento e da aplicação de métodos e ferramentas

para prevenir defeitos através da aplicação de processos ótimos de melhoramento contínuo da

qualidade.

A qualidade é[Ar94]:

• um processo sistemático para o melhoramento contínuo, não uma função ou departamento.

• o trabalho de todos, e não de alguns poucos especialistas.

• aplicável a todas as atividades, não apenas à fabricação.

• o que o comprador quer e precisa, e não o que os fornecedores querem fornecer.

• a aplicação continua das técnicas de melhoramento da qualidade, e não uma periódica inquisição

de qualidade.

• os fundamentos para o planejamento, criação, e automatização de todos os processos.

Para que o desenvolvimento de software seja um sucesso, todas as pessoas envolvidas no processo

devem partilhar a mesma filosofia. Se não há filosofia, o trabalho de um entrará em contradição com o

trabalho do outro.

Ter uma filosofia resolve outro grande problema encontrado no desenvolvimento de software:

fixação pelo ego. A fixação pelo ego ocorre quando a pessoa sente um vínculo emocional com a obra

Page 33: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

criada; e esta fixação é difícil de superar.

A fixação pelo ego é facilmente reconhecida pelo comportamento defensivo acompanhada de

comentários como “Eu gastei quatro semanas naquilo!”, ou “As pessoas trabalhando no sistema B ficarão

perturbadas se você confundi-las com isso.” A melhor maneira de se lidar com fixação pelo ego é afirmar

sua filosofia, pois sua lógica é poderosa e suas conclusões inescapáveis.

Não é qualquer filosofia ao acaso que funcionará. A melhor filosofia é a simples. A filosofia que

toma uma vida para se impor pode desenvolver disciplina, mas não deixa tempo para se apreciar os frutos

do trabalho. A filosofia da excelência em software necessita ser simples, porém poderosa.

A qualidade do software produzido deve ser sempre o guia para o planejamento da evolução de

seu ambiente de produção e manutenção de software. Qualidade não significa simplesmente testar.

Qualidade em software é uma série de capacidades e práticas ao longo do ciclo de vida do software, como

Gerência de Requerimentos, Automação de Testes e Gerência de Configuração, além destas, as práticas

de Desenvolvimento Componentizado, Modelagem Visual e o uso de um Processo Iterativo Controlado

são as melhores práticas para o sucesso de ambientes de software.

Este capítulo mostrou definições de Qualidade, a qual deve ser reconhecida pelo cliente, por

isso é necessário que exista algum tipo de certificação oficial emitida com base em um padrão. O capítulo

mostrou também definições de Qualidade de Software, onde o melhoramento da qualidade leva à

diminuição dos custos devido a diminuição de operações de depuração e retrabalho, aumentando-se a

produtividade que, por sua vez, aumenta a demanda de desenvolvimento de software e das habilidades de

manutenção, fazendo com que a empresa e o departamento cresça em tamanho e lucratividade. O analista

possui um foco principal, a satisfação do cliente; a qualidade alinha o negócio com as necessidades e

expectativas, presentes e futuras dos clientes. A qualidade custa dinheiro, mas o fornecimento de um

produto de qualidade custa muito menos do que o fornecimento de um produto ordinário. Os custos

invisíveis de falha de software, desperdício de tempo, retrabalho e possíveis multas de garantia,

ultrapassam enormemente os custos de fornecimento de qualidade.

O próximo capítulo apresenta conceitos de modelagem orientada a objetos, onde pode ser

Page 34: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

observado que esta é uma das modelagens que seguindo corretamente seus conceitos o analista terá um

software com qualidade, cumprindo os aspectos discutidos neste capítulo.

4. MODELAGEM ORIENTADA A OBJETOS

Page 35: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Este capítulo mostra como a modelagem orientada a objetos foi criada, explica os seus conceitos e

também sobre a metodologia UML

No início dos anos 60, em conexão com uma linguagem chamada Simula-67, desenvolvida por

Kristen Nygaard e Ole-Johan Dahl no Centro Norueguês de Computação, a Simula-67 apresentou pela

primeira vez os conceitos de classes, rotinas correlatas e subclasses muito parecidos com as atuais

linguagens orientada a objetos.

Em meados da década de 70, cientistas do Xerox Palo Alto Reserch Center (Xerox PARC)

criaram a linguagem Smalltalk, a primeira e robusta linguagem orientada a objetos. Nesta linguagem,

cada um dos seus elementos são implementados como um objeto. No desenvolvimento da Smalltalk,

todos os aspectos da linguagem, o ambiente de programação e a cultura envolvida foram orientada a

objetos e até hoje ela é considerada a mais pura destas linguagens. Os desenvolvimentos da Simula-67 e

da Smalltalk precipitaram muito do trabalho acontecendo atualmente. A Simula-67 demonstrou a potência

da modelagem de uma linguagem de programação baseada em classes, assim como a idéia da

possibilidade de armazenar junto dados e operações. Ela trouxe o reconhecimento de que esforço de

programação poderia ser economizado, se propriedades comuns a objetos pudessem ser pré-programadas.

Nos anos 80, a linguagem C tornou-se uma linguagem popular de desenvolvimento, não só para

microcomputadores como para diversas arquiteturas e ambientes. No final da última década, Bjarne

Stroustrup, da AT&T Bell Laboratories, expandiu a linguagem C, criando a C++ , que suporta

programação objeto-orientada. As subseqüentes versões comerciais e os incrementos nas ferramentas da

linguagem C++, assim como um maior número de distribuidoras, ajudaram a chamar a atenção da

comunidade de software à programação objeto-orientada. Com a C++, os programadores estavam aptos a

aprender o paradigma de uma forma mais popular e familiar, sem a necessidade de investir em

linguagem e ambientes diferentes. E também a linguagem Java que é a tendência atual, é uma liguagem

pura orientada a objetos.

O incremento de complexidade tecnológica, entretanto, é o acelerador paralelo para o uso do

paradigma. A modelagem orientada a objetos oferece o melhor caminho no manejo de complexidade

tecnológica, permite programação com incrementos de alto nível de abstração, do objeto para classe e

para a biblioteca de classes, resultando em aplicações completas.

Page 36: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Construir um software é um processo que envolve o entendimento de um problema que alguém

possui, construção de uma solução para esse problema, implementação dessa solução dentro de um

computador e modificação dos hábitos das pessoas para a implantação dessa solução dentro do ambiente

que dela necessita.

Não é possível construir uma especificação, análise ou implementação para um sistema uma única

vez. Qualquer projeto que procure implementar o tradicional modelo de software Waterfall começando

com uma especificação fechada, passando por uma única fase de análise, depois por projeto e, finalmente,

programação, sofrerá ajustes, correções, e provavelmente o que será implantado ao final não será

exatamente o que foi especificado.

Admitir a necessidade de iteratividade do ciclo de produção de software e planejamos o projeto

para tal é o primeiro requerimento necessário para se produzir software com mais qualidade

Mesmo com a implantação da orientação a objeto o retrabalho continua. A primeira constatação

diz respeito à equipe de um projeto. Produzir software cada vez mais é um trabalho de equipe, pois os

sistemas são cada vez maiores, mais complexos e envolvem um maior número de requerimentos a serem

cumpridos, impossíveis de ser absorvidos por uma única pessoa.[Br00]

Vários conceitos fazem parte da modelagem Orientada a Objetos. Tais conceitos estão descritos

nas seções seguintes.

4.1. OBJETOS

Objeto é uma coisa para a qual a ação, pensamento ou sentimento é direcionado. Qualquer coisa

visível ou tangível; uma substância ou produto material.

Page 37: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Em orientação a objetos:

Objeto é uma abstração de alguma coisa em um domínio de problemas, exprimindo as

capacidades de um sistema de manter informações sobre ela, interagir com elas, ou ambos; um

encapsulamento de valores de atributos e de seus serviços exclusivos.

4.2. ATRIBUTOS

Os atributos descrevem o estado de um objeto. São constituídos por dois componentes um nome

de atributo e um valor de atributo e podem ser considerados como dados locais associados a um objeto.

[Pa00]

4.3. MÉTODOS

Métodos especificam a maneira como as operações são codificadas no software. Eles

descrevem os possíveis comportamentos associados a um objeto. Representam a ação que pode ser

executada por um objeto ou sobre um objeto. O desempenho de um comportamento pode resultar na

modificação de valores dos atributos do objeto. Assim a execução de um método pode conduzir a uma

transformação nos dados locais do objeto, podendo ser vista como um processo de transformação entre

dois estados. Cada método possui um nome e um corpo que desempenha a ação ou comportamento

associado ao nome do método. [Ma97] [Pa00].

4.4. CLASSES

Classe é um número de coisas agrupadas devido a certas semelhanças ou traços comuns.

Page 38: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Em orientação a objetos:

Classe é uma descrição de um ou mais objetos com um conjunto uniforme de atributos e serviços, incluindo uma descrição de como criar novos objetos na classe.

Uma classe é uma descrição de um conjunto de objetos similares. Uma classe consiste em métodos e dados que resumem as características comuns de um conjunto de objetos. A habilidade em abstrair descrições de métodos e dados comuns a um conjunto de objetos e armazená-los em uma classe é a centralização da capacidade da orientação ao objeto. Definir classes significa posicionar codificação reutilizável em um depósito comum em vez de expressá-lo várias vezes. Em outras palavras, as classes contêm os moldes para a criação de objetos. A definição de uma classe auxilia a esclarecer a definição de um objeto, um objeto é uma instância de uma classe.

Uma biblioteca de classe para aplicação específica é chamada de pacote. Os pacotes diferem-se

das bibliotecas de classe somente pelo grau: um pacote é uma biblioteca de classe voltada a uma

determinada categoria de aplicação. Construir e refinar aplicações a partir de pacotes é mais rápido e fácil

do que iniciar o trabalho com bibliotecas de classe genéricas. No entanto, pacote não será muito útil fora

do domínio da aplicação, pelo fato de conter classes de aplicações específicas. [Wi93]

4.5. TIPO DE OBJETOS

Um Tipo de Objeto é uma categoria de objeto. Um objeto é uma instância de um tipo de objeto.

O termo classe se refere à implementação no software, do tipo de objeto. Tipo de objeto é uma

noção conceitual. Ele especifica uma família de objetos, sem estipular como eles são implementados. Os

tipos de objeto são especificados durante a análise baseada em objetos. Os detalhes das classes são

determinados no projeto baseado em objetos.

Em análise e projeto baseados em objeto é interessante o comportamento do objeto. Quando um

software é projetado, os módulos do software baseado em objeto são baseados em tipos de objeto. O

software que implementa o objeto contém estruturas de dados e operações que expressam o

comportamento do objeto. As operações são codificadas como métodos. A representação que o software

Page 39: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

baseado em objeto faz do objeto é, portanto, uma coleção de tipos de dados e métodos embalados juntos.

[Ma97]

4.6. ENCAPSULAMENTO

Encapsulamento é o termo formal que descreve a junção de métodos e dados dentro de um objeto de maneira que o acesso aos dados seja permitido somente por meio dos próprios métodos do objeto. Nenhuma outra parte do programa orientado a objetos pode operar diretamente em um dado do objeto. A comunicação entre um conjunto de objetos ocorre exclusivamente por meio de mensagens explícitas. Ele é o isolamento proporcionado pela linguagem aos elementos que fazem parte de uma estrutura ou classes. Desta forma, os dados e funções de uma determinada classe somente poderão ser acessados através de objetos desta mesma classe. [Wi93] [Pr00]

O encapsulamento diminui o trabalho no desenvolvimento de um novo sistema, e esta é sua maior

vantagem. Se um analista reunir os aspectos mais instáveis do trabalho de análise, então a alteração dos

requisitos será muito mais simples. Localizar a instabilidade é essencial. O encapsulamento agrupa os

aspectos relacionados, minimiza o fluxo entre as diferentes partes do trabalho e separa certos requisitos

específicos que outras partes da especificação podem usar. [Co96]

O ocultamento de informação protege os dados de um objeto contra corrupção. Se todos os

programas pudessem acessar os dados de qualquer maneira que os usuários desejassem, os dados

poderiam ser facilmente adulterados ou usados para fins indevidos. O encapsulamento protege os dados

contra utilização arbitrária e que fujam aos objetivos. [Ma97]

O encapsulamento esconde dos usuários de um objeto, os detalhes da implementação interna. Os

usuários compreendem quais operações podem ser solicitadas de um objeto, mas não conhecem os

detalhes de como a operação é executada. Todas as características específicas dos dados de um objeto e a

codificação de suas operações ficam escondidas. [Ma97]

O encapsulamento é importante porque ele separa estas duas coisas: como o objeto se comporta, e

como o objeto é implementado. Isso permite que as implementações no objeto sejam modificadas, sem

que se tenha que alterar as aplicações que os utilizam.

Page 40: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

É mais fácil alterar programas que utilizam encapsulamento, porque cada tipo de objeto é

modificado de cada vez. Se um objeto for alterado, apenas as operações e as estruturas de dados

associadas aquele objeto são afetadas e, normalmente, apenas algumas dessas operações e estruturas.

[Ma97]

4.7. SUBCLASSES

As subclasses às vezes são referenciadas como classes derivadas. Em outras ocasiões, os termos

pai e filho são usados para indicar a relação entre uma classe e uma subclasse. As classes-pai estão

localizadas acima das classes-filho na hierarquia. As classes mais altas na hierarquia são chamadas de

superclasses. Um exemplo de classe-pai e classe-filho é mostrado na figura 4.1.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1218" style='position:absolute; left:0;text-align:left;margin-left:-1.4pt;margin-top:9pt;width:374.4pt; height:181pt;z-index:18' coordorigin="2240,11120" coordsize="7488,3620"> <v:group id="_x0000_s1219" style='position:absolute;left:2240;top:11120; width:7488;height:3620' coordorigin="2240,11120" coordsize="7488,3620"> <v:group id="_x0000_s1220" style='position:absolute;left:4832;top:11120; width:2592;height:1152' coordorigin="6048,10800" coordsize="2592,1152"> <v:shape id="_x0000_s1221" type="#_x0000_t202" style='position:absolute; left:6048;top:10800;width:2592;height:1152'> <v:textbox style='mso-next-textbox:#_x0000_s1221'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Classe-pai</p> <p class=MsoNormal>Características Classe-pai</p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> <p class=MsoNormal>Métodos Classe-pai</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1222" style='position:absolute' from="6048,11520" to="8640,11520"/> <v:line id="_x0000_s1223" style='position:absolute' from="6048,11088" to="8640,11088"/> </v:group><v:group id="_x0000_s1224" style='position:absolute;left:2240; top:12868;width:2736;height:1820' coordorigin="2240,12868" coordsize="2736,1820"> <v:shape id="_x0000_s1225" type="#_x0000_t202" style='position:absolute; left:2240;top:12868;width:2736;height:1820'> <v:textbox style='mso-next-textbox:#_x0000_s1225'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Classe-filha-1</p> <p class=MsoNormal>Características Classe-pai</p> <p class=MsoNormal align=center style='text-align:center'>+</p> <p class=MsoHeader style='tab-stops:0cm'><span style='font-size:10.0pt; mso-bidi-font-size:12.0pt'>Características Classe-filha-1<o:p></o:p></span></p> <p class=MsoNormal>Métodos Classe-pai</p> <p class=MsoNormal align=center style='text-align:center'>+</p> <p class=MsoNormal>Métodos Classe-filha-1</p> <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1226" style='position:absolute' from="2240,13876" to="4976,13876"/> <v:line id="_x0000_s1227" style='position:absolute' from="2240,13156" to="4976,13156"/> </v:group><v:group id="_x0000_s1228" style='position:absolute;left:6992; top:12868;width:2736;height:1872' coordorigin="7632,8640" coordsize="2736,1872"> <v:shape id="_x0000_s1229" type="#_x0000_t202" style='position:absolute; left:7632;top:8640;width:2736;height:1872'> <v:textbox style='mso-next-textbox:#_x0000_s1229'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Classe-filha-2</p> <p class=MsoFooter style='tab-stops:0cm'>Características Classe-pai</p> <p class=MsoFooter align=center style='text-align:center;tab-stops:0cm'>+</p> <p class=MsoFooter style='tab-stops:0cm'>Características Classe-filha-2</p> <p class=MsoFooter style='tab-stops:0cm'>Métodos Classe-pai</p> <p class=MsoFooter align=center style='text-align:center;tab-stops:0cm'>+</p> <p class=MsoFooter style='tab-stops:0cm'>Métodos Classe-filha-2</p> <p class=MsoFooter style='tab-stops:0cm'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> <p class=MsoFooter style='tab-stops:0cm'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> <p class=MsoFooter style='tab-stops:0cm'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1230" style='position:absolute' from="7632,8928" to="10368,8928"/> <v:line id="_x0000_s1231" style='position:absolute' from="7632,9648" to="10368,9648"/> </v:group><v:line id="_x0000_s1232" style='position:absolute' from="3680,12580" to="3680,12868"/> <v:line id="_x0000_s1233" style='position:absolute' from="8432,12580" to="8432,12868"/> <v:line id="_x0000_s1234" style='position:absolute;flip:x' from="3680,12580" to="6128,12580"/> <v:line id="_x0000_s1235" style='position:absolute' from="6128,12580" to="8432,12580"/> </v:group><v:shapetype id="_x0000_t5" coordsize="21600,21600" o:spt="5" adj="10800" path="m@0,0l0,21600,21600,21600xe"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="val #0"/> <v:f eqn="prod #0 1 2"/> <v:f eqn="sum @1 10800 0"/> </v:formulas> <v:path gradientshapeok="t" o:connecttype="custom" o:connectlocs="@0,0;@1,10800;0,21600;10800,21600;21600,21600;@2,10800" textboxrect="0,10800,10800,18000;5400,10800,16200,18000;10800,10800,21600,18000;0,7200,7200,21600;7200,7200,14400,21600;14400,7200,21600,21600"/> <v:handles> <v:h position="#0,topLeft" xrange="0,21600"/> </v:handles> </v:shapetype><v:shape id="_x0000_s1236" type="#_x0000_t5" style='position:absolute; left:5984;top:12272;width:288;height:288'/> </v:group><![endif]-->
Page 41: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.1. Exemplo de classe-pai e classe-filho

Os objetos são criados quando uma mensagem requisitando a sua criação é recebida pela classe-

pai. O novo objeto pega seus métodos e dados a partir das suas classes-pai. Os dados apresentam-se de

duas formas: variáveis de classe e variáveis de instância. As variáveis de classe têm valores armazenados

em uma classe; as variáveis de instância contêm valores associados unicamente a cada instância ou objeto

criado a partir de uma classe.

4.8. HERANÇA

O termo herança significa a possibilidade de se criar uma entidade baseada nas características

das classes já existentes. Portanto, uma classe pode ser baseada em classes já existentes, herdando assim

suas variáveis e funções. A herança pode ser definida de duas formas. A primeira é conhecida como

herança simples. Neste caso uma classe deriva apenas de uma outra classe, ou seja, a classe derivada

possui apenas uma classe-pai, como foi mostrado no exemplo da figura 4.1. Na herança múltipla uma

classe pode derivar de várias outras classes simultaneamente e, neste caso, a classe derivada terá tantas

classes-pai quanto forem as classes das quais ela herda as características. [Pr00]

Herança é um mecanismo de compartilhamento automático de métodos e dados entre classes,

subclasses e objetos. Um mecanismo poderoso não encontrado em sistemas de procedimentos, a

hereditariedade permite aos programadores criar novas classes programando somente a diferença entre

elas e a classe-pai.

Page 42: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Os objetos com métodos e variáveis de instância comuns são colecionados juntos em uma classe.

As classes são organizadas em hierarquias e os mecanismos de hereditariedade fornecem

automaticamente, a cada subclasse, os métodos e dados das classes-pai. As subclasses são criadas pela

programação das diferenças entre as classes disponíveis em uma biblioteca e os requisitos particulares da

aplicação. [Wi93]

A vantagem obtida em se organizar as classes em hierarquias é que os atributos e métodos,

herdados por todas as subclasses em um particular nível podem agora ser descritos em superclasse

correspondente, ao invés de ter de ser repetido para cada uma das subclasses em nível mais baixo. Esses

atributos são herdados pelas subclasses sempre que seus valores são necessários. Da mesma forma os

métodos definidos a nível de superclasse podem ser herdados pelas correspondentes subclasses. [Pa00]

4.9. POLIMORFISMO

Polimorfismo significa que a mesma solicitação poderia ser enviada a diferentes classes e que as

classes implementariam essa solicitação de formas ligeiramente diferentes. Polimorfismo significa muitas

formas. É a habilidade de duas ou mais classes responderem à mesma solicitação, cada uma a seu modo.

[Ma97]

Polimorfismo é o fenômeno de quando os objetos agem em resposta às mensagens que recebem. A

mesma mensagem pode resultar em ações completamente diferentes quando recebidas por objetos

diferentes. Com o polimorfismo, um usuário pode enviar uma mensagem genérica e deixar os detalhes de

implementação para o objeto receptor. A mensagem print, por exemplo, quando enviada a uma figura ou

diagrama, acessará métodos diferentes de impressão daqueles acessados quando a mesma mensagem de

print é enviada para um documento textual.

O polimorfismo é estimulado pelo mecanismo de hereditariedade. É comum armazenar protocolos

para as funções utilitárias como impressão em hierarquia de classe tão alta quanto possível. As variações

necessárias ao comportamento de impressão são armazenadas abaixo, na hierarquia, para sobrescrever os

métodos mais genéricos quando apropriado. Neste caminho, os objetos ficam prontos e preparados para

responder adequadamente às mensagens de utilitário como impressão enquanto o método que implementa

Page 43: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

a função de impressão pode existir na classe imediata do objeto ou vários níveis acima da classe do

objeto.[Wi93]

4.10. MENSAGENS

Os objetos possuem habilidade para agir. A ação ocorre quando um objeto recebe uma

mensagem, isto é, uma solicitação para que se comporte de uma determinada maneira. Quando os

programas orientados a objetos são executados, os objetos estão recebendo, interpretando e respondendo

mensagens de objetos.

O conjunto de mensagens para as quais um objeto pode responder é chamado de protocolo. O

protocolo para um ícone pode consistir em mensagens solicitadas pelo clique do botão de um mouse

quando o usuário coloca o cursor em um ícone.

Quando um programa orientado a objetos está sendo executado, ocorrem três eventos. Primeiro, os

objetos são criados conforme a necessidade. Segundo, as mensagens movimentam-se de um objeto para

outro conforme o programa processa as informações internamente ou responde à entrada a partir do

usuário. Quando os objetos não são mais necessários eles são apagados e a memória é liderada[Wi93]

4.11. ABSTRAÇÃO

Definição de Abstrair é o princípio de ignorar os aspectos de um assunto não relevantes para o

propósito em questão, tornando possível uma concentração maior nos assuntos principais. [Co96]

A abstração é a seleção que um analista faz de alguns aspectos ignorando outros. Quando a

abstração é usada, admite-se que o que está sendo considerado é complexo; em vez de tentar compreender

o todo, seleciona-se parte dele.

Page 44: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

A abstração de procedimentos tem como definição o princípio de que qualquer operação com um

efeito bem definido pode ser tratada por seus usuários como uma entidade única, mesmo que a operação

seja realmente conseguida através de alguma seqüência de operações de nível mais baixo.

É uma forma de abstração usada extensivamente por analistas de requisitos, assim como por

projetistas e programadores. Ela é freqüentemente caracterizada como uma abstração função/subfunção.

Dividir o processo em subpassos é um método básico de tratamento da complexidade.

A abstração de dados consiste em definir um tipo de dado conforme as operações aplicáveis aos

objetos deste tipo. Porém, estes objetos só podem ser modificados e observados através destas operações.

A modelagem orientada a objetos estimula os programadores e usuários a pensarem sobre

aplicações em termos abstratos. Começando com um conjunto de objetos, os programadores são

conduzidos a criar um comportamento comum e encaixá-lo em superclasses abstratas. As bibliotecas de

classe detêm um depósito de elementos comuns e reutilizáveis. A hereditariedade mantém

automaticamente as relações entre classes organizadas hierarquicamente em uma biblioteca de classes. Os

pacotes contêm bibliotecas de classe de domínio específico. Cada nível de abstração faz com que o

trabalho de programação fique mais fácil porque existe maior disponibilidade de codificação reutilizável.

[Wi93]

4.12. RETENÇÃO DE ESTADO

A persistência refere-se à permanência de um objeto, isto é, ao tempo pelo qual ele aloca espaço

e permanece acessível na memória do computador. Na maioria das linguagens orientadas a objetos, as

instâncias de classes são criadas enquanto o programa é executado. Algumas dessas instâncias são

necessárias somente por um pequeno período de tempo. Quando um objeto não é mais necessário, ele é

destruído e o espaço de memória alocado é recuperado. A recuperação automática do espaço de memória

é chamada comumente de coleta de lixo.

Depois que um programa orientado a objetos foi executado, os objetos construídos não ficam

Page 45: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

armazenados; isto é, eles não são mais persistentes. Um banco de dados orientado a objetos mantém uma

distinção entre objetos criados somente para o tempo da execução e aqueles de armazenamento

permanente. Os objetos armazenados permanentemente são tratados como persistentes. [Wi93]

4.13. REUTILIZAÇÃO

O benefício primordial da reutilização é a maior produtividade. Num sentido superficial, a

equipe de desenvolvimento de software que alcança 80% de reutilização é quatro vezes mais produtiva do

que a equipe que alcança somente 20% de reutilização.

É usual se ver equipes de desenvolvimento alcançando produtividade de 50 a 200% a partir de

aplicações sérias e deliberadas da reutilização de software.

Outra razão para enfatizar a reutilização é o aumento da qualidade. Um componente de software

reutilizável sempre requer mais garantia de qualidade do que o seu correspondente não reutilizável. Mas,

se essa é a má notícia, a boa notícia é que os componentes com reutilização pesada terão maior qualidade

do que os componentes comuns. Os erros são eliminados mais rápidos e cuidadosamente.

Níveis de Reutilização:

A) Reutilizando Código: é usualmente interpretada como fazer uma chamada de sub-rotina para um

módulo numa biblioteca, pode tomar qualquer das formas a seguir:

• Corte e colagem de código-fonte: é a forma mais primitiva de reutilização. O engenheiro de

software corre o risco de introduzir erros durante a cópia do código original. Pior é o problema de

gerenciamento da configuração. É quase sempre impossível para o gerente controlar os usos muitas

vezes modificados do bloco de código original.

• Inclusões ao nível de fonte: muitas linguagens de programação têm recursos para incorporar

código-fonte de uma biblioteca num programa. Tais facilidades são referidas como recursos de

Page 46: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

inclusão e cópia. O problema é que se o código de biblioteca original é modificado, todos os outros

programas que o incluem devem ser recompilados.

• Herança: as linguagens de programação baseadas em objetos incluem herança única ou múltipla.

Isso acrescenta sintaxe para captar a semântica do domínio do problema e do domínio da

implementação.

• Encadeamentos binários: com a maior parte das linguagens de programação, a atividade de

compilação é seguida por uma atividade de linkedição na qual todos os módulos objeto necessários

são coligidos. Se o código reutilizado for modificado, ele deve ser recompilado e reinserido na

biblioteca; mas para os outros programas, tudo o que é necessário é outra linkedição, a fim de

incorporar os módulos de biblioteca modificados.

• Chamada em tempo de execução: em alguns ambientes, a união entre um programa e seus

componentes de biblioteca reutilizados não cabe até que o programa seja executado.

B) Reutilizando Resultados do Projeto: A razão mais obvia para esse nível de reutilização é facilitar o

transporte de uma aplicação para uma plataforma de destino inteiramente diferente em termos de

hardware/software.

C) Reutilizando Resultados da Análise: Esse nível de reutilização é apropriado nos casos em que a equipe

de projetos quer converter um sistema de uma tecnologia de hardware mais antiga para uma tecnologia

mais eficiente e mais nova. Os requisitos do usuário não são modificados, mas a arquitetura interna do

sistema, como está documentada nos diagramas do projeto baseado em objeto, pode ser inteiramente

nova. [Co93]

4.14. BENEFÍCIOS

Tendo em vista todas as características citadas neste capítulo, pode-se dizer que os benefícios

da Análise e Projeto baseados em objetos são [Ma97]:

• Reaproveitamento.

Page 47: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Estabilidade.

• O projetista pensa em termos de comportamento dos objetos e não em detalhes de baixo nível.

• Construção de objetos cada vez mais complexos.

• Confiabilidade.

• Verificação de precisão.

• Novos mercados de software.

• Desenvolvimento acelerado.

• Desenvolvimento de qualidade superior.

• Integridade.

• Programação facilitada.

• Manutenção facilitada.

• Criatividade.

• Ciclo de vida dinâmico.

• Refinamento durante a construção.

• Modelagem mais realista.

• Melhor comunicação entre profissionais de sistema e cliente/usuários.

• Modelos corporativos inteligentes.

• Especificações e projetos declarativos.

• Uma interface usuário-tela sedutora.

• Independência de projeto.

• Interoperabilidade.

• Processamento distribuído em larga escala.

Page 48: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Desempenho de máquina.

4.15. UML (Unified Modeling Language)

UML foi desenvolvida por Grady Booch, James Rumbaugh, e Ivar Jacobson . Eles possuem um

extenso conhecimento na área de modelagem orientado a objetos já que as três mais conceituadas

metodologias de modelagem orientado a objetos foram eles que desenvolveram e a UML é a junção do

que havia de melhor nestas três metodologias adicionado novos conceitos e visões da linguagem.

A UML é uma tentativa de padronizar a modelagem orientada a objetos de uma forma que

qualquer sistema, seja qual for o tipo, possa ser modelado corretamente, com consistência, fácil de se

comunicar com outras aplicações, simples de ser atualizado e compreensível.

Existem várias metodologias de modelagem orientada a objetos que até o surgimento da UML

causavam uma guerra entre a comunidade de desenvolvedores orientado a objetos. A UML busca acabar

com esta guerra trazendo as melhores idéias de cada uma destas metodologias e mostrando como deveria

ser a migração de cada uma para a UML.

Metodologias:

Método James Rumbaugh/OMT – Object Modeling Technique [Or00]: É considerada uma das mais

confortáveis notações pela similaridade com o modelo E/R e outras técnicas estruturadas. É visto como

um método conservador, forte na parte de análise e que não oferece uma notação para representar a

interação de mensagens entre objetos.

Método Grady Booch [Or00]: Foi inicialmente centrado em linguagens orientada a objetos. É considerada

forte em projeto e a parte de análise deverá ser aditivada com a participação de outros recém-agregados.

Page 49: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Método Jacobson [Or00]: Desenvolvido por Ivar Jacobson, com raízes em trabalhos que datam desde

1.967. É uma abordagem denominada Objectory e engloba dentre outros, os conceitos de use-case,

propostos por Jacobson antes da fusão.

Diante desta diversidade de conceitos, Grady Booch, James Rumbaugh e Ivar Jacobson decidiram

criar uma Linguagem de Modelagem Unificada. Eles disponibilizaram inúmeras versões preliminares da

UML para a comunidade de desenvolvedores e a resposta incrementou muitas novas idéias que

melhoraram ainda mais a linguagem.

UML é uma linguagem para unir a forma de comunicação da a equipe de software. Assim, todos

os membros envolvidos no processo produtivo de software podem compartilhar a mesma linguagem para

atividades como Engenharia de Negócios até Mecanismos de Teste.

A UML tem como objetivo[Jo00]]:

• Modelar de sistemas usando conceitos orientados a objetos;

• Estabelecer uma união fazendo com que métodos conceituais sejam também executáveis;

• Criar uma linguagem de modelagem usável tanto pelo homem quanto pela máquina.

A UML pode ser usada para :

• Mostrar as fronteiras de um sistema e suas principais funções utilizando autores e casos de uso;

• Ilustrar a realização de casos de uso com diagramas de interação;

• Representar uma estrutura estática de um sistema utilizando diagramas de classe;

Page 50: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Modelar o comportamento de objetos com diagramas de transição de estado;

• Revelar a arquitetura de implementação física com diagramas de componente e de implantação;

• Estender sua funcionalidade através de estereótipos.

A UML é uma linguagem padrão para especificar, visualizar, documentar e construir artefatos de

um sistema e pode ser utilizada com todos os processos ao longo do ciclo de desenvolvimento e através

de diferentes tecnologias de implementação. Buscou-se unificar as perspectivas entre diversos tipos de

sistemas e fases de desenvolvimento de forma que permitisse levar adiante determinados projetos que

antes não eram possíveis pelos métodos existentes.

Como a UML é uma linguagem de modelagem, não uma metodologia, sendo que muitas

metodologias consistem, pelo menos em princípio, de uma linguagem de modelagem e um procedimento

de uso dessa linguagem. A UML não prescreve explicitamente esse procedimento de utilização. Em

muitas formas, a linguagem de modelagem composta por sintaxe e semântica é a porção mais importante

do métodos, sendo certamente a parte chave na comunicação.

A UML define uma notação e um meta modelo. A notação é o material gráfico visto em modelos, é a sintaxe da linguagem de modelagem. Por exemplo, a notação de diagrama de classe define como são representados itens e conceitos como classe, associação e multiplicidade. Claro que isso conduz à pergunta do que exatamente seja o significado de uma associação ou multiplicidade ou até mesmo uma classe.

As técnicas foram projetadas na UML até certo ponto para ajudar as pessoas a fazerem um bom

uso da orientação a objeto, contudo técnicas diferentes apresentam vantagens diferentes. O diagrama de

classe ilustra modelos de classe, sendo bom e ruim para se aprender sobre objetos. Modelos de classe são

confortavelmente semelhantes a modelos de dados. Muitos dos princípios que trazem um bom modelo de

dados também traz um bom modelo de classe. O problema reside em que um modelo de classes não é

somente centrado em dados, tem de ser centrado em responsabilidade. Recomenda-se, no entanto, a

iniciação na UML a partir das notações mais simples, particularmente as de diagrama de classe .

Diagramas:

Page 51: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Os diagramas utilizados pela UML são compostos de nove tipos: diagrama de use case, de classes,

de objeto, de estado, de sequência, de colaboração, de atividade, de componente e o de execução. [Ba00]

• Diagrama Use-Case:

A modelagem de um diagrama use-case é uma técnica usada para descrever e definir os requisitos funcionais de um sistema. Eles são escritos em termos de atores externos, use-cases e o sistema modelado. Os atores representam o papel de uma entidade externa ao sistema como um usuário, um hardware, ou outro sistema que interage com o sistema modelado. Os atores iniciam a comunicação com o sistema através dos use-cases, onde o use-case representa uma seqüência de ações executadas pelo sistema e recebe do ator que lhe utiliza dados tangíveis de um tipo ou formato já conhecido, e o valor de resposta da execução de um use-case (conteúdo) também já é de um tipo conhecido, tudo isso é definido juntamente com o use-case através de texto de documentação.

Atores e use-cases são classes. Um ator é conectado a um ou mais use-cases através de

associações, e tanto atores quanto use-cases podem possuir relacionamentos de generalização que

definem um comportamento comum de herança em superclasses especializadas em subclasses. Exemplo

de um diagrama de use-case na figura 4.2 [Ba00].

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1447" style='position:absolute; left:0;text-align:left;margin-left:53.6pt;margin-top:11pt;width:316.8pt; height:195.4pt;z-index:27' coordorigin="3600,8044" coordsize="6336,3908" o:allowincell="f"> <v:group id="_x0000_s1448" style='position:absolute;left:3600;top:8044; width:6336;height:3700' coordorigin="3600,8064" coordsize="6336,3700"> <v:oval id="_x0000_s1449" style='position:absolute;left:4464;top:8208; width:720;height:432'/> <v:oval id="_x0000_s1450" style='position:absolute;left:4032;top:9064; width:720;height:432'/> <v:oval id="_x0000_s1451" style='position:absolute;left:3888;top:9944; width:720;height:432'/> <v:oval id="_x0000_s1452" style='position:absolute;left:4464;top:10840; width:720;height:432'/> <v:oval id="_x0000_s1453" style='position:absolute;left:6768;top:8064; width:720;height:432'/> <v:oval id="_x0000_s1454" style='position:absolute;left:5472;top:8064; width:720;height:432'/> <v:oval id="_x0000_s1455" style='position:absolute;left:5432;top:10984; width:720;height:432'/> <v:oval id="_x0000_s1456" style='position:absolute;left:8064;top:8352; width:720;height:432'/> <v:oval id="_x0000_s1457" style='position:absolute;left:6732;top:10864; width:720;height:432'/> <v:oval id="_x0000_s1458" style='position:absolute;left:8064;top:10500; width:720;height:432'/> <v:oval id="_x0000_s1459" style='position:absolute;left:8064;top:9416; width:720;height:432'/> <v:shape id="_x0000_s1460" type="#_x0000_t202" style='position:absolute; left:5328;top:8496;width:1152;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1460'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText2><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>Cadastrar Cliente<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1461" type="#_x0000_t202" style='position:absolute; left:3888;top:8560;width:1440;height:512' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1461'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText2><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>Abrir Conta Corrente<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1462" type="#_x0000_t202" style='position:absolute; left:3888;top:9440;width:1296;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1462'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Fechar conta corrente.<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1463" type="#_x0000_t202" style='position:absolute; left:3600;top:10284;width:1440;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1463'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Abrir Poupança<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1464" type="#_x0000_t202" style='position:absolute; left:3908;top:11224;width:1584;height:288' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1464'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Fechar Poupança<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1465" type="#_x0000_t202" style='position:absolute; left:5288;top:11332;width:1728;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1465'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Cadastrar Agência<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1466" type="#_x0000_t202" style='position:absolute; left:6192;top:8496;width:2448;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1466'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Remover ou Atualizar Cliente<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1467" type="#_x0000_t202" style='position:absolute; left:7920;top:8784;width:1440;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1467'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText2><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>Cadastra Dependente<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1468" type="#_x0000_t202" style='position:absolute; left:7776;top:9836;width:1728;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1468'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText2><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>Cadastrar Operação (Histórico)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1469" type="#_x0000_t202" style='position:absolute; left:7920;top:10880;width:2016;height:720' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1469'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Remover ou Atualizar Operações (Histórico)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:oval id="_x0000_s1470" style='position:absolute;left:6192;top:9568; width:288;height:288'/> <v:line id="_x0000_s1471" style='position:absolute;flip:x y' from="5760,9072" to="6048,9504"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1472" style='position:absolute;flip:x y' from="5184,8928" to="5904,9648"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1473" style='position:absolute;flip:x y' from="4896,9360" to="5616,9792"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1474" style='position:absolute;flip:x' from="4752,9936" to="5904,10080"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1475" style='position:absolute;flip:x' from="5184,10224" to="5760,10656"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1476" style='position:absolute;flip:y' from="6624,8928" to="7920,9504"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1477" style='position:absolute;flip:y' from="6336,9072" to="6480,9504"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1478" style='position:absolute' from="6624,9792" to="7920,9792"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1479" style='position:absolute' from="6768,10080" to="7920,10512"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1480" style='position:absolute' from="6624,10224" to="7056,10776"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1481" style='position:absolute' from="6336,9856" to="6336,10144"/> <v:line id="_x0000_s1482" style='position:absolute;flip:x' from="6192,10144" to="6336,10432"/> <v:line id="_x0000_s1483" style='position:absolute' from="6336,10144" to="6480,10432"/> <v:line id="_x0000_s1484" style='position:absolute' from="6048,10000" to="6624,10000"/> <v:shape id="_x0000_s1485" type="#_x0000_t202" style='position:absolute; left:5572;top:10428;width:1728;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1485'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText2><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>Administração <o:p></o:p></span></p> <p class=MsoBodyText2><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>do Banco<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><v:shape id="_x0000_s1486" type="#_x0000_t202" style='position:absolute; left:6768;top:11272;width:2160;height:680' filled="f" stroked="f"> <v:textbox> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Remover ou Atualizar Agência<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 52: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.2: Exemplo de um diagrama de use-cases.

• Diagrama de Classes:

O diagrama de classes demonstra a estrutura estática das classes de um sistema onde estas

representam as "coisas" que são gerenciadas pela aplicação modelada. Classes podem se relacionar com

outras através de diversas maneiras: associação (conectadas entre si), dependência (uma classe depende

ou usa outra classe), especialização (uma classe é uma especialização de outra classe), ou em pacotes

(classes agrupadas por características similares). Todos estes relacionamentos são mostrados no diagrama

de classes juntamente com as suas estruturas internas, que são os atributos e operações. O diagrama de

classes é considerado estático já que a estrutura descrita é sempre válida em qualquer ponto do ciclo de

vida do sistema. Um sistema normalmente possui alguns diagramas de classes, já que não são todas as

classes que estão inseridas em um único diagrama e uma certa classes pode participar de vários diagramas

de classes. Um exemplo do diagrama de classes na figura 4.3 [Ba00].

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1237" style='position:absolute;left:0;text-align:left; margin-left:.95pt;margin-top:7.6pt;width:438.4pt;height:137pt;z-index:19' coordorigin="2267,4550" coordsize="8768,2740"> <v:line id="_x0000_s1238" style='position:absolute' from="3275,6030" to="3275,6750"/> <v:shape id="_x0000_s1239" type="#_x0000_t202" style='position:absolute; left:4243;top:5826;width:573;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1239'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>0..1<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1240" type="#_x0000_t202" style='position:absolute; left:6715;top:5558;width:1872;height:432'> <v:textbox style='mso-next-textbox:#_x0000_s1240'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Veículo Alugado</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1241" type="#_x0000_t202" style='position:absolute; left:5071;top:6714;width:1152;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1241'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Caminhão</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1242" type="#_x0000_t202" style='position:absolute; left:6475;top:6714;width:1584;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1242'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Carro Sport</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1243" type="#_x0000_t202" style='position:absolute; left:8231;top:6712;width:1768;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1243'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Carro de Passeio</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1244" style='position:absolute;flip:y' from="5851,5990" to="6859,6710"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1245" style='position:absolute;flip:y' from="7579,5990" to="7579,6710"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1246" style='position:absolute;flip:x y' from="8299,5990" to="9307,6710"> <v:stroke endarrow="block"/> </v:line><v:group id="_x0000_s1247" style='position:absolute;left:2267;top:4550; width:4448;height:2728' coordorigin="2267,4550" coordsize="4448,2728"> <v:line id="_x0000_s1248" style='position:absolute' from="3275,5022" to="3275,5598"/> <v:shape id="_x0000_s1249" type="#_x0000_t202" style='position:absolute; left:2987;top:4962;width:432;height:288' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1249'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>1<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1250" type="#_x0000_t202" style='position:absolute; left:2683;top:4550;width:1152;height:432'> <v:textbox style='mso-next-textbox:#_x0000_s1250'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Cliente</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1251" type="#_x0000_t202" style='position:absolute; left:2271;top:5558;width:2016;height:432'> <v:textbox style='mso-next-textbox:#_x0000_s1251'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Contrato de Aluguel</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1252" type="#_x0000_t202" style='position:absolute; left:2267;top:6702;width:2304;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1252'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoPlainText><span style='font-family:"Times New Roman"'>Companhia de Aluguel de Veículos<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1253" style='position:absolute' from="4267,5766" to="6715,5766"/> <v:shape id="_x0000_s1254" type="#_x0000_t202" style='position:absolute; left:2787;top:5210;width:576;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1254'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>0..*<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1255" type="#_x0000_t202" style='position:absolute; left:3259;top:4982;width:864;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1255'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>possui<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1256" type="#_x0000_t202" style='position:absolute; left:4843;top:5414;width:1440;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1256'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>refere a</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1257" type="#_x0000_t202" style='position:absolute; left:2723;top:5930;width:576;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1257'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>0..*<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1258" type="#_x0000_t202" style='position:absolute; left:2947;top:6438;width:432;height:288' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1258'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>1<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1259" type="#_x0000_t202" style='position:absolute; left:3175;top:6134;width:1008;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1259'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>possui<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><v:shape id="_x0000_s1260" type="#_x0000_t202" style='position:absolute; left:8587;top:5990;width:2448;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1260'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Tipos de Veículos<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 53: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.3: Exemplo do Diagrama de Classes.

• Diagrama de Objetos:

O diagrama de objetos mostra os objetos que foram instanciados das classes. O diagrama de

objetos é como se fosse o perfil do sistema em um certo momento de sua execução. Os diagramas de

objetos não são tão importantes como os diagramas de classes, mas eles são muito úteis para exemplificar

diagramas complexos de classes ajudando muito em sua compreensão. Um exemplo de diagrama de

objetos na figura 4.4 [Ba00].

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1261" style='position:absolute; left:0;text-align:left;margin-left:9pt;margin-top:10pt;width:5in;height:171.2pt; z-index:20' coordorigin="2448,1584" coordsize="7200,3424"> <v:shape id="_x0000_s1262" type="#_x0000_t202" style='position:absolute; left:4896;top:1584;width:2304;height:1296'> <v:textbox style='mso-next-textbox:#_x0000_s1262'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Pablo:Cliente</p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> <p class=MsoNormal>Nome: “Pablo F. Santos</p> <p class=MsoNormal>Idade: 20</p> <p class=MsoNormal>CPF: 94168912-15</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1263" style='position:absolute' from="4896,2016" to="7200,2016"/> <v:shape id="_x0000_s1264" type="#_x0000_t202" style='position:absolute; left:2448;top:3856;width:2448;height:1152'> <v:textbox style='mso-next-textbox:#_x0000_s1264'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>2678: Contrato de Aluguel</p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> <p class=MsoNormal>Num_Contrato: 2678</p> <p class=MsoNormal>Veículo: “BMW 914”</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1265" style='position:absolute' from="2448,4288" to="4896,4288"/> <v:shape id="_x0000_s1266" type="#_x0000_t202" style='position:absolute; left:7200;top:3832;width:2448;height:1152'> <v:textbox style='mso-next-textbox:#_x0000_s1266'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>2679: Contrato de Aluguel</p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> <p class=MsoNormal>Num_Contrato: 2679</p> <p class=MsoNormal>Veículo: “Audi V8”</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1267" style='position:absolute' from="7200,4248" to="9648,4248"/> <v:line id="_x0000_s1268" style='position:absolute;flip:x' from="4176,2880" to="5184,3888"/> <v:line id="_x0000_s1269" style='position:absolute' from="6912,2880" to="7920,3888"/> </v:group><![endif]-->
Page 54: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.4: Exemplo do Diagrama de Objetos.

• Diagrama de Estado:

O diagrama de estado é tipicamente um complemento para a descrição das classes. Este diagrama

mostra todos os estados possíveis que objetos de uma certa classe podem se encontrar e mostra também

quais são os eventos do sistemas que provocam tais mudanças. Os diagramas de estado não são escritos

para todas as classes de um sistema, mas apenas para aquelas que possuem um número definido de

estados conhecidos e onde o comportamento das classes é afetado e modificado pelos diferentes estados.

Um exemplo de diagrama de estado na figura 4.5[Ba00].

Figura 4.5: Exemplo do Diagrama de Estado.

• Diagrama de Seqüência:

Um diagrama de seqüência mostra a colaboração dinâmica entre os vários objetos de um sistema.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1270" style='position:absolute;left:0;text-align:left; margin-left:6.35pt;margin-top:5.5pt;width:389.8pt;height:195.6pt;z-index:21' coordorigin="1708,9256" coordsize="7796,3912" o:allowincell="f"> <v:line id="_x0000_s1271" style='position:absolute' from="6768,11808" to="7776,11808"> <v:stroke endarrow="block"/> </v:line><v:group id="_x0000_s1272" style='position:absolute;left:1708;top:9256; width:7796;height:3912' coordorigin="1708,9256" coordsize="7796,3912"> <v:oval id="_x0000_s1273" style='position:absolute;left:1708;top:9460; width:288;height:288' fillcolor="black"/> <v:roundrect id="_x0000_s1274" style='position:absolute;left:4320;top:9360; width:1440;height:576' arcsize="10923f"/> <v:shape id="_x0000_s1275" type="#_x0000_t202" style='position:absolute; left:4464;top:9360;width:1152;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1275'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>No Térreo</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:roundrect id="_x0000_s1276" style='position:absolute;left:7632; top:9360;width:1296;height:576' arcsize="10923f"/> <v:shape id="_x0000_s1277" type="#_x0000_t202" style='position:absolute; left:7776;top:9360;width:1008;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1277'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Subindo</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:roundrect id="_x0000_s1278" style='position:absolute;left:2736; top:10928;width:1584;height:576' arcsize="10923f"/> <v:shape id="_x0000_s1279" type="#_x0000_t202" style='position:absolute; left:2932;top:10928;width:1296;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1279'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoPlainText><span style='font-family:"Times New Roman"'>Indo para o Térreo<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:roundrect id="_x0000_s1280" style='position:absolute;left:5260; top:11508;width:1440;height:576' arcsize="10923f"/> <v:shape id="_x0000_s1281" type="#_x0000_t202" style='position:absolute; left:5404;top:11508;width:1152;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1281'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Descendo</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:roundrect id="_x0000_s1282" style='position:absolute;left:7776; top:11508;width:1152;height:576' arcsize="10923f"/> <v:shape id="_x0000_s1283" type="#_x0000_t202" style='position:absolute; left:7920;top:11508;width:864;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1283'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>Parado</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1284" style='position:absolute' from="2016,9628" to="4320,9628"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1285" style='position:absolute' from="5760,9648" to="7632,9648"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1286" style='position:absolute' from="3312,9792" to="4320,9792"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1287" style='position:absolute' from="3312,9792" to="3312,10944"/> <v:line id="_x0000_s1288" style='position:absolute' from="8328,9936" to="8328,11520"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1289" style='position:absolute;flip:y' from="5904,12096" to="5904,12384"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1290" style='position:absolute;flip:y' from="3312,11520" to="3312,12816"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1291" style='position:absolute' from="5904,12384" to="8208,12384"/> <v:line id="_x0000_s1292" style='position:absolute;flip:y' from="8208,12096" to="8208,12384"/> <v:line id="_x0000_s1293" style='position:absolute' from="3312,12816" to="8640,12816"/> <v:line id="_x0000_s1294" style='position:absolute' from="8640,12096" to="8640,12816"/> <v:line id="_x0000_s1295" style='position:absolute' from="8928,9648" to="9504,9648"/> <v:line id="_x0000_s1296" style='position:absolute' from="9504,9648" to="9504,11808"/> <v:line id="_x0000_s1297" style='position:absolute;flip:x' from="8928,11808" to="9504,11808"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1298" type="#_x0000_t202" style='position:absolute; left:8640;top:10080;width:864;height:579' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1298'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Subir (andar)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1299" type="#_x0000_t202" style='position:absolute; left:7344;top:10080;width:1008;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1299'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText2><span style='font-size:10.0pt'>Chegar no andar<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1300" type="#_x0000_t202" style='position:absolute; left:6768;top:11276;width:1008;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1300'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Chegar no andar<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1301" type="#_x0000_t202" style='position:absolute; left:6480;top:12012;width:1440;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1301'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>descer (andar)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1302" type="#_x0000_t202" style='position:absolute; left:5184;top:12736;width:1872;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1302'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>tempo de espera<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1303" type="#_x0000_t202" style='position:absolute; left:3259;top:10083;width:1584;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1303'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Chegar no térreo<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1304" type="#_x0000_t202" style='position:absolute; left:5904;top:9256;width:1296;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1304'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>subir (andar)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group></v:group><![endif]-->
Page 55: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

O mais importante aspecto deste diagrama é que a partir dele percebe-se a seqüência de mensagens

enviadas entre os objetos. Ele mostra a interação entre os objetos, alguma coisa que acontecerá em um

ponto específico da execução do sistema. O diagrama de seqüência consiste em um número de objetos

mostrado em linhas verticais. O decorrer do tempo é visualizado observando-se o diagrama no sentido

vertical de cima para baixo. As mensagens enviadas por cada objeto são simbolizadas por setas entre os

objetos que se relacionam. Um exemplo do diagrama de seqüência na figura 4.6 [Ba00].

Figura 4.6: Exemplo do Diagrama de Seqüência.

• Diagrama de Colaboração:

Um diagrama de colaboração mostra de maneira semelhante ao diagrama de seqüência, a

colaboração dinâmica entre os objetos. Normalmente pode-se escolher entre utilizar o diagrama de

colaboração ou o diagrama de seqüência.

No diagrama de colaboração, além de mostrar a troca de mensagens entre os objetos, percebe-se

também os objetos com os seus relacionamentos. A interação de mensagens é mostrada em ambos os

diagramas. Se a ênfase do diagrama for o decorrer do tempo, é melhor escolher o diagrama de seqüência,

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1305" style='position:absolute;left:0;text-align:left; margin-left:70.75pt;margin-top:2.35pt;width:309.6pt;height:144.15pt;z-index:22' coordorigin="2016,4896" coordsize="6192,2883" o:allowincell="f"> <v:line id="_x0000_s1306" style='position:absolute' from="2720,5904" to="4160,5904"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1307" style='position:absolute' from="4320,6208" to="4608,6480"/> <v:shape id="_x0000_s1308" type="#_x0000_t202" style='position:absolute; left:4320;top:5596;width:1584;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1308'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:8.0pt;mso-bidi-font-size:10.0pt'>[Impressora Livre] Imprimir (arquivo)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1309" type="#_x0000_t202" style='position:absolute; left:2016;top:4896;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1309'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><u><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>:Computador<o:p></o:p></span></u></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1310" type="#_x0000_t202" style='position:absolute; left:3600;top:4896;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1310'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText3><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>:Servidor de Impressão<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1311" type="#_x0000_t202" style='position:absolute; left:5184;top:4896;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1311'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><u><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>:Impressora<o:p></o:p></span></u></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1312" type="#_x0000_t202" style='position:absolute; left:6768;top:4896;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1312'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><u><span style='font-size:9.0pt;mso-bidi-font-size: 10.0pt'>:Fila<o:p></o:p></span></u></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:rect id="_x0000_s1313" style='position:absolute;left:2592;top:5760; width:144;height:1728'/> <v:rect id="_x0000_s1314" style='position:absolute;left:4176;top:5904;width:144; height:1440;flip:x'/> <v:rect id="_x0000_s1315" style='position:absolute;left:5760;top:6192;width:144; height:864;flip:x'/> <v:rect id="_x0000_s1316" style='position:absolute;left:7344;top:6336;width:144; height:432'/> <v:line id="_x0000_s1317" style='position:absolute' from="2676,5472" to="2676,5760"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1318" style='position:absolute' from="2652,7485" to="2652,7773"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1319" style='position:absolute' from="4244,5472" to="4244,5904"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1320" style='position:absolute' from="4236,7344" to="4236,7776"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1321" style='position:absolute' from="5817,5472" to="5817,6192"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1322" style='position:absolute' from="7428,5472" to="7428,6336"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1323" style='position:absolute' from="7428,6771" to="7428,7779"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1324" style='position:absolute' from="5824,7056" to="5824,7776"> <v:stroke dashstyle="1 1"/> </v:line><v:line id="_x0000_s1325" style='position:absolute;flip:x' from="2739,7344" to="4179,7344"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1326" style='position:absolute;flip:x' from="4320,7056" to="5760,7056"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1327" style='position:absolute;flip:x' from="4320,6771" to="7344,6771"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1328" style='position:absolute' from="4320,6192" to="5760,6192"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1329" style='position:absolute' from="4608,6480" to="7344,6480"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1330" type="#_x0000_t202" style='position:absolute; left:5800;top:5944;width:2016;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1330'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:8.0pt;mso-bidi-font-size:10.0pt'>[Impressora Ocupada] Imprimir (arqquivo)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1331" type="#_x0000_t202" style='position:absolute; left:2736;top:5472;width:1728;height:288' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1331'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:8.0pt;mso-bidi-font-size:10.0pt'>Imprimir<span style="mso-spacerun: yes">  </span>(arquivo)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 56: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

mas se a ênfase for o contexto do sistema, é melhor dar prioridade ao diagrama de colaboração. Um

exemplo de diagrama de colaboração na figura 4.7 [Ba00].

Figura 4.7: Exemplo do Diagrama de Colaboração.

• Diagrama de Atividade:

Diagramas de atividade capturam ações e seus resultados. Eles focam o trabalho executado na implementação de uma operação (método), e suas atividades numa instância de um objeto. O diagrama de atividade é uma variação do diagrama de estado e possui um propósito um pouco diferente do diagrama de estado, que é o de capturar ações (trabalho e atividades que serão executados) e seus resultados em termos das mudanças de estados dos objetos. Um exemplo de diagrama de atividade na figura 4.8 [Ba00].

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1343" style='position:absolute;left:0;text-align:left; margin-left:5.95pt;margin-top:7.7pt;width:390pt;height:151.2pt;z-index:24' coordorigin="1840,5348" coordsize="7800,3024" o:allowincell="f"> <v:shape id="_x0000_s1344" type="#_x0000_t202" style='position:absolute; left:4484;top:7632;width:2160;height:288' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1344'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:8.0pt;mso-bidi-font-size:10.0pt'>^Impressora.Imprimir (arq)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:group id="_x0000_s1345" style='position:absolute;left:1840;top:5348; width:7800;height:3024' coordorigin="1840,5328" coordsize="7800,3024"> <v:oval id="_x0000_s1346" style='position:absolute;left:1872;top:5940; width:288;height:288' fillcolor="black" strokecolor="red"/> <v:oval id="_x0000_s1347" style='position:absolute;left:1888;top:7851; width:288;height:288' fillcolor="black"/> <v:oval id="_x0000_s1348" style='position:absolute;left:9296;top:5540; width:288;height:288' fillcolor="black"/> <v:oval id="_x0000_s1349" style='position:absolute;left:9252;top:5476; width:388;height:388' filled="f" fillcolor="black" strokecolor="red"/> <v:oval id="_x0000_s1350" style='position:absolute;left:1840;top:7804; width:388;height:388' filled="f" fillcolor="black" strokecolor="red"/> <v:shapetype id="_x0000_t4" coordsize="21600,21600" o:spt="4" path="m10800,0l0,10800,10800,21600,21600,10800xe"> <v:stroke joinstyle="miter"/> <v:path gradientshapeok="t" o:connecttype="rect" textboxrect="5400,5400,16200,16200"/> </v:shapetype><v:shape id="_x0000_s1351" type="#_x0000_t4" style='position:absolute; left:3868;top:5708;width:864;height:864'/> <v:roundrect id="_x0000_s1352" style='position:absolute;left:6416;top:5328; width:1584;height:720' arcsize="10923f"/> <v:roundrect id="_x0000_s1353" style='position:absolute;left:6432;top:6192; width:1584;height:720' arcsize="10923f"/> <v:roundrect id="_x0000_s1354" style='position:absolute;left:6432;top:7632; width:1584;height:720' arcsize="10923f"/> <v:roundrect id="_x0000_s1355" style='position:absolute;left:2980;top:7632; width:1584;height:720' arcsize="10923f"/> <v:line id="_x0000_s1356" style='position:absolute' from="2160,6128" to="3888,6128"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1357" style='position:absolute;flip:y' from="4752,5616" to="6480,6132"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1358" style='position:absolute' from="4752,6152" to="6480,6480"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1359" style='position:absolute' from="7152,6912" to="7152,7632"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1360" style='position:absolute' from="8000,5676" to="9296,5676"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1361" style='position:absolute;flip:x' from="4608,8064" to="6436,8064"> <v:stroke endarrow="open"/> </v:line><v:line id="_x0000_s1362" style='position:absolute;flip:x' from="2252,8000" to="2972,8000"> <v:stroke endarrow="open"/> </v:line><v:shape id="_x0000_s1363" type="#_x0000_t202" style='position:absolute; left:6416;top:5328;width:1584;height:720' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1363'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Mostrar Caixa de Mensagem “Disco Cheiro<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1364" type="#_x0000_t202" style='position:absolute; left:6432;top:6132;width:1440;height:864' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1364'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Mostrar Caixa de Mensagem “Imprimindo”<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1365" type="#_x0000_t202" style='position:absolute; left:6576;top:7716;width:1440;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1365'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Criar Arquivo PostScript<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1366" type="#_x0000_t202" style='position:absolute; left:3036;top:7716;width:1584;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1366'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Remover Caixa de Mensagem<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1367" type="#_x0000_t202" style='position:absolute; left:4464;top:6480;width:1728;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1367'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>[Espaço em disco]<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1368" type="#_x0000_t202" style='position:absolute; left:4464;top:5472;width:1440;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1368'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>[Disco Cheio]<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1369" type="#_x0000_t202" style='position:absolute; left:2160;top:5616;width:1728;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1369'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Imprimir Arquivo()<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group></v:group><![endif]-->
, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1332" style='position:absolute; left:0;text-align:left;margin-left:70.15pt;margin-top:17.35pt;width:252pt; height:79.8pt;z-index:23' coordorigin="2160,12528" coordsize="5040,1596" o:allowincell="f"> <v:shape id="_x0000_s1333" type="#_x0000_t202" style='position:absolute; left:2160;top:12672;width:1584;height:432'> <v:textbox style='mso-next-textbox:#_x0000_s1333'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><u>:Computador<o:p></o:p></u></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1334" type="#_x0000_t202" style='position:absolute; left:5904;top:13548;width:1296;height:432'> <v:textbox style='mso-next-textbox:#_x0000_s1334'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><u>:Impressora<o:p></o:p></u></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1335" type="#_x0000_t202" style='position:absolute; left:2160;top:13548;width:1584;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1335'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoBodyText3><span style='font-size:10.0pt'>:Servidor de Impressão<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1336" type="#_x0000_t202" style='position:absolute; left:5904;top:12672;width:1296;height:432'> <v:textbox style='mso-next-textbox:#_x0000_s1336'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><u>:Fila<o:p></o:p></u></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1337" style='position:absolute' from="2880,13104" to="2880,13536"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1338" style='position:absolute' from="3744,13804" to="5904,13804"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1339" style='position:absolute;flip:y' from="3744,12856" to="5904,13576"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1340" type="#_x0000_t202" style='position:absolute; left:2844;top:13104;width:1584;height:429' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1340'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>1:Imprimir (arq)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1341" type="#_x0000_t202" style='position:absolute; left:3888;top:12528;width:2160;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1341'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>[Impressora Ocupada] 1.2: Armazenar (arq)<o:p></o:p></span></p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1342" type="#_x0000_t202" style='position:absolute; left:4264;top:13244;width:1872;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1342'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>[Impressora Livre] 1.1: Imprimir (arq)<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 57: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.8: Exemplo do Diagrama de Atividade.

• Diagrama de Componente:

O diagrama de componente descreve os componentes de software e suas dependências entre si,

representando a estrutura do código gerado. Os componentes são a implementação na arquitetura física

dos conceitos e da funcionalidade definidos na arquitetura lógica (classes, objetos e seus

relacionamentos). Eles são tipicamente os arquivos implementados no ambiente de desenvolvimento. Um

exemplo do diagrama de componente é mostrado na figura 4.9 [Ba00].

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1370" style='position:absolute; left:0;text-align:left;margin-left:-1pt;margin-top:4.85pt;width:417.6pt; height:202.6pt;z-index:25' coordorigin="2268,6048" coordsize="8352,4052"> <v:group id="_x0000_s1371" style='position:absolute;left:2268;top:6048; width:2248;height:1748' coordorigin="1872,11088" coordsize="2248,1748"> <v:rect id="_x0000_s1372" style='position:absolute;left:1908;top:12304; width:864;height:288'/> <v:rect id="_x0000_s1373" style='position:absolute;left:1916;top:11764; width:864;height:288'/> <v:oval id="_x0000_s1374" style='position:absolute;left:1872;top:11232; width:904;height:388'/> <v:line id="_x0000_s1375" style='position:absolute' from="2296,11088" to="4032,11088"/> <v:line id="_x0000_s1376" style='position:absolute' from="4004,11088" to="4004,12816"/> <v:line id="_x0000_s1377" style='position:absolute;flip:x' from="2304,12816" to="4032,12816"/> <v:line id="_x0000_s1378" style='position:absolute' from="2300,12548" to="2300,12836"/> <v:line id="_x0000_s1379" style='position:absolute' from="2304,12056" to="2304,12344"/> <v:line id="_x0000_s1380" style='position:absolute' from="2304,11644" to="2304,11788"/> <v:line id="_x0000_s1381" style='position:absolute;flip:y' from="2304,11088" to="2304,11232"/> <v:shape id="_x0000_s1382" type="#_x0000_t202" style='position:absolute; left:2680;top:11520;width:1440;height:864' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1382'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Gerenciador de Comunicação.<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Comm.dll<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><v:group id="_x0000_s1383" style='position:absolute; left:5004;top:6048;width:2160;height:1748' coordorigin="4608,11088" coordsize="2160,1748"> <v:group id="_x0000_s1384" style='position:absolute;left:4608;top:11088; width:2160;height:1748' coordorigin="4608,11088" coordsize="2160,1748"> <v:group id="_x0000_s1385" style='position:absolute;left:4608;top:11088; width:2160;height:1748' coordorigin="1932,13048" coordsize="2160,1748"> <v:rect id="_x0000_s1386" style='position:absolute;left:1968;top:14264; width:864;height:288'/> <v:rect id="_x0000_s1387" style='position:absolute;left:1976;top:13724; width:864;height:288'/> <v:oval id="_x0000_s1388" style='position:absolute;left:1932;top:13192; width:904;height:388'/> <v:line id="_x0000_s1389" style='position:absolute' from="2356,13048" to="4092,13048"/> <v:line id="_x0000_s1390" style='position:absolute' from="4064,13048" to="4064,14776"/> <v:line id="_x0000_s1391" style='position:absolute;flip:x' from="2364,14776" to="4092,14776"/> <v:line id="_x0000_s1392" style='position:absolute' from="2360,14508" to="2360,14796"/> <v:line id="_x0000_s1393" style='position:absolute' from="2364,14016" to="2364,14304"/> <v:line id="_x0000_s1394" style='position:absolute' from="2364,13604" to="2364,13748"/> </v:group><v:line id="_x0000_s1395" style='position:absolute' from="5040,11088" to="5040,11232"/> </v:group><v:shape id="_x0000_s1396" type="#_x0000_t202" style='position:absolute; left:5472;top:11520;width:1296;height:1152' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1396'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Gráficos<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Gráficos.dll</span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><v:group id="_x0000_s1397" style='position:absolute; left:8088;top:6048;width:2532;height:1748' coordorigin="7992,11088" coordsize="2532,1748"> <v:group id="_x0000_s1398" style='position:absolute;left:7992;top:11088; width:2160;height:1748' coordorigin="7992,11088" coordsize="2160,1748"> <v:rect id="_x0000_s1399" style='position:absolute;left:8028;top:12304; width:864;height:288'/> <v:rect id="_x0000_s1400" style='position:absolute;left:8036;top:11764; width:864;height:288'/> <v:oval id="_x0000_s1401" style='position:absolute;left:7992;top:11232; width:904;height:388'/> <v:line id="_x0000_s1402" style='position:absolute' from="8416,11088" to="10152,11088"/> <v:line id="_x0000_s1403" style='position:absolute' from="10124,11088" to="10124,12816"/> <v:line id="_x0000_s1404" style='position:absolute;flip:x' from="8424,12816" to="10152,12816"/> <v:line id="_x0000_s1405" style='position:absolute' from="8420,12548" to="8420,12836"/> <v:line id="_x0000_s1406" style='position:absolute' from="8424,12056" to="8424,12344"/> <v:line id="_x0000_s1407" style='position:absolute' from="8424,11644" to="8424,11788"/> <v:line id="_x0000_s1408" style='position:absolute' from="8416,11088" to="8416,11232"/> </v:group><v:shape id="_x0000_s1409" type="#_x0000_t202" style='position:absolute; left:8796;top:11376;width:1728;height:1008' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1409'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Gerenciador de Banco de Dados<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Db.dll<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><v:group id="_x0000_s1410" style='position:absolute; left:5012;top:8352;width:2296;height:1748' coordorigin="4616,13392" coordsize="2296,1748"> <v:group id="_x0000_s1411" style='position:absolute;left:4616;top:13392; width:2160;height:1748' coordorigin="4896,13392" coordsize="2160,1748"> <v:group id="_x0000_s1412" style='position:absolute;left:4896;top:13392; width:2160;height:1748' coordorigin="5212,12728" coordsize="2160,1748"> <v:rect id="_x0000_s1413" style='position:absolute;left:5248;top:13944; width:864;height:288'/> <v:rect id="_x0000_s1414" style='position:absolute;left:5256;top:13404; width:864;height:288'/> <v:oval id="_x0000_s1415" style='position:absolute;left:5212;top:12872; width:904;height:388'/> <v:line id="_x0000_s1416" style='position:absolute' from="5636,12728" to="7372,12728"/> <v:line id="_x0000_s1417" style='position:absolute' from="7344,12728" to="7344,14456"/> <v:line id="_x0000_s1418" style='position:absolute;flip:x' from="5644,14456" to="7372,14456"/> <v:line id="_x0000_s1419" style='position:absolute' from="5640,14188" to="5640,14476"/> <v:line id="_x0000_s1420" style='position:absolute' from="5644,13696" to="5644,13984"/> <v:line id="_x0000_s1421" style='position:absolute' from="5644,13284" to="5644,13428"/> </v:group><v:line id="_x0000_s1422" style='position:absolute' from="5328,13392" to="5328,13536"/> </v:group><v:shape id="_x0000_s1423" type="#_x0000_t202" style='position:absolute; left:5760;top:13824;width:1152;height:1008' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1423'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Aplicação<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>App.exel</span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><v:line id="_x0000_s1424" style='position:absolute; flip:x y' from="3996,7776" to="5724,8352"> <v:stroke dashstyle="1 1" endarrow="open"/> </v:line><v:line id="_x0000_s1425" style='position:absolute;flip:y' from="6300,7776" to="6300,8352"> <v:stroke dashstyle="1 1" endarrow="open"/> </v:line><v:line id="_x0000_s1426" style='position:absolute;flip:y' from="6729,7776" to="9033,8352"> <v:stroke dashstyle="1 1" endarrow="open"/> </v:line></v:group><![endif]-->
Page 58: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.9: Exemplo do Diagrama de Componente

• Diagrama de Execução:

O diagrama de execução mostra a arquitetura física do hardware e do software no sistema. Pode mostrar os atuais computadores e periféricos, juntamente com as conexões que eles estabelecem entre si e pode mostrar também os tipos de conexões entre esses computadores e periféricos. Especifica-se também os componentes executáveis e objetos que são alocados para mostrar quais unidades de software são executados e em que destes computadores são executados. Um exemplo de diagrama de execução na figura 4.10[Ba00].

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1492" style='position:absolute; left:0;text-align:left;margin-left:0;margin-top:-.45pt;width:392.4pt;height:165.6pt; z-index:29' coordorigin="2195,2259" coordsize="7848,3312"> <v:line id="_x0000_s1493" style='position:absolute' from="3635,3039" to="5507,3759"/> <v:group id="_x0000_s1494" style='position:absolute;left:2195;top:2259; width:7848;height:3312' coordorigin="2195,2319" coordsize="7848,3312"> <v:shapetype id="_x0000_t16" coordsize="21600,21600" o:spt="16" adj="5400" path="m@0,0l0@0,,21600@1,21600,21600@2,21600,0xem0@0nfl@1@0,21600,0em@1@0nfl@1,21600e"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="val #0"/> <v:f eqn="sum width 0 #0"/> <v:f eqn="sum height 0 #0"/> <v:f eqn="mid height #0"/> <v:f eqn="prod @1 1 2"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="mid width #0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" limo="10800,10800" o:connecttype="custom" o:connectlocs="@6,0;@4,@0;0,@3;@4,21600;@1,@3;21600,@5" o:connectangles="270,270,180,90,0,0" textboxrect="0,@0,@1,21600"/> <v:handles> <v:h position="topLeft,#0" switch="" yrange="0,21600"/> </v:handles> <o:complex v:ext="view"/> </v:shapetype><v:shape id="_x0000_s1495" type="#_x0000_t16" style='position:absolute; left:2195;top:4191;width:1584;height:1440' filled="f"/> <v:shape id="_x0000_s1496" type="#_x0000_t16" style='position:absolute; left:5447;top:2895;width:1584;height:1440' filled="f"/> <v:shape id="_x0000_s1497" type="#_x0000_t16" style='position:absolute; left:2195;top:2319;width:1584;height:1440' filled="f"/> <v:shape id="_x0000_s1498" type="#_x0000_t16" style='position:absolute; left:8459;top:2855;width:1584;height:1440' filled="f"/> <v:line id="_x0000_s1499" style='position:absolute;flip:y' from="3635,3759" to="5507,4911"/> <v:shape id="_x0000_s1500" type="#_x0000_t202" style='position:absolute; left:3923;top:2895;width:1296;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1500'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>&lt;&lt;TCP/IP&gt;&gt;<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1501" type="#_x0000_t202" style='position:absolute; left:4067;top:4479;width:1440;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1501'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>&lt;&lt;TCP/IP&gt;&gt;<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1502" type="#_x0000_t202" style='position:absolute; left:6928;top:3208;width:1728;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1502'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:9.0pt;mso-bidi-font-size: 10.0pt;mso-ansi-language:EN-US'>SQL &lt;&lt;TCP/IP&gt;&gt;<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1503" type="#_x0000_t202" style='position:absolute; left:2195;top:2751;width:1296;height:864' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1503'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>ClienteA:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Pentium 200<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>MMX</span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1504" type="#_x0000_t202" style='position:absolute; left:2195;top:4623;width:1296;height:864' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1504'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>ClienteB:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Pentium 200<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>MMX</span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1505" type="#_x0000_t202" style='position:absolute; left:5507;top:3327;width:1152;height:864' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1505'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Servidor de Aplicação:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>HP/UX</span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1506" type="#_x0000_t202" style='position:absolute; left:8531;top:3183;width:1296;height:1152' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1506'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Servidor de Banco de Dados: ORACLE<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1507" style='position:absolute' from="6768,3708" to="8568,3708"/> </v:group></v:group><![endif]-->
Page 59: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 4.10: Exemplo do Diagrama de Execução

Este capítulo mostrou que com o uso correto dos conceitos da modelagem orientada a objetos o

analista pode chegar a um software de qualidade. Como o objetivo é chegar a um software de qualidade, o

próximo capítulo mostrará conceitos sobre outra modelagem, a Modelagem Estruturada.

Page 60: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

5. MODELAGEM ESTRUTURADA

Este capítulo apresentará conceitos e funcionamentos de modelagem estruturada. Esta

modelagem é composta pelo modelo essencial que indica o que o sistema deve fazer para satisfazer os

requisitos do usuário. Modelo essencial é composto pelo modelo ambiental, que define a fronteira entre o

sistema e o resto do mundo e pelo modelo comportamental, onde descreve o comportamento do interior

do sistema necessário para interagir com o ambiente.

A finalidade do processo de análise de um sistema é compreender o sistema, identificar seus

problemas, propor melhorias e identificá-lo em uma linguagem clara e compreensível, de modo a facilitar

as fases de projeto e implementação. É uma fase onde tudo é idealizado. [Yo92]

Projeto é planejar ou estabelecer a forma e o método de solução. É o processo que determina as

Page 61: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

características principais do produto final, o software, que estabelece os limites superiores em

desempenho e qualidade que a melhor implementação pode alcançar, e que pode até determinar qual será

o custo final. [Yo92]

Seqüência de atividades para o processo de desenvolvimento de um sistema:

• Definir o problema.

• Esquematizar o estilo do sistema

• Obter informações gerais das áreas a serem estudadas

• Compreender e registrar as interações entre as áreas em estudo

• Entender o sistema existente

• Definir os requisitos do sistema

• Projetar o novo sistema

• Preparar comparações de custo

• Vender a idéia do novo sistema

• Promover a implementação, acompanhamento e reavaliação.

Modelagem Estruturada se resume nos seguintes modelos[Yo92]:

Modelo Essencial:

• Modelo Ambiental: Declaração de Objetivos.

• Diagrama de Contexto.

Page 62: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Lista de Eventos.

• Modelo Comportamental: Diagrama de Fluxo de Dados.

• Dicionário de Dados.

• Especificação de Processos.

• Diagrama Entidade Relacionamentos.

5.1. MODELO ESSENCIAL

O Modelo Essencial indica o que o sistema deve fazer para satisfazer os requisitos do usuário,

mencionando o mínimo possível sobre como o sistema será implementado. O modelo é composto por

dois principais componentes: Modelo Ambiental e o Modelo Comportamental.

O Modelo Ambiental define a fronteira entre o sistema e o resto do mundo. Já o modelo

Comportamental descreve o comportamento do interior do sistema necessário para interagir com sucesso

com o ambiente.

5.1.1. MODELO AMBIENTAL

O modelo ambiental é o primeiro modelo importante que você deve desenvolver como analista

de sistemas, define as interfaces entre o sistema e o resto do universo, isto é o ambiente. Por isso esse

modelo é conhecido como modelo ambiental que modela a parte exterior do sistema. Ele consiste em três

componentes: Declaração de objetivos, Diagrama de Contexto e Lista de Eventos.

• DECLARAÇÃO DE OBJETIVOS

Page 63: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

A Declaração de Objetivos é uma declaração textual concisa e breve dos objetivos do sistema.

Ela é voltada para a direção superior, direção usuária e outros que não estão diretamente envolvidos no

desenvolvimento do sistema.

Declarar objetivos não é dar uma descrição detalhada e abrangente do sistema. A declaração de

objetivos deve relacionar os benefícios tangíveis e quantificáveis que serão obtidos pelo novo sistema.

À medida que a análise se desenvolve, o objetivo de um sistema não pode mudar, pois alcançar os

objetivos do projeto especificado é uma das principais metas do projetista.

• DIAGRAMA DE CONTEXTO

O Diagrama de Contexto é um caso especial do diagrama de fluxo de dados, no qual uma única

bolha representa o sistema inteiro.

É uma forma gráfica equivalente aos resultados obtidos na construção da lista de eventos e deve

conter:

• Um processo devidamente nomeado;

• As entidades externas que se comunicam com o sistema;

• Os principais elementos que fluem das entidades externas para o sistema ou vice-versa.

O diagrama de contexto é composto de terminadores, fluxo de dados e fluxo de controle, depósitos de dados e um único processo representando todo o sistema. O nome dentro do processo é normalmente o nome do sistema.

Page 64: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Os terminadores são representados por um quadro retangular no diagrama de contexto,

comunicam-se diretamente com o sistema através dos fluxos de dados ou dos fluxos de controle ou

através de depósitos de dados externos.

Os fluxos modelam os dados que chegam ao sistema e os que são transportados para fora dele bem

como os sinais de controle recebidos pelo sistema ou gerados por ele. Os fluxos de dados serão incluídos

no diagrama de contexto se forem necessários para detectar um evento no ambiente ao qual o sistema

deva responder, ou se forem necessários para que seja produzida uma resposta. Os fluxos de dados

também podem aparecer no diagrama de contexto para mostrar dados que sejam transportados entre

terminadores para o sistema. Os fluxos de dados são mostrados no diagrama de contexto quando os dados

são produzidos pelo sistema para responder a um evento.

Um exemplo de um diagrama de contexto é mostrado na figura 5.1.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1118" style='position:absolute; left:0;text-align:left;margin-left:37.8pt;margin-top:0;width:331.2pt;height:175.3pt; z-index:11' coordorigin="2880,7153" coordsize="6624,3506"> <v:shape id="_x0000_s1119" type="#_x0000_t202" style='position:absolute; left:2880;top:7153;width:1560;height:620' filled="f"> <v:textbox style='mso-next-textbox:#_x0000_s1119'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoHeading7><b><span style="mso-spacerun: yes">   </span>BANCO</b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1120" style='position:absolute' from="4464,7441" to="5904,8258"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1121" type="#_x0000_t202" style='position:absolute; left:3168;top:10130;width:1584;height:529' filled="f" fillcolor="black"> <v:textbox style='mso-next-textbox:#_x0000_s1121'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal align=center style='text-align:center'>LOJA<b style='mso-bidi-font-weight:normal'><o:p></o:p></b></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1122" type="#_x0000_t202" style='position:absolute; left:8064;top:8305;width:1440;height:580' filled="f"> <v:textbox style='mso-next-textbox:#_x0000_s1122'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>CLIENTE</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1123" type="#_x0000_t202" style='position:absolute; left:4176;top:7826;width:1440;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1123'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Recibo de Pagamentos</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1124" type="#_x0000_t202" style='position:absolute; left:3888;top:9457;width:1296;height:576' stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1124'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Lista de Débitos</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1125" type="#_x0000_t202" style='position:absolute; left:5812;top:8241;width:1260;height:920' stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1125'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> <p class=MsoFooter style='tab-stops:0cm'>Administrar Cobranças</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:oval id="_x0000_s1126" style='position:absolute;left:5652;top:7961; width:1560;height:1560' filled="f"/> <v:shape id="_x0000_s1127" type="#_x0000_t202" style='position:absolute; left:7344;top:8881;width:1296;height:720' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1127'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoPlainText><span style='font-family:"Times New Roman"'>Ficha de Cobrança <o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1128" style='position:absolute;flip:y' from="4752,9457" to="6048,10321"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1129" style='position:absolute' from="7200,8402" to="8064,8546"> <v:stroke endarrow="block"/> </v:line></v:group><![endif]-->
Page 65: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 5.1: Diagrama de contexto.

• LISTA DE EVENTOS

A Lista de Eventos é uma lista narrativa dos estímulos que ocorrem no mundo exterior, e aos

quais nosso sistema deve responder.

O DFD representa um sistema em funcionamento. Uma das ferramentas interessantes no auxílio à

construção de DFD é a lista de eventos. Este documento deverá conter uma lista dos eventos que

promovem o funcionamento ou estimula o sistema.

A Lista de Eventos deve ser construída da seguinte forma:

Pergunte ao processo:

1- Por que você começa a funcionar?

2- Quais são os insumos para o seu funcionamento?

3- Quem lhe envia estes insumos?

Exemplo de uma lista de eventos para venda de pacotes turísticos:

1. Cliente solicita compra do pacote turístico.

Page 66: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

2. Agência turística efetua a venda do pacote.

3. Cliente faz o pagamento.

4. Agência turística emite o relatório de venda.

5. Cliente cancela o pacote.

6. Agência turística cancela viagem

5.1.2. MODELO COMPORTAMENTAL

O Modelo Comportamental é o modelo do que deva ser o comportamento interno do sistema

para que possa interagir corretamente com o ambiente.

Modelo Comportamental envolve o desenvolvimento de:

• Diagrama de Fluxo de Dados,

• Dicionário de Dados,

• Especificações de Processos,

• Diagrama Entidades-Relacionamentos e

• DIAGRAMA DE FLUXO DE DADOS

O diagrama de fluxo de dados é uma das mais utilizadas ferramentas de modelagem de sistemas,

principalmente para sistemas operativos nos quais as funções do sistema sejam de fundamental

importância e mais complexas do que os dados manipulados pelo sistema.

Page 67: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Os DFD podem ser usados não só para modelar sistemas de processamento de informações,

mas também como um meio de se modelar organizações inteiras, isto é, como uma ferramenta para o

planejamento comercial e estratégico. Os componentes de um DFD típico são: o processo, o fluxo, o

depósito e o terminador.

DFD é apenas uma das ferramentas de modelagem disponíveis para o analista de sistemas e

oferece apenas uma visão do sistema, a visão orientada para funções.

Os componentes de um DFD são:

• O Processo

O processo mostra uma parte do sistema, a que transforma entradas em saídas, isto é, mostra como

uma ou mais entradas são convertidas em saídas. Como no exemplo da figura 5.2.

O processo é denominado ou descrito com uma única palavra ou sentença simples, o nome do

processo descreverá o que o processo faz, um bom nome geralmente é composto por uma frase

constituída de um verbo e de um objeto.

Figura 5.2 : Um exemplo de Processo.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1072" style='position:absolute;left:0;text-align:left;margin-left:145.8pt; margin-top:8.15pt;width:100.8pt;height:79.2pt;z-index:6' coordorigin="5328,4368" coordsize="2016,1584" o:allowincell="f"> <v:oval id="_x0000_s1073" style='position:absolute;left:5328;top:4368;width:2016; height:1584'/> <v:shape id="_x0000_s1074" type="#_x0000_t202" style='position:absolute; left:5760;top:4656;width:1296;height:864' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1074'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>Montar Cadastro de Cliente<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 68: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• O Fluxo

U fluxo é graficamente representado por uma seta que entra ou sai de um processo, exemplo de

um fluxo na figura 5.3.

O fluxo é utilizado para mostrar o movimento de fragmentos ou de pacotes de informações de

um ponto a outro do sistema. Desse modo, o fluxo representa dados em movimento, enquanto os

depósitos representam dados em repouso. O nome é escrito ao lado do fluxo de dados e deve ser o mais

preciso possível, a direção da seta indica o sentido que os dados estão tomando. [Yo92][Pa98]

Figura 5.3: Um exemplo de fluxo.

• O Depósito

O depósito é utilizado para se modelar uma coleção de pacotes de dados em repouso. A

representação para um depósito são duas linhas paralelas como o exemplo na figura 5.4 .

Normalmente o nome escolhido para identificar o depósito é o plural do nome dos pacotes

transportados pelos fluxos para dentro e para fora do depósito.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1069" style='position:absolute;left:0;text-align:left; margin-left:140.95pt;margin-top:.6pt;width:163pt;height:35.75pt;z-index:5' coordorigin="4520,10848" coordsize="3260,715" o:allowincell="f"> <v:line id="_x0000_s1070" style='position:absolute' from="4520,11083" to="7780,11563"> <v:stroke endarrow="block" endarrowwidth="wide" endarrowlength="long"/> </v:line><v:shape id="_x0000_s1071" type="#_x0000_t202" style='position:absolute; left:5472;top:10848;width:1728;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1071'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style='font-size:9.0pt;mso-bidi-font-size:10.0pt'>Dados Pessoais<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 69: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 5.4: Exemplo do depósito

• O Terminador

O terminador é graficamente representado por um retângulo como é mostrado no exemplo na

figura 5.5. Eles representam entidades externas com as quais o sistema se comunica. Tipicamente, o

terminador é uma pessoa ou um grupo de pessoas que esteja dentro da mesma companhia ou organização,

mas fora do controle do sistema que está sendo modelado; pode ser também outro sistema com o qual

nosso sistema se comunicará.

Figura 5.5: Exemplo do terminador.

As diretrizes para elaboração de um DFD são [Yo92]:

• Escolher nomes significativos para os processos, fluxos, depósitos e terminadores.

• Numerar os processos.

• Refazer os DFD tantas vezes quantas forem necessárias até obter uma boa estética.

• Evitar DFD complexos demais.

OPERADORAS

, 23/12/05
<!--[if gte vml 1]><v:shape id="_x0000_s1037" type="#_x0000_t202" style='position:absolute;left:0;text-align:left; margin-left:135pt;margin-top:6.3pt;width:127.2pt;height:34.75pt;z-index:3' filled="f"> <v:textbox style='mso-next-textbox:#_x0000_s1037'/> </v:shape><![endif]-->
, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1487" style='position:absolute;left:0;text-align:left;margin-left:145.8pt; margin-top:4.55pt;width:1in;height:33.75pt;z-index:28' coordorigin="5184,11069" coordsize="1440,675" o:allowincell="f"> <v:group id="_x0000_s1488" style='position:absolute;left:5184;top:11069; width:1440;height:576' coordorigin="5328,3744" coordsize="1440,576"> <v:line id="_x0000_s1489" style='position:absolute' from="5328,3744" to="6768,3744"/> <v:line id="_x0000_s1490" style='position:absolute' from="5328,4320" to="6768,4320"/> </v:group><v:shape id="_x0000_s1491" type="#_x0000_t202" style='position:absolute; left:5184;top:11168;width:1440;height:576' filled="f" stroked="f"> <v:textbox> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>CLIENTES</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 70: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Certificar de que o DFD seja internamente consistente além de manter a consistência com os outros

DFD.

Se um sistema for muito complexo e tem dúzias ou mesmo centenas de funções a serem

modeladas, terá que modelar o DFD geral em uma série de níveis de modo a que cada nível ofereça

sucessivamente mais detalhes sobre uma parte do nível que lhe seja superior, como no exemplo da figura

5.6.

O DFD de nível mais alto consiste de uma única bolha, representando o sistema inteiro; os fluxos

de dados mostram as interfaces entre o sistema e os terminadores externos; esse DFD especial é o

diagrama de contexto. O DFD imediatamente abaixo do diagrama de contexto é conhecido como figura 0.

Ele representa a visão de mais alto nível das principais funções do sistema bem como as principais

interfaces entre essas funções. Cada uma dessas bolhas deve ser numerada para mais fácil identificação.

[Yo92][Pa/98].

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1091" style='position:absolute;left:0;text-align:left;margin-left:0;margin-top:0; width:403.2pt;height:190.05pt;z-index:10' coordorigin="2448,7332" coordsize="8064,3801"> <v:shape id="_x0000_s1092" type="#_x0000_t202" style='position:absolute; left:7632;top:7392;width:1152;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1092'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Dados do Pacote</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1093" style='position:absolute' from="2448,7476" to="3168,8052"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1094" type="#_x0000_t202" style='position:absolute; left:2736;top:7332;width:1728;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1094'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Dados do Pacote</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1095" style='position:absolute;flip:y' from="4752,8256" to="5616,8544"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1096" type="#_x0000_t202" style='position:absolute; left:4752;top:7680;width:1296;height:720' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1096'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Informações do Pacote</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1097" style='position:absolute;flip:x' from="8352,7536" to="9216,8256"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1098" style='position:absolute' from="9072,8688" to="9648,9408"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1099" type="#_x0000_t202" style='position:absolute; left:9216;top:8400;width:1296;height:579' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1099'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Informações do Pacote</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1100" type="#_x0000_t202" style='position:absolute; left:7632;top:9840;width:1440;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1100'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Identificação do Pacote</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1101" style='position:absolute;flip:x' from="7344,9792" to="7920,9936"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1102" style='position:absolute' from="7488,10416" to="8064,10848"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1103" type="#_x0000_t202" style='position:absolute; left:8064;top:10413;width:2304;height:720' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1103'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>Informações Detalhadas do Pacote</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:group id="_x0000_s1104" style='position:absolute;left:4032;top:9696; width:1296;height:432' coordorigin="3744,7776" coordsize="1296,432"> <v:shape id="_x0000_s1105" type="#_x0000_t202" style='position:absolute; left:3744;top:7776;width:1296;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1105'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>PACOTES</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1106" style='position:absolute' from="3828,7776" to="4836,7776"/> <v:line id="_x0000_s1107" style='position:absolute' from="3848,8132" to="4856,8132"/> </v:group><v:line id="_x0000_s1108" style='position:absolute;flip:x y' from="4752,10128" to="6048,10560"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1109" style='position:absolute' from="4320,9119" to="4608,9695"> <v:stroke endarrow="block"/> </v:line><v:group id="_x0000_s1110" style='position:absolute;left:3024;top:7764; width:1728;height:1440' coordorigin="2019,9648" coordsize="1728,1440"> <v:shape id="_x0000_s1111" type="#_x0000_t202" style='position:absolute; left:2160;top:9792;width:1296;height:1152' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1111'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>1.1</p> <p class=MsoNormal>Relacionar Pacotes de Viagens</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:oval id="_x0000_s1112" style='position:absolute;left:2019;top:9648; width:1728;height:1440' filled="f"/> </v:group><v:group id="_x0000_s1113" style='position:absolute;left:5904;top:9648; width:1584;height:1152' coordorigin="2019,9792" coordsize="1584,1152"> <v:shape id="_x0000_s1114" type="#_x0000_t202" style='position:absolute; left:2160;top:9792;width:1440;height:1152' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1114'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoHeader style='tab-stops:0cm'><span style='font-size:10.0pt; mso-bidi-font-size:12.0pt'>1.3<o:p></o:p></span></p> <p class=MsoNormal>Determinar</p> <p class=MsoPlainText><span style='font-family:"Times New Roman"'>Condições do Pacote<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:oval id="_x0000_s1115" style='position:absolute;left:2019;top:9792; width:1584;height:1152' filled="f"/> </v:group><v:shape id="_x0000_s1116" type="#_x0000_t202" style='position:absolute; left:7344;top:8352;width:1584;height:864' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1116'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoHeader style='tab-stops:0cm'><span style='font-size:10.0pt; mso-bidi-font-size:12.0pt'>1.2<o:p></o:p></span></p> <p class=MsoNormal>Pré-Selecionar Pacotes</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:oval id="_x0000_s1117" style='position:absolute;left:7056;top:8208; width:2016;height:1296' filled="f"/> </v:group><![endif]-->
Page 71: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 5.6: Diagrama de Fluxo de Dados em níveis.

• DICIONÁRIO DE DADOS

Os modelos gráficos sozinhos não são capazes de representar todas as informações necessárias à

perfeita compreensão do modelo para um sistema. Por isso alguns documentos textuais de apoio são

necessários. O dicionário de dados é um destes documentos.

O dicionário de dados é uma listagem organizada de todos os elementos de dados pertinentes ao

sistema, com definições precisas e rigorosas para que o usuário e o analista de sistemas possam conhecer

todas as entradas, saídas, componentes de depósitos e cálculos intermediários.

Dicionário de Dados define os elementos de dados da seguinte maneira [Yo92]:

• Descrevendo o significado dos fluxos e depósitos mostrados nos diagramas de fluxo de dados.

Page 72: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

• Descrevendo a composição de pacotes agregados de dados que se movimentam pelos fluxos, isto é,

pacotes complexos que podem ser divididos em itens mais elementares, como cidade, estado e código

postal.

• Descrevendo a composição dos pacotes de dados nos depósitos.

• Especificando os relevantes valores e unidades de partes elementares de informações dos fluxos de

dados e depósito de dados.

• Descrevendo detalhes dos relacionamentos entre os depósitos realçados em um diagrama entidade-

relacionamentos.

Existem muitos esquemas de notação comuns usadas pelos analistas de sistemas. Os mais comuns

são:

= é composto de

+ e

( ) opcional

{ } iteração

[ ] escolha uma das opções alternativas

** comentário

@ identificador (campo chave) de um depósito

| separa opções alternativas na construção [ ]

• ESPECIFICAÇÃO DE PROCESSOS

A Especificação de Processos é criada para cada bolha do DFD de nível mais baixo. Define

como o fluxo de dados entra e sai do processo e quais operações são executadas com os dados.

Page 73: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Algumas metas para as especificações:

• Deve haver especificações para cada primitiva funcional no conjunto do DFD.

• A especificação deve definir a maneira pela qual os fluxos de dados que entram na primitiva

funcional são transformados em fluxos de dados que saem delas.

• A especificação deve definir o processo que governa a transformação, não o método de

implantação desse processo.

• A especificação deve procurar controlar a redundância. Em particular não deveria redefinir algo já

definido no DFD ou no dicionário de dados.

• conjunto de elementos usados para construir a especificação deveria ser pequeno e simples.

• DIAGRAMA DE ENTIDADES-

RELACIONAMENTO

O diagrama de entidades-relacionamentos é um modelo em rede que descreve a diagramação

dos dados armazenados de um sistema em alto nível de abstração. Os quatro principais componentes de

um diagrama de entidades-relacionamentos são: Tipos de objetos; Relacionamentos; Indicadores

associativos de tipos de objetos; Indicadores de supertipos/subtipos.

Tipos de Objetos:

Um tipo de objeto é representado por um retângulo em um diagrama de entidades-relacionamentos, como

o exemplo na figura 5.7.

Page 74: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Ele representa uma coleção ou um conjunto de objetos do mundo real cujo membros individuais têm

as seguintes características:

• Cada um deles só pode ser identificado de uma única forma.

• Cada um exerce um papel no sistema em construção.

• Cada um pode ser descrito por um ou mais elementos de dados.

Figura 5.7: Um tipo de objeto.

Relacionamentos:

Os objetos são interligados por relacionamentos. Um relacionamento representa um conjunto de conexões entre objetos e é representado por um losango. A figura 5.8 mostra um exemplo de relacionamento.

PACOTES

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1076" style='position:absolute; left:0;text-align:left;margin-left:23.9pt;margin-top:.8pt;width:343.45pt; height:49pt;z-index:8' coordorigin="3306,13675" coordsize="6869,980" o:allowincell="f"> <v:shapetype id="_x0000_t110" coordsize="21600,21600" o:spt="110" path="m10800,0l0,10800,10800,21600,21600,10800xe"> <v:stroke joinstyle="miter"/> <v:path gradientshapeok="t" o:connecttype="rect" textboxrect="5400,5400,16200,16200"/> </v:shapetype><v:shape id="_x0000_s1077" type="#_x0000_t110" style='position:absolute; left:5810;top:13675;width:1660;height:980'/> <v:shape id="_x0000_s1078" type="#_x0000_t202" style='position:absolute; left:5987;top:13955;width:1400;height:440' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1078'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoHeading8 align=left style='text-align:left'><span style='font-weight:normal'>COMPRA<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:line id="_x0000_s1079" style='position:absolute;flip:x' from="4767,14155" to="5767,14155"/> <v:line id="_x0000_s1080" style='position:absolute' from="7467,14155" to="8567,14155"/> <v:shape id="_x0000_s1081" type="#_x0000_t202" style='position:absolute; left:3306;top:13898;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1081'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoFooter style='tab-stops:0cm'>CLIENTE</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1082" type="#_x0000_t202" style='position:absolute; left:8591;top:13898;width:1584;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1082'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>PACOTES</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
, 23/12/05
<!--[if gte vml 1]><v:shape id="_x0000_s1075" type="#_x0000_t202" style='position:absolute;left:0; text-align:left;margin-left:153pt;margin-top:13.8pt;width:79.2pt;height:50.4pt; z-index:7'> <v:textbox style='mso-next-textbox:#_x0000_s1075'/> </v:shape><![endif]-->
Page 75: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 5.8: Um relacionamento.

É importante reconhecer que o relacionamento representa um conjunto de conexões. Cada instância do relacionamento representa uma associação entre zero ou mais ocorrências de um objeto e zero ou mais ocorrências de outro objeto. Um relacionamento pode interligar duas ou mais instâncias do mesmo objeto.

Notação Alternativa para Relacionamentos:

Na figura 5.9a mostra um exemplo de relacionamento que consiste em um cliente interligado a N pacotes. Entretanto, o relacionamento indica que apenas um cliente pode estar envolvido em cada instância de um relacionamento.

Figura 5.9a: Exemplo de relacionamento.

Outra exemplo de relacionamento na figura 5.9b, onde a seta de ponta dupla é utilizada para indicar um relacionamento um-para-muitos.

Figura 5.9b: Exemplo de relacionamento um-para-muitos.

Indicadores de Tipos de Objetos Associativos:

Representa alguma coisa que funciona tanto como um objeto quanto como um relacionamento.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1161" style='position:absolute;left:0;text-align:left; margin-left:36pt;margin-top:0;width:271pt;height:30.65pt;z-index:15' coordorigin="3600,3744" coordsize="5420,613"> <v:line id="_x0000_s1162" style='position:absolute' from="5100,4196" to="7380,4196"> <v:stroke endarrow="block"/> </v:line><v:line id="_x0000_s1163" style='position:absolute' from="5084,4176" to="7544,4177"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1164" type="#_x0000_t202" style='position:absolute; left:3600;top:3744;width:1500;height:613' filled="f"> <v:textbox style='mso-next-textbox:#_x0000_s1164'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal align=center style='text-align:center'>Cliente</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1165" type="#_x0000_t202" style='position:absolute; left:7500;top:3744;width:1520;height:613' filled="f"> <v:textbox style='mso-next-textbox:#_x0000_s1165'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <h6><b style='mso-bidi-font-weight:normal'>Pacotes<o:p></o:p></b></h6> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1166" type="#_x0000_t202" style='position:absolute; left:5328;top:3744;width:1440;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1166'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>compra</p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1155" style='position:absolute;left:0;text-align:left; margin-left:68.95pt;margin-top:5.4pt;width:284pt;height:44.15pt;z-index:14' coordorigin="3647,14381" coordsize="5680,883" o:allowincell="f"> <v:rect id="_x0000_s1156" style='position:absolute;left:3647;top:14381; width:1560;height:660'> <v:textbox style='mso-next-textbox:#_x0000_s1156'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <h6><b style='mso-bidi-font-weight:normal'>Cliente<o:p></o:p></b></h6> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1157" style='position:absolute;left:7767;top:14381; width:1560;height:640'> <v:textbox style='mso-next-textbox:#_x0000_s1157'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <h6><b style='mso-bidi-font-weight:normal'>Pacotes<o:p></o:p></b></h6> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:line id="_x0000_s1158" style='position:absolute' from="5247,14776" to="7767,14776"> <v:stroke startarrow="oval" endarrow="block" endarrowwidth="wide" endarrowlength="long"/> </v:line><v:shape id="_x0000_s1159" type="#_x0000_t202" style='position:absolute; left:5184;top:14688;width:576;height:432' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1159'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span style="mso-spacerun: yes"> </span>1</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1160" type="#_x0000_t202" style='position:absolute; left:7056;top:14688;width:576;height:576' filled="f" stroked="f"> <v:textbox style='mso-next-textbox:#_x0000_s1160'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>N</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 76: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Outro modo de encarar o tipo de objeto associativo é considerar que ele representa um relacionamento sobre o qual queremos manter algumas informações.

Figura 5.10: Exemplo de um indicador de tipo de objeto associativo.

No exemplo na figura 5.10, observe que Compra está escrita dentro de um retângulo e que está ligada por uma linha direta a um losango sem nome de relacionamento. Isso serve para indicar que Compra funciona como:

• Um tipo de objeto, alguma coisa sobre a qual queremos armazenar informações.

• Cliente e Pacotes existiriam ocorrendo ou não uma compra.

• Uma compra depende obviamente de Cliente e de Pacotes para sua própria existência, ela só passa a existir como resultado de um relacionamento entre os objetos aos quais ela está interligada.

Indicadores de Subtipos/Supertipos:

Os tipos de objetos subtipo/supertipo consistem em um objeto e uma ou mais subcategorias, interligados por um relacionamento. A figura 5.11 mostra um subtipo/supertipo típico. A categoria geral é Cliente e as subcategorias são Pessoa Fisica e Pessoa Jurídica. Observe que os subtipos são interligados ao supertipo por meio de um relacionamento sem nome; note ainda que o supertipo é interligado ao relacionamento por uma linha cortada por uma pequena barra.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1083" style='position:absolute;left:0;text-align:left; margin-left:30.6pt;margin-top:0;width:336.4pt;height:120.55pt;z-index:9' coordorigin="2776,2365" coordsize="6728,2411" o:allowincell="f"> <v:shape id="_x0000_s1084" type="#_x0000_t110" style='position:absolute; left:5283;top:2365;width:1660;height:980'/> <v:line id="_x0000_s1085" style='position:absolute;flip:x' from="4240,2845" to="5240,2845"/> <v:line id="_x0000_s1086" style='position:absolute' from="6940,2845" to="8040,2845"/> <v:line id="_x0000_s1087" style='position:absolute;flip:y' from="6140,3325" to="6140,4165"> <v:stroke endarrow="block"/> </v:line><v:shape id="_x0000_s1088" type="#_x0000_t202" style='position:absolute; left:2776;top:2488;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1088'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>CLIENTE</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1089" type="#_x0000_t202" style='position:absolute; left:8064;top:2448;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1089'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>PACOTES</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1090" type="#_x0000_t202" style='position:absolute; left:5472;top:4200;width:1440;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1090'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>COMPRA</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><![endif]-->
Page 77: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Figura 5.11: Um indicador de supertipo/subtipo.

, 23/12/05
<!--[if gte vml 1]><v:group id="_x0000_s1167" style='position:absolute;left:0;text-align:left;margin-left:38.4pt; margin-top:12pt;width:330.6pt;height:146.4pt;z-index:16' coordorigin="3168,5958" coordsize="6612,2928"> <v:line id="_x0000_s1168" style='position:absolute' from="9052,7543" to="9052,8163" o:allowincell="f"/> <v:group id="_x0000_s1169" style='position:absolute;left:3168;top:5958; width:6612;height:2928' coordorigin="2592,9500" coordsize="6612,2928" o:allowincell="f"> <v:shape id="_x0000_s1170" type="#_x0000_t110" style='position:absolute; left:5280;top:10591;width:1340;height:940'/> <v:line id="_x0000_s1171" style='position:absolute' from="5940,10128" to="5940,10608"/> <v:line id="_x0000_s1172" style='position:absolute' from="5760,10408" to="6160,10408"/> <v:line id="_x0000_s1173" style='position:absolute;flip:x' from="3380,11068" to="5260,11068"/> <v:line id="_x0000_s1174" style='position:absolute' from="6600,11068" to="8460,11068"/> <v:shape id="_x0000_s1175" type="#_x0000_t202" style='position:absolute; left:5160;top:9500;width:1584;height:576'> <v:textbox style='mso-next-textbox:#_x0000_s1175'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>CLIENTE</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1176" type="#_x0000_t202" style='position:absolute; left:2592;top:11664;width:1440;height:720'> <v:textbox style='mso-next-textbox:#_x0000_s1176'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>PESSOA FISICA</p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape><v:shape id="_x0000_s1177" type="#_x0000_t202" style='position:absolute; left:7764;top:11708;width:1440;height:720'> <v:textbox style='mso-next-textbox:#_x0000_s1177'> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal>PESSOA JURÍDICA</p> <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:shape></v:group><v:line id="_x0000_s1178" style='position:absolute' from="3988,7528" to="3988,8104"/> </v:group><![endif]-->
Page 78: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

6. DIFERENÇAS DA MODELAGEM ESTRUTURADA PARA MODELAGEM ORIENTADA A

OBJETOS

Com os conceitos já vistos nos capítulos anteriores, este capítulo apresenta as diferenças entre Modelagem Estruturada e a Modelagem Orientada a Objetos, mostrando vantagens e desvantagens de cada um dos modelos.

Partindo do ponto de vista do programador tradicional, algumas técnicas orientadas ao objeto

parecem ser conceitos tradicionais com nomes diferentes. E, na verdade, alguns conceitos orientados ao

objeto são análogos à programação convencional. Os contrastes entre termos e conceitos convencionais e

orientados ao objeto[Wi93]:

• Um método é como um procedimento porque os dois contêm instruções de processamento. As

variáveis de classe e instância correspondem aos dados na programação tradicional. Os métodos e os

dados são diferentes porque os procedimentos não são usualmente encapsulados com os dados que

manipulam.

• Uma classe é semelhante a um tipo abstrato de dados, porém, para os programas orientados ao

objeto, o processo de tipagem de dados não é revelado fora da classe.

• A hereditariedade não tem analogia imediata com a programação convencional.

• O envio de mensagens substitui as chamadas de função como o método primário de controle nos

sistemas orientados ao objeto. Com as chamadas de função, os valores são retornados e controlados

pela função que chamou. Em contraste, os objetos são setados para movimentação por meio das

mensagens e o controle é distribuído.

Page 79: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Os objetos são relativamente fáceis de definir, implementar e manter porque refletem a modularidade natural de uma aplicação. Com o fortalecimento da modularidade e o uso de mecanismos de hereditariedade, os objetos podem ser utilizados novamente em futuras aplicações, reduzindo substancialmente a quantidade de novos códigos escritos. Uma aplicação convencional pode usar milhares de registros de dados com tipos de dados predefinidos, mas uma aplicação orientada ao objeto pode ser criada a partir de um número bem menor de objetos.

Dividir uma aplicação em entidades e relacionamentos de forma significativa aos usuários é uma

técnica tradicional de análise e desenho. Com a orientação ao objeto, este processo de decomposição se

estende até a fase de implementação como um todo. É mais fácil desenhar e implementar aplicações

orientadas ao objeto porque os objetos no universo da aplicação correspondem diretamente aos objetos no

universo do software. Esta relação um-para-um elimina a necessidade de traduzir um desenho para uma

representação menos natural de uma linguagem de programação, ainda que a maioria dos programadores

tenham sido treinados para fazer esta tradução.

As técnicas orientadas ao objeto oferecem uma alternativa para não escrever os mesmos

programas várias vezes. O programador modifica a funcionalidade de um programa por meio da

substituição de elementos ou objetos antigos por novos ou simplesmente acrescentando novos objetos à

aplicação. As instruções genéricas (mensagens) não necessitam de modificação porque os detalhes

específicos de implementação (métodos e dados) residem dentro do objeto. Isto é, cada objeto sabe como

lidar com seu próprio comportamento. Este conceito contrasta com a programação de procedimentos, em

que as operações e regras atuam em conjuntos de dados separados. Pela técnica de procedimentos, os

programadores concentram sua atenção nas regras de linguagem, ao passo que, no ambiente orientado ao

objeto, a preocupação importante é manter uma biblioteca de classe resistente ou um conjunto de objetos

que possa ser usado em várias circunstâncias. Uma biblioteca de classe representa um dispositivo de

comandos preexistentes escritos, testados e depurados para oferecer blocos de construção para aplicações

de alta qualidade. As classes oferecem não somente modularidade de informação, mas também

reusabilidade por meio de hereditariedade e polimorfismo.

As linguagens orientadas ao objeto beneficiam o produtor de software pelo suporte modular ao

desenvolvimento de sistemas. Os objetos abrem a possibilidade de manter juntos elementos relacionados

e, em particular, conservar juntos os dados e os métodos que atuam sobre eles. Pela manutenção em um

único lugar de todas as partes importantes de um programa relacionadas a um única entidade, a

manutenção e os incrementos de rotinas ficam simplificadas. Em contraste com linguagens tradicionais,

Page 80: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

existe sempre a possibilidade de a atualização de uma sub-rotina ou elementos de dados afetar alguma

rotina fisicamente longe e esta terminar sendo removida da atualização. O programador de linguagens

orientadas ao objeto não precisa varrer o código-fonte para ver se mudanças locais causarão problemas

em algum outro lugar do sistema.

A divisão histórica da programação entre dados e funções impõe uma carga enorme no

desenvolvimento de software. As estruturas de dados requerem modificações com freqüência. Os

controladores de funções devem ser reexaminados para assegurar que estão alinhados com os dados.

Manter as estruturas de dados e funções alinhadas adequadamente consome uma quantidade razoável de

recursos e apresenta oportunidades significativas para as ocorrências de erros. A técnica da orientação ao

objeto de encapsular dados e procedimentos no objeto simplifica o processo, direciona a manutenção e

diminui a probabilidade de erros no processo de programação. [Wi93]

Segue abaixo uma relação do que as modelagens orientada a objetos e estruturada podem

contribuir para qualidade do software.

Qualidade do

Software

Qualidade não significa simplesmente testar. Qualidade em

software é uma série de capacidades e práticas ao longo do

ciclo de vida do software, como gerência de requisitos,

automação de testes e gerência de configuração, além destas,

as práticas de desenvolvimento componetizado, modelagem

visual e o uso de um processo interativo controlado são as

melhores práticas para o sucesso de ambientes de software.

Prevenir o aparecimento de defeitos, problemas e retrabalho,

libera-se todos que se concentrem na adição de valor ao

cliente.

Contribuição das modelagens para qualidade do software

Modelagem

Estruturada

É uma modelagem mais fácil e mais conhecida. Fornece uma

documentação bem detalhada do que o sistema faz, a qual

contribui para a diminuição de erros.

Modelagem Permite programação de incrementos de alto nível de

Page 81: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Orientada a

Objetos

abstração, do objeto para classe e para a biblioteca de classes,

resultando em aplicações completas. A hereditariedade traz

maior produtividade; pois os objetos podem ser usados em

futuras aplicações reduzindo a quantidade de novos códigos

escritos.

Este capítulo mostrou as diferenças entre a modelagens estruturada e a modelagem orientada a

objetos. Com o auxílio dessas diferenças no próximo capítulo será mostrado como a modelagem orientada

a objetos pode influenciar para que um analista chegue a um software de qualidade.

7. INFLUÊNCIA DA MODELAGEM ORIENTADA A OBJETOS NA QUALIDADE DE

SOFTWARE

Este capítulo apresenta como a Modelagem Orientada a Objetos pode influenciar a qualidade de software.

A programação orientada a objetos oferece uma oportunidade para melhorar a produtividade

dos softwares. Os códigos reutilizáveis traz os benefícios de gerenciamento de complexidade e aumento

de produtividade no processo de desenvolvimento de software, com isso a complexidade diminui e a

produtividade aumenta

Page 82: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

A modelagem orientada a objetos oferece seus benefícios iniciais ao criador de software,

fornecendo uma metodologia na programação suportada por novas linguagens e ferramentas para

aumentar a produtividade. Depois os benefícios para os usuários, fornecendo consistência e flexibilidade

necessárias para que as aplicações se tornem mais fáceis de usar e atendam às necessidades particulares.

Como a funcionalidade da hereditariedade permite que objetos sejam acrescentados ou eliminados

sem comprometer a lógica da aplicação, grandes projetos podem ser divididos entre participantes de uma

equipe de desenvolvimento. A técnica da programação orientada ao objeto facilita a independência do

trabalho de uma grande equipe de programação. A real implementação de cada objeto e seus métodos

pode ocorrer independentemente, sem problemas de integração. A orientação a objeto acomoda

estruturas de dados complexas e heterogêneas; novos tipos de dados podem ser incluídos sem a

modificação da codificação existente.

As características da orientação ao objeto são extremamente úteis durante a manutenção. A

modularidade faz com que seja mais fácil conter os efeitos das alterações em um programa. O

polimorfismo reduz o número de procedimentos e o tamanho do programa que o responsável deve

entender. A hereditariedade permite que uma nova versão de uma programa seja elaborada sem afetar a

antiga. O mecanismo de hereditariedade documenta as alterações como subclasses representando o

histórico das alterações feitas na superclasse. A técnica de projetos orientados ao objeto originam

sistemas flexíveis para mudanças. Quando uma mudança é necessária, a característica de hereditariedade

permite a reutilização e extensão dos modelos existentes.

A modularidade da técnica orientada a objetos facilita o trabalho de equipe. Pelo motivos dos

dados e processos estarem dentro dos objetos. Com isso a técnica de projetos orientada a objetos é mais

intuitiva, não só para o analista mas também para o usuário, porque a modelagem orientada a objetos

organiza e compreende naturalmente o problema, está baseada na maneira como os homens pensam.

[Wi93]

Este capítulo mostrou que seguindo corretamente os conceitos da Modelagem orientada a

objetos pode-se alcançar vários dos aspectos de qualidade desejáveis em um software.

Page 83: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

8. CONCLUSÃO

Esta monografia apresentou definições de Engenharia de Software e os seus paradigmas Ciclo de

Vida Clássico, Prototipação, Modelo Espiral e Técnicas de Quarta Geração; além de definições sobre

qualidade. Mostrou conceitos e funcionamentos da modelagem estruturada, a qual é composta do modelo

essencial, que é composto pelo modelo ambiental e pelo modelo comportamental. Apresentou conceitos e

os benefícios da modelagem orientada a objetos. Com esses conceitos foi mostrado as diferenças entre as

modelagens. Mostrou também o que a modelagem orientada a objetos influencia para um software com

qualidade.

Num mercado cada vez mais competitivo, em que as exigências de qualidade são cada dia

maiores, os projetos deve ate-se aos cronogramas e orçamentos planejados. Em função disto, a partir do

uso das mais conceituadas técnicas de engenharia de software, um projeto de desenvolvimento,

manutenção ou implementação de um sistema a ser elaborado, estruturado e gerenciado será de forma

eficiente.

Page 84: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

A Modelagem orientada a objetos demonstra uma evolução na Engenharia de Software, consegue

estabelecer uma reutilização de sistemas, além do enfoque na criação de classes e objetos, tornando

possível a construção de softwares confiáveis e com alta qualidade.

Técnicas da Modelagem orientada a objetos tem sido utilizadas no desenvolvimento de soluções

de alta qualidade para problemas cada vez mais complexos.

Entre a Modelagem orientada a objetos e a Estruturada existem muitas diferenças e também

semelhanças, além de vantagens e desvantagens. De forma que a tecnologia de objetos apresenta-se como

uma melhor opção para o desenvolvimento de sistemas.

As empresas estão cada vez mais interessadas em saber sobre a qualidade dos produtos de

software que elas desenvolvem, vedem, compram ou utilizam, e na verdade todo software com mais

qualidade sobre menos manutenção, e as manutenções necessárias são feitas muito rapidamente, gerando

assim um custo menos elevado.

Para ter sucesso no mercado de desenvolvimento de software é o comprometimento com a

excelência do serviço prestado. Esse mercado é promissor, mas sem qualidade será impossível progredir e

permanecer nele por muito tempo.

As contribuições desta monografia são:

• Caracterizar as duas principais modelagens de sistemas utilizadas pelo mercado.

• Apresentar os diferentes conceitos envolvendo qualidade e, mais especialmente qualidade de

software.

• Comparar as características dos diferentes paradigmas de modelagem, considerando os aspectos de

qualidade de software descritos nesta monografia.

Page 85: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

A partir desta monografia, é possível orientar futuros trabalhos sobre o assunto, utilizando os conceitos e discussões feitas neste trabalho.

9. BIBLIOGRAFIA

[Ar94]ARTHUR, Lowelljay. Melhorando Qualidade do Software : Um Guia para o TQM. Tradução por

Flávio Eduardo Frony Morgano. Rio de Janeiro. Livraria e Editora Infobook, 1.994. 304p.

[Br00] BRAVO, Marco. Orientação a Objetos: Parte da Solução para Gerência e Produção. Developers’

Cio Magazine. Ano 4, Nº 43, 14-16p, Março/2.000

[Ba00] BARROS, Pablo. Linguagem de Modelagem Unificada.

http://cc.usu.edu/~slz9/uml

25/10/2.000 12:45h

[Co93] COAD, Peter, YOURDON, Edward. Projeto Baseado em Objetos. Tradução por PubliCare

Serviços de Informática, Vandenberg Dantas de Souza. Rio de Janeiro. Editora Campus,

1.993. 195p

[Co96] COAD, Peter; YOURDON, Edward. Análise Baseado em Objetos. Tradução por CT

Page 86: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

Informática. Rio de Janeiro. Editora Campus, 1.996. 225p

[Jo00] JORGE, Rodrigo Funabashi. Protótipo de uma ferramenta de apoio a análise orientada a objeto

usando UML.

http://www.icmc.sc.usp.br/~rodrigoj/arquivos/mono98.doc 14/07/2.000 16:51h

[Jr00] JUNIOR, José Barreto. Qualidade de Software

www.barreto.com.br/qualidade 22/05/2.000 17:32h

[Ma92] MAFFEO, Bruno. Engenharia e Especificação de Sistemas. Rio de Janeiro. Editora Campus,

1.992. 484p.

[Ma97] MARTIN, James. Princípio de Análise e Projeto baseados em Objetos. Tradução por Cristina

Bazán. Rio de Janeiro. Editora Campus, 1.997. 486p

[Or00] Orientação a Objetos – Mito ou Realidade?

http:// www.pachecones.com.br/ITOO.HTM 05/06/2.000 10:16h

[Pa98]PAGE-JONES, Meilir. Projeto Estruturado de Sistemas. Tradução por Silvia Maria Almeida

Barros, Eliana Maria Lene Gotilha, Zileia Francisca dos Santos. São Paulo, Editora

McGrawHill, 1.998.396p

[Pa00] PALAZZO, Luiz A. M. Modelagem Conceitual Orientada a Objetos.

http://esin.ucpel.tche.br/bbvirt/art/ObjRevis.htm 25/06/2.000 12:45h

Page 87: Uberlândia, Dezembro de 2 - computacao.unitri.edu.br · INFLUÊNCIAS DOS PARADIGMAS DE PROGRAMAÇÃO NA QUALIDADE DO SOFTWARE Letícia Borges Figueredo Uberlândia, Dezembro de 2.000

[Pr95] PRESSMAN, Roger S. Engenharia de Software . Tradução por josé Carlos Barbosa dos Santos.

São Paulo. Mackron Books, 1.995. 1056p.

[Pr00]. Programação Orientada a Objetos.

http://hammer.prohosting.com/~ricardot/poo.htm 25/06/2.000 13:30h

[Sh92]] SHILLER, Larry. Excelência em Software . Tradução por Equipe Flama Informática. São Paulo.

Makron Books, 1.992. 295p.

[Yo92] YOURDON, Edward. Análise Estruturada Moderna. Tradução por Dalton Conde de

Alencar. Rio de Janeiro, Editora Campus, 1.992. 836p

[Wi93] WINBLAD, Ann L. ; EDWARDS, Samuel D.; KING, David R. Software Orientado ao Objeto.

Tradução por Denise de Souza Boccia. São Paulo. Makron Books, 1.993. 314p