Diagrama de Classes. Viviane Torres da Silva 2/es1

Documentos relacionados
Diagrama de Classes. Viviane Torres da Silva

Diagrama de Classes. Leonardo Gresta Paulino Murta

Diagrama de Classes. Viviane Torres da Silva

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

Diagrama de Seqüência

Casos de Uso. Viviane Torres da Silva

PROGRAMAÇÃO ORIENTADA A

Casos de Uso. Leonardo Gresta Paulino Murta

PROGRAMAÇÃO ORIENTADA A OBJETOS I -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

Diagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42

Diagrama de Transição de Estados

Diagrama de Atividades

Programação Orientada a Objetos Relacionamentos entre classes

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos

Casos de Uso. Viviane Torres da Silva

DIAGRAMAS DE CLASSE UML

PROJETO DE DADOS PROJETO ARQUITETURAL BÁSICO. Projeto de Programas PPR0001

Requisitos de sistemas

15/04/2013. Outro Diagrama de Classes. Primeiro Diagrama de Classes. Diagrama de Classes. Atributos. Eduardo Figueiredo

Diagrama de Transição de Estados. Leonardo Gresta Paulino Murta

Diagrama de Classes. Classes. Relacionamentos. Atributos Métodos. Associação. Generalização Dependência Realização. Agregação Composição

Orientação a objetos. Objetos ou Instâncias I

Introdução. à UML. Histórico (cont.) Histórico Definição Benefícios Notação Diagrama de Classes Diagramas de Interação Conclusões Revisão

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Modelo Conceitual. Análise e Projeto de Sistemas Avançados. Aula 5. Allan Rodrigo Leite

Os diagramas de use case capturam os requisitos funcionais do sistema.

Engenharia de Software. Prof. Me. Clodoaldo Brasilino

Introdução à UML. Prof. Jesus José de Oliveira Neto

INF1013 MODELAGEM DE SOFTWARE

Diagramas de Classes. ESII Profª. Andressa Falcade URI Santiago

1 Introdução. 1.1 Teoria dos Sistemas 23/4/2010


PROJETO DE DESENVOLVIMENTO DE SOFTWARE

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA UML UNIFIED MODELING LANGUAGE

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos

Project-Based Learning TADS MS Diagrama de Classes

Análise de Sistemas 4º Bimestre (material 3)

Panorama da notação UML

Modelagem Usando Orientação à Objetos (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Introdução a UML. Aula 04 Analise de Sistemas Profª Rita de Cassia Gaieski

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos

Diagramas de Classe. Sumário. Introdução aos Diagramas de Classe

Linguagem de Programação. Diagrama de classes

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Modelagem Orientada a Objeto

Análise e projeto de sistemas

ENGENHARIA DE SOFTWARE. Aula 10 Introdução ao Diagrama de Classes

Aula 4 POO 1 Análise OO. Profa. Elaine Faria UFU

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Especificação de Sistemas de Software e a UML

Análise e Projeto de Sistemas

Linguagem de Modelagem Unificada UML

Casos de Uso. Viviane Torres da Silva

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Diagramas de Package

Diagrama de Classes (Notação) - Aula 11 (parte 2)

Classe Abstrata e Interface

Análise de Sistemas 3º Bimestre (material 2)

Notas de Aula 03: Introdução a Orientação a Objetos e a UML

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 15 PROFª BRUNO CALEGARO

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Diagrama de Casos de Uso

Unidade 2 Modelo Conceitual

UML LINGUAGEM DE MODELAGEM UNIFICADA Diagrama de Classes

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

BANCO DE DADOS I. Prof. Luiz Antônio Vivacqua C. Meyer

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Linguagem de Programação II Herança

Ciência da Computação. Análise e Projeto Orientado a Objetos UML. Anderson Belgamo

Modelagem semântica permite aproximar o modelo obtido do mundo real Exemplo de modelos:

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Análise e Projeto de Software Parte I. Marcos Dósea

Instituto de Informática Estrutura de Dados II

04/11/2016 UML. Prof. Esp. Fabiano Taguchi DIAGRAMAS DE CLASSE

Rafael B. Pereira (

Linguagem de Programação II Implementação

POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos

Lista Diagrama de Casos de Uso

UML. Adriano J. Holanda 21/3/

Modelo do Mundo Real. Abstração. Interpretação

Herança Tiago Eugenio de Melo

Engenharia de Software Orientada a objetos. Prof. Rogério Celestino dos Santos

INF1013 MODELAGEM DE SOFTWARE

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Conteúdo desta aula. Importância da AOO Conceito de Abstração Introdução à UML Introdução ao diagrama de classes

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Processo Unificado. Viviane Torres da Silva

1 Introdução e Conceitos básicos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

POO29004 Programação Orientada a Objetos

UML. Diagrama de Classes

Orientação a Objetos. Leonardo Gresta Paulino Murta.

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Modelagem Conceitual e o Modelo Entidade-Relacionamento

Transcrição:

Diagrama de Classes Viviane Torres da Silva viviane.silva@ic.uff.br http://www.ic.uff.br/~viviane.silva/2010. 2/es1

O que é? Diagrama mais utilizado da UML Representa os tipos (classes) de objetos de um sistema Propriedades desses tipos Funcionalidades providas por esses tipos Relacionamentos entre esses tipos Pode ser mapeado diretamente para uma linguagem orientada a objetos Ajuda no processo transitório dos requisitos para o código Pode representar visualmente o código do sistema

Idéia geral Caixas representando as classes Linhas representando os relacionamentos

Classes As classes são representadas por caixas contendo Nome (obrigatório) Lista de atributos Lista de operações Pedido Pedido -data: Date -numero: int -valor: Money +finaliza() Nome Atributos Operações

Propriedades Classes são descritas via suas propriedades Primitivas: representadas como atributos Compostas: representadas como associações para outras classes Quando transformadas para código, as propriedades se tornam sempre campos da classe Atributos Cliente -nome: String -endereco: String Pedido -data: Date -numero: int -valor: Money Associações

Atributos Visibilidade Nome Tipo Multiplicidade Valor padrão - endereco : String[1] = Sem Endereço

Atributos: Visibilidade Privado (-) Somente a própria classe pode manipular o atributo Indicado na maioria dos casos Pacote (~) Qualquer classe do mesmo pacote pode manipular o atributo Protegido (#) Qualquer subclasse pode manipular o atributo Publico (+) Qualquer classe do sistema pode manipular o atributo - endereco : String

Atributos: Nome e tipo O nome do atributo corresponde ao nome que seráutilizado no código fonte É aceitável utilizar nomes com espaço e acentos na fase de análise O tipo do atributo corresponde ao tipo que seráutilizado no código fonte Tipos primitivos da linguagem Classes de apoio da linguagem (String, Date, Money, etc.) - endereco : String

Atributos: Multiplicidade Representa o número de elementos de uma propriedade Estrutura X..Y onde Opcional: X = 0 Mandatório: X = 1 Somente um valor: Y = 1 Multivalorado: Y > 1 Valores clássicos 0..1 1 (equivalente a 1..1 default) *(equivalente a 0..*) 1..* - endereco : String[0..3]

Associação Utilizada para relacionar duas classes Sóas classes que estão relacionadas são as classes cujos objetos podem se comunicar Identifica o papel das classes na associação Empregado gerente 0..1 subordinado 1..* 0..*

Atributos de uma associação Nome Nome da associação Papéis Papéis das classes que estão relacionadas pela associação O papel da classe A éo nome do atributo que a classe B possui que guarda o objetivo da classe A Multiplicidades Quantidades de objetos associados a um papel Navegabilidade Indica a direção da relação entre as classes Cliente -nome: String -endereco: String -pedidosfechados 0..* Pedido -data: Date -numero: int -valor: Money +finaliza()

Operações ou métodos Operações são descritas via Visibilidade Nome Lista de parâmetros Tipo de retorno + finaliza(data : Date) : Money

Operações: Visibilidade Valem as mesmas regras de visibilidade de atributos Privado (-) Funcionalidades de apoio à própria classe Pacote (~) Funcionalidades de apoio a outras classes do pacote (ex. construção de um componente) Protegido (#) Funcionalidades que precisam ser estendidas por outras classes (ex. construção de um framework) Publico (+) Funcionalidades visíveis por todas as classes do sistema + finaliza(data : Date) : Money

Operações: Nome e tipo de retorno Valem as mesmas regras já vistas para atributos... Normalmente o nome de uma operação éformado por um verbo (opcionalmente seguido de substantivo) A ausência de um tipo de retorno indica que a operação não retorna nada (i.e., void) + finaliza(data : Date) : Money

Operações: Lista de parâmetros A lista de parâmetros pode ser composta por zero ou mais parâmetros separados por vírgula Parâmetro: [direção] nome : tipo [= valor padrão] Nome Tipo Primitivo Classe Valor padrão (opcional) + finaliza(data : Date) : Money

Análise x Design Em análisenãose atenha aos detalhes mas em designsim Visibilidade Navegabilidade Tipo Visibilidade pública em propriedades Assume campo privado e métodos de acesso (gete set) Operações Somente as responsabilidades obvias das classes

Código: Classes + Associação public class Cliente { private String nome; private String endereco; private Pedido[] pedidosfechados; } public class Pedido { private Date data; public Integer numero; private Money valor; public void finaliza() { } } Cliente -nome: String -endereco: String -pedidosfechados 0..* Pedido -data: Date +numero: Integer -valor: Money +finaliza()

Palavras-chave, propriedades e restrições Apóiam a linguagem gráfica com informações textuais Permitem dar mais semântica aos elementos do modelo Notação de palavra-chave (estereotipos) Textual: <<palavra>> (ex.: <<interface>>) Icônica: imagem representando a palavra-chave Notação de propriedades e restrições {propriedade} (ex.:{readonly}) só operação de leitura {nome = valor} (ex.:{versão = 1.0} {restrição} (ex.:{mãe deve ser do sexo feminino}) +mae <<entity>> Pessoa +nome: String {readonly, versao = 1.0} +filho

Propriedades de atributos e associações Alguns exemplos... {readonly} Somente oferece operações de leitura {ordered}, {unordered} Indica se o atributo ou associação multivalorado mantém a seqüência dos itens inseridos {unique}, {nonunique} Indica se o atributo ou associação multivalorado permite repetição - endereco : String = Sem Endereço {readonly}

Propriedades de operações {query} Não modifica o estado do sistema após a execução {sequential} A instância foi projetada para tratar uma thread por vez, mas não é sua responsabilidade assegurar que isso ocorra {guarded} A instância foi projetada para tratar uma thread por vez, e ésua responsabilidade assegurar que isso ocorra (ex.: metodos synchronized em Java) {concurrent} A instância é capaz de tratar múltiplas threads concorrentemente

Outros relacionamentos entre classes Além das associações, alguns outros tipos de relacionamentos são importantes Generalização Realização Composição Agregação Dependência Classes de associação

Generalização Visa estabelecer relações entre tipos Leitura: éum Se Gerente é um Funcionário Todas as operações e propriedades (não privadas) de Funcionário vão estar disponíveis em Gerente Toda instância de Gerente pode ser utilizada aonde se espera instâncias de Funcionário Gera o efeito de herança e polimorfismo quando mapeado para código Funcionário Gerente

Realização Visa estabelecer relações entre tipos Leitura: implementa Éutilizada entre uma classe e uma interface Se Carro implementa Veículo Todas as operações definidas em Veículos devem ser implementadas em Carro Carro pode utilizar os atributos definidos em Veículo (que sempre são constantes). Veículo Carro

Código: Generalização e Realização Generalização public class Funcionario{... } public class Gerente extends Funcionario{... } Realização publicclassveículo {... } public class Carro implements Veículo {... } Funcionário Veículo Gerente Carro

Agregação Éuma associação com a semântica de contém Serve como uma relação todo-parte fraca O todo existe sem as partes As partes existem sem o todo Carro +passageiros 0..5 Pessoa

Código: Agregação public class Pessoa { } public class Carro implements Veículo { } public Pessoa[5] passageiros; Qual éa diferença entre agregação e associação no código? Nenhuma. Carro +passageiros 0..5 Pessoa

Composição Éuma associação com a semântica de écomposto de Serve como uma relação todo-parte forte As partes não existem sem o topo As partes pertencem a somente um todo A remoção do todo implica na remoção das partes Carro 1..* +peças Peça

Código: Composição public class Carro implements Veículo { public Pessoa[5] passageiros; public Peça[] peças; } public class Peça { } Qual é a diferença entre composição e associação no código? Na declaração das classes, métodos e atributos, nenhuma. A diferença estána implementação dos métodos de destruição do todo e de criação das partes Carro 1..* +peças Peça

Dependência Deixa explícito que mudanças em uma classe podem gerar conseqüências em outra classe Exemplos: Uma classe chama métodos de outra (método 3) Uma classe tem operações que retornam outra classe (método 2) Uma classe tem operações que esperam como parâmetro outra classe (método 1) Outros relacionamento (ex.: associação com navegação) implicitamente determinam dependência A +metodo1(b: B) +metodo2(): B +metodo3() Leitura: classe A depende da classe B B +metodo()

Código: Dependência public class B { } public void metodo() { } publicclassa { }} publicvoidmetodo1(b b) {...} publicb metodo2() {...} public void metodo3() { B b; b = newb(); b.metodo(); A +metodo1(b: B) +metodo2(): B +metodo3() O relacionamento de dependência não é visível na definição dos atributos da classe, e sim nos métodos. B +metodo()

Classes de associação Permitem a adição de informações em uma associação Devem ser transformadas em classes comuns posteriormente para viabilizar implementação Cliente -nome: String -endereco: String 0..* 0..* Loja Qual o valor total gasto por um cliente em cada loja? Cliente -nome: String -endereco: String 0..* 0..* Loja Cadastro +valortotalgasto Cliente -nome: String -endereco: String Cadastro 1 0..* +valortotalgasto 0..* 1 Loja

Propriedades e operações estáticas Propriedades que não são instanciadas nos objetos Operações que atuam somente sobre propriedades estáticas Ambos são acessados diretamente na classe Ex.: Pedido.getProximoNumero() Não é necessário um objeto para acessar a propriedade São sublinhadas no diagrama Pedido -data: Date -numero: int -valor: Money +finaliza() +getproximonumero(): int

Propriedades derivadas São propriedades que na verdade não existem como atributos ou associações Podem ser inferidas por outras propriedades da classe Éinteressante explicitar através de nota ou restrição a fórmula de derivação São marcadas com o símbolo / Período +inicio: Date +fim: Date +/duracao: int duração = fim - início

Classes e operações abstratas Classes que não podem ter instâncias Usualmente têm operações abstratas, ou seja, sem implementação Suas subclasses usualmente são concretas Implementam métodos com comportamentos específicos para as operações abstratas Utilizam nome em itálico Animal +fala()

Interfaces Uma classe sem nenhuma implementação Todas operações são abstratas Faz uso da palavra-chave <<interface>> Pode ser representado também como um ícone O relacionamento de realização indica as classes que implementam a interface Equivalente a generalização <<interface>> List +get(position:int)() <<interface>> List +get(position:int)() ArrayList ArrayList ArrayList List +get(position:int)()

Pacotes Em algumas situações se deseja ter uma visão geral das partes do sistema Para isso, o diagrama de pacoteséa ferramenta indicada Pacotes agregam classes e outros pacotes Dependências podem ser inferidas indiretamente Exemplo Classe C1 pertence ao pacote P1 Classe C2 pertence ao pacote P2 Classe C1 depende da classe C2 Logo, pacote P1 depende do pacote P2

Pacotes <<interface>> policies::archtracepolicy +getdescription(): String +getrationale(): String herança <<interface>> policies::posttracepolicy +execute(trace: Trace, action: byte) <<interface>> policies::pretracepolicy +execute(trace: Trace, action: byte) policies builtin::denyimmutableaetracepolicy +execute(trace: Trace, action: byte) +getdescription(): String +getrationale(): String <<import>> builtin::removeancestrytracespolicy +execute(trace: Trace, action: byte) +getdescription(): String +getrationale(): String builtin::denyremovalfrombranch +execute(trace: Trace, action: byte) +getdescription(): String +getrationale(): String builtin

Dicas Inicie com um diagrama simples O que normalmente tem em todo diagrama Classes Atributos Operações Associações Use os demais recursos da linguagem somente quando for realmente necessário

Dicas: Possíveis candidatos Classes Entidades externas que produzem ou consomem informações (ex.: sistema de validação do cartão de crédito) Coisas que são parte do problema e que são informações compostas (ex.: Produto) Eventos que ocorrem durante a operação do sistema (ex.: Pedido) Papeis que interagem com o sistema (ex.: Cliente) Unidades organizacionais relevantes (ex.: Rede de lojas) Lugares que fornecem o contexto do problema ou do sistema (ex.: Loja) Estruturas definidas no problema (ex.: Estoque)

Dicas: Possíveis candidatos Atributos Informação primitiva que precisa ser memorizada (ex.: Preço) Associações A classe A precisa se relacionar com a classe B para atender a operações específicas (ex.: Cliente Pedido) Operações Funcionalidades que devem ser providas por uma classe para viabilizar o uso do sistema (ex.: calculatotal em Pedido)

Dicas: Possíveis candidatos Atributos Informação primitiva que precisa ser memorizada (ex.: Preço) Associações A classe A precisa se relacionar com a classe B para atender a operações específicas (ex.: Cliente Pedido) Operações Funcionalidades que devem ser providas por uma classe para viabilizar o uso do sistema (ex.: calculatotal em Pedido)

Exemplo Uma loja que vende roupas possui um sistema capaz de controlar a venda e o estoque. Cada roupa possui um preço, um código e uma descrição. Um roupa pode possuir vários exemplares. Cada exemplar tem um tamanho e uma cor associados. Os clientes da loja são cadastrados pelo nome e quando a venda érealizada, o sistema guarda informação de qual(is) foi(foram) o(s) exemplar(es) vendido(s) para o cliente.

Exemplo 2 Um sistema de gerenciamento de submissões pode gerenciar vários eventos ao mesmo tempo. Cada evento possui um único gerente, vários revisores, vários autores e écomposto por um conjunto de artigos submetidos para o evento. Um mesmo artigo sópode ser submetido para um único evento. Todas as pessoas que acessam um sistema de gerenciamento de submissões de artigos possuem um nome, uma instituição àqual pertencem, um email, um logine uma senha. Um artigo tem um autor que escreveu o artigo, possui um título, um resumo, um corpo de texto e uma área. Note que um autor pode ter escrito vários artigos. Todo artigo tem no mínimo 2 e no máximo 4 revisores. Cada revisor, que estáassociado a uma única área, pode fazer a revisão de até3 artigos. A revisão de um artigo feita por um revisor contém uma nota dada pelo revisor e um comentário. Faça um diagrama de classes que represente o sistema de submissão. Preocupe-se com o nome das classes, os atributos, os tipos das relações entre as classes e as multiplicidades. Não énecessário modelar os métodos.

Bibliografia Fowler, Martin. 2003. UML Distilled: A Brief Guide to the Standard Object Modeling Language. 3rd ed. Addison-Wesley Professional. Pressman, Roger. 2004. Software Engineering: A Practitioner's Approach. 6th ed. McGraw-Hill. Várias transparências foram produzidas por Leonardo Murta http://www.ic.uff.br/~leomurta