Prof. Claudio Passos Apresentação cedida pela 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 = desenvolver um sistema para locadoras Dividir o problema em objetos Clientes,DVDs,Filmes,Locação,...
"Um objeto é um termo que usamos para representar uma entidade do mundo real" Fazemos isto através de um exercício de abstração...
Podemos descrever o cachorro Bidu em termos de seus atributos físicos: é pequeno sua cor principal é castanha olhos pretos orelhas pequenas e caídas rabo pequeno
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
Representação do cachorro Bidu: 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 ]
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
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.
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
Atributos visibilidade nome: tipo + altura: float Atributos Métodos Métodos visibilidade nome(args): tipo retorno + latir() + media(n1,n2): float
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
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
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
nome multiplicidade sentido de leitura Pessoa 1..* trabalha para * empregado empregador Tipo: associação Empresa papéis E a navegabilidade?
navegabilidade Cliente reside 1 * Endereço O cliente sabe quais são seus endereços, mas o endereço não sabe a quais clientes pertence LES/PUC- Rio
Uma associação é um vínculo que permite que objetos de uma ou mais classes se relacionem Não há conceito de posse As 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
Uma associação é uma conexão entre classes (linha sólida)
Indicadores de multiplicidade: 1 1..* 0..* * 0..1 Exatamente um Um ou mais Zero ou mais (muitos) Zero ou mais (muitos) No máximo um (zero ou um) m..n Faixa de valores (por exemplo: 4..7)
"Qualquer empregado é chefiado por no máximo um chefe." Empregado UML empregados chefe * Chefia 0..1 Chefe
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
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
Ocorre quando a associação tem propriedades Person 1..* * Com pany +em ployer +em ployee Job salary datehired
É 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
"Uma empresa possui vários veículos." UML Empresa de ônibus 0..1 frota * Veículo
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
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.
Com pany Departm ent 1 *
Língua natural "Um humano é composto por uma cabeça e dois braços." Humano UML Cabeça 1 2 Braço
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
Modelar aspectos semelhantes entre classes, preservando suas diferenças As subclasses herdam todas as propriedades de sua superclasse E possuem as suas próprias
Relacionamento entre itens gerais (superclasses) e itens mais específicos (subclasses) superclasse é um é um tipo de Terrestre Veículo Aéreo subclasses
Forma uma Forma pode ser um Círculo, um Retângulo ou uma FormaComposta Círculo Retângulo FormaComposta
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
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
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.
Diagrama de Casos de Uso
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.
Diagrama de Classes: identificando as classes Professor Coordenador Estudante Universidade Disciplina Turma Curso FormularioMatricula AnalisadorMatricula SistemaRegistroAcademico ListaAlunos
Diagrama de Classes: identificando os relacionamentos 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 O formulário de matrícula é processado por um analisador de matrícula FormularioMatricula 0..* é-processado-por 1 AnalisadorMatricula
Diagrama de Classes: identificando os relacionamentos O analisador de matrícula gerencia a disciplina FormularioMatricula 0..* é-processado-por 1 AnalisadorMatricula 1 0..* Disciplina
Diagrama de Classes FormularioMatricula 1 0..* é-processado-por 1 AnalisadorMatricula 1 gerencia é-preenchido-por 0..* Disciplina 1 1..* é-definida-por 1 Coordenador aluno 1 Estudante está-matriculado-em 3..10 4 1..* é-ministrada-por Turma 0..3 1 Professor
Diagrama de Classes: identificando os atributos 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. código sala horário Turma
Diagrama de Classes FormularioMatricula 1 0..* é-processado-por 1 AnalisadorMatricula 1 gerencia 0..* é-preenchido-por Disciplina nome numcréditos 1..* é-definida-por 1 Coordenador 1 aluno 1 Estudante nome matricula está-matriculado-em 3..10 4 1..* Turma código sala horário é-ministrada-por 0..3 1 Professor nome titulação
Diagrama de Classes: identificando os métodos modelar antes os diagramas de seqüência 1: submeterformulario(f) : SIM : AnalisadorMatricula AnalisadorMatricula adicionar(aluno, disciplina) 2: adicionar(a,d ) SIM submeterformulario(formulario)
Diagrama de Classes: E a navegabilidade? Estudante está-matriculado-em 3..10 4 Turma public class Estudante { private String nome; private String matricula;... } public class Turma { } private String codigo; private String sala; private Estudante alunos[];... OBS: Turma não aparece como atributo de Estudante!
Diagrama de Classes: Acrescentando generalizações: Atributos, operações e/ou relacionamentos comuns podem ser movidos para uma classe mais geral. Us uario nome : Texto definirnome(nome) obternome() Estudante matricula : Inteiro definirmatricula(matricula) obtermatricula() Professor titulacao : Texto definirtitulacao(titul acao) obtertitulacao()
FormularioMatricula obterestudante() : Estudante obternomedisciplina(i : Inteiro) : Texto 0.. * é-processado-por 1 AnalisadorMatricula usa adicionar(alun o, disciplina) 1 1 SIM 1 1 é-preenchido-por gerencia -aluno 1 Estudante matricula : Inteiro definirmatricula(matricula) obtermatricula() 3.. 10 está-matriculado-em 0..* Disciplina nome : Texto numcreditos : Inteiro estacompleta() adicionar(aluno : Estudante) 1 Usuario nome : Texto definirnome(nome) obternome() 1..* Turma Professor titulacao : Texto responsável-por 4 codigo : Texto sala : Texto horario : Horario numalunos : Inteiro completa : Booleano definirtitulacao(titulacao) obtertitulacao() 0..3 1 estacompleta() : Booleano