Larback - Retornando conhecimento

Suco grande

Tudo o que você precisa saber sobre Orientação a Objetos

Encapsulamento, relacionamentos E-UM e TEM-UM
* O encapsulamento ajuda a ocultar a implementação por trás de uma interface (ou API)
* O código encapsulado fornece dois recursos: As variáveis de instância são mantidas protegidas (geralmente com o modificador private) e os métodos capturadores que fornecem acesso a essas variáveis.
* O relacionamento E-Um refere-se a herança. A herança é feita através da palavra chave extends
* TEM-UM significa que a instância de uma classe 'tem uma' referência à instância de outra classe, ou a outra instância da mesma classe.


Herança
* A heranga é um mecanismo que permite que uma classe seja uma subclasse de outra, e, dessa forma, herdar variáveis e métodos da superclasse.
* A heranga é um conceito fundamental, que está por trás do E-UM, do polimorfismo, da sobrescrição, da sobrecarga e da conversão.
* Todas as classes (exceto object) são subclasses do tipo object, e, portanto, herdam os métodos dele.


Polimorfismo
* Uma variável de referência é sempre de um só tipo imutável, mas ela pode referir-se a um objeto do subtipo.
* Um mesmo objeto pode ser referido por variáveis de instâncias de muitos tipos diferentes - desde que elas sejam do mesmo tipo ou de um supertipo do objeto.
* O tipo da variável de referência (não o tipo do objeto) determina quais métodos poderão ser chamados.
* As chamadas polimórficas a métodos se aplicam apenas a métodos de instância sobrescritos.

Sobrescrição e Sobrecarga
* Os métodos podem ser sobrescritos ou sobrecarregados; os construtores podem ser sobrecarregados mas não sobrescritos.
* Métodos finais não podem ser sobrescritos. * Os métodos abstract devem ser sobrescritos pela primeira subclasse não abstract (classe concreta).
* Sobre métodos sobrescritos, o método novo deve:
- Deve ter a mesma lista de argumentos.
- Deve ter o mesmo tipo de retorno ou um retorno covariante (quando é retornado uma subclasse).
- Não deve ter um modificador de acesso mais restritivo.
- Pode ter um modificador menos restritivo.
- Não pode lançar exceções verificadas novas ou mais abrangentes.
* Sobrecarga significa reutilizar o mesmo nome de método mas com argumentos diferentes.
* Métodos sobrecarregados:
- Devem ter listas de argumentos diferentes.
- Podem ter tipos de retorno diferentes, contanto que as listas de argumentos também sejam diferentes.
- Podem ter modificadores de acesso diferentes.
- Podem lançar exceções diferentes.
- Métodos de uma superclasse podem ser sobrecarregados pela subclasse.
- Polimorfismo se aplica à sobrescrição e não a sobrecarga.
- O tipo de objeto (e não o tipo da variável de referência) determina qual método sobrescrito será usado no tempo de execução.


Conversão de variáveis de referência
* A variável de referência pode sofrer dois tipos de conversões: ampliadora ou redutora.
* Conversão ampliadora: Uma variável de um supertipo pode apontar para um subtipo. Esse tipo de conversão não necessita de cast.
* Conversão redutora: Uma variável de um subtipo aponta para um supertipo. Essa conversão deve ser feita explicitamente através de cast.


Implementando uma interface
* Quando implementamos uma interface estamos cumprindo seu contrato.
* Implementar uma interface é sobrescrever corretamente todos os métodos definidos na interface
* Uma mesma classe pode implementar diversas interfaces.


Tipos de retorno
* Métodos sobrecarregados podem alterar os tipos de retorno; métodos sobrescritos não, exceto no caso de tipos covariantes.
* Os tipos de retorno de referências de objetos podem aceitar null como valor de retorno.
* Métodos void não podem retornar nada.

Construtores e Instanciamento
* Não se pode criar um objeto sem que seja chamado um construtor.
* Toda classe, mesmo as abstract, tem pelo menos um construtor.
* Construtores tem o mesmo nome da classe e não possuem tipo de retorno.
* O construtor chamará o construtor da sua superclasse, que chamará o construtor da sua superclasse até alcançar o construtor de Object. O construtor de Object será executado e retornará para o construtor que o chamou, que será executado e retornará para o construtor que o chamou até alcançar a base da pilha.
* Construtores podem ter qualquer modificador de acesso.
* Se o programador não escrever um construtor, o compilador criará o construtor padrão.
* A primeira instrução de um construtor deve ser super() ou this(). Se o programador não especificar isso, o compilador acrescentará um super().
* Interfaces não tem construtores.


Estáticos
* Métodos static são usados para implementar comportamentos que não são afetados pelo estado de qualquer instância.
* Variáveis static possuem valores únicos para todas as instâncias.
* Todos os membros static pertencem a classe e não a uma instância.
* Um método static não pode acessar uma variável de instância diretamente.


Acoplamento e Coesão
* O acoplamento refere-se ao nivel em que uma classe conhece ou usa membros de uma outra classe.
* O acoplamento fraco é o estado desejável para classes bem encapsuladas.
* Coesão refere-se ao nível em que uma classe tem um único e bem definido papel ou responsabilidade.
* A alta coesão é o estado desejável para as classes.



Bons estudos