Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Introduo
2. Levantamento de Requisitos
3. Anlise Orientada a Objetos
4. Projeto Orientado a Objetos
5. UML
6. Mtodos geis
captura
Compra
Venda
data
completa
horario
Modelo do Domnio
Modelo do Projeto
Registrador
Compra
Venda
1
finalizaCompra
entraItem
fazPagamento
captura
data
completa
horario
fazItemLinha
Diagramas de Interao
(Seqncia e Comunicao)
da UML
Diagrama de Interao
Diagrama de Interao: expressam interaes atravs de mensagens.
Diagrama de Seqncia
Diagramas de Seqncia: Ilustram as interaes entre os objetos em
uma espcie de cerca, na qual cada novo objeto adicionado a direita.
public class A
{
private B myB = new B( );
public void doOne( )
{
myB.doTwo( );
myB.doThree( );
}
//
}
Diagrama de Seqncia
:Registrador
:Compra
Object1
fazPagamento(dinheiro)
fazPagamento(dinheiro)
create(dinheiro)
:Pagamento
Diagrama de Comunicao
Diagramas de Comunicao: Ilustram as interaes entre os objetos
em um grafo, no qual os objetos so colocados em qualquer lugar do
diagrama.
2: fazPagamento(dinheiro)
:Registrador
1: fazPagamento(dinheiro)
Object1
:Compra
1.1: create(dinheiro)
:Pagamento
Diagrama de Seqncia
Vantagens (em relao aos diagramas de comunicao):
Mostra claramente a ordem das mensagens das mensagens.
Conjunto maior de opes de notao.
:InstanciaClasseA
Object1
mensagem1
mensagem2
mensagem3
:InstanciaClasseB
Diagrama de Comunicao
Vantagens: (em relao aos diagramas de seqncia)
Facilita a incluso de novos objetos sem ocupar muito espao.
3: mensagem1
Object1
InstanciaClasseA
1: mensagem2
2: mensagem3
InstanciaClasseB
c1: Compra
metaclass
Compra
classe Compra
somente se for invocado um mtodo de classe da
classe Compra
x : Lista
da coleo compras
Exerccio
Defina um diagrama de sequncia para o mtodo a seguir:
public void submeteArtigo(String nome, String resumo, String[] nomesAutores,
{
Artigo artigo = new Artigo(nome);
artigo.setResumo(resumo);
artigo.setIdentificador(identArtigo);
identArtigo++;
for (int i=0; i<nomesAutores.length; i++){
String nomeAutor = (String)nomesAutores[i];
Autor autor = new Autor (nomeAutor);
int indice = this.autores.indexOf(autor);
if (indice == -1)
this.autores.add(autor);
else
autor = this.autores.get(indice);
artigo.associaAutor(autor);
}
this.artigos.add(artigo);
}
:Compra
create
:Pagamento
destroy
2. Mensagem
Cada mensagem entre dois objetos representada pela sua expresso
em uma linha direcionada (com seta preenchida) entre dois objetos.
A ordem seqencial das mensagens organizada de cima para baixo.
:Registrador
:Compra
Object1
msg1
msg2
msg3
msg4
msg5
2. Mensagem
Uma mensagem pode ser enviada de um objeto para ele mesmo.
:Registrador
Object1
mensagem1
clear
:Compra
msg1
d1 = getData
getData
data
4. Criao de Instncias
Geralmente o nome create usado para representar uma mensagem
que cria uma instncia.
fazPagamento(dinheiro)
:Compra
create(dinheiro)
autoriza
:Pagamento
5. Looping
O looping indicado com um retngulo onde aparece o label loop e
uma clusula de looping.
6. Mensagem Condicional
A mensagem condicional indicada com uma clusula junto a
mensagem.
A mensagem enviada somente se a clusula verdadeira.
6. Mensagem Condicional
Um condio sob um conjunto de mensagens indicada com uma
clusula de looping.
As mensagens so enviadas somente se a clusula verdadeira.
6. Mensagem Condicional
Mensagens podem ser mutuamente exclusivas.
Mensagens condicionais mutuamente exclusivas so indicadas com
um retngulo onde aparece o label alt e uma linha pontilhada
separando as mensagens.
:A
:B
msg1
alt
[ x < 10 ]
[ else ]
calcula
calcula
:C
:Registrador
:Loja
msg1
msg 2
Mensagens Polimrficas
Mensagens Polimrficas
1. Ligao (Link)
Uma ligao um caminho de conexo entre dois objetos. Ela indica
que existe alguma forma de navegao entre os objetos.
:Registrador
1: fazPagamento
2: foo
2.1: bar
:Compra
2. Mensagem
Cada mensagem entre dois objetos representada pela sua expresso
e uma pequena seta indicando a direo da mensagem.
Um nmero sequencial adicionado para mostrar a ordem seqencial
das mensagens na tarefa corrente.
:Registrador
1: fazPagamento
2: foo
2.1: bar
:Compra
2. Mensagem
Uma mensagem pode ser enviada de um objeto para ele mesmo.
2: mensagem1
Object1
:Registrador
1: clear
3. Criao de Instncias
Geralmente o nome create usado para representar uma mensagem
que cria uma instncia.
:Registrador
:Registrador
:Registrador
1: create (caixa)
1: create (caixa)
create
1: faz (caixa)
:Compra
:Compra {new}
:Compra
:ClasseA
:ClasseB
1: msg2
1.1: msg3
2.1: msg5
Object1
2: msg4
:ClasseC
2.2: msg6
:ClasseD
5. Mensagem Condicional
Uma mensagem condicional mostrada pelo nmero seqencial
seguido de uma clusula condicional entre colchetes.
A mensagem enviada somente se a clusula verdadeira.
:Foo
:Bar
5. Mensagem Condicional
Mensagens podem ser mutuamente exclusivas.
:ClasseE
2: msg4()
msg1()
:ClasseA
1a [teste] : msg2()
:ClasseD
:ClasseB
6. Looping
O looping indicado com um * e uma clusula de looping opcional.
2: execute
Object1
:Simulador
1:*[i:=1..N] num:=nextItem
:Random
Mensagens Polimrficas
Nota
Smbolo de Nota: um retngulo com a orelha virada que pode ser
utilizado em qualquer diagrama da UML. Geralmente utilizado no
diagrama de classes.
{c.completa = true}
autor = Manuel
Object1
2: finalizaCompra
:Registrador
1: ehCompletada
c:Compra
Pode conter:
Nota ou Comentrio: no tem impacto semntico. Exemplo: autor de
um diagrama.
Restrio: uma informao semanticamente significante anexada
a um elemento do modelo. apresentada entre chaves { }.
Mtodo: implementao de uma operao.
Exerccios
Definam diagramas de seqncia para os seguintes mtodos:
public class ListBoxChoice extends MultiChoice {
JawtList list;
Vector choices;
public JPanel getUI() {
JPanel p = new JPanel();
list = new JawtList(choices.size());
list.setMultipleMode(true);
p.add(list);
for (int i=0; i< choices.size(); i++)
list.add((String)choices.elementAt(i));
return p;
}
Exerccios
public class TimeSwimData extends SwimData {
protected Vector swimmers;
public TimeSwimData(String filename) {
String s = "";
swimmers = new Vector();
InputFile f = new InputFile(filename);
s= f.readLine();
while (s != null) {
swimmers.addElement(new Swimmer(s));
s= f.readLine();
}
f.close();
}
Exerccios
public class ContadorPalavras {
public TabelaHash contaPalavras (String frase){
TabelaHash tabela = new TabelaHash(13);
StringTokenizer st = new StringTokenizer (frase, " ", false);
while (st.hasMoreTokens()){
String token = st.nextToken();
Integer ocorrencia = (Integer) tabela.retorna(token);
if (ocorrencia != null){
int numOcorrencia = ocorrencia.intValue();
tabela.remove(token);
tabela.insere(token, new Integer(numOcorrencia+1));
else{
tabela.insere(token, new Integer(1));
}
}
return tabela; }