Formación informática

Java | Joomla | MySQL

Curso de Java – Tema 12.1: clase en Java

Molde para hacer galletas

¿Qué es una clase?

Las clases en Java (Java Class) son plantillas para la creación de objetos. Es una de los principales paradigmas de desarrollo de software en la actualidad. La definición de una clase incluye especificaciones formales para la clase y cualquier dato y métodos incluidos en ella.

Java cuenta con muchísimas clases predefinidas con múltiples métodos para facilitar todo lo posible la labor del programador. Cuando exista una clase que nos sea útil, podemos utilizarla en nuestro código realizando la importación oportuna, en caso de que sea necesario.

Si imaginásemos las clases en el mundo en el que vivimos, podríamos decir que la clase “persona” es una plantilla sobre cómo debe ser un ser humano. Todos y cada uno de nosotros, los seres humanos, somos objetos de la clase “persona“, ya que todos somos personas. La clase “persona” contiene la definición de un ser humano, mientras que cada ser humano es una instancia u objeto de dicha clase.

Un símil culinario es pensar en una clase como si fuera un molde para hacer galletas, los objetos que se crean a partir de ella, son las galletas.

Estructura general de una clase

La estructura de una clase en Java es esta:

/*
 * Descripción de que hace la clase
 */

//Paquete que contiene la clase.
package nombredelpaquete;

//Clases importadas (Si las hay)
import nombre_clase_importada1

/**
 * @author Etiqueta del autor
 */

// Declaración de la clase principal que inicializa el programa. 
public class Main {
    
//Aquí se escriben las variables de clase, comunes a todos los métodos tienen que ser estáticas.
        
// Declaración del método principal que inicia el resto de métodos
    	public static void main(String[] args) {
      
// Aquí se escribe el código del método principal
        
    	} //Cierre del método main

    //Aquí se crearían el resto de métodos, con las variables locales
    
} // Cierre de la clase Main

Cómo se declara?

En Java la creación una clase de hace en dos pasos. Primero se declara y, a continuación, se define o implementa. Mediante la declaración se dice a Java lo que necesita saber sobre la nueva clase. La implementación se hace en el cuerpo de la declaración para definirla.

La sintaxis genérica para crear una clase es:

modificador_de_acceso modificador_instancia class NombreDeLaClase {

tipo_dato variable_clase_n;

instrucciones_o_métodos;

}

En el caso de que sea la clase principal la sintaxis es:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package principal;

/**
 *
 * @author jugarenequipo-ad
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }
    
}

Modificadores de acceso. Encapsulación

Los modificadores de acceso nos introducen al concepto de encapsulación mediante la cual se busca controlar el acceso a los datos que conforman un objeto o instancia, de este modo podríamos decir que una clase y por ende sus objetos que hacen uso de modificadores de acceso (especialmente privados) son objetos encapsulados.

Los modificadores de acceso permiten dar un nivel de seguridad mayor a nuestras aplicaciones restringiendo el acceso a diferentes atributos, métodos, constructores asegurándonos que el usuario deba seguir una "ruta" especificada por nosotros para acceder a la información.

Es muy posible que nuestras aplicaciones vayan a ser usadas por otros programadores o usuarios con cierto nivel de experiencia; haciendo uso de los modificadores de acceso podremos asegurarnos de que un valor no será modificado incorrectamente por parte de otro programador o usuario. Generalmente el acceso a los atributos se consigue por medio de los métodos get y set, pues es estrictamente necesario que los atributos de una clase sean privados.     

Existen cuatro tipos: private, public, restricted y default.

Modificador de acceso private

El modificador private en Java es el más restrictivo de todos. Básicamente cualquier elemento de una clase que sea privado puede ser accedido únicamente por la misma clase y por nadie más. Es decir, si por ejemplo, un atributo es privado solo puede ser accedido por lo métodos o constructores de la misma clase.

Si queremos modificar el valor de las variables declaradas como private tendremos que usar métodos definidores. Si queremos saber el valor que contiene con ellos tendremos que usar métodos captadores.

1.1.3.1.2. El modificador por defecto (default)

Java nos da la opción de no usar un modificador de acceso y al no hacerlo, el elemento tendrá un acceso conocido como default o acceso por defecto que permite que tanto la propia clase como las clases del mismo paquete accedan a dichos componentes. De aquí la importancia de incluir nuestra clase en un paquete.

1.1.3.1.3. Modificador de acceso protected

El modificador de acceso protected nos permite acceso a los componentes con dicho modificador desde la misma clase, clases del mismo paquete y clases que hereden de ella, incluso aunque estén en diferentes paquetes.

Debemos aclarar algo en el caso del modificador de acceso protected y el acceso desde suclases. Es un error común pensar que se puede crear un objeto de la clase madre y luego acceder al atributo con acceso protected sin problemas. Sin embargo esto no es cierto, puesto que el modificador protected lo que nos permite es acceder al atributo heredado desde el ámbito de la clase hija y no directamente.

1.1.3.1.4. Modificador public

El modificador de acceso public es el más permisivo de todos. Básicamente es lo contrario a private en todos los aspectos (lógicamente); esto quiere decir que si un componente de una clase es public, tendremos acceso a él desde cualquier clase o instancia sin importar el paquete o procedencia de ésta.

En la siguiente tabla puedes comparar los efectos de usar uno u otro tipo de declaración en cuanto a visibilidad de los campos o métodos: 

MODIFICADOR

CLASE

PACKAGE

SUBCLASE

TODOS

Public

Protected

No

No especificado

No

No

Private

No

No

No

Modificadores de instancia

static

Una clase, método o campo declarado como estático puede ser accedido o invocado sin la necesidad de tener que instanciar un objeto de la clase. Uno de los ejemplos típicos de uso de métodos y variables estáticas es la clase java.lang.Math.

Los campos de una clase declarados como estáticos son inicializados en el momento en que se carga la clase en memoria, respetando el orden de declaración. Los campos estáticos no pueden ser accedidos desde un contexto no estático; este comportamiento resultará en un error en tiempo de ejecución.

final

Se puede declarar una clase como final cuando no nos interese crear clases derivadas de dicha clase.

Uno de los mecanismos que tienen los hackers para dañar o para obtener información privada en los sistemas es la de crear una clase derivada y sustituir dicha clase por la original. La clase derivada actúa exactamente igual que la original pero también puede hacer otras cosas, normalmente dañinas. Para prevenir los posibles daños, se declara la clase como final, impidiendo a cualquier programador la creación de clases derivadas de ésta. Por ejemplo, la clase String que es una de las más importantes en la programación en lenguaje Java, está declarada como final. El lenguaje Java garatiza que siempre que se utilice un string, es un objeto de la clase String que se encuentra en el paquete java.lang.String, y no cualquier otro string.

class

Se usa la palabra reservada class para indicar que se quiere crear una clase.

Main – NombreDeLaClase

La clase Main es el nombre de la clase mediante la cual Java sabe que tiene que buscar en ella el método Main para iniciar el programa siguiendo las instrucciones contenidas en el método principal. Todo programa Java tiene obligatoriamente un método llamado main. Este método es el punto de entrada al programa y también el punto de salida.

Por lo tanto, una clase Main quedaría declarada correctamente así:

public class Main { 
    public static void main(String[] args) {
    }
    otros_metodos {}
}

En el caso de ser otra clase cualquiera la declaración sería:

Modificador_de_acceso modificador_instancia class NombreDeLaClase { 
método_1 {}
otros_metodos {}
}

Propiedades o atributos de la clase

Son los atributos que caracterizan a la clase. Para establecer estas propiedades dentro de la clase creamos variables, cuidándonos de asignarle a cada propiedad el tipo de dato que le corresponde. La sintaxis genérica es esta:

modificador_de_acceso tipo_dato nombre_variable;

Las variables de instancia son específicas para los objetos; es decir, si se instancian dos objetos de una clase entonces sus variables de instancia son independientes entre sí. Éstas son públicas y puede acceder a ellas usando el operador punto. Se definen en los métodos, incluido el main.

Las variables de clase se refieren a los mismos datos que comparten entre ellos. Se tiene que declarar como static.

Ahora vamos a empezar a construir la clase “persona”. Necesitamos establecer las propiedades de la clase persona. Como personas, ¿qué propiedades poseemos? Podríamos hablar de un nombre, apellidos, una fecha en la que nacimos, nuestra edad y género, color del pelo y muchas otras características físicas. Hay muchas otras propiedades que podríamos mencionar, pero por ahora solamente tomaremos en cuenta algunas de las que hemos nombrado. Son simplemente características que posee todo ser humano, al menos en la mayoría de los casos. En nuestro ejemplo, las propiedades de la clase persona serían éstas:

private String nombre;
private String apellidos;
private String fechaNacimiento;
private int edad;
private String genero;

Las variables nombre, apellidos, fecha de nacimiento y género contendrán texto, por ello se las ha tipado como String. La edad se guardará como número entero, por ello se ha tipado comoint.

Al establecer las propiedades como private estamos asegurando que dentro de la clase persona se pueda acceder y manipular estas propiedades, pero no así desde otra clase, a menos que el usuario así lo decida y se lleve a cabo a través de métodos públicos definidores y captadores.

Herencia

Es uno de los aspectos fundamentales de la programación orientada a objetos. Java permite el empleo de la herencia simple únicamente, característica muy potente que permite definir una clase tomando como base a otra clase ya existente. Esto es una de las bases de la reutilización de código, en lugar de copiar y pegar.

La herencia se especifica agregando la claúsula extends después del nombre de la clase. En la claúsula extends indicaremos el nombre de la clase base de la cual queremos heredar.

Al heredar de una clase base heredaremos tanto los atributos como los métodos. Mientras que los constructores son utilizados, pero no heredados.

La clase nueva se llama clase derivada y la clase original se llama clase base. La idea fundamental de la herencia es añadir lo que se quiera a la nueva clase para dotarle de mayor funcionalidad que a la clase. 

De un modo indirecto, la herencia organiza las clases en una estructura jerárquica formando jerarquías de clases.

Java tiene una extensa librería de clases disponible que podemos usar para derivar las nuestras. Más adelante ampliaremos esta breve explicación para saber cómo se implementa en el código Java.

En Java, no se heredan los constructores. La primera sentencia del constructor de la clase hija es siempre una llamada al constructor de la clase padre.

La llamada al constructor del padre puede ser:

  • implícita si se omite, se llamará implícitamente al constructor por defecto. Es equivalente a poner como primera sentencia super(). Si no existe el constructor por defecto en la clase padre dará un error en tiempo de compilación.
  • Explícita
	super();  super(a, b);

Buenas costumbres a la hora de crear clases

Hay que seguir las reglas para los identificadores y las convenciones del lenguaje.

Estarán incluidas siempre en un paquete.

Los atributos de clase son privados.

Como consecuencia de lo anterior, cada atributo debe tener sus propios métodos captadores y definidores para obtener y establecer, respectivamente, el valor del atributo, en el caso de que sea necesario realizar estas acciones. En caso contrario no sería posible operar con ellos. Si no va a ser necesario, no se implementan.

Siempre que se use una clase de otro paquete, se debe importar usando import. Cuando dos clases se encuentran en el mismo paquete no es necesario hacer el import pero esto no significa que se pueda acceder a sus componentes directamente.

Hay que documentar lo que hace la clase y sus métodos usando la potente herramienta Javadoc.

Curso de Java – Tema 12: clases, métodos y objetos en Java <- | -> Curso de Java – Tema 12.2: métodos
Curso de Java - Índice ejercicios nivel básico

Escribir un comentario

Aunque los comentarios no expresan la opinión del administrador del sitio web, éste si que tiene una responsabilidad legal sobre lo que aparece. Por lo tanto, habrá una labor de moderación de los mensajes. No se permitirán mensajes ofensivos ni publicidad


Código de seguridad
Refescar

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-Ley 13/2012, de 30 de marzo. Si continúa navegando consideramos que acepta el uso de cookies. . Más información