Escolar Documentos
Profissional Documentos
Cultura Documentos
Especialização em
Engenharia de Software
(EngSw) a Distância
1
Sumário
Apresentação ...................................................................................................................... 5
Capítulo 1 ............................................................................................................................ 6
Fundamentos da Orientação a Objetos ............................................................................ 6
1.1. Processo de Software e Modelos de Ciclo de Vida ................................................. 6
1.2. Introdução à Orientação a Objetos .......................................................................... 8
1.2.1. Abstração ...................................................................................................... 10
1.2.2. Objetos e Classes ......................................................................................... 11
1.2.3. Atributos ........................................................................................................ 12
1.2.4. Operações e Métodos ................................................................................... 13
1.2.5. Encapsulamento ............................................................................................ 14
1.2.6. Herança ......................................................................................................... 14
1.2.7. Polimorfismo .................................................................................................. 15
1.3. RUP - Rational Unified Process ............................................................................... 16
Exercícios do Capítulo 1 ...................................................................................................... 18
Capítulo 2 .......................................................................................................................... 19
UML – Unified Modeling Language ................................................................................. 19
2.1. Breve Histórico da UML ........................................................................................... 19
2.2. Organização dos Diagramas da UML ...................................................................... 21
2.3. Diagramas da UML .................................................................................................. 22
2.3.1. Diagrama de Casos de Uso ............................................................................... 23
2.3.2 Diagrama de Classes .......................................................................................... 23
2.3.3. Diagrama de Objetos ......................................................................................... 23
2.3.4. Diagrama de Pacotes......................................................................................... 23
2.3.5. Diagrama de Sequência ..................................................................................... 24
2.3.6. Diagrama de Comunicação ................................................................................ 24
2.3.7. Diagrama de Atividades ..................................................................................... 24
2.3.8. Diagrama de Estrutura Composta ...................................................................... 25
2.3.9. Diagrama de Componentes .............................................................................. 25
2.3.10. Diagrama de Implantação ............................................................................... 25
2.3.11. Diagrama de Tempo ....................................................................................... 26
2.3.12. Diagrama de Máquina de Estados .................................................................. 26
2.3.13. Diagrama de Interação Geral .......................................................................... 26
2
2.4. O Futuro da UML...................................................................................................... 27
Capítulo 3 .......................................................................................................................... 29
Diagrama de Casos de Uso ............................................................................................. 29
3.1. Análise de Requisitos e Diagramas de Casos de Uso ............................................. 29
3.2. Componentes de um Diagrama de Casos de Uso ................................................... 30
3.2.1. Atores e Casos de uso ....................................................................................... 30
3.2.2. Relacionamentos ............................................................................................... 31
3.2.2. Documentação de um Caso de Uso .................................................................. 33
Exercícios do Capítulo 3 ...................................................................................................... 35
Capítulo 4 .......................................................................................................................... 36
Diagrama de Classes........................................................................................................ 36
4.1. O Modelo Entidade-Relacionamento e o Diagrama de Classes............................... 36
4.2. Componentes de um Diagrama de Classes ............................................................. 37
4.2.1. Classes ............................................................................................................. 37
4.2.2. Relacionamentos ............................................................................................... 38
4.2.3. Estereótipo ......................................................................................................... 41
4.2.4. Interface ............................................................................................................ 41
4.2.5. Classes de Associação ...................................................................................... 41
4.2.6. Enumeração ...................................................................................................... 42
4.2.7. Associação Reflexiva ........................................................................................ 42
4.2.8. Escopo de Classe (visibilidade) ........................................................................ 43
4.2.9. Classe Abstrata .................................................................................................. 44
4.3. Construindo um Diagrama de Classes ..................................................................... 44
4.4. Estereótipos da Classe ............................................................................................ 45
4.4. 1. Classes de Fronteira ........................................................................................ 45
4.4.2. Classes de Controle ........................................................................................... 48
4.4.3. Classes de Entidade .......................................................................................... 50
Exercícios do Capítulo 4 ...................................................................................................... 52
Capítulo 5 .......................................................................................................................... 53
Diagramas de Interação ................................................................................................... 53
5.1. Os Diagramas de Interação...................................................................................... 53
5.2. Diagrama de Sequência .......................................................................................... 54
5.3. Componentes de um Diagrama de Sequência ......................................................... 55
5.3.1. Objetos ............................................................................................................... 55
5.3.2. Atores ................................................................................................................ 56
5.3.3. Mensagens........................................................................................................ 56
5.4. Distribuição de Fluxo de Controle em Diagramas de Sequência ............................ 56
5.5. Diagramas de Comunicação .................................................................................... 60
Exercícios do Capítulo 5 ...................................................................................................... 63
Capítulo 6 .......................................................................................................................... 64
Diagrama de Máquina de Estados e Diagrama de Atividades ...................................... 64
6.1. Máquina de Estados e Atividades ............................................................................ 64
6.2. Diagrama de Máquina de Estados ........................................................................... 65
6.3. Componentes de um Diagrama de Máquina de Estados ......................................... 66
6.3.1. Estados ............................................................................................................. 66
6.3.2. Transições.......................................................................................................... 67
6.3.3. Condições de Guarda ....................................................................................... 68
6.3.4. Ações ................................................................................................................ 68
6.4. Construindo um Diagrama de Máquina de Estado .................................................. 68
6.5. Diagrama de Atividades .......................................................................................... 69
6.6. Componentes de um Diagrama de Atividades ......................................................... 69
6.7. Construindo um Diagrama de Atividades ................................................................. 72
6.8. Diagramas de Atividades Aninhados ....................................................................... 73
Exercícios do Capítulo 6 ...................................................................................................... 75
Considerações Finais....................................................................................................... 76
Respostas Comentadas dos Exercícios ......................................................................... 77
Bibliografia ........................................................................................................................ 82
Apresentação
Com o advento da modelagem de software, que é a atividade de construir modelos
que expliquem as características ou o comportamento de um software ou sistema, surgiu a
necessidade de transcrever elementos do mundo real para o mundo conceitual, de modo a
se construir modelos de software capazes de serem compreendidos por profissionais dos
mais diversos segmentos. Para melhor se construir um projeto, podem ser utilizados
diversos paradigmas de modelagem, ou seja, diferentes “formas de abordar um problema”.
Nesta disciplina vamos estudar o paradigma orientado a objetos, que é um
paradigma de análise, projeto e desenvolvimento de sistemas de software baseado na
composição e interação entre diversas unidades de software chamadas de “objetos”.
O paradigma de orientação a objetos visualiza um sistema de software como uma
coleção de agentes interconectados denominados objetos. Cada objeto é responsável por
realizar tarefas específicas. É através da interação entre objetos que uma tarefa
computacional é realizada. A principal vantagem da técnica orientada a objetos para a
modelagem de sistemas é a diminuição da diferença semântica entre a realidade sendo
modelada e os modelos construídos.
Para apresentar o modelo de objetos é necessário o uso de uma ferramenta de
modelagem. Utilizaremos nesta disciplina o modelo proposto pela UML. A UML - Unified
Modeling Language é uma linguagem de modelagem que permite que os desenvolvedores
visualizem o produto de seu trabalho através de diagramas padronizados. Junto com a
notação gráfica, a UML também especifica os significados, isto é, a semântica dos
modelos. Assim, a UML não é uma metodologia de desenvolvimento, o que significa que
ela não diz o que se deve fazer primeiro e em seguida como projetar seu sistema, mas ela
auxilia a visualizar o desenho e a comunicação entre objetos do sistema sendo modelado.
Nós lhe convidamos a conhecer o mundo da modelagem de software por meio das
técnicas da modelagem unificada baseada na UML, caro aluno. Os aspectos teóricos e os
conceitos da UML serão mesclados com a notação, modelagem e relacionamento entre os
diagramas. Você terá, além dos fundamentos teóricos, a possibilidade de ver exemplos
práticos nos quais os diagramas foram aplicados na modelagem. Então, prepare-se, e
venha junto conosco conhecer este tema interessante nas próximas páginas deste
material!
João Caldas Júnior
Elisamara de Oliveira
Capítulo 1
Fundamentos da Orientação a Objetos
Caro aluno, neste capítulo falaremos sobre a importância do processo de
desenvolvimento de software no ambiente da Engenharia de Software, relembraremos
os conceitos sobre os ciclos de vida e abordaremos os conceitos básicos da Orientação
a Objetos, bem como a relevância desses conceitos no cenário atual de
desenvolvimento de software. Exemplificaremos alguns dos principais problemas no
que se refere ao desenvolvimento de sistemas OO.
6
Pressman (2006) define processo como sendo “uma série de etapas que envolvem
atividades, restrições e recursos para alcançar a saída desejada”. Sua abordagem sobre o
significado de processo é ampla e cita algumas características que, segundo ele, estão
presentes em todos os processos:
O processo prescreve todas as suas principais atividades;
O processo utiliza recursos, está sujeito a um conjunto de restrições (como um
cronograma) e gera produtos intermediários e finais;
O processo pode ser composto de sub processos de algum modo relacionados.
Ele pode ser definido como uma hierarquia de processos, organizados de tal
maneira que cada sub processo tenha seu próprio modelo de processo;
Cada atividade do processo tem critérios de entrada e saída, de modo que seja
possível saber quando o processo começa e quando termina;
As atividades são organizadas em uma sequência, para que a ordem de
execução de uma atividade em relação às outras seja clara;
Todo processo tem um conjunto de diretrizes que explicam os objetivos de cada
atividade.
7
Leia o artigo “Conquistando Qualidade para o Projeto” de Marcelo Jacintho
Disponível em: http://www.internativa.com.br/artigo_gestao.html
“...O ciclo de vida a ser adotado será uma das tônicas agora, pois dependendo das
características do projeto, do cliente e da própria equipe, alguns modelos de ciclo de vida não
são recomendáveis. Ainda, o famigerado e tão perseguido ciclo de vida Cascata, se estiver com
grandes chances de ser escolhido, precisará sempre passar por uma crítica muito severa, haja
vista que as estatísticas de desempenho da indústria mundial de TI, largamente divulgadas
pelo Standish Group, apontam para um sucesso menor que 30% no resultado dos projetos, e,
pesquisas correlatas apontam que a utilização de um ciclo de vida que não permite uma
antecipação de riscos, nem testes de parciais do sistema em desenvolvimento, e que ignora a
natureza mutável dos requisitos, está ligada a este ciclo e a este resultado. É claro que não
podemos esquecer que é possível ser bem sucedido utilizando o Cascata, porém o mercado
vem sinalizando muito forte para a utilização de modelos diferentes. ...”
8
Na OO as funções e os dados são fundidos para formar a entidade objeto. Os
objetos, diferentemente dos dados passivos das linguagens tradicionais, podem atuar.
Suas ações são ativadas pelas mensagens enviadas e depois processadas por funções
chamadas métodos.
Uma coleção de objetos similares é chamada classe. Uma instância de uma classe
é um objeto. A maior abstração é conseguida pelo uso da hierarquia de classes. Para
reutilizar métodos, as hierarquias de classe recorrem ao mecanismo exclusivo da OO que
é a herança ou hereditariedade.
Quando um programa OO é executado ocorrem 3 eventos:
Os objetos são criados de acordo com a necessidade
As mensagens movimentam-se de um objeto para outro
Quando os objetos não são mais necessários, eles são apagados e a área na
memória recuperada
Fonte: http://ccsourcecode.blogspot.com.br/2011/05/o-que-e-orientacao-objetos.html
1.2.1. Abstração
Abstração consiste em focalizar nos aspectos essenciais inerentes a uma entidade e
ignorar propriedades “acidentais”. Em termos de desenvolvimento de sistemas, isto
significa concentrar-se no que um objeto é e faz antes de se decidir como ele será
implementado. O uso de abstração dá ao programador a liberdade de tomar decisões de
desenvolvimento ou de implementação apenas quando há um melhor entendimento do
problema a ser resolvido.
Muitas linguagens de programação modernas suportam o conceito de abstração de
dados, porém, o uso de abstração juntamente com polimorfismo e herança, como
suportado em orientação a objetos, é um mecanismo muito mais poderoso.
O uso apropriado de abstração permite que um mesmo modelo conceitual
(orientação a objetos) seja utilizado para todas as fases de desenvolvimento de um
sistema, desde sua análise até sua documentação.
Na modelagem orientada a objetos uma das questões mais importantes consiste na
identificação de abstrações que melhor descrevem o domínio do problema. É a capacidade
de identificação de aspectos semelhantes quanto à forma e ao comportamento que
permitem a organização das classes.
10
1.2.2. Objetos e Classes
Um objeto é definido como uma entidade concreta com limites e significados bem
definidos para a aplicação sendo desenvolvida. Um objeto possui:
Identidade: característica que o distingue dos demais objetos
Estado: conjunto de valores de seus atributos em um determinado instante
Comportamento: reação apresentada às solicitações feitas por outros objetos
com os quais se relaciona
Os objetos têm dois propósitos: promover o entendimento do mundo real e suportar
uma base prática para uma implementação computacional. Não existe uma maneira
“correta” de decompor um problema em objetos; esta decomposição depende do
julgamento do projetista e da natureza do problema. Todos os objetos têm identidade
própria e são distinguíveis.
Uma classe descreve um grupo de objetos com propriedades (atributos) similares,
comportamento (operações) similares, relacionamentos comuns com outros objetos e uma
semântica comum. Por exemplo, considere que PessoaFisica e PessoaJuridica
sejam classes de objetos. Entretanto, devido à distinção semântica, elas provavelmente
estariam agrupadas em outra classe como Entidade.
A figura 1 mostra outro exemplo de classe e objeto. Na figura 1 existe a classe
Pessoa e uma enfermeira, um musico e um jogador seriam objetos desta classe.
1.2.3. Atributos
Um atributo é um valor de dado assumido pelos objetos de uma classe. É um dado
ou informação de estado, para o qual cada objeto em uma classe tem seu próprio valor.
Por exemplo, um objeto da classe PessoaFisica tem um nome e uma idade; cada
objeto da classe PessoaJuridica também tem um nome e uma idade a partir da sua
data de fundação; estes seriam atributos comuns das duas classes.
Se considerarmos uma outra classe Transportes, por exemplo, cor,
fabricante e modelo seriam possíveis atributos de objetos Carro, que seriam
instâncias da classe Transporte.
Cada atributo tem um valor para
cada instância de objeto. Diferentes
instâncias de objetos podem ter o mesmo
valor para um dado atributo. A figura 2
mostra um exemplo de atributos de objetos
da classe Pessoa mostrada na figura 1.
Estes atributos: nome, rg e idade são
comuns a todos os objetos, mas seus
valores são diferentes, neste caso.
12
1.2.4. Operações e Métodos
Uma operação é uma função ou transformação que pode ser aplicada a objetos em
uma classe. Por exemplo, abrir, salvar e imprimir são operações que podem ser
aplicadas a objetos da classe Arquivo. Todos os objetos em uma classe compartilham as
mesmas operações.
Toda operação tem um objeto-alvo como um argumento implícito. O comportamento
de uma operação depende da classe de seu alvo. Como um objeto “sabe” qual é sua
classe, é possível escolher a implementação correta da operação. Além disto, outros
argumentos (parâmetros) podem ser necessários para uma operação.
Uma mesma operação pode se aplicar a diversas classes diferentes. Quando isso
acontece, uma operação como esta é chamada de polimórfica, ou seja, ela pode assumir
distintas formas em classes diferentes.
Um método é a implementação de uma operação para uma classe. Por exemplo, a
operação imprimir pode ser implementada de forma distinta, dependendo se o arquivo a
ser impresso contém apenas texto não formatado, é um arquivo de um processador de
texto ou um arquivo binário. Todos estes métodos executam a mesma operação -- imprimir
o arquivo; porém, cada método será implementado por um diferente código.
Voltando ao exemplo da classe Pessoa, a figura 3 mostra alguns métodos que
poderiam ser aplicados aos seus objetos, como cadastrar, alterar, excluir.
13
A assinatura de um método é dada pelo número e tipos de argumentos do método,
assim como por seu valor de retorno. Uma estratégia de desenvolvimento recomendável é
manter assinaturas coerentes para métodos implementando uma dada operação, assim
como um comportamento consistente entre as implementações.
1.2.5. Encapsulamento
Encapsular, ou “esconder informação”, consiste em separar os aspectos externos de
um objeto, que são acessíveis a outros objetos, dos detalhes internos de sua
implementação, que permanecem escondidos. O uso de encapsulamento evita que um
programa torne-se interdependente de tal maneira que uma pequena mudança possa
provocar grandes efeitos colaterais.
O uso de encapsulamento permite que a implementação de um objeto possa ser
modificada sem afetar as aplicações que utilizam este objeto. Motivos para modificar a
implementação de um objeto podem ser, por exemplo, melhoria de desempenho, correção
de erros, mudança de plataforma de execução, dentre outros.
Assim como a abstração, o conceito de encapsulamento não é exclusivo da
abordagem de orientação a objetos. Entretanto, a habilidade de se combinar estrutura de
dados e comportamento em uma única entidade, torna o encapsulamento mais elegante e
mais poderoso do que em paradigmas convencionais que separam estruturas de dados e
comportamento.
1.2.6. Herança
Herança e generalização são abstrações poderosas para compartilhar similaridades
entre classes e ao mesmo tempo preservar suas diferenças. Generalização é o
relacionamento entre uma classe e uma ou mais versões refinadas (especializadas) desta
classe. A classe sendo refinada é chamada de superclasse ou classe base, enquanto que
a versão refinada da classe é chamada uma subclasse ou classe derivada. Atributos e
operações comuns a um grupo de classes derivadas são colocadas como atributos e
operações da classe base, sendo compartilhados por cada classe derivada. Diz-se que
cada classe derivada herda as características de sua classe base. Algumas vezes,
generalização é chamada de relacionamento is-a (é-um), porque cada instância de uma
classe derivada é também uma instância da classe base.
14
Herança e generalização são transitivas, isto é, podem ser recursivamente aplicadas
a um número arbitrário de níveis. Cada classe derivada não apenas herda todas as
características de todos seus ancestrais como também pode acrescentar seus atributos e
operações específicos.
A herança é uma característica exclusiva da OO e permite ao programador criar
novas classes programando apenas as diferenças entre elas e a classe-pai, já que herdam
dados e métodos desta. É o fruto de um mecanismo de hierarquia entre as classes, onde
uma classe mais especializada (classe-filha) herda as propriedades da classe mais geral
(classe-pai) a que ela está imediatamente subordinada. Como falamos antes, a classe
mais geral é denominada superclasse (ou classe base) e a classe mais especializada é
chamada de subclasse (ou classe derivada). Através da herança pode-se compartilhar
automaticamente métodos e atributos entre diferentes classes.
A figura 4 mostra um exemplo de herança na classe Pessoa mostrada nas figuras
1, 2 e 3. No exemplo, nome, rg e idade são atributos da classe base Pessoa, que serão
herdados pelas classes derivadas Aluno e Professor.
1.2.7. Polimorfismo
Objetos agem em resposta às mensagens que recebem. A mesma mensagem pode
resultar em ações diferentes quando recebidas por objetos diferentes. Esse fenômeno é
conhecido como polimorfismo, que permite que um usuário possa enviar uma mensagem
genérica e deixar os detalhes de implementação para o objeto receptor. Uma mensagem
15
de impressão, por exemplo, quando enviada a uma figura pode acessar métodos
diferentes daqueles acessados quando é enviada para um texto.
Polimorfismo significa “várias formas”. Para se aplicar polimorfismo é necessário
que haja uma relação de herança entre classes. Consiste em utilizar o mesmo método em
situações diferentes, de acordo com a classe em que foi definido. O polimorfismo em uma
mesma classe é chamado de sobrecarga de método (overloading).
Como exemplo, consideremos a figura 6, em que o exemplo da classe Pessoa
apresentado na figura 5 é retomado.
Na figura 5 podemos observar que os métodos cadastrar, alterar e excluir
são os mesmos herdados da classe Pessoa, mas certamente estas operações
relacionadas com Aluno e Professor têm implementações bastante distintas, em função
dos dados associados a cada um deles.
16
O IBM Rational Unified Process®, ou RUP®, é uma plataforma de processo de
desenvolvimento de software configurável que oferece melhores práticas comprovadas e
uma arquitetura configurável. O RUP é baseado na metodologia orientada a objetos que
define claramente quem é responsável pelo quê, como e quando as atividades devem ser
feitas e descreve todas as metas de desenvolvimento para que sejam alcançadas.
O RUP suporta a customização e autoria de processos e uma grande variedade de
processos, ou de configuração de processos, podem ser montadas em sua plataforma.
Essas configurações do RUP podem ser criadas para suportar tanto equipes grandes
quanto pequenas, que trabalhem com técnicas de desenvolvimento bem disciplinadas ou
menos formais. O produto RUP contém várias configurações e visões de processos
prontas que guiam analistas, desenvolvedores, testadores, gerentes de projeto, gerentes
de configuração, analistas de dados, e outros membros da equipe de desenvolvimento, em
como desenvolver o software. Ele tem sido utilizado por muitas empresas em diferentes
setores da indústria.
Para apresentarmos exemplos compreensíveis utilizando a UML ou Linguagem
Unificada de Modelagem teremos de utilizar alguma noção de processo, visto que a UML
não define a relação entre os diagramas. Portanto, em nossos exemplos, para especificar,
modelar e documentar a relação entre os diagramas apresentados, utilizaremos conceitos
relacionados ao processo RUP.
17
Exercícios do Capítulo 1
18
Capítulo 2
UML – Unified Modeling Language
Caro aluno, neste capítulo falaremos sobre a UML, uma ferramenta essencial na
modelagem de sistemas orientados a objetos. Abordaremos os conceitos básicos da modelagem
unificada, como e quando ela surgiu, sua estrutura e seu futuro.
20
2.2. Organização dos Diagramas da UML
A UML utiliza-se de um conjunto de técnicas de notação gráfica para criar modelos
visuais de software, combinando técnicas de modelagem de dados, negócios, objetos e
componentes. É uma linguagem de modelagem unificada, comum e amplamente utilizável.
Embora possibilite representar o software através de modelos orientados a objetos,
a UML não mostra que tipo de implementação deve ser feita, ou seja, não possui um
processo que define detalhes de como o trabalho tem que ser desenvolvido. O seu objetivo
é descrever “o que fazer”, “como fazer”, “quando fazer” e “porque deve ser feito”. É
necessária a elaboração completa de um dicionário de dados para descrever todas as
entidades envolvidas. Este processo permite que se realize o refinamento dos requisitos
funcionais do software.
A Linguagem Unificada de Modelagem possui modelos ou diagramas
(representações gráficas do modelo parcial de um sistema) que são usados, de forma
combinada, com a finalidade de obter todas as visões e aspectos do sistema. Os
diagramas da UML (veja figura 6) estão divididos em Estruturais e Comportamentais e são
os seguintes:
• Diagramas Estruturais
Diagrama de Classe
Diagrama de Objeto
Diagrama de Componentes
Diagrama de Implantação
Diagrama de Pacotes
Diagrama de Estrutura Composta
• Diagramas Comportamentais
Diagrama de Caso de Uso
Diagrama de Máquina de Estados
Diagrama de Atividades
Diagramas de Interação, que dividem-se em:
o Diagrama de Sequência
o Diagrama de Interação Geral
o Diagrama de Comunicação
o Diagrama de Tempo
21
Figura 6 – Diagramas da UML
Fonte: http://www.infoescola.com/wp-content/uploads/2010/03/DiagramasdaUML.jpg
22
2.3.1. Diagrama de Casos de Uso
O diagrama de casos de uso especifica um conjunto de funcionalidades, através do
elemento sintático “casos de uso”, e os elementos externos que interagem com o sistema,
através do elemento sintático “ator”. [SILVA, 2007] Além de casos de uso e atores, este
diagrama contém relacionamentos de dependência, generalização e associação.
Estes diagramas são basicamente usados para fazer a modelagem de visão estática
dos casos de uso do sistema. Essa visão proporciona suporte principalmente para o
comportamento de um sistema, ou seja, os serviços externamente visíveis que o sistema
fornece no contexto de seu ambiente. Os diagramas de caso de uso são usados para fazer
a modelagem do contexto de um sistema e fazer a modelagem dos requisitos de um
sistema.
23
pacotes e mostrando as dependências entre eles, uma vez que pacotes podem depender
de outros pacotes.
Este diagrama é muito utilizado para representar a arquitetura de um sistema
mostrando o agrupamento de suas classes, já que um pacote pode representar um grupo
de classes que se relacionam com outros pacotes através de uma relação de dependência.
24
relacionadas aos objetos. Estes diagramas estão sempre associados a uma Classe,
uma Operação ou um Caso de Uso.
Os diagramas de atividade suportam atividades sequenciais e paralelas. Para as
atividades executadas em paralelo não é importante a ordem na qual elas são executadas,
já que podem ser executadas ao mesmo tempo ou uma após a outra. As atividades
sequenciais são registradas através de ações e transições que seguem um ordenamento.
26
2.4. O Futuro da UML
Um sistema de software é
inerentemente muito abstrato e,
portanto, difícil de ser visualizado. Uma
linguagem de modelagem, como a UML,
contribui para se quebrar este alto nível
de abstração, permitindo que o software
possa ser visualizado em diferentes
dimensões, de forma que o sistema
possa ser compreendido antes de ser
implementado. Além disso, a UML pode
ser usada para produzir vários modelos
do sistema com níveis crescentes de detalhamento.
Um aspecto muito interessante, também, é que não somente sistemas novos
podem ser modelados. A UML pode ser utilizada para modelar um sistema já existente,
fornecendo uma visão mais adequada do mesmo para facilitar sua manutenção ou
atualização. Além disso, a UML documenta um sistema. Um software bem documentado
apresenta grande vantagem, já que o torna visível e transparente, facilitando sua
compreensão e manutenção.
A UML é uma linguagem unificada e universal e pode ser aplicada em muitas áreas
de desenvolvimento de software, já que foi concebida para fornecer mecanismos de
especialização e extensão que permitem a modelagem de requisitos específicos de
diferentes sistemas. Adicionalmente, a UML é independente das linguagens de
programação usadas e dos processos de desenvolvimento.
Com todas estas vantagens, a UML vem se tornando um padrão mundialmente
utilizado para a modelagem de sistemas. Embora seu uso e sua aceitação sejam
crescentes, o seu desenvolvimento não está estagnado e seus mecanismos estão sujeitos
a aperfeiçoamentos. Além disso, novas técnicas de modelagem podem ser definidas
usando a própria UML como base.
Cada vez mais ferramentas de integração e padrões de implementação estão sendo
criados baseados na UML. Isso vem facilitando o trabalho dos desenvolvedores e
disseminando, cada vez mais, o desenvolvimento de sistemas orientados a objetos.
27
Exercícios do Capítulo 2
1) Assinale “F” para falso ou “V” para verdadeiro:
( ) A UML pode ser utilizada somente para modelagem de sistemas ligados à área de
Informática.
( ) A UML é um método de desenvolvimento, o que significa que ela diz o que fazer
primeiro e em seguida como desenhar seu sistema.
28
Capítulo 3
Diagrama de Casos de Uso
Caro aluno, neste capítulo descreveremos os diagramas de casos de uso da
UML. Casos de uso são elementos classificadores que representam uma unidade
funcional coerente provida pelo sistema, subsistema, ou classe manifestada por
sequências de mensagens intercambiáveis entre os sistemas e um ou mais usuários. Os
casos de uso podem possuir narrativas em texto, descrevendo a unidade funcional, e
são amplamente utilizados para descobrir e registrar requisitos de sistemas.
29
Os Casos de Uso
so representam funcionalidades completas para o usuário e não
funcionalidades internas do sistema.
sistema O diagrama de casos de uso é um artefato de
comunicação entre cliente, usuários e desenvolvedores. Por ser extremamente simples e,
consequentemente, de fácil compreensão, incentiva a participação do cliente e usuários no
processo de desenvolvimento. Também serve como um contrato entre
entre a equipe/empresa
desenvolvedora e o cliente.
• Atores
30
• Caso de uso
3.2.2. Relacionamentos
Os relacionamentos nos diagramas de caso de uso podem ser:
associações
ões entre atores e casos de uso
generalizações entre os atores
generalizações, extends e includes entre os casos de uso.
• Associação (entre
ntre um ator e um caso de uso)
uso
• Generalização (entre
ntre atores)
atores
• Include (entre
ntre casos de uso)
uso
31
• Extend (entre casos de uso)
Ponto de extensão em um caso de uso é uma indicação de que outros casos de uso
poderão ser adicionados a ele. Quando o caso de uso for invocado, ele verificará se
suas extensões devem ou não serem invocadas.
Você entendeu?! Provavelmente, não. O extend é considerado
considera um conceito
obscuro. Vamos a novas explicações. Quando se especifica B extends A, a semântica
é:
Dois casos de uso são definidos: A e A extended by B;
B é uma variação de A: contém
contém eventos adicionais, para certas condições;
Tem que ser especificado onde B é inserido em A.
32
Figura 7 - Diagrama de Caso de Uso para o Sistema Casa Segura
Figura 8 – Exemplo de uma interface para A figura 8 ilustra uma possível interface para
o sistema Casa Segura este sistema.
Fonte: http://www.sraengenharia.blogspot.com.br/
33
Tabela 2 – Documentação do Caso de Uso “Autorizar Proprietário” do
sistema Casa Segura
Caso de Uso Autorizar Proprietário
Caso de Uso Geral Realizar a autorização de um proprietário
Ator Principal Proprietário
Pré-condição Sistema estar Ligado
Fluxo Principal 1. O proprietário digita seu username
2. O proprietário digita sua senha
3. O proprietário pressiona o botão “Autorizar”
4. O sistema verifica as informações de login
5. O sistema apresenta a tela inicial da aplicação
Com base no que estudamos, podemos concluir que a saída da fase de análise de
requisitos deve ser composta por:
Lista de requisitos funcionais e não-funcionais;
Diagrama de casos de uso e documentações textuais dos casos.
34
Exercícios do Capítulo 3
2) Faça uma tabela que mostre que tipos de relacionamentos são possíveis entre um ator
e um caso de uso. Que tipo de relacionamento pode haver entre casos de uso? Que tipo
de relacionamento pode haver entre atores?
35
Capítulo 4
Diagrama de Classes
Caro aluno, neste capítulo descreveremos o Diagrama de Classes que é um dos
mais importantes diagramas da UML. Este diagrama está no centro da arquitetura de
um sistema OO e é a partir dele que outros diagramas são elaborados. O diagrama de
classes é uma importante ferramenta para a documentação de um sistema ou produto
de software OO.
36
Figura 9 – Exemplo de um MER- Modelo Entidade-Relacionamento
Relacionamento
Fonte: http://itsolutionsproject.wordpress.com/banco-de-dados
http://itsolutionsproject.wordpress.com/banco dados-i/
4.2.1. Classes
As classes, no diagrama de classes, são representadas por um retângulo com,
normalmente, três divisões, a saber: o nome da classe, os atributos e as operações;
operações esses
dois últimos, com os seus tipos e respectivos escopos.
37
É importante que o nome da classe seja uma palavra única, preferencialmente, sem
caracteres especiais e acentuados, isso evitará problemas na geração do código fonte do
diagrama.
Em uma classe, os atributos representam as propriedades da classe e as
operações, representam os métodos desta classe.
4.2.2. Relacionamentos
• Associação
• Agregação
38
A agregação é um tipo de relacionamento que não força a destruição do conjunto,
ou seja, uma vez destruído o “objeto todo”, não há obrigatoriedade da destruição do
“objeto parte”, assim, na figura, mesmo se uma equipe “X” acabar, o jogador poderá fazer
parte de outra equipe.
• Composição
• Multiplicidade
39
• Nome do Papel
• Generalização
40
4.2.3. Estereótipo
Segundo Booch (2005, p. 455) estereótipo trata-se de “uma extensão do vocabulário
da UML, que permite a criação de novos tipos de blocos de construção derivados dos já
existentes, mas que são específicos ao seu problema”. Os estereótipos são representados
por aspas francesas <<nome do estereótipo>>. São normalmente predefinidos na própria
linguagem UML mas, por outro lado, a equipe de desenvolvimento pode definir os seus
próprios estereótipos, assim esclarece Sommerville (2007). A UML também permite que o
usuário defina os estereótipos a serem utilizados em determinada situação de modelagem.
Dessa forma, podemos ter estereótipos de dois tipos: predefinidos ou definidos pela equipe
de desenvolvimento.
4.2.4. Interface
A interface define apenas a
assinatura dos métodos da classe sem
apresentar sua implementação.
Normalmente, nas linguagens de
programação orientadas a objetos, as
interfaces não apresentam atributos.
A interface implementa a
programação por contrato. A figura ao
lado apresenta duas representações de
interface e o seu relacionamento com
uma classe. No segundo exemplo note o
uso do estereótipo para evidenciar a
interface.
41
Na figura abaixo, observe que, se um fornecedor pode oferecer mais de um produto
e um produto pode ser oferecido por mais de um fornecedor, temos um relacionamento N
para N. Caso o cliente deseje verificar a data e o valor total de um fornecimento, isso
poderá ser resolvido facilmente por uma classe associativa de nome Fornecimento.
4.2.6. Enumeração
Enumeração é um recurso usado em várias linguagens de programação. São listas
(literais) que podem ser armazenadas como valores ou passadas como parâmetros. Para
representá-las usa-se o estereótipo <<enumerated>> ou <<enumeration>>.
43
4.2.9. Classe Abstrata
É uma classe que não possui uma instância imediata. A classe abstrata fornece os
elementos para que classes descendentes possam instanciar seus próprios objetos, cada
um com suas particularidades. No Diagrama de Classes a classe abstrata é definida pelo
estereótipo <<abstract>>.
.
Figura 10 - Diagrama de Classes para o Sistema Casa Segura
44
4.4. Estereótipos da Classe
Para dar prosseguimento à documentação de um sistema, iniciada com os casos de
uso, muitas vezes, em um projeto, existe a necessidade de representar elementos em um
diagrama de classe que descrevam os mais variados tipos de participações. Uma classe e
seus objetos normalmente participam de formas diferentes no transcorrer de um caso de
uso. Ao representar uma classe, é importante definir que tipo de estereótipo se pode usar
para qualificar esta participação. De acordo com o tutorial RUP (2001), os estereótipos de
classe podem ser definidos como:
Classes de Fronteira
Classes de Controle
Classes de Entidade
As classes de fronteira modelam as partes do sistema que dependem do ambiente.
As classes de controle e de entidade modelam as partes que são independentes de fatores
externos ao sistema.
Além de fornecer orientações mais específicas do processo para se identificar
classes, a criação de estereótipos é um modelo de objetos muito importante, pois permite
que mudanças no modelo afetem somente uma área específica. Com esta modelagem, as
mudanças na interface do usuário, por exemplo, irão afetar somente as classes de
fronteira. As mudanças no fluxo de controle irão afetar somente as classes de controle. As
mudanças em informações de longo prazo irão afetar somente as classes de entidade.
Esses estereótipos são especialmente úteis para identificar classes em análise no
projeto inicial. É muito provável que, em fases posteriores do projeto, seja necessário
utilizar um conjunto de estereótipos ligeiramente diferente para fazer uma correlação
melhor com o ambiente de implementação, com o tipo de aplicativo, e assim por diante.
No que se segue, estas três categorias de classes serão melhor explicadas e dicas
serão fornecidas para que você consiga identificá-las e modelar o seu sistema, caro aluno.
45
Portanto, alterar a GUI – Graphic User Interface (Interface Gráfica com o Usuário)
ou o protocolo de comunicação significa alterar somente as classes de fronteira, e não as
classes de entidade e de controle.
As classes de fronteira também facilitam a compreensão do sistema, pois definem
suas fronteiras. Elas ajudam no projeto, fornecendo um bom ponto de partida para
identificar serviços relacionados. Por exemplo, se você identificar uma interface de
impressora logo no início do projeto, perceberá de imediato que também deve modelar a
formatação das impressões.
Algumas classes de fronteira comuns são janelas, protocolos de comunicação,
interfaces de impressora, sensores e terminais. Se você estiver usando um construtor GUI,
não será necessário modelar partes da interface de rotinas (botões, por exemplo) como
classes de fronteira separadas. Geralmente, a janela inteira é o objeto de fronteira mais
refinado. As classes de fronteira também são úteis para capturar interfaces para APIs –
Application Program Interface (Interface de Programas de Aplicação) possivelmente não
orientadas a objetos (como um código mais antigo, por exemplo).
Você deve modelar as classes de fronteira de acordo com o tipo de fronteira que
elas representam. A comunicação com outro sistema e a comunicação com um ator
humano (através de uma interface do usuário) têm objetivos diferentes. Durante a
modelagem da interface do usuário, a principal preocupação deve ser a forma como a
interface será apresentada a ele. Durante a modelagem da comunicação do sistema, a
principal preocupação deve ser o protocolo de comunicação.
Um objeto de fronteira (uma instância de uma classe de fronteira) poderá durar mais
que uma instância de caso de uso se, por exemplo, precisar ser exibido em uma tela entre
o desempenho de dois casos de uso. Os objetos de fronteira, porém, costumam ter a
mesma duração da instância de caso de uso.
Uma classe de fronteira faz a intermediação entre a interface e algo fora do sistema.
Os objetos de fronteira isolam o sistema de mudanças externas (mudanças nas interfaces
com outros sistemas, nos requisitos do usuário, etc.), impedindo que elas afetem o
restante do sistema.
Um sistema pode ter vários tipos de classes de fronteira:
46
Classes de interface do usuário - classes que intermediam a comunicação
com usuários humanos do sistema, como um painel de controle que recebe a
interação do usuário.
Classes de interface do sistema - classes que intermediam a comunicação
com outro sistema, como uma biblioteca que permite a troca de informações com
a internet.
Classes de interface de dispositivo - classes que fornecem a interface para
dispositivos (como sensores) que detectam eventos externos.
47
Saiba Mais sobre Engenharia Reversa lendo o artigo “O que é
Engenharia Reversa” de Oliver Hautsch publicado em 28/09/2009
Disponível em:
http://www.tecmundo.com.br/pirataria/2808-o-que-e-engenharia-
reversa-.htm
49
As classes de controle fornecem um comportamento que:
Independe de fatores externos (o comportamento não se altera quando o
ambiente é alterado)
Define a lógica de controle (ordem entre os eventos) e as transações em um
caso de uso
É pouco alterado se a estrutura interna ou o comportamento das classes de
entidade se altera
Usa ou define o conteúdo de várias classes de entidade e, portanto, precisa
coordenar o comportamento dessas classes
Não é executado da mesma maneira toda vez que é ativado (o fluxo de eventos
apresenta vários estados).
50
Um objeto de entidade geralmente não é específico para uma realização de casos
de uso. Às vezes, um objeto de entidade não é nem mesmo específico para o próprio
sistema.
Os objetos de entidade representam os conceitos-chave do sistema que está sendo
desenvolvido. Os valores de seus atributos e relacionamentos costumam ser fornecidos
por um ator. Um objeto de entidade também pode ajudar a executar tarefas internas do
sistema. Seu comportamento pode ser tão complicado quanto o de outros estereótipos de
objeto. No entanto, ao contrário de outros objetos, esse comportamento está
intrinsecamente relacionado ao fenômeno que o objeto de entidade representa. Os objetos
de entidade independem do ambiente, ou seja, independem dos atores.
Exemplos típicos de classes de entidade em um sistema bancário são Conta e
Cliente; em um sistema de gerenciamento de redes, são Nó e Link.
Se o fenômeno que se deseja modelar não for usado por outras classes, será
possível modelá-lo como um atributo de uma classe de entidade ou mesmo como um
relacionamento entre classes de entidade. Por outro lado, se o fenômeno for usado por
qualquer outra classe do modelo de projeto, será preciso modelá-lo como uma classe.
As classes de entidade fornecem um outro ponto de vista do sistema, pois mostram
a estrutura lógica dos dados, que pode ajudar a compreender o que o sistema deve
oferecer aos usuários.
51
Exercícios do Capítulo 4
52
Capítulo 5
Diagramas de Interação
Caro aluno, neste capítulo descreveremos os diagramas de interação que têm
por função representar a interação de objetos, servindo como especificações
comportamentais
omportamentais que incluem sequências
sequ de troca de mensagens
gens entre objetos dentro
de um contexto a fim de realizar um determinado propósito.
53
5.2. Diagrama de Sequência
Na maioria dos casos, usamos um diagrama de sequência para ilustrar as
realizações de casos de uso, isto é, para mostrar como os objetos interagem para executar
o comportamento total ou parcial de um caso de uso. Um ou mais diagramas de sequência
podem ilustrar as interações de objetos que constituem um caso de uso. Uma modelagem
típica deve apresentar um diagrama de sequência para o fluxo principal de eventos e um
diagrama de sequência para cada subfluxo independente do caso de uso.
Os diagramas de sequência são muito importantes porque eles esclarecem os
papéis dos objetos em um fluxo e, portanto, fornecem a entrada básica para se determinar
responsabilidades de classe e interfaces.Podemos ter objetos e instâncias de ator em
diagramas de sequência, juntamente com mensagens que descrevem como eles
interagem. O diagrama descreve o que ocorre nos objetos participantes, em termos de
ativações, e como os objetos se comunicam enviando mensagens uns aos outros. É
possível fazer um diagrama de sequência para cada variante do fluxo de eventos de um
caso de uso.
A figura 11 apresenta, como exemplo, um diagrama de sequência que descreve
parte do fluxo de eventos do caso de uso “Criar Nota” em um Blog. Neste exemplo
podemos ver um objeto da classe de interface GUIBlog, recebendo a interação do
usuário, o objeto da classe de controle ControladorBlog, centralizando as chamadas da
interface e por fim os objetos das classes de entidade Blog e Nota, onde as ações
propriamente ditas são executadas.
5.3.1. Objetos
Um objeto é mostrado como uma linha tracejada vertical denominada "linha de
vida". A linha de vida representa a existência do objeto em um momento específico. No
diagrama de sequência, um símbolo de objeto é desenhado no alto da linha de vida e
mostra o nome do objeto e sua classe sublinhada, separada por “:”, como em
Nome_do_Objeto: Nome_da_Classe. Na figura 11, são exemplo de objetos GUIBlog,
ControladorBlog, Blog e Nota.
Podemos usar objetos em diagramas de sequência das seguintes formas:
Uma linha de vida pode representar um objeto ou sua classe. Portanto, a linha
de vida pode ser usada para modelar tanto o comportamento da classe quanto
do objeto. Contudo, em geral, uma linha de vida representa todos os objetos de
uma determinada classe.
Uma classe de objeto pode não estar especificada. Geralmente, primeiro é
criado um diagrama de sequência com objetos e mais tarde especifica as suas
classes.
Os objetos podem não ter nome, mas é recomendável nomeá-los caso se queira
diferenciar os diversos objetos da mesma classe.
Várias linhas de vida no mesmo diagrama podem representar objetos diferentes
da mesma classe; mas, como foi dito anteriormente, os objetos devem ser
nomeados para que se possa estabelecer a diferença entre os dois objetos.
Uma linha de vida que representa uma classe pode existir paralelamente a linhas
de vida que representam objetos daquela classe. O nome do objeto da linha de
vida que representa a classe pode ser definido com o nome da classe.
55
5.3.2. Atores
Geralmente, uma instância de ator é representada pela primeira (mais à esquerda)
linha de vida no diagrama de sequência, como o disparador da interação. Se houver várias
instâncias de atores no mesmo diagrama, é costume mantê-las na linha de vida mais à
esquerda ou na linha mais à direita. Na figura 11, o UsuarioBlog é um exemplo de ator.
5.3.3. Mensagens
Uma mensagem é uma comunicação entre objetos que leva informações na
expectativa de que seja produzida uma atividade. Nos diagramas de sequência, uma
mensagem é mostrada como uma seta sólida horizontal partindo da linha de vida de um
objeto para a linha de vida de outro objeto. No caso de uma mensagem de um objeto para
si mesmo, a seta pode iniciar e terminar na mesma linha de vida. A seta é rotulada com o
nome da mensagem e seus parâmetros. Ela também pode ser rotulada com um número
que indique a sequência da mensagem no processo geral de interação. Mas os números
sequenciais são omitidos em diagramas nos quais a localização física da seta já mostra a
sequência relativa.
Uma mensagem pode ser não-atribuída, o que significa que seu nome é uma
sequência de caracteres temporária que descreve o sentido geral da mensagem e não é o
nome de uma operação do objeto recebedor. Neste caso, mais tarde, pode-se especificar a
operação do objeto de destino da mensagem. A operação especificada substituirá, então, o
nome da mensagem.
Na figura 11, CriarNota() e ConsultarBlog() são alguns dos exemplos de
mensagens.
56
Uma estrutura de controle é centralizada principalmente quando as diferentes fases
de sub eventos do fluxo de eventos não dependem umas das outras. A principal vantagem
desse método é que cada objeto não precisa controlar a contagem do objeto seguinte.
Para mudar a ordem das fases de sub eventos, basta fazer a mudança no objeto de
controle. Ainda é possível adicionar outra fase de sub evento se, por exemplo, for incluído
um novo tipo de item retornável. Outra vantagem dessa estrutura é que podemos reutilizar
as várias fases de sub eventos em outros casos de uso, porque a ordem de
comportamento não está embutida nos objetos.
Vamos exemplificar um caso centralizado na seguinte situação:
No Sistema da Máquina de Reciclagem, o caso de uso Imprimir Relatório
Diário controla, entre outros, o número e o tipo de objetos retornados, e escreve a
contagem em um recibo. O objeto de controle Gerador de Relatório decide a ordem
em que os totais serão extraídos e escritos.
Esta situação é mostrada na figura abaixo.
Fonte:http://www.wthreex.com/rup/process/modguide/images/ds.gif
57
O controle descentralizado surge quando os objetos participantes se comunicam
diretamente entre si, e não através de um ou mais objetos controladores.
Vamos exemplificar um caso centralizado na seguinte situação:
No caso de uso Enviar Carta, ilustrado na figura abaixo, alguém remete uma
carta para outro país através de uma agência de correio. Primeiro, a carta é enviada para o
país do destinatário. Neste país, a carta é enviada para uma cidade específica. A cidade, por
sua vez, envia a carta para a residência do destinatário. A estrutura de comportamento
deste caso de uso é descentralizada porque o comportamento do caso de uso reflete um
fluxo de eventos descentralizado. Neste exemplo, as fases de sub eventos integram o
conjunto. O remetente da carta fala em "enviar uma carta a alguém", mas não precisa nem
deseja saber os detalhes de como as cartas são enviadas em países ou cidades.
Provavelmente, se alguém remetesse uma carta de dentro do mesmo país, nem todas as
ações ocorreriam.
Fonte: http://www.wthreex.com/rup/process/modguide/images/md_seqd4.gif
58
Um fluxo de eventos com controle centralizado terá um diagrama de sequência "em
forma de forquilha". Por outro lado, um diagrama de sequência "em forma de escada"
ilustra que a estrutura de controle foi descentralizada para os objetos participantes. A figura
12 ilustra estes dois casos.
59
o Representarem uma progressão cronológica fixa (a sequência de fases de
subeventos será sempre realizada na mesma ordem), como Anúncio -
Pedido - Fatura -Remessa - Pagamento; ou
o Formarem uma hierarquia de herança conceitual, como Animal - Mamífero
- Gato.
Se deseja-se encapsular a funcionalidade e, portanto, fazer abstrações dela. Isso
é bom para alguém que deseje utilizar sempre a funcionalidade inteira, porque a
funcionalidade pode se tornar desnecessariamente de difícil compreensão caso
a estrutura de comportamento seja centralizada.
60
comunicam entre si por intermédio
interm de mensagens. Podemos, igualmente,
igualmen criar um
diagrama de comunicação para cada variante de fluxo de eventos de um caso de uso.
Um diagrama de comunicação é normalmente utilizado como complemento do
diagrama de sequência, porém
m possui um enfoque diferente, concentrando-se
concentrando em como os
objetos estão vinculados através de mensagens. Pode ser gerado a partir do diagrama de
sequência por representarr os mesmos dados. Para exemplificar
car essa igualdade semântica
entre ambos os diagramas,, na figura 13
1 é mostrado o Diagrama de Comunicação para o
exemplo de Diagrama de Sequência
Sequê mostrado na figura 11 para o mesmo caso.
caso
Figura 13 – Exemplo
mplo de um diagrama de comunicação para criar uma nota em um
blog
61
Figura 14 – Diagrama de Comunicação para se realizar um Depósito num Banco 24horas
Fonte: http://www.wthreex.com/rup/process/modguide/images/collab1.gif
62
Exercícios do Capítulo 5
Uma locadora de veículos possui vários veículos que podem ser alugados. Cada veículo
possui várias informações (placa, cor, modelo, ano, preço) e pode ser alugado para
somente um cliente de cada vez. O cliente, por sua vez, apresenta várias informações
(nome, cpf e cartão de crédito) e pode alugar somente 1 carro. O aluguel de um veículo
tem a quantidade de dias alugados, bem como o preço total. Utilize como base o
diagrama de classes conceituais resultante da análise. Considere que todos os objetos
estão na memória principal.
63
Capítulo 6
Diagrama de Máquina de Estados e
Diagrama de Atividades
Caro aluno, neste capítulo descreveremos os Diagramas de Estados e de
Atividades que representam estados ou situações em que um objeto pode se encontrar
no decorrer da execução de processos de um sistema. São diagramas que descrevem a
trajetória de um objeto a partir do seu estado inicial até o seu possível estado final,
por meio de transições.
Figura 15
1 – Exemplo de Máquina de Estados
Fonte: http://www.wthreex.com/rup/process/modguide/images/md_state1.gif
65
6.3. Componentes de um Diagrama de Máquina de Estados
O diagrama de Máquina de Estados é representado por:
Estados
Transições
Condições de Guarda
Ações
Estes componentes são explicados a seguir.
6.3.1. Estados
Um estado é uma condição de um objeto em que ele realiza alguma atividade ou
espera um evento. Um objeto pode permanecer em um estado durante um tempo limitado.
Um estado tem várias propriedades, apresentadas na tabela 3. Na figura 15 podemos
identificar os estados: “Ocioso”, “Conectando” e “Conectado”.
Existem dois estados especiais que podem ser definidos para a máquina de estado
de um objeto. O estado inicial indica o local inicial padrão para a máquina de estado ou o
subestado. Um estado inicial é representado como um círculo de preenchimento preto. O
estado final indica o término da execução da máquina de estado ou que o estado
confinado foi concluído.
66
Um estado final é representado como um círculo de preenchimento preto dentro de
um círculo sem preenchimento. Os estados final e inicial são, na verdade, pseudo-estados.
Nenhum dos dois pode ter as partes usuais de um estado normal, exceto o nome. Uma
transição de um estado inicial para um estado final pode ter o complemento completo de
características, incluindo uma condição de guarda e uma ação.
6.3.2. Transições
Uma transição é um relacionamento entre dois estados indicando que um objeto no
primeiro estado executará certas ações e entrará em um segundo estado quando ocorrer
um evento especificado e determinadas condições forem satisfeitas. Nessa mudança de
estado, diz-se que a transição foi “acionada”. Até que a transição seja acionada, diz-se
que o objeto está no estado “de origem”; após o seu acionamento, diz-se que o objeto está
no estado “de destino”. Uma transição tem várias propriedades apresentadas na tabela 4.
67
Uma transição pode ter várias origens (nesse caso, ela representa uma junção de
vários estados simultâneos) e vários alvos (nesse caso, ela representa uma forquilha para
vários estados simultâneos). Na figura 15 podemos identificar as transições “OnHook” e
“OffHook” como exemplos.
6.3.4. Ações
Uma ação é um cálculo indivisível executável, ou seja, ela não pode ser
interrompida por um evento e, portanto, é executada até a sua conclusão. Isso contrasta
com uma atividade, que pode ser interrompida por outros eventos. As ações podem incluir
chamadas de operação (para o proprietário da máquina de estado, bem como para outros
objetos visíveis), a criação ou a destruição de outro objeto, ou o envio de um sinal para
outro objeto. No caso de envio de um sinal, o nome do sinal recebe como prefixo a
palavra-chave “send”. A figura 15 mostra como exemplo a ação “Keep Alive/Check()” para
o estado “Ocioso”.
68
Figura 16 – Máquina de Estados para a classe Camera do sistema Casa Segura
70
No diagrama de atividades da figura 17, podemos identificar a atividade “Verificar
reserva” com uma atividade inicial sendo seguida da Decisão [correto] ou [incorreto], que
expressa qual foi o resultado da primeira atividade. Antes da atividade final “Entregar
documentação de viagem para o passageiro” existe uma barra de sincronização, que é
usada para deixar claro que todas as atividades anteriores devem ser encerradas antes do
início desta última.
Um diagrama de atividades pode ser particionado em raias usando linhas sólidas
verticais. Cada raia representa uma responsabilidade por uma parte do fluxo de trabalho,
contido em uma parte da organização. Eventualmente, uma raia pode ser implementada
por uma unidade organizacional ou por um conjunto de classes no modelo de objetos de
negócios. A ordem relativa de raias não tem significado semântico. Cada estado de
atividade é atribuído a uma raia, e as transições podem ser pistas cruzadas. A figura 18
ilustra o uso de raias.
72
6.8. Diagramas de Atividades Aninhados
Um estado de atividade pode fazer referência a outro diagrama de atividades que
mostre a estrutura interna do estado de atividade.
atividade Neste caso podemos ter diagramas de
atividades aninhados. É possível mostrar o subgráfico dentro do estado de atividade ou
permitir que o estado de atividade faça referência a outro diagrama. A figura 20 ilustra esta
situação.
Mostrar
ostrar o subgráfico dentro de um estado de atividade é conveniente quando se
deseja ver todos os detalhes do fluxo de trabalho em um diagrama de atividades. No
entanto, se houver qualquer nível de complexidade no fluxo de trabalho apresentado, isso
pode dificultar a leitura do diagrama. Para simplificar o gráfico do fluxo de trabalho, é
possível inserir o subgráfico em um diagrama separado e permitir que o estado de
atividade detalhado no subgráfico
ubgráfico faça referência a esse diagrama.
73
Mais um exemplo de Diagrama de Atividades
“O que vem primeiro, o diagrama de atividades ou a descrição textual do fluxo de
trabalho? Isso depende um pouco de como você costuma trabalhar, e se você usa gráficos
ou não. Alguns preferem resumir visualmente a estrutura em um diagrama primeiro e
depois desenvolver os detalhes no texto. Outros preferem iniciar com uma lista com
marcadores de estados de atividade, estar de acordo com elas e depois definir a estrutura
usando um diagrama.
Outra questão válida é se você realmente precisa do diagrama e do documento
textual. A técnica de diagrama de atividades não permite escrever descrições breves de
cada estado de atividade, que deve fazer a especificação textual do fluxo de trabalho
obsoleto. Aqui é preciso estar atento ao público-alvo e ao formato no qual eles esperam a
especificação. “
Para ilustrar este processo, veja a figura abaixo que mostra um diagrama de
atividades. Este exemplo foi obtido de uma organização que vende soluções para redes
de telecomunicações, configuradas individualmente para cada cliente.
Fonte: http://www.wthreex.com/rup/process/modguide/images/md_bact3.gif
74
Exercícios do Capítulo 6
1) Crie o Diagrama de Estados para uma máquina que, inicialmente, aguarda moedas
para liberar seus produtos; quando o cliente coloca a moeda, a máquina fica
aguardando o mesmo puxar a alavanca para liberar o produto; após a retirada do
produto a máquina retorna ao seu estado inicial.
75
Considerações Finais
Caro aluno, após completarmos juntos o estudo sobre a análise e modelagem
orientada a objetos utilizando a UML e conhecermos os detalhes de seus principais
diagramas, esperamos que você esteja pensando em aprofundar seus conhecimentos
nesta área!
A criação de uma linguagem para a comunidade de desenvolvedores em orientação
a objetos era uma necessidade antiga. A UML realmente incorporou muitos recursos que
deram à linguagem uma flexibilidade muito grande. A organização dos diagramas,
permitindo a especificação de características estáticas e dinâmicas de um sistema, tornou
a UML fácil de ser utilizada e fez com que diferentes tipos de comportamento pudessem
ser visualizados através de diagramas.
Como vimos, a UML é uma linguagem unificada e universal que pode ser aplicada
em muitas áreas de desenvolvimento de software, já que foi concebida para fornecer
mecanismos de especialização e extensão que permitem a modelagem de requisitos
específicos de diferentes sistemas. Com todas estas vantagens, a UML vem se tornando
um padrão mundialmente utilizado para a modelagem de sistemas.
Sem dúvida alguma, a UML proporciona às grandes empresas de desenvolvimento
de software uma maior comunicação e um melhor aproveitamento dos modelos
desenvolvidos pelos seus vários analistas envolvidos no processo de produção de
software. Isso porque que a linguagem utilizada por todos passou a ser a mesma,
acabando com os problemas de interpretação e entendimento de modelos criados por
diferentes desenvolvedores. Os modelos criados hoje poderão ser facilmente analisados
por futuras gerações de desenvolvedores acabando com a diversidade de tipos de
nomenclaturas e modelos, até então o grande empecilho do desenvolvimento de softwares
orientados a objetos.
76
Respostas Comentadas dos Exercícios
Capítulo 1
Capítulo 2
( F ) Ao se modelar um sistema utilizando a UML, segundo normas do grupo gestor da UML (Object Management
Group - OMG), tem-se que utilizar pelo menos quatro de seus diagramas.
Correção: A UML não fala quantos, nem quais diagramas devem ser usados, isso é responsabilidade do processo
que a utiliza
( F) A UML é um método de desenvolvimento, o que significa que ela diz o que fazer primeiro e em seguida como
desenhar seu sistema.
Correção: A UML não é um método de desenvolvimento, é apenas uma linguagem. Nela apenas noções sobre a
notação dos diagramas são dadas e não o relacionamento entre os mesmos e sua sequência de uso.
2) Faça uma tabela que mostre que tipos de relacionamentos são possíveis entre um ator e um caso de uso. Que tipo
de relacionamento pode haver entre casos de uso? Que tipo de relacionamento pode haver entre atores?
A tabela a seguir exibe as alternativas possíveis entre relacionamentos entre atores e casos de uso em um diagrama de
casos de uso. As células da tabela com um X indicam possibilidade. As células não preenchidas indicam impossibilidade.
Entre Entre casos de Entre ator e
atores uso caso de uso
Comunicação X
Inclusão X
Extensão X
Generalização X X
3) Construa um modelo de casos de uso para a seguinte situação fictícia: "Estamos criando um serviço de entregas.
Nossos clientes podem nos requisitar via portal do sistema a entrega de volumes. Alguns volumes são considerados
de maior valor por nossos clientes, e, portanto, eles querem ter tais volumes segurados durante o transporte.
Contratamos uma companhia de seguro para segurar volumes de valor".
78
Capítulo 4
1) Desenhe um diagrama de classes com relacionamentos, nomes de papéis e multiplicidades para as seguintes
situações:
• Uma Pessoa pode ser casada com outra Pessoa;
• Uma Disciplina é pré-requisito para outra Disciplina;
• Uma Peça pode ser composta de diversas outras Peças.
2) Considere o seguinte discurso relativo a um sistema de partidas de tênis: "Num torneio de tênis, cada
partida é jogada entre 2 jogadores. Pretende-se manter informação sobre o nome e idade dos jogadores; data da
partida e atribuição dos jogadores às partidas. O máximo de partidas que um jogador poderá realizar é 6 e o mínimo
1. Desenhe o diagrama de classes correspondente.
79
Capítulo 5
1. Defina um diagrama de sequência para cada tarefa apresentada a seguir, a partir da descrição do negócio
“Locadora de Veículos”.
80
Capítulo 6
1- Crie o Diagrama de estados para uma máquina que, inicialmente, aguarda moedas para liberar seus produtos;
quando o cliente coloca a moeda a máquina fica aguardando o mesmo puxar a alavanca para liberar o
produto; após a retirada do produto a máquina retorna ao seu estado inicial
81
Bibliografia
BEZERRA, Eduardo. Princípios de Análise e Projeto Orientados a Objetos com UML.
Rio de Janeiro: Campus, 2003.
BLAHA, Michael. Modelagem e projetos baseados em objetos com UML. Rio de
Janeiro: Elsevier, 2006.
BOEHM, Barry W. A Spiral Model of Software Development and Enhancement.
Computer, vol. 21, no. 5. May, 1988. p. 61-72.
BOOCH, G., RUMBAUGH, J., JACOBSON, I. UML – guia do usuário. Rio de Janeiro:
Editora Campus, 2006.
BLOOGS, Wendy. Mastering UML com Rational Rose 2002: A Bíblia. Rio de Janeiro:
Alta Books, 2002.
CRUZ, Márcia; GONSALES, Samuel. 2010. Disponível em
http://blogbohm.com/2010/10/18/analise-de-requisitos-como-ferramenta-de-
planejamento/. Acesso em 03 dez. 2011.
FONSECA, Ijar M. Princípios Fundamentais da Análise de Requisitos. Disponível em:
http://www2.dem.inpe.br/ijar/AnalEstr.html. Acesso em 01 dez. 2011.
GASTALDO, Denise L.; MIDORIKAWA, Edson T. Processo de Engenharia de
Requisitos Aplicado a Requisitos Não-Funcionais de Desempenho – Um
Estudo de Caso. 2002. Disponível em: http://wer.inf.puc-
rio.br/wer03/artigos/denise_gastaldo.pdf. Acesso em 30 nov. 2011.
GUEDES, Gilleanes T. A. UML 2.0 – guia prático. 2007. Disponível em:
http://novatec.com.br/livros/uml2/capitulo9788575221457.pdf. Acesso em 11 abr.
2012.
HERITAGE. Dicionário web. Disponível em:
http://www.thefreedictionary.com/information+technology. Acesso em: 13 nov. 2011.
LEITE, Jair C. Ciclo de vida de Software. 2007. Disponível em:
http://engenhariadesoftware.blogspot.com/2007/02/ciclo-de-vida-do-software-parte-
1.html. Acesso em: 11 nov. 2011.
PAULA FILHO, Wilson P. Engenharia de software: fundamentos, métodos e padrões.
3.ed. Rio de Janeiro: LTC, 2009.
PETERS, J. F.; PEDRYC, W. Engenharia de software: teoria e prática. Rio de Janeiro:
Campus, 2001.
82
PRESSMAN, R. S. Engenharia de Software. 7.ed. São Paulo: McGraw-Hill, 2010.
PRESSMAN, R. S. Engenharia de Software. 6.ed. São Paulo: McGraw-Hill, 2006.
RUMBAUGH, James; et al. Modelagem e Projeto baseados em objetos. Rio de Janeiro:
Campus, 2006.
SAMPAIO, M. C. Historia de UML. http://www.dsc.ufcg.edu.br/sampaio: [s.n.], 2007.
SCHACH, Stephen. Engenharia de Software: os paradigmas clássico e orientado a
objetos. São Paulo: McGrawHill, 2008.
SILVA, R. P. UML 2 em Modelagem Orientada a Objetos. Florianópolis: Visual Books,
2007.
SOMMERVILLE, Ian. Engenharia de Software. São Paulo: Addison-Wesley, 2007.
83