Biblioteca de libros de programación en español

Si hay una cosa importante para ser un buen desarrollador es conocer el inglés de tal manera que puedas leer documentación y manuales en la lengua de Shakespeare, pero si no es así o prefieres tener manuales en español, te convendría disfrutar de la biblioteca que se está montando en GitHub con todo tipo de recursos para la programación, tanto de lenguajes, PHP, Javascript, CSS, como metodología, bases de datos y algoritmos.

La iniciativa no solo esta en español, sino que dispone de de bastante idiomas, por supuesto en inglés, pero también alemán, italiano, portugués, ruso y otros muchos. Además esta abierta a las nuevas contribuciones, por lo que el número de recursos probablemente siga creciendo.

Podemos encontrar estos recursos en versión web, otros en PDF y por supuesto podremos adjuntar nuestra ayuda siguiendo las instrucciones convenientes para seguir aumentando esta comunidad.

A la par se está intentando crear una sección que incluya podcasts sobre programación, aunque actualmente solo está disponible en checo e inglés y no tienen mucho contenido, pero promete convertirse también en una referencia.

Podéis disfrutar de todos los recursos en inglés y español.

Publicado el

Tipos enum en Java

Si hay un desconocido en el lenguaje Java que resulta altamente efectivo cuando sabemos utilizarlo es, sin duda, los tipos enum. Los tipos enum son un tipo de dato definidos por el propio usuario en los que solo se pueden tomar los valores que se encuentran en un lista.

Se declaran como si de una clase a parte se tratase, en un propio archivo dándole nombre representativo a lo que va a albergar, por ejemplo Nivel, ejemplo presente en este artículo. Como indica el nombre, este tipo de dato enumerado tendrá variables relacionadas con niveles de algún tipo.

public enum Nivel {
    FACIL(10, -1),
    MEDIO(15, -2),
    DIFICIL(20, -3),
    IMPOSIBLE(30, -4);
 
    private final int numeroAlienigenas;
    private final int velocidadAlienigenas;
 
    Nivel(int numeroAlienigenas, int velocidadNavesAlienigenas) {
        this.numeroAlienigenas = numeroAlienigenas;
        this.velocidadAlienigenas = velocidadNavesAlienigenas;
    }
 
    public int getNumeroAlienigenas() {
    	return this.numeroAlienigenas;
    }
 
    public int getVelocidadAlienigenas() {
    	return this.velocidadAlienigenas;
    }
 
}

Como se puede apreciar en el ejemplo de arriba, se trata de un tipo enum con dos variables, el numero de alienígenas y la velocidad de sus naves. Desde el resto de las clases queremos acceder a los datos de los alienígenas tan solo debemos nombrar al tipo de nivel que queremos acceder, FACIL, MEDIO…. y recuperar la variable que queremos usar, por ejemplo:

switch(nivel){
            case 1:
                setNumEnemigos(Nivel.FACIL.getNumeroAlienigenas());
                NaveEnemiga.setDX(Nivel.FACIL.getVelocidadAlienigenas()); 
                break;
            case 2:
                setNumEnemigos(Nivel.MEDIO.getNumeroAlienigenas());
                NaveEnemiga.setDX(Nivel.MEDIO.getVelocidadAlienigenas());
                break;
            case 3:
                setNumEnemigos(Nivel.DIFICIL.getNumeroAlienigenas());
                NaveEnemiga.setDX(Nivel.DIFICIL.getVelocidadAlienigenas());
                break;
            case 4: 
                setNumEnemigos(Nivel.IMPOSIBLE.getNumeroAlienigenas());
                NaveEnemiga.setDX(Nivel.IMPOSIBLE.getVelocidadAlienigenas());
                break;
            default:
            	setNumEnemigos(Nivel.FACIL.getNumeroAlienigenas());
                NaveEnemiga.setDX(Nivel.FACIL.getVelocidadAlienigenas()); 
                break;

Las posibilidades son infinitas y es una buena opción de cara a crear grandes estructuras de datos organizadas por tipos, véase el ejemplo de los niveles, tal vez donde se puede apreciar de manera más claro, pero también podemos organizar características que compartan un objeto o un tipo de objeto, por ejemplo, un diccionario, en el podemos organizar algunas palabras que determinemos en diferentes idiomas.

La potencia y distintas posibilidades que tienen hacen que podamos usarlo y evitarnos que dentro de las clases tengamos que definir arrayList que distorsionan la limpieza del código y se convierten en grandes listas difíciles de apreciar y de organizar.


Tests online de java

java

Siempre que hacemos una entrevista de trabajo para optar a un puesto que nos pida controlar sobre algún lenguaje de programación, o cuando nos estamos preparando alguna certificación sea cuál sea el nivel de esta, debemos saber responder a preguntas de estricto conocimiento teórico.

Dependiendo del nivel que nos exijan habrá preguntas que nunca nos hayamos planteado o preguntas liosas que nos generen muchas dudas, el caso es que antes de eso tenemos que llevar una buena preparación.

Para ello es bueno poder, a parte de conocer el lenguaje, cosa que se presupone, enfrentarnos a posible preguntas para tener más soltura y saber a que nos enfrentamos. Preguntas teóricas que siempre pueden generarnos dudas o que no nos hemos planteado cuando estamos desarrollando.

Os traigo unos cuantos sitios donde podéis evaluaros con bastantes tests sobre Java:

Wiziq
Indiabix
Java


Diferencias entre clase abstracta e interfaz

La pregunta por antonomasia en los lenguajes de programación orientados a objetos. Motivo de confusión y dudas a la hora de programar una jerarquía de clases. Tal vez, lo primero que debemos saber es que es una clase abstracta y que es una interfaz y a partir de ahí saber encontrar las diferencias entre ambas. Habrá problemas en los que será difícil conocer cuál es el uso correcto de cada una y podamos dudar cuál es la aplicación adecuada para cada uno, pero eso lo dará la experiencia.

Clase abstracta

Como indica su nombre, se trata de una clase, hasta ahí todo claro, pero que posee, he aquí su nombre y principal característica, al menos un método abstracto, por lo que ya tiene que ser declarada como abstracta. Una clase abstracta no puede ser implementada, sino que sólo puede heredar a otra clase abstracta o a una clase que defina el método o los métodos abstractos de la superclase abstracta.

Interfaz

Una interfaz tiene la característica principal de que todos sus métodos son abstracto, es decir, todos los métodos son declarados pero ninguno tiene implementación. Al no ser una clase como tal, el resto de clases pueden implementar tantas interfaces como se estime oportuno.

Implementación

Por decirlo de manera más natural, la interfaz marca unas pautas de funcionamiento pero no nos da pistas de como lo hace, en cambio la clase abstracta nos define futuros objetos que tienen pequeñas diferencias a la hora de implementar un pequeño método. Por ejemplo, una clase abstracta puede declarar el funcionamiento de una figura geométrica, los métodos que la superclase puede implementar serían el cálculo del perímetro, simplemente hallar la suma de todos sus lados, algo común a todas las figuras. En cambio, el cálculo del área de cada figura sería el método abstracto, de obligada implementación en las clases heredadas pero del que desconocemos su funcionamiento interno en dichas clases, ya que cada figura tiene su propio cálculo.


Práctica POO 2013 (RType)

Aquí dejo la práctica que tuve que hacer para la asignatura de Programación Orientada a Objetos, en la que los alumnos tuvimos que crear un juego, concretamente el RType, el típico juego de marcianitos en los que el protagonista, la nave que manejas, debe destruir todas las naves enemigas que van apareciendo en la pantalla.

El juego está creado de manera simple, una nave que el usuario maneja y naves enemigas, el número de estas depende del nivel elegido, que realizan movimientos aleatorios, a las que tienes que disparar para eliminar.

Es una buena introducción para programar en un lenguaje orientado a objetos como puede ser Java.

https://www.dropbox.com/s/ov75uvfpbusm089/JuegoRType.zip

Publicado el