sábado, 20 de octubre de 2007

2. Técnicas básicas de modelado de objetos.

INSTITUTO TECNOLÓGICO DE TUXTLA GUTIÉRREZ





Fundamentos de Programación




Catedrática:

Alicia González Laguna


Presentan:

Ana Claudia Suárez Domínguez
Jorge Emilio del Carpio Hernández
Nestor Cuauhtemoc Entzín Gómez
Francisco Javier Abraham Herrera




Ingeniería en Sistemas Computacionales




Primer Semestre Turno Matutino





Tuxtla Gutiérrez, Chiapas; a 19 de septiembre de 2007.

2.1 Definición de clases, atributos, métodos y objetos.

Es decir, en java las variables de tipo básico son el nombre de una zona de memoria en la cuál podemos almacenar valores, pero que en cambio, las variables de tipo objeto son en realidad referencias (punteros o alias) de objetos.

Una variable de tipo objeto no es un objeto completo, sino tan solo almacena la situación del objeto en la memoria del equipo. Esto es muy similar a lo que ocurre con las casas y las direcciones de dichas casas: la dirección calle Alcalá 950 es una dirección válida, pero no podemos mandar cartas a dicha dirección porque es…un descampado!!!
Lo mismo sucede con los objetos, podemos tener una variable para referirnos a objetos, pero la variable puede que no apunte a ningún objeto y por tanto no la puedo emplear para intentar acceder a un método o a un atributo del objeto referenciado por la variable, sencillamente porque no existe el objeto referenciado.

Una variable que no apunta a un objeto se asume que tiene un valor especial llamado null, e incluso podemos asignar el valor null a la variable:

Thread t = null;
Es por ello que se deben construir objetos y asignárselos a las referencias, usando la palabra clave new. new permite crear un objeto a partir de la descripción de la clase que le pasamos como argumento, por ejempo:

new Persona()
Conseguimos crear un objeto de la clase Persona, los paréntesis permiten especificar qué constructor estamos llamando al crear el objeto (veremos constructores más adelante).
Pero al crear un objeto persona como en el código anterior lo estamos creando como un objeto anónimo, es decir sin asignar el objeto a una variable de tipo referencia, desde la cuál poder referirnos al objeto y poder llamar a sus métodos y atributo, por ello lo más habitual será asignar el objeto a una variable como en: 0359

2.2 El Modelo como resultado de la abstracción.

En la especificación del UML podemos comprobar que una de las partes que lo componen es un metamodelo formal. Un metamodelo es un modelo que define el lenguaje para expresar otros modelos. Un modelo en OO es una abstracción cerrada semánticamente de un sistema y un sistema es una colección de unidades conectadas que son organizadas para realizar un propósito específico. Un sistema puede ser descripto por uno o más modelos, posiblemente desde distintos puntos de vista.

Una parte del UML define, entonces, una abstracción con significado de un lenguaje para expresar otros modelos (es decir, otras abstracciones de un sistema, o conjunto de unidades conectadas que se organizan para conseguir un propósito). Lo que en principio puede parecer complicado no lo es tanto si pensamos que uno de los objetivos del UML es llegar a convertirse en una manera de definir modelos, no sólo establecer una forma de modelo, de esta forma simplemente estamos diciendo que UML, además, define un lenguaje con el que podemos abstraer cualquier tipo de modelo.

La forma como vemos el problema tiene una profunda influencia en forma como acometemos el problema y le damos solución al mismo. Si pensamos que el mundo esta compuesto de clases (Abstracciones de la realidad y de la solución del problema) y objetos (instancias de éstas abstracciones) que interactúan entre si para realizar una funcionalidad, así veremos el mundo. Este es precisamente al paradigma a que le apuesta UML: el modelo orientado a objetos. Si vemos la realidad como compuesta de procesos donde cada uno a su vez se puede descomponer en subprocesos entonces estamos concibiendo la realidad según el modelo estructurado y la arquitectura del sistema en desarrollo estará conformada de programas y subprogramas.

Para modelar un sistema complejo no es suficiente un único modelo se requieren múltiples modelos donde cada uno representa una vista (aspecto) del sistema; estos modelos se complementan entre si. Esta es la razón de la existencia de varios diagramas en UML que modelan diferentes aspectos del sistema, desde las vistas lógicas y físicas del sistema hasta los aspectos dinámicos, estáticos y funcionales del mismo.

Cualquier modelo puede ser representado con diferentes grados de precisión. La precisión se puede ver desde dos ópticas: La primera es el grado de detalle con que se representa un modelo; por ejemplo, si lo que se desea es razonar acerca de los requerimientos del sistema con un cliente o usuario final, se puede elaborar un diagrama de clases que muestra las clases, sus atributos y operaciones así como varios adornos(multiplicidad) en las relaciones; por otro lado, si lo que se desea es transmitir el diagrama de clases para que sea implementado en un DBMS (Data Base Management System, Sistema Administrador de Bases de Datos) por un programador, el diagrama con toda seguridad contendrá la visibilidad de las características (atributos y operaciones) de las clases, los tipos de datos de los atributos y las signaturas de las métodos de las clases. La segunda forma de ver la precisión de un modelo se refiere al nivel de abstracción, ese decir, a los detalles y la vista (porción del sistema o realidad) que presenta un modelo al lector; por ejemplo, en un sistema Bancario que maneja los retiros que hacen los clientes ya sea en un cajero automático o humano, el diagrama de clases contiene decenas de éstas; sin embargo las personas encargadas de desarrollar la interfaz de un cajero electrónico estarían interesadas en las clases necesarias para realizar el comportamiento del cajero y omiten el resto de clases del sistema.

Los mejores Modelos están ligados a la realidad. El símbolo de un actor en un diagrama de casos de uso representa, de hecho, un actor en el sistema real; así como un componente en un diagrama de componentes representa un componente físico del software. Cada elemento de UML como una clase, objeto, estado, componente o nodo tiene su correspondencia con algún elemento conceptual o físico del mundo real.

2.3 El UML como una herramienta de modelado de objetos.

Lenguaje Unificado de Modelado (UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; aún cuando todavía no es un estándar oficial, está respaldado por el OMG (Object Management Group).

Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema de software.

En UML 2.0 hay 13 tipos diferentes de diagramas.

Para comprenderlos de manera concreta, a veces es útil categorizar los jerárquicamente, así:

Diagramas de estructura enfatizan en los elementos que deben existir en el sistema modelado:

• Diagrama de clases

• Diagrama de componentes
• Diagrama de objetos



• Diagrama de estructura compuesta (UML 2.0)

• Diagrama de despliegue


• Diagrama de paquetes



Diagramas de comportamiento enfatizan en lo que debe suceder en el sistema modelado:

• Diagrama de actividades


• Diagrama de casos de uso


• Diagrama de estados

Diagramas de Interacción, un subtipo de diagramas de comportamiento, que enfatiza sobre el flujo de control y de datos entre los elementos del sistema modelado:

• Diagrama de secuencia


• Diagrama de comunicación


• Diagrama de tiempos (UML 2.0)

• Diagrama de vista de interacción (UML 2.0)

2.4 Planteamiento del problema.

Esta es la problemática detectada en la negocicaión "Tepozquilas", se ha encontrado en la información recabada por medio de entrevista es que existe cierta lentitud al realizar las anotaciones de las actividades, además de que no hay completa seguridad en los archivos de control, también los errores frecuentes que se llevan acabo al realizar el registro de movimientos diarios.

2.4.1 Analizar el enunciado del problema.

La problemática que se ha encontrado en la información recabada por medio de entrevista es que existe cierta lentitud al realizar las anotaciones de las actividades, además de que no hay completa seguridad en los archivos de control, también los errores frecuentes que se llevan acabo al realizar el registro de movimientos diarios.






A partir de lo anterior concluimos que es necesario el diseño y desarrollo de un sistema que permita realizar y controlar los movimientos de la empresa, como lo son las ventas, compras, altas, bajas y consultas de productos, empleados y proveedores. Además de esto es necesario restingir el acceso a la inforación que recabe este sistema, para lograr ésto es necesario el uso de una contraseña y nombre de usuario los cuales deben ser privados y confidenciales.


Otra cosa observado mediante el analisis de la problematica y de la información recabada es que no se necesita el control de clientes esto debido a que no se realiza ventas por mayoreo y no se expiden facturas.

2.4.2 Identificar funciones del sistema.

Para la problematica arriba mencionada, necesitamos un sitema que permita el registro de ventas de manera rápida y eficaz, además de que debe contar con funciones de red para que el propietario del negocio pueda accesar a la base de datos de cada sucursal para obtener la infromación necesaria. Por lo tanto las funciones del sistema son las siguientes:


1.- Administración de acceso al sistema y bases de datos.

2.- Conexión a red e internet.

3.- Control de ventas e inventario.

4.- Control de proveedores.

5.- Capacidad para hacer consultas específicas o por aproximación.

6.- Capacidad de expedir ticket o nota de remisión y/o facturas.


2.5 Análisis.

El análisis es la base de todo proyecto, es considerado como la primera etapa del ciclo de vida y es en esta etapa en la que se debe realizar un estudio detallado de la información para poder detectar las alternativas de solución al o a los problemas que presente la empresa.




El analisis OO nos permite identificar los objetos del problema con sus respectivos metodos y atributos. Lo cual nos permitirá realizar el diseño de la solución.


En nuestro caso identificamos como objetos a los empleados, clientes, tequilas, artesanías, notas y los sistemas de pago.

viernes, 19 de octubre de 2007

2.5.1 Descubrir objetos en el dominio del problema.



Si se observa alrededor en una habitación, existen un conjunto de objetos físicos que pueden ser fácilmente identificados, clasificados y definidos (en términos de atributos y operaciones). Pero cuando se “observa” el espacio de un problema en una aplicación de software, los objetos pueden ser más difíciles de identificar. Se puede empezar a identificar objetos examinando el planteamiento del problema o realizando un “análisis sintáctico gramatical” en la narrativa del sistema que se va a construir. Los objetos se determinan subrayando cada nombre o cláusula nominal e introduciéndola en una tabla simple. Los sinónimos deben destacarse. Si se requiere del objeto que implemente una solución, entonces éste formará parte del espacio de solución; en caso de que el objeto se necesite solamente para describir una solución, éste forma parte del espacio del problema. Los objetos se manifiestan de alguna de las formas siguientes: • Entidades Externas que producen o consumen información a usar por un sistema computacional. Por ejemplo: otros sistemas, dispositivos, personas. • Cosas que son parte del dominio de información del problema. Por ejemplo: informes, presentaciones, cartas, señales. • Ocurrencias o Sucesos que ocurren dentro del contexto de una operación del sistema. Por ejemplo: una transferencia de propiedad o la terminación de una serie de movimientos en un robot. • Papeles o Roles desempeñados por personas que interactúan con el sistema. Por ejemplo: director, ingeniero, vendedor. • Unidades Organizacionales que son relevantes en una aplicación. Por ejemplo: división, grupo, equipo. • Lugares que establecen el contexto del problema y la función general del sistema. Por ejemplo: planta de producción o muelle de carga. • Estructuras que definen una clase de objetos o, en casos extremos, clases relacionadas de objetos. Por ejemplo: sensores, vehículos de cuatro ruedas o computadoras. La clasificación mostrada es una de las muchas que se han propuesto en la literatura. También es importante destacar qué no son los objetos. En general, un objeto nunca debe tener un “nombre procedimental imperativo”. Coud y Yourdon sugieren seis características de selección a usar cada vez que un analista considera si incluye o no un objeto potencial en el modelo de análisis: o Información retenida el objeto potencial será de utilidad durante el análisis solamente si la información acerca de él debe recordarse para que el sistema funciones. o Servicios necesarios el objeto potencial debe poseer un conjunto de operaciones identificables que pueden cambiar de alguna manera el valor de sus atributos. o Atributos múltiples durante el análisis de requisitos, se debe centrar la atención en la información principal (un objeto con un solo atributo puede, en efecto, ser útil durante el diseño, pero seguramente será mejor presentado como un atributo de otro objeto durante la actividad de análisis). o Atributos comunes puede definirse un conjunto de atributos para el objeto potencial, los cuales son aplicables a todas las ocurrencias del objeto. o Operaciones comunes puede definirse un conjunto de operaciones para el objeto potencial, las cuales son aplicables a todas las ocurrencias del objeto. o Requisitos esenciales entidades externas que aparecen en el espacio del problema y producen o consumen información esencial para la producción de cualquier solución para el sistema, serán casi siempre definidas como objetos en el modelo de requisitos. Para ser considerado un objeto válido a incluir en el modelo de requisitos, un objeto potencial debe satisfacer todas (o casi todas) las características anteriores. La decisión de incluir objetos potenciales en el modelo de análisis es algo subjetivo, y una evaluación posterior puede llegar a descartar un objeto o reincluirlo. Sin embargo, el primer paso del Análisis Orientado a Objetos debe ser la definición de objetos, y la consiguiente toma de decisiones (incluso subjetivas).



Enfocado a nuestro problema


Los objetos que nosotros detectamos están clasificado dentro de las siguientes clases:

  • Productos: que son los tequilas y las artesanías.
  • Personal: El cual consta de dos empleados por sucursal, uno que es el Agente de ventas y otro que es el Gerente General, sin embargo hay un Director General quien debe tener acceso total a la información.
  • Proveedores: que son los productores de artesnías y el distribuidor de los tequilas.
  • Clientes: quien no se necesita realizar un control esto debido a que solo se realiza ventas sin facturas.
  • Notas: Estas son en los comprobantes de venta expedidos por la sucursal.

2.5.2 Identificar atributos de los objetos.

Una vez identificados los objetos que componen nuestra solución, el siguiente paso es identificar los atributos que nuestros objetos deben tener, los datos que se almacenan en los atributos definen de manera individual a cada objeto.


En UML al definir los atributos, es posible indicar el tipo de visibilidad que tienen hacia otros objetos dentro y fuera del mismo paquete que contiene nuestro objeto. Los diferentes tipos de visibilidad son los siguientes:



  • Publico: Cuando un atributo tiene esta tipo de visibilidad, implica que cualquier objeto del sistema puede acceder a él. En UML se indica con el símbolo +.


  • Protegido: Únicamente subclases de la clase que implementa el atributo tiene acceso a él. Se indica con el símbolo #.


  • Privado: Únicamente la clase que implementa el atributo tiene acceso a él. Se indica con el símbolo -.
    Paquete: Solo las clases que están dentro del mismo paquete puede acceder a este atributo. Se indica con el símbolo ~.

Mediante el UML es posible indicar el tipo de dato que almacenara cada atributo.


Enfocado a nuestro problema

Los atributos de los objetos que detectamos en nuestra problemática son:

  • Productos: Clave, Nombre, Descripción, Existencia, Precio y Presentación.
  • Personal: Nombre, Dirección, Cargo, Ciudad donde Radica, RFC, Teléfono, Sueldo y Sexo.
  • Proveedores: Clave, Proveedor, Dirección, Teléfono y Ciudad.
  • Notas: Fecha, Folio, Producto, Cantidad, Precio Unitario, Precio Total, Importe, Subtotal, IVA,Total y Nombre(Vendedor).

2.5.3 Identificar métodos en los objetos.

A partir de tener completo el análisis realizado en los 2 pasos anteriores, es posible identificar los métodos para nuestros objetos. Los métodos representan las acciones que un objeto determinado puede llevar a cabo, estas acciones permiten a los objetos interactuar entre si.


Los métodos tienen los mismos tipos de visibilidad que los atributos, con la excepción del tipo llamado paquete, el cual no existe para los métodos.


A los métodos identificados es posible indicar que parámetros requieren así como el tipo de los mismos, además de poder indicar si alguno de los métodos regresa algún valor de tipo específico.

Enfocado a nuestro problema
En nuestro problema detectamos los siguientes métodos a cada objeto:
  • Productos: Altas, Bajas, Modificaciones, Recuperaciones y Consultas.
  • Personal: Altas, Bajas, Modificaciones, Recuperaciones y Consultas.
  • Proveedores: Altas, Bajas, Modificaciones, Recuperaciones y Consultas.
  • Nota: Notas, Modificación de inventario.

2.6 Introducción al diseño de la solución.

Diseño es el proceso de aplicar distintas técnicas y principios con el propósito de definir un dispositivo, proceso, o sistema, con los suficientes detalles como para permitir su realización física.


El objetivo del diseñador es producir un modelo de una entidad que se construirá más adelante. El proceso por el cual se desarrolla el modelo combina: la intuición y los criterios en base a la experiencia de construir entidades similares, un conjunto de principios y/o heurísticas que guían la forma en la que se desarrolla el modelo, un conjunto de criterios que permiten discernir sobre calidad y un proceso de iteración que conduce finalmente a una representación del diseño final.



2.6.1 Representación gráfica de una clase.

El Diagrama de Clases es el diagrama principal para el análisis y diseño. Un diagrama de clases presenta las clases del sistema con sus relaciones estructurales y de herencia. La definición de clase incluye definiciones para atributos y operaciones.




Cada clase se representa en un rectángulo con tres compartimientos:







  • nombre de la clase



  • atributos de la clase



  • operaciones de la clase







Los atributos de una clase no deberían ser manipulables directamente por el resto de objetos. Por esta razón se crearon niveles de visibilidad para los elementos que son:




(-) Privado : es el más fuerte. Esta parte es totalmente invisible (excepto para clases friends en terminología C++) .
(#) Los atributos/operaciones protegidos están visibles para las clases friends y para las clases derivadas de la original.
(+) Los atributos/operaciones públicos son visibles a otras clases (cuando se trata de atributos se está transgrediendo el principio de encapsulación).



Relaciones entre clases:



Los enlaces entre objetos pueden representarse entre las respectivas clases y sus formas de relación son:


Asociación y Agregación (vista como un caso particular de asociación)
Generalización/Especialización.



Las relaciones de Agregación y Generalización forman jerarquías de clases.



Asociación:



La asociación expresa una conexión bidireccional entre objetos. Una asociación es una abstracción de la relación existente en los enlaces entre los objetos. Puede determinarse por la especificación de multiplicidad (mínima...máxima)





  • Uno y sólo uno



  • 0..1 Cero o uno



  • M..N Desde M hasta N (enteros naturales)



  • * Cero o muchos



  • 0..* Cero o muchos



  • 1..* Uno o muchos (al menos uno)

Agregación:



La agregación representa una relación parte_de entre objetos. En UML se proporciona una escasa caracterización de la agregación. Esta relación puede ser caracterizada con precisión determinando las relaciones de comportamiento y estructura que existen entre el objeto agregado y cada uno de sus objetos componentes.



Una agregación se podría caracterizar según:Puede el objeto parte comunicarse directamente con objetos externos al objeto agregado? No => inclusiva Si => no inclusiva Puede cambiar La composición del objeto agregado? Si => dinámica No => estática



Diagrama de Clases y Diagramas de Objetos pertenecen a dos vistas complementarias del modelo. Un Diagrama de Clases muestra la abstracción de una parte del dominio. Un Diagrama de Objetos representa una situación concreta del dominio. Las clases abstractas no son instanciadas.



Generalización:



Permite gestionar la complejidad mediante un ordenamiento taxonómico de clases, se obtiene usando los mecanismos de abstracción de Generalización y/o Especialización. La Generalización consiste en factorizar las propiedades comunes de un conjunto de clases en una clase más general. Los nombres usados: clase padre - clase hija. Otros nombres: superclase - subclase, clase base - clase derivada. Las subclases heredan propiedades de sus clases padre, es decir, atributos y operaciones (y asociaciones) de la clase padre están disponibles en sus clases hijas. La Generalización y Especialización son equivalentes en cuanto al resultado: la jerarquía y herencia establecidas. Generalización y Especialización no son operaciones reflexivas ni simétricas pero sí transitivas. La especialización es una técnica muy eficaz para la extensión y reutilización.



La noción de clase está próxima a la de conjunto. Dada una clase, podemos ver el conjunto relativo a las instancias que posee o bien relativo a las propiedades de la clase. Generalización y especialización expresan relaciones de inclusión entre conjuntos.





Enfocado a nuestro problema.

Por ejemplo en nuestro caso, tenemos identificadas las clases de Personal, Nota, Productos y Proveedores, pero de la clase Nota se desprenden dos subclases que son Tarjeta de crédito y Efectivo. Por lo que esta están agregadas con el diagrama de clase Nota, mientras que esta última está relacionada con el diagrama de clase Personal y con el diagrama de clase Productos, ambas asociasiones son del tipo uno a muchos. El diagrama de clase Productos está ligado con el de Proveedores, tambien con una asociación uno a muchos.