Ceça Moraes. Programação Orientada a Objetos : os problemas de programação são pensados em...

57
Ceça Moraes

Transcript of Ceça Moraes. Programação Orientada a Objetos : os problemas de programação são pensados em...

Page 1: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Ceça Moraes

Page 2: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Programação Orientada a Objetos: os problemas de programação são

pensados em termos de objetos Em vez de funções e rotinas

Problema = desenvolver um sistema para locadoras Dividir o problema em objetos Clientes,DVDs,Filmes,Locação,...

Page 3: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

"Um objeto  é um termo que usamos para representar uma entidade do mundo real"  Fazemos isto através de um

exercício de abstração...

Page 4: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Podemos descrever o cachorro Bilú  em termos de seus atributos físicos: é pequeno sua cor principal

é castanha olhos pretos orelhas pequenas

e caídas,  rabo pequeno

Page 5: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Podemos também descrever algumas ações que ele faz (temos aqui os métodos):

balança o rabo foge e se deita

quando leva reclamação

late quando ouve um barulho ou vê um cão ou gato

atende quando o chamamos pelo seu nome

Page 6: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Representação do cachorro Bilú: Propriedades : [Cor

do corpo : castanha;  cor dos olhos : pretos;  altura: 15 cm;   comprimento: 38 cm   largura : 24 cm]

Métodos : [balançar o rabo , latir , correr, deitar , sentar ] 

Page 7: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Uma classe representa um conjunto de objetos que possuem comportamentos e características comuns Têm os mesmos atributos, operações, relacionamentos e semântica

Uma classe descreve como certos tipos de objetos se parecem do ponto de vista da programação

Page 8: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Ao definir uma classe é necessário definir : Propriedades

▪ Informações específicas relacionadas a uma classe de objeto

▪ Características dos objetos da classe▪ Exemplo: Cor , altura , tamanho , largura ,...

Métodos:

▪ São ações que os objetos de uma classe podem realizar

▪ Exemplo : Latir , correr , sentar , comer, etc.

Page 9: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Ilustram atributos e operações de uma classe e as restrições como que os objetos podem ser conectados ;

Descrevem também os tipos de objetos no sistema e os

relacionamentos entre estes objetos

Page 10: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Atributos visibilidade nome:

tipo + altura: float

Métodos visibilidade

nome(args): tipo retorno

+ latir() + media(n1,n2): float

Atributos

Métodos

Page 11: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Visibilidade dos atributos e métodos em uma classe : + (público)

▪ visível em qualquer classe # (protegido)

▪ qualquer descendente pode usar – (privado) 

▪ visível somente dentro da classe

Page 12: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Os relacionamentos determinam conexões entre os objetos das classes

Fornecem um caminho para a comunicação entre os objetos

Tipos de Relacionamentos: Associações :  agregação e

composição Generalização (herança) Dependências

Page 13: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Os relacionamentos possuem:

Nome: descrição dada ao relacionamento (faz, tem, possui,...)

Sentido de leitura

Navegabilidade: indicada por uma seta no fim do relacionamento

Multiplicidade: 0..1, 0..*, 1, 1..*, 2, 3..7

Tipo: associação (agregação, composição), generalização e dependência

Papéis: desempenhados por classes em um relacionamento

Page 14: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Pessoa Empresa1..*

Tipo: associação

multiplicidade

*trabalha para

empregado

papéis

empregador

sentido de leitura

E a navegabilidade?

nome

Page 15: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

© LES/PUC

-Rio

▪ O cliente sabe quais são seus endereços, mas o endereço não sabe a quais clientes pertence

EndereçoClientereside

1 *

navegabilidade

Page 16: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Uma associação é um vínculo que permite que objetos de uma ou mais classes se relacionem

Não há conceito de posseAs associações podem ser:

unárias - quando a associação ocorre entre objetos de uma mesma classe

binárias - quando a associação ocorre entre dois objetos de classes distintas

Page 17: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Uma associação é uma conexão entre classes (linha sólida)

Page 18: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Indicadores de multiplicidade: 1 Exatamente um

1..* Um ou mais

0..* Zero ou mais (muitos)

* Zero ou mais (muitos)

0..1 No máximo um (zero ou um)

m..n Faixa de valores (por exemplo: 4..7)

Page 19: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 20: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

"Qualquer empregado é chefiado por no máximo um chefe."

UMLUMLEmpregado Chefe

Chefia* 0..1

empregados chefe

Page 21: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 22: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Person +employee

1..*

+employer

*

Company

+worker

*

+supervisor 1

Page 23: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Navegação por definição, a navegação entre classes

associadas é bidirecional por conveniência, a navegação pode

ser restringida a uma única direção

Page 24: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 25: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Um Estudante pode ser: Um aluno de uma Disciplina e

Um jogador da Equipe de Futebol

Cada Disciplina deve ser cursada por no mínimo 1 aluno

Um Aluno pode cursar de 0 até 8 disciplinas

Page 26: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Ocorre quando a associação tem propriedades

Person Company

salarydateHired

Job

1..*

+employer

*

+employee

Page 27: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

É um tipo especial de associação Utilizada para indicar “todo-parte”

um objeto “parte” pode fazer parte de vários objetos “todo”

Mostra como classes são compostas de outras classes

Page 28: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 29: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

"Uma empresa possui vários veículos.""Uma empresa possui vários veículos."

UMLUML

Empresa Veículo*

frota

0..1

Page 30: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 31: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Tipo especial de agregação

é um relacionamento de contenção Um objeto (container) CONTÉM outros

objetos (elementos)

Elementos que estão contidos dentro de outro objeto dependem dele para existir

Page 32: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Agregação: estabelece uma relação

todo-parte entre classes, sendo que a parte pode existir sem o todo.

Ex: Carro e Roda. Uma Roda é parte de um Carro, porém a Roda existe por si só fora do Carro. Você pode por exemplo remover a roda de um carro para colocar em outro.

Composição: estabelece uma

relação todo-parte entre classes, sendo que a parte NÃO existe sem o todo.

Ex: Pedido e Itens de Pedido. Se você destruir o Pedido, os Itens são destruídos junto, eles não tem sentido se não houver um Pedido.

Page 33: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Company Department

1 *

Page 34: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Língua naturalLíngua natural"Um humano é composto por uma cabeça e dois braços."

UMLUMLHumano

Braço

Cabeça1

2

Page 35: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Uma classe pode ser definida a partir de outra já existente

Abstrai classes genéricas (superclasse), a partir de classes com propriedades (atributos e operações) semelhantes

Page 36: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Modelar aspectos semelhantes entre classes, preservando suas diferenças

As subclasses herdam todas as propriedades de sua superclasse E possuem as suas próprias

Page 37: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Relacionamento entre itens gerais (superclasses) e itens mais específicos (subclasses)

“é um”“é um tipo de”

superclasse

subclasses

Veículo

Terrestre Aéreo

Page 38: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Forma

RetânguloCírculo FormaComposta

uma Forma pode ser um Círculo, um Retângulo ou uma FormaComposta

Page 39: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 40: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Identificar classes com propriedades semelhantes

Definir uma nova classe com as propriedades comuns

As classes originais tornam-se subclasses da nova classe e herdam as propriedades desta

Os relacionamentos em comum passam para a superclasse e os demais continuam nas subclasses

Page 41: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Definir uma ou mais subclasses a partir de uma classe existente

Adicionar propriedades e relacionamentos específicas de cada nova subclasse

Relacionamentos comuns a todas as subclasses são ligados à superclasse

Page 42: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 43: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.
Page 44: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

A Universidade XYZ deseja informatizar seu sistema de matrículas: A universidade oferece vários cursos. O Coordenador de um curso define as disciplinas que serão oferecidas pelo seu

curso num dado semestre. Várias disciplinas são oferecidas em um curso. Várias turmas podem ser abertas para uma mesma disciplina, porém o número de

estudantes inscritos deve ser entre 3 e 10. Estudantes podem se matricular em 4 disciplinas. Quando um estudante matricula-se para um semestre, o Sistema de Registro

Acadêmico (SRA) é notificado. Após a matrícula, os estudantes podem, por um certo prazo, utilizar o sistema para

adicionar ou remover disciplinas. Professores usam o sistema para obter a lista de alunos matriculados em suas

disciplinas. Todos os usuários do sistema devem ser validados.

Page 45: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Diagrama de Casos de Uso

Page 46: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Descrição Resumida do Caso de Uso “Matricular em Disciplina”

Esse caso de uso se inicia quando o Estudante de Curso inicia uma sessão no sistema e apresenta suas credenciais.

O sistema verifica se a credencial é válida.

O sistema solicita que o estudante realize sua matrícula, selecionando 4 disciplinas.

O estudante preenche um formulário eletrônico de matrícula e o submete para análise de consistência.

O sistema analisa as informações contidas no formulário.

Se as informações são consistentes, o estudante é incluído em turmas abertas de 4 disciplinas, iniciando pelas preferenciais.

Se as informações não são consistentes, o sistema informa o motivo da inconsistência e solicita que o formulário seja alterado.

Page 47: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Professor Coordenador Estudante

TurmaUniversidade Disciplina

FormularioMatricula

Curso

AnalisadorMatricula

SistemaRegistroAcademico ListaAlunos

Diagrama de Classes: identificando as classes

Page 48: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Exemplos de possibilidades de relacionamentos entre as classes A e B: A é parte física ou lógica de B A está contido fisicamente ou logicamente em B A é uma descrição de B A é membro de B A é subunidade organizacional de B A usa ou gerencia B A se comunica/interage com B A está relacionado com uma transação B A é possuído por B A é um tipo de B

Diagrama de Classes: identificando os relacionamentos

Page 49: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

O formulário de matrícula é processado por um analisador de matrícula

FormularioMatricula AnalisadorMatriculaé-processado-por

10..*

Diagrama de Classes: identificando os relacionamentos

Page 50: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

O analisador de matrícula gerencia a disciplina

Disciplina

FormularioMatricula AnalisadorMatriculaé-processado-por

10..*1

0..*

Diagrama de Classes: identificando os relacionamentos

Page 51: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Professor

Coordenador

Estudante Turma

Disciplina

FormularioMatricula AnalisadorMatricula

é-preenchido-por

está-matriculado-em

é-processado-por

é-ministrada-por

é-definida-por

aluno

gerencia

1

1

10..*1

0..*

11..*1

1..*

10..33..10 4

Diagrama de Classes

Page 52: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Os atributos podem ser encontrados examinando-se as descrições dos casos de uso e também pelo conhecimento do domínio do problema.

Cada turma oferecida possui um código, uma sala e um horário.

Turma

códigosalahorário

Diagrama de Classes: identificando os atributos

Page 53: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Coordenador

FormularioMatricula AnalisadorMatricula

é-preenchido-por

está-matriculado-em

é-processado-por

é-ministrada-por

é-definida-por

aluno

gerencia

1

1

10..*1

0..*

11..*

1

1..*

10..33..10 4

Turma

códigosalahorário

Professor

nometitulação

Estudante

nomematricula

Disciplina

nomenumCréditos

Diagrama de Classes

Page 54: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

modelar antes os diagramas de seqüência

SIM

submeterFormulario(formulario)

AnalisadorMatricula

adicionar(aluno, disciplina)

: SIM : AnalisadorMatricula

2: adicionar(a,d )

1: submeterFormulario(f)

Diagrama de Classes: identificando os métodos

Page 55: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

E a navegabilidade?

public class Turma {

private String codigo;private String sala;private Estudante alunos[];...

}

Diagrama de Classes:

public class Estudante {

private String nome;

private String matricula;...}

OBS: Turma não aparece como atributo de Estudante!

TurmaEstudante

3..10

está-matriculado-em

3..10 4

Page 56: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

Acrescentando generalizações: Atributos, operações e/ou relacionamentos comuns

podem ser movidos para uma classe mais geral.

Estudante

matricula : Inteiro

definirMatricula(matricula)obterMatricula()

Usuario

nome : Texto

definirNome(nome)obterNome()

Professor

titulacao : Texto

definirTitulacao(titulacao)obterTitulacao()

Diagrama de Classes:

Page 57: Ceça Moraes.  Programação Orientada a Objetos :  os problemas de programação são pensados em termos de objetos  Em vez de funções e rotinas  Problema.

SIM

Usuario

nome : Texto

definirNome(nome)obterNome()

FormularioMatricula

obterEstudante() : EstudanteobterNomeDIsciplina(i : Inteiro) : Texto

Estudante

matricula : Inteiro

definirMatricula(matricula)obterMatricula()

1

1

é-preenchido-por

1

1-aluno

Professor

titulacao : Texto

definirTitulacao(titulacao)obterTitulacao()

AnalisadorMatricula

adicionar(aluno, disciplina) 1 11 1

usa

10..* 10..*

é-processado-por

Disciplina

nome : TextonumCreditos : Inteiro

estaCompleta()adicionar(aluno : Estudante)

0..*

1

0..*

1

gerencia

Turma

codigo : Textosala : Textohorario : HorarionumAlunos : Inteirocompleta : Booleano

estaCompleta() : Booleano

3..10

4

3..10

4

está-matriculado-em

0..3 10..3 1

responsável-por

1..*

11

1..*