Publicado el Dejar un comentario

Estructura de una clase Java

Una clase java puede definir varios componentes. Los componentes que una clase java puede contener son:

  • La sentencia o instrucción package
  • La sentencia import 
  • Comentarios
  • Las declaraciones y definiciones de la clase
  • Variables
  • Métodos
  • Constructores

Además puede contener clases e interfaces anidadas y enumeraciones o tipos enum. Éstos últimos componentes no están contemplados en el examen OCA Java SE 7 Programmer I.

Por lo tanto la estructura de una clase Java se vería más o menos así:

Sentencia package
Sentencias import
Comentarios
Declaración de la clase {
    Variables
    Comentarios
    Constructores
    Métodos
    Clases anidadas
    Interfaces anidadas
    Enumeraciones
}

Sentencia package.

Esta sentencia puede o no aparecer en una clase, sin embargo toda clase Java pertenece a un package (paquete). Si la sentencia no es especificada significa que la clase pertenece al paquete por omisión (default).

Si la sentencia es especificada, debe ser la primera sentencia en la clase Java. No pueden existir otras sentencias antes de ésta sentencia, si sucediera esto, la clase Java no podrá ser compilada. Sólo puede haber una sentencia package en una clase Java, no más.

Sentencia import.

Cuando las clases e interfaces Java que utilizará otra clase Java se encuentran en el mismo paquete no es necesario especificar el nombre del paquete antes del nombre de esas clases o interfaces, pero si no es así, es necesario escribir el nombre completo de la clase con todo y nombre del paquete al que pertenece dicha clase o interfaz utilizada.

Para evitar estar escribiendo los nombres completos de las clases, se usa la sentencia import. Una vez utilizada esta sentencia, podemos llamar sólo con el nombre simple de la clase en nuestro código. Enseguida dos ejemplos:

// Sin sentencia import
package escuela;
class Curso {
    persona.Maestro maestro;
}

// Con sentencia import
package escuela;
import personal.Maestro;
class Curso {
    Maestro maestro;
}

En los ejemplo la clase Curso está contenida dentro del paquete escuela y la clase Maestro pertenece al paquete personal. Para que la clase Curso pueda utilizar la clase Maestro, debe escribir el nombre completo de la clase junto con el paquete  (como en el primer ejemplo) o utilizar la sentencia import y utilizar el nombre simple de la clase (como en el segundo ejemplo).

Si la sentencia import es usada, debe aparecer después de la sentencia package, si no, la clase no podrá compilar. La sentencia import puede aparecer varias veces en la clase.

Comentarios.

Java permite hacer o escribir comentarios en el código. Los comentarios pueden aparecer en cualquier parte de la clase, antes de la sentencia package, de la sentencia import, antes de la definición de la clase, antes de las variables, o antes de los métodos y dentro de los métodos mismos. Existen dos tipos de comentarios: los multilínea y los de “fin de línea”.

Los comentarios multilínea inician con /* y terminan con */, los comentarios “fin de línea” inician con // y  como su nombre lo indica, terminan con el salto o cambio de línea del código. Enseguida unos ejemplos de comentarios de los dos tipos:

 

// Comentario fin de linea antes de sentencia package
package escuela;
/*
 * Este es un comentario multilínea
 * continua el comentario
 */
class Curso {

    // Este es un comentario fin de linea

    persona.Maestro maestro; //Otro comentario fin de linea

    /* Otro comentario multilínea en una sola linea, es válido */

}

Antes dijimos que la sentencia package, si se especifica, debe ser la primera sentencia en una clase Java, los comentarios, sin embargo, pueden aparecer antes de ésta sentencia y el compilador no marcará error. Los comentarios pueden aparecer en cualquier parte del código Java.

Declaración de la clase.

La declaración class marca el inicio de la clase. Basta con especificar la palabra reservada class y enseguida el nombre de la clase. La declaración de una clase esta compuesta por varias partes:

  • Modificadores de acceso
  • Modificadores de no acceso
  • Nombre de la clase
  • Nombre de la clase base si ésta extiende de otra clase
  • Nombre de todas las interfaces que implemente, si está implementado alguan iterface
  • Cuerpo de la clase (campos de clase [class fields], métodos, constructores), incluidos dentro de llaves de inicio y fin, {}

De estas partes o componentes sólo la palabra reservada class, el nombre de la clase y las llaves de apertura y cierre son obligatorias, el resto son opcionales.

 

//Ejemplo de la definición mínima obligatoria de una clase

class Punto {}

//Ejemplo de la definición completa de una clase

public final class Predio extends Poligono implements Geometria {}

Definición de la clase.

La clase se diseña para especificar las propiedades y el comportamiento que tiene un objeto. Las propiedades del objeto se implementan o definen a través de variables  y el comportamiento de por medio de métodos. Las clases son como moldes de los cuales podemos producir varios objetos. Un objeto es creado a partir de una clase. La clase inicia con la palabra reservada class y es sensitiva a mayúsculas, es decir, que se debe escribir todas con minúsculas, Class no es palabra reservada válida para java, class sí. El estado de una clase se define mediante atributos o variables de instancia. El comportamiento se define mediante los métodos, los cuales pueden incluir una lista de argumentos. Una definición de clase puede incluir también comentarios y constructores.

/* Ejemplo de definición de 
 una clase */

class Predio {
  double area; // variables de instancia
  String nombre;
  Geometria geometria;

  Predio(String nombre) { // constructor
    this.nombre = nombre;
  }

  double calculaArea() { // método
    //aquí irá el código para calcular el área
  }

}

Variables.

En el ejemplo anterior ; area, nombre y geometria son variables llamadas de instancia o atributos de instancia, y almacenan el estado de un objeto (también llamado instancia de una clase) .  Cada objeto o instancia de una clase tiene su propia copia de estas variables de instancia. Si los valores de estas variables cambian, no afectan a los valores de instancia de otros objetos. Las variables de instancia se definen  o especifican dentro del cuerpo de la clase pero fuera de los métodos de la clase. Hay una excepción de variables que su valor son compartidas pro todos las instancias u objetos de clase, a este tipo de variables se le antepone la palabra static y se les llama variables estáticas o variables de clase.

Métodos.

calculaArea en el ejemplo de más arriba, es un método de instancia, por lo general, los métodos se usan para manipular las variables de instancia. Para manipular las variables de clase o estáticas, se usan los llamados métodos de clase o estáticos.

Constructor.

En el mismo ejemplo Predio es un constructor. Un constructor de clase se usa para inicializar o crear los objetos de una clase. Una clase puede definir varios constructores que acepten diferentes conjuntos de parámetros de método.

 

Publicado el 1 comentario

OCAJP 7. Definir la estructura de una clase java.

Definir la estructura de una clase java.

Las clases java tienen dos principales elementos: métodos y campos (fields). Los métodos en otros lenguajes son equivalentes a las funciones y los campos son lo equivalentes a las variables. En java ambos elementos son conocidos como miembros de la clase. Un método es una operación que puede ser llamado por otros métodos. Un método puede recibir datos por medio de Parámetros. Un método puede regresa un valor y declara de que tipo será este valor. Los Parámetros recibidos y los valores regresados por un método son representados por variables.

Las clases java hacen o crean objetos. Un objeto es una instancia creada en tiempo de ejecución  de una clase  ubicada en la memoria utilizada por un programa java. El estado de un programa es representado por todos los objetos de las diferentes clases que lo conforman.

La declaración completa de un método es conocida como la firma (signature) del método.

Ejemplo de una clase simple de java.

Simple Clase Java
Simple Clase Java

Para hacer comentarios de varias líneas en el código, java utiliza el estilo de C.  Pra iniciar un comentario se utilizan los caracteres /* y para terminar el comentario */  Java ignora todo lo contenido entre ese par de caracteres. Si se utiliza el formato de comentario que se muestra en el código anterior se logra a través de la herramienta javadoc generar automáticamente documentación de la clase en formato html. Otra forma de hacer comentarios, en una linea es usando los caracteres //. Todo lo que escriba después de esos caracteres será ignorado por java.

La primera línea de código después del comentario sirve para definir la clase. Se especifica primeramente un modificador de acceso (public) que indica que cualquier clase de cualquier paquete de clases puede acceder a nuestra clase y utilizarla. Se puede omitir este modificador de acceso (public) lo que le indicaría a java que a la clase definida sólo pueden acceder a ella clases del mismo paquete. Un paquete (package) en java, es la forma en que java organiza las clases y demás elemento, es una colección de clases que realizan una función similar. Paquete (package) es otro elemento de la estructura del código de la clase. Sin embargo el el ejemplo antes visto, no se especifica. Si se especificara debería ser la primera línea ejecutable en una clase, antes de definir la clase.

Como en el ejemplo no se especifica ningún paquete, el directorio pertenece a un paquete por default que lo representa el directorio donde fue creado el archivo que contiene el código de la clase. Todas las clases que se codificaran en el mismo directorio y sin especificar el paquete, pertenecerían al mismo paquete default.

Enseguida del modificador de acceso public se encuentra la palabra reservada class que le indica a java que se va a definir una clase. Enseguida se debe proporcionar el nombre que se le va a asignar a la clase, en este caso EstructuraClaseJava. El nombre de la clase puede ser cualquiera que le quiera dar el programador. Por regla de java se utiliza una palabra o palabras que indiquen un sustantivo ya que representarán un objeto en sí. Por regla el nombre de la clase empieza con Mayúscula y se utiliza el formato UpperCamelCase, es decir, si el nombre de la clase está compuesta de varias palabras, cada palabra debe empezar con mayúscula y el resto de la palabra con mayúsculas. Esto es sólo por convención, ya que el compilador java no marcará error si solo se emplean minúscula o sólo mayúsculas o una mezcla de estas, el nombre será válido para java.

Después del nombre de la clase se inicia un bloque que contendrá tanto los campos como los métodos de la clase. Recuerde que un bloque se forma con los corchetes de apertura y cierre. Por conveniencia por lo general se especifican primeramente todos los campos (fields) de la clase y enseguida los métodos, pero no es necesario, métodos y campos se pueden distribuir de otras formas, pueden ir primero los métodos y después los campos, o en forma intercalada, el compilador no marcará error.

En la siguiente linea del código de ejemplo, se declara una variable de instancia o campo x. En éste caso primero se establece el modificador de acceso del campo como privado (private). Ésto indica que a ese campo, otras clases, no lo pueden acceder directamente. Enseguida del modificador de acceso se declara el tipo del campo. Un tipo puede ser el nombre de una clase o un tipo primitivo de java, en este caso es int (número entero).  Enseguida se especifica el nombre de la variable o campo.  Por último punto y coma (;) que define el fin de una instrucción java. Java recomienda que el nombre de los campos, si es una sola palabra, se escriban con minúsculas. Si esta compuesta por varias palabras, la primera palabra inicie con minúsculas y el resto, la primer letra de la palabra inicie con mayúscula y el resto de la palabra con minúsculas al estilo lowerCamelCase.

El siguiente elemento en el ejemplo es un constructor. Esta estructura comienza especificando un modificador de acceso (public) y un nombre que es exactamente igual al nombre de la clase y un conjunto de paréntesis de apertura y cierre. Dentro de esos paréntesis pueden ir una serie de parámetros, pero en el ejemplo están vacíos. Enseguida le sigue un bloque de código que inicia por un corchete de apertura y termina con un corchete de cierre como ya hemos visto. Más adelante en otro tema se tratará específicamente de esta estructura llamada constructor. Los constructores no regresan ningún tipo de valor.

El último elemento en el ejemplo es un método. Se especifica el modificador de acceso (public), el tipo de dato a regresar por el método (int) en este caso un tipo primitivo entero, el nombre del método que por convención de java se declara de la forma lowerCamelCase visto anteriormente, un paréntesis de apertura, una lista de parámetros separados por comas y el paréntesis de cierre. A esta declaración le sigue un bloque de código como los que ya hemos visto. El nombre del método es metodoDeEjemplo. Lo convencional es que inicie con el nombre de un verbo ya que por lo generar los método representan acciones.

En el ejemplo el método solo recibe un parámetro del tipo entero y de nombre m. Si el método recibiera más parámetros, cada par tipo y nombre de variable, irían separados por comas. Como éste método  debe regresar un valor dentro del bloque del método debe haber una instrucción return que debe regresar un dato del tipo especificado en la definición del método, en nuestro caso de tipo entero.

No pueden existir dos métodos con la misma firma (signature) en una misma clase. La firma de un método esta compuesto por el nombre del método, el número de parámetros, el tipo de parámetros y el orden de los parámetros en la lista de parámetros. Los constructores también tienen una firma. Una firma no incluye el tipo de dato que retorna un método.

 

 

 

 

Publicado el Dejar un comentario

OCAJP 7. Java Básico. Definir el alcance de las variables.

Definir el alcance de las variables.

Los parámetros de un método en una clase son conocidos como variables temporales. El valor y el nombre de estas variables expiran cuando el método llamado regresa el control al código que lo invocó. Cualquier variable definida en la lista de parámetros del método o dentro del cuerpo del método permanecen en memoria sólo lo que dura  en ejecutarse el método llamado.

En java existen cuatro tipos de variables:

  • Variables de Instancia (Campos No-Estáticos). Los objetos almacenan su estado individual en campos no-estáticos. Son declarados sin la palabra clave static. Sus valores son únicos para cada instancia u objeto.
  • Variables de Clase (Campos Estáticos). Son campos declarados con el modificador static. Hay sólo una copia de esta variable para todas la instancias de la clase.
  • Variables Locales. Es en donde los métodos de los objetos almacenan su estado temporal. Se declaran parecido a los campos. No existe una palabra clave para especificar que una variable es local sino que depende donde la variable es declarada: dentro de los corchetes que definen un método. Son accesibles sólo dentro del método que las declaró y no son accesibles del resto de la clase.
  • Parámetros. Son las variables que conforman la firma de un método. Son siempre clasificados como variables y no como campos. También se encuentran en otras construcciones que aceptan parámetros como los son los constructores y manipuladores de excepciones.

Llamaremos campos a  las variables de instancia y de clase. Llamaremos variables a las anteriores más las locales y parámetros. Un campo o field está disponible en memoria el tiempo que el objeto que la contiene permanezca en memoria. En java una variable local debe de ser declarada antes de ser  usada.

El scope  ó alcance de las variable se refiere en que lugar del programa una variable específica puede ser usada o referenciada. Por lo general las variables pueden ser usada dentro del bloque de instrucciones al que pertenecen y no fuera de estos. Un bloque  se crea cada vez que tú abres y cierras corchetes ya sea para definir una clase, método o cualquier otra construcción que se verán más adelante. Más específicamente, el scope o alcance de una variable local abarca desde donde se declaró, hasta el corchete de cierre del bloque al que pertenecen El tiempo de vida de las variables depende del scope o alcance donde fueron declaradas. Sólo se puede declarar una vez una variable dentro de un bloque.

El alcance de los parámetros en un método, es todo el método completo. Las variables declaradas en la parte inicial de un ciclo for es el ciclo entero. Se puede declarar varias veces una variable local con el mismo nombre dentro de bloques no anidados dentro de un mismo método, pero es inválido declarar la variable local en bloques anidados.

Scope de Variables
Scope de variables