Diagramas de Classes

Frank Coelho de Alcantara -2020    

Classes

Uma classe é uma abstração para todos os objetos com as mesmas características.

Objetos são criados a partir de uma classe, mas são definidos por sua identidade, estado e comportamento.

Identidade

A identidade de um objeto é determinada por um identificador único aquele objeto.

Por exemplo: podemos usar o cpf como identificador único de pessoas no Brasil.

Um campo que seja exclusivo de um objeto, e apenas deste objeto.

Estado

O estado de um objeto, em um instante do tempo, é determinado por todos os valores das suas propriedades.

A palavra propriedade pode ser substituída por atributos.

O estado de um objeto é uma propriedade dinâmica e depende do estado de todos os objetos em um dado instante.

Comportamento

O comportamento de um objeto é determinado pela forma como ele reage a uma troca de informações.

As informações são trocadas por meio de métodos que permitem, ou não, acesso as propriedades do objeto.

O estado da máquina em um determinado instante é consequência do comportamento de todos os objetos na memória.

Instância

A instância é o espaço de memória utilizado para criar um dos objetos definido pela classe.

Uma instância, é um objeto com valores nos campos e com métodos disponíveis.

A classe é apenas o mapa que usamos para instanciar objetos em memória.

Encapsulamento

A arte de deixar a vista apenas o indispensável.

Todo o estado da máquina depende da troca de informações. Podemos controlar este estado, controlando informações.

Usamos para isso os conceitos de abstração e visibilidade.

Só para lembrar: usamos a palavra abstrato para indicar componentes que mantém características comuns.

Generalização

A classe abstrata, superclass, contém os métodos e propriedades que são comuns a outras classes.

A classe concreta, subclass, herda estes métodos e propriedades.

Este processo de aproveitamento de características de uma classe em outra é chamada de herança e não é raro que remeta a uma estrutura hierárquica.

Não é raro usarmos classe abstrata como classe pai, e classe concreta como classe filho.

Representação

Diagrama de Classes mostrando herança simbolizada por uma seta com a ponta aberta indo do filho para o pai

Usamos setas com a ponta aberta, indo da concreta para a abstrata indicando generalização por herança.

Classe

Diagrama de Classes mostrando cada símbolo usado na representação
A única coisa que faltou são observações. Para tal, seguimos os padrões anteriores.

Definições

Privado: a propriedade ou método não pode ser visto por outras classes.

Público: a propriedade ou método está acessível para todas as classes.

Protegido: a propriedade ou método está acessível para todas as classes concretas, herdeiras da classe abstrata.

Estático: Existe uma instância e é compartilhada por todos os objetos.

Associação

Associação: entre duas ou mais classes, uma representação da abstração entre as classes.
associação entre as classes banco e conta
Associação direta: representa uma relação de propriedade aponta para o possuído.
associação entre as classes banco e conta

Associação

Multiplicidade: podemos indicar quantas instâncias existem em uma dada associação.
associação entre as classes banco e conta
Associação reflexiva: ocorre quando o objeto de negócio representado pela classe tem várias funções.
associação entre as classes banco e conta

Multiplicidade

Representação Significado
$0..*$ Nenhuma ou muitas
$0..1$ ou $1$ Nenhuma ou uma
$1..*$ Uma ou muitas
$3..5$ três, quatro ou cinco

Agregação

Agregação: usamos para representar uma relação entre o todo e a parte.
agregação entre holding e empresas

Agregação ocorre quando uma classe é uma coleção de outras classes, porém o ciclo de vida da classe contida não depende da classe que a contém

Composição

Composição: usamos para representar uma relação entre o todo e a parte.
agregação entre holding e empresas

A composição indica um relacionamento forte. Não existe a parte se não existir o todo. A agregação pode ser substituida pela associação. A composição não.

Generalização / especialização

Composição: usamos para representar uma relação entre abstrato e concreto.

agregação entre holding e empresas

Esta é a relação de herança onde uma classe herda métodos e propriedades de outra classe. Os objetos poderão usar métodos tanto da classe concreta quanto da classe abstrata.

Generalização / especialização

Usamos a generalização quando existe uma quantidade significativa de informação compartilhada por dois, ou mais objetos de negócio.

A generalização permite a uniformidade do tratamento para todas as informações comuns.

Do ponto de vista do negócio, facilita o entendimento das relações entre as entidades envolvidas.

Do ponto de vista do código, permite a uniformidade, reaproveitamento e segurança do código.

Dependência

Dependência: usamos a dependência para indicar uma relação de invocação. O uso de um objeto por outro.
Relação de dependência entre classes

Qualquer alteração na classe que dispara a ação de dependência pode afetar a classe disparada.

Sintaxe

Relação de dependência entre classes

Estes são todos os símbolos que precisamos para criar um diagrama de classes. O problema não está na sintaxe. O problema está na semântica.

Exemplo

Exemplo de diagrama de classes

Exercício Prático

Vamos tentar chegar a um diagrama de classes clicando aqui

Material de apoio

Você pode baixar o material de apoio clicando aqui

Obras Citadas

BAUSOLA, D. Activity Diagram. zeroinfluence, 2012. Disponível em: http:zeroinfluence.wordpress.com/uml. Acesso em: 04 Ago. 2020.
BECK, Kent et. Al. Manifesto para Desenvolvimento Ágil de Software. 2001. Disponível em: https://agilemanifesto.org/iso/ptbr/manifesto.html . Acesso em: 10 ago 2020.
BECK, Kent e ANDRES, Cynthia. Extreme Programming Explained. 2012.Boston, MA. USA. Addison Wesleyt. 2º Edição.
SOMMERVILLE, I. Engenharia de software. São Paulo, SP. Brasil: Pearson , 2012.
UNHELKAR, B. Software Engineering with UML. Boca Raton, FL. USA: Taylor & Francis Group, LLC, 2018.