Conceptos básicos de Java y Programación Orientada a Objetos

Aqui voy a escribir un poco de lo último que he aprendido, y cómo también estoy aprendiendo a usar JQuery, lo pondré en una clase Accordion, del JQuery UI que me he descargado. Ya sé que seria mejor poner toda esta información en un blog, pero asi mato dos pájaros de un tiro.

En esta página, no voy a extenderme mucho ni profundizar en cada tema. Quizás pondré links a otras webs, dónde explican mejor cada concepto, pero lo que quiero hacer aqui es explicar brevemente y de forma sencilla lo que he aprendido. Mas que nada, como un recordatorio para refrescar la memoria, si no, necesitaria un montón mas de páginas para poder explayarme de forma correcta.

Introducción

Últimamente he estado aprendiendo programación en Java y un montón de frameworks relacionados. Aqui voy a intentar resumir algunos de los conceptos mas importantes de este lenguaje, asi cómo los conceptos básicos de estos frameworks, que són, cuando y cómo utilizarlos.

Para empezar, decir que el lenguaje de programación de Java, es muy similar a C#, y que tanto Java cómo C#, se van copiando uno del otro cuando aparece alguna funcionalidad que le gusta al otro lenguaje.

Los conceptos de Programación Orientada a Objetos son los mismos, con algunas particularidades o pequeñas diferencias. Los dos lenguajes son lenguajes manejados, que quiere decir que tienen garbage collection, y que no hace falta destruir los objetos cuando ya hemos acabado de usarlos y que es el mismo sistema que con un listener, sabe que ya estamos listos con ese objeto y lo elimina de la memoria.

Los dos lenguajes utilizan la herencia de clases, los interfaces, las clases abstractas, funciones static, Overload y Override de los métodos y un largo etc, además tienen la misma sintaxis, o sea que es muy fácil pasar de un lenguaje a otro.

Cómo C#, Java no soporta la herencia múltiple, pero como podemos implementar Interfaces y es muy fácil usar el poliformismo, extendiendo otros interfaces dentro del interface que queramos usar en nuestra clase.

Si eres nuevo en programación, todo esto te sonará a chino, sin duda. Voy a intentar dar una explicación a algunos de los conceptos básicos, para ir entrando en materia.

En Java, podemos crear objetos, que son instancias de clases. Una clase, no es mas que una estructura de un objeto abstracto, por ejemplo la clase coche. Esta clase tiene sus propiedades y/o sus métodos, color, marca, modelo, velocidad máxima, etc. Cómo no sabemos que coche queremos construir, la clase no atribuye los valores de las propiedades (variables) directamente, si no que se construyen unos métodos que podemos usar para recoger los valores de las variables y asignarle valores en tiempo de ejecución (runtime) cuándo inicializamos un objeto desde otra parte del código, sin poder acceder directamente a la variable privada de la clase, debido a su ámbito(private). Los ámbitos mas usados son private, protected y public. También explicaré un poco a cerca de esto mas adelante. Vamos a ver un ejemplo práctico de una clase en Java, también llamada POJO, Plain Old Java Object, o JavaBean.

Ejemplo POJO o Java Bean

En Java, el fichero que contiene la clase, debe llamarse exactamente cómo la única clase pública que puede tener un fichero. En el fichero pueden haber mas clases protected o private, pero solo una será pública. En este caso, el fichero se llamaria Coche.java, antes de compilar. //Aqui iria la declaración de la clase coche, con sus propiedades(variables) y sus métodos(encapsulación) setters y getters.
		
		public class Coche
		{
			//Constructor de la clase
			public Coche()
			{}
			
			//variables de la clase
			private int idCoche;
			//Esta variable motor, es otra clase
			private Motor motor;			
			private String marca;			
			private String modelo;			
			private String color;			
			private int precio;
			
			//Encapsulación, getters y setters. Métodos públicos para recuperar el valor o asignar el valor a las variables públicas, pasándole un valor cómo parámetro. 
			public void setIdCoche(int idCoche)
			{
				this.idCoche= idCoche;
			}
			public int getIdCoche()
			{
				return idCoche;
			}
			public void setMotor(Motor motor)
			{
				this.motor=motor;
			}
			public Motor getMotor()
			{
				return motor;
			}
			public void setMarca(String marca)
			{
				this.marca=marca;
			}
			public String getMarca()
			{
				return marca;
			}				
			public void setModelo(String modelo)
			{
				this.modelo=modelo;
			}
			public String getModelo()
			{
				return modelo;
			}				
			public void setColor(String color)
			{
				this.color=color;
			}
			public String getColor()
			{
				return color;
			}				
			public void setPrecio(int precio)
			{
				this.precio=precio;
			}
			public int getPrecio()
			{
				return precio;
			}
		}
	

¿Muchos conceptos nuevos para absorver? Bueno, esto no es nada si quieres dedicarte al desarrollo de software, al menos quedas avisado.

Ámbito de las clases o modificadores de acceso

Los ámbitos de las clases pueden ser default, private, protected y public. Hay un par mas, pero de momento con estos tres iremos haciendo boca, que no es poca.

Además en la declaración principal de la clase, sólo podemos poner public, default, abstract o final. Los modificadores protected y private sólo podremos aplicarlos a "Inner Classes" o "Nested Classes", clases dentro de la clase.

Abstract y Final, voy a explicarlo en otro punto, ya que se complica un poquitín.

Default, significa que no hemos puesto ningún modificador de acceso delante del nombre de la declaración de la clase, y en ese caso, por defecto, la clase será de paquete, package, que es parecido a protected.

A lo que se refiere el ámbito, es a la visibilidad. Public, es visible para todas las demás clases, protected visible para las clases del mismo paquete y private sólo para las clases dentro de esa misma clase.

El ámbito, no sólo está referido a las clases, si no que también lo usaremos con los métodos y las variables en una clase. Una clase puede ser public, o sea visible para otras clases pero puede tener métodos y variables protected y private.

Una clase public, podrá ser accedida, por todas las clases, ya sea dentro o fuera del paquete del programa en el que se encuentra dicha clase. O sea que tenemos otra clase que usa esta y que está en otro paquete diferente, declarando la clase cómo una variable, y después instanciándola(importante, lo veremos en el apartado variables), la clase declarada tiene que ser public.

Una clase protected, podrá ser accedida por las clases dentro del mismo paquete, y por las clases que la hereden, asi de simple. Pero no podrá ser declarada en Top level, o sea que debe de ser una clase

Una clase no puede ser declarada private Y una clase private, no podrá ser accedida o vista, por ninguna otra clase, excepto por otras clases dentro de esta clase, "inner classes" or "nested classes" o por las clases que hereden de esta clase. (Mirar herencia)

Otros modificadores

Throw Not implemented yet but, Static, final, abstract, syncronized

Namespace o paquete

Throw Not implemented yet

Variables

Throw Not implemented yet Indice para hacer memoria, Heap, Stack, tipos primitivos y tipos de referencia, locales, globales, modificadores de acceso, private final = constant

Métodos

Todas las operaciones que queramos hacer dentro de una clase, deberán estar encapsuladas dentro de un método. Un método o función, cómo el nombre indica hace algo. Los métodos tienen un tipo de retorno y unos parámetros opcionales a la hora de declarar-los. Unos cuantos ejemplos de métodos nos aclararán las ideas.

Constructores

Los constructores son cómo métodos, pero sin un tipo de retorno que tienen que llamarse con el mismo nombre que la clase en la que están. Pueden haber varios constructores para una clase, con la condición de que estos recojan diferentes parámetros. Por defecto, si no escribimos explícitamente ningún constructor, la clase implícitamente usará un constructor vacio de parámetros y de código, el cual podemos escribirlo explícitamente si queremos.

Operadores

Throw Not implemented yet

Bucles

Throw Not implemented yet

Colecciones

Throw Not implemented yet

Generics

<E><T>WildCard ?

Static

Throw Not implemented yet

Herencia

Que es la herencia en Java?

Las clases en Java pueden heredar de otra clase, pero solo de una. No existe la herencia múltiple en Java, pero podriamos solventar esto haciendo que la clase heredada o superclase, heredara de otra clase y así sucesivamente, o usando el poliformismo de interfaces cómo explicaré en el próximo tab. Para heredar de otra clase, esta tendrá que usar la palabra reservada extends y el nombre de la clase heredada, después del nombre de la clase en questión en su declaración. Al heredar clases, podemos usar lós métodos y propiedades de la super clase, en nuestra sub clase o clase derivada. También podemos sobreescribir los métodos de la superclase en la subclase, con la palabra reservada, @Override.

Clases y métodos Abstractos

El único sentido de una clase abstracta, es ser heredada por otra clase. Los métodos que tengamos dentro de una clase abstracta, pueden ser métodos normales o abstractos. En tal caso, si el método es abstracto, la clase habrá de ser obligatoriamente abstracta. Un método abstracto, es una firma, sin código. Eso significa que solo declararemos el encabezado del método anteponiendo la el modificador abstract, y que en vez de acabar el metodo en llaves, acabará en punto y coma. No hay mas.

Polimorfismo de Interfaces

Cómo ya he dicho antes, en Java, una clase no tiene la posibilidad de heredar de varias clases, sólo de una, con la palabra extends, pero para solventar esto, se inventaron los interfaces. Un interface es parecido a una clase abstracta, con la diferencia de que todos sus métodos serán firmas sólamente, sin código. Una clase puede implementar varios interfaces y además, un interface puede "extender" otros interfaces. A eso se le llama polimorfismo.

Un par de ejemplos nos aclararán esto.

Override

Override, significa que escribimos de nuevo la implementación o el código interior de un método de una clase heredada o superclase, desde una subclase o clase derivada.

Overload

Overload, significa que podemos tener varios métodos que se llamen igual dentro de una clase, siempre y cuando los parámetros que le pasemos sean de distinto tipo, y el tipo de retorno puede ser igual o otro distinto.

Exceptions = Throws

Throw not implemented yet, exception ;)


Conceptos sobre J2EE y Frameworks relacionados

Ejemplos de Código, No implementado aún