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
CarroeMotor. - A classe
Carrotem atributos comomarca,modelo,ano,cor, e métodos comoacelerar,frear. - A classe
Motortem atributos comopotenciaetipo, além de métodos comoligarMotoredesligarMotor.
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
Carropode ter várias rodas (4, neste caso), mas cadaRodapertence a um únicoCarro. - A relação 1:N é representada por "1" no lado do
Carroe "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
Carromantém suas características e métodos relacionados à condução. - A classe
Motoristatem atributos comonome,cnh(Carteira Nacional de Habilitação), eidade, além de métodos comodirigireestacionar. - 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
CarroEletricoherda deCarroe tem um atributo específicoautonomiaBateriae um métodocarregarBateria. - A classe
CarroCombustaotambém herda deCarro, com o atributocapacidadeTanquee 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
Carropossui uma ou maisRodas, representando uma relação de agregação. - A notação "o--" indica que a relação é de agregação, onde um
Carropode ter váriasRodas, mas asRodaspodem 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
Carrotem uma composição com a classeMotor, representada pela notação "*--". - Isso indica que um
Carroconté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, eCarroEletricoeCarroCombustaosão subclasses que herdam deCarro. -
Agregações:
-
Carropossui váriasRodas(agregação). Carropode ser dirigido por váriosMotoristas(agregação).-
Composição:
-
Carrocontém exatamente umMotor, que não pode existir sem o carro (composição). -
Associações:
-
Carropode ser dirigido por váriosMotoristas, e umMotoristapode dirigir váriosCarros(associação N:N).
Esse diagrama oferece uma visão abrangente das relações entre as classes no contexto apresentado.