Visão Geral de
Orientação a Objetos com
UML
Copyright ©2006 Qualiti. Todos os direitos reservados.
Objetivos
Apresentar os princípios do
paradigma de orientação a objetos Apresentar os conceitos de
orientação a objetos com a notação UML correspondente Foco em aspectos estruturais:
diagramas de classes
Copyright ©2006 Qualiti. Todos os direitos reservados.
Princípios básicos de OO
Representação agrupa dados e operações relacionadas (objetos e classes)
Dados usualmente protegidos contra acesso indevido:
objetos se comunicam através de mensagens
Pela própria natureza, objetos podem ser distribuídos Potencialmente, embutem características como
Abstração
Encapsulamento
information hiding
modularidade
Extensibilidade (herança)
Polimorfismo
Copyright ©2006 Qualiti. Todos os direitos reservados.
Abstração
cliente
animal
automóvel
mapa
Copyright ©2006 Qualiti. Todos os direitos reservados.
Abstração
Construção de um modelo para representação de uma realidade Concentração nas características essenciais, gerenciando
complexidade
Copyright ©2006 Qualiti. Todos os direitos reservados.
Abstração
Construção de um modelo para a realidade
Automovel modelo
preco ...
atualizaPreco()
...
Copyright ©2006 Qualiti. Todos os direitos reservados.
Encapsulamento e Information hiding
Exemplos de encapsulamento
usados no nosso “dia-a-dia”
Copyright ©2006 Qualiti. Todos os direitos reservados.
Encapsulamento
Agrupa elementos relacionados em uma unidade sintática (cápsula,
módulo, classe, pacote, ...)
Copyright ©2006 Qualiti. Todos os direitos reservados.
Information hiding
Elimina dependência de
implementação, escondendo-a do cliente
Uso de interfaces
Mudanças internas não têm impacto sobre os clientes
Implementado via mecanismos de controle de visibilidade
Ex.: elementos privados em classes Java
Copyright ©2006 Qualiti. Todos os direitos reservados.
Número Saldo
21.342-7 875,32
Crédito
Débito
Exemplo: objeto conta bancária
Encapsulamento agregação de
elementos
Information hiding ocultamento de
elementos
O O e U M L | 1 1 Q u a lit i S o ft w a re P ro c e ss e s M o d u la ri d a d e
Copyright ©2006 Qualiti. Todos os direitos reservados.
Modularidade
Decomposição de um problema em partes menores, para gerenciar
complexidade
Cada conceito independente deve ser representado por um módulo Construção de módulos
desacoplados e coesos
Dividir para conquistar ...
Copyright ©2006 Qualiti. Todos os direitos reservados.
Extensibilidade (Herança)
Figura
Retângulo Triângulo
Polígono
ContaEspecial Poupança
Conta
Copyright ©2006 Qualiti. Todos os direitos reservados.
Extensibilidade (Herança)
Criação de hierarquias de abstração Base conceitual para permitir
extensibilidade do software
Reuso de código e comportamento (subtipo)
Herança comportamental (behavioural inheritance)
Referência clássica: A behavioral
notion of subtyping (Liskov & Wing)
Copyright ©2006 Qualiti. Todos os direitos reservados.
Exemplo: objeto poupança
Número Saldo
21.342-7 875,32
Crédito
Débito
R. Juros
Copyright ©2006 Qualiti. Todos os direitos reservados.
Polimorfismo
Linguagens polimórficas permitem que valores e identificadores (variáveis e operações) possuam mais de um tipo Há vários tipos de polimorfismo:
Paramétrico, de inclusão, overloading e coerção
Referência clássica: On understanding types, data abstraction and
polymorphism (Cardelli & Wegner)
Copyright ©2006 Qualiti. Todos os direitos reservados.
Polimorfismo de inclusão
Herança define polimorfismo
Objeto da subclasse usado no lugar do objeto da classe
Exemplo: uso de poupança em
contextos onde contas são esperadas
Interfaces também definem polimorfismo
Reuso de tipo, mas não de código
Copyright ©2006 Qualiti. Todos os direitos reservados.
Polimorfismo real ou paramétrico
Forma mais pura de polimorfismo O mesmo objeto ou operação
usada uniformemente em
diferentes contextos (tipos só determinados em tempo de execução)
Exemplo: generics em Java 1.5
Copyright ©2006 Qualiti. Todos os direitos reservados.
Polimorfismo via overloading e coerção
Overloading permite o uso do mesmo nome para elementos semânticos
Exemplo: métodos ou construtores em Java
Coerção é semelhante, mas inclui conversão implícita de tipos
Exemplo: soma envolvendo um
operando inteiro e outro real
Copyright ©2006 Qualiti. Todos os direitos reservados.
Conceitos básicos de OO
Objeto Classe Atributo Operação Interface
Componente Pacote
Subsistema
Relacionamentos
Copyright ©2006 Qualiti. Todos os direitos reservados.
Objeto
Modelo de um objeto real
entidade física, conceitual ou de software
Possui comportamento, estado e identidade
Exemplo: objetos conta e poupança apresentados
donut
Copyright ©2006 Qualiti. Todos os direitos reservados.
Objeto em UML
: Conta
contaSaque : Conta
contaSaque Apenas o nome da
classe
Apenas o nome do objeto
Nome da classe e do
objeto
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classe
Descrições de objetos com propriedades e
comportamento comuns Abstração que
enfatiza o que é relevante
suprime o que não interessa
Classes são fábricas de objetos
Objetos são agrupados
em classes
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classe de Contas Bancárias
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classes de Objetos
Quantas classes temos aqui?
Fonte: Rational
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classe em UML
Conta
Nome da Classe Conta Atributos
Operações
numero saldo
credito() debito() getSaldo() getNumero()
estrutura
comportamento
Copyright ©2006 Qualiti. Todos os direitos reservados.
Atributo
Propriedades de um objeto
Armazenam estado dos objetos
número
saldo
Copyright ©2006 Qualiti. Todos os direitos reservados.
Atributos: notação
Atributos podem ser identificados apenas com nomes
Atributos podem ter seus tipos (ou classes) especificados e valores padrão definidos
Parede altura : real largura : real
Conta
numero
Saldo
Copyright ©2006 Qualiti. Todos os direitos reservados.
Objetos com atributos valorados
: Conta
numero = 23.025-1 saldo = 500,00
: Conta
numero = 21.342-7 saldo = 875,32
Conta
numero saldo
Valor do Atributo
Objeto
• Atributos dos objetos são valorados
na construção de cenários de execução
Copyright ©2006 Qualiti. Todos os direitos reservados.
Operação
Modela
comportamento das classes
Serviços que os objetos
oferecem a
outros objetos
número saldo
creditar debitar
getNumero
Copyright ©2006 Qualiti. Todos os direitos reservados.
Operação em UML
Conta
credito() debito() getSaldo() getNumero()
Especificação das operações
Como para os atributos, pode-se especificar uma operação apenas com seu nome
Pode-se também especificar a assinatura da
operação: seus parâmetros com os tipos, e o tipo
de retorno
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classes: visibilidade
Marcações de acesso podem ser usadas para especificar o tipo de acesso permitido aos atributos e operações
+ público
# protegido
- privado
Copyright ©2006 Qualiti. Todos os direitos reservados.
Visibilidade no Rose
Pe s s o a no m e : Strin g cpf : Strin g
tele fo n e : Strin g incluir()
con s u lta r() atu a lizar() público
privado
protegido
Copyright ©2006 Qualiti. Todos os direitos reservados.
Interface
Interfaces formalizam
polimorfismo com implementações independentes
Aumentam o nível de reusabilidade Viabilizam o uso de componentes
Reduzem o esforço de evolução da
aplicação
Copyright ©2006 Qualiti. Todos os direitos reservados.
Interface
Interfaces definem um tipo
especificando apenas a assinatura de seus métodos
Interfaces não possuem atributos e seus métodos não têm corpo
Classes implementam interfaces
provêem implementação para os métodos
especificados em uma interface
Copyright ©2006 Qualiti. Todos os direitos reservados.
Exemplo: Independência do meio de armazenamento
Isolaando as coleções de negócio de mudanças na coleção de dados correspondente
RepositorioContasBDR RepositorioContasOO CadastroContas
<<interface>>
RepositorioContas
Copyright ©2006 Qualiti. Todos os direitos reservados.
Interface em UML:
notação alternativa
RepositorioContas
Relacionamentos de realização
RepositorioContasOO
RepositorioContasXML
RepositorioContasBDR
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classe abstrata
Classe abstrata é aquela que não possui instância
Em geral, possui pelo menos um método abstrato
Métodos abstratos não têm corpo
subclasses não abstratas são obrigadas a
fornecer uma implementação para eles
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classes, Interfaces e Classes Abstratas
Classes
• Atributos
• Métodos
Classes Abstratas
• Atributos
• Métodos
• Assinatura de Métodos
Interfaces
• Assinaturas dos métodos
Copyright ©2006 Qualiti. Todos os direitos reservados.
Classes abstratas x Interfaces
Herança de tipos x herança de código Classes descrevem propriedades
fundamentais de um objeto Interfaces descrevem papéis
desempenhados por um objeto em determinadas situações
Interfaces são úteis para implementar
herança múltipla
Copyright ©2006 Qualiti. Todos os direitos reservados.
Componente
Parte não trivial, quase
independente, substituível de um sistema, que provê a realização de (uma/um conjunto de) interface(s) Exemplos
um código fonte
um componente de tempo de execução
um componente executável
Copyright ©2006 Qualiti. Todos os direitos reservados.
Componente em UML
Interface do Componente
Arquivo fonte <<DLL>>
Componente
<<EXE>>
Arquivo
executável
Copyright ©2006 Qualiti. Todos os direitos reservados.
Pacote
Mecanismo para organizar elementos em grupos Facilita entendimento do sistema
Favorece modularidade e reuso em larga escala Essencial para estruturar sistemas complexos
nome do
pacote
Copyright ©2006 Qualiti. Todos os direitos reservados.
Coesão e Acoplamento
Acoplamento é a medida de quão conectadas duas classes são
cuidado com herança
Coesão é a medida de quão auto- contida uma classe é
Sistemas devem ter baixo acoplamento e alta coesão
bom para manutenção
Copyright ©2006 Qualiti. Todos os direitos reservados.
Subsistema
União de
pacote (agrupa outros elementos)
classe (comportamento)
Realiza uma ou mais interfaces,
que definem o seu comportamento
Copyright ©2006 Qualiti. Todos os direitos reservados.
Subsistema em UML
Subsistema
Interface
Realização
<<subsystem>>
Nome do subsistema
Copyright ©2006 Qualiti. Todos os direitos reservados.
Subsistemas e Componentes
Ambos encapsulam um
comportamento modelado por interfaces
Subsistemas representam componentes no modelo de projeto
Componentes são a realização física dos subsistemas
Projeto
Implementação
Nome do componente
<<subsystem>>
Nome do
subsistema
Copyright ©2006 Qualiti. Todos os direitos reservados.
Relacionamentos
Associação
simples
agregação
composição
Dependência
Generalização
Realização
Copyright ©2006 Qualiti. Todos os direitos reservados.
Associação
Relação estrutural entre classes
Pessoa
Pessoa Empresa
Empresa
trabalha
Associação Nome da associação
Classe
Empregado Empregador
Papéis
Copyright ©2006 Qualiti. Todos os direitos reservados.
Agregação
Tipo especial de associação Relacionamento todo-parte
O todo possui um nível de abstração maior que a parte
Departamento Empresa
Todo Parte
Agregação
Copyright ©2006 Qualiti. Todos os direitos reservados.
Composição
Tipo especial de agregação Relação de posse mais forte
O todo é responsável pela criação da parte A parte não vive sem o todo
Não permite compartilhamento
Departamento Empresa
Todo Parte
Copyright ©2006 Qualiti. Todos os direitos reservados.
Associação x Agregação x Composição
Como você modelaria:
Dependente e Funcionário?
Pedido e Item do pedido?
Funcionário e Cartão de ponto?
Carro, Roda, Direção e Carburador?
Na dúvida, use agregação!
Na dúvida, use associação!
Copyright ©2006 Qualiti. Todos os direitos reservados.
Dependência
Relacionamento não estrutural (uso)
mais fraco que associação
Uma dependência entre dois elementos indica que mudança em um elemento pode causar
mudanças no outro
Cartão LeitoraCartao
lerCartao (cartao) Relacionamento
de Dependência
Copyright ©2006 Qualiti. Todos os direitos reservados.
Dependência
Pode existir relacionamento de
dependência entre vários elementos de UML
Classe
Pacote
PacoteFornecedor
Componente
Fornecedor Cliente
PacoteCliente
Dependência
Fonte: Rational
Fornecedor
Cliente
Copyright ©2006 Qualiti. Todos os direitos reservados.
Exercício - Relacionamentos
Modele os relacionamentos
existentes entre as classes abaixo:
Universidade Departamento
Aluno Disciplina Professor
Curso
Turma
Copyright ©2006 Qualiti. Todos os direitos reservados.
Multiplicidade
Multiplicidade define quantos objetos participam do
relacionamento
O número de instâncias de uma classe
relacionada a uma instância de outra classe
Especificado em cada uma das pontas da
associação
Copyright ©2006 Qualiti. Todos os direitos reservados.
Tipos de Multiplicidade
Não especificada Exatamente um Zero ou mais
Muitos (mesmo que 0..*) Um ou mais
Zero ou um
Intervalo determinado Valores múltiplos
1 0..*
*
1..*
0..1
2..4
2, 4..6
Copyright ©2006 Qualiti. Todos os direitos reservados.
Exemplo: Multiplicidade
Pessoa Empresa
Multiplicidade
1..*
1
Copyright ©2006 Qualiti. Todos os direitos reservados.
Navegação
Especifica a direção da associação Associações e agregações são
bidirecionais por default, mas é
desejável que a navegação seja
restringida a apenas uma direção
Associações bidirecionais são mais
difíceis de implementar
Copyright ©2006 Qualiti. Todos os direitos reservados.
Exemplo: Navegação
Pessoa Empresa
Navegação
1..*
1
Copyright ©2006 Qualiti. Todos os direitos reservados.
Exercício - Multiplicidade
Acrescente a multiplicidade nos
relacionamentos encontrados no
exercício anterior.
Copyright ©2006 Qualiti. Todos os direitos reservados.
Generalização
Relacionamento entre classes onde uma classe compartilha a estrutura
(atributos e relacionamentos) e
comportamento (operações) de outras classes
Define uma hierarquia de abstrações
Relacionamento “é um tipo de” (is-a-
kind-of)
Copyright ©2006 Qualiti. Todos os direitos reservados.
Generalização
Uma subclasse pode
adicionar atributos, operações e relacionamentos
redefinir operações herdadas
Tipos de herança: simples e
múltipla
Copyright ©2006 Qualiti. Todos os direitos reservados.
Herança Simples
Classes herdando de apenas uma outra classe
Círculo raio centro desenhar()
Retângulo vertices desenhar() diagonal()
Figura
cor
largura da linha desenhar() girar(graus) selecionar()
Subclasses Superclasse
(pai)
Relacionamento de Generalização
Quadrado
Copyright ©2006 Qualiti. Todos os direitos reservados.
Herança Múltipla
Classes herdando de mais de uma classe
Mamífero AnimalVoador
Herança múltipla
Cachorro Gato Morcego Passarinho Gaviao
Copyright ©2006 Qualiti. Todos os direitos reservados.
Herança Múltipla
O que acontece quando as superclasses possuem o mesmo método (métodos
com o mesmo nome?
O que acontece quando se tenta executar um método que não está definido na subclasse? Em que
hierarquia de superclasses deve-se
procurar o método?
Copyright ©2006 Qualiti. Todos os direitos reservados.
Realização
Realização
Subsistema Classe
Caso de uso
Indica que um elemento serve como contrato que o outro deve seguir
Exemplos:
Componente
Realização de Caso de uso
Copyright ©2006 Qualiti. Todos os direitos reservados.
Exercício - Arquitetura
Modele um diagrama de classes, com todos os relacionamentos, de uma
aplicação bancária, envolvendo:
Classes Conta, Poupanca e Cliente, com as respectivas coleções
Fachada
Interface
Copyright ©2006 Qualiti. Todos os direitos reservados.
Mecanismos adicionais de UML
Estereótipos Notas
Propriedades ( Tagged values)
Restrições
Copyright ©2006 Qualiti. Todos os direitos reservados.
Estereótipos
Mecanismo utilizado para estender os elementos de UML
Define um novo modelo de elemento em termos de outro já existente
Como criando um novo ícone
utilizando a notação <<novo_elemento>>
Copyright ©2006 Qualiti. Todos os direitos reservados.
Estereótipos - Exemplo
Classes de fronteira:
ClasseFronteira
<<boundary>>
ClasseFronteira
Copyright ©2006 Qualiti. Todos os direitos reservados.
Notas
Anotação utilizada para adicionar informação a diagramas
Pode ser afixionada a qualquer elemento de UML
Pode ser ligada a um elemento com uma linha tracejada
Exemplo:
LeitoraCartao
Esta classe é uma abstração do dispositivo de hardware que será usado para ler
efetivamente as informações
do cartão magnético.
Copyright ©2006 Qualiti. Todos os direitos reservados.
Propriedades (Tagged Values)
Servem para estender elementos UML, adicionando informações sobre eles
Exemplos já definidos em UML:
Persistence
Location (ex: no cliente, no servidor)
Você pode criar suas próprias propriedades
Cliente {persistence}
LeitoraCartao
{location=server}
Copyright ©2006 Qualiti. Todos os direitos reservados.
Restrições
Pessoa Empresa
{subset}
Funcionário
Diretor
1..* 1
3 1
Usadas para criação de novas regras sobre elementos do modelo
Ou modificação de regras existentes
Copyright ©2006 Qualiti. Todos os direitos reservados.
Diagramas UML
Diagramas usados no curso serão apresentados sob demanda
Seqüência
Colaboração
Classes (já apresentado)
Pacotes
Estados
Estrutura
Copyright ©2006 Qualiti. Todos os direitos reservados.
Paradigma de Orientação a Objetos
Favorece modularidade, manutenibilidade e reuso Aproxima-se do mundo real
Uso do mesmo conceito em várias fases do desenvolvimento
Mas não é adequado para capturar requisitos, planejar o projeto e
realizar testes funcionais
Respostas dos Exercícios
Copyright ©2006 Qualiti. Todos os direitos reservados.
Relacionamentos
Resposta do exercício Universidade Departamento
Aluno Disciplina
Professor Curso
Turma
Copyright ©2006 Qualiti. Todos os direitos reservados.