segunda-feira, 30 de março de 2015

[Programação Modular] Classes e Interfaces

Uma classe representa uma categoria de elementos, enquanto um objeto representa um elemento específico dessa categoria. Definida apenas no contexto de compilação, a classe define a lógica estática de um programa e, desse modo, relacionamentos entre classes não mudam durante a execução de um programa.


Algumas convenções são comumente adotadas para a programação de classes:
  • classes são declaradas com a primeira letra de cada palavra maiúscula (UpperCamelCase): MinhaClasse;
  • atributos, variáveis locais e métodos são declarados com a primeira letra da primeira palavra minúscula (lowerCamelCase): meuAtributo, minhaVariavel, meuMetodo;

Uma classe é composta atributos métodos. Por não possuir uma estrutura ordenada, as classes devem ser criadas seguindo um padrão lógico, para facilitar a legibilidade do programa.

Igualmente, os objetos (ou instâncias de uma classe) possuem atributos métodos. Estes membros, no entanto, possuem um espaço de memória único para cada instância e sempre que uma nova instância é criada, os procedimentos de inicialização são adotados.

Atributos não precisam ser inicializados e possuem um valor padrão:
  • tipos numéricos: valor 0;
  • tipo boolean: valor false;
  • demais atributos: valor null (referência vazia).

Métodos, por sua vez, acessam ou modificam atributos.Por meio do controle de visibilidade, é possível controlar os níveis de acesso:
  • public
  • protected
  • default
  • private

A palavra this é utilizada para referenciamento do objeto atual

Toda classe possui um ou mais métodos construtores, que são chamados para criação dos objetos. Por padrão, um construtor sem parâmetros é criado. Outros construtores podem ser criados, diferenciando-se apenas a lista de parâmetros (sobrecarga), pois todos os construtores possuem o mesmo nome da classe. Quando um construtor com parâmetros for criado, o construtor padrão (sem parâmetros) não é mais acessível.



Atributos e métodos podem ser estáticos. 

Atributos estáticos não estão associados a uma instância (atributos de classe), sendo compartilhado por essas, ocupando uma posição única na memória. Normalmente utilizados para constantes.



Observe os valores que serão impressos pelo método e note que o atributo é compartilhado entre os objetos c1 e c2:


Métodos estáticos, por sua vez, são acessados diretamente pela classe e não demandam instanciação. Dessa forma, são resolvidos em tempo de compilação, não podendo ser sobrescritos.



Observe que o método Ponto é instanciado. Já o método estático calcNorma não:


As classes em Java podem ser classificadas em internas, abstratas ou finais. 

Classes internas são declaradas dentro de outra classe e podem, dessa forma, acessar seus métodos privados. Este tipo específico de classe é utilizado para substituir a estrutura struct.



Classes abstratas tem como principal característica a impossibilidade de ser instanciada. Este tipo de classe define um conjunto de métodos abstratos totalmente implementados ou parcialmente implementados. Neste último caso, a implementação pode ocorrer nas classes derivadas.


 Observe o exemplo a seguir e note que o método abstrato setarXY é implementado na classe derivada Ponto2D. 



Além disso, tem-se as classes finais, que não podem ser herdadas, o que torna seu comportamento constante. Neste tipo de classe, os atributos operam como constantes e os métodos não podem ser sobrescritos. 


Por fim, tem-se as interfaces, que permitem definir um conjunto de métodos que deverão ser implementados por uma classe. Dessa forma, uma interface funciona como um contrato.

Note no exemplo a seguir que a classe Ponto implementa a interface Imprimivel, por meio da implementação do método imprimirValores (definido na interFace).


O quadro a seguir apresenta uma visão geral e comparativa de classes e interface.


Nenhum comentário:

Postar um comentário