G.Bordel >Docencia >TAP Técnicas Actuales de Programación (curso 2010-2011)
desprotegido Intro. desprotegido Temario desprotegido Calendario desprotegido RPF desprotegido Recursos protegido Práctica protegido Gest. Alum.
tema_anterior Tema 2: Uso del entorno de desarrollo tema_siguiente
  1. Ejemplo inicial: el programa "HolaMundo".
  2. Bibliotecas de clases: su estructura.
  3. Compilación y ejecución.
  4. Generación de documentación.
  5. Desensamblado y decompilación.

2.1- Ejemplo inicial: el programa "HolaMundo"

Comenzaremos, como ya es costumbre a la hora de estudiar un nuevo lenguaje de programación desde que lo hicieran Brian Kernigham y Dennis Ritchie para el lenguaje C, viendo el código de un programa que simplemente escribe en la pantalla el texto "Hola mundo". Para hacer algo tan simple como esto, hemos de utilizar un buen número de características de Java que iremos viendo poco a poco. Por el momento nuestro objetivo es más básico: tener un primer contacto con el código Java para ver su "aspecto" y aprender a utilizar el compilador y demás herramientas.

[nota.- en ocasiones, los detractores de Java -alguno hay, pero posiblemente ninguno que conozca realmente el lenguaje- dicen que un lenguaje que no permite hacer una función trivial como la que nos ocupa con un código trivial, no puede ser bueno. Esta "no trivialidad" de nuestro programa es fruto de la alta capacidad de java para la estructuración, lo que beneficia enormenente a la hora de afrontar tareas complejas].


 1-
 2-
 3-
 4- 
 5-
 6-
 7-
 8-
 9-


 //
 // Aplicación ejemplo "HolaMundo"
 //
 
 public class HolaMundo {
 	public static void main(String[] args) {
 		System.out.println("Hola, mundo");
 	}
 }

Sin ánimo de explicar a fondo el programa, comentaremos algún aspecto del mismo. Las tres primeras lineas son comentarios, que comienzan con el marcador "//". Este marcador afecta sólo a una linea, de modo que no hay marcador de terminación. El programa propiamente dicho esta formado por las lineas 5 a 9. Todo el código en Java se escribe definiendo "clases", concepto central en la programación orientada a objetos, de modo que vemos que en nuestro ejemplo se hace esto: el código de las líneas 6 a 8 está encerrado en un bloque (lineas 5 y 9) que indica que se trata de una "clase" de nombre "HolaMundo" y que tiene la característica de ser pública (ya veremos esto). Las líneas 6 a 8 no son otra cosa que una función. Su nombre es conocido para los programadores de C: "main". Es el punto inicial por donde comienza la ejecución de nuestro programa. Dejamos por el momento las características de esta función que vienen determinadas por sus atributos y parámetros en la linea 6, para ver su contenido. Como puede verse sólo hay una sentencia que consiste en una llamada a una función de nombre un tanto complejo -System.out.println- pero que sin duda lo que hace es imprimir lo que le es dado como parámetro.

Antes de aplicar a este programa las utilidades de desarrollo vamos a ver una segunda versión del mismo en la que utilizaremos la orientación a objeto. Evidentemente para algo tan simple no es necesario plantearse tal solución, pero será un ejemplo básico para entender lo que son clases y objetos en una primera aproximación.


 1-
 2-
 3-
 4- 
 5-
 6-
 7-
 8-
 9-
10-


//
// Aplicación ejemplo "HolaMundo"
//

public class HolaMundo {
	public static void main(String[] args) {
		Saludo hola=new Saludo("Hola");
		hola.saludo("Mundo");
	}
}
  

 1-
 2-
 3-
 4- 
 5-
 6-
 7-
 8-
 9-
10-
11-
12-
13-
14-
15-
16-


//
// La declaración de un saludo
//

public class Saludo {
	private String saludo;

	public Saludo(String s) {
	saludo=s;
	}

	public void saludo(String s) {
	System.out.println(saludo+", "+s);
	}

}

Tenemos ahora la declaración de dos clases que van a colaborar en la solución de nuestro problema. La primera es muy similar a la vista anteriormente, y en ella sólo ha cambiado la linea que ejecutaba la escritura del mensaje, que ha sido sustituida por dos lineas que hacen referencia a la otra clase. Esta otra clase, de nombre Saludo consta de una declaración de la variable saludo [línea 6] como String (cadena de caracteres) y dos funciones [líneas 8-10 y 12-14]. En la línea 13 nos encontramos con la llamada a la rutina System.out.println que ha "desaparecido" de la otra clase, aunque con un parámetro diferente.

Haremos dos observaciones antes de continuar analizando el código:

  • hemos visto que Saludo es el nombre de la clase y en ella tenemos una variable saludo de modo que estamos haciendo uso del hecho de Java distingue entre mayúsculas y minúsculas en la formación de los identificadores
  • además, hemos utilizado la mayúscula en el nombre de la clase y minúscula en la variable. Esto es una convención de nombrado, es decir, no es un requisito a cumplir necesariamente, pero su adopción ayuda a la claridad y la comprensión del código cuando lo leemos. Mas detalladamente, la convención dice que los identificadores comenzarán por mayúscula en caso de referirse a una clase y por minúscula si a una variable o función, y en caso de estar compuestos por varias palabras, a partir de la segunda, la primera letra de cada palabra irá en mayúscula. (p.ej. MiClase, miVariable, miFunción)

si se observa detenidamente la segunda clase, hay una excepción a este último punto: hay una función con nombre idéntico a la clase, y por tanto comienza con una mayúscula. Esto es correcto, puede haber una o varias funciones con idéntico nombre a la clase y tienen una función especial como veremos enseguida.

Seguimos con la interpretación del ejemplo. Ahora nuestro programa principal -main- va a hacer uso de que existe una definición de una clase que "sabe" generar saludos. Esta clase establece unas características y un comportamiento que será dado a cada objeto que se cree siguiendo su definición. Estos objetos tendran una variable "saludo" (cada uno la suya) y podrá ejecutarse sobre ellos las dos funciones "Saludo()" y "saludo()". Veamos esto analizando el uso que la primera clase hace de esta segunda. En la linea 7, se declara una variable "hola" como de "tipo" "Saludo", lo que quiere decir que "hola" es una variable preparada para "referirse" a un objeto que se genere de acuerdo con la declaración de la clase "Saludo". Inmediatamente se inicializa esta variable dandole un valor, osea, un objeto. Para ello se gerera el nuevo objeto (se "instancia") mediante el operador new, que hace la reserva de memoria necesaria, y llamando a la rutina del mismo nombre que la clase. Esa rutina actúa como un inicializador (en nuestro caso toma como parámetro una String y almacena su valor en la variable del objeto recien generado). Las rutinas de nombre igual a la clase se denominan, dado su uso, "constructores". En nuestro ejemplo, al llegar a la linea 8 disponemos de un objeto de clase Saludador que tiene en su variable interna el valor "Hola". En esa linea 8 se le dice al objeto (hola) que ejecute la rutina saludo (hola.saludo(...)) dandole otra String como parámetro, de modo que analizando lo que esta hará -linea 13- vemos que presentará en pantalla una cadena de caracteres formada por la que retiene el objeto en su variable interna, más una coma y la cadena que le damos como parámetro.

Hemos visto unos ejemplos básicos que nos permitiran continuar con este capítulo, y además hemos ido avanzando algunos conceptos y terminología. Esto se ha hecho sin afán de precisar y en realidad se han cometido algunas inexactitudes (no errores) que se "fijarán" en los capítulos pertinentes. De todos modos antes de avanzar, y por no mantener una de estas inexactitudes diremos que el termino aquí usado de "función" no se utiliza en los lenguajes orientados a objeto, sino que se habla bien de "constructores" bien de "métodos", distinguiendo de este modo los dos casos.

En este punto puede resultar conveniente leer lo que se explica sobre "objetos y clases" en un apartado posterior de este curso [§4.1].

Siguiente punto: 2.2- Bibliotecas de clases: su estructura


Plataforma de soporte a curso y contenidos (c) German Bordel 2005.