Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Implementar classes de um diagrama UML

Boa noite! Estou fazendo uma atividade da internet que propõe que eu implemente as classes (e aparentemente super classe) de um diagrama UML de uma rede social fictícia, como seria?

2 respostas
solução!

Tibério,

Pesquise por herança.

A herança é um princípio da OOP (programação orientada a objetos) que permite a criação de novas classes a partir de outras previamente criadas. Essas novas classes são chamadas de subclasses, ou classes derivadas; e as classes já existentes,

Exemplo em cima do UML que você comentou:

public class Publication {
    private Date date;
    private User user;
    private String imageURL;
    private boolean archived;

    public boolean archive() {
        return this.archived;
    }
}
public class Post extends Publication {
    private String text;
}

Nesse caso quando você instância a classe Post você herda todas as propriedades e métodos da classe Publication;

Então a classe Post além de text, agora possui (herda) as propriedades date, user, imageURL, archive e o método archive().

Conforme o Douglas falou, herança é um dos conceitos fundamentais da POO (programação orientada a objetos), que baseia-se na idéia de troca de mensagens entre objetos, e possui os seguintes pilares:

  1. Associação: é a relação de comunicação entre objetos que estabelece menor vínculo. Usada para indicar que dois objetos precisam comunicar-se um com o outro. Implica direção e cardinalidade, mas não implica uma relação hierárquica entre os tipos.
        class Student {
            // ...
        }
    
        class Instructor {
            private Set<Student> students;
            // ...
        }

    Existem dois subtipos de associações mais específicos:

    • Agregação: a parte pode existir independente do todo
    • class Engine {
          // ...
      }
      
      class Car {
          private Engine engine;
          // ...
      }
    • Composição: a parte não pode existir sem o todo
    • class Head {
          // ...
      }
      
      class Body {
          private Head head;
          // ...
      }
  2. Delegação: uma forma de deferir a implementação de um comportamento a outro objeto, de forma a reutilizar sua implementação e, ou, mudar dinamicamente o comportamento mantendo uma mesma interface. Algumas linguagens, como Kotlin, possuem mecanismos que simplificam a delegação. É muito comum em padrões como Visitor, Observer e Strategy.
  3. Polimorfismo: estabelece uma relação dinâmica em tempo de execução entre uma interface e uma implementação, de forma a permitir múltiplos comportamentos distintos para uma mesma assinatura, a depender dos tipos concretos de objetos envolvidos.
    public interface Playable {
        void play();
    }
    
    public class Violin implements Playable {
        @Override
        public void play() {
            System.out.println("violino");
        }
    }
    
    public class Guitar implements Playable {
        @Override
        public void play() {
            System.out.println("violão");
        }
    }
    
    public class Piano implements Playable {
        @Override
        public void play() {
            System.out.println("piano");
        }
    }
    
    public class Orchestra implements Playable {
        private List<Playable> instruments;
        // ...
        @Override
        public void play() {
            instruments.forEach(Playable::play);
        }
    }
    
  4. Herança: uma relação do tipo "é um". É o relacionamento mais forte de todos, e excetuando-se em interfaces, deve ser evitado. Acarreta em acoplamento de código, gera dependências fixas em tempo de compilação e impede alteração dinâmica. Em se tratando de classes concretas, pode e deve ser substituída pela combinação de composição, delegação e injeção de dependências.