En esta entrada vamos a
empezar a hablar de programación en sí empezando por lo más básico, de hecho
vamos a olvidarnos del AS que no tengo instalado aún. ¿Qué es Java? Java es un
lenguaje de programación orientado a objetos. ¿Y qué significa esto? Vamos por partes.
Para entenderlo vamos a
compararlo con otro lenguaje más antiguo, que va a representar todo lo
contrario, y por comodidad vamos a coger Fortran, por conocido y por arcaico.
Como el movimiento se
demuestra andando vamos a ir ejemplificando todo esto con un programita que va
a simular una carrera de f1. Está
escrito desde Eclipse ya que el AS no me tira, pero vale para ver lo que es
Java.
Al escribir un programa
de Fortran lo primero creábamos una función main,
definíamos nuestras variables e íbamos implementando el algoritmo paso por
paso, si había algo un poco engorroso que se repitiera pues nos creábamos una
función si nos veíamos con ganas y poco más. Simple y directo, al menos eso
parece al principio.
Vamos con el ejemplo para
orientarnos: pongamos que tenemos 10 coches de diferentes escuderías, cada
coche tiene varios estados como son su velocidad base, su ritmo de carrera, su
posición y su gasolina restante. Estas serían las variables a tener en cuenta y
habría que tener cuidado de no mezclar una con otras.
Sin embargo en la programación
orientada a Objetos existen dos mundos separados: las clases y los objetos.
Las clases son
definiciones de un tipo de elementos que se repiten y que tienen en común
varios elementos, en este caso la clase seria el coche y sus estados comunes la
velocidad, el ritmo, la gasolina y su posición
ya que un coche en la carrera está definido por ellos.
Los objetos son como las
realidades de cada clase, instancias se les llama, un objeto debe pertenecer a
una clase y una clase puede tener muchos objetos diferentes que sean diferentes
instancias de la misma. Esto nos permitiría agrupar todas variables de un solo
coche bajo un mismo grupo y a la vez indicar que los coches son similares y
mantenerlos separados.
Por ejemplo la clase
coche y sus variables en Java:

Float es el tipo de variable que indica que es real no entera, el Real de
Fortran y public es un modificador de
acceso, en este caso permite que cualquiera pueda acceder a la clase e iniciar
un objeto.
En Fortran ahora tocaría
definir las funciones que marcan la evolución de los coches cada vuelta, estas
podrían ser: calcular el tiempo de la vuelta, el gasto de gasolina, comprobar
si debe ir a boxes y decidir que ritmo debe marcar en la siguiente vuelta por
ejemplo.
Esto podría suponer un problema porque cualquier línea del código puede
llamar a una función específica que solo deberían usar los coches, por ejemplo código relacionado con la carrera
podría intentar comprobar si tiene que
ir a boxes produciendo un error en el programa. En Java estas funciones que
afectan solo a un tipo de objetos se implementan dentro de cada clase y se las
denomina métodos. De esta forma se asegura la estanqueidad del código. Omitiendo
el código de cada función, tendría una forma como la siguiente:

Como se puede observar
cada método es idéntico a una función, tiene un nombre, un argumento de salida,
void es salida nula, y unos
argumentos de entrada, que en la mayoría de los casos están vacíos, aunque
parezca extraño una función sin argumentos de entrada ni de salida puede ser
útil. Se puede ver además como el
compilador avisa de que no he puesto un valor de retorno en el método tiempoVuelta() y sin embargo he indicado
que devuelve un float.
Además de los que he
mencionado anteriormente hay un método extraño, el método coche, este es el
constructor, se trata de un método que pertenece a la clase y no a las
instancia y al que se llama para inicializar una nueva instancia de coche. Esto
veremos lo veremos más adelante.
Una de las ventajas de la
programación con objetos es que las clases son muy versátiles se pueden derivar
o incluir en otra. Es decir se puede definir una clase derivada de otra que sería
su superclase, esto implementaría automáticamente todas las variables y métodos
de la superclase y nos permite añadir características peculiares de un
subgrupo, aquí por ejemplo vamos a utilizarlo para crear una subclase que sea
el equipo redBull y que tenga un
método extra que se llame turbo y les permita ser mas rápidos, el código seria
el siguiente:

Aquí tenemos un caso de
una función que no tiene argumento de entada ni de salida, es void, pero sin
embargo tiene efecto. Esto se debe a que los métodos pueden modificar las
variables de la clase de forma natural. De hecho es común que las variables de
la clase se declaren como privadas y que la única forma de cambiarlas sea con
su método correspondiente evitando así que se pueda cambiar por error. Aquí
tenemos un ejemplo:

De forma que al definir var como privada no se puede acceder a
ella desde fuera de la clase y la única forma de cambiarla es mediante el
método cambiarValor.
Por ultimo por hoy, del
mismo modo que se definen variables para una clase se pueden definir objetos de
otra clase que actúen como variable, ahora vamos a crear una clase llamada
carrera que tenga como variables diferentes instancias de coches, y que dos de
ellos sean RedBull:

Finalmente tenemos un
método muy importante, el main, este
señala el punto de inicio de ejecución del programa, que en este caso hace lo
siguiente:
Crea una instancia de
carrera que llama carrera1.
Hace que pase una vuelta de la carrera1.
El redBull1 usa el turbo para ir más rápido.
Pasa otra vuelta de la carrera.
Hace que pase una vuelta de la carrera1.
El redBull1 usa el turbo para ir más rápido.
Pasa otra vuelta de la carrera.
Al no haber más código se
detiene la ejecución.
Aquí hay un par de cosas
nuevas, como ya avisamos la clase carrera contiene 10 coches, 2 de los cuales
son redBull, tenemos un método main que inicia el código crea una
carrera y ejecuta los métodos de la clase, para acceder a un método se accede
mediante objeto.metodo y del mismo
modo para una variable desde fuera de la ejecución de sus métodos, carrera.RedBull.usarTurbo() es un ejemplo de todo, y se aprecia como esta
referencia puede ser recursiva ya que el objeto llama a su vez a un método
propio.
Por hoy vamos a dejarlo
aquí, esto es solo el principio de Java y aunque puede parecer complicado eso
es culpa mía que no se me explicar, aunque al principio si cuesta un poco
cogerlo ya que es otra forma de pensar.
Si queréis más
información o seguramente como Dios manda la tenéis accesible en Internet en http://docs.oracle.com/javase/tutorial/java/index.html donde el propio propietario
tiene unos tutoriales extensísimos y completísimos, eso sí, en Ingles.
El próxima día os traeré
el programa completo de forma que aunque no este explicado nos podamos ir
familiarizando con la forma de programar y para que os vaya sonando todo.
Hasta la próxima!
