Pegando carona no texto anterior sobre Conceitos Básicos de Orientação a Objetos — Parte 1, vamos agora explorar mais alguns tópicos de interesse.

  • Classe Abstrata
    Classes abstratas são classes que servem como modelo para suas subclasses. Classes abstratas não podem ser instanciadas, apenas herdadas.
    Os métodos declarados na classe abstrata devem ser implementados nas subclasses (classes concretas). Caso contrário, as subclasses também acabam se tornando classes abstratas.
  • Método Abstrato
    São métodos presentes apenas em classes abstratas e que não possuem implementação.
Nesta imagem, temos a classe abstrata Abstract_Pessoa, com o método abstrato abstractPagarImposto. A classe concreta Concrete_Pessoa_Física implementa o método abstractPagarImposto() ao contrátio da classe Abstract_Pessoa_Jurídica.
  • Associação
    Associação representa um relacionamento entre os objetos, quando uma classe possui atributos de outra classe. Uma associação pode definir sua cardinalidade sentido. É identificado pela frase “Tem um(a)”.
No exemplo acima, podemos dizer que Pessoa tem um Endereço.
  • Composição
    É um tipo de associação do tipo Todo x Partes, onde o todo é composto por suas partes (relação de contenção). Na composição, não faz sentido a existência das partes sem uma classe principal para contê-las.
No exemplo acima, a classe Itens do Pedido compõe a classe Pedido. Quando Pedido deixar de existir, os itens do pedido também devem ser destruídos.
  • Agregação
    Outro tipo de associação, onde uma classe faz parte de outra (sem relação de contenção). A classe principal usa outras classes, sem contê-las. Ao contrário da composição, as classes podem existir sendo independentes.
Uma diretoria é uma agregação de membros.
  • Interfaces x Classes Abstratas
    Interfaces:
    * Não podem ser instanciadas;
    * Possuem métodos declarados sem implementação;
    * Todos os atributos são públicos, estáticos e finais;
    * Todos os métodos são públicos;
    * Uma classe pode implementar diversas interfaces.
    Classes Abstratas:
    * Não podem ser instanciadas;
    * Possuem métodos declaradas com ou sem implementação;
    * Pode possuir atributos que não são estáticos e finais;
    * Pode possuir métodos concretos que são públicos, protegidos e privados;
    * Uma classe pode herdar apenas de 1 classe (abstrata ou não).

Este artigo foi originalmente publicado em: https://medium.com/@RafaelSermenho/conceitos-b%C3%A1sicos-de-orienta%C3%A7%C3%A3o-a-objetos-parte-2-5accfe670a6e