Seguir a Miguel Gomez Cuesta en Twitter Seguir a Miguel Gomez Cuesta en Linkedin Seguir a Miguel Gomez Cuesta en Google+ Contactar a Miguel Gomez Cuesta por Correo Electrónico

miércoles, 4 de mayo de 2016

Java - Certificación - Estructura de clases y tipos

Certificación Java


La siguiente colección de artículos tienen como objetivo formarte y prepararte para lograr la certificación Java OCA (Oracle Certified Associate Java) para la última versión disponible de JavaSE 8.

Las principales fuentes utilizadas para elaborar estos artículos son los libros de referencia para la preparación de la certificación:


Si todavía no conoces el lenguaje Java pero tienes algo de conocimiento de otros lenguajes de programación, esta es tu oportunidad de aprenderlo de una manera amena.

Si ya conoces el lenguaje Java, pero nunca te has atrevido a preparar la certificación porque nunca has tenido el tiempo suficiente para prepararlo, aquí te ayudaremos a reducir el tiempo y consultar todas tus dudas.

Si ya dominas el lenguaje Java pero frecuentemente olvidas algunas de las características del lenguaje o dudas a la hora de desarrollar un nuevo programa. Estos artículos te servirán como guía de referencia de las funcionalidades del lenguaje que necesitas recordar para trabajar a diario y ser más productivo.


Introducción


Java es un lenguaje de programación sencillo y orientado a objetos cuyo uso está extendido en todo el mundo siendo el lenguaje más popular actualmente. Las características del lenguaje que le han permitido llegar al éxito son:

Orientado a objetos: Proporcionan técnicas para el desarrollo orientado a objetos, con lo que se consigue maximizar la reutilización de componentes de software.

Portable y Multiplataforma: El compilador Java traduce cada fichero fuente a código de bytes (Bytecode), este código es interpretado por cualquier máquina que tenga instalado un intérprete conocido como JVM (Java Virtual Machine).

Seguro: La máquina virtual al ejecutar el código java realiza comprobaciones de seguridad, además el propio lenguaje carece de características inseguras, como por ejemplo los punteros.

Tipado estático: Es necesario asignar un tipo a cada variable en el momento de su declaración. Con esto se consigue eliminar los errores al operar con variables de tipos incompatibles. El compilador detecta estás incompatibilidades y no generará el código bytecode hasta que sean corregidos.

Multihilo: Java puede aplicarse en aplicaciones en las que es necesaria la ejecución de varias tareas de forma paralela.

Distribuido: Java se ha diseñado para trabajar en ambiente de redes y contienen una gran biblioteca de clases para la utilización del protocolo TCP/IP, incluyendo HTTP y FTP.


Estructura


En un programa Java las clases son el elemento básico de construcción. Una clase nos permite agrupar una serie de partes y características comunes. 



Objetos: Son instancias en ejecución de una determinada clase.  La agrupación de todos los objetos de todas las clases representan el estado de un programa.

Campos y Métodos: Son los elementos principales de las clases en Java. Juntos son llamados los miembros de la clase. Los campos mantienen el estado del programa y los métodos permiten operar con ellos.


Comentarios


Para hacer más legible nuestro código es posible añadir comentarios. Estos pueden aparecer en casi cualquier parte dentro de los ficheros fuente que definen nuestras clases.

Para un comentario de una única línea se utiliza el carácter “//” al comienzo de la línea. 

// Comentario hasta fin de línea

Para comentario de múltiples líneas se utiliza el carácter “/*” al comienzo de la primera línea comentada y los caracteres “*/” al final de la última línea. 

/*Comentario
separado
en múltiples
líneas */


Clases vs Archivos


Lo más común es que cada clase este definida en un archivo .java con el mismo nombre que la clase.

Sin embargo, es posible tener dos clases en el mismo archivo .java aunque solamente una de ellas puede tener modificador de acceso public y el nombre del archivo .java debe coincidir con la clase declarada public. En caso contrario se producirá un error de compilación


Método Main


Un programa Java comienza la ejecución en el método main(), en otras palabras, es la puerta de entrada al inicio de un proceso java el cual será gestionado por la JVM (Máquina Virtual de Java).


Reglas para la firma del método principal (main) de la clase:


  • El modificador de acceso del método debe ser public.
  • El modificador de no acceso debe ser static.
  • El método no debe retornar ningún valor, es decir, especifica tipo de retorno void.
  • El nombre del método debe ser main.
  • Debe aceptar un parámetro de tipo array de String que puede contener 0 o N parámetros.
  • El nombre del parámetro puede ser cualquier identificador permitido según las reglas.




Reglas para compilar una clase java:
  • Utilizar el comando “javac” incluido en la JDK (Java Development Kit).
  • El archivo debe tener extensión .java
  • El nombre del archivo debe coincidir con el nombre de la clase pública.
  • El resultado será un archivo de bytecode (instrucciones que la JVM sabe ejecutar) con el mismo nombre y extensión .class

Reglas para ejecutar una clase java:
·         Utilizar el comando “java” más el nombre de la clase sin extensión y la lista de parámetros que queramos añadir.
·         Todos los parámetros serán reconocidos de tipo String.

javac ClasePrueba.java
java ClasePrueba Parametro0 Parametro1 … ParametroN


Declaración de package e imports

Dado que existen miles de clases, es necesario organizarlas de algún modo. Java organiza las clases en paquetes, que no son más que agrupaciones lógicas.

  • Los nombres de los paquetes son jerárquicos y las reglas para nombrarlos son las mismas que aplican al nombrado de variables. 
  • Los import son sentencias que dicen al compilador en qué paquete buscar para encontrar una Clase que va a ser utilizada dentro de la clase que lo importa.
  • Las clases en el mismo paquete son normalmente importadas juntas, para ello es necesario utilizar un sentencia import con comodín (wildcard).
El “*” es un comodín que empareja todas las clases incluidas en el paquete indicado.

Reglas para usar import con comodines:
  1. Un comodín solo empareja nombres de clases, es decir, no es recursivo.
  2. Solamente se puede usar un “*” comodín para cada import y debe estar al final.
  3. Solamente se pueden emparejar clases, no es válido para emparejar métodos ni campos.


Import redundantes


Hay un paquete especial en Java “java.lang” que es automáticamente importado. Se puede importar explícitamente porque no provoca ningún problema pero es innecesario.

También es redúndate si una clase es importada y adicionalmente una sentencia import con comodín también incluye a esa clase.

Otro caso redundante es importar una clase que está en el mismo paquete que la clase que estamos definiendo.


Conflictos de Nombres


En ocasiones queremos utilizar clases con el mismo nombre pero que están ubicadas en paquetes diferentes, la gestión de paquetes de Java nos permite hacerlo pero con ciertas precauciones.

Cuando dos import con comodín emparejan el mismo nombre de clase el compilador devuelve un error indicando “El tipo es ambiguo”.

Para corregirlo hay dos opciones:
  1. Importar explícitamente un nombre de clase porque estas sentencias tienen prioridad sobre los sentencias import con comodines.
  2. No añadir ninguna sentencia import y utilizar los cualificadores completos de clases.


Creando Objetos


Nuestros programas no serían capaces de hacer nada útil sin la posibilidad de crear nuevos objetos. Un objeto es una instancia de una clase con un estado independiente del resto de objetos.


Constructores


Son utilizados para crear instancias de una clase. El propósito del constructor es inicializar los campos.

Random r = new Random()

Random() es un constructor de la clase, lo que es en realidad es un tipo de método especial que utilizamos para crear nuevos objetos.

Reglas para definir un constructor:
  1. El nombre del constructor debe ser igual que el nombre de la clase.
  2. El constructor no tiene tipo de retorno. Es decir, si vemos un método con el mismo nombre de la clase y con tipo de retorno, este será un método pero no un constructor.

Si no se especifica ningún constructor el compilador proporcionará uno por defecto y sin parámetros.


Bloques de inicialización

Son bloques de código que aparecen entre corchetes {} fuera del ámbito de un método y en cualquier parte de la clase.

Reglas para el orden de inicialización de los campos:
  • Los campos y los bloques de inicialización son ejecutados en el orden que aparecen
  • El constructor se ejecuta después de que todos los campos y bloques se han ejecutado.


Tipos primitivos


Las aplicaciones Java contienen variables y datos de tipo Primitivos o Referencia.


Podemos ver agrupados todos los tipos primitivos existentes en el siguiente gráfico.



Tipo
Descripción
Ejemplo
boolean
true o false
true
byte
Número Entero de 8 bit
123
short
Número Entero de 16 bit
123
int
Número Entero de 32 bit
123
long
Número Entero de 64 bit
123
float
Número Decimal de 32 bit
123.45f
double
Número Decimal de 64 bit
123.456
char
Carácter Unicode de 16 bit
‘a’


Para números enteros el tipo por defecto es int. Para cambiar el tipo por defecto a long se debe usar la letra ‘l’ o ‘L’. Ej: 123L

Para números decimales el tipo por defecto es double. Para cambiar el tipo por defecto a float se debe usar la letra ‘f’ o ‘F’. Ej: 123.45F

Por defecto la base utilizada es decimal pero podemos utilizar otras alternativas:
  • Base Decimal: Dígitos de 0 a 9. Es la base por defecto. No utiliza prefijo.
  • Base octal: Dígitos de 0 a 7. Usa el número 0 como prefijo. Ej: 017.
  • Base hexadecimal: Dígitos de 0 a 9 y letras de A a F. Usa 0x o 0X como prefijo. Ej: 0xFF.
  • Base binaria: Dígitos de 0 a 1. Usa 0b o 0B como prefijo. Ej: 0b10.

Adicionalmente a partir de Java 7 es posible añadir  “_” guiones bajos a los literales numéricos para facilitar la lectura.  Reglas de usos de “_”:

  • No pueden estar al principio de un literal
  • No pueden estar al final de un literal
  • No pueden estar justo antes del “.” punto decimal
  • No pueden estar justo después del “.” punto decimal

Tipos Referencias


Un tipo referencia se refiere a un objeto (una instancia de la clase)
A diferencia de los tipos primitivos, las referencias apuntan a un objeto almacenando en memoria, para ello guardan la dirección en la que el objeto está localizado.

Regla para asignar valor a una variable de tipo Referencia:
  • Asignar un objeto del mismo tipo.
  • Creando un nuevo objeto usando la palabra reservada “new”.

Diferencias Tipos primitivos vs Tipo referencia


Diferencias entre tipos primitivos y tipos referencia

  • Tipos Referencias pueden tener asignados un valor “null”. Significa que no están apuntando actualmente a ningún objeto.
  • Tipos Primitivos dan un error de compilación si intentas asignar el literal “null”.


  • Tipos Referencias se pueden usar para llamar a métodos cuando no tienen asociado el valor null.
  • Tipos Primitivos no tienen métodos declarados a los que poder llamar.

  • Todas las clases definidas con Java empiezan con mayúscula (es una convención aunque no es obligatoria para clases propias).
  • Todos los tipos primitivos tienen nombres en minúsculas.

Práctica lo aprendido


¡La práctica hace al maestro! Es el momento de ponerse manos a la obra y probar todos aquellos conceptos que hemos estudiado. Para ello lo mejor es escribir tu propio código, de esta manera vas a asimilar los conceptos de una forma más amena y segura. 

Para ayudarte a agilizar las pruebas de tus primeras líneas de código Java hemos seleccionado dos herramientas online para compilación y ejecución de código Java.

  • Jdoodle: Herramienta sencilla e intuitiva que permite el auto completado del código (usando Ctrl + Space) y permite guardar código si estamos registrados.
  • Ideone: Herramienta sencilla y potente que permite elegir la versión de Java más adecuada para nosotros además de tener disponibles otros lenguajes de programación. Además nos permite compartir código con otros usuarios sin necesidad de estar registrados y guardar código.


Comprueba tus conocimientos

Por último hemos preparado este test online que te servirá para evaluar objetivamente tu aprendizaje. El test consta de 10 preguntas tipo test con un tiempo límite de 10 minutos. A por ello!!




3 comentarios:

  1. Buenas,
    me encanta tu blog, estoy empezando a leer el libro de la certificación de Java 8 y me gustaría preguntarte si hay más temas además de éste. Porque me parece interesantísimo y muy bien explicado.
    Un saludo

    ResponderEliminar
    Respuestas
    1. Muchas Gracias Rafael.
      Este año el objetivo es tratar en el blog todos los temas incluidos en la certificación. ¿Te interesa algún tema en particular? Te agradezco tu feedback y te invito a que compartas el blog con tu circulo profesional. Un saludo.

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar

Entradas populares