martes, 26 de mayo de 2009

Interface

Los Interfaces son unas clases completamente abstractas que contiene sólo una colección de métodos abstractos y propiedades constantes.

Algunas especificaciones para interfaces:



  • Puede contener solo variables estáticas.
  • Las interfaces pueden extender otras interfaces.En este caso la clase que implemente una interface que extiende de otra interface tiene que implementar todos los métodos de ambas interfaces.
  • Una clase puede implementar cualquier número de interfaces.
  • Una interfaz es implícitamente abstracta. 
  • No es necesario utilizar la palabra clave abstracta al declarar una interfaz.
  • Cada método en una interfaz también es implícitamente abstracto, por lo que la palabra clave abstracta no es necesaria. Esto era antes de Java 8, con esta versión una inteface puede tener un método default o static y con cuerpo.
  • Los métodos en una interfaz son implícitamente públicos.
  • Las variables declaradas en una interfaz no son variables de instancia. En cambio, son implícitamente public, final, y static, y deben inicializarse.  
  • Los métodos son abstratos, default o static pero no ambos.
  • Una clase puede heredar de una sola superclase, pero puede implementar múltiples interfaces.








  • Normas de Nomenclatura

    Esto hace que los programas sean más fáciles de leer y estándar
    • Clases--> Los nombres de clases deben ser palabras completas, en mayúsculas y minúsculas, con la primera letra de cada palabra en mayúscula. Los nombres de clases deben ser simples y descriptivos, utilizando palabras completas y acrónimos o abreviaturas (a no ser que la abreviatura sea ampliamente conocida, como URL o HTML). Por ejemplo: class Coche ,class EmpresaProductora.
    • Interfaces--> Siguen las mismas reglas que las clases. Por ejemplo: interface AlmacenarCoche, class Almacen.
    • Métodos-->Los métodos deberían ser verbos, en mayúsculas y minúsculas, con la primera letra en minúscula, y la primera letra de cada una de las palabras internas en mayúscula. Por ejemplo: correr(), numeroRuedas(), pintarCoche().
    • Variables--> Todas los nombres de variables de instancia o de clase deben estar constituidos por palabras con la primera letra de la primera palabra en minúscula y la primera letra de las palabras internas en mayúscula.Los nombres de variables deben ser cortos y significativos. La elección de un nombre de variable debe ser mnemotécnico, es decir, pensado para que un lector casual al verla comprenda su uso. Se deben evitar las variables de una sola letra, excepto en variables temporales de corto uso. Nombres comunes para este tipo de variables son: i, j, k, m y n para enteros; c, d y e para caracteres.Por ejemplo: int i; char *cp, float miVariable.
    • Constantes-->Los nombres de variables declaradas como constantes de clase y constantes ANSI, deberías escribirse siempre en mayúsculas, con las palabras internas separadas por el signo de subrayado ("_"). Las constantes ANSI se deben evitar en lo posible, para facilitar la depuración del código. Por ejemplo int MIN_WIDTH = 4;

    miércoles, 20 de mayo de 2009

    Métodos y Variables estáticas

    Los utilizamos para realizar acciones que no están asociados a ningún objeto en particular, son
    comunes para todos los objetos de la clase.

    Para acceder a ellos ponemos NombreClase.metodoStatic, no se instancia como los métodos y variables objetos.

    No conviene usar muchos métodos estáticos, pues si bien se aumenta la rapidez de ejecución, se pierde flexibilidad, no se hace un uso efectivo de la memoria y no se trabaja según los principios de la Programación Orientada a Objetos.

    Para crear atributos o métodos estaticos se usa la palabra static.
    static String nombre
    static int nombreMetodo(){}

    lunes, 18 de mayo de 2009

    Errores de lógica

    Los errores de lógica son conocidos como BUGS. Estos son los errores que nos tomarán tiempo hasta encontrarlos
    Puede costar encontrarlo y para ello hacemos el debug cuando suceden errores de lógica, para ir viendo pasao a paso el programa y ver donde hemos podio fallar.

    Errores de ejecución

    Los errores en tiempo de ejecución son errores que aparecen mientras se ejecuta su programa. Estos errores aparecen normalmente cuando su programa intenta una operación que es imposible que se lleve a cabo.

    Errores de compilación

    Los errores de compilación son errores que impiden que su programa se ejecute, es decir si el compilar Java (javac) no puede reconocer la sentencia,este devuelve un mensaje de error, usualmente con una línea de código de referencia. También se conoce a los errores de sintaxis como errores en tiempo de compilación.

    Variables

    Las variables son la manera en que indicamos al compilador el espacio en memoria que debe de reservar para almacenar la información.

    Las variables pueden ser de 2 tipos:
    • primitivo--> int, char, long,byte,boolean,float,double.Estas variable tiene el valor asignado directamente .
    • referenciadas-->no tienen el valor directamente sino que apuntan a una espacio de memoria donde se encuentra el valor,(los objetos).

    Clases

    Una clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan sobre esos datos.

    Estrcutura de una clase:

    acceso class nombre clase{

    //cuerpo

    }

    Las características de una clase son las siguientes:
    • 1) Todas las variables y funciones de Java deben pertenecer a una clase.
    • 2) Si una clase deriva de otra (extends), hereda todas sus variables y métodos.
    • 3) En un fichero se pueden definir varias clases, pero en un fichero no puede haber más que una clase public.
    • 6) Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame como la clase.
    • 7) Los métodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this.
    • 8) Las clases se pueden agrupar en packages, introduciendo una línea al comienzo del fichero (package packageName;).

    Métodos

    Un método es una función que puede ser llamado desde dentro de la clase o de otra clase.

    Un método puede devolver datos o nada, en el caso que no se devuelva nada como tipo de retorno void.

    Si el metodo que estamos creando recibe una lista de argumentos la forma de ponerlo seria
    acceso tipoRetorno nombre_metodo(TipoVariable arg1, TipoVariable arg2, ....)

    Los métodos se crean de la siguiente manera:

    acceso tipodeRetorno nombre_método(lista de arguementos){
    //cuerpo
    }

    La llamada al método, se realiza poniendo el nombre y pasandole los argumentos en el caso que tuvieran.Por ejemplo:

    int actionCalcular(int num1, int num2){
    int suma=0;
    suma=num1+num2;

    return suma
    }

    Los método tambien tiene modificadores de acceso.En java hay 4 tipos de accesos a los métodos:
    1. public-->todo el mundo accede a este método, ya sea desde otra clase, paquete, subclase, ....
    2. private--> sólo acceden se al método dentro de la misma clase.
    3. protected-->pueden acceder a este mñetodo los que esten en el mismo paquete, la misma clase y su subclases.
    4. predeterminado-->pueden acceder la misma clase y los que estén en el mismo paquete.

    Constantes

    En Java, se utiliza la palabra clave final para indicar que una variable debe comportarse como si fuese constante, significando con esto que no se permite su modificación una vez que haya sido declarada e inicializada.

    Como es una constante, se le ha de proporcionar un valor en el momento en que se declare, por ejemplo:

    class Prueba {
    final int version = 1';
    . . .
    }

    Si se intenta modificar el valor de una variable final desde el código de la aplicación, se generará un error de compilación.

    Si se usa la palabra clave final con una variable o clase estática, se pueden crear constantes de clase, haciendo de esto modo un uso altamente eficiente de la memoria, porque no se necesitarán múltiples copias de las constantes.

    La palabra clave final también se puede aplicar a métodos, significando en este caso que los métodos no pueden ser sobreescritos.

    Literales

    Un valor constante en Java se crea utilizando una representación literal de él.

    String nombre--> donde nombre es el literal.

    Java utiliza 5 tipos de elementos:

    Enteros:

    • byte 8 bits complemento a dos
    • short 16 bits complemento a dos
    • int 32 bits complemento a dos
    • long 64 bits complemento a dos

    Reales en coma flotante:

    • float 32 bits IEEE 754
    • double 64 bits IEEE 754

    Booleanos:

    • true
    • false

    Caracteres:

    Por ejemplo: a \t \u???? [????] es un número unicode

    Cadenas:

    Por ejemplo: “Esto es una cadena literal”

    lunes, 11 de mayo de 2009

    Definir mi proyecto como repositorio.

    Si queremos acceder a un repositorio que no esa el que tenemos en local, tenemos que crearnos una etiqueta mirror en el fichero setting.xml de la carpeta configuracion de maven.


    En esa etiqueta ponemos todo lo necesario para conectarsno al repositorio, id, url y mirrorof

    El proyecto lo exportamos como jar al repositorio que quieras indicandolo en el pom, con el comando mvn deploy.

    viernes, 8 de mayo de 2009

    Abstracción

    Permite capatar las caraterísticas esenciales de un objeto, asi como su comportamiento.

    Vamos a ver un ejemplo, el de un automovil, que es que todo el mundo usa a la hora de explicar esto.
    Veamos lo que podemos abtraer del automovil:
    • marca
    • modelo
    • nº de puertas
    • color
    Ahora veamos las caracterisiticas semenjantes:
    • arrancar.
    • frenar.
    • acelerar
    La abstracción es clave para diseñar un buen software.

    IBATIS

    Es un framework de código abierto basado en capas que se ocupa de la capa de Persistencia.

    Puede ser implementado en Java y .NET (también existe un port para Ruby on Rails llamado RBatis).

    Asocia objetos de modelo (JavaBeans) con sentencias SQL o procedimientos almacenados mediante ficheros XML, simplificando la utilización de bases de datos.

    A diferencia de Hibernate, se necesitan conocimientos de sql, permite la optimización de las consultas, ya sea con lenguaje estándar o con SQL propietario del motor de base de datos utilizado. Con iBATIS, siempre se sabe lo que se está ejecutando en la base de datos, y tiene herramientas para evitar el problema de las “N + 1 consultas” y para generar consultas dinámicas muy potentes.

    Se configura mediante un fichero XML de configuración, sql-map-config.xml.
    Además cada objeto de modelo, que representa al objeto en la aplicación, se relaciona con un fichero del tipo sqlMap.xml, que contiene sus sentencias SQL. Por ejemplo, un objeto Java Usuario con un objeto XML usuario.xml.

    Es posible subdividir la capa de Persistencia en tres subcapas:

    • La capa de Abstracción será el interfaz con la capa de la lógica de negocio, haciendo las veces de “facade” entre la aplicación y la persistencia. Se implementa de forma general mediante el patrón Data Access Object (DAO), y particularmente en iBATIS se implementa utilizando su framework DAO (ibatis-dao.jar).
    • La capa de Framework de Persistencia será el interfaz con el gestor de Base de Datos ocupándose de la gestión de los datos mediante un API. Normalmente en Java se utiliza JDBC; iBATIS utiliza su framework SQL-MAP (ibatis-sqlmap.jar).
    • La capa de Driver se ocupa de la comunicación con la propia Base de Datos utilizando un Driver específico para la misma.

    Toda implementación de iBATIS incluye los siguientes componentes:

    • Data Mapper: proporciona una forma sencilla de interacción de datos entre los objetos Java y .NET y bases de datos relacionales.
    • Data Access Object: abstracción que oculta la persistencia de objetos en la aplicación y proporciona un API de acceso a datos al resto de la aplicación

    martes, 5 de mayo de 2009

    Tipos de Clases

    Existen varios tipos de clases en java:
    • abstract --> esta clase tiene al menos un método abstracto, no se instancia y se utiliza como clase base para herencia. La clase que deriva de esta tiene que declarar e implementar todos los métodos de la clase abstracta que sean abstracto, sino daria un error de compilación. Lo métodos no pueden ser privados o staticos sino no se pueden acceder a ellos. Ejemplo
    abstract class Prueba {

    abstract metodo1();
    abstract void metodo2();
    void metodo3(){ //implementación }

    }

    public class Prueba2 extends Prueba{

    void metodo1(){ //implementación }
    void metodo2(){ //implementación }

    }
    • synchronizable --> Este modificador especifica que todos los métodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban.
    • public -->Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas.
    • final -->esta se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final.

    lunes, 4 de mayo de 2009

    Calendar

    Calendar es una clase abstracta base para convertir entre un objeto de tipo Date (java.util.Date) y un conjunto de campos enteros como YEAR (año), MONTH (mes), DAY (día), HOUR (hora), etc.

    Calendar tiene muchas funciones en común con java.util.Date, lo que diferencia es a la hora de extraer datos, los de java.util.Date están obsoletos, y si manejamos algunos de estos métodos en realidad esas accediendo a funcionalidades de la clase Calendar.

    El método getInstance() nos devuelve una subclase de Calendar con la hora actual, y usamos el método set( ) para cambiar a la fecha.

    Tenemos que tener en cuenta que no todos los calendarios tienes años de 365 o 12 meses y a la hora de realizar operaciones tenemos que utilizar las subclases adecuadas el tipo de calendario que queramos.

    Para extraer los datos tenemos:
    • YEAR
    • MONTH
    • DATE, DAY_OF_MONTH
    • HOUR
    • MINUTE
    • SECOND
    Por ejemplo nosotros utilizaríamos la subclase GregorianCalendar.
    Con esta clase podemos sumar varios días sin preocuparnos de calcular luego el año o el mes, lo hace la subclase sola.

    Tenemos dos métodos que nos permiten avanzar un tiempo exacto sobre los datos obtenidos anteriormente, add(Constante, valor) y roll(Constante, valor), recordemos que constante es por ejemplo Calendar.MONTH.

    Roll() este hay que tener en cuanta que cuando llega al limite inferior o superior de constante cambia al limite contrario sin cambiar los siguientes atributos.

    Los que hay que tener en cuenta son add(), get(),set().