Introdução a diagrama de classes e UML
Prof. Alexandre Parra Carneiro da [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 softwares sob 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.
Principais Diagramas da UML 2.0 (1/2)
Diagramas Comportamentais Estudo de Caso Transição de Estados Atividades
Diagramas Estruturais Objetos Classes Componentes, entre outros...
Principais Diagramas da UML 2.0 (2/2)
Diagramas de Interação Seqüência Colaboração Tempo
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 : Stringaddress : Stringphone : String student : Vectordepartment : Vector
addStudent(object : Student) : voidremoveStudent() : voidaddDepartment(dep : Department) : voidremoveDepartment() : 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
Shape
# origin : Point
+ move (offset : Point) : void+ resize (ratio : Real) : void+ display () : void
Rectangle
- width : float- height : float
+ resize(ratio : Real) : void+ display() : void
Circle
- radius : float
+ resize(ratio : Real) : void+ display() : void
Polygon
- vertexOffest : Point [ ]
+ resize(ratio : Real) : void+ display() : void
superclasse
generalização
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
name
playOn(c : Channel)start()stop()reset()
Channel
dependência
Relacionamento: Generalização
É um relacionamento entre um tipo geral de uma entidade (superclasse) e um tipo mais específico desta entidade (subclasse).
Shape
origin : Point
move (offset : Point) : voidresize (ratio : Real) : voiddisplay () : void
Rectangle
width : floatheight : float
resize(ratio : Real) : voiddisplay() : void
Circle
radius : float
resize(ratio : Real) : voiddisplay() : void
Polygon
vertexOffest : Point [ ]
resize(ratio : Real) : voiddisplay() : void
superclasse
generalização
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 Companytrabalha para
associação
Relacionamento: Associação (função)
Person Company
associação
employee employer
função/cargo
Relacionamento: Associação (multiplicidade)
* significa 0..*
Person Companyemployee employer
*1..*
associação
multiplicidade
Relacionamento: Agregação
Agregação é um tipo especial de associação.
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).
Room
Wall
1
*
todo
parte
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 (2/2)
Window
Frame
1
*
todo
parte
Relacionamento: Associação com propriedades
Em uma associação entre classes, a própria associação pode ter propriedades.
Company Personemployeeemployer
* 1..*
Job
descriptiondateHiredsalary
associação
Expressando interfaces em UML 2.0
<<interface>>Radio
+ setEmissora(emissora,tipoEmi)+ getEmissora()+ getTipoEmissora()+ setVolumeRadio(vol)+ getVolumeRadio()
<<interface>>Relogio
+ 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 (1/2)
Como expressar classes abstratas: 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
Shape
# origin : Point
+ move (offset : Point) : void+ resize (ratio : Real) : void+ display () : void
Rectangle
- width : float- height : float
+ resize(ratio : Real) : void+ display() : void
Circle
- radius : float
+ resize(ratio : Real) : void+ display() : void
Polygon
- vertexOffest : Point [ ]
+ resize(ratio : Real) : void+ display() : void
superclasse
generalização
sub-classes
Demais Notações em UML 2.0 (2/2)
Expressar herança simples e múltipla
Shape
# origin : Point
+ move (offset : Point) : void+ resize (ratio : Real) : void+ display () : void
Rectangle
- width : float- height : float
+ resize(ratio : Real) : void+ display() : void
Circle
- radius : float
+ resize(ratio : Real) : void+ display() : void
Polygon
- vertexOffest : Point [ ]
+ resize(ratio : Real) : void+ display() : void
superclasse
generalização
sub-classes
RadioRelogio
- horario- despertar- horarioAlarme- emissora- tipoEmissora- volumeRadio- volumeRelogio
<<interface>>Radio
+ setEmissora(emissora,tipoEmi)+ getEmissora()+ getTipoEmissora()+ setVolumeRadio(vol)+ getVolumeRadio()
<<interface>>Relogio
+ setHorario(horario)+ getHorario()+ setHorarioAlarme(horario)+ getHorarioAlarme(horario)+ ligarAlarme()+ desligarAlarme()+ setVolumeRelogio(vol)+ getVolumeRelogio()
Herança Simples
Herança Múltipla
Ferramenta para modelagem UML
JUDE http://jude.change-vision.com/jude-web/index.
html
Top Related