Introdução a diagrama de classes e UML Prof. Alexandre Parra Carneiro da Silva [email protected] O que é UML ? A UML (Unified Modeling Language) é uma linguagem para especificação, documentação, visualização e desenvolvimento de sistemas orientados a objetos. Considerada uma das linguagens mais expressivas para modelagem de sistemas orientados a objetos. É possível representar sistemas de diversas perspectivas de visualização. Facilita a comunicação de todas as pessoas envolvidas no processo de desenvolvimento de um sistema: Gerentes; Coordenadores; Analistas e Desenvolvedores. softwares sob Principais Diagramas da UML 2.0 Diagramas Comportamentais Estudo de Caso Transição de Estados Atividades Diagramas Estruturais Objetos Classes Componentes, entre outros... (1/2) Principais Diagramas da UML 2.0 Diagramas de Interação Seqüência Colaboração Tempo (2/2) Diagrama de Classes Diagramas de classe são os diagramas mais comuns encontrados em modelagem de sistemas orientados a objetos. Um diagrama de classe mostra um conjunto de: classes, interfaces e seus relacionamentos. Principal uso: modelar a visão do projeto de um sistema de forma estática. São importantes não somente para visualização, especificação e documentação dos modelos estruturais. Termos e Conceitos de Diagramas de Classes (DC) Uma classe é uma descrição de um conjunto de objetos que compartilham: atributos, operações, relacionamentos e semântica. Graficamente, uma classe é desenhada como um retângulo. Uma classe em DC é composta de três partes: Nome Atributos Métodos O que são: Nome, Atributo e Método Nome: Toda classe deve ter um nome que a distingue de outras. Atributo: é uma propriedade mencionada de uma classe que descreve uma variação de valores que instâncias da propriedade pode conter. A propriedade é compartilhada por todos os objetos desta classe. Método: é a implementação de um serviço que pode ser requerido a partir de qualquer objeto da classe para afetar seu estado. Exemplos de Classe em UML 2.0 School name : String address : String phone : String student : Vector department : Vector addStudent(object : Student) : void removeStudent() : void addDepartment(dep : Department) : void removeDepartment() : void Nome Atributo Operação Notações de Visibilidade em UML 2.0 Encapsulamento: Público (+): Visível para qualquer elemento que possa ver a classe. Protected (#): Visível a outros elementos dentro da classe e de subclasses. Private (-): Visível a outros elementos dentro da classe. Package (~): Visível a elementos do mesmo pacote. Exemplo de Visibilidade superclasse Shape # origin : Point generalização Rectangle - width : float - height : float + resize(ratio : Real) : void + display() : void + move (offset : Point) : void + resize (ratio : Real) : void + display () : void Polygon Circle - radius : float - vertexOffest : Point [ ] + resize(ratio : Real) : void + display() : void + resize(ratio : Real) : void + display() : void sub-classes Relações entre classes Em UML 2.0, as formas que entidades podem conectar a outras, lógica ou fisicamente, são através de relacionamentos. Em Orientação a Objetos, há três tipos de relacionamentos: Dependências Generalizações Associações Relacionamento: Dependência Dependência é um relacionamento que declara que uma entidade (ex: classe Window) usa a informação e serviços de outra entidade (ex: classe Event), mas não necessariamente o inverso. Geralmente se usa dependência para mostrar que uma classe usa operações de outra classe ou usa variáveis ou argumentos de tipo de outra classe. FilmClip dependência name playOn(c : Channel) start() stop() reset() Channel Relacionamento: Generalização É um relacionamento entre um tipo geral de uma entidade (superclasse) e um tipo mais específico desta entidade (subclasse). superclasse Shape origin : Point generalização Rectangle width : float height : float resize(ratio : Real) : void display() : void move (offset : Point) : void resize (ratio : Real) : void display () : void Polygon Circle radius : float vertexOffest : Point [ ] resize(ratio : Real) : void display() : void resize(ratio : Real) : void display() : void sub-classes Relacionamento: Associação É um relacionamento estrutural que especifica que objetos de uma entidade são ligados a objetos de outra entidade. Dada uma associação entre duas classes, você pode relacionar objetos de uma classe a objetos de outra classe. Person trabalha para associação Company Relacionamento: Associação (função) associação Person Company employee employer função/cargo Relacionamento: Associação (multiplicidade) multiplicidade Person 1..* * employee employer associação * significa 0..* Company Relacionamento: Agregação Agregação é um tipo especial de associação. Room Quando utilizar AGREGAÇÃO ? Deseja-se modelar um relacionamento “todo/parte”, em que uma classe representa uma entidade completa (todo), composta de outras entidades (partes). todo 1 * parte Wall Relacionamento: Composição (1/2) Composição é uma forma de agregação, contudo dá o sentido de forte posse e tempo de vida entre parte e o todo. O todo é responsável pela disposição de suas partes, ou seja, que o todo deve gerenciar a criação e destruição de suas partes. Ou seja, um objeto pode ser uma parte de somente uma composição por vez. Relacionamento: Composição Window todo 1 * parte Frame (2/2) Relacionamento: Associação com propriedades Em uma associação entre classes, a própria associação pode ter propriedades. Company 1..* * employer Person employee associação Job description dateHired salary Expressando interfaces em UML 2.0 <<interface>> Relogio <<interface>> Radio + setEmissora(emissora,tipoEmi) + getEmissora() + getTipoEmissora() + setVolumeRadio(vol) + getVolumeRadio() + setHorario(horario) + getHorario() + setHorarioAlarme(horario) + getHorarioAlarme(horario) + ligarAlarme() + desligarAlarme() + setVolumeRelogio(vol) + getVolumeRelogio() RadioRelogio - horario - despertar - horarioAlarme - emissora - tipoEmissora - volumeRadio - volumeRelogio Demais Notações em UML 2.0 Como expressar classes abstratas: (1/2) O nome da classe deve ser escrito no estilo itálico. Como expressar métodos abstratos: O nome do método deve ser escrito no estilo itálico. Exemplo de classe e método abstrato superclasse Shape # origin : Point generalização Rectangle - width : float - height : float + resize(ratio : Real) : void + display() : void + move (offset : Point) : void + resize (ratio : Real) : void + display () : void Polygon Circle - radius : float - vertexOffest : Point [ ] + resize(ratio : Real) : void + display() : void + resize(ratio : Real) : void + display() : void sub-classes Demais Notações em UML 2.0 (2/2) Expressar herança simples e múltipla superclasse <<interface>> Relogio Shape <<interface>> Radio # origin : Point generalização + move (offset : Point) : void + resize (ratio : Real) : void + display () : void Rectangle + setEmissora(emissora,tipoEmi) + getEmissora() + getTipoEmissora() + setVolumeRadio(vol) + getVolumeRadio() Polygon Circle - width : float - height : float + resize(ratio : Real) : void + display() : void + setHorario(horario) + getHorario() + setHorarioAlarme(horario) + getHorarioAlarme(horario) + ligarAlarme() + desligarAlarme() + setVolumeRelogio(vol) + getVolumeRelogio() - radius : float - vertexOffest : Point [ ] + resize(ratio : Real) : void + display() : void + resize(ratio : Real) : void + display() : void RadioRelogio - horario - despertar - horarioAlarme - emissora - tipoEmissora - volumeRadio - volumeRelogio sub-classes Herança Simples Herança Múltipla Ferramenta para modelagem UML JUDE http://jude.change-vision.com/jude-web/index.html