Modulo 2 Programacion Orientada A Objetos
Modulo 2 Programacion Orientada A Objetos
Modulo 2 Programacion Orientada A Objetos
INTRODUCCIÓN
Este segundo módulo del curso de programación orientada a objetos, tiene como objetivo
principal extender los conceptos vistos en el primer módulo del curso y ver de forma más
cercana y detallada los elementos de programación orientada a objetos.
Para ello haremos un recorrido por algunos de los elementos claves del lenguaje Java que
permiten desarrollar e implementar una aplicación con base en el paradigma de la
programación orientada por objetos. Dividiremos el modulo en tres secciones. La primera
de ella discutirá algunos elementos metodológicos para poder definir y diseñar una
aplicación orientada por objetos, deteniéndonos especialmente en el enfoque UML
desarrollado en la mitad de la década de los 90’s y cuyo uso ha adquirido dimensiones
importantes en el mundo del desarrollo de software. La segunda sección la dedicaremos a
revisar algunos de los cuadros referenciales para desarrollo de interfaces utilizando librerías
tales como JWT y SWT. Para ello continuaremos con el desarrollo de nuestro ejemplo del
módulo 1 (Aplicación de tablero mágico), no sin antes revisar algunas de las clases
pertenecientes al cuadro referencial SWT (Standard Widget Toolkit) equiparables a
aquellas utilizadas en la construcción de nuestra aplicación pero pertenecientes al cuadro
referencial JWT (Java Web Toolkit).
COMPETENCIAS DE LA ASIGNATURA
Competencias de la asignatura
IDEOGRAMA ................................................................................................................................................................ 3
1. TÉCNICAS DE DISEÑO PARA PROGRAMACIÓN ORIENTADA A OBJETOS ............................................................. 4
1.1 CICLOS DE DESARROLLO DE INGENIERÍA DE SOFTWARE .............................................................................................................................. 4
1.2 TARJETAS DE RESPONSABILIDAD DE CLASES .................................................................................................................................................. 5
1.3 LENGUAJE DE MODELADO UNIFICADO (UML) .......................................................................................................... 6
2. DISEÑO DE INTERFACES DE USUARIO USANDO POO ....................................................................................... 12
2.1 USO DE LIBRERÍAS GRAFICAS (SWING Y SWT).......................................................................................................... 12
2.2 IMPLEMENTACIONES Y EJEMPLOS ................................................................................................................................................................ 14
1.3 USO DE LIBRERÍAS GRÁFICAS PARA WEB (GWT) ....................................................................................................... 26
3. DISEÑO DE APLICACIONES DE NEGOCIOS ........................................................................................................ 30
3.1 APLICACIONES CON USO DE BASES DE DATOS ............................................................................................................................................. 31
4
Ideograma
Ciclos de
desarrollo de
Ingenieria de
Software
Tarjetas de
Responsabilidad
de Clases
Lenguaje de
Modelado Unificado
(UML)
Uso de librerias
gráficas
Implementacion y
Ejemplos
Uso de Librerias
para Web GWT
5
La ingeniería de software requiere ejecutar muchas tareas, de las cuales las más
importantes son:
El nombre de la clase.
El nombre del paquete (si es aplicable).
Las responsabilidades de la clase.
Los nombres de otras clases con las cuales la clase colaborará para cumplir sus
responsabilidades.
Carta de Poker
Conocer su nivel o numero Baraja
Conocer su signo o palo (corazones, picas…) Graphics
Conocer si está destapada
Seleccionar la carta
Descubrir
Pintar
Las responsabilidades se listan a la izquierda. Las clases con las cuales la clase tiene
alguna relacion se listan a la derecha. El principio basico de esta tecnica es que el diseño
de clases se ejecute por un conjunto de desarrolladores. El equipo trata de determinar todas
las clases y sus responsabilidades que seran necesarias por la aplicación. El equipo
atravesará por varios escenarios de la misma. Por ejemplo, un escenario para el juego de
cartas puede ser aquel en que el jugador, selecciona una carta de la baraja y la sostiene
en su mano. El equipo utilizará las tarjetas CRC para constatar si el escenario puede ser
manejado por las responsabilidades asignadas a las clases. De esta manera, el diseño se
refina hasta que el equipo esté de acuerdo en un conjunto de clases y sus correspondientes
responsabilidades. Si se usa una cantidad pequeña de cartas se mantiene la complejidad
del diseño al minimo. Se pretende puntualizar en lo esencial de la clase y prevenir que entre
en el detalle que en esta fase puede ser improductivo. Tambien evita, que el diseñador
otorgue muchas responsabilidades a la clase.
7
Modelo Funcional.
El modelo funcional incluye muestras del funcionamiento del sistema desde el punto
de vista del usuario. El principal tipo de diagrama utilizado es el diagrama de caso
de uso (Use Case Diagram).
Modelo de Objetos.
Consiste en un conjunto de diagramas que describe la estructura y sub- estructura
del sistema utilizando objetos, atributos, operaciones y asociaciones. Uno de los
principales diagramas utilizados es el Diagrama de clases (Class Diagram).
Modelo dinámico.
Consiste en la descripción del comportamiento interno del sistema: Incluye diagrama
de secuencia, diagrama de actividades y diagrama de máquina de estados.
UML, se compone de diferentes elementos que representan las diferentes partes de una
aplicación o un sistema de software: En UML 2.0 existen 13 tipos de diagramas. Algunos de
los más importantes son:
❖ Diagrama de casos de uso: muestra los actores (las personas u otros usuarios del
sistema), los escenarios y sus relaciones (figura 2).
9
❖ Diagramas de clase: Muestra las clases y sus relaciones entre ellas (figura. 3).
Después de haber examinado brevemente algunas técnicas que facilitan el desarrollo del
software orientado por objetos, enseguida se comenzará el recorrido de la programación
orientada por objetos examinando el diseño y desarrollo de las interfaces de usuario que
permiten la gestión e interacción con las aplicaciones de software construidas. Revisaremos
algunos de los cuadros referenciales que facilitan el desarrollo de interfaces y que en
último término dan la flexibilidad y posibilidad para la interacción del usuario con las
aplicaciones.
Algunas de estas clases fueron utilizadas en los ejemplos revisados en el módulo 1, por
ejemplo Canvas, FileDialog, Dialog.
Enseguida vamos a revisar, una librería que resuelve algunos problemas de compatibilidad
derivados del uso de AWT y que ha permitido la construcción de innumerables interfaces
para diferentes dominios de aplicaciones de software. En la figura 9, se muestra su
estructura general de clases.
14
A continuación, se ilustra el uso de algunas de las clases que componen SWT y cada uno
de los estudiosos tendrá la oportunidad, a través de las actividades propuestas en este
módulo y en el siguiente de utilizarlas para la construcción de algunas sencillas aplicaciones.
Figura 10. Listado fuente del programa java para construir una ventana básica.
En este ejemplo se construye una ventana de 250pixels por 200 pixels en el centro de la
pantalla. En toda aplicación que utilice la librería grafica SWT, existen dos clases muy
importantes: Display y Shell. La clase Display brinda la conexión entre SWT y el sistema
operativo de la máquina. Ella implementa un evento cíclico y provee información acerca
16
del sistema operativo. La clase Shell, por su parte, representa la ventana. Existen shells de
alto nivel, los cuales toman el display como su padre, mientras que otros pueden jugar el
papel de shells secundarios.
La línea 18
Shell shell = new Shell(display);
La Línea 19
shell.setText(“Ejemplo de construcción de una ventana”);
El siguiente ejemplo, muestra la manera como se puede adicionar un tipo tool text asociado
a la ventana. Tal como se observa en la línea 21, se incluye la llamada al método
setToolTipText, el cual recibe un String como entrada. Esto permite adicionar un mecanismo
tal que al acercar o pasar el mouse por encima de la ventana aparecerá el tip text asociado
previamente definido.
18
Figura 12. Ejemplo de la implementación de un tool tip text para una ventana.
Figura 13. Ejemplo del pantallazo del uso de un tip tool text.
Enseguida se revisará la inclusión de un botón que permita salir de la aplicación. Para ello
utilizaremos la clase Button de la librería SWT. Como se puede observar en el listado del
código fuente correspondiente (Figura. 14), se incluye la implementación de un botón, el
cual se coloca en el Shell (líneas 54 y 56). Luego se invoca el método setVisible de la clase
para hacerlo visible y se adiciona un listener, el cual le da la capacidad de estar atento al
evento de click (líneas 69 – 76) del botón y responder ejecutando el código de salida (línea
73). Como se aprecia la programación orientada
19
En la figura 15, podemos apreciar la interfaz modificada incluyendo el nuevo botón de salida.
En esta corta pieza de código, se ilustra el uso de la clase DirectoryDialog, la cual permite
abrir de manera transparente un dialogo y manejar o gestionar los archivos. El
20
listado fuente de la aplicación se ilustra en la figura 16. Utilizamos los elementos ya vistos,
como el uso de la clase Shell y Display. Al interior del Shell, estamos incluyendo un botón
llamado status, el cual tiene un listener asociado que permite detectar las acciones
efectuadas con el mouse, específicamente la acción MouseDown (click). Al ser accionado
el mouse (click o doble-click), se ejecuta el código del listener, el cual es sencillamente la
instanciación de un objeto de tipo DirectoryDialog, que abre una ventana mostrando la
jerarquía de directorios del equipo donde esté siendo ejecutada la aplicación. Se aprecia
que, esta clase va a permitir al usuario seleccionar un directorio o definir uno nuevo y al
interior del código se actualiza la propiedad Text del botón status, o dejarla intacta si el
usuario prefiere darle clic a la opción cancel. Esta pieza de código puede ser de mucha
utilidad en diversas aplicaciones donde la selección de archivos es usada frecuentemente.
Figura 16. Listado fuente de una aplicación para manejo de directorios.
21
La figura 17, muestra la interfaz principal de esta sencilla aplicación, mientras que la figura
18 muestra el diálogo abierto cuando el usuario da clic en el botón. Es necesario hacer notar
el uso de una imagen asociada con el botón status. Las líneas 56 a 58 del programa definen
y determinan dónde reside el recurso de la clase Image que finalmente será asociado en la
línea 70. Con este procedimiento el programador podrá asociar no importa que recurso
grafico (iconos, archivos jpg , gif etc) a un objeto tal como un botón , un label, una ventana,
un menú de aplicación etc.
22
Figura 17. Interfaz de una aplicación con un botón para manejo de directorios.
Figura 18. Interfaz para el manejo de directorios utilizando la clase SWT DirectoryDialog
23
Figura 19. Listado de código fuente para la implementación de manejo de archivos utilizando la
clase FileDialog de la librería SWT
24
Figura 21. Interfaz para el manejo de archivos utilizando la clase SWT FileDialog
En el módulo 3 se incluirán más ejemplos y se continuará con el ejemplo del módulo 1, pero
incluyendo algunas complejidades en el modelo de objetos y obviamente en el
comportamiento de la aplicación del Tablero Mágico. En la siguiente sección se enfocará la
atención en describir brevemente la librería GWT y sus aplicaciones, para finalmente tocar
el desarrollo de aplicaciones comerciales que manejen el concepto de bases de datos.
A continuación revisaremos los primeros pasos para crear un ejemplo sencillo de una
aplicación que utilice la librería GWT.
Luego, de clic en la opción next y diligencie el nombre del proyecto y el nombre del
paquete según su necesidad. (Figura 23)
Figura 23. Pantalla de selección del nombre del proyecto y nombre del paquete para la creación
de un proyecto de tipo GWT.
28
Una vez este seguro de su información, de clic en finish para ejecutar la creación del
proyecto.
Figura 24. Estructura de archivos para el proyecto GWT-ejemplo que utiliza la librería GWT.
Figura 25. Archivos fuente .java y archivos de configuración generados al crear el proyecto GWT-
ejemplo usando Eclipse y la librería GWT.
Al ejecutar la aplicación, esta será ejecutad directa o indirectamente en un browser tal como
Internet Explorer, Firefox etc. y se visualizará como se ilustra en la figura 26.
30
Figura 27. Listado de las tablas para una aplicación OO ejemplo que use persistencia de datos.
El objetivo de esta aplicación, será simplemente poder crear registros para las tablas curso
y estudiante, así como crear la relación que determine quién (estudiante) está registrado en
cual curso.
32
Figura 28. Estructura de clases de la aplicación ejemplo para manejar de forma básica la
creación de estudiantes
Para facilitar la comprensión, en este modulo solamente se revisará aquello que compete
a la creación de los registros en la tabla de estudiantes, para posteriormente en el modulo
3 ampliar nuestro ejemplo y poder mirar de manera más detallada la creación de cursos y
el registro de un estudiante para un curso.
Tal como se muestra en la figura 28, se han creado dos componentes básicos (paquetes)
, uno que comprende todas las clases que permiten hacer la conexión con la base de datos,
seleccionar alguna de las tablas (ConnectionManager, ConnectionManagerImplementer,
DataAccessHelper, SqlExecutor y
SqlExecutorInterface ), crear un mecanismo de auditoría de la aplicación
(LoggerHelper.java) y otro que propiamente permitirá manejar la interfaz con el usuario para
poder capturar la información y actualizarla adecuadamente en el sistema.
33
Figura 29. Listado fuente de la clase EmalisTestSuiteServices que maneja la gestión de inserción
de estudiantes para la aplicación ejemplo.
34
Glosario
Análisis de requerimientos: Es una de las etapas más importantes del ciclo de desarrollo
de software. Esta etapa consiste en determinar los diferentes elementos de información
necesarios para el desarrollo de una aplicación o un sistema de información a través del
uso de diferentes técnicas y herramientas metodológicas. Esencialmente esta etapa
involucra como actividades: recolección de información, análisis y determinación de
requerimientos y documentación de requerimientos.
Bibliografía
Libros
Internet