Diferencia entre Interface y Herencia

13 06 2008

Viendo que esta pregunta es tipica, y a mi no me parece muy sencilla, he hecho este pequeño resumen. Leerlo y opinad, y si hay que cambiarlo lo editamos, para llevar todos esto claro a la defensa.

La diferencia principal entre interface y herencia es que la herencia tiene una relacion mas estrecha con las clases derivadas que una interface. Una interface tan solo define los metodos que deben tener las clases que la implementan, no puede definir que cuerpo tendran ni variables (salvo static y final).Sin embargo, una herencia puede definir un cuerpo, variables y como seran los metodos de las clases que extiendan de ella.

Una interface puede ser implementada por clases muy diferentes, una herencia, sin embargo, y como norma general, tan solo sera extendida por clases similares y con relacion, relacion que precisamente les dara esa herencia. En el caso de una herencia habra una relacion jerarquica, pero en el caso de una interface, simplemente las clases que la implementen tendran alguna caracteristica similar.





Polimorfismo en Java

12 06 2008

En Java hay un concepto que a veces reulta algo confuso: ¿cual es la diferencia entre una clase abstracta y una interface? ¿qué es un polimorfismo y en qué se diferencia de una interface? ?¿?!?

Leyendo y buscando por ahí voy a intentar que quede todo claro con este post.

Polimorfismo

Característica de Java que permite tomar como algo igual a un nivel superior dos cosas que son diferentes a

Leer el resto de esta entrada »





JCalendar

7 06 2008

JCalendar es un bean de Java que consiste en un calendario que permite seleccionar una fecha.

Wikipedia: Un Bean es un componente software que tiene la particularidad de ser reutilizable y así evitar la tediosa tarea de programar los distintos componentes uno a uno. Se puede decir que existen con la finalidad de ahorrarnos tiempo al programar. Es el caso de la mayoría de componentes que manejan los editores visuales más comunes.

JCalendar no está incluido en las librerías de Java, hay que descargar la librería para poder utilizarlo: Leer el resto de esta entrada »





Defensa Tecnología Orientada a Objeto

5 06 2008

Resúmen general sobre lo que hay que saber para esta defensa.

  • Diseño en Capas
  • Orientación a Objeto:
    • Sintaxis
    • Herencia
    • Polimorfismo
    • Encapsulación
    • Interfaces
    • Excepciones
  • JDBC
    • Sintaxis
  • Swing
    • Sintaxis




Layered Architecture

31 05 2008

Layered Architecture o Arquitectura por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica, la presentación, los datos, la comunicación… etc. De esta forma se consigue que cada capa sea independiente de las demás: dentro de una capa, sólo sería necesario conocer la Interface que implementan las capas externas necesarias.

Gracias a esta forma de diseñar el software, se consigue una mejor distribución del programa, dando la posibilidad de dividir el trabajo más efectivamente, ya que cada grupo puede abstraerse completamente con sólo conocer las APIs (interfaces) de las capas externas necesarias.

Un ejemplo sencillo es el siguiente, pero pensando que las tres capas se encuentran en distintos ordenadores. (sacado de la Wikipedia):

Free Image Hosting at www.ImageShack.us

QuickPost

Es muy sencillo dividir nuestros programas ‘Terminal’ y ‘Tornos’ en capas, ya que estas son muy diferenciables, y sin darnos cuenta, definimos las interfaces necesarias para cada capa. Aún así, al reestructurar estos programas, surgió algún que otro conflicto: es importante saber que se debe respetar la jerarquía de las capas, es decir, no se debe acceder a una capa dos niveles de profundidad por debajo de la capa en la que estemos. Por ejemplo, la capa ‘visor’ no debe acceder a la capa ‘bd’. Esto es lo que se quiere evitar con este diseño: el caos de dependencias. El siguiente es un ejemplo más completo:

Free Image Hosting at www.ImageShack.us

QuickPost

Capas como ‘visor’ pueden dividirse en subcapas, al igual que todas las demás. En Java, las capas se traducen en Packages. Cuando importamos por ejemplo javax.comm.* estamos accediendo al subpaquete o subcapa comm dentro del paquete o capa javax.

La división del programa ‘Terminal’ por ejemplo, se traduce así (no se muestran las posibles subcapas):

Además, tal y como montamos nuestro sistema para la simulación, se trata de un sistema de ‘tres capas y dos niveles’ (presentación+lógica en mi portátil -terminal-, y lógica+datos en otro -servidor BD y GestiónTornos en el portátil de ordóñez)

Resumiendo, aquí tenéis links de interés que explican mejor el tema:

A Strategy for Layering Software Applications

Java 101: Layered Architecture

Programación por capas





Configuración javax.comm en Eclipse

9 05 2008

Bueno, explicaré para que quede escrito cómo configurar la librería javax.comm para Eclipse.

1º-Descargar la última versión de JDK. Click en el link y descargamos JDK 6 Update 6

2º-Instalarlo

3º-Descomprimir javacomm20-win32.rar en cualquier sitio. Podemos descargar este archivo de aquí.

4º-Abrimos la carpeta descomprimida commapi. Movemos el archivo win32comm.dll a la carpeta C:\Archivos de programa\Java\jdk1.6.0_06\jre\bin y movemos comm.jar y javax.comm.properties a C:\Archivos de programa\Java\jdk1.6.0_06\jre\lib

5º-En Eclipse hay que decirle que use las librerías de JDK en vez de las que nos está usando ahora mismo (JRE). Vamos a Window->Preferences->Java->Installed JREs->Add… le damos a browse y seleccionamos Archivos de Programa/Java/jdk1.6.0_06, añadimos y seleccionamos la librería añadida. Click en Ok.

6º-Para los proyectos que usen javax.comm, hay que agregarles la librería. Así que click derecho en el proyecto en cuestión, properties, Java build path, libraries, Add external JARs… y seleccionamos C:\Archivos de programa\Java\jdk1.6.0_06\jre\lib\comm.jar

Listo!

Se puede descargar un TestRS232 programado en Java de aquí.





Posibles mejoras en las clases

3 05 2008

Pues weno abro este post para discutir cambios en torno al programa de java

empiezo con la mia…. yo tengo la clase recarga y creo que la planteamos de tal manera que el sujeto que quiera recargar se aburriria a meter numeros (tiene que meter su id dos veces para poder recargar eso siemrpe y cuando no se haya equivocao en ninguna de ellas)

No seria mas adecuado que metiera una …. hacer nosotros una consulta con la base de datos y que desde esta se le preguntara al tio…. Desea usted hacer una recarga a la tarjeta de (nombre del sujeto)

que opinais? yo creo que asi nos ahorramos el tener que escribir dos veces la id y a parte si la cagara en meter dos veces una id erronea le haria la recarga a otro… y de esta manera a no ser que hubiera dos jose manuel guzman con id’s muy parecidas el tema seria bastante seguro





Javacomm

24 04 2008

Paso a explicar la librería java com:

Estos son los servicios basicos que da javacom, hay cosas que no he traducido porque era demasie pal body:

  • Enumerar los puertos disponibles CommPortIdentifier.getPortIdentifiers devuelve una lista que contiene un objeto de la clase CommPortIdentifier por cada puerto disponible. Con este objeto se controla el acceso a los puertos.
  • Abrir y declarar propietarios de los puertos de comunicaciones en los objetos CommPortIdentifier
  • Solucionar el problema de la contención de propiedad de los puertos entre múltiples aplicaciones de Java. Se utilizan eventos para notificar a las aplicaciones interesadas . Por ejemplo, la excepción PortInUseExceptionse lanza cuando una aplicación falla al abrir un puerto.
  • Mantener Entradas y Salidas asíncronas y síncronas en los puertos de comunicaciones. Las clases de bajo nivel como SerialPort y ParallelPort, tienen métodos para manejar las Entradas y Salidas en los puertos de comunicación.
  • Un gestor de eventos como en los entornos graficos. Por ejemplo, si en el puerto serie cambia el estado del Carrier Detect, Ring Indicator, DTR, etc. el objeto SerialPort envía un enveto de tipo SerialPortEvent que describe los cambios de estado. Leer el resto de esta entrada »




Subversion

21 04 2008

Una buena herramienta para que podamos dividir el trabajo de programación es Subversion. Es un sistema que permite el control de versiones de los proyectos de software, almacenando el código fuente en un servidor en Internet, un repositorio.

Todos los usuarios del equipo que participen el proyecto, harán cambios en el código. Es un coñazo andar copiando y pegando en algún sitio los cambios de cada uno, además de ser un lío. Subversion nos permite olvidarnos de todo eso y tener un solo proyecto común para todos en el que se realizarán todos los cambios. Instalando un plugin en Eclipse, Subclipse, podemos agregar esta funcionalidad.

La guía para su instalación está aquí.

Una vez instalado, abriremos la perspectiva SVN, para añadir nuestro repositorio. Vamos a Window->Open Perspective->Other.. y seleccionamos SVN Repository.

Una vez abierta la nueva perspectiva, en la columna izquierda podremos añadir el repositorio. Click derecho New->Repository location… y añadiremos la URL del repositorio que podéis encontrar en nuestro grupo de Assembla, en la pestaña Trac/SVN. Cuando lo hayamos agregado, lo exploraremos, y veremos los 2 proyectos que estamos desarrollando: Tornos y Terminal.

Lo primero que queremos hacer es descargarnos estos proyectos para trabajar sobre ellos. Así que clicaremos en ellos con el click derecho, sobre sus carpetas, y le daremos a Checkout… . Elegiremos la opción ‘Checkout as a project in the workspace’ y le daremos el mismo nombre que tiene el proyecto en el repositorio. Se creará la copia de trabajo en nuestro workspace de Eclipse, sobre la que podremos efectuar los cambios.

Update

Mientras que editamos, debuggeamos o lo que sea, puede que alguien efectúe cambios en el proyecto. Para aplicar los cambios en nuestra copia de trabajo, haremos click derecho en el proyecto, y en el menú Team, que tiene todo lo relacionado con SVN, clickaremos en Update.

Commit

Una vez hayamos realizado todos los cambios, querremos actualizar la versión del repositorio con nuestros cambios. Antes de hacer esto es obligatorio sincronizar nuestra copia con la del repositorio, es decir, hay que hacer click en Update. Una vez hecho esto haremos click en Commit, dentro del menú Team, al hacer click derecho en el proyecto. Si todo va bien, los cambios se aplicarán a la versión del repositorio.

Synchronize with repository

La opción de synchronize nos permite aplicar neustros cambios a la versión del repositorio además de recibir los cambios que otros hayan hecho en nuestra copia. Es posible que no podamos saber el alcance de neustros cambios en el servidor, y que nos interese conocer el estado del repositorio antes de aplicarlos. Para ello, le daremos a Window, open perspective, other y abriremos la perspectiva de Team synchronizing, que nos mostrará una visión de los cambios a recibir y a aplicar. Si vemos que todo está bien, haremos click derecho en el proeycto, Team y le daremos a synchronize.

Ayuda

Para encontrar ayuda sobre Subclipse y tal, en este link está toda la información:

http://svn.collab.net/subclipse/help/index.jsp





Oracle JDeveloper

16 04 2008

Bueno, como visteis ayer, descubrimos un programa muy interesante para desarrollos Java. Oracle JDeveloper te permite crear diagramas UML para definir el proyecto y pasar a implementarlo. También, de forma inversa, permite generar diagramas UML automáticamente de nuestros proyectos: diagramas de clases, de secuencias, de estados…

Urgando un poco en el programa se puede encontrar fácilmente esta opción. Además de esto, incluye una herramienta para el desarrollo visual de interfaces de usuario. Esta parte promete bastante, pero todavía no la he mirado a fondo.

Es verdad que es un coñazo pasar de Eclipse a otro programa. Busqué plugins UML para Eclipse, y el mas interesante me parció OMONDO. Aún así, es increíblemente más pesado y lento que Oracle JDeveloper, y los diagramas que crea son mucho menos claros, además de no relacionar correctamente ciertas partes.

Esto es un ejemplo de diagrama de clases usando Oracle JDeveloper:

Free Image Hosting at www.ImageShack.us

QuickPost

Link para descarga:

Oracle JDeveloper