Estudo para certificação – Capítulo 02 – na teoria a prática é outra
Estudo para certificação – Capítulo 02
Esse é a segunda parte de uma série de posts que irei fazer.
Nesses posts, vou colocando um resumo ou talvez até mesmo trechos na íntegra do livro: Certificação Sun para Programador Java 6 da Kathy Sierra e Bert Bates.
Obs: Caro leitor, você não deve ter como base para uma certificação Java apenas a leituras desses meus resumos em meu blog. É de suma importância a leitura por completo do livro, bem como a realização de alguns simulados.
Capítulo 2 – Orientação a Objetos
1) Encapsulamento, relacionamento É-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âncias são mantidas protegidas e os métodos getters e setters fornecem acesso a essas variáveis de instância.
– O relacionamento É-UM refere à herança.
– O relacionamento TEM-UM significa que a instância de uma classe 'tem uma' referência à instância de outra classe.
2) Herança
– A herança é um mecanismo que permite que uma classe seja uma subclasse de outra, e, dessa forma,herdar variáveis e métodos da superclasse.
3) Polimorfismo
– Uma variável de referência é sempre de um só tipo imutável, mas ela pode referer-se a um subtipo 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âncias subscritos.
4) Sobrescrita e Sobrecarga
– Os métodos podem ser sobrescritos(Override) ou sobrecarregados(overload), os construtores podem ser sobrecarregados, mas não sobrescritos.
– Os métodos abstract devem ser sobrescritos pela primeira subclasse concreta.
– Os métodos final não podem ser sobrescritos.
– Métodos privates não podem ser herdados, logo, não podem ser sobrescritos.
– Sobrecarga significa reutilizar o mesmo nome de método, mas com argumentos diferentes.
– O polimorfismo é aplicável à sobrescrita e não à sobrecarga.
5) Conversão(casting) de Variáveis de Referência
– Downcast: se você tiver uma variável de referência que aponte para um objeto de um subtipo, poderá atribuí-la a uma variável de referência do subtipo. Você precisa fazer um cast explícito para isso, e o resultado é que você pode acessar os membros do subtipo com essa nova variável de referência.
– Upcast: você pode atribuir uma variável de referência a uma variável de referência de um supertipo explicitamente ou implicitamente. Essa é uma operação inerentemente segura porque a atribuição restringe as capacidades de acesso da nova variável.
6) Implementando uma Interface
– Quando você implementa uma interface, está cumprindo o seu contrato.
– Uma mesma classe pode implementar várias Interfaces.
7) Tipos de Retorno
– Os métodos sobrecarregados podem modificar os tipos de retorno, os métodos sobrescritos não podem, exceto no caso de retornos covariantes.
– Para métodos com tipo de retorno primitivos, pode ser retornado qualquer valor que possa ser convertido implicitamente para o tipo de retorno.
– É permitido que você use simplesmente return em qualquer método com um tipo de retorno void, para interromper um método antes da sua finalização.
– Métodos com um tipo de retorno que é uma referência a um objeto podem retornar um subtipo.
– Métodos com um tipo de retorno que é uma interface podem retornar qualquer implementador.
8) Construtores e Instanciação
– A execução do construtor ocorrerá da maneira a seguir:
– O construtor chamará o construtor de sua superclasse, que chamará o construtor de sua superclasse, e assim por diante, até alcançar o construtor do Object.
– O construtor de Object será executado, retornando em seguida ao construtor chamador, que será processado até sua conclusão, e por sua vez retornará ao construtor que o chamou, dando prosseguimento a essa sequência até a execução do construtor da instância que estiver sendo criada.
– Os construtores podem usar qualquer modificador de acesso.
– A primeira instrução de todo construtor de ser uma chamada a super() ou this().
– As classes abstract possuem construtores que são chamados quando uma subclasse concreta é instanciada.
– As interfaces não têm construtores.
– Use métodos static para implementar comportamentos que não sejam afetados pelo estado de quaisquer instâncias.
– Use variáveis static para armazenar dados que sejam específicos à classe, em vez de à instância.
– Métodos static não podem ser sobrescritos, mas podem ser redefinidos.
10) Acoplamento e Coesão
– Acoplamento refere-se ao nível em que uma classe conhece ou usa membros de uma outra classe.
– O baixo acoplamento é o estado desejável para classes bem encapsuladas, que minimizam as referências umas às outras e limitam a extensão do uso da API.
– A coesão refere-se ao nível em que uma classe tem um único e bem definido papel ou responsabilidade.
Principal referência:
SIERRA, Kathy; BATES, Bert. Certificação Sun para Programador Java 6 – Guia de estudo – SCJP EXAME 310-065. Rio de Janeiro: Alta Books Editora, 2011.