• Nenhum resultado encontrado

Programação com Objectos. Processamento de Dados I. 3. UML (Unified Modeling Language)

N/A
N/A
Protected

Academic year: 2021

Share "Programação com Objectos. Processamento de Dados I. 3. UML (Unified Modeling Language)"

Copied!
50
0
0

Texto

(1)

1

Programação com Objectos

Processamento de Dados I

(2)

Programação com Objectos / Processamento de Dados I 2

3. UML (Unified Modeling Language)

|

Modelo

| UML

(3)

Programação com Objectos / Processamento de Dados I 3

3. UML (Unified Modeling Language)

|

Modelo

z O desenvolvimento de programas orientados aos objectos assenta na construção de um modelo.

z O modelo é uma abstracção dos aspectos essenciais do problema.

z O modelo estrutura o problema e permite detectar omissões e inconsistências.

z O modelo é um passo intermédio entre o enunciado do problema e a solução.

z Um sistema de análise descreve os modelos (i.e., representações limitadas) da aplicação a desenvolver.

z Aumenta a legibilidade (menos informação que o código, permitindo visualizar globalmente a aplicação).

z Mostra a estrutura da aplicação, sem detalhes de implementação. z A representação gráfica incrementa a clareza semântica.

z Devido à complexidade, a abordagem OO é descrita por vários modelos, onde cada modelo aborda um aspecto particular.

(4)

Programação com Objectos / Processamento de Dados I 4

3. UML (Unified Modeling Language)

|

UML

| UML - Unified Modeling Language resulta da fusão de vários

sistemas de análise:

z Booch (G. Booch) z OOSE (I. Jacobson) z OMT (J. Rumbaugh)

| 1ª proposta divulgada em 1997 (1999 -v1.1, 2000 -v1.3, 2001 -v1.4, 2003 -v1.5, Abril 2004 -v2.0)

| Ferramentas de desenho UML:

z Rational Rose

(5)

Programação com Objectos / Processamento de Dados I 5

3. UML (Unified Modeling Language)

|

UML

z Em UML os modelos de software são representados por um conjunto de diagramas

z Estes são criados e utilizados durante a fase de análise e, posteriormente, como ferramenta de comunicação com os programadores

z Os modelos são constituídos por objectos (com os seus atributos e comportamentos) que interactuam entre si através do envio de mensagens

(6)

Programação com Objectos / Processamento de Dados I 6

3. UML (Unified Modeling Language)

|

UML

z UML v2 disponibiliza 13 diagramas, agrupados em:

Modelação estrutural (pacotes, classes, objectos, estrutura

composicional, componentes, aplicação física).

Modelação de comportamento (use case, actividade, máquina

de estados, comunicação, sequência de mensagens, temporização, enquadramento das interacções).

(7)

Programação com Objectos / Processamento de Dados I 7

3. UML (Unified Modeling Language)

|

Diagrama de classes

z Um diagrama de classes dá uma panorâmica geral do sistema, mostrando as suas classes e as relações entre elas.

z Os diagramas de classe são estáticos, ou seja mostram o que interage, mas não o que acontece quando a interacção acontece

z Apenas relações estáticas: que classes constituem outra, que classes uma dada classe conhece e usa, etc.

z A identificação dessas classes e suas relações no enunciado do problema tem de ser feita previamente.

z O diagrama de classes é um grafo: • Os nós são classes de objectos

(8)

Programação com Objectos / Processamento de Dados I 8

3. UML (Unified Modeling Language)

|

Diagrama de classes

|

Representação das classes

z Uma classe é representada por um rectângulo dividido em três secções:

• Identificador (nome da classe); • Atributos; • Métodos. getNome (): String getNumTelefone (): long getNumBI (): long setNome (nome:String) setNumTelefone (numTelefone:long) setNumBI (numBI: long)

nome: String numTelefone: long numBI: long Pessoa Identificador Atributos Métodos

(9)

Programação com Objectos / Processamento de Dados I 9

3. UML (Unified Modeling Language)

|

Diagrama de classes

| Representação dos membros da classe

z Especificação dos atributos:

[visibilidade] nome :tipo [multiplicidade] [=valor por omissão]

+ public

- private

# protected

~ package

z Especificação dos métodos:

[visibilidade] nome (lista dos argumentos:tipo) [:tipo de retorno]

(10)

Programação com Objectos / Processamento de Dados I 10

3. UML (Unified Modeling Language)

|

Diagrama de classes

| Representação da classe Conta

+ setTitular (titular: Pessoa) + setSaldo (saldo: float) + getTitular (): Pessoa

+ levantamento (valor: float) + deposito (valor: float)

+ consultarSaldo (): float - incNumContas () - decNumContas() - saldo: float - titular: Pessoa - numContas: int Conta

(11)

Programação com Objectos / Processamento de Dados I 11

3. UML (Unified Modeling Language)

|

UML

| Representação dos objectos da classe

z Um objecto de uma classe é representado por um rectângulo dividido em duas secções:

• Nome_do_objecto: nome_da_classe • Valores_dos_atributos

nome: Ana Maria

numTelefone: 296123456 numBI: 123456789

(12)

Programação com Objectos / Processamento de Dados I 12

3. UML (Unified Modeling Language)

|

Exercício

Observe com atenção a seguinte sequência de

imagens

(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)

Programação com Objectos / Processamento de Dados I 20

Algumas questões

|

O que visualizamos nas imagens anteriores?

Portas

•Como podemos caracterizar então uma porta?

Atributos

•Para além das suas características o que

diferencia as portas apresentadas?

(21)

Programação com Objectos / Processamento de Dados I 21

Estados de uma porta

Aberta Fechada Trancada fechar abrir trancar destrancar

(22)

Programação com Objectos / Processamento de Dados I 22

Solução 1: Classe Porta

Porta

- aberta: boolean

-- fechada: boolean -- trancada: boolean

+ Porta (open: boolean, closed:boolean, locked:boolean)

+ setEstado (open: boolean, closed:boolean, locked:boolean): void + isAberta():boolean

+ isFechada(): boolean +isTrancada():boolean

(23)

Programação com Objectos / Processamento de Dados I 23

Solução 2: Classe Porta

Porta

- aberta: boolean

-- fechada: boolean -- trancada: boolean

+ Porta (open: boolean, closed:boolean, locked:boolean) + abrir (): void + fechar(): void + trancar(): void + isAberta():boolean + isFechada(): boolean +isTrancada():boolean

(24)

Programação com Objectos / Processamento de Dados I 24

Solução 3: Classe Porta

Porta

- estado: String

+ Porta (estado: String)

+ setEstado (estado: String): void + getEstado(): String

+ isAberta():boolean + isFechada(): boolean +isTrancada():boolean

(25)

Programação com Objectos / Processamento de Dados I 25

Solução 4: Classe Porta

Porta

- estado: int

+ Porta (estado: int) + abrir() :void + fechar() :void + trancar() :void + destrancar():void + isAberta(): boolean + isFechada(): boolean +isTrancada():boolean

(26)

Programação com Objectos / Processamento de Dados I 26

3. UML (Unified Modeling Language)

|

UML

|

Relações entre objectos

z Os objectos não vivem isolados e nos programas são estabelecidas relações de cooperação.

z Uma relação não é mais do que uma conexão entre elementos.

z Existem diferentes tipos de relações:

Associação: relaciona objectos entre si.

Composição/Agregação: relação que denota o todo constítuido

por partes.

Herança: mecanismo de generalização – especialização de

classes.

Realização: uma classe implementa a funcionalidade definida

(27)

Programação com Objectos / Processamento de Dados I 27

3. UML (Unified Modeling Language)

|

UML

|

Associação

z Uma associação representa uma relação semântica entre as classes participantes da relação:

Podem ter um nome (etiqueta) - pode ter uma seta que indica a direcção em que o nome deve ser lido

O número de objectos que podem participar na associação

O papel que cada classe desempenha na associação

z Uma associação entre classes é representada através de uma linha.

(28)

Programação com Objectos / Processamento de Dados I 28

3. UML (Unified Modeling Language)

|

UML

|

Especificação da associação

z Cada associação tem dois papéis;

z Os papéis fazem parte da associação e não da classe, porque uma mesma classe pode ter diferentes papéis em diferentes associações

Classe A etiqueta Classe B

papel de B papel de A

Empresa Trabalha para Pessoa

empregado empregador

(29)

Programação com Objectos / Processamento de Dados I 29

3. UML (Unified Modeling Language)

|

UML

|

Especificação da associação

z A multiplicidade de uma associação traduz o nº de instâncias de uma classe que se podem associar com uma única instância das restantes classes.

1: Uma única instância

0..1: zero ou uma instância

* ou 0..*: zero ou mais instâncias

n..*: n ou mais instâncias

5..10: 5 a 10 instâncias (temos instâncias mais complexas)

Classe A etiqueta Classe B

papel de B papel de A multiplicidade de A multiplicidade de B

Empresa Trabalha para Pessoa

empregado empregador

(30)

Programação com Objectos / Processamento de Dados I 30

3. UML (Unified Modeling Language)

|

UML

|

Classes de associações

z Uma associação pode ser ela própria descrita como uma classe –

classe associativa.

z O identificador da associação para a ser o nome da classe.

1 1..*

(31)

Programação com Objectos / Processamento de Dados I 31

3. UML (Unified Modeling Language)

|

UML

|

Associações reflexivas

z São associações entre objectos da mesma classe.

z Os papéis são fundamentais neste caso pois são eles que permitem perceber a associação existente.

(32)

Programação com Objectos / Processamento de Dados I 32

3. UML (Unified Modeling Language)

|

UML

|

Agregação/Composição

z A agregação é uma associação, que denota uma relação do todo ser formado por partes.

z A agregação é dita como sendo uma relação de “has-a”.

z Representada como uma associação com um pequeno diamante não preenchido no extremo relativo ao todo.

(33)

Programação com Objectos / Processamento de Dados I 33

3. UML (Unified Modeling Language)

|

UML

|

Agregação/Composição

z Na composição, o desaparecimento do todo conduz ao desaparecimento das partes.

z Representada como uma associação com um pequeno diamante preenchido no extremo relativo ao todo.

(34)

Programação com Objectos / Processamento de Dados I 34

3. UML (Unified Modeling Language)

|

UML

|

Agregação/Composição

z De uma maneira geral tanto a agregação como a composição não têm identificador, pois o significado destas relações está representada pelo próprio par todo-partes.

z A multiplicidade deve aparecer em ambos os extremos.

z Quando a multiplicidade é omitida, considera-se que é exactamente 1.

(35)

Programação com Objectos / Processamento de Dados I 35

|

Exercício

Considere a seguinte situação:

“1 banco tem vários clientes. Cada cliente pode

ter 1 ou várias contas, sendo o cliente o seu titular.

Para existir uma conta deve de estar sempre

afecta a um cliente (o seu titular), podendo no

entanto ter outros dois clientes como titulares

secundários.

Descreva um diagrama de classes e inclua as

suas relações.

(36)

Programação com Objectos / Processamento de Dados I 36

3. UML (Unified Modeling Language)

|

UML

|

Herança

z Princípio Aberto-Fechado

Fecho: devem estar desenvolvidos para que o programa possa ser usado sem alterações.

Abertura: classes devem estar abertas para extensão, por forma a incorporar alterações com o mínimo impacto no sistema.

(37)

Programação com Objectos / Processamento de Dados I 37

3. UML (Unified Modeling Language)

|

UML

|

Herança

z A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse pode ser vista como generalização das subclasses.

z A herança é dita como uma relação “is-a”.

z As subclasses herdam os atributos e métodos das superclasses. Novos atributos e métodos podem ser adicionados às subclasses.

z O polimorfismo é a redefinição de métodos, da superclasse nas subclasses, com a mesma assinatura.

z Em POO o polimorfismo é normalmente implementado através de

ligação dinâmica (o método a ser executado é determinado

(38)

Programação com Objectos / Processamento de Dados I 38

3. UML (Unified Modeling Language)

|

UML

|

Herança

| Vantagens da herança:

z Maior legibilidade, pois as superclasses descrevem os aspectos comuns.

z Facilita alterações, porque normalmente estas incidem apenas nos aspectos particulares.

z Promovem a reutilização do código das superclasses.

| Inconvenientes da herança:

(39)

Programação com Objectos / Processamento de Dados I 39

3. UML (Unified Modeling Language)

|

UML

|

Herança

z Na herança simples cada subclasse tem apenas uma superclasse (directa).

z Na herança múltipla uma subclasse pode ter mais do que uma superclasse (directa).

(40)

Programação com Objectos / Processamento de Dados I 40

3. UML (Unified Modeling Language)

|

UML

|

Herança

| A herança simples é representada por uma seta não preenchida das

(41)

Programação com Objectos / Processamento de Dados I 41

3. UML (Unified Modeling Language)

|

UML

|

Herança

| A herança múltipla é representada por uma seta não preenchida da

(42)

Programação com Objectos / Processamento de Dados I 42

3. UML (Unified Modeling Language)

|

UML

|

Herança

| Classe não extensível

z Classe sem superclasses: representada com a propriedade {root}

escrita por baixo do identificador da classe.

z Classe sem subclasses: representada com a propriedade {leaf}

(43)

Programação com Objectos / Processamento de Dados I 43

3. UML (Unified Modeling Language)

|

UML

|

Herança

| O UML permite ainda especificar que um determinado método que

não pode ser redefinido em subclasses. Tais métodos são representados com a propriedade {leaf} escrita depois da assinatura do método.

(44)

Programação com Objectos / Processamento de Dados I 44

EXERCÍCIO:

Venda de bebidas

Considere uma loja cuja área de negócio é a venda de

bebidas. A loja vende dois tipos de bebidas:

cerveja

e

whisky

. Estas bebidas são engarrafadas pela própria loja,

sendo a loja responsável por manter a quantidade

disponível de cada bebida para vender.

Para cada tipo de bebida as garrafas comercializadas

poderão ser de:

- Cerveja: 25 cl, 33 cl e 1 L.

- Whisky: apenas de 75 cl.

(45)

Programação com Objectos / Processamento de Dados I 45

EXERCÍCIO:

Funcionalidade da loja

Quando se cria uma nova loja é necessário indicar o seu nome, e as capacidades iniciais (em litros) disponíveis de cerveja e whisky, respectivamente.

A qualquer momento é possível saber as quantidades disponíveis para venda de qualquer uma das bebidas através dos seguintes métodos:

capCerveja e capWhisky. Também é possível obter o nome da loja

através do método nomeLoja.

A loja permite a venda de garrafas de cerveja (método vendeCerveja, o qual devolverá a garrafa de cerveja pretendida), tendo que ser indicada a capacidade pretendida da garrafa a vender. Deve imprimir a seguinte mensagem: Loja <nome da loja> vendeu garrafa de cerveja de " <capacidade da garrafa> " cl.

A loja permite também a venda de garrafas de whisky (método

vendeWhisky, o qual devolverá a garrafa de whisky pretendida). Deve

imprimir a seguinte mensagem: Loja <nome da loja> vendeu garrafa de whisky.

(46)

Programação com Objectos / Processamento de Dados I 46

EXERCÍCIO:

Funcionalidade da loja

Em qualquer um dos casos, se a capacidade disponível da bebida escolhida for inferior à quantidade a vender, então o método de venda invocado deve retornar a referência para objecto null.

Finalmente, a loja pode comprar mais cerveja e whisky de forma a aumentar o stock de bebida disponível na loja. Esta funcionalidade deve ser representado pelos métodos: compraCerveja e compraWhisky, que irão aumentar a quantidade de bebida disponível na loja. Ambos os métodos recebem como argumento o número de litros de bebida a adicionar ao stock de loja.

(47)

Programação com Objectos / Processamento de Dados I 47

EXERCÍCIO:

Funcionalidade da garrafa de cerveja

Uma garrafa de cerveja tem uma dada quantidade de cerveja. É

possível saber se está cheia (através do valor booleano retornado

pelo método estaCheia) ou vazia (através do valor booleano

retornado pelo método estaVazia) e qual a quantidade bebida ainda

presente na garrafa (através do método quantGarrafa).

Tem ainda a funcionalidade de se poder beber uma dada

quantidade da garrafa (representado pelo método bebeCerveja). Se

se pretender uma quantidade maior que a presente na garrafa, este

método deve devolver false e deixar a garrafa com a quantidade

inalterada. Se a quantidade presente na garrafa for maior ou igual à

que se quer beber então este método deve devolver true.

(48)

Programação com Objectos / Processamento de Dados I 48

EXERCÍCIO:

Funcionalidade da garrafa de whisky

Uma garrafa de whisky tem uma dada quantidade de whisky.

É possível saber se está cheia (através do valor booleano retornado pelo método estaCheia) ou vazia (através do valor booleano retornado pelo método estaVazia) e qual a quantidade bebida ainda presente na garrafa (através do método quantGarrafa).

Tem ainda a funcionalidade de se poder beber, de cada vez, 15 cl da garrafa (representado pelo método bebeWhisky). Se se pretender uma quantidade maior que a presente na garrafa, este método deve devolver

false e deixar a garrafa com a quantidade inalterada. Se a quantidade

presente na garrafa for maior ou igual à que se quer beber então este método deve devolver true.

(49)

Programação com Objectos / Processamento de Dados I 49

EXERCÍCIO:

Outras funcionalidades

| Para a classe Loja deverá implementar o método equals que deverá

comparar duas lojas. Considere que as lojas serão iguais se tiverem o mesmo nome.

| Para uma garrafa deve ser implementado o método toString que

deverá devolver a seguinte String: “Garrafa de <tipo_de_bebida> ainda com <quantidade_de_bebida_disponível>”

(50)

Programação com Objectos / Processamento de Dados I 50

EXERCÍCIO:

Objectivos

| Especifique em UML o diagrama de classes referente à situação descrita acima. | Implemente, em Java, as classes participantes do sistema declarando os seus

atributos e os métodos necessários para o seu correcto funcionamento.

| Implemente a classe Java de execução DemoLojas que execute os seguintes passos:

z Crie uma loja com o nome "Bar Académico" e com uma quantidade inicial de 5L de

cerveja e 3L de whisky.

z Vende 4 garrafas de cerveja de 1L, 2 de 33 cl e uma de 25 cl.

z Invoque o método toString sobre cada uma destas garrafas.

z Beba 33cl de todas as garrafas criadas.

z Invoque novamente o método toString sobre cada uma destas garrafas.

z Vende mais uma garrafa de cerveja de 25cl.

z Vende 4 garrafas de whisky.

z Invoque o método toString sobre cada uma destas garrafas.

z Bebe uma vez das primeiras três garrafas de whisky e duas vezes da quarta

garrafa.

z Invoque novamente o método toString sobre cada uma destas garrafas.

z Vende mais uma garrafa de whisky.

z Compre 5L de whisky.

z Vende mais uma garrafa de cerveja de 25cl.

Referências

Documentos relacionados

Segundo esta regulamentação, as mensalidades deveriam observar, no máximo, sete faixas (0 a 17 anos, 18 a 29 anos, 30 a 39 anos, 40 a 49 anos, 50 a 59 anos, 60 a 69 anos e 70 anos

Finalmente, o/a pastor/a deve “conscientizar-se de que a Igreja está sempre em formação e nela coisa alguma está completamente pronta: a co-responsabilidade deverá

Outros efeitos adversos: Não são conhecidos outros efeitos ambientais para este produto. CONSIDERAÇÕES SOBRE TRATAMENTO

5.4 A aquisição e o fornecimento de qualquer recurso didático para as aulas ministradas nas dependências da Proponente, será de inteira responsabilidade desta e sem ônus para

Um estudo epidemiológico retrospectivo observacional de coorte utilizando registros eletrônicos de saúde do Reino Unido foi utilizado para avaliar o risco de malformações

A leitura dos dados de pesquisa demonstrou que o extrativismo realizado pelas famílias e combinado com outras atividades produtivas (como agricultura em cultivos

A Conversa de Vênus é uma ferramenta especí ca para ajudar a resolver um problema muito maior e mais geral que paira sobre nossas vidas: é usada para ajudar a mulher a voltar para o

Assim, entre 1962 e 1979, foram conturbadas as relações turco-americanas, mesmo que esses desvios não tenham reorientado a política externa turca como um tudo,