viernes, 20 de marzo de 2015

Acceso Protegido en Java

En Java podemos declarar un campo o un método como protegido mediante el uso de la palabra clave protected.

Un campo o método protegido permite su acceso directo desde las subclases directas o indirectas que tenga pero no desde las otras clases.

Para declarar un campo o un método cómo protegido basta con poner la palabra protected delante de tal forma:

protected campo1;

protected Int getPeso()
{
return peso();
}

Así de fácil es declarar un campo o método cómo protegido en Java. Con esta protección nos garantizamos que sólo las subclases de la clase donde lo hemos declarado puedan acceder a él limitando el acceso a las otras clases.

No es común utilizar esta protección (protected) en los campos porque podría debilitar el encapsulamiento de nuestro proyecto, es más común que se use en métodos, para los campos es mejor usar private para así evitar el uso de otras clases.

Clase Object en Java

La clase Object es la superclase de todas aquellas clases que no tienen una superclase explícita.

En Java todas las clases tienen una superclase, unas de forma explicita previamente definida por nosotros y otras la tienen no definida por nosotros, esa clase es la clase Object. 

Object es una clase de la biblioteca estándar de Java que sirve como superclase para todos los objetos Java. 

Esta declaración de clase:

public class ClaseBonita
{

}

es igual que esta:

public class ClaseBonita extends Object
{

}

El compilador de Java se encarga de insertar automáticamente la superclase Object en todas las clases que no tengan una declaración explícita extends por lo que no es necesario hacerlo manualmente.

Igual que mediante el uso de herencia podemos usar los métodos de la superclase que hemos definido, al crear una clase normal que no sea subclase de ninguna clase creada por nosotros, podemos usar los métodos de la clase Object cómo por ejemplo el método toString() o cualquier otro de los que dispone la clase Object.

Para usar el método toString() de manera eficaz es conveniente que la clase donde se usa lo sobreescriba para poder así devolver un String de la representación que queramos de la clase donde se encuentra. Para conocer más sobre los métodos de la clase Object es recomendable visitar la documentación de la clase para así aprender mucho más.

Variables Polimórficas

Una variable polimórfica es una variable que contiene un objeto, así de fácil.

En Java, una variable polimórfica es una variable que contiene un objeto y se refiere al hecho de que una misma variable puede contener objetos de diferentes tipos del tipo declarado o de cualquier subtipo del tipo declarado por eso se llama polimórfica que literalmente significa: muchas formas.

domingo, 15 de marzo de 2015

Herencia en Java

La herencia en Java es un mecanismo que nos evita tener que duplicar código en determinadas ocasiones en las que tenemos que realizar clases con tareas muy similares entre sí.

Este mecanismo de herencia nos permite definir una clase a partir de otra, esto nos ofrece poder usar los métodos de esa clase y sus atributos sin necesidad de duplicar el código. Un ejemplo donde se usa herencia y que veremos en el apartado Crear Juego en Java desde 0 es en los juegos donde por ejemplo podremos tener

viernes, 13 de marzo de 2015

Ejecutar un programa Java fuera del entorno de desarrollo

Para poder iniciar una aplicación Java fuera del entorno de desarrollo, en este caso Bluej, necesitamos usar un método de clase, en concreto el método main.

En primer lugar para poder ejecutar una aplicación Java en nuestro equipo necesitamos tener instalada la máquina virtual de Java que forma parte del kit de desarrollo de Java SDK, basta con entrar en la página de Oracle y descargarla si no la tenemos.

Una vez asegurados de que tenemos Java instalado en nuestro equipo necesitamos que en nuestra aplicación esté el método main que tiene la siguiente signatura:

public static void main(String[] args)

Este método debe ser público para que pueda ser invocado desde el exterior de la clase y debe ser estático porque no existe ningún objeto cuando se inicia el programa, es este método el que crea el primer objeto.

Teniendo los puntos anteriores garantizados tenemos varias opciones para ejecutar nuestro programa fuera de Bluej, una es crear un archivo ejecutable que se llaman .jar que es el mecanismo que utiliza Java para realizar estos archivos ejecutables. Para crearlo basta con ir a proyecto, exportar y especificar la clase que contiene el main y creará nuestro archivo ejecutable .jar para poder ejecutar la aplicación haciendo doble clic sobre él.

Si queremos ejecutar nuestra aplicación desde la consola tenemos dos opciones:

java nombreAplicacion

ó

java –jar nombreAplicacion.jar

Escribiendo eso en la consola desde el directorio donde se encuentran esos archivos bastaría para que se ejecutara nuestra aplicación. En el primer ejemplo lo ejecuta desde la clase Java que tiene el main y en el segundo ejecutando el archivo ejecutable .jar

En estas llamadas desde consola también se pueden especificar argumentos si así los pidiera nuestra aplicación poniéndolos entre [ ].

Espero que os haya servido de ayuda, cualquier cosa no dudéis en ponerla en los comentarios.

miércoles, 4 de marzo de 2015

Refactorización

La refactorización es la actividad de reestructurar un diseño ya existente, un código, para mantener una buen diseño de las clases que lo forman cuando son modificadas.

A la hora de crear nuestras aplicaciones siempre debemos pensar en el futuro y anticiparnos a los posibles cambios que podríamos hacerle en el futuro y por lo tanto crear clases altamente cohesivas, es decir, que cada una se encargue de una tarea bien definida y que además tengan bajo acoplamiento, es decir, que no dependan de las otras o que lo hagan lo mínimo posible.

Anticiparse a las futuras actualizaciones o modificaciones es bastante difícil por lo que es muy importante tener claro que es la refactorización. La refactorización la podemos definir como la actividad de reestructurar las clases y los métodos existentes (el código) para adaptarlos a los cambios y nuevas funcionalidades que le querramos hacer a la apicación.

Es frecuente que durante el tiempo de vida de una aplicación le vayamos agregando métodos, clases, etc. Esto nos puede ocasionar que nuestro diseño vaya perdiendo grado de cohesión ya que al ir añadiendo métodos a las clases podría llegar un momento que una clase haga más tareas de las que hacia cuando fue diseñada.

La refactorización consiste justamente en rediseñar las estructuras de nuestra aplicación, clases, métodos, etc para mantener un buen diseño aunque vayamos actualizando y ampliando nuestros proyectos. Lo más común a la hora de refactorizar es dividir las clases cuando estas tienen varias funciones, dividir los métodos, unión de clases si vemos que dos hacen lo mismo, etc.

Tener muy presente el uso de la refactorización a medida que crezcan vuestras aplicaciones o llegará un momento que no será sostenible su desarrollo y tengáis que hacerlo todo nuevo.

martes, 3 de marzo de 2015

Cohesión y Acoplamiento en Java

El acoplamiento y la cohesión son factores fundamentales que debemos tener en cuenta a la hora de diseñar nuestras clases en Java y en cualquier lenguaje que usemos si estamos usando programación orientada a objetos.

Cuando hablamos de acoplamiento nos estamos refiriendo a la interconectividad que hay entre las clases, es decir, cómo las clases interactúan entre ellas para hacer funcionar nuestra aplicación.

Al referirnos a cohesión estamos describiendo cuanto se ajusta nuestra clase o nuestro código a la tarea que tiene que hacer.

Por tanto en una aplicación bien diseñada debemos buscar un bajo acoplamiento y una alta cohesión en las clases.

Bajo acoplamiento para hacer que unas clases no dependan de otras y no tengamos que estar pendientes de que las modificaciones que hagamos en una puedan afectar a otras clases. Por eso un buen diseño debe perseguir siempre el menor acoplamiento posible entre las clases facilitando así tareas de mantenimiento, futuras actualizaciones, etc.

Para conseguir un bajo acoplamiento se usa lo que se conoce por encapsulamiento, el encapsulamiento es ocultar la información de la implementación y dejar solo visible a las otras clases lo que puede hacer pero no cómo lo hace. Esto tiene la ventaja de que si ninguna clase depende del código interno de la misma podemos cambiar facilmente su interior sin necesidad de modificar las otras clases que la usan.

Y alta cohesión para que cada clase sea responsable de una única tarea bien definida y no sea la misma clase la que se encarga de numerosas tareas dificultando así las posteriores ediciones que queramos hacer, tareas de mantenimiento, busqueda de errores, etc

Por tanto podemos afirmar que un buen diseño de una aplicación siempre debe buscar un bajo acoplamiento y una alta cohesión en sus clases. Haciéndolo así las tareas de mantenimiento, ampliación, etc serán mucho más fáciles de hacer.

Cualquier duda ya sabéis, no dudéis en ponerla en los comentarios.