Ementário
• O Modelo de Objetos
– Histórico da evolução das linguagens de programação,
PE versus POO, fundamentos do modelo de objetos, a
importância da modelagem, métodos OO
• Tecnologias para apoio a orientação a objetos
• UML- Unified Modeling Language
• A Linguagem Java
– introdução, a sintaxe e estruturas de controle
• Vocabulário da Orientação a Objetos (Abordagem
com Java)
Diagrama de Classe
• é a essência da UML (OMT e Booch)
• coleção de elementos declarativos de modelo,
como classes, tipos e seus respectivos
conteúdos e relações
• estruturar atributos e operações em classes é
fundamental para o trabalho de modelagem
através do enfoque da orientação a objetos
Associação
Atributos
Agregação
Classe associativa
Classe
Visibilidade
Multiplicidade
Superclasse
Generalização (herança)
Restrição
Operações
Subclasses
Relacionamentos (1/4)
• ligam as classes/objetos entre si criando
relações lógicas entre estas entidades
• tipos de relacionamentos:
–
–
–
–
generalização/ especificação (herança)
associação
agregação
dependência
Relacionamentos (2/4)
• Generalização/ especificação
– indica relacionamento entre um elemento mais
geral e um elemento mais específico
(respectivamente, superclasse e subclasse)
– também conhecido como herança ou
classificação (por exemplo, um enfermeira “é
um tipo de” pessoa)
Relacionamentos (3/4)
• Agregação
– usada para denotar relacionamentos todo/parte
– por exemplo, um Item de compra é parte de um Pedido
• Associação
– é um relacionamento que descreve um conjunto de
vínculos, onde cada vínculo é definido como uma
conexão semântica entre tuplas de objetos
– por exemplo, um Cliente possui Conta Corrente
Relacionamentos (4/4)
• Dependência
– é um relacionamento entre elementos, um
independente e outro dependente
– uma modificação no elemento independente
afetará diretamente os elementos dependentes
do anterior
– é um relacionamento de utilização
Elementos Chaves
1. Objeto
2. Classe
3. Atributo
4. Operação
5. Associação
6. Restrição
7. Classe de associação
8. Dependência
9. Interface
10. Normalização do
modelo de classes
1. Objeto
• é uma unidade real ou abstrata, individualizada
e identificável
• características básicas:
– estado: características herdadas ou distintas
– identidade (id.): propriedade que o distingue de
todos os demais
– comportamento: modo como age e reage a
estímulos externos (passagem de mensagens)
2. Classe
• “um conjunto de objetos que compartilham
estrutura e comportamento comuns”
(Booch)
• se a classe possuir como instâncias classes
em vez de objetos, ela será denominada de
metaclasse
• abstração = seleção de alguns aspectos de
domínio do problema para modelagem
Ao definir classes, é importante:
• Buscar equilíbrio entre funcionalidade e
reutilização, resistindo-se ao desejo de criar
classes grandes que abrangem tudo:
– Classes grandes são mais difíceis de entender e
reutilizar, assim a criação de classes de objetos que
possuam propósitos bem definidos contribui
significativamente na reutilização por outras aplicações.
– Classes menos complicadas são mais fáceis de entender
e manter, e se uma classe não puder ser explicada de
forma simples ela é forte candidata a subdivisão em
classes menores.
As classes são os blocos de construção mais
importantes de qualquer sistema orientado a objetos.
Notação gráfica para declarar e
usar Classes
Nome da Classe
atributo
atributo: tipo do dado
atributo: tipo do dado = valor inicial
...
operação ()
operação (lista de parâmetros)
operação (lista de parâmetros): tipo de resultado
...
Classes
1)
Nome da Classe
atributos da classe
(opcional)
Indivíduo
Indivíduo
2)
+códigoDoIndivíduo:long
+sexo: M ou F
+dataDoNascimento: data
operações da classe
(opcional)
Indivíduo
3)
+incluirIndivíduo(códigoDoIndivíduo)
+destruirIndivíduo(códigoDoIndivíduo)
Indivíduo
4)
+códigoDoIndivíduo:long
+sexo: M ou F
+dataDoNascimento: data
+incluirIndivíduo(códigoDoIndivíduo)
+destruirIndivíduo(códigoDoIndivíduo)
Nome da Classe (1/2)
• cada classe deve ter um nome que a diferencie de
outras classes
• o nome é uma seqüência de caracteres
• o nome de uma classe deve ser único no pacote
que a contém
• somente o nome da classe é conhecido como nome
simples
• nome de caminho é o nome da classe, tendo como
prefixo o nome do pacote a que essa classe
pertence
Nome da Classe (2/2)
Nomes Simples
Nomes de caminho
HelloWorld
Regras de Negócio::ValidaPedido
Cliente
TButton
Tabelas::Cliente
Quick Report::TQuickRep
3. Atributo
• menor unidade que em si possui significância
própria e interrelacionada com o conceito lógico
da classe à qual pertence (equivale aos campos de
um registro)
• uma propriedade nomeada de um tipo
• em síntese, armazena valores em células
sintaxe padrão:
Visibilidade nomeDoAtributo: TipoDeExpressão = ValorInicial {Propriedade}
Sintaxe padrão p/ atributos (1/2)
• nomeDoAtributo
– é uma seqüência de caracteres de identificação
começando tipicamente com letra minúscula
– primeira letra de cada palavra em maiúscula
– ex: nomeDoIndivíduo, limiteDeCréditoDoCliente
• TipoDeExpressão
– depende da linguagem de programação e do tipo
de implementação de um atributo
Sintaxe padrão p/ atributos (1/2)
• ValorInicial
– é uma expressão que também depende da
linguagem de programação
• Propriedade
–
–
–
–
descrição do atributo
tipo de dado
tipo de atributo
domínios de valores (valores mínimo e máximo)
Visibilidade de atributo (1/2)
+ visibilidade pública (valor default)
todos têm acesso
# visibilidade protegida
é acessível dentro da mesma classe e por classes ao
longo do pacote no qual a classe é definida
- visibilidade privada
é acessível apenas por operações declaradas dentro da
mesma classe
Visibilidade de atributo (2/2)
Nome da classe
Visibilidade pública
Visibilidade protegida
Cliente
+códigoDoCliente
#situação
-limiteDeCrédito
Visibilidade privada
Nome do atributo
4. Operação
• um serviço que é requisitado a um objeto como
parte de seu comportamento em resposta a
estímulos (procedimento algorítmico)
– operação é algo invocado por um objeto (procedimento
de chamada)
– método é um corpo de procedimento
sintaxe padrão:
Visibilidade nomeDaOperação(Parâmetro): ExpressãoDeTipoDeRetorno {Propriedade}
Sintaxe padrão p/ operações (1/3)
• nomeDaOperação
– é uma seqüência de caracteres de identificação
começando tipicamente com letra minúscula
– primeira letra de cada palavra em maiúscula
– exemplos:
• obterNomeDoIndivíduo
• obterLimiteDeCréditoDoCliente
Sintaxe padrão p/ operações (2/3)
• Parâmetro
– é uma lista de valores separados por vírgula
– nome tipo: tipo-expressão = valor-padrão
• nome é o nome de um parâmetro formal
• tipo é in, out, ou inout, com padrão in
• tipo-expressão é a especificação de um tipo de
implementação dependente da linguagem
• valor-padrão é uma expressão de valor opcional para o
parâmetro
Sintaxe padrão p/ operações (3/3)
• ExpressãoDeTipoDeRetorno
– é uma especificação dependente de linguagem de
programação sobre o tipo de implementação do
valor retornado pela operação
• Propriedade
– indica valores de propriedade que se aplicam ao
elemento
• classificação, pré-condição, pós-condição, tipo de
execução, concorrência, transformação e estereótipo
Visibilidade para operações (1/2)
• definida da mesma forma que se define para
os atributos.
+ visibilidade pública (valor default)
# visibilidade protegida
- visibilidade privada
Visibilidade de operação (2/2)
Nome da classe
Cliente
Visibilidade pública
+obterLimiteDeCrédito
Visibilidade protegida
#bloquearCliente
-cancelarCliente
Visibilidade privada
Nome da operação
Organização de atributos e operações (1/2)
• Ao representar uma classe, não é preciso exibir
todos os atributos e operações ao mesmo tempo.
Na verdade, na maioria dos casos, isso não é
possível (haverá um número muito grande de
itens) nem é adequado (somente um subconjunto
desses atributos e operações será relevante para
uma determinada visão).
• Um compartimento vazio não significará
necessariamente que não existam atributos ou
operações, mas apenas foi decidido não mostrálos.
Organização de atributos e operações (2/2)
• Para especificar explicitamente a existência de
mais atributos ou métodos do que os apresentados,
terminar cada lista com reticências (...).
• Para melhor organização de listas extensas de
atributos e operações cada grupo pode receber um
prefixo com uma categoria descritiva, utilizandose estereótipos. Por exemplo, organizando
métodos construtores:
<<constructor>>
Create()
Create(y, m, d: word)
5. Associação
• é uma relação que descreve um conjunto de
vínculos entre elementos de modelo
• uma associação representa que duas classes
possuem uma ligação (link) entre elas:
– conhecem uma a outra
– estão conectadas com
– para cada X existe um Y
Nomenclatura de associações
• quando duas classes, ou mesmo uma classe
consigo própria, apresenta interdependência
onde determinada instância de uma delas
origina ou se associa a uma ou mais
instâncias da outra
• a nomenclatura da associação depende do
número de classes envolvidas:
– unária (recursiva), binária (normal), n-ária
Associação unária
• associação reflexiva ou recursiva
• quando há um relacionamento de uma classe consigo própria
conectando-se ambos os fins da associação a ela mesma (mas
os dois fins são distintos)
• semanticamente representa a conexão entre dois objetos da
mesma classe
é casado com
Esposa
Pessoa
Marido
Associação binária (normal)
• quando há duas classes envolvidas na
associação de forma direta de uma para a
outra
Cliente
1
0..*
Pedido
Associação n-ária
• é uma associação entre três ou mais classes
Funcionário
*
Quesito
*
Avaliação
Projeto
*
Semântica da associação
Classe A
nome da associação
papel-1
papel-2
Classe B
onde:
nome da associação: usado para definir, ou qualificar,
a natureza da relação entre as classes associadas
papel-1, papel-2: mostram como uma classe é vista pela outra,
ou, o papel desempenhado pela classe no relacionamento
Papéis em associação (1/3)
•
•
•
•
Multiplicidade
Ordenação
Qualificador
Agregação/
composição
• Navegabilidade
• Especificador de
interface
• Mutabilidade
• Visibilidade
• Generalização
Papéis em associação (2/3)
Qualificador
Agregação
{ordenado}
0..*
1
Classe A
Restrição ou propriedade
Classe B
Possui
Multiplicidade
Nome do papel
Composição
Navegabilidade
Generalização
Classe C
Classe D
Papéis em associação (3/3)
• Nome da associação
– a associação possui um nome que a representa,
freqüentemente atribuído a um verbo
– podem existir dois nomes, um para cada direção do
relacionamento
– “um cliente possui conta corrente”
Cliente
Possui 
é Possuída por
Conta corrente
Multiplicidade, ou cardinalidade (1/2)
• especifica a quantidade de correspondência de um
objeto na classe [A] em objetos equivalentes na
classe [B]
–
–
–
–
1
*
0..1
m..n
exatamente um
muitos (zero ou mais)
opcional (zero ou um)
seqüência especificada (5..11)
Multiplicidade, ou cardinalidade (2/2)
Multiplicidade
Pessoas
1..*
funcionário
*
empregador
Empresa
Uma “Pessoa” é funcionário de nenhuma ou mais (*) “Empresas”.
Cada “Empresa” possui um ou vários (1..*) “Funcionários”.
Papéis em associação
• Ordenação
{ordenado}
– se a multiplicidade é maior que um, o conjunto
de elementos relacionados é ordenado ou não
ordenado (padrão)
• Qualificador
– é um atributo de associação ou uma estrutura de
atributos cujos valores particionam um conjunto
de objetos relacionados a um objeto por uma
associação (reduz a multiplicidade)
Associação qualificada
Pedido
Produto
0..1
Pedido,
item
O qualificador ‘Produto’ diz que em conexão com um
pedido pode haver um item de pedido para cada ocorrência
de produto. Conceitualmente, esse exemplo indica que não
é possível haver dois itens de pedido para um mesmo
produto. Para acessar um item de pedido em particular, é
necessário identificar o produto como argumento.
Agregação
Uma agregação é uma forma especial de associação utilizada
para mostrar que um tipo de objeto é composto, pelo menos
em parte, de outro em uma relação de todo/ parte.
Pedido
1
1..*
Tem
Todo
Pedido,
item
Parte
Agregação regular,
relacionamento por-referência
Agregação de composição
É uma forma de agregação com uma forte propriedade e vida
coincidente da parte com o todo. Na composição, ou relacionamento
por-valor, o objeto todo declara uma instância real do objeto
parte dentro do seu próprio corpo tornando o objeto parte
fisicamente nele contido.
Indivíduo,
endereço
0..1 Indivíduo,
1
Tem
Todo
complemento de
endereço
Parte
Agregação de composição,
relacionamento por-valor
Navegabilidade
Uma instância de uma classe pode navegar a instâncias de
outra classe e vice-versa.
Fonte
Alvo
Pedido
Cliente
*
{ordenado}
sentido da navegação
1
Navegabilidade na agregação
Todo
1
Navegabilidade
unidirecional em
agregação regular
0..*
Parte 1
1
0..*
Parte 2
Navegabilidade
bidirecional em
agregação de
composição
Papéis em associação (1/2)
• Especificador de Interface
– define o comportamento exigido para habilitar a
associação
– nome de um classificador com a sintaxe:
“:”nome-do-classificador
• Mutabilidade
– se os vínculos são mutáveis podem ser somados,
apagados e movidos
– outras propriedades: congelado, somarSomente
Papéis em associação (2/2)
• Visibilidade
– especificado por um indicador de visibilidade
– (“+”, “#”, “-” ou palavra-chave explícita tal como
{público})
• Generalização
– um relacionamento de taxinomia entre um elemento
mais geral e um elemento mais específico que é
completamente consistente com o primeiro elemento
somando-o informação adicional especializada
Generalização
• Indica que uma classe mais geral, a superclasse,
tem atributos, operações e associações comuns que
são compartilhados por classes mais
especializadas, as subclasses.
• Por sua vez, as subclasses herdam atributos,
operações e associações da superclasse e agregam
atributos e operações particulares ao elemento de
especialização a que se referem.
Restrições para generalização/
especificação
{completo}: N é conhecido
Generalização
A
{incompleto}: N não é
conhecido
Superclasse (classe
pai ou classe base)
{Restrição}
B
C
...
N
{disjunção}: B, C, ..., N são
mutuamente exclusivos
{sobreposição}: B, C, ... N
podem ocorrer simultaneamente
Subclasses (classes filha ou
classes derivada)
Exemplo de generalização/
especificação com restrição
Animal
{disjunção, incompleto}
Mamífero
Ave
Peixe
Herança
• É o mecanismo de reutilização de atributos e
operações definidos em classes gerais por classes
mais específicas.
• Permite organizar tipos similares de classes de
objetos em categorias hierárquicas, onde é
permitida à classe de menor nível, que é uma
especialização ou extensão de outra classe,
compartilhar atributos e operações de classes
superiores na hierarquia.
Redefinição de atributos e
operações na herança
Veículo terrestre
Operações
redefinidas pela
subclasse
Superclasse
partida()
parada()
{disjunção}
Automóvel
partida()
parada()
Caminhão
partida()
parada()
Subclasses
Herança múltipla
Veículo
{sobreposição, incompleto}
Veículo
terrestre
Veículo
aquático
Veículo
anfíbio
Agregação versus Generalização
Pedido
Pedido,
item
Agregação:
Pedido, item é
parte-de (ou
atributo-de)
Pedido
Árvore
Pinus
Generalização:
Pinus é um
tipo-de Árvore
6. Restrição
Uma restrição é um relacionamento semântico entre elementos
de modelo que especifica condições e proposições que devem
ser mantidas como verdadeiras, caso contrário o sistema descrito
pelo método é nulo.
Restrição
Grupo de
cidadãos
idosos
{pessoa.idade > 60}
0..1
0..*
Pessoa
Restrições predefinidas na UML
•
•
•
•
•
•
•
Associação
Auto
Completo
Disjunção
Global
Implícito
Incompleto
•
•
•
•
•
•
Local
Ou
Parâmetro
Radiodifusão
Sobreposição
Voto
Restrição {Ou}
Qualquer instância da classe só pode participar uma vez no
máximo de uma das associações.
0..1
Pertence
Indivíduo
0..*
Conta
Corrente
{Ou}
0..*
Pertence
0..1
Organização
Restrição em linguagem natural
{Se nível de crédito for insuficiente então
condição de pagamento deve ser à vista}
Cliente
1
0..*
Faz
Pedido
Linguagem de restrição de objeto
• A UML inclui uma especificação da linguagem
OCL- Object Constraint Language para ser
utilizada em definição de restrições dentro do
metamodelo.
• Na UML, cada restrição é escrita em uma
linguagem específica, embora também possa ser
escrita em linguagem natural, tal como um
comentário.
Sintaxe básica da OCL (1/2)
• item “.” seletor
– O seletor é o nome de um atributo no item ou o
nome de um papel de fim designado de um
vínculo anexado ao item.
• item “.” seletor “[“ valor-de-qualificador “]”
– O seletor designa uma associação qualificada
que qualifica o item. O valor-de-qualificador é
um valor para atributo de qualificador.
Sintaxe básica da OCL (2/2)
• set “->” “select” “(“ expressão-booleana “)”
– A expressão-booleana é escrita em termos de
objetos dentro do conjunto. O resultado é o
subconjunto de objetos no conjunto para o qual
a expressão booleana é verdadeira.
• Exemplos:
flight.pilot.training_hours > flight.plane.minimum_hours
company.employees -> select (title = “Manager” and self.reports ->
size > 10)
7. Classe de Associação
Uma classe de associação é um elemento de modelagem que
tem associação e propriedades de classe, podendo ser vista
tanto como uma associação que tem propriedades de classe
como uma classe que tem propriedades de associação.
Classe B
Classe A
Nome da classe de associação
atributos da classe de associação
operações da classe de associação
8. Dependência
• Dependência indica a ocorrência de um
relacionamento semântico entre dois ou mais
elementos de modelo onde uma classe cliente é
dependente de alguns serviços da classe fornecedora.
• Indica uma situação na qual uma mudança em um
elemento (elemento independente) pode afetar outro
elemento da dependência (elemento dependente).
Dependência
Classe A
Classe B
Fornecedor
Cliente
Dependências predefinidas na
UML (1/2)
• Rastro
– uma conexão histórica entre dois elementos que
representam o mesmo conceito em níveis
diferentes de significado
• Refinamento
– um histórico ou conexão de derivação entre
dois elementos com um mapeamento entre eles
Dependências predefinidas na
UML (2/2)
• Uso
– uma situação na qual um elemento requer a
presença de outro para sua implementação
correta ou funcionamento
• Ligação
– uma ligação de parâmetros de modelo para
valores reais visando criar um elemento não
parametrizado
9. Interface
É um especificador para operações externamente visíveis de uma
classe ou um componente sem especificação de sua estrutura interna.
Fornece um modo para dividir e caracterizar grupos de operações.
nome da
interface
Classe de
implementação
Classe cliente
Interface
dependência
Interface
• especifica uma parte limitada do comportamento
de uma classe real e não tem implementação
• formalmente eqüivale a uma classe abstrata sem
atributos, estados ou associações, mas com um
conjunto de operações abstratas
• designa a face externa de uma classe ou um pacote
• descreve as interações entre dois objetos
Fornecedor
armazenável
Cliente
Classe A
Classe B
executável
Fornecedor
executável
Classe C
«interface»
Executável
{abstrado}
«interface»
Armazenável
{abstrado}
executar() {abstrato}
carregar() {abstrato}
processar() {abstrato}
salvar() {abstrato}
Classe A implementa a interface
executável e armazenável
Classe C implementa a interface
executável
Classe B usa a interface
executável e armazenável de A e
executável de C
10. Normalização do modelo de
classes
• Normalização é um processo formal que examina
os atributos de classes com o intuito de minimizar
redundância em objetos específicos.
• A normalização causa a simplificação de atributos
dentro das respectivas classes colaborando para a
integridade e a estabilidade do modelo.
• O segredo das formas normais está em perceber
que alguns atributos determinam o valor de outros.
Normalização do modelo de
classes
• São mais necessárias para os modelos
relacionais.
• Primeira, Terceira e Quarta Forma Normal.
• A Segunda não ocorre em banco de objetos
– identificador único e universal ao objeto
• Uma estrutura de atributos não normalizada
é dita estar na zerésima forma normal
1ª Forma Normal
• é verificada quando em determinadas
estruturas de atributos, existem dados que se
repetem várias vezes
• objetivo = remoção de grupos repetitivos
Exemplo para normalização de
classes:
Pedido
Nú mero do pedido: ________
Código do cliente: _________
No me do cliente: _________________________________________________
Data do pedido: ___/ ___/ ____
Código do Produto
Quantidade
Descrição do Produto
.
.
.
.
.
.
.
.
.
Classe pedido preliminar
Pedido
númeroDoPedido
códigoDoCliente
nomeDoCliente
dataDoPedido
códigoDoProduto[15]
quantidadeDoProduto[15]
descriçãoDoProduto[15]
Para atingir a 1ª forma normal
• verificar se há ocorrências repetitivas de
atributos dentro da classe [A] analisada;
• destacar os atributos repetitivos e suas
respectivas operações, criando uma nova
classe [B] que absorverá esses itens;
• estabelecer a associação de agregação
regular e multiplicidade ?..* ou ?..[número
de ocorrências] entre as classes [A] e [B].
Resultado da 1ª forma normal
Pedido, item
Pedido
númeroDoPedido
códigoDoCliente
nomeDoCliente
dataDoPedido
1
1..*
códigoDoProduto
quantidadeDoProduto
descriçãoDoProduto
3ª Forma Normal
• objetivo = remoção de dependências
transitivas
• dependência transitiva é a dependência
indireta que um determinado atributo tem
com o identificador do objeto através de um
outro atributo explícito ou implícito do qual
é diretamente dependente
Para atingir a 3ª forma normal
• verificar se a classe [C] analisada possui
atributos que são dependentes de outros
atributos nela contidos;
• destacar os atributos com dependência
transitiva e suas respectivas operações,
incorporando-os na classe [D];
• eliminar os atributos obtidos por cálculo a
partir de outros atributos da classe [C].
Resultado da 3ª forma normal
Pedido, item
Pedido
númeroDoPedido
dataDoPedido
*
1
Cliente
códigoDoCliente
nomeDoCliente
1
1..*
quantidadeDoProduto
*
1
Produto
códigoDoProduto
descriçãoDoProduto
4ª Forma Normal
Tendo como pré-requisito a terceira forma normal, a quarta forma
normal busca remover dependências multivaloradas.
Curso
*
Professor
*
CPL
Livro
texto
*
classe de
associação
Resultado da 4ª forma normal
Professor
*
*
Professor
Curso
Curso
*
*
Livro texto
Curso
Livro
texto
classe de
associação
Referência
• Modelagem de Objetos através da UML the Unified Modeling Language
–
–
–
–
José Davi Furlan
MAKRON Books, 1998
Capítulo 2- Modelando com a UML, item 3.
pg. 91..167
Download

Nome da Classe