Escolar Documentos
Profissional Documentos
Cultura Documentos
DO
Perodo
Carga Horria
2 aulas/semana
Professor M. Frana
professor@franca.pro.br
http://www.franca.pro.br/prof
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 1
O Autor
Marcelo Frana tcnico em Processamento de Dados, tecnlogo em Processamento de Dados,
analista de sistemas ps-graduado pela PUC-Rio, bacharel em Administrao de Sistemas de Informao,
licenciado em Informtica pelo Instituto Superior de Educao do Rio de Janeiro ISERJ,
mestre em Informtica pela Universidade Federal do Estado do Rio de Janeiro UNIRIO,
aluno do MBA em gerenciamento de projetos da Fundao Getlio Vargas,
certificado MCAD pela Microsoft, certificado SCJA pela Sun,
certificado RAD Associate pela IBM, certificado OCJP 6 (SCJP) pela Oracle,
professor de Informtica da FAETEC e da Faculdade de Informtica Lemos de Castro,
e especialista de sistemas da IBM Brasil.
Estuda Informtica desde 1990 e trabalha com Informtica desde 1994.
Dedicatria
Dedico este trabalho a todos os meus alunos e ex-alunos.
Desejo a todos vocs muito sucesso profissional.
Que seus objetivos sejam alcanados e que vocs sempre perseverem, mantendo o foco!
Agradecimentos
Agradeo a Deus pela iluminao e por ter sido to feliz na escolha desta profisso.
Obrigado, Senhor!
ndice
1.
2.
3.
4.
6.
1. Introduo ao Paradigma OO
Motivao
Crise do Software
A crise do software foi um termo utilizado nos anos 70, quando a engenharia de software era
praticamente inexistente. O termo expressava as dificuldades do desenvolvimento de software frente
ao rpido crescimento da demanda por software, da complexidade dos problemas a serem resolvidos e
da inexistncia de tcnicas estabelecidas para o desenvolvimento de sistemas que funcionassem
adequadamente ou pudessem ser validados.
A noo da crise do software emergiu no final dos anos 60. Uma das primeiras e mais
conhecidas referncias ao termo foi feita por Edsger Dijkstra, na apresentao feita em 1972 na
Association for Computing Machinery Turing Award, intitulada "The Humble Programmer" (EWD340),
publicada no peridico Communications of the ACM.
Logo que o desenvolvimento de software comeou a caminhar com o advento das linguagens
estruturadas e modulares, uma situao tornou-se clara diante de todos: a indstria de software
estava falhando repetidamente na entrega de resultados dentro dos prazos, quase sempre estourando
os oramentos e apresentando um grau de qualidade duvidoso ou insatisfatrio.
Em um relatrio de 1969 [Naur, 1969], esse problema j havia sido reconhecido. Conforme foi
observado, cerca de 50 a 80% dos projetos nunca foram concludos ou estavam to longe de seus
objetivos que foram considerados fracassados. Dos sistemas que foram finalizados, 90% haviam
terminado 150 a 400% acima do oramento e dos prazos predeterminados [Wallnau, 2002].
Os problemas que originaram essa crise tinham relacionamento direto com a forma de trabalho
das equipes. Eram problemas que no se limitavam a "sistemas que no funcionam corretamente",
mas envolviam tambm dvidas sobre como desenvolver e manter um volume crescente de software e
ainda estar preparado para as futuras demandas. Essencialmente, eram sintomas provenientes do
pouco entendimento dos requisitos por parte dos desenvolvedores, somados s tcnicas e medidas
pobres aplicadas sobre o processo e o produto, alm dos poucos critrios de qualidade estabelecidos
at ento [Pressman, 2004].
A palavra crise j tem sido discutida por no descrever exatamente o problema em questo.
Uma definio mais precisa talvez seja aflio crnica, pelas caractersticas de continuidade e
intermitncia dos sintomas [Pressman, 2004].
Todos esses fatores
exigiram
respostas e
sendo aprimorados
documentados, dando incio rea de Engenharia de Software. A busca por eficincia e competncia
revelou oportunidades, desafios e perigos que guiaram as tecnologias e apontaram novos rumos para
as pesquisas.
A maior parte dos projetos, hoje, continua com estes problemas. Assim, pode se dizer que a
crise continua vigente ainda na atualidade.
As possveis solues para a crise de software:
A mudana de paradigma sobre o que desenvolver software e como deveria ser feito.
em
componentes
como
text
box,
combo,
button,
form,
etc.,
que
agilizavam
desenvolvimento de interfaces), tornou a programao para Windows uma tarefa relativamente fcil. A
gerao anterior de programadores trabalhava com linguagens como o Clipper, essencialmente
orientadas ao console/texto. Com o advento do Windows, surgiu um novo padro de interface com o
usurio. E a componentizao (Delphi e Visual Basic 5) e o conceito do RAD (Rapid Application
Development) proporcionaram que aplicaes inteiras fossem escritas em um tempo bastante
reduzido, em comparao com a gerao anterior.
Nota: Rapid application development (RAD) is a software development methodology that uses
minimal planning in favor of rapid prototyping. The "planning" of software developed using RAD is
interleaved with writing the software itself. The lack of extensive pre-planning generally allows software
to be written much faster, and makes it easier to change requirements.
Classes e Objetos
A OO um mecanismo moderno que ajuda a definir a estrutura de programas baseada nos
conceitos
do
mundo
real,
sejam
eles
reais
ou
abstratos.
OO
permite
criar
programas
componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas
partes se comuniquem entre si, por meio de mensagens. Essas partes do sistemas so chamadas
OBJETOS criados a partir de CLASSES.
Uma classe a descrio de um grupo de objetos com propriedades similares (atributos),
comportamento comum (operaes), relacionamentos com outros objetos e semnticas idnticas. Todo
objeto instncia de uma classe.
Enquanto um objeto individual uma entidade concreta que executa algum papel no sistema,
uma classe captura a estrutura e comportamento comum a todos os objetos que esto relacionados.
Uma classe define a estrutura e o comportamento de qualquer objeto da classe, atuando como um
padro para a construo de objetos. Objetos podem ser agrupados em classes.
A definio da classe consiste na definio dos atributos e operaes dos objetos desta classe;
Um atributo uma caracterstica de uma classe. Atributos no apresentam comportamento, eles
definem a estrutura da classe; Operaes caracterizam o comportamento de um objeto, e so o nico
meio de acessar, manipular e modificar os atributos de um objeto.
LOC = 8
Princpios Bsicos
Abstrao
Informalmente um objeto representa uma entidade, tanto fsica quanto conceitual ou de
software. Exemplos:
Podemos afirmar que um objeto um conceito, abstrao, ou entidade com limites bem
definidos e um significado para a aplicao. Quando modelamos um objeto (classe), s consideramos o
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 13
que for relevante. O time de futebol do corao pode no ser um atributo relevante para um sistema
de informao escolar, por exemplo.
Abstrao considerada como a habilidade de modelar caractersticas do mundo real do
problema que o programador esteja tentando resolver. Por exemplo, se o programador estiver
interessado em controlar dados dos clientes de uma empresa, muito mais fcil lidar com uma
linguagem que oferea recursos em que ele possa criar algo chamado "Cliente" ao invs de recorrer
estruturas de dados tipo array ou record.
Nesse contexto a abstrao refere-se capacidade de modelar o mundo real, e por outro lado,
podemos consider-la como um mecanismo pelo qual restringimos o nosso universo de anlise e as
variveis e constantes que compem esse universo, desprezando os dados que no nos interessa na
anlise.
Podemos demonstrar o uso de abstrao facilmente, quando fechamos os olhos e pensamos em
uma mesa; esta mesa imaginria provavelmente no vai ser igual uma outra imaginada por outras
pessoas, mas o que importa que todos as pessoas que imaginaram uma mesa, colocaram nessa as
informaes que para elas so necessrias para a sua funo (de ser uma mesa). No importa se a
mesa de trs ps ou quatro, ou se o tampo de vidro, madeira ou mrmore; o que importa que a
imagem que idealizamos em nossa cabea de uma mesa e tenha as informaes necessrias para
cumprir sua funo.
Encapsulamento
Information Hiding: segurana, simplicidade, coeso.
Esconder os detalhes da implementao de um objeto chamado encapsulamento. A
capacidade de um objeto possuir uma parte privada, acessvel somente atravs dos mtodos definidos
na sua interface pblica; No se deve permitir acesso direto aos atributos de uma classe;
Benefcios: O cdigo cliente pode usar apenas a interface para a operao; A implementao do
objeto pode mudar, para corrigir erros, aumentar performance, etc. sem que seja necessrio modificar
o cdigo do cliente; A manuteno mais fcil e menos custosa; e cria um programa legvel e bem
estruturado. Na prtica, tendemos a diminuir o acoplamento, a dependncia externa (de outras
classes).
Normalmente, para respeitarmos o princpio do encapsulamento, todos os atributos de uma
classe devem ser private ou, no mximo, protected.
Observao: A linguagem Java no respeita totalmente o conceito do encapsulamento posto
que o escopo protected em Java permite que outras classes, que no filhas, consigam acessar o item
(atributo ou mtodo), apenas por fazer parte do mesmo pacote.
Encapsulamento a base de toda a abordagem da Programao Orientada ao Objeto; isto
porque contribui fundamentalmente para diminuir os malefcios causados pela interferncia externa
sobre os dados. Partindo desse princpio, toda e qualquer transao feita com esses dados s pode ser
feita atravs de procedimentos colocados "dentro" desse objeto, pelo envio de mensagens. Desta
maneira, dizemos que um dado est encapsulado quando envolvido por cdigo de forma que s
visvel na rotina onde foi criado; o mesmo acontece com uma rotina, que sendo encapsulada, suas
operaes internas so invisveis s outras rotinas. E at mesmo em linguagens consideradas no OO,
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 14
como no caso do Clipper 5.xx, segundo FERREIRA & JARABECK, pode-se observar um certo
encapsulamento nas rotinas em que as variveis so declaradas como LOCAL. Nesses casos tais
variveis so visveis somente dentro dessas rotinas aonde foram declaradas, o que permite ao
programador certa segurana quanto aos acessos indevidos por parte de outras rotinas, o que no
acontece com variveis PRIVATE ou PUBLIC, no contexto dessa linguagem.
Podemos visualizar a utilidade do encapsulamento pensando em um dvd, onde temos os botes
de liga-desliga, para frente, para traz, etc. Estes botes executam uma srie de operaes existentes
no aparelho, onde so executadas pelos componentes existentes dentro do aparelho (transistores,
cabos, motores, etc.) No interessa ao operador saber como o funcionamento interno do
equipamento; esta informao s relevante para os projetistas do aparelho (Encapsulamento =
Simplicidade). As informaes pertinentes ao usurio do equipamento so as existentes no meio
externo (botes, controle remoto) que ativam as operaes internas do equipamento. Desta maneira o
aparelho de dvd pode evoluir com os avanos tecnolgicos, e as pessoas que o utilizam continuam
sabendo utilizar o equipamento, sem a necessidade de um novo treinamento.
Na rea de software acontece o mesmo: as classes podem continuar evoluindo, com aumento
de tecnologia, e os programas que utilizam essas classe continuam compatveis. Isto ocorre porque a
esses programas no interessa saber como o funcionamento interno da classe e sim sua funo, para
que ele possa executar, conforme ela evolui, novas funes colocadas sua disposio. A nica coisa
que interessa aos consumidores a API da classe (operaes pblicas).
Herana
Herana um mecanismo que, se for bem empregado, permite altos graus de reutilizao de
cdigo. Do ponto de vista prtico, pode ser entendido como sendo um conjunto de instncias criadas a
partir de um outro conjunto de instncias com caractersticas semelhantes, e os elementos desse
subconjunto herdam todas as caractersticas (se aplica a atributos e mtodos.) do conjunto original.
A ideia fornecer um mecanismo simples (mas muito poderoso) para que se defina novas
classes a partir de uma j existente. Assim sendo, dizemos que essas novas classes herdam todos os
membros (propriedades + mtodos) da classe-me (ou super classe); isto torna o mecanismo de
herana uma tcnica muito eficiente para construir, organizar e reutilizar cdigo. Por isso, nas
linguagens que no suportam esse mecanismo, as classes so criadas como unidades independentes:
cada uma com seus membros concebidos do zero (sem vnculo direto com outras classes), o que torna
o processo mais demorado e com cdigos, s vezes, redundantes.
Um exemplo de linguagem que no implementa herana na sua forma clssica o Visual Basic
(at a atual verso desktop 6.0); neste caso o desenvolvedor tem que simular esse mecanismo,
usando a criatividade. A herana possibilita a criao de uma nova classe de modo que essa classe
(denominada subclasse, classe-filha ou classe derivada) herda TODAS as caractersticas da classe-me
(denominada superclasse, classe base ou classe primitiva); podendo ainda, a classe-filha, possuir
propriedades e mtodos prprios.
No processo de herana podemos imaginar um ser humano, que nasce com todas as
caractersticas de um ser humano sadio; agora, coloquemos nele uma roupa e um relgio. A roupa e o
relgio no faz parte do ser humano, mas quando "pegamos" este ser, vestido e com um relgio, e
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 15
realizamos o processo de herana gerada uma copia idntica da matriz. Se colocarmos um sapato
preto no ser humano original a sua copia tambm ficar calada, e se trocarmos a camisa do ser
humano original a sua cpia tambm vai receber a nova camisa; isto demonstra que a copia continua
vinculada matriz de origem. Podemos tirar quantas cpias que desejarmos da matriz original e todas
estas cpias mantero o seu vnculo. Podemos, at, tirar cpias das cpias, mas o processo de
modificarmos a matriz original implicar numa mudana em todas as outras que esto abaixo dela.
Nunca uma modificao feita nas copias altera a matriz de origem, e nunca podemos remover um item
que tenha sido recebido por intermdio da herana, isto que dizer que nenhuma das cpias (humanas)
poder se dar ao luxo de no ter o relgio.
Polimorfismo
O termo polimorfismo, etimologicamente, quer dizer "vrias formas"; todavia, na Informtica, e
em particular no universo da OOP, definido como sendo um cdigo que possui "vrios
comportamentos" ou que produz "vrios comportamentos"; em outras palavras, um cdigo que pode
ser aplicado vrias classes de objetos (se aplica a mtodos). De maneira prtica isto quer dizer que a
operao em questo mantm seu comportamento transparente para quaisquer tipos de argumentos;
isto , a mesma mensagem enviada a objetos de classes distintas e eles podero reagir de maneiras
diferentes.
Um mtodo polimrfico aquele que pode ser aplicado vrias classes de objetos sem que haja
qualquer inconveniente. o caso por exemplo, do mtodo Clear em Delphi, que pode ser aplicado
tanto classe TEdit como classe TListBox; nas duas situaes o contedo desse objetos so limpos,
mesmo pertencendo, ambos, classes distintas, LEITE.
Segundo FERREIRA & JARABECK, um exemplo bem didtico para o polimorfismo dado por um
simples moedor de carne. Esse equipamento tem a funo de moer carne, produzindo carne moda
para fazer bolinhos. Desse modo, no importa o tipo (classe) de carne alimentada; o resultado ser
sempre carne moda, no importa se de boi, de frango ou de qualquer outro tipo. As restries
impostas pelo processo esto no prprio objeto, definidas pelo seu fabricante e no pelo usurio do
produto.
comum a definio de que, para haver polimorfismo, preciso primeiro haver herana.
Polimorfismo se refere a mtodos, e nunca a atributos. Um mtodo herdado pode ser sobrescrito na
classe-filha, ou seja, apresentar um comportamento diferente do comportamento original da classeme. importante salientar que existe o chamado Polimorfismo de Interface, onde classes diferentes
(de hierarquias diferentes) implementam um mesmo conjunto de mtodos, cada qual sua maneira.
Classicamente isto no deve ser considerado polimorfismo posto que no existe herana, nem ligao
hierrquica neste caso.
Binding Dinmico
O acoplamento (binding) uma associao feita pelo compilador (interpretador) entre um
atributo e uma entidade. Exemplo: acoplamento entre tipos e variveis. O acoplamento pode ser:
Exemplo (Java):
1 Elipse e;
2 Circulo c;
3 e := c;
4 e.calcularArea( );
A atribuio da linha 3 dinamicamente acoplada, pois acopla o objeto e a um tipo diferente de
seu tipo originalmente declarado. Em princpio, seria uma violao atribuir um objeto de um tipo
diferente do tipo da varivel e, no entanto, como c (Circulo) subclasse de e (Elipse) essa atribuio
vlida.
Qual o mtodo executado? O de Crculo ou de Elipse? Note que executamos o mtodo da
instncia e no da referncia. A operao executada a de Circulo, porque o compilador em tempo de
execuo verifica que a varivel aponta para um objeto desta classe.
Em algumas linguagens o programador deve pedir explicitamente o acoplamento dinmico para
uma mensagem em particular. Por exemplo, em C++ a operao deve ser declarada virtual na
superclasse e redefinida na subclasse.
Importante:
Todas
as
operaes
sobrescritas
na
classe
derivada
devem
proporcionar
Classes Abstratas
Uma classe abstrata uma classe que no tem instncias diretas. Uma classe concreta uma
classe que pode ter instncias. Em outras palavras se X uma classe abstrata o cdigo a seguir no
pode ser executado:
X objeto = new X();
Apesar disso, voc pode criar construtores de uma classe abstrata para que eles sejam
chamados pelos construtores das subclasses (Reutilizao).
Em Java utiliza-se a palavra abstract para indicar uma classe abstrata:
public abstract class Figure { ....
O objetivo de criarmos classes abstratas encapsular outras classes com comportamento
comum. Elas podem surgir naturalmente na modelagem ou serem criadas para promover o reuso.
Alm disso, uma classe abstrata pode definir um protocolo para uma operao sem definir a
implementao do mtodo.
public abstract class Figure { // inicio da class Figure
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 17
Interfaces
Interface um contrato entre a classe e o mundo externo. Quando uma classe implementa uma
interface, ela est comprometida a fornecer o comportamento publicado pela interface.
What Is an Interface?
As you've already learned, objects define their interaction with the outside world through the
methods that they expose. Methods form the object's interface with the outside world; the buttons on
the front of your television set, for example, are the interface between you and the electrical wiring on
the other side of its plastic casing. You press the "power" button to turn the television on and off.
In its most common form, an interface is a group of related methods with empty bodies. A
bicycle's behavior, if specified as an interface, might appear as follows:
interface Bicycle {
void changeCadence(int newValue);
enforced at build time by the compiler. If your class claims to implement an interface, all methods
defined by that interface must appear in its source code before the class will successfully compile.
Note: To actually compile the ACMEBicycle class, you'll need to add the public keyword to the
beginning of the implemented interface methods.
A API (Application Program Interface) pblica de uma classe, ou a interface de uma classe o
conjunto de todos os mtodos pblicos da classe.
Introduo UML
Motivao
O grande problema do desenvolvimento de novos sistemas utilizando a orientao a objetos nas
fases de anlise de requisitos, anlise de sistemas e design que no existe (ou existia) uma notao
padronizada e realmente eficaz que abranja qualquer tipo de aplicao que se deseje. Cada simbologia
existente possui seus prprios conceitos, grficos e terminologias, resultando numa grande confuso,
especialmente para aqueles que querem utilizar a orientao a objetos no s sabendo para que lado
aponta a seta de um relacionamento, mas sabendo criar modelos de qualidade para ajud-los a
construir e manter sistemas cada vez mais eficazes.
Quando a "Unified Modeling Language" (UML) foi lanada, muitos desenvolvedores da rea da
orientao a objetos ficaram entusiasmados j que essa padronizao proposta pela UML era o tipo de
fora que eles sempre esperaram.
A UML muito mais que a padronizao de uma notao. tambm o desenvolvimento de
novos conceitos no normalmente usados. Por isso e muitas outras razes, o bom entendimento da
UML no apenas aprender a simbologia e o seu significado, mas tambm significa aprender a modelar
orientado a objetos no estado da arte.
UML foi desenvolvida por Grady Booch, James Rumbaugh, e Ivar Jacobson que so conhecidos
como "os trs amigos". Eles possuem um extenso conhecimento na rea de modelagem orientado a
objetos j que as trs mais conceituadas metodologias de modelagem orientada a objetos foram
desenvolvidas por eles, e a UML a juno do que havia de melhor nestas trs metodologias
adicionado novos conceitos e vises da linguagem.
Veremos como a UML aborda o carter esttico e dinmico do sistema a ser analisado levando
em considerao, j no perodo de modelagem, todas as futuras caractersticas do sistema em relao
utilizao de "packages" prprios da linguagem a ser utilizada, utilizao do banco de dados bem
como as diversas especificaes do sistema a ser desenvolvido de acordo com as mtricas finais do
sistema.
A
verso
atual
da
(especificao)
UML
pode
ser
conferida
no
site
Exerccios
Responda
Baseado no texto o que seria necessrio aplicar para evitar a Crise do Software?
Em sua opinio, estamos ainda em uma Crise de Software? Comente sua resposta.
Em sua opinio, a comparao entre a fabricao de sapatos e de software procede?
Comente sua resposta.
Qual o objetivo da Engenharia de Software?
Segundo a Engenharia de Software, o que um software de baixa qualidade?
O fato de o Software ser feito sob encomenda um complicador? Torna a construo, de
certa forma, artesanal? Comente sua resposta.
Em sua opinio, existem outras possveis solues para a crise de software alm das
descritas neste artigo?
Exerccio de Modelagem
O exerccio (modelo de funcionrios) a seguir tem por objetivo criar um sistema para gerenciar
os funcionrios do Banco.
1) Modele um funcionrio. Ele deve ter o nome do funcionrio, o departamento onde trabalha,
seu salrio (double), a data de entrada no banco (String), seu RG (String) e um valor booleano que
indique se o funcionrio ainda est ativo na empresa ou se j foi mandado embora.
Voc deve criar alguns mtodos de acordo com sua necessidade. Alm deles, crie um mtodo
bonifica que aumenta o salrio do funcionrio de acordo com o parmetro passado como argumento.
Crie, tambm, um mtodo demite, que no recebe parmetro algum, s modifica o valor booleano
indicando que o funcionrio no trabalha mais aqui.
A ideia aqui apenas modelar, isto , s identifique que informaes so importantes e o que
um funcionrio faz. Desenhe no papel tudo o que um Funcionario tem e tudo que ele faz.
2) Transforme o modelo acima em uma classe Java. Teste-a, usando uma outra classe que
tenha o main. Voc deve criar a classe do funcionrio chamada Funcionario, e a classe de teste voc
pode nomear como quiser. A de teste deve possuir o mtodo main.
Um esboo da classe:
class Funcionario {
double salario;
// seus outros atributos e mtodos
void bonifica(double aumento) {
// o que fazer aqui dentro?
}
void demite() {
// o que fazer aqui dentro?
}
Figura
2:
classe
Funcionario
Voc pode (e deve) compilar seu arquivo java sem que voc ainda tenha terminado sua classe
Funcionario. Isso evitar que voc receba dezenas de erros de compilao de uma vez s. Crie a classe
Funcionario, coloque seus atributos e, antes de colocar qualquer mtodo, compile o arquivo java.
Funcionario.class ser gerado, no podemos execut-la pois no h um main, mas assim verificamos
que nossa classe Funcionario j est tomando forma.
Esse um processo incremental. Procure desenvolver assim seus exerccios, para no descobrir
s no fim do caminho que algo estava muito errado. Um esboo da classe que possui o main:
1 class TestaFuncionario {
2
3 public static void main(String[] args) {
4 Funcionario f1 = new Funcionario();
5
6 f1.nome = "Fiodor";
7 f1.salario = 100;
8 f1.bonifica(50);
9
10 System.out.println("salario atual:" + f1.salario);
11
12 }
13 }
Incremente essa classe. Faa outros testes, imprima outros atributos e invoque os mtodos que
voc criou a mais.
Lembre-se de seguir a conveno java, isso importantssimo. Isto , nomeDeAtributo,
nomeDeMetodo, nomeDeVariavel, NomeDeClasse, etc... (Camel case).
Exerccios Tericos
1) Relacione os termos classe, objeto e instncia.
2) Defina os princpios/conceitos do paradigma OO.
3) Defina a estrutura de uma classe.
4) Qual a diferena entre programao orientada a eventos e programao orientada a
objetos?
5) Defina a classe Java Pessoa com os atributos nome e idade, e seus respectivos mtodos
getters e setters.
6) Faa um programa que instancie duas Pessoas: Joo e Maria. O programa deve exibir os
dados de ambos os objetos.
Objetivo
Componentes
Podemos dizer que os componentes de um modelo de casos de uso so:
Casos de uso - documento narrativo que descreve a seqncia de aes feitas por um
ator no uso do sistema;
Na UML o modelo de casos de uso consiste de diagramas de casos de uso que mostram os
atores , os casos de uso e seus relacionamentos. Os elementos grficos que representam atores, casos
de uso e sistema so mostrados abaixo:
Elementos
Os elementos principais do diagrama so uma elipse para representar um caso de uso e um
pequeno boneco para representar um ator.
O nome de um caso de uso pode ser qualquer sentena, mas a UML recomenda usar uma frase
ativa curta (verbo + substantivo), por exemplo: comprar itens, efetuar venda, etc..
Exemplo
Informalmente, casos de uso so narrativas em texto de algum ator usando um sistema para
atingir objetivos. Segue um exemplo de caso de uso no formato resumido:
Processar Venda: um cliente chega em um ponto de pagamento com itens que deseja
adquirir. O caixa usa o sistema PDV para registrar cada item comprado. O sistema
apresenta um total parcial e detalhes de linha de item. O cliente entra com os dados
sobre o pagamento, que so validados e, em seguida, registrados pelo sistema. O
sistema atualiza o estoque. O cliente recebe um recibo do sistema e sai com os itens
comprados.
Note que casos de uso no so diagramas, so textos. Enfocar os diagramas de caso de uso
UML, de valor secundrio, em vez do importante texto do caso de uso, um erro comum para novatos.
Casos de uso frequentemente necessitam ser mais detalhados ou estruturados do que no
exemplo, mas o essencial descobrir e registrar os requisitos funcionais, escrevendo narrativas de uso
de um sistema para satisfazer as metas do usurio, ou seja, casos de uso (caso de utilizao). No se
trata de uma idia difcil, embora possa ser difcil descobrir o que necessrio e escrev-lo de forma
coerente.
os seus objetivos? Essa uma nfase mais centrada no usurio, comparada a simplesmente solicitar
uma lista de caractersticas do sistema.
Muito tem sido escrito sobre casos de uso e, apesar de valer a pena, pessoas criativas
frequentemente obscurecem uma ideia simples com camadas de sofisticao ou supercomplicao.
Geralmente, possvel encontrar um modelador de casos de uso novato (ou um analista srio tipo A)
que se preocupa em excesso com problemas secundrios, como diagramas de casos de uso,
relacionamento entre casos de uso, pacotes de casos de uso e etc., em vez de se concentrar no
trabalho rduo de simplesmente escrever as narrativas em texto.
Dito isso, um dos pontos fortes do mecanismo de casos de uso a sua capacidade de
escalabilidade para cima ou para baixo em termos de sofisticao e formalidade.
Descrio de Atores
Geralmente descreve atores usando:
Tipos de Atores
Um ator qualquer coisa com um comportamento, inclusive o prprio sistema em discusso
quando invoca os servios de outros sistemas. Atores principais e de suporte aparecero nos passos de
ao do texto do caso de uso. Atores no so somente papis desempenhados por pessoas, mas
tambm por organizaes, software e mquinas. H trs tipos de atores externos em relao ao
sistema:
Ator Principal (Primary) tem objetivos de usurio satisfeitos por meio do uso dos servios
do sistema. Por exemplo, o caixa.
o Por que identificar? Para encontrar objetivos de usurio, que guiam os casos de uso.
Informal (casual) formato informal de pargrafos. Mltiplos pargrafos que cobrem vrios
cenrios. O exemplo precedente Tratar Devolues foi informal.
o Quando? Como acima.
Cashier: Wants accurate, fast entry, and no payment errors, as cash drawer shortages are
deducted from his/her salary.
Customer: Wants purchase and fast service with minimal effort. Wants easily visible display
of entered items and prices. Wants proof of purchase to support returns.
Company: Wants to accurately record transactions and satisfy customer interests. Wants to
ensure that Payment Authorization Service payment receivables are recorded. Wants some
fault tolerance to allow sales capture even if server components (e.g., remote credit
validation) are unavailable. Wants automatic and fast update of accounting and inventory.
Manager: Wants to be able to quickly perform override operations, and easily debug Cashier
problems.
Government Tax Agencies: Want to collect tax from every sale. May be multiple agencies,
such as national, state, and county.
Payment Authorization Service: Wants to receive digital authorization requests in the correct
format and protocol. Wants to accurately account for their payables to the store.
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 29
1. Cashier restarts System, logs in, and requests recovery of prior state.
2. System reconstructs prior state.
2a. System detects anomalies preventing recovery:
1. System signals error to the Cashier, records the error, and enters a clean state.
2. Cashier starts a new sale.
3. Cashier continues with sale (probably entering more items or handling payment).
2-4a. Customer tells Cashier they have a tax-exempt status (e.g., seniors, native peoples)
1. Cashier verifies, and then enters tax-exempt status code.
2. System records status (which it will use during tax calculations)
3a. Invalid item ID (not found in system):
1. System signals error and rejects entry.
2. Cashier responds to the error:
2a. There is a human-readable item ID (e.g., a numeric UPC):
1. Cashier manually enters the item ID.
2. System displays description and price.
2a. Invalid item ID: System signals error. Cashier tries alternate
method.
2b. There is no item ID, but there is a price on the tag:
1. Cashier asks Manager to perform an override operation.
2. Managers performs override.
3. Cashier indicates manual price entry, enters price, and requests
standard taxation for this amount (because there is no product information, the
tax engine cant otherwise deduce how to tax it)
2c. Cashier performs Find Product Help to obtain true item ID and price.
2d. Otherwise, Cashier asks an employee for the true item ID or price, and does
either manual ID or manual price entry (see above).
3b. There are multiple of same item category and tracking unique item identity not important
(e.g., 5 packages of veggie-burgers):
1. Cashier can enter item category identifier and the quantity.
3c. Item requires manual category and price entry (such as flowers or cards with a price on
them):
1. Cashier enters special manual category code, plus the price.
3-6a: Customer asks Cashier to remove (i.e., void) an item from the purchase: This is only legal
if the item value is less than the void limit for Cashiers, otherwise a Manager override is needed.
1. Cashier enters item identifier for removal from sale.
2. System removes item and displays updated running total.
2a. Item price exceeds void limit for Cashiers:
1. System signals error, and suggests Manager override.
2. Cashier requests Manager override, gets it, and repeats operation.
Touch screen UI on a large flat panel monitor. Text must be visible from 1 meter.
Somehow, we want robust recovery when access to remote services such the inventory system
is failing.
...
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 33
Must a cashier take their cash drawer when they log out?
Can the customer directly use the card reader, or does the cashier have to do it?
Este caso de uso ilustrativo e no pretende ser exaustivo (embora seja baseado nos requisitos
de um sistema PDV real desenvolvido com projeto OO em Java). No entanto, suficientemente
detalhado e complexo para oferecer um senso de realismo, de modo que um caso de uso completo
possa registrar muitos detalhes de requisitos. Este exemplo servir de modelo para muitos problemas
de casos de uso.
Recomendaes
Nomeie um caso de uso comeando com um verbo, para enfatizar que ele um processo. Ex:
Cadastrar Cliente , Comprar Item, etc..
Para identificar claramente um ator iniciador e um evento, comece a descrio da sequncia de
um caso de uso usando o seguinte esquema: Este caso de uso comea quando o <Ator> <Evento que
inicia o caso de uso>...
Exemplo: Este caso de uso comea quando um cliente chega com vrios itens para efetuar uma
compra.
Vamos a outro exemplo: Suponha que voc tenha um almoxarifado de peas onde clientes
faam pedidos e onde um operador receba tarefas do sistema para buscar peas para os pedidos dos
clientes e distribuir peas do setor de compras para o almoxarifado.
Como poderamos identificar os atores e os casos de uso para este exemplo?
Vamos identificar os atores. Eles so: Cliente, Operador, Sistema e Setor de Compras. Certo?
No, errado! No exemplo acima Sistema no pode ser um ator pois ele no se ajusta ao conceito
dado a um ator: Um agente externo ao sistema.
Lembre-se que um ator um papel que interage com o sistema mas no faz parte do sistema.
Ento, no lugar de Sistema, poderamos sugerir um administrador ou gerente. Ento os atores seriam:
Cliente, Operador, Administrador e Compras. Note ainda que podem existir subsistemas que interajam
com o sistema. Neste caso eles seriam considerados atores.
E os casos de usos, quais seriam?
Certo? Errado! No caso do ator operador, ele no atua sobre o sistema nos casos de uso buscar
pedidos e distribuir pedidos. Ele atua sobre o sistema realizando Tarefa. Ento o correto seria:
Diretriz: diagramao
A figura 6 oferece algumas sugestes sobre o diagrama. Note a caixa de ator com o smbolo
ator. Este smbolo usado para as palavras-chave e esteretipos UML e incluem aspas horizontais
guillemets colchetes especiais de um nico caractere (ator e no <<ator>>), mais comumente
usados na tipografia francesa para indicar uma citao.
Incluso
Se um caso de uso inicia ou inclui o comportamento de outro, dizemos que ele usa o outro.
Exemplo: No caso de uso Comprar Item, se o pagamento for feito com dinheiro, podemos ter a
incluso PagarComDinheiro.
O relacionamento de incluso em UML ilustrado com uma linha de generalizao com o rtulo
include.
Figura 8: Inclui
Ento, para o exemplo do cliente, com o use case Solicitar Pedidos de peas, teramos como
propriedades bsicas da incluso:
Comportamento comum.
Extenso
Define pontos de extenso (opcionais) que adicionam comportamento a um caso de uso base,
descrevendo uma variao do comportamento normal. O caso de uso base pode ser executado mesmo
sem a extenso.
Exemplo: O caso de uso Comprar Produto pode apresentar a extenso Compra por um Cliente
Regular. Os pontos de extenso so indicados na linha entre os casos de uso do sistema. Abaixo temos
diagramas UML exemplificando estes conceitos.
Figura 9: Estende
Dica: note que a seta sempre aponta para o ido (estendido, ou includo).
Generalizao
Indica um caso de base que possui diferentes especializaes, e inclui comportamento ou
sobrescreve o caso de uso base.
O caso de uso Pagar fatura apresenta as especializaes: Pagamento com carto e Pagamento
com Cheque, conforme o diagrama a seguir:
Free: Jude/Community
Poseidon/Community
Note que algumas empresas adotam o Microsoft Visio. Porm, ele no considerado uma
ferramenta especfica para UML ao contrrio do Visual Paradigm, por exemplo.
Exerccios
Faa os diagramas de caso de uso
Fazer Pedido - verso 1
Cenrio informal
O caso de uso comea quando o cliente seleciona "fazer pedido". O cliente fornece seu nome e
endereo. Se o cliente fornece apenas o CEP, o sistema coloca automaticamente a cidade e o estado. O
cliente fornece os cdigos do produto. O sistema devolve as descries e o preo de cada produto. O
sistema calcular os valores totais para cada produto fornecido. O cliente fornece as informaes sobre
carto de crdito. Em seguida, ele submete os dados ao sistema. O sistema verifica as informaes
fornecidas, marca o pedido como "pendente" e envia as informaes de pagamento para o sistema de
contabilidade e pagamento. Quando o pagamento confirmado, o pedido marcado como
"confirmado" e o nmero de pedido (NP) dado ao cliente.
Para resolver isso, ele quer desenvolver uma aplicao que cadastre os cartes apostados e o
resultado de um concurso, apresentando o relatrio final com os nmeros acertados por carto e o
valor do prmio, se houver.
Exerccio (Biblioteca)
Identifique os atores e elabore o diagrama de casos de uso para o sistema de controle de uma
biblioteca descrito a seguir:
um sistema de suporte para uma biblioteca
A biblioteca empresta livros e revistas para clientes, que so registrados no sistema, no qual
tambm esto registrados os livros e as revistas.
A biblioteca controla a compra de novos ttulos. De ttulos populares compra-se vrias cpias.
Livros antigos e revistas so removidos quando esto ultrapassados ou deteriorados.
Bibliotecrio um funcionrio da biblioteca que interage com os clientes e seu trabalho
auxiliado pelo sistema.
Um cliente pode reservar um livro ou revista que no est disponvel no momento na biblioteca,
de forma que quando ele for devolvido ou comprado pela biblioteca, o cliente avisado. A reserva
cancelada quando o cliente retira o livro ou revista, ou atravs de um processo exclusivo de
cancelamento.
A biblioteca pode facilmente criar, atualizar, e apagar informaes sobre seus ttulos, clientes,
emprstimos, e reservas no sistema.
O sistema pode rodar em todos os ambientes populares (UNIX, Linux, windows, etc) e tem uma
interface grfica (GUI) moderna.
O sistema deve ser facilmente estendido com novas funcionalidades
O sistema deve lidar com a mensagem que enviada ao cliente quando um ttulo reservado
torna-se disponvel, e precisa checar se um determinado ttulo est ultrapassado ou deteriorado.
Exerccio (Coca-Cola)
Identifique os atores e elabore o diagrama de casos de uso para um sistema de controle de uma
mquina que vende Coca-Cola, descrito a seguir:
um sistema de venda de Coca-cola em mquina automatizada.
O sistema deve estar preparado para receber e conferir o dinheiro colocado pelo Cliente,
inclusive para dar o troco.
Deve controlar a recarga de refrigerantes pelo Tcnico, bem como o recolhimento do dinheiro da
mquina.
3. Diagrama de Classes
Diagrama de Classes
Introduo
O diagrama de classes demonstra a estrutura esttica das classes de um sistema onde estas
representam as "coisas" que so gerenciadas pela aplicao modelada. Classes podem se relacionar
com outras atravs de diversas maneiras: associao (conectadas entre si), dependncia (uma classe
depende ou usa outra classe), especializao (uma classe uma especializao de outra classe), ou em
pacotes (classes agrupadas por caractersticas similares).
Todos estes relacionamentos so mostrados no diagrama de classes juntamente com as suas
estruturas internas, que so os atributos e operaes. O diagrama de classes considerado esttico j
que a estrutura descrita sempre vlida em qualquer ponto do ciclo de vida do sistema.
Um sistema normalmente possui alguns diagramas de classes, j que no so todas as classes
que esto inseridas em um nico diagrama e uma certa classes pode participar de vrios diagramas de
classes.
Escopo ou Visibilidade
+, -, # (protected), ~ (friend/pacote). Visibilidade do elemento.
Pacotes
Pacote um mecanismo de agrupamento, onde
todos os modelos de elementos podem ser agrupados.
Em UML, um pacote definido como: "Um mecanismo
de
propsito
geral
para
organizar
elementos
de
referenciados
elementos
por
um
que
pacote
so
so
ligados
chamados
ou
de
Relacionamentos
Os relacionamentos ligam as classes/objetos entre si criando relaes lgicas entre estas
entidades. Os relacionamentos podem ser dos seguintes tipos:
Associao: uma conexo entre classes, e tambm significa que uma conexo entre
objetos daquelas classes. Em UML, uma associao definida com um relacionamento
que descreve uma srie de ligaes, onde a ligao definida como a semntica entre as
duplas de objetos ligados.
diretamente
elementos
dependentes
do
anterior.
Refinamento
um
relacionamento entre duas descries de uma mesma entidade, mas em nveis diferentes
de abstrao.
Abordaremos agora cada tipo de relacionamento e suas respectivas sub-divises:
Associaes
Uma associao representa que duas classes possuem uma ligao (link) entre elas, significando
por exemplo que elas "conhecem uma a outra", "esto conectadas com", "para cada X existe um Y" e
assim por diante. Classes e associaes so muito poderosas quando modeladas em sistemas
complexos.
Associaes Normais
O tipo mais comum de associao apenas uma conexo entre classes. representada por uma
linha slida entre duas classes. A associao possui um nome (junto linha que representa a
associao), normalmente um verbo, mas substantivos tambm so permitidos.
Pode-se tambm colocar uma seta no final da associao indicando que esta s pode ser usada
para o lado onde a seta aponta. Mas associaes tambm podem possuir dois nomes, significando um
nome para cada sentido da associao.
Para expressar a multiplicidade entre os relacionamentos, um intervalo indica quantos objetos
esto relacionados no link. O intervalo pode ser de zero para um (0..1), zero para vrios (0..* ou
apenas *), um para vrios (1..*), dois (2), cinco para 11 (5..11) e assim por diante. tambm
possvel expressar uma srie de nmeros como (1, 4, 6..12). Se no for descrito nenhuma
multiplicidade, ento considerado o padro de um para um (1..1 ou apenas 1).
Associao Recursiva
possvel conectar uma classe a ela mesma atravs de uma associao e que ainda representa
semanticamente a conexo entre dois objetos, mas os objetos conectados so da mesma classe. Uma
associao deste tipo chamada de associao recursiva.
Associao Qualificada
Associaes qualificadas so usadas com associaes de um para vrios (1..*) ou vrios para
vrios (*).
Associao Exclusiva
Em alguns modelos nem todas as combinaes so vlidas, e isto pode causar problemas que
devem ser tratados. Uma associao exclusiva uma restrio em duas ou mais associaes. Ela
especifica que objetos de uma classe podem participar de no mximo uma das associaes em um
dado momento. Uma associao exclusiva representada por uma linha tracejada entre as associaes
que so parte da associao exclusiva, com a especificao "{ou}" sobre a linha tracejada.
No diagrama acima um contrato no pode se referir a uma pessoa e a uma empresa ao mesmo
tempo, significando que o relacionamento exclusivo a somente uma das duas classes.
Associao de Classe
Uma classe pode ser associada a uma outra
associao. Este tipo de associao no conectado
a nenhuma das extremidades da associao j
existente, mas na prpria linha da associao. Esta
associao serve para se adicionar informaes
extras a associao j existente.
A associao da classe Fila com a associao
Figura 3.7: associao de classe.
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 48
das classes Cliente e Processo pode ser estendida com operaes de adicionar processos na fila, para
ler e remover da fila e de ler o seu tamanho. Se operaes ou atributos so adicionados a associao,
ela deve ser mostrada como uma classe.
Agregao e Composio
Agregao
A agregao um caso particular da associao. A agregao indica que uma das classes do
relacionamento uma parte, ou est contida em outra classe. As palavras chaves usadas para
identificar uma agregao so: "consiste em", "contm", " parte de".
No exemplo acima uma pessoa pode ser membro de um time ou vrios times e em determinado
momento.
Composio
Agregao de Composio: uma agregao onde uma classe que est contida na outra "vive"
e constitui a outra. Se o objeto da classe que contm for destrudo, as classes da agregao de
composio sero destrudas juntamente j que as mesmas fazem parte da outra.
Generalizaes
Definio
A generalizao um relacionamento entre um elemento geral e um outro mais especfico. O
elemento mais especfico possui todas as caractersticas do elemento geral e contm ainda mais
particularidades. Um objeto mais especfico pode ser usado como uma instncia do elemento mais
geral. A generalizao, tambm chamada de herana, permite a criao de elementos especializados
em outros.
Existem alguns tipos de generalizaes que variam em sua utilizao a partir da situao. So
elas: generalizao normal e restrita. As generalizaes restritas se dividem em generalizao de
sobreposio, disjuntiva, completa e incompleta.
Generalizao Normal
Na generalizao normal a classe mais especfica, chamada de subclasse, herda tudo da classe
mais geral, chamada de superclasse. Os atributos, operaes e todas as associaes so herdadas.
Uma classe pode ser tanto uma subclasse quanto uma superclasse, se ela estiver numa
hierarquia de classes que um grfico onde as classes esto ligadas atravs de generalizaes.
A generalizao normal representada por uma linha entre as duas classes que fazem o
relacionamento, sendo que coloca-se um seta no lado da linha onde encontra-se a superclasse
indicando a generalizao.
Observao: a herana deve ser natural. Ao criar uma girafa, nenhum programador deveria
estender elefante s porque precisa de algo com quatro patas. Seno, no futuro, podemos acabar
tendo uma girafa com tromba...
Dependncias e Refinamentos
Definio
Alm das associaes e generalizaes, existem ainda dois tipos de relacionamentos em UML. O
relacionamento de dependncia uma conexo semntica entre dois modelos de elementos, um
independente e outro dependente. Uma mudana no elemento independente ir afetar o modelo
dependente. Como no caso anterior com generalizaes, os modelos de elementos podem ser uma
classe, um pacote, um use-case e assim por diante. Quando uma classe recebe um objeto de outra
classe como parmetro, uma classe acessa o objeto global da outra. Nesse caso existe uma
dependncia entre estas duas classes, apesar de no ser explcita.
Uma relao de dependncia simbolizada por uma linha tracejada com uma seta no final de
um dos lados do relacionamento. E sobre essa linha o tipo de dependncia que existe entre as duas
classes. As classes "Amigas" provenientes do C++ so um exemplo de um relacionamento de
dependncia.
Exerccios
Um estudo de caso em UML
Diante do apresentado no decorrer do trabalho, aplicaremos aqui grande parte dos conceitos
abordados diante de uma aplicao da UML num problema fictcio que poder ser de grande ajuda no
melhor entendimento das potencialidades da linguagem de modelagem unificada.
O estudo de caso dar mais nfase na fases de anlise de requisitos, anlise e design, j que as
principais abstraes dos modelos do sistema se encontram nestas fases do desenvolvimento.
Desenvolveremos uma modelagem em UML para criarmos um sistema de manuteno e
controle de contas correntes e aplicaes financeiras de um banco fictcio.
Antes de dar incio primeira fase da modelagem, faremos algumas consideraes sobre o que
o sistema se prope a fazer e outras observaes que consideramos de suma importncia para o bom
entendimento do problema.
O sistema suportar um cadastro de clientes, onde cada cliente cadastrado poder ter
vrias contas correntes, vrios dependentes ligados a ele, e vrias contas de poupana.
Cada dependente poder possuir vrias contas de poupana, mas no podero ter uma
conta corrente prpria.
Entendemos poupana como uma conta que possui um valor, um prazo de aplicao a
uma taxa de juros (definida no vencimento da poupana).
Uma conta corrente poder ter vrias aplicaes pr-fixadas ligadas a ela.
Receber
o Pedido
Separao
Atividade
Preencher
o Pedido
Guarda
Envia a
Fatura
Desvio
[Seno]
[Pedido Urgente]
Entrega Durante
a Noite
Entrega
Regular
Recebe o
Pagamento
Intercalao
Juno
Fechar
o Pedido
Fim
envolvidas (cliente, motorista, ...) e muitos passos. Embora este processo possa ser capturado por um
texto (no texto do caso de uso), neste caso os diagramas de atividades representam um excelente
exemplo de que figuras valem por mil palavras. Meu cliente usa diagramas de atividades para entender
seus atuais e complexos processos de negcio por meio de sua visualizao. As parties so teis
para ver as vrias partes envolvidas e as aes paralelas envolvidas no processo de despacho. Os ns
de objetos ilustram o que est sendo movimentado de um lado para outro. Depois de modelar seus
processos atuais, eles exploram visualmente mudanas e otimizaes.
Modelagem de fluxo de dados: A partir dos anos 70, diagramas de fluxos de dados (DFD)
tornaram-se uma forma popular de visualizar os principais passos e dados envolvidos em processos de
sistemas de software. Isso no equivale modelagem de processos de negcios; em vez disso, DFDs
eram geralmente usados para mostrar fluxos de dados em um sistema computacional, embora
teoricamente pudessem ser aplicados modelagem de processos de negcios. DFDs eram teis para
documentar os principais fluxos de dados ou para explorar um novo projeto de alto nvel em termos de
fluxo de dados. Veja a figura 13 para um exemplo de um DFD na notao clssica de Gane-Sarson.
Observe que os passos do processo so numerados, para indicar a ordem.
A informao modelada em um DFD til, tanto para documentao quanto para descoberta,
mas a UML no inclui a notao para DFD. Felizmente, os diagramas de atividade da UML podem
satisfazer os mesmos propsitos eles podem ser usados para modelagem de fluxo de dados,
substituindo a notao tradicional dos DFDs. A Figura 14 ilustra a mesma informao do DFD da Figura
13, mas usando um diagrama de atividades da UML. Note que alm de podermos usar os ns de objeto
para mostrar os fluxos de dados, os ns dos armazns de dados (datastore nodes) da UML podem
ser usados.
Comportamento Condicional
Comportamento condicional delineado por desvios (branches) e intercalaes (merges). Um
desvio (branch) uma transio de entrada nica e vrias transies de sada guardadas. Somente
uma transio de sada pode ser tomada, de modo que os guardas devem ser mutuamente exclusivos.
A utilizao de [else] como um guarda indica que a transio else dever ser usada se todos os
outros guardas do desvio forem falsos. Uma intercalao (merge) tem mltiplas transies de
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 55
entrada e uma nica sada. Um merge marca o final de um comportamento condicional iniciado por um
branch.
Comportamento paralelo indicado por separaes (forks) e junes (joins). Uma separao
(fork) tem uma transio de entrada e vrias transies de sada. Quando uma transio de entrada
acionada (triggered) todas as transies de sada so executadas em paralelo. Quando temos
comportamento paralelo, precisamos sincronizar. Com a juno (join) a transio seguinte efetuada
somente quando todos os estados nas transies de entrada tenham completado suas atividades.
O diagrama de atividades permite escolher a ordem em que as coisas vo ser feitas. Ele
simplesmente determina as regras essenciais de sequncias que devem ser seguidas. Esta a
diferena-chave entre um diagrama de atividades e um fluxograma: os fluxogramas so normalmente
limitados a processos sequenciais, enquanto que os diagramas de atividades podem lidar com
processos paralelos.
Os diagramas de atividades tambm so teis para programas concorrentes, uma vez que
possvel projetar graficamente quais caminhos (threads) temos e quando eles precisam ser
sincronizados.
Separao e juno devem se completar. Isso significa que toda vez que tiver uma separao deve
haver uma juno que una as threads iniciadas por aquelas separaes.
Entretanto, existem vrias extenses para esta regra:
Um thread que sai de uma separao pode abrir-se em uma nova separao, com os novos
threads juntando-se antes de alcanar a juno da primeira separao.
Se um thread saindo de uma separao vai direto para outra separao, podemos remover a
segunda separao e somente ter os threads da segunda separao saindo da primeira
separao. De modo semelhante, se uma juno vai direto para outra juno, podemos
eliminar a primeira juno e ter as threads indo direto para a segunda.
Uma construo avanada chamada de estado de sincronia permite que faamos sincronia
em lugares onde a regra de encaixe de separao e juno impediria que fizssemos isso.
Existe uma exceo para regra de que todos os estados de entrada em uma juno devem ter
terminado suas atividades, antes que a juno possa ser efetuada. Podemos acrescentar uma condio
para um thread saindo de uma separao. O resultado um thread condicional. Durante a execuo,
se a condio de um thread condicional for falsa, este thread considerado completado no que diz
respeito juno.
Separao removida
do diagrama
[a fim de vinho]
Cozinhar
Espaguete
Misturar Molho
Carbonara
Thread
Condicional
Abrir Vinho
Tinto
Combinar
Fig 2:
Separaes, Junes e Thread Condicionais
Figura
15:
Uma
atividade
Concorrncia Dinmica
Concorrncia dinmica permite que voc mostre iteraes sem que tenha que construir um
ciclo. Ou seja, permite representar a repetio de uma atividade.
Concorrncia Dinmica
Receber o
Pedido
*
Preencher Linha
de Item
Entregar
Pedido
Raias (Swimlanes)
Para usar raias, voc deve organizar seus diagramas de atividade em zonas verticais separadas
por linhas. Cada zona representa as responsabilidades de uma classe especfica ou, um departamento
especfico.
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 58
Compreendendo workflow
O diagrama de estados e diagramas de atividades faz com que exista uma base mais estvel
para os desenvolvedores de ferramentas construrem as que executaro estes diagramas.
Diagramas de Sequncia
Introduo
A UML inclui diagramas de interao para ilustrar como os objetos interagem por meio de
mensagens. Eles so usados para modelagem de objetos dinmica. H dois tipos comuns de diagramas
de interao: diagramas de sequncia e de comunicao.
O termo diagrama de interao uma generalizao de dois tipos de diagramas
especializados da UML: diagramas de sequncia e diagramas de comunicao. Ambos podem expressar
interaes semelhantes.
Diagramas de sequncia so os mais ricos dos dois tipos em termos de notao, mas diagramas
de comunicao tambm tm sua utilidade, especialmente para rascunho na parede.
Os diagramas de sequncia ilustram as interaes em um formato semelhante a cercas, nas
quais cada objeto novo acrescentado direita, conforme mostrado na Figura 19.
Diagramas de Sequncia
Na maioria dos casos, usamos um diagrama de sequncia para ilustrar as realizaes 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 sequncia podem ilustrar as interaes de
objetos que constituem um caso de uso. Uma organizao tpica deve ter um diagrama de sequncia
para o fluxo principal de eventos e um diagrama de sequncia para cada subfluxo independente do
caso de uso.
FAETEC 2012 - Notas de Aula de MD3 Prof. M. Frana Pgina: 61
Os diagramas de sequncia
ncia so muito importantes para designers porque eles esclarecem os
papis
dos
objetos
em
um
fluxo
e,
portanto,
fornecem
entrada
bsica
para
determinar
responsabilidades
bilidades de classe e interfaces.
Diferentemente de um diagrama de colaborao, um diagrama de sequ
sequncia inclui sequncias,
mas no inclui relacionamentos de objetos. Ambos expressam informaes semelhantes; o que muda
a forma como elas so mostradas. Os diagramas de sequncia
ncia mostram a sequncia
seq
explcita de
mensagens e so melhores quando importante visualizar a ordenao temporal das mensagens.
Quando voc estiver interessado nos relacionamentos estruturais entre as instncias de uma interao,
use um diagrama de colaborao.
Objetos
Um objeto mostrado como uma linha tracejada vertical denominada
denominada "linha de vida". A linha de
vida representa a existncia do objeto em um momento especfico. Um smbolo de objeto foi
desenhado no alto da linha de vida e mostra o nome do objeto e sua classe sublinhada e separada por
dois-pontos:
objectname : classname
FAETEC 2012
12 - Notas de Aula de MD3 Prof. M. Frana Pgina: 62
a) 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.
b) Uma classe de objeto pode no estar especificada. Geralmente, voc cria primeiro um
diagrama de sequncia com objetos e mais tarde especifica as suas classes.
c) Os objetos podem no ter nome, mas recomendvel nome-los se voc quiser diferenciar os
diversos objetos da mesma classe.
d) Vrias 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 voc possa
estabelecer a diferena entre os dois objetos.
e) 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.
Atores
Geralmente, uma instncia de ator representada pela primeira (mais esquerda) linha de vida
no diagrama de sequncia, como o disparador da interao. Se houver vrias instncias de atores no
mesmo diagrama, tente mant-las na linha de vida mais esquerda ou na linha mais direita.
Mensagens
Uma mensagem uma comunicao entre objetos que leva informaes na expectativa de que
resulte uma atividade; nos diagramas de sequncia, uma mensagem mostrada como uma seta slida
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 parmetros. Ela tambm pode ser rotulada com um
nmero que indique a sequncia da mensagem no processo geral de interao. Os nmeros
sequenciais em geral so omitidos em diagramas de sequncia, nos quais a localizao fsica da seta
mostra a sequncia relativa.
Uma mensagem pode ser no-atribuda, o que significa que seu nome uma sequncia de
caracteres temporria que descreve o sentido geral da mensagem e no o nome de uma operao do
objeto recebedor. Mais tarde, voc poder atribuir mensagem especificando a operao do objeto de
destino da mensagem. A operao especificada substituir ento o nome da mensagem.
Tipos de Mensagem
Mensagem de Criao
Aponta diretamente para o objeto e marcada com create
Mensagem de Retorno
Opcional, e normalmente omitida
Usa seta tracejada
Marca de Destruio
Indica o trmino da vida de um objeto com um X
Scripts
Os scripts descrevem o fluxo de eventos textualmente em um diagrama de sequncia. Voc
deve posicionar os scripts esquerda das linhas de vida para poder ler o fluxo completo de cima para
baixo (consulte a Figura 21). Voc pode anexar scripts a uma determinada mensagem assegurando,
assim, que o script se mova com a mensagem.
Figura
24:
estrutura
de
Um fluxo de eventos com controle centralizado ter um diagrama de sequncia "em forma de
forquilha". Por outro lado, um diagrama de sequncia "em forma de escada" ilustra que a estrutura de
controle foi descentralizada para os objetos participantes.
A estrutura de comportamento da realizao de um caso de uso frequentemente consiste em
uma mistura de comportamento centralizado e descentralizado.
Uma estrutura descentralizada ser adequada:
Representarem uma progresso cronolgica fixa (a sequncia de fases de subeventos ser sempre
realizada na mesma ordem), como Anncio - Pedido - Fatura -Remessa - Pagamento; ou
algum que deseje utilizar sempre a funcionalidade inteira, porque a funcionalidade pode se tornar
desnecessariamente de difcil compreenso caso a estrutura de comportamento seja centralizada.
Uma estrutura centralizada ser adequada:
Repeties
O diagrama de sequncia permite que repeties sejam feitas durante o fluxo. Para isso so
utilizados quadros (frames) do tipo loop.
Decises
O diagrama de sequncia permite que decises sejam tomadas durante o fluxo
Para isso so utilizados quadros (frames) do tipo alt ou opt com condies de guarda
Exemplo:
Antes de prosseguir para um projeto detalhado de como uma aplicao de software vai
funcionar, til investigar e definir seu comportamento como uma caixa-preta. Comportamento do
sistema uma descrio do que um sistema faz, sem explicar como o faz. Uma parte dessa descrio
um diagrama de sequncia do sistema. Outras partes incluem os casos de uso e os contratos de
operao do sistema.
Exemplo:
Figura
27:
Escolher
os
nomes
de
Exerccios
Diagramas de Atividades
1. Qual a finalidade do Diagrama de Atividades?
2. Quando recomendado utilizar raias na descrio do diagrama de atividades?
3. Compare barra de Juno x Barra de Bifurcao
4. Construa o diagrama de atividades que descreva o processo de compras on-line
(Ex.Submarino, Americanas)
5. Construa o diagrama de atividades que modele as regras de negcio das avaliaes do
semestre, considerando o seguinte mini-mundo:
Faltas (25%)
Diagramas de Sequncia
1 - Construa os Diagramas de Sequncia para o Caso de Uso Reservar Carro:
Nota: somente clientes j cadastrados podero fazer a reserva do veculo on-line.
Aps ter sido criado pela chamada do mtodo abertura, o objeto de ContaComum ir disparar o
mtodo gravar para gerar uma nova instncia da classe Historico, registrando o movimento gerado
pela abertura da conta, pois, para abrir uma conta, a instituio exige que o cliente deposite algum
valor na mesma. O mtodo gravar retornar um sinal indicando que o movimento foi registrado com
sucesso e o mtodo abertura disparado na classe ContaComum, por sua vez, retornar o nmero da
conta gerado, indicando que a conta foi criada com sucesso e finalizando o processo de abertura de
conta.
4. Construa um Diagrama de Seqncia encerrar uma conta, conforme a descrio
abaixo:
Primeiramente um cliente se encaminha ao caixa do banco, representado pelo ator Funcionario
e solicita o encerramento de uma determinada conta comum. O caixa ento ir verificar se a conta
informada realmente existe e se a senha informada verdadeira, por meio do disparo do mtodo
consulta. Caso a conta realmente exista, o prprio mtodo ir chamar o mtodo de validao de senha
para verificar se a senha informada pelo usurio est correta. Em caso positivo, ser verificado o saldo
da conta.
Se o saldo retornado for positivo, ento o caixa ir retirar o dinheiro da conta, o saque efetuado
dever ser registrado no histrico das movimentaes. Em seguida o objeto de ContaComum retornar
o valor do saldo para o atendente que dever ser igual a zero se o mtodo for executado com sucesso.
Finalmente o atendente ir chamar o mtodo encerramento para fechar a conta do cliente no
objeto de ContaComum. Antes de concluir a execuo, esse mtodo pode, caso a conta a ser encerrada
seja a nica possuda pelo cliente, atualizar o cadastro do mesmo, definindo o seu status como inativo,
por meio do mtodo gravar no objeto de Fisica.
Caso tenha sido possvel atualizar a instncia da classe Fsica, ento o mtodo gravar retornar
um valor indicando que o cliente foi atualizado. A conta retornar um valor que instruir o software
mostrar ao atendente a mensagem: Conta Encerrada com Sucesso, finalizando o processo de
encerramento de conta.
Referncias
__________
_______________________________________________
Data:
________
Perodo/Turma: ________
1) O curso: O curso Tcnico em Informtica da Escola Tcnica Estadual Repblica possui um bom nvel? As
matrias so atuais e relevantes? Ele proporciona um ambiente para que alunos interessados possam adquirir
conhecimentos aplicveis profissionalmente?
2) A disciplina: A disciplina em questo (MD3) possui um contedo atual? O programa foi totalmente coberto? A
carga horria semanal foi suficiente para explanao e resoluo de exerccios? As aulas prticas (se for o
caso) foram suficientes e em condies adequadas (mquinas)?
3) O professor: O professor possua domnio da disciplina (conhecimento)? Ele explica bem (didtico)? Ele
cordial e atencioso para com os alunos? Ele estava sempre disposto a explicar novamente algum conceito mal
compreendido? Existe algum ponto positivo e/ou negativo no professor?
4) O aluno: Voc freqenta as aulas assiduamente? Voc faz os exerccios/estuda em casa? Voc presta ateno
na explicao do professor? Voc se considera um aluno agitado/disperso? Voc conseguiu aprender os
principais conceitos da disciplina? Voc tentou tirar suas dvidas com o professor?
5) Livre: Que sugestes, ou crticas, voc gostaria de fornecer para a melhoria do processo?
6) Nota: D uma nota para a disciplina (MD3), de 0 (muito insatisfeito) a 10 (muito satisfeito): ______
Muito obrigado. Desejo a todos muito sucesso profissional e boas frias; Sem radicalismos!
Teu corao livre.
Tenha coragem para segui-lo!
Brave Heart