Classes
Aqui está um exemplo básico de um diagrama de classe para a classe Carro
usando PlantUML:
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
@enduml
Esse diagrama representa uma classe Carro
com atributos como marca
, modelo
, ano
, cor
, e velocidade
, além de métodos como acelerar
, frear
, ligar
e desligar
.
1:1
Temos um exemplo de diagrama UML com PlantUML para ilustrar uma associação 1:1 entre as classes Carro
e Motor
. Nesse caso, um carro possui um único motor, e cada motor pertence a um único carro.
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
class Motor {
+potencia: int
+tipo: String
+ligarMotor(): void
+desligarMotor(): void
}
Carro "1" -- "1" Motor : possui
@enduml
Neste diagrama, temos:
- Uma associação 1:1 entre
Carro
eMotor
. - A classe
Carro
tem atributos comomarca
,modelo
,ano
,cor
, e métodos comoacelerar
,frear
. - A classe
Motor
tem atributos comopotencia
etipo
, além de métodos comoligarMotor
edesligarMotor
.
A relação é representada por uma linha com "1" em ambos os lados, indicando uma associação 1:1.
1:N
Um exemplo de diagrama UML usando PlantUML para ilustrar uma associação 1:N entre as classes Carro
e Roda
, onde um carro tem várias rodas, mas cada roda pertence a apenas um carro.
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
class Roda {
+tamanho: int
+tipo: String
+girar(): void
+frear(): void
}
Carro "1" -- "4" Roda : possui
@enduml
Neste diagrama:
- A classe
Carro
pode ter várias rodas (4, neste caso), mas cadaRoda
pertence a um únicoCarro
. - A relação 1:N é representada por "1" no lado do
Carro
e "4" no lado daRoda
, indicando que um carro pode ter 4 rodas.
Essa é uma forma simples de representar uma associação 1:N. Você pode ajustar os números para refletir outros casos de uso, como um carro com um número variável de rodas.
N:N
Vamos criar uma nova associação N:N para o exemplo acima, desta vez utilizando as classes Carro
e Motorista
, onde vários carros podem ser dirigidos por vários motoristas, e cada motorista pode dirigir vários carros.
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
class Motorista {
+nome: String
+cnh: String
+idade: int
+dirigir(): void
+estacionar(): void
}
Carro "N" -- "N" Motorista : dirige
@enduml
Neste diagrama:
- A classe
Carro
mantém suas características e métodos relacionados à condução. - A classe
Motorista
tem atributos comonome
,cnh
(Carteira Nacional de Habilitação), eidade
, além de métodos comodirigir
eestacionar
. - A associação N:N indica que um carro pode ser dirigido por vários motoristas, e um motorista pode dirigir vários carros, como poderia ocorrer em uma empresa de locação de veículos ou uma garagem compartilhada.
Essa relação N:N é comum em cenários onde há múltiplos motoristas e múltiplos veículos disponíveis para uso.
Herança
Aqui está uma proposta de herança para o exemplo acima, utilizando as classes Carro
, CarroEletrico
e CarroCombustao
. A classe Carro
é a classe base, e as classes CarroEletrico
e CarroCombustao
herdam suas propriedades e métodos, com características específicas de cada tipo de carro.
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
class CarroEletrico {
+autonomiaBateria: int
+carregarBateria(): void
}
class CarroCombustao {
+capacidadeTanque: int
+abastecer(): void
}
Carro <|-- CarroEletrico
Carro <|-- CarroCombustao
@enduml
Neste diagrama:
- A classe
Carro
é a classe base, contendo atributos e métodos comuns a todos os tipos de carros. - A classe
CarroEletrico
herda deCarro
e tem um atributo específicoautonomiaBateria
e um métodocarregarBateria
. - A classe
CarroCombustao
também herda deCarro
, com o atributocapacidadeTanque
e o métodoabastecer
.
Essa estrutura reflete a especialização de carros em diferentes tipos, aproveitando a herança para compartilhar atributos e métodos comuns.
Agregação
Aqui está um exemplo de diagrama UML em PlantUML para ilustrar uma agregação entre as classes Carro
e Roda
, onde um carro tem rodas, mas as rodas podem existir independentemente de um carro específico.
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
class Roda {
+tamanho: int
+tipo: String
+girar(): void
+frear(): void
}
Carro "1" o-- "N" Roda : possui
@enduml
Neste diagrama:
- A classe
Carro
possui uma ou maisRodas
, representando uma relação de agregação. - A notação "o--" indica que a relação é de agregação, onde um
Carro
pode ter váriasRodas
, mas asRodas
podem existir sem estarem associadas a um carro específico.
Esse modelo reflete a realidade em que rodas podem ser usadas em diferentes carros ou podem ser substituídas, mantendo uma relação de dependência, mas sem um vínculo forte.
Composição
Aqui está um exemplo de diagrama UML em PlantUML para ilustrar uma composição entre as classes Carro
e Motor
, onde um carro tem um motor, e o motor não pode existir independentemente do carro.
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
class Motor {
+potencia: int
+tipo: String
+ligarMotor(): void
+desligarMotor(): void
}
Carro "1" *-- "1" Motor : contém
@enduml
Neste diagrama:
- A classe
Carro
tem uma composição com a classeMotor
, representada pela notação "*--". - Isso indica que um
Carro
contém exatamente umMotor
, e o motor não faz sentido fora do contexto do carro. Se o carro for destruído, o motor também é destruído.
Essa relação é comum em sistemas onde as partes (como o motor) são componentes essenciais do todo (como o carro) e não podem existir independentemente.
Completo
Aqui está um diagrama completo em PlantUML que combina todos os elementos apresentados: associações, agregações, composições e heranças entre as classes Carro
, Motor
, Motorista
, Roda
, CarroEletrico
e CarroCombustao
.
@startuml
class Carro {
+marca: String
+modelo: String
+ano: int
+cor: String
+velocidade: int
+acelerar(): void
+frear(): void
+ligar(): void
+desligar(): void
}
class Motor {
+potencia: int
+tipo: String
+ligarMotor(): void
+desligarMotor(): void
}
class Motorista {
+nome: String
+cnh: String
+idade: int
+dirigir(): void
+estacionar(): void
}
class Roda {
+tamanho: int
+tipo: String
+girar(): void
+frear(): void
}
class CarroEletrico {
+autonomiaBateria: int
+carregarBateria(): void
}
class CarroCombustao {
+capacidadeTanque: int
+abastecer(): void
}
Carro <|-- CarroEletrico
Carro <|-- CarroCombustao
Carro "1" o-- "N" Roda : possui
Carro "1" o-- "N" Motorista : dirige
Carro "1" *-- "1" Motor : contém
Carro "N" -- "N" Motorista : dirige
Carro "N" -- "N" Roda : utiliza
@enduml
Explicação do Diagrama:
-
Herança:
-
Carro
é a classe base, eCarroEletrico
eCarroCombustao
são subclasses que herdam deCarro
. -
Agregações:
-
Carro
possui váriasRodas
(agregação). Carro
pode ser dirigido por váriosMotoristas
(agregação).-
Composição:
-
Carro
contém exatamente umMotor
, que não pode existir sem o carro (composição). -
Associações:
-
Carro
pode ser dirigido por váriosMotoristas
, e umMotorista
pode dirigir váriosCarros
(associação N:N).
Esse diagrama oferece uma visão abrangente das relações entre as classes no contexto apresentado.