Eu resolvi começar a estudar para a certificação java, depois de ouvir conselhos de diversos amigos sobre como isso me daria vantagens no mercado de trabalho. Um colega de faculdade (dale Gabriel Santana) me passou o pdf do SCJP Sun Certified Programmer for Java 6 (in english) e a partir de agora (e enquanto durar a motivação) eu vou postar aqui algumas das minhas notas de estudo em relação ao assunto. Para facilitar a localização, eu colocarei no começo de cada post a sigla SCJP, seguida do número de um capítulo, seguido de um título, que definirá o tópico correspondente no livro da certificação :)
A primeira delas se refere a algo que eu não me atentava a pensar. Normalmente, a primeira coisa que fazemos quando declaramos uma classe java é:
E ai está o modificador. Nós colocamos lá um public no começo da declaração da classe de modo tão automático que nem percebemos quais outras possibilidades nós temos... Segundo o livro da certificação, quando nós não colocamos nenhum modificador de acesso, por default a classe declarada só é visivel dentro do pacote em que ela está. Exemplificando: Se temos duas classes como abaixo...
Note que a superclasse (ClasseA) não está no mesmo pacote da classe derivada (ClasseB). Neste caso, ao se tentar compilar o código fonte, um erro semelhante a esse seria mostrado no console:
Declarar qualquer classe como pública dentro de um pacote a torna visível a todas as classes, de todos os pacotes. Isso também a torna extensível a todas as classes, exceto aqueals declaradas como final:
Tentar compilar um código como este nos daria um erro semelhante ao abaixo:
Mas... Por que declarar uma classe como final? Segundo o livro, você só deve declarar uma classe como final se você quiser a garantia absoluta que nenhum dos seus métodos será sobrescrito. Isso ocorre com algumas classes da api Java, como por exemplo a classe String (tente procurar o seu código fonte). Entretanto, isso fere um dos pontos chave da Programação Orientada a Objetos (POO): extensibilidade. Assim, esta característica só deve ser utilizada em casos específicos, devendo você assumir, para todos os outros casos, que algum programador irá extender alguma de suas classes algum dia...
A primeira delas se refere a algo que eu não me atentava a pensar. Normalmente, a primeira coisa que fazemos quando declaramos uma classe java é:
public class AlgumaClasse {
}
E ai está o modificador. Nós colocamos lá um public no começo da declaração da classe de modo tão automático que nem percebemos quais outras possibilidades nós temos... Segundo o livro da certificação, quando nós não colocamos nenhum modificador de acesso, por default a classe declarada só é visivel dentro do pacote em que ela está. Exemplificando: Se temos duas classes como abaixo...
package um.pacote;
class ClasseA { }
package outro.pacote;
import um.pacote.ClasseA;
class ClasseB extends ClasseA { }
Note que a superclasse (ClasseA) não está no mesmo pacote da classe derivada (ClasseB). Neste caso, ao se tentar compilar o código fonte, um erro semelhante a esse seria mostrado no console:
Can't access class um.pacote.ClasseA. Class or interface must be
public, in same package, or an accessible member class.
import um.pacote.ClasseA;
Declarar qualquer classe como pública dentro de um pacote a torna visível a todas as classes, de todos os pacotes. Isso também a torna extensível a todas as classes, exceto aqueals declaradas como final:
package um.pacote
public final class ClasseA { }
package outro.pacote
import um.pacote.ClasseA;
class ClasseB extends ClasseA { }
Tentar compilar um código como este nos daria um erro semelhante ao abaixo:
Can't subclass final classes: class
um.pacote.ClasseA class Tea extends ClasseA {
1 error
Mas... Por que declarar uma classe como final? Segundo o livro, você só deve declarar uma classe como final se você quiser a garantia absoluta que nenhum dos seus métodos será sobrescrito. Isso ocorre com algumas classes da api Java, como por exemplo a classe String (tente procurar o seu código fonte). Entretanto, isso fere um dos pontos chave da Programação Orientada a Objetos (POO): extensibilidade. Assim, esta característica só deve ser utilizada em casos específicos, devendo você assumir, para todos os outros casos, que algum programador irá extender alguma de suas classes algum dia...
No comments:
Post a Comment
Regras são chatas, mas...
Todos os comentários são lidos e moderados previamente.
São publicados aqueles que respeitam as regras abaixo:
- Seu comentário precisa ter relação com o assunto do post;
- Em hipótese alguma faça propaganda de outros blogs ou sites;
- Não inclua links desnecessários no conteúdo do seu comentário;
- Se quiser deixar sua URL, comente usando a opção OpenID;
- CAIXA ALTA, miguxês ou erros de ortografia não serão tolerados;
- Ofensas pessoais, ameaças e xingamentos não são permitidos;