lunes, 2 de diciembre de 2013

Clases en Java

En las entradas anteriores hemos hablado de Clases pero, ¿qué es una clase? Una clase es una abstracción que define un tipo de objeto especificando que propiedades tiene (atributos) y que operaciones (métodos) va a tener. Todo en Java forma parte de una clase, es una clase o describe como funciona una clase. Una vez que tenemos una clase, podemos instanciar objetos de esa clase. Podemos decir que la clase es una plantilla de "algo" y un objeto de esa clase es un "algo".

Una clase tendrá atributos y métodos. Los atributos definirán el estado del objeto y los métodos las acciones. El formato de declaración de los atributos se puede marcar individualmente como public, private o protected (lo explicaremos más adelante). El formato de declaración de los métodos es el de una función. Existen unos métodos llamados constructores, que es un método que se ejecuta automáticamente siempre que se declara un objeto de una clase, bien cuando se crea el objeto directamente o cuando se crea dinámicamente, mediante el operador new. Toda clase puede poseer uno o más constructores. El nombre de un constructor es exactamente el nombre de la clase, y carece de tipo proporcionado (ni siquiera void). Para aplicar estos conceptos, crearemos un programa en el que crearemos una clase "Gato" que tendrá unos atributos, dos métodos constructores y otro método "maullar". Este programa tendrá dos clases, una que será la principal, llamada "EjemploClase", que creará a los gatos y otra que se llamará "Gato", que contendrá las propiedades de un gato:

/*Código de EjemploClase*/
public class EjemploClase {
 public static void main(String[] args) {
  Gato guantes = new Gato();
  Gato felix = new Gato(4,"Felix");
  guantes.maullar();
  felix.maullar();
 }
}
/*Código de Gato*/
public class Gato {
 public int edad;
 public String nombre;
 
 Gato(){
  edad = 0;
  nombre = "Desconocido";
 }
 
 Gato(int _edad, String _nombre){
  edad = _edad;
  nombre = _nombre;
 }
 
 void maullar(){
  System.out.println("Miauu me llamo "+nombre+" y tengo "+edad+" años. Miauu");
 }
}
Las clases siempre se definen con la primera letra en mayúscula, y los atributos y métodos con la primera letra en minúscula. En este ejemplo creamos dos constructores, como podemos ver ambos tienen el nombre "Gato", aunque tienen distinto número de argumentos (polimorfismo). En el primer constructor, no le pasamos ningún argumento, de modo que al primer gato le damos los valores por defecto. El segundo constructor recibirá las propiedades por argumento y modificará los atributos. Finalmente el método "maullar" mostrará la información del gato. Para crear un nuevo objeto de una clase, simplemente lo craremos mediante el operador new. Para que un objeto llame a un método bastará con escribir dicho objeto seguido de un punto y el nombre del método.

Cadenas en Java

Para las cadenas de caracteres en Java, podemos utilizar la clase String que permite tratar cadenas con gran comodidad, ofreciendo una lista de métodos que nos puede ayudar a realizar diferentes acciones. Un ejemplo de diferentes usos de esta clase podemos verlas con el siguiente programa:
public class CadenasJava {
 public static void main(String[] args) {
  String cadena;
  cadena = "Cadena de ejemplo";
  System.out.println("La cadena tiene el siguiente contenido: "+cadena);
  System.out.println("La cadena 'cadena' tiene "+cadena.length()+" caracteres");
  System.out.println("¿La cadena 'cadena' está vacia? "+cadena.isEmpty()); 
 }
}
En este programa, podemos ver el contenido de una cadena, el número de caracteres que tiene (mediante el método length) y si está vacía o no, en este caso el resultado es falso ya que no está vacia (mediante el método isEmpty).

Tipos primitivos

El lenguaje Java ofrece varios tipos de variables primitivos, que pueden ser: boolean: Puede ser 'true' o 'false'. char: Almacena caracteres. byte: Almacena enteros de 8 bits. Tiene un alcance desde -128 a +127. short: Almacena enteros de 16 bits. Tiene un alcance de -32.768 a +32.787. int: Almacena enteros de 32 bits. Tiene un alcance desde -2.148.483.648 a +2.148.483.647. long: Almacena enteros de 64 bits. Tiene un alcance desde -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807. float: Almacena números de coma flotante de 32 bits. Tiene una precisión de hasta 7 cifras. double: Almacena números de coma flotante de 64 bits. Tiene una precisión de hasta 15 cifras. Un ejemplo de uso de estos tipos de variables sería el siguiente programa:
public class TiposPrimitivos {
 public static void main(String[] args){
  int valor = 1;
  boolean bandera = true;
  float decimal = (float) 4.5;
  System.out.println("El entero 'valor' contiene: "+valor);
  System.out.println("El boolean 'bandera' contiene: "+bandera);
  System.out.println("El número de coma flotante 'decimal' contiene: "+decimal);
 }
}
Podremos especificar valores enteros empleando distintas bases, anteponiendo un indicador al literal. Decimal -> (No añadimos nada). Binario -> Añadimos 0b al principio. Hexadecimal -> Añadimos 0x al principio. Octal -> Añadimos un 0 al principio. Un programa que aplica esto será el siguiente:
public class TiposPrimitivos {
 public static void main(String[] args){
  int decimal = 12;
  int binario = 0b101;
  int hexadecimal = 0x1A;
  int octal = 0172;
  System.out.println("Valor decimal: "+decimal);
  System.out.println("Valor binario: "+binario);
  System.out.println("Valor hexadecimal: "+hexadecimal);
  System.out.println("Valor octal: "+octal);
 }
}

Entrada de datos

En la entrada anterior vimos como podemos sacar información por pantalla. En esta entrada veremos como podemos almacenar algo que introduzcamos por teclado. La entrada de datos puede efectuarse a través de un objeto de la clase "Scanner" (la cual se construye a partir de System.in). En el ejemplo que crearemos ahora, declararemos una variable de tipo numérica y la mostraremos por pantalla. Para declarar una variable de tipo numérica, crearemos un entero "int", y mediante un ejemplar de "Scanner", obtendremos un número. El código es el siguiente:
import java.util.Scanner;

public class EntradaDatos {
	public static void main(String[] args){
		Scanner s = new Scanner(System.in);
		System.out.printf("Introduzca su edad: ");
		int edad = s.nextInt();
		System.out.printf("Su edad es "+edad);
	}
}
Mediante new creamos un nuevo ejemplar de Scanner, y con el método nextInt() introducimos el número. Finalmente mostramos la edad por pantalla, teniendo en cuenta que con el simbolo '+' podemos concatenar la cadena con la variable.

¡Hola mundo!

Para empezar este cursillo en Java empezaremos por lo más básico: Realizar un "Hola mundo". El "Hola mundo" es un programa que simplemente lo que hará será mostrar por pantalla un mensaje de texto que diga "Hola mundo".

El código será el siguiente:

public class HolaMundo {
 public static void main(String[] args){
  System.out.println("Hola mundo");
 }
}
La clase HolaMundo tendrá un método llamado "main" que será el principal y se llamará al arrancar el programa. Lo que hará main será mostrar por pantalla mediante el método println del atributo "out" de la clase System la cadena caracteres "Hola mundo". La clase System, a través de sus atributos "err", "out" e "in" ofrece las bases de la entrada/salida básica en Java.
La salida se efectúa a través de System.err o System.out. Estos dos atributos de System son de tipo PrintStream y permiten utilizar el método printf(), de características análogas a las de C, con mejoras.

Presentación

¡Bienvenidos al blog "Cursillo en Java"!

En este blog iremos publicando diferentes programas y algoritmos en Java para que tu aprendizaje en este lenguaje de programación sea rápido y eficaz.

Esperemos que os guste y si tenéis alguna duda o sugerencia no dudéis en comentar.