SCJP for JSE5 - 4
Posted on mayo 25, 2007 by Carlos Alexander Zuluaga
Los resúmenes que publicaré no serán en lo absoluto guías definitivas para preparar el examen, lo hago más bien como un ejercicio personal para fortalecer lo que estudio y pueden servir para dar un repaso general a todos los temas.
La secuencia de los temas que abordaré estarán en el mismo orden del libro guía.
1. IDENTIFICADORES Y JAVABEANS
Los objetivos en cuanto a identificadores y JavaBeans consisten en diferenciar entre nombres válidos y nombres que cumplan con los estándares.
Un nombre válido es cualquiera que compile o más bien, un nombre no válido, es aquel que arrojará un error en tiempo de compilación. Un nombre válido debe cumplir tres reglas básicas:
- Debe empezar con una letra, el caracter underscore (_) o el signo pesos ($). Sí, eso del signo pesos para mí también fue toda una sorpresa.
- Después del primer caracter puede contener cualquier combinación de letras, números, underscore (_) y signo pesos ($).
- No puede ser una palabra reservada.
Los estándares de codificación propuestos para los JavaBeans son:
- Los atributos de las clases se deben consultar a través de métodos get<NombreAtributo> que no reciben argumentos y devuelven el mismo tipo de dato del atributo a consultar, y se deben modificar a través de métodos set<NombreAtributo> que reciben un argumento del mismo tipo del dato a modificar y no devuelven ningún valor (void). Opcionalmente si el atributo es de tipo boolean se puede consultar con un método is<NombreAtributo>.
- Los métodos setXX, getXX e isXX deben ser públicos.
- Los nombres de los métodos deben conformarse anteponiendo set, get o is al nombre del atributo y dejando la primera letra de este último en mayúscula. Por ejemplo el atributo edad de tipo int, tendría un método get así: public int getEdad() { return this.edad}.
- Los eventos de los JavaBeans se gestionan con Listener que reciben la notificación cuando se ejecuta cierto evento. La nomenclatura para agregar y eliminar Listeners a un JavaBean debe ser: addXxxListener(XxxListener xx) y removeXxxListener(XxxListener xx).
Palabras Reservadas
Son todas esas que usa el lenguaje para nombrar elementos propios como los tipos de datos (int, short), los modificadores de acceso (public, private), etc. todos los días usamos muchas de las palabras reservadas y la lista completa se puede ver aquí, sin embargo hay muchas palabras que no sabía que eran reservadas o no las había usado nunca: const, continue, goto, native, strictfp, transient, volatile, assert y enum.
Las palabras const y goto no las usa el lenguaje pero las deja reservadas para evitar confusiones en el código. Y finalmente la palabra enum solo existe a partir de la versión 5.
2. DECLARACIÓN DE CLASES
La estructura de una clase en Java es la siguiente:
<package> //opcional
<imports> //opcional
<modificador de acceso (opcional)> class <nombre de la clase>{
<atributos y métodos>
}
Hay secciones opcionales, pero cuando estén presentes deben ir en ese orden estricto, de hecho la declaración más simple y válida de una clase es: class Simple{}. Los comentarios pueden ir en cualquier línea sin importar el orden.
Un solo archivo puede tener cualquier número de clases, pero, solo puede haber una clase pública y el nombre de ésta debe coincidir con el nombre del archivo; claro, puede haber un número indeterminado de clases no públicas y el nombre del archivo no tiene que coincidir con ninguna, y, también se puede compilar un archivo sin ninguna clase definida.
Las clases solo tiene dos tipos de acceso: por defecto y público. El acceso por defecto es que se le asigna cuando no tienen ningún modificador de acceso y hace que la clase solo pueda ser vista por otras clases que pertenezcan al mismo paquete. El acceso público se asigna antecediendo la palabra class por el modificador public y permite que cualquier clase de cualquier paquete pueda acceder a ella.
Otros Modificadores
Las clases pueden tener tres modificadores diferentes a los de acceso: final, strictfp, abstract. Puede tener varios a la vez, pero no todos, ni siquiera cualquier combinación.
final: una clase marcada como final (final class FinalClass{}) no puede ser heredada (class LastFinalClass extends FinalClass{}). Clases como Integer, Float y String, son ejemplos de clases final.
strictfp: (¿Strict floating point?) este modificador indica que los métodos de la clase cumplirán con las reglas IEEE 754 para los números con coma flotante. Esto no tiene mucha relevancia para el examen, pero hay algo más de información aquí. Lo importante de este modificador es que se puede aplicar a cualquier clase o interface y a los métodos que no sean abstractos.
abstract: las clases abstractas no pueden ser instanciadas y pueden contener método abstractos (sin implementación). Como dice el libro "son clases cuya misión en la vida es ser heredadas". Como es de esperarse, un método abstracto no puede tener el modificador strictfp, pues los detalles de su implementación se desconoce.
3. DECLARACIÓN DE INTERFACES
Las interfaces se pueden pensar como "contratos" que especifican lo que una clase puede hacer. Técnicamente son clases 100% abstractas, es decir, todos los métodos son abstractos y sin implementación. Los métodos de una Interface son implícitamente (aunque se puede, no hay que usar los modificadores) públicos y abstractos, por tanto no pueden tener los modificadores strictfp, final o native.
Las interfaces también pueden tener variables que implícitamente son public, final y static y, al igual que los métodos, se pueden usar estos modificadores pero no es necesario (a veces por legibilidad es bueno usarlos o no). Según lo dicho, la siguientes tres interfaces son equivalentes:
public interface Calculable{
// no hay que usar ningún modificador, es explícito
int OPERACION = 1;
int calcular();
}
public abstract interface Calculable{
// se pueden poner todos los modificadores
public static final int OPERACION = 1;
public abstract int calcular();
}
public interface Calculable{
// aunque se declaren solo algunos modificadores,
// en tiempo de ejecución los tendrá todos
final int OPERACION = 1;
public int calcular();
}
Al igual que las clases, solo puede existir una interface pública por archivo y deben tener el mismo nombre (el archivo y la interface), pero pueden haber varias interfaces no públicas en el mismo archivo.
Note también que los atributos de una interface deben ser inicializados al declararlos, pues al tener el modificador final, no pueden ser modificados posteriormente.
El Final
El objetivo hasta este momento solo es saber como se declaran atributos, clases e interfaces, más adelante veremos en acción todos estos elementos.
Recurso
A mi bandeja de entrada ha llegado la dirección de una página con un listado de preguntas para prácticar: http://j2eerojak.blogspot. com/2007/05/scjp-310-035-sample-questions-1.html.
(Para visitar la página, eliminar el espacio que hay después de 'blogspot.', no se por que roller no me deja grabar cuando la cadena está completa, debe ser que no le gusta 'blogspot[PUNTO]com' :-])
Un saludo.
Solo una indicación "Los estándares de codificación propuestos para los JavaBeans" no entran en el examen. Aunque todo buen programador debería usarlos
Enviado por Vudko en mayo 26, 2007 a las 09:19 AM COT #
Sí entran, es una de las adiciones que se hizo para JSE5. En los objetivos del examen (ver el primer post) se pueden ver.
Igual no es nada difícil.
Saludos.
Enviado por azuluaga en mayo 26, 2007 a las 02:05 PM COT #