Business Informatics Group
Institute of Software Technology and Interactive Systems
Object-Oriented Modeling
© BIG / TU Wien
Literature
UML @ Classroom:
An Introduction to Object-Oriented Modeling
Martina Seidl, Marion Scholz, Christian Huemer and Gerti Kappel
Springer Publishing, 2015
ISBN 3319127411
§
The lecture is based on the following book:
§ Use Case Diagram
§ Structure Modeling
§ State Machine Diagram
§ Sequence Diagram
§ Activity Diagram
Conteúdo
§
Objetos
§
Classes
§
Atributos
§
Operações
§
Relacionamentos
§
Associação Binária
§
Associação N-ária
§
Classe de Associação
§
Agregação
§
Generalização
§
Creando um diagrama de classes
© BIG / TU Wien
Objeto
§
Indivíduos de um sistema
§
Notações alternativas:
Nome do objeto ClasseAtributo Valor atual Objetos anônimos= não tem nome
Diagrama de Objetos
§
Objetos de um sistema e seus relacionamentos (links)
§
Instantâneo de um objeto em um momento específico do tempo
© BIG / TU Wien
De Objeto para Classe
§
Indivíduos de um sistema frequentemente apresentam características e
comportamentos idênticos
§
Um classe é um plano de construção para um conjunto de objetos
similares de um sistema
§
Objetos são instâncias de classes
§
Atributos:
características estruturais de uma classe
§
Valor diferente para cada instância (= objeto)
§
Operações:
comportamento de uma classe
§
Idênticas para todos objetos de uma classe
à
não são exibidas no diagrama de objetos
Classe
Objeto da classe
Classe
Atributos
© BIG / TU Wien
Sintaxe de Atributos
Sintaxe de Atributos - Visibilidade
§
Quem tem permissão de acessar o atributo
§
+ ... public: todo mundo
§
- ... private: somente o próprio objeto
§
# ... protected: a classe e suas subclasses
© BIG / TU Wien
Sintaxe de Atributos – Atributo Derivado
§
Valor do atributo é derivado de outros atributos
§
age
: calculado a partir da data de nascimento
Sintaxe de Atributos - Nome
© BIG / TU Wien
Sintaxe de Atributos - Tipo
§
Tipo
§
Classes definidas pelo usuário
§
Tipo de dados
§ Tipos de dados primitivos
§ Pré-definidos: Boolean, Integer, UnlimitedNatural, String § Definidos pelo usuário: «primitive»
§ Tipos de dados compostos: «datatype»
§ Enumerações: «enumeration»
Sintaxe de Atributos - Multiplicidade
§
Número de valores que um atributo pode conter
§
Valor default: 1
§
Notação:
[min..max]
© BIG / TU Wien
Sintaxe de Atributos – Valor Default
§
Valor Default
§
Utiizado se o valor do atributo não foi atribuído
explicitamente pelo usuário
Sintaxe de Atributos – Propriedades
§
Propriedades pré-definidas
§
{readOnly}
… valor não pode ser alterado
§
{unique} … duplicatas não são permitidas
§
{non-unique} … duplicatas permitidas
§
{ordered} … ordem fixa dos valores
§
{unordered} … sem ordem fixa dos valores
§
Especificação de atributos
§
Set: {unordered, unique}
§
Multi-set: {unordered, non-unique}
Sintaxe de Operações - Parâmet
ros
§
Notação similar a dos atributos
§
Direção do parâmetro
§
in
… parâmetro de entrada
§ Quando a operação é utilizada, um valor é esperado do parâmetro
§
out
… parâmetro de saída
§ Após a execução da operação, o parâmetro adota um novo valor
§
inout
: parâmetro combinado de
entrada/saída
Sintaxe de Operações - Tipo
Variável de classe e Operação de classe
§ Variável de instância (= atributo de instância): atributos definidos no nível de instância § Variável de classe (= atributo de classe, atributo estático)
§ Definida somente uma vez por classe, ou seja, compartilhada por todas instâncias da classe
§ Por exemplo, contadores do número de instâncias da classe, constantes etc. § Operação de classe (= operação estática)
§ Pode ser utilizada quando nenhuma instância da classe correspondente foi criada
§ Por exemplo, construtores, operações de contagem, funções matemáticas (sin(x)) etc.
§ Notação: nome da variável de classe ou operação de classe sublinhado
Variável de classe
Operação de classe
class Person {
public String firstName; public String lastName; private Date dob;
protected String[] address; private static int pNumber;
public static int getPNumber() {…} public Date getDob() {…}
Especificação de Classes: Níveis Diferentes de Detalhes
© BIG / TU Wien
§
Modela relacionamentos possíveis entre instâncias de classes
Associação
Associação Binária
§
Conecta instâncias de duas classes
Nome da associação Direção de leitura
Não-navegabilidade
Multiplicidade
Papel Visibilidade
© BIG / TU Wien
§
Navegabilidade: um objeto conhece seu objeto parceiro e, portanto,
pode acessar seus atributos e operações visíveis
§
Indicado por uma seta aberta
§
Não-navegabilidade
§
Indicado por um x
§
Exemplo:
§
A
pode acessar os atributos e operações
visíveis de
B
§
B
não pode acessar qualquer atributo ou
operação de
A
§
Navegabilidade indefinida
§
Navegabilidade bidirecional é assumida
Associação Binária - Navegabilidade
Navegabilidade – Padrão da UML Standard vs. Melhor Prática
Associação Binária como Atributo
§
Notação de Java:
Preferívelclass Professor {…}
class Student{
public Professor[] lecturer; …
}
Associação Binária – Multiplicidade e Papel
§
Multiplicidade:
Número de
objetos que podem estar associados com
exatamente um objeto do lado oposto
© BIG / TU Wien
Associação Binária – Restrição
xor
§
Restrição “ou exclusivo”
§
Um objeto da classe
A
está associado com um objeto da classe
B
ou
com um objeto da classe
C
mas não com ambos.
© BIG / TU Wien
Associação n-ária (1/2)
§
Mais de dois objetos parceiros estão envolvidos no relacionamento
§
Sem direção de navegação
Associação ternária
Associação n-ária (2/2)
§
Exemplo
§
(
Student
,
Exam
)
à
(
Lecturer
)
§ Um estudante faz uma prova com um ou nenhum professor
§
(
Exam
,
Lecturer
)
à
(
Student
)
§ Uma prova com um professor pode ser feita por qualquer número de estudantes
§
(
Student
,
Lecturer
)
à
(
Exam
)
§ Um estudante pode ser avaliado por um professor através de qualquer número de provas
© BIG / TU Wien
Classe de Associação
§
Especifica atributos para o relacionamento entre classes em vez de
uma classe específica
§
Necessária quando associações n:m são modeladas
§
Com associações 1:1 ou 1:n é possível mas não obrigatório
Classe de Associação
© BIG / TU Wien
Classe de Associação vs. Classe Regular
Um estudante pode ter múltiplas inscrições para um mesmo programa de estudos
Um estudante pode se inscrever para um mesmo programa de estudos somente uma vez
≠
§
Default:
sem duplicatas
§
non-unique:
duplicatas
permitidas
Classe de Associação –
unique/non-unique
(1/2)
Um estudante pode ter uma única
ocasião de fazer uma prova específica.
Um estudante pode ter mais de uma
© BIG / TU Wien
Classe de Associação –
unique/non-unique
(2/2)
Agregação
§
Forma especial de associação
§
Usada para expressar que uma classe é parte de outra classe
§
Propriedades da agregação:
§
Transitiva
: se
B
é parte de
A
e
C
é parte de
B
,
C
também é parte de
A
§
Assimé
trica
: não é possível para
A
ser parte de
B
e
B
ser parte de
A
simultaneamente.
§
Dois tipos:
§
Agregação compartilhada
© BIG / TU Wien
Agregação Compartilhada
§
Expressa uma relação fraca entre a parte e o todo
= Partes também existem independentemente do todo
§
Multiplicidade do lado agregador pode ser >1
= Um elemento pode ser parte de vários outros elementos simultaneamente
§
Gera um grafo direcionado acíclico
§
Sintaxe:
Losango no lado agregador
§
Exemplo:
§
Student
é parte de LabClass
§
Course
é parte de StudyProgram
Composição
§
Dependência de existência entre o objeto composto e suas partes
§
Uma parte somente pode estar contida em, no máximo, um objeto
composto em dado momento
Multiplicidade no lado agregador é, no máximo, 1
-> Os objetos compostos formam uma árvore
§
Se o objeto composto é apagado, suas partes também são apagadas.
§
Sintaxe: Losango sólido no lado agregador
§
Example:
Beamer
é parte de
LectureHall
é parte de
Building
Se Building é apagado,
LectureHall é apagado também Beamer
pode existir sem
LectureHall, se ele é parte de
© BIG / TU Wien
Agregação Compartilhada e Composição
§
Quais modelos são aplicáveis?
§
Quais modelos são aplicáveis?
Agregação Compartilhada e Composição
Tire pode existir sem Car. Tire pertence a um Car no máximo.
Um Tire não pode existir sem um Car.
Um Tire pode pertencer a vários Cars ----Ye s --- ---No
---Um Car tem um ou dos tipos de Tires. Vários Cars podem ter o mesmo tipo defTires.
----Ye
s
---© BIG / TU Wien
Generalização
§
Características (atributos e operações),
associações e agregações que são
especificadas para uma classe geral
(superclasse) são passadas para suas
subclasses.
§
Cada instância de uma subclasse é também
uma instância indireta da superclasse.
§
Uma subclasse herda todas características,
associações e agregações da
superclasse exceto aquelas privadas.
§
A subclasse pode ter outras características,
associações e agregações.
§
Generalizações são transitivas.
Superclasse
Subclasses herdam características,
associações e agregações
Uma Secretary é um Employee e uma Person
§
Usada para destacar características comuns das subclasses.
§
Usada para garantir que não existam instâncias da superclasse.
§
Somente subclasses não-abstratas podem ser instanciadas.
§
Útil no contexto do relacionamento de generalização
§
Notação: Palavra-chave {abstract} ou nome da classe
em itálico.
Generalização – Classe Abstrata
Dois tipos de Person: Man e Woman
© BIG / TU Wien
Generalização – Herança Múltipla
§
UML permite herança múltipla.
§
Uma classe pode ter várias superclasses.
§
Exemplo:
Um Tutor é um Employee e um Student
© BIG / TU Wien
Criando um Diagrama de Classes
§
Não é possível extrair classes, atributos e associações a partir de um
texto em linguagem natural de forma completamente automática.
§
Diretrizes
§
Substantivos frequentemente indicam classes
§
Adjetivos indicam valores de atributos
§
Verbos indicam operações
§
Exemplo: O sistema de gestão de blibliotecas armazenam usuários
com um ID único, nome e endereço, bem como livros com título, autor
e número ISBN. Ann Foster quer utilizar o sistema da biblioteca.
Exemplo – University Information System
§ A university consists of multiple faculties which are composed of various institutes. Each faculty and each institute has a name. An address is known for each institute. § Each faculty is led by a dean, who is an employee of the university.
§ The total number of employees is known. Employees have a social security number, a name, and an email address. There is a distinction between research and
administrative personnel.
§ Research associates are assigned to at least one institute. The field of study of each research associate is known. Furthermore, research associates can be
involved in projects for a certain number of hours, and the name, starting date, and end date of the projects are known. Some research associates hold courses. Then they are called lecturers.
Exemplo – Passo 1: Identificando Classes
§ A university consists of multiple faculties which are composed of various institutes. Each faculty and each institute has a name. An address is known for each institute.
§ Each faculty is led by a dean, who is an employee of the university.
§ The total number of employees is known. Employees have a social security number, a name, and an email address. There is a distinction between research and
administrative personnel.
§ Research associates are assigned to at least one institute. The field of study of each research associate is known.
Furthermore, research associates can be involved in projects for a certain number of hours, and the name, starting date, and end date of the projects are known. Some research associates hold courses. Then they are called lecturers.
§ Courses have a unique number (ID), a name, and a weekly duration in hours.
Nos modelos os sistema “University“
Dean não tem outros atributos além daqueles de Employee
Exemplo – Passo 2: Identificando os Atributos
§ A university consists of multiple faculties which are composed of various institutes. Each faculty and each institute has a name. An address is known for each institute.
§ Each faculty is led by a dean, who is an employee of the university.
§ The total number of employees is known. Employees have a social security number, a name, and an email address. There is a distinction between research and
administrative personnel.
§ Research associates are assigned to at least one institute. The field of study of each research associate is known.
© BIG / TU Wien
Exemplo – Passo 3: Identificando Relacionamentos (1/6)
§
Três tipos de relacionamento:
§
Associação
§
Generalização
§
Agregação
§
Indicação de generalização
§
“There is a distinction between research
and administrative personnel.”
§
“Some research associates hold courses.
Then they are called lecturers.”
Abstrato, ou seja, não há outros tipo de employees
§
“A university consists of multiple faculties which are composed of
various institutes.”
Exemplo – Passo 3: Identificando Relacionamentos (2/6)
© BIG / TU Wien
§
“Each faculty is led by a dean, who is an employee of the university”
Exemplo – Passo 3: Identificando Relacionamentos (3/6)
Na associação leads, o
Employee desempenha uma papel de dean.
§
“Research associates are assigned to at least one institute.”
Exemplo – Passo 3: Identificando Relacionamentos (4/6)
Agregação compartilhada para mostrar que
© BIG / TU Wien
§
“Furthermore, research associates can be involved in projects for a
certain number of hours.”
Exemplo – Passo 3: Identificando Relacionamentos (5/6)
Classe de associação permite armazenar o número de horas para cada Project
de cada ResearchAssociate
§
“Some research associates hold courses. Then they are called
lecturers.”
Exemplo – Passo 3: Identificando Relacionamentos (6/6)
Lecturer herda todas as características, associações e agregações de
ResearchAssociate.
Além disso, Lecturer está envolvido
Exemplo – Diagrama de Classes Completo
Geração de Código
§
Diagramas de classes são frequentemente criados com o
objetivo de permitir a implementação dos elementos modelados
em uma linguagem de programação orientada a objetos.
© BIG / TU Wien
Exemplo – Geração de Código (1/6)
class Course {
public int courseNo; }
class Course {
public int courseNo;
}
class Course {
public int courseNo;
}
class Course {
public int courseNo; }
Exemplo – Geração de Código (2/6)
abstract class UniversityMember { public String firstName;
public String lastName; public int ssNo;
}
abstract class UniversityMember { public String firstName;
public String lastName; public int ssNo;
}
abstract class UniversityMember { public String firstName;
public String lastName; public int ssNo;
}
abstract class UniversityMember { public String firstName;
public String lastName; public int ssNo;
© BIG / TU Wien
Exemplo – Geração de Código (3/6)
Enumeration ESemester { winter,
summer }
Enumeration ERole { lecturer,
tutor, examiner }
Enumeration ESemester { winter,
summer }
Enumeration ESemester { winter,
summer }
Enumeration ERole { lecturer,
tutor, examiner }
Exemplo – Geração de Código (4/6)
class Student extends UniversityMember {
public int matNo;
public CourseExecution [] completedCourses;
}
class Student extends UniversityMember {
public int matNo;
public CourseExecution [] completedCourses;
}
class Student extends UniversityMember {
public int matNo;
public CourseExecution [] completedCourses;
}
class Student extends UniversityMember {
public int matNo;
public CourseExecution [] completedCourses;
}
class Student extends
UniversityMember { public int matNo;
© BIG / TU Wien
Exemplo – Geração de Código (5/6)
class Employee extends UniversityMember { private int acctNo;
public int getAcctNo { return acctNo;
}
public CourseExecution [] courseExecution; }
class Employee extends UniversityMember {
private int acctNo;
public int getAcctNo { return acctNo;
}
public CourseExecution [] courseExecution;
}
class Employee extends UniversityMember {
private int acctNo;
public int getAcctNo { return acctNo;
}
public CourseExecution [] courseExecution; }
class Employee extends UniversityMember { private int acctNo;
public int getAcctNo { return acctNo;
}
public CourseExecution [] courseExecution; }
class Employee extends UniversityMember { private int acctNo;
public int getAcctNo { return acctNo;
}
public CourseExecution [] courseExecution;
}
class Employee extends UniversityMember { private int acctNo;
public int getAcctNo () { return acctNo;
}
public CourseExecution [] courseExecutions; }
Exemplo – Geração de Código (6/6)
class CourseExecution { public int year;
public ESemester semester; public Student [] student; public Course course;
public Hashtable support; // Key: employee
// Value: (role, hours) }
class CourseExecution {
public int year;
public ESemester semester; public Student [] student; public Course course;
public Hashtable support; // Key: employee
// Value: (role, hours)
}
class CourseExecution {
public int year;
public ESemester semester; public Student [] student; public Course course;
public Hashtable support; // Key: employee
// Value: (role, hours) }
class CourseExecution { public int year;
public ESemester semester;
public Student [] student; public Course course;
public Hashtable support; // Key: employee
// Value: (role, hours) }
class CourseExecution { public int year;
public ESemester semester;
public Student [] student;
public Course course;
public Hashtable support; // Key: employee
// Value: (role, hours) }
class CourseExecution { public int year;
public ESemester semester; public Student [] student;
public Course course;
public Hashtable support; // Key: employee
// Value: (role, hours) }
class CourseExecution { public int year;
public ESemester semester; public Student [] student; public Course course;
public Hashtable support; // Key: employee
// Value: (role, hours)
}
class CourseExecution { public int year;
public ESemester semester; public Student [] student; public Course course;
public Hashtable support; // Key: employee
© BIG / TU Wien
Nome
Notação
Descrição
Classe
Descrição da estrutura e do
comportamento de um conjunto de
objetos
Classe Abstrata
Classe que não podem ser
instanciadas
Associação
Relacionamento entre classes:
navegabilidade indefinida,
navegabilidade em ambas direções,
não navegável em uma direção
Elementos de Notação (1/3)
oder
Nome
Notação
Descrição
Associação
n-ária
Relacionamento entre n (aqui 3)
classes
Classe de
Associação
Descrição mais detalhada de uma
associação
Relacionamento
xor
Um objeto de
C
se relaciona com
um objeto de
A
ou com um objeto
de
B
mas não com ambos
© BIG / TU Wien