Modelação e Projecto
Orientados por Objectos
Gabriel David
[email protected]
Faculdade de Engenharia da Universidade do Porto
Modelação OO
0
Modelação e projecto orientados por objectos
OMT - Object Modeling Technique (Rumbaugh)
UML - Unified Modeling Language (Rumbaugh, Jacobson, Booch)
Sumário
• Conceitos de modelação
• Metodologia de projecto
• Implementação
• introdução
• modelação de objectos
• modelação dinâmica
• modelação funcional
Modelação OO
1
Modelação
Modelo - abstracção de alguma coisa com o objectivo
de a compreender antes de a construir
 Exemplos: maquetes de arquitectura, modelos de aviação e de engenharia hidráulica,
esboços de pintura, planos de livros
 Utilidade
•
testar um artefacto antes de o construir, para detectar falhas de forma barata
-
modelos físicos (reproduzir à escala os fenómenos essenciais do artefacto)
-
simulação computacional (cada vez mais barata do que modelos físicos, mas
exige uma descrição das leis que governam o artefacto)
•
comunicar com os clientes, para validar a especificação
•
visualizar, para assentar as ideias gerais e começar a pormenorizar cada parte
•
reduzir a complexidade, para tornar a realidade manuseável
Modelação OO
2
Abstracção
Abstracção - eliminação dos aspectos
irrelevantes para o fim em causa
capacidade fundamental que
permite lidar com a complexidade;
cérebro humano só manuseia uma
quantidade limitada de informação
simultaneamente
[Ex: homem da visão fotográfica]
•
modelos são adequados ou inadequados relativamente ao fim pretendido
•
não há modelos correctos em absoluto
•
sistemas complexos: pode ser útil construir modelos segundo várias perspectivas
complementares [maquete de arquitectura e projectos de especialidade de uma casa]
•
captar os aspectos cruciais sem introduzir detalhes estranhos ao problema implica usar
uma linguagem suficientemente expressiva [Português fundamental; assembly]
Modelação OO
3
Modelos orientados por objectos
objecto = estrutura de dados + comportamento
 raciocinar sobre problemas usando modelos organizados em torno de conceitos
do mundo real
 objectos fornecem nível de abstracção adequado
 contraste com a programação estruturada: dados e comportamento bastante
desligados
 modelos OO úteis para:
• compreender problemas
• comunicar com peritos do domínio da aplicação
• modelar organizações
• preparar documentação
• projectar programas e bases de dados
Modelação OO
4
Características dos objectos
 Identidade - dados constituídos por entidades discretas e distinguíveis: os objectos
(concretos ou conceptuais)
• dois objectos são distintos, mesmo que todos os valores dos seus atributos sejam
iguais, se as suas identidades forem diferentes
referências são uniformes e independentes do conteúdo  admissíveis colecções de
objectos de naturezas diferentes
 Classificação - objectos com a mesma estrutura de dados (atributos) e o mesmo
comportamento (operações) são agrupados numa classe
• classe é uma abstracção que descreve as propriedades importantes para uma aplicação
(em sentido geral) e ignora o resto
• a escolha das classes é arbitrária e depende da aplicação
• cada objecto é uma instância de uma classe
- partilha com as outras instâncias dessa classe os nomes dos atributos e as
operações
- tem os seus próprios valores nos atributos
- sabe de que classe é
•
Modelação OO
5
Classificação
Classe Polígono
Atributos
Objectos polígonos
vértices
espessura das arestas
côr do interior
Operações
desenha
apaga
abstracção
move
instâncias #1 ({v1 v2 v3 v4} 1 branco)
#2 ({v5 v6 v7} 2 branco)
#3 ({v8 v9 v10 v11} 1 preto)
Modelação OO
6
Características dos objectos (cont.)
 Polimorfismo - a mesma operação comporta-se de forma diferente em diferentes classes
[move terá efeitos diferentes nas classes Polígono e PeçaXadrez)
• uma implementação específica de uma operação por uma classe chama-se método
• pode haver vários métodos associados à mesma operação, em classes diferentes
• operação é uma abstracção de comportamento análogo em objectos de tipos diferentes
•
implementar novas classes não exige o conhecimento dos métodos das outras classes:
basta definir localmente os novos comportamentos, adicionando métodos para as
operações aplicáveis
 Herança - partilha de atributos e operações entre classes baseada numa relação hierárquica
• ao classificar os objectos, se uma classe A tiver basicamente os mesmos atributos e
operações que uma classe B, acrescidos de outros atributos ou operações, não se repete
a definição: diz-se que A é uma subclasse de B (B é superclasse de A)  factorização
de propriedades comuns
• cada subclasse herda as propriedades da superclasse e acrescenta as suas próprias
[JanelaDeslizante é uma subclasse de Janela, de quem herda a região do écran,
acrescentando uma barra de deslocamento e um offset]  reutilização
•
além de acrescentar operações, uma subclasse pode redefinir operações da superclasse,
indicando um novo método  refinamento
Modelação OO
7
Desenvolvimento OO
 nova forma de pensar sobre software, baseada em abstracções do mundo real, e não uma
técnica de programação
 desenvolvimento = análise, projecto e implementação; as outras fases do ciclo de vida
do software (documentação , integração, manutenção e aperfeiçoamento) não serão
referidas, embora beneficiem da clareza do projecto conseguida
 essência do desenvolvimento OO: identificação e organização dos conceitos do domínio
da aplicação e não da sua representação final numa linguagem de programação
 o esforço de atacar os verdadeiros problemas conceptuais em vez das questões de
implementação é compensador
•
erros de projecto descobertos só na fase de implementação têm um custo muito
superior aos detectados em fases anteriores
•
concentrar na implementação demasiado cedo limita as opções no projecto
•
só depois de ter os conceitos inerentes à aplicação identificados, compreendidos e
organizados é possível definir adequadamente os detalhes das estruturas de dados e
das funções
•
desenvolvimento independente da linguagem até às fases finais (OO ou não)
Modelação OO
8
Metodologia 1
ANÁLISE
PROJECTO
DO SISTEMA
PROJECTO
DOS OBJECTOS
IMPLEMENTAÇÃO
•
ponto de partida: formulação de problema pelo cliente
•
analista (+ cliente) constrói um modelo da situação do
mundo real, mostrando as propriedades importantes
•
modelo da análise: abstracção concisa e precisa do que
o sistema deve fazer e não de como fazê-lo
•
objectos do modelo são conceitos do domínio da
aplicação
•
o perito do domínio deve ser capaz de o compreender
e criticar
•
modelo não deve conter conceitos da implementação
computacional
•
[a classe Janela deve ser descrita em termos dos
atributos e operações visíveis pelo utilizador]
Modelação OO
9
Metodologia 2
ANÁLISE
PROJECTO
DO SISTEMA
PROJECTO
DOS OBJECTOS
•
contém decisões de alto nível sobre a arquitectura global
•
o sistema em causa é organizado em subsistemas,
baseado no modelo da análise e na arquitectura
•
o projectista de sistema decide quais as características de
desempenho a optimizar e a estratégia de o conseguir
•
[as modificações no écran deverão ser rápidas e suaves
 escolha de protocolo de comunicações e esquema de
cache]
IMPLEMENTAÇÃO
Modelação OO
10
Metodologia 3
ANÁLISE
•
o projectista de objectos elabora um modelo de projecto
baseado no modelo da análise, mas com detalhes da
solução, de acordo com a estratégia do projecto de
sistema
PROJECTO
DO SISTEMA
•
foco: estruturas de dados e algoritmos da implementação
de cada classe
classes da análise mantém significado, mas são
aumentadas com objectos computacionais
tanto os objectos do domínio da aplicação como os
objectos computacionais são descritos usando os mesmos
conceitos e notação OO, embora estejam em diferentes
planos conceptuais
[operações da classe Janela especificadas em termos do
hardware e do sistema operativo subjacentes]
•
PROJECTO
DOS OBJECTOS
•
IMPLEMENTAÇÃO
•
Modelação OO
11
Metodologia 4
ANÁLISE
•
•
PROJECTO
DO SISTEMA
PROJECTO
DOS OBJECTOS
IMPLEMENTAÇÃO
•
•
•
•
classes e associações desenvolvidas durante o projecto dos
objectos são traduzidas para uma linguagem particular, uma
BD ou uma implementação em hardware
fase essencialmente automatizável (decisões difíceis já
tomadas)
a linguagem alvo influencia as decisões do projecto, mas
este não deve depender de pormenores da linguagem
implementação deve garantir fácil referenciação ao projecto
para manter flexibilidade e extensibilidade
a linguagem não tem que ser OO, embora estas facilitem a
correspondência com o projecto
[a classe Janela é codificada numa linguagem, com
chamadas ao sistema gráfico da máquina]
Modelação OO
12
Metodologia: conclusão
 conceitos OO (identidade, classificação, polimorfismo, herança) aplicados ao longo do
ciclo de desenvolvimento de software
 as classes de uma fase são levadas para as fases subsequentes, sem alteração da notação,
embora vão sendo progressivamente detalhadas
 algumas classes são introduzidas só no projecto ou na implementação: árvores, tabelas de
dispersão ou listas ligadas não são objectos do domínio da aplicação e portanto não
aparecem na análise; são introduzidos no projecto, para suportar algoritmos usados na
implementação computacional de objectos do mundo real
 na implementação codificam-se tanto as construções do domínio da aplicação como do
domínio da solução
 a vista da análise e a vista da implementação são ambas representações adequadas do
sistema, só que a níveis de abstracção diferentes e com propósitos diversos
Modelação OO
13
Técnica de modelação de objectos
 é útil olhar para o sistema segundo três perspectivas complementares, todas necessárias
para uma profunda compreensão do sistema
•
modelo de objectos - aspecto estático, estrutural, dos dados
•
modelo dinâmico - aspecto temporal, comportamental, de controlo
•
modelo funcional - aspecto transformacional, de função
 um procedimento típico incorpora os três aspectos: usa estruturas de dados (modelo de
objectos), sequencia operações no tempo (modelo dinâmico) e transforma valores (modelo
funcional)
 os três modelos
•
representam vistas ortogonais representadas e manipuladas com notação uniforme
•
são examináveis e compreensíveis de forma relativamente autónoma
•
têm interligações limitadas e explícitas (se o projecto for bom)
•
evoluem ao longo das várias fases do desenvolvimento
Modelação OO
14
Modelos
análise
projecto sistema
objectos
implementação
fases do
desenvolvimento
modelo de
objectos
modelo
dinâmico
modelo
funcional
vistas do
sistema
Modelação OO
15
Modelo de objectos
 descreve a estrutura dos objectos num sistema
•
identidade
•
associações com outros objectos
•
atributos
•
operações
 é o modelo mais fundamental pois é necessário descrever o que está a ser transformado
antes de descrever quando e como isso acontece
 objectos são as unidades de percepção do mundo, as moléculas dos modelos
 objectivo: capturar os conceitos do mundo real que são importantes para a aplicação
•
no modelo da análise não devem existir objectos computacionais, a menos que o
problema seja computacional [um sistema operativo]
•
o modelo do projecto descreve a solução do problema e já aparecem objectos
computacionais
 notação gráfica é diagrama de objectos: grafo cujos nós são classes, organizadas em
hierarquias, e cujos arcos são associações entre classes; as classes definem os atributos
presentes em cada instância e indicam as operações associadas
Modelação OO
16
Modelo dinâmico
 descreve os aspectos do sistema relacionados com a evolução temporal e a sequenciação
das operações: eventos que marcam alterações, sequências de eventos, estados que dão o
contexto aos eventos
 captura o aspecto do controlo, das sequências de operações, sem atender ao que fazem,
sobre o que trabalham, ou como estão implementadas
 notação gráfica é diagrama de estados (um por classe): grafo cujos nós são estados e
cujos arcos são transições entre estados causadas por eventos
•
acções nos diagramas de estados correspondem a funções no modelo funcional
•
os eventos são operações no modelo de objectos
Modelação OO
17
Modelo funcional
 descreve as transformações de valores: funções, correspondências, restrições,
dependências funcionais; captura o que o sistema faz, independentemente de como e
quando
 exemplos de modelos funcionais: árvores de expressões e folhas de cálculo
 representado por diagramas de fluxo de dados (DFD): são grafos cujos nós são
processos e cujos arcos são fluxos de dados (representam computações)
•
funções são invocadas por acções no modelo dinâmico e
•
aparecem como operações no modelo de objectos
Modelação OO
18
Comparação
 problemas diferentes põem ênfase diferente nos vários modelos, mas os três são
necessários em qualquer grande sistema
 quando os modelos se revelarem insuficientes, usar linguagem natural
 metodologias orientadas por funções (Yourdon, DeMarco): ênfase na especificação e
decomposição da funcionalidade do sistema
•
parece a implementação mais directa de uma solução mas fica muito dependente
dos requisitos, os quais tendem a evoluir mais rapidamente do que as organizações
•
metodologia OO identifica primeiro os objectos do domínio de aplicação e depois
adapta os procedimentos em torno deles; a estrutura fica mais imune a alterações
nos requisitos, porque parte do ambiente do problema, em vez de partir de um
resultado específico pretendido
Modelação OO
19
Temas OO
 abstracção
•
focar os aspectos essenciais, inerentes à entidade, ignorando os acidentais
•
concentrar no que o objecto é e faz, antes de em como implementar
•
muitas linguagens modernas suportam abstracção de dados, mas a herança e o
polimorfismo dão-lhe um poder adicional
•
uso adequado da abstracção (estilo de projecto independente da linguagem) permite
que o mesmo modelo seja usado para a análise, projecto de alto-nível, estrutura do
programa, estrutura da base de dados e documentação
 encapsulamento
•
esconder a informação: separar os aspectos externos de um objecto, acessíveis aos
outros objectos, dos detalhes de implementação internos, que ficam escondidos e
permitem modificações locais
•
a capacidade de combinar dados e comportamento na mesma entidade reforça o
conceito de encapsulamento
Modelação OO
20
Mais temas OO
 dados + comportamento
• o chamador de uma operação não precisa de considerar as implementações: isso é
responsabilidade do objecto receptor; o polimorfismo permite que uma única
operação desenha seja capaz de desenhar um gráfico complexo, desde que cada
objecto a desenhar implemente adequadamente essa operação; acrescentar classes
não obriga a mexer no código das pre-existentes
 partilha
• herança de dados e comportamento reduz redundância nas subclasses
• reutilização de componentes em bibliotecas é suportado mas exige planeamento e
um esforço adicional de generalização dos objectos definidos (elemento responsável
pela reutilização nas equipas de desenvolvimento)
 estrutura de objectos
• acento na definição do que o objecto é, mais do que em como é usado
• a natureza dos objectos tende a ser mais estável do que os usos que se fazem deles
• maior ênfase na estrutura de dados do que na estrutura de procedimentos
 sinergia
• várias das características das linguagens OO podem ser encontradas isoladamente
noutras linguagens; é o conjunto de todas elas que fazem da programação por
objectos um novo paradigma
Modelação OO
21
Modelação de objectos
Modelo de objectos - captura a estrutura estática do sistema
• objectos
• associações entre objectos
• atributos
• operações
 o mais importante dos três modelos
 sistema construído em torno dos objectos e não em torno da funcionalidade
 modelo OO corresponde de perto ao mundo real  robustez
Objecto - conceito, abstracção ou coisa com fronteira
bem definida e com significado para o problema
•
promove a compreensão do mundo real
•
fornece uma base prática para a implementação
identidade
 decomposição de um problema em objectos depende do discernimento do
analista e da natureza do problema
Modelação OO
22
Classes
Classe - descreve um grupo de objectos com propriedades semelhantes
(atributos), comportamento comum (operações), idêntico
relacionamento com outros objectos e a mesma semântica
[classes: Pessoa, Companhia, Animal, Processo, Janela]
 objectos numa classe partilham o mesmo intento semântico, para lá de terem o mesmo
padrão de atributos e operações
[tanto as empresas como as pessoas podem ser caracterizadas por NumFiscal,
Nome, Morada, Telefone; é contudo razoável colocá-las em classes diferentes,
atendendo à sua semântica; a não ser que, por exemplo do ponto de vista de
um banco, sejam todos clientes]
 projectista decide
 classe de um objecto - propriedade implícita do objecto
 Se os objectos são o que importa, porquê as classes?
• abstracção
• factorização
• reutilização [move em Polígonos (mas suporta diferenciação: área)]
Modelação OO
23
Diagramas de objectos
 diagramas de objectos úteis para modelação abstracta e para projectar programas
 notação gráfica concisa, fácil de entender e que na prática funciona
diagrama
de objectos
diagrama
de classes
• esquema, padrão ou template
• descreve muitas instâncias, o caso geral
diagrama
de instâncias
• descreve o interrelacionamento
de um conjunto particular de objectos
• útil para exemplos e casos de teste (cenários)
 classes e instâncias podem aparecer no mesmo diagrama de objectos - normalmente não
interessa misturar (excepto para meta-dados)
Pessoa
classe
nome da classe: negrito, maiúsculas
(Pessoa)
João Silva
(Pessoa)
Maria Santos
(Pessoa)
objectos
nome da classe: negrito, maiúsculas, entre parêntesis
nomes de objectos: fonte normal
Modelação OO
24
Atributos
Atributo - valor mantido pelos objectos de uma classe
[nome, idade e peso, atributos das instâncias de Pessoa;
côr, peso e ano, atributos das instâncias de Carro]
•
cada atributo tem um valor em cada instância
•
cada nome de atributo é único, na classe [ver peso]
•
um atributo deve ser um valor puro e não um objecto
•
valores puros não têm identidade: todos os 17 são
indistinguíveis
•
não confundir identificadores internos com atributos
[o país Canadá é um objecto cujo atributo nome tem o
valor "Canadá" (cadeia); a capital do Canadá é um
objecto cidade e não deve ser modelada como um
atributo, mas antes como uma associação entre um
objecto país e um objecto cidade, cujo nome é a cadeia
"Otawa"]
Pessoa
nome: string
nasce: integer
peso: float =75
classe
(Pessoa)
João Silva
24
72
(Pessoa)
Maria Santos
52
60
objectos
•
atributos são listados na segunda
parte da caixa de classe
•
a seguir ao nome podem indicarse o tipo e o valor por omissão
Modelação OO
25
Operações e métodos
Operação - função ou transformação que pode ser
aplicada a objectos ou por objectos duma classe
[operações na classe Janela: abrir, fechar, esconder, desenhar]
 todos os objectos de uma classe partilham as mesmas operações
 a efectivação de uma operação tem sempre um objecto alvo como argumento implícito
 comportamento da operação depende da classe do alvo (um objecto sabe qual a sua classe)
 a mesma operação abstracta corresponde a vários métodos diferentes (polimorfismo)
[a operação desenhar numa instância de Janela pode ser aplicar a todos os diferentes
componentes dessa janela a operação desenhar, a qual num caso desenhará um botão,
noutro um painel, etc]
 operações podem ter argumentos explícitos, mas isso não afecta a escolha do método
 todos os métodos para uma operação devem ter a mesma assinatura (número e tipo dos
argumentos e tipo do resultado)
 uma operação deve ser uma abstracção com uma semântica consistente: não usar o mesmo
nome para conceitos distintos [inverter uma matriz e inverter uma figura plana]
Modelação OO
26
Tipos de operações
 operações no terço inferior da caixa da classe
°
nome, lista de argumentos e tipo do resultado
°
ausência de tipo do resultado  não há retorno
 categorias de operações
°
operações com efeitos laterais [muda_peso]
°
perguntas - cálculo de um valor sem modificar os
objectos
Pessoa
nome: string
nasc: integer
peso: float =75
°
atributos derivados - perguntas sem argumentos
explícitos [idade]
idade (): integer
muda_peso (novo: integer)
 um atributo derivado só depende do objecto e pode ser
visto como uma propriedade do objecto
°
escolha dos atributos base e dos atributos derivados
é arbitrária
°
evitar sobre-especificar o estado do objecto
classe
Modelação OO
27
Notação para classes
Nome-classe
nome-atributo-1 : tipo-1 = valor-omissão-1
nome-atributo-2 : tipo-2 = valor-omissão-2
°°°
nome-operação-1 (lista-argumentos-1) : tipo-resultado-1
nome-operação-2 (lista-argumentos-2) : tipo-resultado-2
°°°
 dependendo do detalhe pretendido, os atributos, as operações e as listas de
argumentos podem ser omitidos
Modelação OO
28
Associações
Ligação - é uma conexão física ou conceptual entre duas
instâncias de objectos
?
João Silva Trabalha-para Magol
•
formal: ligação é um tuplo, uma sequência de instâncias de objectos,
(João Silva, Magol)
•
ligação é uma instância de associação
Associação - descreve um conjunto de ligações com
estrutura e semântica comuns
?
Trabalha-para
•
todas as ligações de uma associação relacionam objectos das mesmas classes
•
associações correspondem muitas vezes a verbos na especificação
•
associações descrevem conjuntos de ligações potenciais
classes descrevem conjuntos de objectos potenciais
Modelação OO
29
Características das associações
 bidireccionais - podem ser conceptualmente atravessadas em qualquer direcção
•
nome pode ser direccional [Trabalha-para]; define sentido directo, sentido inverso
•
nome duplo [Emprega] refere-se à mesma associação; tem o mesmo significado
 implementação
•
apontador - atributo num objecto com referência explícita para outro objecto
class Pessoa
class Empresa
char *nome;
char *nome;
int idade;
char *morada;
Empresa *emprego;
Setof(Pessoa) *empregados;
•
implementação com apontadores, sim; modelo com apontadores, não
•
uma ligação não é parte de um objecto; depende de ambos simultaneamente  um
só facto no modelo
- apontadores directo e inverso são dependentes (consistência)
- implementação pode ter apontadores só num sentido, se for o único usado
•
todos os relacionamentos entre classes devem ser modelados como associações,
mesmo em projecto de programas (nas BD está mais aceite)
Modelação OO
30
Aridade
País
nome: string
Tem-capital
(País)
Canadá
Tem-capital
(País)
França
Tem-capital
(País)
Senegal
Tem-capital
• associações binária e ternária
• ordem superior rara
• nome da associação optativo
Cidade

nome: string
• ligação ternária é facto
atómico e indivisível
diagrama
de classes
Projecto
(Cidade)
Ottawa
Linguagem

Pessoa
(Cidade)
Paris
(Projecto)
contabilidade
(Cidade)
Dakar

diagrama
de instâncias

(Projecto)
CAD
(Linguagem)
COBOL
(Pessoa)
Maria Santos
(Linguagem)
C
Modelação OO
31
Multiplicidade
Recta
nome
Cruza
2+
diagrama
de classes
Ponto
nome
L3
P1
P2
L5
L1
( Recta )
L1
( Recta )
L2
(Ponto)
P1
( Recta )
L3
(Ponto)
P2
L4
diagrama
amostra
de instâncias
de dados
• Tem-capital é uma associação um-para-um,
i.e., "cada País têm uma só Capital" e
"cada Capital administra um só País"
( Recta )
L4
( Recta )
L5
L2
0 ou mais (muitos)
0 ou 1 (optativo)
exactamente 1
• Cruza é uma associação muitos-paramuitos (2+ quer dizer que cada Ponto é
o cruzamento de, pelo menos, duas
rectas)
• multiplicidade metida só numa segunda
fase; expõe pressupostos escondidos
no modelo; pode ser qualquer intervalo
Modelação OO
32
Importância
 multiplicidade
•
subestimar restringe a flexibilidade da aplicação
•
sobreestimar dá sobrecarga no uso e perda de informação semântica
 ordem superior
•
notação de bola cheia/vazia ambígua
 associações importantes para modelos LP como para BD ou problemas do mundo real
•
não pertencem a uma única classe
•
portanto, não violam o encapsulamento da informação em classes
•
incapacidade de lidar com associações em pé de igualdade com as classes leva a
modelos com pressupostos escondidos
 técnica de implementação (com apontadores ou não) deve ser adiada até às últimas fases
de projecto
Modelação OO
33
Atributos das ligações
Atributo - propriedade dos objectos numa classe.
Atributo de ligação - propriedade das ligações numa associação.
Ficheiro
Acessível por
id
Utilizador
nome
permissão
/etc/termcap
/etc/termcap
/usr/silva/.login
(read)
(read-write)
(read-write)
João Silva
Maria Santos
João Silva
•
cada atributo de ligação tem um valor em cada ligação
•
notação realça a semelhança entre os atributos dos objectos e das ligações
•
numa associação muitos-para-muitos não faz sentido pôr o atributo de ligação em
nenhum dos objectos
Modelação OO
34
Associações muitos-para-um
chefe
Pessoa
nome
bi
morada
Chefia
trabalhador
Trabalha para
?
Empresa
nome
morada
salário
cargo
avaliação
•
a associação Chefia indica , para cada trabalhador, o seu chefe directo
•
necessita de papéis nos ramos pois é recursiva
•
cada chefe pode ter 0-ou-mais trabalhadores chefiados; cada empregado pode ter 0-ou-1
chefes (contempla o director-geral, que não tem chefe)
•
nas associações muitos-para-um (ou um-para-um) é possível deslocar os atributos de
ligação para o lado oposto a um, sem perda de informação; mas semanticamente tais
atributos são de ligação (o salário e o cargo são da Pessoa na Empresa) e aí devem
permanecer por clareza e para permitir alterar a multiplicidade
Modelação OO
35
Associação como classe
Utilizador
Autorizado em
Workstation
Autorização
prioridade
privilégios
sessão
directório inicial
Directório
•
generalização dos atributos de ligação: acrescentar operações de ligação e dar um nome
 modela-se a associação como uma classe
•
as ligações ficam instâncias da classe
•
útil quando se pretende que a associação participe noutras associações, ou que seja sujeita
a operações
Modelação OO
36
Papéis
Papel - um extremo de uma associação
Utilizador
•
•
•
•
•
•
•
dono
utilizador
autorizado
Directório
continente
conteúdo
pode existir um nome do papel, que será único; se existirem nomes em todos os papéis,
o nome da associação é dispensável
nas associações binárias, o papel identifica o conjunto de objectos associado com um
objecto no outro extremo [para um Directório quais os utilizadores autorizados]
funciona como um atributo derivado do objecto no outro extremo; permite atravessar a
associação sem a mencionar [para um Directório qual o dono]; substantivo na especificação
relativamente a uma classe, os nomes dos papéis nos extremos afastados das respectivas
associações devem ser únicos e diferentes dos atributos da classe
nomes dos papéis necessários
- se a associação envolver mais do que uma vez a mesma classe
- para distinguir duas associações entre o mesmo par de classes
casos simples: basta o nome da classe destino
associações ternárias ou superiores: papéis não funcionam como atributos derivados
Modelação OO
37
Ordenação
Directório
{ordered}
Ficheiro
 admita-se que cada ficheiro só pode estar num directório
•
a indicação {ordered} é um caso especial de restrição
•
aplicada no lado muitos
•
faz com que os objectos fiquem ordenados
Modelação OO
38
Qualificação
Directório
nome ficheiro
Ficheiro
 associação qualificada - caso particular de ternária, relaciona duas classes e um
qualificador
 qualificador - atributo especial que reduz a multiplicidade; distingue entre os objectos
do lado muitos

identifica um ficheiro: reduz a um-para-um, neste caso (pode
fazer só uma partição no resultado, sem reduzir para um)
Directório + nome ficheiro
 vantagem: melhora o rigor semântico e aumenta a visibilidade dos caminhos de
navegação
Modelação OO
39
Agregação
 representa o relacionamento parte-todo ou é-parte-de entre componentes e montagem
 forma de associação com semântica suplementar
•
transitiva (se A é parte de B e B é parte de C, A é parte de C)
•
anti-simétrica (se A é parte de B, então B não é parte de A)
•
algumas propriedades da montagem propagam-se aos componentes, possivelmente
modificadas
- se não houver propagação, a agregação é inútil [a velocidade e a posição de um
puxador são obtidas da porta de que aquele faz parte]
o losango indica o lado da montagem
Documento
1+
Parágrafos
1+
Frases
Modelação OO
40
Agregação multinível
Computador
1+
Monitor
Caixa sistema
Chassis
Processador
Rato
Memória
Teclado
Ventoínha
 um Computador é constituído por um ou mais Monitores, uma Caixa de Sistema, um Rato
optativo e um Teclado. A Caixa de Sistema por sua vez é constituída por um Chassis, um
Processador, muitos chips de Memória e uma Ventoínha optativa.
 agregação: uma classe de montagem + uma classe de componentes; vários componentes
de tipos diferentes correspondem a várias agregações, que se podem desenhar juntas
numa hierarquia
 os componentes podem ou não ter existência autónoma
Modelação OO
41
Generalização e herança
Generalização - é o relacionamento entre uma classe (superclasse)
e uma ou mais versões refinadas de si própria (subclasses).
Herança - é o mecanismo pelo qual as propriedades (atributos e
operações) da superclasse são partilhadas pelas subclasses.
 is-a : sinónimo de generalização, porque qualquer instância de uma subclasse é também
instância da superclasse
 transitividade: ascendente e descendente; o estado de uma instância contém valores para
todos os atributos de todas as classes ascendentes e são-lhe aplicáveis todas as operações
dos ascendentes
 especialização significa que as subclasses podem adicionar os seus próprios atributos e
operações (é a generalização vista das subclasses)
 discriminador - atributo enumerado (tantos valores quantas as subclasses) que indica que
propriedade de um objecto é abstraída por uma generalização particular (optativo)
Modelação OO
42
Hierarquia
Figura
côr
centro
espessura
caneta
mover
seleccionar
rodar
mostrar
dimensionalidade
Dimensão 0
Dimensão 1
orientação
escalar
Ponto
mostrar
Linha
Arco
extremos
raio
ângulo
mostrar
mostrar
Spline
pontos
mostrar
Dimensão 2
orientação
enchimento
escalar
encher
Polígono
Círculo
lados
vértices
mostrar
diâmetro
mostrar
rodar
Modelação OO
43
Uso da generalização
 evitar hierarquias muito profundas (até 3 ou 4 níveis)
 generalização:
•
modelação conceptual - estrutura as classes, evidencia o que é comum e o que é
distinto e reduz o número de aspectos diferentes
•
implementação - promove a reutilização de código
 revogação (overriding) - forma de criar excepções ao mecanismo de herança através da
redefinição de uma propriedade de uma superclasse; a definição mais específica impõese
 especificar comportamento que depende da subclasse [mostrar]
•
restringir uma especificação
•
melhorar a eficiência [rodar em Círculo]
 a redefinição deve manter a assinatura
 uma subclasse é um caso especial da superclasse - má prática ir buscar uma classe
parecida para modificar, ignorando certas partes, se a resultante não for efectivamente
subclasse
Modelação OO
44
Agrupamento
 Módulo - vista que combina classes, associações e generalizações, segundo uma
determinada perspectiva
•
construção lógica, mas de fronteiras arbitrárias
•
nível de empacotamento entre as classes e o modelo completo
•
indicar o nome do módulo ao cimo de cada folha
•
habitualmente a densidade de ligações inter-módulos é inferior à densidade intramódulo
 Folha - partição de um módulo correspondente a uma folha física
•
não é uma construção lógica, mas apenas notacional
•
no máximo um módulo por folha; pode haver módulos que ocupem várias folhas
•
associações e generalizações aparecem só numa folha; classes podem aparecer em
várias (indicar, junto às classes partilhadas, as referências das folhas em que
ocorrem)
Modelação OO
45
Expressões aritméticas
1º op
2º op
Termo
(X+ Y/2)/(X/3 + Y)
Expressão
operador bin
Variável
Constante
nome
valor
(Expressão)
/
2º op
1º op
1º op
1º op
(Expressão)
+
(Variável)
X
(Constante)
3
2º op
1º op
(Expressão)
/
2º op
(Expressão)
+
2º op
(Expressão)
/
1º op
(Variável)
Y
2º op
(Constante)
2
Modelação OO
46
Agregação versus associação
Agregação - forma de associação com semântica mais forte em que
um objecto agregado é feito de componentes (part-of). O
agregado é semanticamente uma extensão de objecto, tratado
como uma unidade em muitas operações.
 dois objectos habitualmente vistos como independentes, embora frequentemente
ligados  associação
 testes para decidir pela agregação
• usa-se a expressão parte de?
• algumas operações no todo são automaticamente aplicadas às partes?
• alguns valores de atributos são propagados às partes?
•
há uma assimetria na associação, em que uma classe é subordinada de outra?
 opção é matéria de discernimento do analista
Empresa
Pessoa
Divisão
•
Departamento
uma empresa não é um agregado de pessoas,
pois ambos são objectos independentes
Modelação OO
47
Agregação versus generalização
 agregação relaciona objectos, distintos entre si, em que um é parte do outro (part-of)
•
árvore de agregação é constituída por objectos que são parte de um objecto
composto
 generalização relaciona classes e é uma forma de estruturar a descrição de um único
objecto, que é simultaneamente instância da superclasse e da subclasse (is-a)
•
árvore de generalização é constituída por classes que descrevem um objecto
Lâmpada
Fluorescente
Balastro
Encaixe
Incandescente
Arrancador
Base
Tampa
Interruptor
Fios
Suporte
Modelação OO
48
Tipos de agregação
 agregado fixo - estrutura fixa; número e tipo de subpartes prédefinidos [lâmpada]
 agregado variável - número de níveis finito; número de componentes variável [empresa]
 agregado recursivo - contém directa ou indirectamente uma instância do mesmo tipo do
agregado; número de níveis potencialmente infinito [expressão]
 superclasse e duas subclasses
- uma para os nós intermédios e que é uma agregação de instâncias da superclasse
- outra para os nós terminais do agregado
 propagação - aplicação automática de uma operação a uma rede de objectos, quando a
operação é aplicada a um objecto inicial (através de agregações ou associações; dirigida)
 aplicação profunda - aplicar a toda a rede
• aplicação superficial - aplicar ao objecto inicial, mas não aos componentes
•
propagação - aplicação controlada, a vários níveis, entre aqueles casos extremos
[copiar um documento: copia-se a ligação ao dono, mas não se copia o dono]
Pessoa
dono
copiar
copiar
Documento
Parágrafo
Carácter
copiar
copiar
copiar
Modelação OO
49
Classes abstractas
Classe abstracta - classe sem instâncias directas, mas cujas
classes descendentes possuem instâncias directas.
Classe concreta - classe com instâncias directas.
 uma classe concreta pode ter subclasses abstractas; estas têm que ter subclasses concretas
•
só classes concretas podem ser folhas nas árvores de generalização
Trabalhador
?
Trabalhador pode
ser uma classe
concreta se existirem
trabalhadores indiferenciados
•
as reticências indicam que há
Mineiro
Padeiro
•••
subclasses não mencionadas
 classes abstractas organizam propriedades comuns a várias classes
•
criar superclasse abstracta para encapsular classes que participam na mesma
associação [requisição de livros e de revistas]
•
algumas classes abstractas aparecem logo no domínio da aplicação; outras são
introduzidas mais tarde para promover a reutilização
Modelação OO
50
Operações abstractas
Empregado
rendimento acumulado
calcular pagamento {abstracta}
Empregado
horário
taxa horária
taxa extraordinária




Assalariado
Permanente
taxa semanal
taxa mensal
calcular pagamento
calcular pagamento
calcular pagamento
Empregado é classe abstracta - cada empregado tem que estar numa das três subclasses
Operação abstracta - protocolo definido mas sem se fornecer um método (só faz sentido
numa classe abstracta; nas concretas, todos os métodos estão definidos)
Notação : comentário entre chavetas
classe original de uma propriedade - classe mais geral que lhe define o protocolo; as
descendentes podem restringir tipos e revogar métodos, mas não expandir o protocolo
Modelação OO
51
Formas de generalização
 instância de uma classe é instância de todas as suas superclasses: recebe todos os seus
atributos e aplicam-se-lhe as suas operações (pode reimplementar métodos, mas sem
alterar o protocolo externo)
 extensão - subclasse pode adicionar novas propriedades [Empregado]
• reduzir o número de instâncias, aumenta o número de operações aplicáveis
 restrição - subclasse pode impôr restrições nos atributos herdados (limita os valores que
as instâncias podem tomar) [um círculo é-uma elipse em que os dois eixos são iguais;
operações de escalar x e y não são independentes para os círculos]
• propriedades herdadas podem ser renomeadas numa restrição [eixos  diâmetro]
• uma classe pode não herdar todas as operações das suas generalizações (decisão do
analista, com a tecnologia actual)
- a classe Círculo deve suprimir a operação de escalar desigual
• um objecto declarado elipse não é obrigado a permanecer um círculo mesmo que os
seus eixos sejam temporariamente iguais
-
i.e., no sistema podem existir círculos que não são Círculo, o que é
desagradável do ponto de vista de pesquisa declarativa
Modelação OO
52
Pertença a uma classe
•
•
•
•
implícita por regra - define a condição de pertença - todos os objectos que
satisfaçam a condição pertencem à classe [objectos imutáveis da matemática]
- pertença à classe derivada dos valores dos atributos
explícita por enumeração - objectos discretos sabem explicitamente a que classe
pertencem, independentemente de os valores dos atributos mudarem (pode gerar
incoerências)
pertença à classe derivada da identidade do objecto
- operações que invalidem restrições de pertença à classe devem ser proibidas
por razões semânticas
Modelação OO
53
Revogação
 uso da herança: tipos de dados abstractos versus partilha de implementação; problemas
quando a revogação altera substancialmente um método em vez de só o refinar
 revogação para
•
extensão - novo método reutiliza o herdado acrescentando comportamento [método
para desenhar JanelaComEtiqueta desenha Janela e acrescenta a etiqueta]
•
restrição - novo método restringe o protocolo, limitando os tipos dos argumentos,
para manter a operação fechada na subclasse [superclasse Conjunto, operação
adiciona(Object); subclasse ConjuntoInteiro, operação adiciona(Integer)]
•
optimização - implementação tira partido da especialização para obter maior
eficiência, mantendo o protocolo
•
conveniência - construir uma nova classe a partir de uma parecida em termos de
implementação e revogando os métodos inconvenientes
-
semanticamente errado pois a subclasse não tem ligação inerente à
superclasse problemas de manutenção
Modelação OO
54
Partilha de implementação
•
parar evitar a herança ad-hoc
-
preferível factorizar os aspectos comuns da classe original e da pretendida
numa classe abstracta e fazer desta superclasse comum
Classe
Abstracta
NovaClasse
?
Classe
NovaClasse
melhor
Modelação OO
55
Regras para a herança
 Adesão a estas regras leva a software mais fácil de entender e estender e menos sujeito a
erros por descuido
 Regras semânticas para a herança
•
todas as perguntas são herdadas por todas as subclasses
•
todas as operações de actualização são herdadas por todas as extensões
•
operações de actualização que afectem atributos ou associações restrictos são
bloqueadas na restrição
•
as revogações não podem alterar substancialmente os métodos; métodos para a
mesma operação têm o mesmo protocolo
•
operações herdadas podem ser refinadas com comportamento adicional
A implementação e o uso de muitas linguagens OO violam estes princípios
Modelação OO
56
Herança múltipla
Generalização múltipla - permite a uma classe ter várias
superclasses, e herdar propriedades de todas; i.e.
combinar informação de várias fontes
 classe de junção - classe com mais do
que uma superclasse
 propriedades de um ascendente obtidas
por mais do que um caminho são
herdadas uma só vez
 evitar definições paralelas que
conduzam a ambiguidades nas classes
de junção
 cada generalização deve ser feita sobre
uma só propriedade [meio em que um
veículo se desloca]
 refinar em várias dimensões
independentes  usar generalização
múltipla
Veículo
s
subclasses sobrepostas
Veículo
terrestre
Veículo
aquático
subclasses disjuntas
Carro
Anfíbio
Barco
classe de junção
 nenhuma classe pode herdar de duas
classes na mesma generalização disjunta
(se for de uma generalização sobreposta,
ou de generalizações diferentes, já pode)
Modelação OO
57
Herança múltipla acidental

Monitor é um Estudante que colabora
na Docência. (classe de junção)
 um Docente da FEUP que é Estudante
de Filosofia?
•
acontece haver uma instância
que pertence simultaneamente
a duas classes sobrepostas
•
não se justifica criar uma
classe de junção artificial para
este caso.
 solução: considerar Pessoa como um
objecto composto de vários objectos
Universitário
Pessoa
s
Docente
Estudante
Pessoal
Monitor
Universitário
•
em vez de herança, delegação
•
perda da identidade entre os
vários papéis
Modelação OO
58
Herança simples
 herança simples - uma só superclasse, hierarquia é uma árvore
 delegação - mecanismo de implementação pelo qual um objecto faz seguir uma
operação para outro objecto, para execução
 como contornar a falta de herança múltipla:
•
delegação com agregação dos vários papéis
-
•
herdar a classe mais importante e delegar o resto
-
•
nem todas as classes de junção terão que ser explicictamente criadas
a classe de junção é uma agregação das outras subclasses
generalização encaixada
-
factorizar primeiro uma generalização, depois as outras
-
preserva herança, mas duplica código
Modelação OO
59
Meta-informação
Meta-dados - dados que descrevem outros dados
 a definição de uma classe é meta-informação.
•
os modelos são inerentemente meta-informação
 um SGBD relacional contém meta-dados, sobre as tabelas
•
tabela de dados: Tokyo é capital do Japão; Bangcock, a da Tailândia, etc.
•
tabela de meta-dados: registar o facto de a uma cidade, corresponder uma capital
-

a tabela que contém o nome de todas as tabelas existentes, tem uma linha
para ela própria
instanciação - relacionamento entre a classe e o conjunto de objectos que descreve
(notação a ponteado)
•
pouco utilizado porque normalmente não se representam no mesmo diagrama
objectos e as respectivas classes
•
a não ser quando se tratam as classes como objectos, para as poder manipular
(interpretadores, ferramentas de modelação)
•
ou se representam entidades reais que são meta-dados para outras entidades
Modelação OO
60
Instanciação
 representar carros e respectivos modelos,
proprietários e fabricantes
•
•
seria possível criar directamente
uma classe para descrever cada
tipo de carro, mas estão sempre a
aparecer novos modelos
cada instância da classe Modelo tem
os seus atributos e associações e
descreve o conjunto dos carros
desse modelo (espécie de classe)
•
cada carro recebe os atributos
gerais do modelo, mais os seus
próprios atributos
?
Modelo
é um padrão (meta-dado)
dos objectos/classes Carro
(Pessoa)
João Silva
24
72
Pessoa
nome
idade
peso
(Pessoa)
Maria Santos
52
60
Modelo
nome
ano
preço base
Fabricante
Companhia
Carro
#série
côr
opções
Proprietário
Pessoa
Modelação OO
61
Meta-classes
 as classes podem ser vistas como objectos, meta-objectos (descritores de classe)
 esses objectos têm propriedades (indicados com $) e são instâncias das suas próprias
classes, as meta-classes
 atributo de classe - descreve valor comum à classe; não valores particulares de cada
instância
•
valores por omissão na criação de objectos
•
informação sobre o conjunto das instâncias
 operação de classe - operação sobre a classe
•
criação de instâncias
•
análise da estrutura da classe
•
estatísticas sobre as instâncias
Janela
tamanho: Rectângulo
visível: Booleano
$todas-janelas: Set[Janela]
$tamanho-omissão: Rectângulo
mostra
$nova-janela
$janela-prioritária
Modelação OO
62
Chaves de associações
 Chave candidata - conjunto minimal de atributos que identifica univocamente um
objecto ou uma ligação
• minimal - não é possível retirar um atributo e o que fica ser uma chave
•
podem existir várias chaves candidatas alternativas (o identificador do objecto é
sempre uma chave)
 Associações binárias
•
noções de multiplicidade e de chave candidata são quase equivalentes
- muitos-muitos: exige ambos os objectos para identificar cada ligação
- muitos-um: chave candidata única, a do objecto do lado muitos
- um-um: duas chaves candidatas, qualquer dos objectos ligados
Pessoa
Tem-acções
Empresa
{Chave candidata:
(pessoa, empresa)}
Pessoa
Trabalha
Empresa
{Chave candidata:
(pessoa)}
País
Capital
Cidade
{Chaves candidatas:
(país), (cidade)}
Modelação OO
63
Associações n-árias
 notação de multiplicidade das associações é ambígua para não binárias
 Associações ternárias
• exemplo Pessoa-Projecto-Linguagem: chave da associação com os três objectos da ligação
• noutros casos podem bastar dois objectos
• analisar uma instância pode ajudar a inferir quais as chaves candidatas, mas a decisão
é do analista
•
chaves são restrições nas instâncias válidas; pode-se verificar a conformidade da
instância com as declarações de chaves
Estudante
Universidade
Professor
Estudante
Maria
Maria
Susana
Susana
João
Professor
Simões
Aguiar
Simões
Simões
Costa
Universidade
Porto
Minho
Minho
Porto
Coimbra
{Chave candidata: (estudante, universidade)}
Um estudante, numa universidade tem um e um só supervisor.
Modelação OO
64
Restrições
 Restrição - é um relacionamento funcional entre entidades de um modelo de objectos
•
entidade - objecto, classe, atributo, ligação, ou associação
•
as restrições limitam os valores que as entidades podem assumir
Empregado
salário
Janela
Chefe
{salário <= chefe.salário}
largura
altura
{0.8 <= altura/largura <= 1.5}
Tarefa
prioridade
{prioridade nunca aumenta}
•
a própria estrutura do modelo impõe restrições
•
a qualidade do modelo está na quantidade de restrições relevantes que consegue modelizar
implicitamente
•
as restrições no modelo de objectos são sempre simples; as complicadas vão para o
funcional
•
privilegiar a escrita declarativa (passagem a procedimental para implementar automática)
•
inevitável uma percentagem em linguagem natural
Modelação OO
65
Restrições genéricas
 Notação: delimitar por chavetas; junto à entidade restringida; linha ponteada a
ligar entidades envolvidas na restrição; seta a ligar a entidade restrita àquela de que
depende (caso da instanciação)
 se uma restrição ligar a muitas entidades, mais vale não riscar o diagrama
•
outros exemplos de restrição: {ordenado}, {subconjunto}
 Entidades derivadas - são entidades completamente determinadas pelo resto do
diagrama através de uma restrição
•
têm interesse quando correspondem a conceitos do domínio do problema
•
notação - com um traço oblíquo
Máquina
Montagem
Componente
Offset total
offset
offset
Offset
{offset = montagem-máquina.offset +
componente-montagem.offset}
Modelação OO
66
Download

modelo OMT estático - Universidade do Porto