terça-feira, 12 de fevereiro de 2008

Classes e seus Modificadores

Buenas pessoal!

Eu nem sei bem como começar este post, então na verdade vou dizer a verdade, nada mais que a verdade: Eu vou direto ao assunto.

Meu livro Certificação Sun para Programador Java 5 - 2a Edição Revisada chegou e comecei a estudar.

As impressões sobre o Livro não poderiam ser melhores. Cada parte é muito bem explicada, deixando bem claro aonde os autores querem chegar.

O primeiro capítulo se chama "Declarações e Controle de Acesso" e trata os seguintes objetivos da certificação:

1.1 Desenvolver código que declare classes (incluindo classes abstract e todas as formas de classes aninhadas), interfaces e enums, e inclua o uso apropriado de declarações package e import (incluindo importações estáticas).

1.2 Desenvolver código que declare uma interface. Desenvolver código que implemente ou estenda uma ou mais interfaces. Desenvolver código que declare uma classe abstract. Desenvolver código que estenda uma classe abstract.

1.3 Desenvolver código que declare, inicialize e use primitivos, arrays, enums e objetos como variáveis static, de instâncias e locais. Além disso, usar identificadores legais para os nomes de variáveis.

1.4 Desenvolver código que declare métodos static e não-static e, se apropriado, usar nomes de métodos que obedeçam aos padrões de nomeação JavaBeans. Além disso, desenvolver código que declare e use uma lista de argumentos de extensão variável.

Bom, está longe das minhas pretensões ENSINAR JAVA para as pessoas, estou somente dando o meu testemunho e citando as coisas que eu julguei importantes durante meus estudos. Basicamente eu postarei aqui os assuntos relacionados às coisas que fiz algum tipo de anotação durante a leitura. Se fosse para falar sobre TUDO que tem no livro, seria mais fácil recomendar que todos o comprassem. E realmente eu recomendo isso!

O primeiro assunto a ser tratado é justamente a declaração de classes em Java. Quantas noites perdidas criando classes e mais classes? (não muitas, ainda), mas nunca é tarde para começar! A primeira coisa que devemos saber é que somente dois modificadores de acesso podem ser atribuídos à classes: default (ou ausência de modificadores) e public. No acesso default (podemos considerar nível de pacote), somente disponibiliza a classe e seus membros para as classes e membros que estiverem no mesmo pacote da classe em questão. Quem estiver fora do pacote não tem acesso a essa classe, nem mesmo através de um import. Já quando definimos a classe como sendo public, então estamos dizendo que todas as classes de todos os pacotes do Universo Java (gostei disso, os autores falam em Java Universe). Abaixo, exemplos de declarações de classes com acesso default e public.

Blog.java - Classe com acesso default

package com.blogspot.diarioscjp;

class Blog {//Ausência de modificador = default
//código importante da classe
}

OtherBlog.java - Classe com acesso public

package com.blogspot.diarioscjp;

public class OtherBlog {
//código importante da classe
}

Até agora vimos então como se declara uma classe e quais são os modificadores de acesso pertinentes a elas. Agora veremos a seguir os outros modificadores de classes, mas estes não levam em conta os níveis de acesso. São eles: final, abstract e strictfp (embora não vamos falar sobre o último agora)

Classes final são aquelas que não podem ser estendidas, ou seja, essa classe nunca vai poder ter sub-classes. Mas qual é a vantagem disso? Acabamos com um dos maiores princípios da Orientação a Objetos, a herança. Também teremos o problema (ou não, dependendo do caso) de que nenhum dos métodos dessa classe irão poder sofrer alterações em sua implementação. Por outro lado, quando temos uma classe não-final, temos a possibilidade de estende-la e alterar seus comportamentos quando for pertinente. Mesmo quando não possuímos os fontes da classe. Isso é um ótimo recurso da Orientação a Objetos (que a partir de agora ganhou o apelido de O.O) nos meus posts.

Do outro lado temos as classes abstract. Essas sim podem ser estendidas, mas em compensação, não podem ser instanciadas. Não conseguiremos declarar uma instância de uma classe abstract e usá-la em outras classes. As classes abstract precisam ser estendidas por outras classes - mais pra frente entraremos em mais detalhes - para poderem ser instanciadas. Mais especificamente, só podemos instanciar uma classe concreta (não-abstrata). Numa classe onde temos um método abstract, existe a obrigação da mesma ser abstrata. Os métodos abstratos não possuem implementações. Eles terminam com ; na sua linha de declaração.

Vale lembrar que podemos ter algumas combinações de modificadores para uma classe, com modificadores de acesso e outros. Mas muito cuidado! Uma classe nunca pode ser abstract e final ao mesmo tempo. Pensando melhor sobre isso, não teria sentido mesmo, não é?! Se uma classe abstract exige que implementemos seu métodos nas sub-classes, seria no mínimo esquisito colocar também o modificador final, que justamente pelo contrário, preza pela preservação dos métodos e atributos da classe.

Essas foram as minhas observações sobre as Classes e seus Modificadores.

No mais, estou indo embora! Um abraço a todos e até o próximo post.

1 comentários:

Andre Barbosa disse...

Uma coisa legal que eu fui sacar tempos depois é que "abstract" signifca resumo, resumida. Uma classe resumida, sem todos os métodos implementados. Uma boa maneira de lembrar o porquê de uma classe assim.