martes, 24 de mayo de 2011

puntos extras clase: Modelado de Base de Datos en UML


Los objetos brindan confiabilidad, flexibilidad y eficiencia a los sistemas de software, haciéndole frente a los diseñadores y a los arquitectos de hoy en día con muchas opciones. Desde el punto de vista de la tecnología, la opción esta generalmente entre orientación a objetos pura,  híbrido relacional-objeto, relacional puro, y soluciones basadas en los formatos de archivos abiertos o propietarios (ej. XML, el almacenamiento estructurado OLE). Oracle, IBM, Microsoft, POET ofrecen soluciones similares pero a menudo incompatibles.

Este articulo toma una de esas opciones, que es acordar un modelo orientado a objetos sobre una base de datos puramente relacional. Esto no implica que este sea la única opción, la mejor o mas simple solución, pero pragmáticamente es uno de los mas comunes.

Comenzaremos con un viaje rápido entre los dos dominios del diseño: primero el modelo de clases orientado a objetos según se presenta en UML, y segundo el modelo de base de datos relacional.

Para cada dominio miraremos solamente las características principales que afectan nuestra tarea. Entonces miraremos las técnicas y las ediciones implicadas en el mapeo del modelo de clases al modelo de base de datos, incluyendo persistencia del objeto, comportamiento del objeto, relaciones entre los objetos e identidad de los objetos. Concluiremos con una revisión del perfil de los datos de UML (según lo propuesto por Rational Software).
Una cierta familiarización con diseño orientado a objetos, UML y modelado de base de datos relacional es asumida.

El modelo de clase en UML es el artefacto principal producido para representar la estructura lógica  de un sistema de software. Captura los requisitos de los datos y el comportamiento de objetos dentro del dominio de modelo. Las técnicas para descubrir y elaborar este modelo están fuera del alcance de este artículo, por eso asumiremos la existencia de un modelo de clases bien diseñado que requiere mapeo a la Base de Datos relacional.

puntos extras clase : Sistemas operativos moviles

Para aquellos que quieran comprar un móvil en breve y para los que el sistema operativo sea un factor a tener en cuenta, y también para los curiosos, aquí tienes unas pequeñas notas sobre los sistemas operativos para smartphones más importantes del mercado actual.

iPhone OS

El sistema operativo del iPhone de Apple. En concreto se trata de una versión reducida de Mac OS X optimizada para procesadores ARM que actualmente se encuentra en su versión 2.0, liberada el 11 de Julio de 2008.
Oficialmente no se pueden instalar programas que no hayan sido firmados por Apple, para lo cuál hace falta pagar para entrar a formar parte del iPhone Developer Program (descargar el SDK, por otro lado, si es gratuito). Es posible, no obstante, desarrollar aplicaciones web para Safari o instalar aplicaciones de terceros mediante jailbreaking a través de los programas PwnageTool y WinPwn, que también permiten liberar el iPhone de primera generación.
Se trata de un buen sistema operativo, con una interfaz muy interesante, como nos tiene acostumbrados Apple, aunque es una lástima el hardware sobre el que corre el sistema, que tiene muchas carencias, y las restricciones auto impuestas:
  • restricciones sobre el hardware en el que correrá el sistema
  • restricciones sobre el software que puede ejecutar el sistema
  • restricciones sobre las aplicaciones que se pueden ejecutar en segundo plano, o lo que es lo mismo, restricciones en la multitarea (que se pueden subsanar de nuevo con PwnageTool y WinPwn)
  • y restricciones sobre los operadores con los que poder utilizar el teléfono.

Windows Mobile

El sistema operativo de Microsoft para móviles. Se trata de un sistema escrito desde cero que tan solo tiene en común con los Windows de escritorio el nombre y algunas convenciones de la interfaz de usuario.
Se encuentra en su versión 6.1, de Abril de 2008, estando la versión 7 prevista para la segunda mitad de 2009. Windows Mobile 7 pretende ser revolucionario, dando mayor protagonismo a la pantalla táctil (de nuevo Apple muestra el camino a seguir). Se podrá interactuar con el sistema realizando movimientos sobre la pantalla que el teléfono detectará utilizando la cámara. El aspecto de la interfaz será más parecido a Vista.
En la actualidad ya existen teléfonos que corren Windows Mobile y cuentan con pantalla táctil, como el HTC Touch Diamond, que utiliza la interfaz de usuario TouchFLO 3D diseñada por HTC y que algunos consideran uno de los mayores competidores del iPhone.

BlackBerry OS

Se trata de un sistema operativo multitarea desarrollado por la compañía Research In Motion (RIM), creadores de los BlackBerry. Es un sistema operativo orientado principalmente al entorno empresarial que soporta el perfil MIDP 1.0 para desarrollo de aplicaciones Java para dispositivos móviles, además de parte de MIDP 2.0 desde la versión 4.
Es posible desarrollar software para la plataforma utilizando MIDP o bien utilizando el API propietario de RIM, pero si la aplicación hace uso de determinadas funciones debe ser firmada por RIM para poder ejecutarse. Para firmar una aplicación el desarrollador debe realizar un pago inicial de 100$.

Symbian

El sistema operativo sobre el que corren la mayoría de los smartphones, y por lo tanto el sistema operativo que cuenta con más aplicaciones en su haber. Según un estudio de Febrero de 2008 Symbian cuenta con un 65% de mercado, frente al 12% de Windows Mobile, 11% de BlackBerry OS, 7% de iPhone OS y 5% de Linux.
Cuenta con varias interfaces de usuario siendo la más popular S60; especialmente interesante por permitir desarrollo en Python.
Actualmente Symbian se encuentra en la versión 9.5, aunque aún no existen teléfonos que lo incorporen (tampoco la versión 9.4, que posiblemente esté incluido con el próximo Nokia 5800 XpressMedia, con pantalla táctil y que es la apuesta de Nokia para competir con el iPhone). Desde la versión 9.1 es necesario que las aplicaciones estén firmadas para poder utilizar ciertas funciones del teléfono, aunque es posible saltarse esta limitación utilizando distintos métodos.
Nokia, que ya contaba con un 48% de las acciones de Symbian, anunció recientemente la compra de la compañía. También hicieron pública su intención de que Symbian pase a ser software libre en un futuro próximo, para lo cual ya ha creado una fundación sin ánimo de lucro que se encargue de la estandarización de Symbian, la Fundación Symbian.

Android

La plataforma de Google para móviles. Es libre (licencia Apache versión 2) y está basado en Linux y Java. Por ahora no es más que una promesa, puesto que no se ha presentado ningún movil que lo utilice. Se especula que HTC podría ser el primer fabricante en utilizar este sistema operativo, a finales de año, e incluso se rumorea un nombre para este modelo: el HTC Dream.

Puntos extras clase :interfaz grafica python

TkInter

TkInter (de TK Interface) es un módulo que nos permite construir interfaces gráficas de usuario multiplataforma en Python utilizando el conocido toolkit Tk. Python incluye este módulo por defecto, lo que hace que sea un tookit muy popular. TkInter, además, es robusto, maduro y muy sencillo de aprender y de utilizar, contando con una amplia documentación.

Por otro lado hasta la versión 8.5 Tk era famoso por lo poco atractivo de sus widgets (cosa que se podía solucionar hasta cierto punto gracias a Tile). No es hasta esta versión que contamos con cosas tan básicas como textos con antialiasing en X11 o widgets como Treeview. En esta versión también se incluye Tile por defecto, por lo que contamos con un mejor aspecto general para todas las plataformas.
Sin embargo Python no se distribuye con Tk 8.5 hasta la versión 2.6, por lo que, para versiones de Python anteriores, es necesario recompilar TkInter para Tk 8.5 por nuestra cuenta, o bien usar Tile si no necesitamos ninguna de las nuevas características.
Es más, para poder usar la mayor parte de las nuevas características de Tk 8.5 es necesario instalar una librería que actúe como wrapper de Ttk (el nombre con el que han dado en llamar al conjunto de los nuevos widgets y temas de Tk), como puede ser pyttk.
TkInter se distribuye bajo la PSFL (Python Software Foundation License) una licencia compatible con la GPL creada para la distribución de software relacionado con el proyecto Python. La PSFL carece de la naturaleza viral de la GPL, por lo que permite crear trabajos derivados sin que estos se conviertan necesariamente en software libre.
Por último, veamos una pequeña aplicación de ejemplo escrita con TkInter, sin uso de eventos y con solo unos pocos widgets, que nos servirá para comparar el aspecto de los distintos toolkits.
  1. from Tkinter import *  
  2.   
  3. root = Tk()  
  4.   
  5. frame = Frame(root)  
  6. frame.pack()  
  7.   
  8. label = Label(frame, text="Hola mundo")  
  9. c1 = Checkbutton(frame, text="Uno")  
  10. c2 = Checkbutton(frame, text="Dos")  
  11. entry = Entry(frame)  
  12. button = Button(frame, text="Aceptar")  
  13.   
  14. label.pack()  
  15. c1.pack()  
  16. c2.pack()  
  17. entry.pack()  
  18. button.pack()  
  19.   
  20. root.mainloop()  
GUIs en Python con TkInter
Pros: Popularidad, sencillez, documentación.
Contras: Herramientas, integración con el sistema operativo, lentitud.
Recomendado para: ¿Prototipos rápidos?

puntos extras Eclipse y tomcat

Antiguamente si queríamos integrar Tomcat en Eclipse teníamos que recurrir a algún plugin, como Sysdeo Eclipse Tomcat Launcher. Actualmente, con Eclipse Ganymede (Eclipse 3.4) eso ya no es necesario y podemos iniciar y parar Tomcat o depurar el código desde Eclipse.

                          Eclipse y Tomcat

Veamos los pasos a seguir para lograr esta interacción.

  1. Descargamos Eclipse desde su página web. La versión que nos interesa, dado que vamos a desarrollar con JEE, es la llamada Eclipse IDE for Java EE Developers (163 MB)
  2. Descargamos y descomprimimos el zip de la última versión core de Tomcat.
  3. Iniciamos Eclipse. Nos dirigimos a Window -> Preferences -> Server -> Runtime Environment, pulsamos Add y seleccionamos nuestra versión de Tomcat. Marcamos Create a new local server si no está seleccionado.
  4. Pulsamos Next y buscamos el directorio en el que instalamos Tomcat. Pulsamos Finish y OK. El nuevo servidor debería mostrarse en la pestaña Servers. También se habrá creado un proyecto nuevo Servers con los archivos de configuración de nuestra instancia de Tomcat.
  5. Ahora vamos a probar el servidor creando una pequeña aplicación web. Seleccionamos File -> New -> Dynamic Web Project, rellenamos el nombre que queramos darle a la aplicación y pulsamos Finish.
  6. Hacemos clic con el botón derecho sobre la carpeta WebContent de nuestro nuevo proyecto y seleccionamos New -> JSP. Le damos como nombre index.jsp y pulsamos Finish. No necesitamos hacer nada más, puesto que el descriptor de despliegue que se crea por defecto ya indica que index.jsp es uno de los welcome-file.
  7. Sustituimos el contenido de index.jsp por el siguiente, que debería mostrar la cabecera User-Agent, con la información del navegador
  8. Tu navegador es <%= request.getHeader("user-agent") %>
    
    
  9. Arrastramos el proyecto desde el explorador de proyectos al servidor Tomcat en la pestaña Servers para asociarlo.
  10. Hacemos clic con el botón derecho sobre el servidor y seleccionamos Start.
  11. Abrimos la página http://localhost:8080/nombre_aplicacion/. Si todo ha funcionado correctamente deberíamos ver nuestro user-agent en pantalla
  12. Desarrollamos nuestra aplicación usando JSP, Servlets, JDBC, Hibernate, o cualquier otra tecnología que nos interese.
  13. Una vez terminada la aplicación solo resta crear un archivo WAR para poder distribuirla fácilmente. Hacemos clic con el botón derecho sobre nuestro proyecto, seleccionamos Export -> WAR File, e introducimos el nombre a utilizar y la ruta en la que queramos guardar el WAR.

Puntos extras clase : diagramas de secuencia un paso ala vez


A pesar de que a partir de los diagramas de casos de uso y de los diagramas de robustez ya tenemos entre un 75 y 80 por ciento de atributos de nuestras clases identificados, es hasta el diagrama de secuencia donde se empiezan a ver que métodos llevaran las clases de nuestro sistema. Esto se debe que hasta que vemos interactuando a los objetos de nuestras clases con los actores y con otros objetos de manera dinámica, hasta ese momento tenemos suficiente información como para poder empezar a especificar los métodos de nuestras respectivas clases.

El diagrama de secuencias es el núcleo de nuestro modelo dinámico, y muestra todos los cursos alternos que pueden tomar todos nuestros casos de uso. Los diagramas de secuencias se componen de 4 elementos que son: el curso de acción, los objetos, los mensajes y los métodos (operaciones). Estos 4 elementos son los que ya han sido analizados en clase con anterioridad dentro de la primera unidad.

Los 4 pasos a seguir:
A continuación se dará una muy breve descripción de los 4 pasos que se deben de seguir para dibujar correctamente diagramas de secuencia de ICONIX:

-Paso 1: Copia el texto de la especificación de tu caso de uso y pégalo en la parte superior de tu diagrama de secuencia. Con esto siempre se tendrá en cuenta que es lo que debe de hacer el diagrama de secuencia.

-Paso 2: Cada uno de los objetos entidad de tu diagrama de robustez es una instancia de la clase que debe de ser agregada a tu diagrama de secuencias ya que representa tu modelo estático. Hay que ser muy meticuloso con este paso, ya que representa el ultimo de tu modelo estático antes de codificar.

-Paso 3: Agrega las interfaces del diagrama de robustez. Con esto ya tenemos el diagrama de secuencias construido. Ahora, el cuarto paso es para decidir cuales métodos irían en cuales clases, lo cual es la esencia del modelo de iteraciones.

-Paso 4: Pon los métodos en las clases, lo cual significa convertir los controles uno por uno de tu diagrama de robustez en métodos y mensajes. Verifica que para cada control dibujado le pertenecen los mensajes correctos dentro del diagrama de secuencias.

Top Ten de errores de los diagramas de secuencia:
A continuación se presentan los 10 errores mas comúnmente cometidos por los estudiantes al intentar hacer sus diagramas de secuencia.

10.- No hacen un diagrama de secuencia para cada caso de uso: Hacer esto es muy importante, ya que solo así se puede saber cual es el rol y las responsabilidades de cada objeto.

9.- No ponen el texto del caso de uso en el diagrama de secuencia: El poner de vuelta este texto al margen del diagrama de secuencia provee de la visión necesaria para poder hacer diagramas de secuencia correctos de acuerdo al caso de uso que se esta modelando.

8.- No identifican todos los objetos necesarios desde el diagrama de robustez: Si tienes problemas al realizar los diagramas de secuencia es por que tienes mal modelados tus casos de uso o tus diagramas de robustez están incompletos.

Puntos extras clase :Instalacion de Net beans

NetBeans es uno de los más populares del entorno de desarrollo integrado ( IDE , lo que proporciona un conjunto de herramientas y características para acelerar el proceso de desarrollo, tan útil en el fomento de la productividad de los programadores). NetBeans es un código abierto y libre aplicación, disponible para todas las plataformas comunes - Distors Linux como Ubuntu 11.04 (Natty Narwhal), Fedora, Linux Mint, Windows y Mac OS X. NetBeans 7.0 (Última versión estable) publicado la semana hace. Netbeans es muy popular entre los desarrolladores de Java EE, por sus características y la simplicidad. Este artículo se explica cómo instalar netbeans en una cáscara recién instalado Ubuntu 11.04, de la USC (Centro de Software) o, también puede utilizar Synaptic Package Manager.
También puede Trate de IDE de Eclipse en Ubuntu 11.04 , si lo desea, como Eclipse es otro de código abierto muy popular IDE Netbeans, pero se recomienda, para los programadores principiantes porque es muy simple, ligero y fácil de comenzar. Una gran cantidad de plugins gratuitos disponibles para ampliar las funciones (soporte para Ruby y Rails, C / C + +, PHP, etc) de NetBeans IDE. Yo, personalmente no recomiendo IDE para programadores principiantes, por el hecho de que - "IDE, se oculta un montón de cosas, mediante la creación de una capa de abstracción, que ahora debe", cuando tiene experiencia suficiente para entender los detalles subyacentes , y luego ir por un IDE como NetBeans o Eclipse. Nebeans tiene 4.5 de 5.0 en el rating software de centro.

Las características de NetBeans de un vistazo

  • una buena programación para Java (EE cuenta con el apoyo)
  • Glashfish Server 3.1 es compatible
  • una implementación más rápida con Weblogic
  • es muy fácil de usar
  • todas las otras funciones básicas (por ejemplo, coloreado de sintaxis, auto-realización) que usted espera de un IDE

Instalación de NetBeans en Ubuntu 11.04

# 1: Abre Centro de Software y de la búsqueda 'netbeans.

2: Haga clic en el botón Instalar para iniciar el procedimiento de instalación y esperar a que la instalación se complete.
3: Eso es todo .. Disfrute de codificación con Netbeans.

Vía alternativa - la instalación de NetBeans desde la línea de comandos

Abrir terminal y escriba el comando, seguido de su contraseña de acceso -
sudo apt-get update
sudo apt-get install netbeans 
 

puntos extras clase :AWT Y swing

La Abstract Window Toolkit (AWT, en español Kit de Herramientas de Ventana Abstracta) es un kit de herramientas de gráficos, interfaz de usuario, y sistema de ventanas independiente de la plataforma original de Java. AWT es ahora parte de las Java Foundation Classes (JFC) - la API estándar para suministrar una interfaz gráfica de usuario (GUI) para un programa Java.

swing

 

El paquete Swing es parte de la JFC (Java Foundation Classes) en la plataforma Java. La JFC provee facilidades para ayudar a la gente a construir GUIs. Swing abarca componentes como botones, tablas, marcos, etc...

Las componentes Swing se identifican porque pertenecen al paquete javax.swing.

Swing existe desde la JDK 1.1 (como un agregado). Antes de la existencia de Swing, las interfaces gráficas con el usuario se realizaban a través de AWT (Abstract Window Toolkit), de quien Swing hereda todo el manejo de eventos. Usualmente, para toda componente AWT existe una componente Swing que la reemplaza, por ejemplo, la clase Button de AWT es reemplazada por la clase JButton de Swing (el nombre de todas las componentes Swing comienza con "J").

Las componentes de Swing utilizan la infraestructura de AWT, incluyendo el modelo de eventos AWT, el cual rige cómo una componente reacciona a eventos tales como, eventos de teclado, mouse, etc... Es por esto, que la mayoría de los programas Swing necesitan importar dos paquetes AWT: java.awt.* y java.awt.event.*.

Ojo: Como regla, los programas no deben usar componenetes pesados de AWT junto a componentes Swing, ya que los componentes de AWT son siempre pintados sobre los de Swing. (Por componentes pesadas de AWT se entiende Menu, ScrollPane y todas las componentes que heredan de las clases Canvas y Panel de AWT).

Puntos extras clase interfaz abstracta

Clases abstractas  es una clase que no se puede instanciar,se usa únicamente para definir subclases ¿Cuándo es una clase abstracta? En cuanto uno de sus métodos no tiene implementación (en Java, el
método abstracto se etiqueta con la palabra reservada abstract).
¿Cuándo se utilizan clases abstractas? Cuando deseamos definir una abstracción que englobe objetos de
distintos tipos y queremos hacer uso del polimorfismo. Interfaces

Una interfaz es una clase completamente abstracta
(una clase sin implementación) En Java, las interfaces se declaran con la palabra reservada interface de manera similar a como se declaran las clases abstractas.

 En la declaración de una interfaz, lo único que puede aparecer son
declaraciones de métodos (su nombre y signatura, sin su
implementación) y definiciones de constantes simbólicas. Una interfaz no encapsula datos, sólo define cuáles son los métodos  que han de implementar los objetos de aquellas clases que implementen la interfaz.  SQL Lenguaje de consulta estructurado Structured Query Language es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en éstas.

lunes, 23 de mayo de 2011

Usabiliad de proyecto sefinder

La aplicacion para la busqueda de personas llamada sefinder cuenta con usabilidad para dispositivos moviles se hizo una prueba se ajusta bien para su registro y busqueda mostrare unas capturas de pantalla se uso en simulador y en el dispositivo

Simulador

dispositivo solo que salieron las letras al reves la tome con la webcam

Puntos extras clase rExcepciones java

¿Qué son?
Mecanismo de control de errores en tiempo de ejecución Una forma de hacer que la aplicación continúe la ejecución si se produce un error
¿Qué sucede si no se puede abrir un fichero?
¿Qué pasa si un socket se cierra de manera inesperada? 
¿Y si dividimos por cero?
¿Para qué sirven?
A veces se usan para detectar situaciones inusuales en la ejecución Si se controlan todos los posibles errores directamente, el código se puede volver
ilegible Con las excepciones se separa el código de un método del código que controla los errores Como casi todo lo demás en java, las excepciones son objetos (que se crean cuando ocurre una situación anormales) Se lanzan para que otra parte del código las capture y las trate 

Las excepciones que se derivan de Error suelen estar relacionadas con lamáquina virtual y no se espera que se capturen ni se traten Las Excepciones derivadas de Exception sí que deben ser tratadas, y en algunos casos es obligatorio hacerlo para que el programa compile

El código que puede generar la excepción debe encerrarse dentro de un bloquetry
try
{
// Código que puede generar la excepción
}
A continuación, la excepción se captura con un
bloque catch
catch (Exception e)
{
// Código para tratar el error
}


El código dentro del try puede generar más de una excepción, y se pueden capturar todas
ellas
try
{
//Código que puede provocar el error
}
catch(IOException ioe)
{
//Código para tratar la IOException
}
catch(Exception e)
{
//Código para tratar la Exception
}

Se puede capturar una excepción utilizando un tipo de excepción más general
try
{
//Código que produce una excepción de tipo IOException
}
catch (Exception e)
{
//Código para tratar una Exception
}

Esto último se puede hacer gracias a que unas excepciones heredan de otras
Sólo se puede hacer con excepciones dentro de la misma jerarquía Sirve para tratar de manera común varios tipos de excepciones distintos


CUIDADO: Si un bloque de código lanza varias excepciones y se usan varios catch
La excepción se captura en el primer catch que se ajusta a la excepción
Los catch deben capturar las excepciones más concretas en primer lugar, y las más generales al final Si no lo hacemos así, hay bloques catch en los que no se entrará nunca



A veces, cuando se produce una excepción, la aplicación queda es un
estado inestable Al tratamiento de una excepción se le puede añadir al final un bloque finally que se ejecuta siempre, se produzcan o no excepciones Se puede usar para cerrar ficheros, liberar recursos, etc.
try
{
//código que genera excepciones
}
catch(IOException ioe)
{
//tratamiento de la excepción
}
finally
{
//código que se ejecuta siempre
}


Lanzar excepción
Esto se hace utilizando la palabra reservada throws en la cabecera del método 

public void miMetodo() throws ArithmeticException

Posteriormente, en el código, se puede lanzar una excepción usando la palabra reservada
throw
catch (IOException ioe)
{
throw ioe;
}
...
throw new NullPointerException();

(PE)Ingenieria Inversa

Que es un diagrama de secuencia
Muestran las interacciones entre un conjunto de objetos, ordenadas según el tiempo en que tienen lugar. En los diagramas de este tipo intervienen objetos, que tienen un significado parecido al de los objetos representados en los diagramas de colaboración, es decir son instancias concretas de una clase que participa en la interacción. El objeto puede existir sólo durante la ejecución de la interacción, se puede crear o puede ser destruido durante la ejecución de la interacción. Un diagrama de secuencia representa una forma de indicar el período durante el que un objeto está desarrollando una acción directamente o a través de un procedimiento.

En este tipo de diagramas también intervienen los mensajes, que son la forma en que se comunican los objetos: el objeto origen solicita (llama a) una operación del objeto destino. Existen distintos tipos de mensajes según cómo se producen en el tiempo: simples, síncronos, y asíncronos.


Los diagrama de secuencia permiten indicar cuál es el momento en el que se envía o se completa un mensaje mediante el tiempo de transición, que se especifica en el diagrama.
 Que es la ingeniería inversa

La ingeniería inversa se ha definido como el proceso de construir especificaciones de un mayor nivel de abstracción partiendo del código fuente de un sistema software o cualquier otro producto (se puede utilizar como punto de partida cualquier otro elemento de diseño, etc.).  Estas especificaciones pueden volver ser utilizadas para construir una nueva implementación del sistema utilizando, por ejemplo, técnicas de ingeniería directa. 
tipos de  ingeniería inversa 
Ingeniería inversa de datos: Se aplica sobre algún código de bases datos (aplicación, código SQL, etc) para obtener los modelos relacionales o sobre el modelo relacional para obtener el diagrama entidad-relación

Ingeniería inversa de lógica o de proceso: Cuando la ingeniería inversa se aplica sobre código de un programa para averiguar su lógica o sobre cualquier documento de diseño para obtener documentos de análisis o de requisitos. 

Ingeniería inversa de interfaces de usuario: Se aplica con objeto de mantener la lógica interna del programa para obtener los modelos y especificaciones que sirvieron de base para la construcción de la misma, con objeto de tomarlas como punto de partida en procesos de ingeniería directa que permitan modificar dicha interfaz.



(PE)Importancia de la Documentacion



La documentación de los programas es un aspecto sumamente importante, tanto en el desarrollo de la aplicación como en el mantenimiento de la misma. Mucha gente no hace este parte del desarrollo y no se da cuenta de que pierde la posibilidad de la reutilización de parte del programa en otras aplicaciones, sin necesidad de conocerse el código al dedillo.

La documentación de un programa empieza a la vez que la construcción del mismo y finaliza justo antes de la entrega del programa o aplicación al cliente. Así mismo, la documentación que se entrega al cliente tendrá que coincidir con la versión final de los programas que componen la aplicación.


Una vez concluido el programa, los documentos que se deben entregar son una guía técnica, una guía de uso y de instalación.


Tipos de documentación


La documentación que se entrega al cliente se divide claramente en dos categorías, interna y externa:

  • Interna: Es aquella que se crea en el mismo código, ya puede ser en forma de comentarios o de archivos de información dentro de la aplicación.
  • Externa: Es aquella que se escribe en cuadernos o libros, totalmente ajena a la aplicación en si. Dentro de esta categoría también se encuentra la ayuda electrónica.
La guía técnica

En la guía técnica o manual técnico se reflejan el diseño del proyecto, la codificación de la aplicación y las pruebas realizadas para su correcto funcionamiento. Generalmente este documento esta diseñado para personas con conocimientos de informática, generalmente programadores.


El principal objetivo es el de facilitar el desarrollo, corrección y futuro mantenimiento de la aplicación de una forma rápida y fácil.


Esta guía esta compuesta por tres apartados claramente diferenciados:

  • Cuaderno de carga: Es donde queda reflejada la solución o diseño de la aplicación.
    Esta parte de la guía es únicamente destinada a los programadores. Debe estar realizado de tal forma que permita la división del trabajo
  • Programa fuente: Es donde se incluye la codificación realizada por los programadores. Este documento puede tener, a su vez, otra documentación para su mejor comprensión y puede ser de gran ayuda para el mantenimiento o desarrollo mejorado de la aplicación. Este documento debe tener una gran claridad en su escritura para su fácil comprensión.
  • Pruebas: es el documento donde se especifican el tipo de pruebas realizadas a lo largo de todo el proyecto y los resultados obtenidos.
La guía de uso

Es lo que comúnmente llamamos el manual del usuario. Contiene la información necesaria para que los usuarios utilicen correctamente la aplicación.


Este documento se hace desde la guía técnica pero se suprimen los tecnicismos y se presenta de forma que sea entendible para el usuario que no sea experto en informática.


Un punto a tener en cuenta en su creación es que no debe hacer referencia a ningún apartado de la guía técnica y en el caso de que se haga uso de algún tecnicismo debe ir acompañado de un glosario al final de la misma para su fácil comprensión.


La guía de instalación


Es la guía que contiene la información necesaria para implementar dicha aplicación.

Dentro de este documento se encuentran las instrucciones para la puesta en marcha del sistema y las normas de utilización del mismo.

Dentro de las normas de utilización se incluyen también las normas de seguridad, tanto las físicas como las referentes al acceso a la información.

Puntos extras clase: Patron de Diseño MVC en java

MVC (Modelo-Vista-Controlador), en palabras simples, es la forma(Patron de Diseño) que utilizamos los programadores para implementar nuestras aplicaciones, ademas permite separar nuestra aplicacion en un modelo, una vista y con controlador. este patron fue introducido por primera vez en el lenguaje “Smalltalk”.
3 tipos de entidades, cada una especialida en su tarea.
Modelo:
Es el encargo de administrar la logica de tu aplicacion. tiene como finalidad servir de abstracccion de algun proceso en el mundo real, ademas tiene acceso a nuestra Base de Datos, agregando q tiene las funciones que controlan la integridad del sistema.
Vista
Sencillamente es la representacion visual del modelo. Es la encargada de representar los componentes visuales en la pantalla, Esta asociada a un Modelo, esto le permite que al momento de cambiar el Modelo, la vista redibujara la parte efectada para reflejar los cambios.
Controlador
Es el escuchador a los eventos que genere el usuario, es decir es el que permite que interactuen el usuario con el sistema. Interpreta los eventos (la entradas) atravez del teclado y/o raton.
Por que usar MVC?
Porque fue diseñada para reducir el esfuerzo al momento de programar. Ademas porque permite una clara separación entre los componentes de un programa; lo cual nos permite implementarlos por separado.
Permite el trabajo en equipo.
Java implementa MVC?
Con decir, que la mayoria de los componentes SWING, han tomado como patron de Disenio a MVC , esto es una gran ventaja para los programadores, porque nos permite implementar nuestro PROPIO modelo de datos para cada componente swing.
Sin embargo es bueno recordar que El modelo original MVC prescribía un alto acoplamiento entre controladores y vistas.
Por que es recomendable tener nuestro Propio Modelo de Datos para nuestros Compoonentes Swing?
Swing se basa en un modelo MVC, donde la mayor parte de componentes de interfaz (JTable, JList, JComboBox, etc.) tienen un modelo de datos por defecto. Si nos limitamos a usar el modelo propio estaremos utilizando los modelos por defecto de Swing. y obviamente estos modelos utilizan la clase java.util.Vector para el almacenamiento de los datos lo que provocará que nuestros interfaces pierdan ahorro de recursos.
Por otro lado, mvc nos permite utilzar de la forma que queramos a cualquier componente swing con tan solo implementar nuestro propio modelo. es decir nos ofrece la posibilidad de trabajar con componentes más eficientes .
Espero haya quedado la idea general, de implementar nuestras aplicaciones tomando como patron de diseño a MVC.

jueves, 19 de mayo de 2011

Resumen de Proyecto

SeFinder 
Proyecto realizado con python y interfaz realizada con HTML


Diagrama de secuencia

como el proyecto es una google app su funcionamiento es diferente la clase con que inicia se llama Usuario es la que se conecta con el demas clases en el Digrama la represente con usuario
después la clase que se manda llamar es la clase menú que despliega el html index que es el principal después aparece unos campos de un formulario que hay que llenarse en aso de que no sea asi aparece un mensaje que dice que hay que llenarse a esto en la clase le llamo registro para modificar datos lo hago desde la interfaz de google appengine




Patrones de diseño

Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces

 yo utilice un patrón de diseño el de Subclase el patrón subclase se usa para no hacer repeticiones de código  ya que esta actividad es muy propensa a errores y confusiones. La utilice en la mayoría de mis clase ya que si tenemos mucho código se hace mas difícil deio  entender en cambio si es poco es mas entendible y mejora la calidad del programa utilice también el  El patrón de llamada  MVC (según CMU), se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página. Ya que yo tengo el código y el código html separados por las plantillas django
Eventos, excepciones y errores
Eventos:

Los  eventos que ocurren en mi programa son al hacer clic  en los botones al principio para seleccionar registro o búsqueda de una persona y  al finalizar un paso de cuando te registras  mas simplificado todos los eventos de mi programa se  manejan por medio de botones.

Excepciones y errores:

Las excepciones y errores que se manejan es cuando al momento de estar registrándote o simplemente llenando el formulario si no se llega a completar un campo arroga un mensaje de error pero para solucionar le puse un prototipo de validación de formularios llamado script oculos us"y así es obligatorio que llene los campos si no no dejara avanzar al usuario

Pruebas Unitarias
las pruebas unitarias  hice el tipo de prueba de caja negra porque mi sistema al ingresarle un numero extraño o carácter no respondía entonces con la validación detecta las excepciones y verifica que se ingrese los caracteres correctos así cuando sea el correcto dejara continuar

Interfaz grafica
Formulario: se capturan datos y se válida para que no se escriban datos que no son validos
Datos: ventana donde se visualiza todos los datos capturados que sean correctos
Búsqueda: ventana donde se visualiza el buscador para que se realice la  búsqueda mediante una palabra clave de una person
 
Sistemas distribuidos

Google App Engine es un sistema distribuido para ejecutar las aplicaciones web con una sobrecarga muy baja. Al enviar la aplicación, el código se inserta de forma automática en varios servidores a prueba de fallos y la infraestructura del centro de datos y de publicación web de Google se encarga de todos los detalles de la conexión de las solicitudes de los usuarios con una instancia en ejecución del código.  Mi aplicacion se enceuntra en la infrastructura de google forma parte de un sistema distribuido ya que No tenemos  que estar atados a un solo equipo ni a un solo error. Además, el sistema está diseñado para facilitar el escalado de la aplicación. Observamos la aplicación y, cuando lo necesita, le dedicamos más recursos y la trasladamos de ubicación sin ningún problema.

Presentacion clase demo

video de mi proyecto de la aplicacion web sefinder
Disculpenme hay cometi un error en nacimiento le puse que nacio en 1994 era 1991 esque me puse un poco nervioso .gracias

http://www.youtube.com/watch?v=00OrkVv2inM

miércoles, 18 de mayo de 2011

(T) 11 interfaz grafica

La interfaz grafica del proyecto esta en HTML les dejo las captura de pantalla
La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador.





(T) 10 pruebas unitarias

unittest, también llamado PyUnit, forma parte de una familia de herramientas conocida colectivamente como xUnit, un conjunto de frameworks basados en el software SUnit para Smalltalk, creado por Kent Beck, uno de los padres de la eXtreme Programming. Otros ejemplos de herramientas que forman parte de esta familia son JUnit para Java, creada por el propio Kent Beck junto a Erich Gamma, o NUnit, para .NET.
El uso de unittest es muy sencillo. Para cada grupo de pruebas tenemos que crear una clase que herede de unittest.TestCase, y añadir una serie de métodos que comiencen con test, que serán cada una de las pruebas que queremos ejecutar dentro de esa batería de pruebas.
Para ejecutar las pruebas, basta llamar a la función main() del módulo, con lo que se ejecutarán todos los métodos cuyo nombre comience con test, en orden alfanumérico. Al ejecutar cada una de las pruebas el resultado puede ser:
  • OK: La prueba ha pasado con éxito.
  • FAIL: La prueba no ha pasado con éxito. Se lanza una excepción AssertionErrorpara indicarlo.
  • ERROR: Al ejecutar la prueba se lanzó una excepción distinta de AssertionError
En el siguiente ejemplo, dado que el método que modela nuestra prueba no lanza ninguna excepción, la prueba pasaría con éxito.
  1. import unittest  
  2.   
  3. class EjemploPruebas(unittest.TestCase):  
  4.     def test(self):  
  5.         pass  
  6.   
  7. if __name__ == "__main__":  
  8.     unittest.main()  
En este otro, sin embargo, fallaría:
  1. import unittest  
  2.   
  3. class EjemploPruebas(unittest.TestCase):  
  4.     def test(self):  
  5.         raise AssertionError()  
  6.   
  7. if __name__ == "__main__":  
  8.     unittest.main()  
Nada nos impide utilizar cláusulas if para evaluar las condiciones que nos interesen y lanzar una excepción de tipo AssertionError cuando no sea así, pero la claseTestCase cuenta con varios métodos que nos pueden facilitar la tarea de realizar comprobaciones sencillas. Son los siguientes:
  • assertAlmostEqual(first, second, places=7, msg=None): Comprueba que los objetos pasados como parámetros sean iguales hasta el séptimo decimal (o el número de decimales indicado por places).
  • assertEqual(first, second, msg=None): Comprueba que los objetos pasados como parámetros sean iguales.
  • assertFalse(expr, msg=None): Comprueba que la expresión sea falsa.
  • assertNotAlmostEqual(first, second, places=7, msg=None): Comprueba que los objetos pasados como parámetros no sean iguales hasta el séptimo decimal (o hasta el número de decimales indicado por places).
  • assertNotEqual(first, second, msg=None): Comprueba que los objetos pasados como parámetros no sean iguales.
  • assertRaises(excClass, callableObj, *args, **kwargs): Comprueba que al llamar al objeto callableObj con los parámetros definidos por *args y **kwargsse lanza una excepción de tipo excClass.
  • assertTrue(expr, msg=None): Comprueba que la expresión sea cierta.
  • assert_(expr, msg=None): Comprueba que la expresión sea cierta.
  • fail(msg=None): Falla inmediatamente.
  • failIf(expr, msg=None): Falla si la expresión es cierta.
  • failIfAlmostEqual(first, second, places=7, msg=None): Falla si los objetos pasados como parámetros son iguales hasta el séptimo decimal (o hasta el número de decimales indicado por places).
  • failIfEqual(first, second, msg=None): Falla si los objetos pasados como parámetros son iguales.
  • failUnless(expr, msg=None): Falla a menos que la expresión sea cierta.
  • failUnlessAlmostEqual(first, second, places=7, msg=None): Falla a menos que los objetos pasados como parámetros sean iguales hasta el séptimo decimal (o hasta el número de decimales indicado por places).
  • failUnlessEqual(first, second, msg=None): Falla a menos que los objetos pasados como parámetros sean iguales.
  • failUnlessRaises(excClass, callableObj, *args, **kwargs): Falla a menos que al llamar al objeto callableObj con los parámetros definidos por *args y**kwargs se lance una excepción de tipo excClass.
Como vemos todos los métodos cuentan con un parámetro opcional msg con un mensaje a mostrar cuando dicha comprobación falle.
Retomemos nuestra pequeña función para calcular el cuadrado de un número. Para probar el funcionamiento de la función podríamos hacer, por ejemplo, algo así:
  1. import unittest  
  2.   
  3. def cuadrado(num):  
  4.     """Calcula el cuadrado de un numero."""  
  5.   
  6.     return num ** 2  
  7.   
  8. class EjemploPruebas(unittest.TestCase):  
  9.     def test(self):  
  10.         l = [0123]  
  11.         r = [cuadrado(n) for n in l]  
  12.         self.assertEqual(r, [0149])  
  13.   
  14. if __name__ == "__main__":  
  15.     unittest.main()