JayCesar / generation-bootcamp

[💻 Bootcamp ] Um programa de estudos de 3 meses da Generation Brasil, sendo cada qual destinado a diferentes tecnologias.
4 stars 0 forks source link

Programação Orientada a Objetos (POO) - Parte 2 #15

Closed JayCesar closed 1 year ago

JayCesar commented 1 year ago

Tipos de relacionamento entre classes em Java

Existem três tipos de relacionamentos mais comuns entre classes em Java que são os seguintes:

A associação é ainda classificada em 2 categorias:

Representação visual: image

📌Relação de Herança ("É-Um" / "Is-A")

classDiagram
Pessoa <|-- Professor : É uma
Pessoa <|-- Aluno : É uma

A herança estabelece um relacionamento entre uma classe mais genérica e abstrata (conhecida como superclasse) e uma classe mais especializada (conhecida como subclasse).

Em outras palavras, define o relacionamento entre duas classes em que uma classe "estende" outra classe, ou simplesmente cria um Relacionamento do tipo É-Um (Is-A).

📌Relação de Dependência (“Use-A” / "Usa um")

Quando criamos um objeto de uma classe dentro de um método de outra classe, esse relacionamento é chamado de relacionamento de dependência em Java, ou simplesmente relacionamento Usa-Um (Use-A).

classDiagram
Produto <.. Carrinho : Depende de

Em outras palavras, quando um método de uma classe usa um objeto de outra classe, ele é chamado de dependência em Java. É o relacionamento mais óbvio e mais geral em java.

No Diagrama acima, em um aplicativo de comércio eletrônico, a classe Carrinho depende da classe Produto porque a classe Carrinho usa a classe Produto como parâmetro para uma operação de adição de itens.

📌Relacionamento de Associação (“Has-A” / "Tem um")

classDiagram
Aluno <-- Professor : Tem um ou mais

A associação é outro tipo de relacionamento fundamental entre classes, que é informalmente conhecido como relacionamento “Tem-Um” (Has-A).

Quando um objeto de uma classe é criado como Atributo de uma outra classe, ele é chamado de relacionamento de associação em java ou simplesmente um Relacionamento do tipo Tem-Um.

Importante:

Neste tipo de relacionamento é importante definir também as cardinalidades, ou seja, o numero de Objetos que podem se relacionar com outros Objetos. Existem basicamente 3 tipos de cardinalidades:

- One to One: Um Objeto tem relação com apenas Nenhum ou Um Objeto; - One to Many / Many to One: Um Objeto tem relação com Nenhum, Um ou Mais Objetos; - Many to Many: Muitos Objetos tem relação com Muitos Objetos.

Existem dois tipos de relacionamento de Associação especiais, que são os seguintes:

- Agregação: Uma agregação é uma forma especial de associação que representa um relacionamento de propriedade entre dois objetos, ou seja, dois objetos agregados têm seus próprios ciclos de vida, mas um dos objetos é o proprietário do relacionamento Tem-Um.

O objeto proprietário é chamado de objeto agregador e sua classe é chamada de classe agregadora. A classe agregadora tem uma referência a outra classe e é a proprietária dessa classe. Ter seu próprio relacionamento significa que destruir um objeto não afetará outro objeto.

classDiagram
Departamento o-- Professor : contém

No exemplo acima, um Objeto Departamento contém diversos Objetos Professor e ele é o proprietário do Relacionamento. Os Objetos Professor continuam existindo mesmo que o Objeto Departamento seja destruído.

As palavras chaves usadas para identificar uma agregação são: "consiste em", "contém", "é parte de".

Composição : Uma composição é uma forma especial e mais restritiva de agregação. Ele também representa o relacionamento Tem-Um em que um objeto não pode existir por conta própria. O “todo” é realmente dependente da “parte”.

Em outras palavras, dois objetos compostos não podem ter seu próprio ciclo de vida. Ou seja, um objeto composto não pode existir por conta própria. Se um objeto composto for destruído, todas as suas partes também serão excluídas. Veja o exemplo abaixo:

classDiagram
Universidade *-- Departamento : é composta por

Por exemplo, uma Universidade é composta por vários Departamentos. Um Departamento é parte de uma Universidade e não pode existir sem a existência da Universidade, assim como nenhum Departamento pode pertencer a duas Universidades diferentes. Se o Objeto Universidade for destruído, todos os Objetos Departamentos serão destruídos automaticamente.

Polimorfismo

O poliformismo deriva da palavra polimorfo, que significa multiforme, ou que pode variar a forma.

Para a POO, polimorfismo é a habilidade de objetos de classes diferentes responderem a mesma mensagem de diferentes maneiras, ou seja, várias formas de responder à mesma mensagem. O Polimorfismo é a capacidade de um objeto decidir que método aplicar a si mesmo, embora a mensagem possa ser a mesma, os objetos podem responder diferentemente.

Exemplo: image image

Tipos de Polimorfismo

- Polimorfismo de Sobrecarga (Sobrecarga de Método): Sobrecarregar métodos significa ter vários métodos com nomes iguais, mas com as assinaturas diferentes, dentro de uma mesma Classe. Veja o exemplo abaixo:; - Polimorfismo de Sobrescrita: Quando eu 'sobreescrevo' um método de uma classe 'mãe' a partir de outra lógica.


Anotações da aula:

POO é baseada em três princiáis tópicos


O this sempre vai significar o nome da classe em sí

⚠️ Dica: utilize o this mais o método, porque pode ser que em sistemas mais complexos eu não sabia qual método eu estou me referenciando.