Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Unidad 2
Tcnicas Bsicas de Modelado de Objetos
2.1.- definicin de clases, atributos, mtodos y objetos 2.2.- El modelo como resultado de la abstraccin 2.3.- El UML como herramienta de modelado de objetos 2.4.- Planteamiento del problema 2.5.- Anlisis. 2.6.- Introduccin al diseo de la solucin
3
Antes de presentar las clases, debo contar algo sobre las reglas de alcance de Python. Las definiciones de clases realizan truquitos con los espacios nominales y se necesita saber cmo funcionan los alcances y espacios nominales para comprender plenamente lo que ocurre. Incidentalmente, el conocimiento de este tema es til para cualquier programador en Python avanzado. Empecemos con unas definiciones. Un espacio nominal es una correspondencia entre nombres y objetos. La mayora de los espacios de nombres se implementan en la actualidad como diccionarios, pero eso no se nota en modo alguno (salvo por el rendimiento) y puede cambiar en el futuro. Ejemplos de espacios nominales son: El conjunto de nombres internos (funciones como abs() y las excepciones internas). Los nombres globales de un mdulo. Los nombres locales dentro de una llamada a funcin.
En cierto sentido, el conjunto de atributos de un objeto tambin forma un espacio nominal. Lo que hay que tener claro de los espacios nominales es que no existe absolutamente ninguna relacin entre los nombres de diferentes espacios. Por ejemplo, dos mdulos pueden definir una funcin ``maximizar'' sin posibilidad de confusin; los usuarios de los mdulos deben preceder el nombre con el nombre del mdulo. Por cierto, utilizo la palabra atributo para referirme a cualquier nombre que venga detrs de un punto; por ejemplo, en la expresin z.real, real es un atributo del objeto z. Hablando estrictamente, las referencias a nombres en un mdulo son referencias a atributos. En la expresin nombremod.nombrefunc, nombremod es un objeto mdulo y nombrefunc es atributo suyo. En este caso, resulta que existe una correspondencia directa entre los atributos del mdulo y los nombres globales definidos en el mdulo: comparten el mismo espacio 9.1 nominal ! Los atributos pueden ser de slo lectura o de lectura/escritura. En este caso, es posible asignar valores a los atributos. Los atributos de los mdulos son de lectura/escritura: Se puede escribir "nombremod.respuesta = 42". Los atributos de lectura/escritura se pueden borrar con la sentencia del, por ejemplo: "del nombremod.respuesta". Los espacios nominales se crean en diferentes momentos y tienen tiempos de vida diferentes. El espacio nominal que contiene los nombres internos se crea al arrancar el intrprete de Python y nunca se borra. El espacio nominal global de un mdulo se crea al leer la definicin del mdulo. Normalmente, los espacios nominales de los mdulos tambin duran hasta que se sale del intrprete. Las sentencias ejecutadas por el nivel superior de llamadas, ledas desde un guion o interactivamente, se consideran parte de un mdulo denominado __main__, as que tienen su propio espacio nominal (los nombres internos tambin residen en un mdulo, llamado __builtin__). El espacio nominal local de una funcin se crea cuando se llama a la funcin y se borra al salir de la funcin, por una sentencia "return"o si salta una excepcin que la funcin no captura (en realidad, lo ms parecido a lo que ocurre es el olvido). Por supuesto, las llamadas recursivas generan cada una su propio espacio nominal. Un mbito es una regin textual de un programa Python en que el espacio nominal es directamente accesible. ``Directamente accesible'' significa en este contexto una referencia sin calificar (sin puntos) que intenta encontrar un nombre dentro de un espacio nominal. Aunque los mbitos se determinan estticamente, se utilizan dinmicamente. En cualquier punto de la ejecucin, existen exactamente tres mbitos anidados (es decir, hay tres espacios nominales accesibles directamente): el mbito interior, el primero en que se busca el nombre, que contiene los nombres locales, el mbito medio, siguiente en la bsqueda de nombres, que contiene los nombres globales del mdulo, y el mbito externo, el ltimo en la bsqueda, que contiene los nombres internos. Normalmente, el mbito local hace referencia a los nombres locales de la funcin en curso (textualmente). Fuera de las funciones, el mbito local hace referencia al mismo espacio nominal que el mbito global: el espacio nominal del mdulo. Las definiciones de clases colocan otro espacio nominal en el mbito local. Es importante darse cuenta de que los mbitos se determinan textualmente: El mbito global de una funcin definida en un mdulo es el espacio nominal de este mdulo, sin importar desde dnde o con qu alias se haya llamado a la funcin. Por otra parte, la bsqueda real de nombres se lleva a cabo dinmicamente, en tiempo de ejecucin. Sin embargo, la definicin del
Realizado por: Ing. Jorge Eloy Toledo Coronel
4
lenguaje tiende a la resolucin esttica de los nombres, as que no te fes de la resolucin dinmica de los nombres! De hecho ya se determinan estticamente las variables locales. Un asunto especial de Python es que las asignaciones siempre van al mbito ms interno. Las asignaciones no copian datos, simplemente enlazan nombres a objetos. Lo mismo vale para los borrados: la sentencia " del x" elimina el enlace de x del espacio nominal al que hace referencia el mbito local. De hecho, todas las operaciones que introducen nombres nuevos utilizan el mbito local. Particularmente, las sentencias import y las definiciones de funciones asocian el nombre del mdulo o funcin al mbito local. Se puede utilizar la sentencia global para indicar que ciertas variables residen en el mbito global.
Objetos clase
Los objetos de clase soportan dos tipos de operaciones: referencia a atributos e instanciacin. Las referencias a atributos utilizan la sintaxis estndar que se utiliza para todas las referencias a atributos en Python: obj.nombre. Los nombres de atributos vlidos son todos los nombres
5
que estaban en el espacio nominal de la clase cuando fue creada la clase. Por lo tanto, si la definicin de la clase tiene este aspecto: class MiClase: "Simple clase de ejemplo" i = 12345 def f(x): return 'hola, mundo' MiClase.i y MiClase.f son referencias a atributos vlidas, que devuelven un entero y un objeto mtodo, respectivamente. Tambin se puede asignar valores a los atributos de una clase; puedes cambiar el valor de MiClase.i con una asignacin. __doc__ es tambin un atributo vlido, que devuelve la cadena de documentacin que corresponde a la clase: "Simple clase de ejemplo". La instanciacin de clases utiliza notacin de funcin. Basta con imaginar que el objeto clase es una funcin sin parmetros que devuelve una instancia nueva de la clase. Por ejemplo, siguiendo con el ejemplo anterior: x = MiClase() crea una nueva instancia de la clase y la asigna a la variable local x. La operacin de instanciacin (``la llamada'' a un objeto clase) genera un objeto vaco. Muchas clases prefieren generar los objetos en un estado inicial conocido. Por ello, una clase puede definir un mtodo especial denominado __init__(), as: def __init__(self): self.vaciar() Cuando una clase define un mtodo __init__(), la instanciacin de clases llama automticamente a __init__() para la instancia de clase recin creada. As que, en el ejemplo de la Bolsa, se puede obtener una instancia de clase inicializada nueva mediante: x = Bolsa() Por supuesto, el mtodo __init__() podra tener argumentos que le aadiran flexibilidad. En tal caso, los argumentos proporcionados al operador de instanciacin de clase se pasan a __init__(). Por ejemplo, >>> class Complejo: ... def __init__(self, parteReal, parteImaginaria): ... self.r = parteReal ... self.i = parteImaginaria ... >>> x = Complejo(3.0,-4.5) >>> x.r, x.i (3.0, -4.5)
Objetos instancia
Qu se puede hacer con los objetos instancia? Las nicas operaciones que entienden son las referencias a atributos. Hay dos tipos de nombres de atributo vlidos. A los primeros los voy a llamar atributos de datos. Corresponden a las ``variables de instancia'' de Smalltalk o a los ``miembros dato'' de C++. No es necesario declarar los atributos de datos. Como las variables locales, aparecen por arte de magia la primera vez que se les asigna un valor. Por ejemplo, si x es una instancia de la clase MiClase creada anteriormente, el cdigo siguiente mostrar el valor 16 sin dejar rastro: x.contador = 1 while x.contador < 10: x.contador = x.contador * 2 print x.contador del x.contador El segundo tipo de referencia a atributo que entienden los objetos instancia son los Mtodos. Un mtodo es una funcin que ``pertenece a'' un objeto. En Python, el trmino mtodo no se limita a las instancias de una clase, ya que otros tipos de objeto pueden tener mtodos tambin. Por ejemplo, los objetos de tipo lista tienen mtodos llamados append,
Realizado por: Ing. Jorge Eloy Toledo Coronel
6
insert, remove, sort, etc. Sin embargo, vamos a utilizar ahora el trmino exclusivamente para referirnos a los mtodos de objetos instancia de una clase, salvo que se indique lo contrario. Los nombres vlidos de mtodos de un objeto instancia dependen de su clase. Por definicin, todos los atributos de una clase que son objetos funcin (definidos por el usuario) definen los mtodos correspondientes de sus instancias. As que, en nuestro ejemplo, x.f es una referencia a mtodo correcta, ya que MiClase.f es una funcin, pero x.i no lo es, ya que MiClase.i no es una funcin. Pero x.f no es lo mismo que MiClase.f - es un objeto mtodo, no un objeto funcin.
Objetos mtodo
Normalmente, se llama a un mtodo de manera inmediata, por ejemplo : x.f() En nuestro ejemplo, esto devuelve la cadena 'hola, mundo'. Sin embargo, no es necesario llamar a un mtodo inmediatamente: x.f es un objeto mtodo y se puede almacenar y recuperar ms tarde, por ejemplo: xf = x.f while 1: print xf() mostrar "hola, mundo" hasta que las ranas cren pelo. Qu ocurre exactamente cuando se llama a un mtodo? Habrs observado que x.f() fue invocado sin argumento, aunque la definicin del mtodo f especificaba un argumento. Qu le ha pasado al argumento? Desde luego, Python hace saltar una excepcin cuando se llama a una funcin que necesita un argumento sin especificar ninguno (aunque no se utilice)... En realidad, te puedes imaginar la respuesta: Lo que tienen de especial los mtodos es que el objeto que los llama se pasa como primer argumento de la funcin. En nuestro ejemplo, la llamada x.f() es totalmente equivalente a MiClase.f(x). En general, llamar a un mtodo con una lista de argumentos es equivalente a llamar a la funcin correspondiente con la lista de argumentos resultante de insertar el objeto del mtodo al principio de la lista de argumentos original. Si todava no entiendes cmo funcionan los mtodos, igual te aclara las cosas un vistazo a la implementacin. Cuando se hace referencia a un atributo de una instancia que no es un atributo de datos, se busca en su clase. Si el nombre denota un atributo de clase vlido que resulta ser un objeto funcin, se crea un objeto mtodo empaquetando juntos (punteros hacia) el objeto instancia y el objeto funcin recin encontrado en un objeto abstracto: el objeto mtodo. Cuando se llama al objeto mtodo con una lista de argumentos, se desempaqueta de nuevo, se construye una nueva lista de argumentos a partir del objeto instancia y la lista de argumentos original y se llama al objeto funcin con la nueva lista de argumentos.
Variables privadas
Se pueden utilizar, de manera limitada, identificadores privados de la clase. Cualquier identificador de la forma __fiambre (al menos dos guiones bajos iniciales, no ms de un guion bajo final) se reemplaza textualmente ahora con _nombreClase__fiambre, donde nombreClase es la clase en curso, eliminando los guiones bajos iniciales. Esta reescritura se realiza sin tener en cuenta la posicin sintctica del identificador, por lo que se puede utilizar para definir, de manera privada, variables de clase e instancia, mtodos y variables globales. Tambin sirve para almacenar variables de instancia privadas de esta clase en instancias de otras clases. Puede que se recorten los nombres cuando el nombre reescrito tendra ms de 255 caracteres. Fuera de las clases o cuando el nombre de la clase consta slo de guiones bajos, no se reescriben los nombres. La reescritura de nombres pretende dar a las clases un modo sencillo de definir mtodos y variables de instancia ``privados'', sin tener que preocuparse por las variables de instancia definidas por las clases derivadas ni guarrear con las variables de instancia por el cdigo externo a la clase. Observa que las reglas de reescritura se han diseado sobre todo para evitar accidentes; an es posible, con el suficiente empeo, leer o modificar una variable considerada privada. Esto puede ser til, por ejemplo, para el depurador, por lo que no se ha cerrado esta puerta falsa. Hay un pequeo fallo: la derivacin de una clase con el mismo nombre que su clase base hace posible el uso de las variables privadas de la clase base.
Realizado por: Ing. Jorge Eloy Toledo Coronel
7
Observa que el cdigo pasado a exec, eval() o evalfile() no considera el nombre de la clase llamante la clase actual. Es similar al efecto de la sentencia global, cuyo efecto est, de igual manera, restringido al cdigo de un fichero. Se aplica la misma restriccin a getattr(), setattr(), delattr() y tambin cuando se hace referencia a __dict__ directamente. He aqu un ejemplo de una clase que implementa sus propios mtodos __getattr__ y __setattr__ y almacena todos los atributos en una variable privada de manera que funciona adecuadamente en todas las versiones de Python, incluidas las anteriores a agregar esta caracterstica: class atributosVirtuales: __vdic = None __vdic_nombre = locals().keys()[0] def __init__(self): self.__dict__[self.__vdic_nombre] = {} def __getattr__(self, nombre): return self.__vdic[nombre] def __setattr__(self, nombre, valor): self.__vdic[nombre] = valor
Figura 8.1.- Modelo procedimental. donde se observa que los datos y el cdigo se manejan como partes separadas. El programa ( cdigo ) es alimentado con los datos para que produzca resultados. Por otra parte, el modelo orientado a objetos puede representarse como en la figura 8.2.
Figura 8.2.- Modelo de la Programacin Orientada a Objetos. donde DATOS y CODIGO se han unido para formar un OBJETO, el cual va a producir ciertos RESULTADOS, de acuerdo al MENSAJE que se le enve. Esto es, un objeto de ciertas caractersticas va a comportarse de acuerdo a su clase al recibir un mensaje especfico. Como se logra el ENCAPSULAMIENTO en el lenguaje C++ ? Podemos pensar que, as como se requieren tipos para definir las variables en un enfoque procedimental, se requieren "tipos" o "moldes" para crear los objetos. En el lenguaje C++ esos moldes se crean por medio de las palabras reservadas : class, struct y union . La Geometra representa un campo idneo para ejemplificar el manejo de objetos. Las definiciones para cada una de las figuras se hacen a travs de enunciados que incluyen la expresin: " .. es el lugar geomtrico de todos los puntos que ...". Como puede verse, el concepto de punto es la base para la definicin de cualquier figura geomtrica. La representacin de las figuras geomtricas, en la pantalla de un monitor, se hace por medio de los pixeles, que son los elementos bsicos ( puntos iluminados ) utilizados para representar los grficos en la pantalla. Con base a estos conceptos, en la siguiente seccin vamos a crear una clase base llamada punto. Los objetos de tipo punto podrn situarse en cualquier lugar de la pantalla utilizando un par de coordenadas ( x,y ). dentro de la programacin c# que tien como extensin cs que ya es para la programacin de sisteas .net se tiene el siguiente modelo:
programa en c#l
compilador
lenguaje msil
basura
donde el el lenguaje msil es un lenguaje a nivel maquina pero de alto nivel y la basura pos son los objetos no relacionados.
Realizado por: Ing. Jorge Eloy Toledo Coronel
Qu es UML?
UML = Unified Modeling Language Un lenguaje de propsito general para el modelado orientado a objetos. Impulsado por el Object Management Group (OMG, www.omg.org) Documento OMG Unified Modeling Language Specification UML combina notaciones provenientes desde: Modelado Orientado a Objetos Modelado de Datos Modelado de Componentes Modelado de Flujos de Trabajo (Workflows)
Historia de UML
Comenz como el Mtodo Unificado, con la participacin de Grady Booch y Jim Rumbaugh. Se present en el OOPSLA95 El mismo ao se uni Ivar Jacobson. Los Tres Amigos son socios en la compaa Rational Software. Herramienta CASE Rational Rose
2005? 2003 2000 1999 1998 Nov 97 UML 1.5 UML 1.4 UML 1.3 UML 1.2
UML aprobado por el OMG Revisiones menores
10
MCI Systemhouse Microsoft ObjecTime Oracle Corp. Platinium Technology Sterling Software Taskon Texas Instruments Unisys
Inconvenientes en UML
Definicin del proceso de desarrollo usando UML. UML no es una metodologa No cubre todas las necesidades de especificacin de un proyecto software. Por ejemplo, no define los documentos textuales
Ejemplos aislados
11
Perspectivas de UML
UML es el lenguaje de modelado orientado a objetos estndar predominante ahora y en los prximos aos Razones: Participacin de metodlogos influyentes Participacin de importantes empresas Estndar del OMG Evidencias: Herramientas que proveen la notacin UML Edicin de libros (ms de 300 en www.amazon.com) Congresos, cursos, camisetas, etc.
Use Case Use Case Diagramas Diagrams Diagrams de Secuencia Scenario Scenario Diagramas Diagrams Diagrams de Colaboraci Scenario Scenario Diagramas Diagrams Diagrams de Estados
State State Diagramas Diagrams Diagrams de Objetos State State Diagramas Diagrams Diagrams de Component
Modelos
Diagramas de Actividad
de Distribuci
12
Ejemplo:
Retirar dinero
Cliente
Consultar Extracto
Realizar transferencia
Resumen
UML define una notacin que se expresa como diagramas sirven para representar modelos/subsistemas o partes de ellos El 80 por ciento de la mayora de los problemas pueden modelarse usando alrededor del 20 por ciento de UML -- Grady Booch
En cualquier caso, podemos agrupar ms formalmente las tareas que constituyen el anlisis en una serie de etapas que se suceden de forma iterativa hasta validar el proceso completo: Conceptualizacin Consiste en obtener una visin de muy alto nivel del sistema, identificando sus elementos bsicos y las relaciones de stos entre s y con el entorno.
13
Anlisis funcional Describe las acciones o transformaciones que tienen lugar en el sistema. Dichas acciones o transformaciones se especifican en forma de procesos que reciben una entradas y producen unas salidas. Anlisis de condiciones (o constricciones) Debe reflejar todas aquellas limitaciones impuestas al sistema que restringen el margen de las soluciones posibles. Estas se derivan a veces de los propios objetivos del sistema: o Operativas, como son las restricciones fsicas, ambientales, de mantenimiento, de personal, de seguridad, etc. o De calidad, como fiabilidad, mantenibilidad, seguridad, convivencialidad, generalidad, etc. Sin embargo, en otras ocasiones las constricciones vienen impuestas por limitaciones en los diferentes recursos utilizables: o Econmicos, reflejados en un presupuesto. o Temporales, que suponen unos plazos a cumplir. o Humanos. o Metodolgicos, que conllevan la utilizacin de tcnicas determinadas. o Materiales, como espacio, herramientas disponibles, etc. Construccin de modelos Una de las formas ms habituales y convenientes de analizar un sistema consiste en construir un prototipo (un modelo en definitiva) del mismo. Validacin del anlisis A fin de comprobar que el anlisis efectuado es correcto y evitar en su caso la posible propagacin de errores a la fase de diseo, es imprescindible proceder a la validacin del mismo. Para ello hay que comprobar los extremos siguientes: o El anlisis debe ser consistente y completo. o Si el anlisis se plantea como un paso previo para realizar un diseo, habr que comprobar adems que los objetivos propuestos son correctos y realizables. Una ventaja fundamental que presenta la construccin de prototipos desde el punto de vista de la validacin radica e n que estos modelos, una vez construidos, pueden ser evaluados directamente por los usuarios o expertos en el dominio del sistema para validar sobre ellos el anlisis. . 2.4..2.- Identificar funciones del sistema 2.5.- Anlisis
14
Entidades Externas que producen o consumen informacin a usar por un sistema computacional. Por ejemplo: otros sistemas, dispositivos, personas. Cosas que son parte del dominio de informacin del problema. Por ejemplo: informes, presentaciones, cartas, seales. Ocurrencias o Sucesos que ocurren dentro del contexto de una operacin del sistema. Por ejemplo: una transferencia de propiedad o la terminacin de una serie de movimientos en un robot. Papeles o Roles desempeados por personas que interactan con el sistema. Por ejemplo: director, ingeniero, vendedor. Unidades Organizacionales que son relevantes en una aplicacin. Por ejemplo: divisin, grupo, equipo. Lugares que establecen el contexto del problema y la funcin general del sistema. Por ejemplo: planta de produccin o muelle de carga. Estructuras que definen una clase de objetos o, en casos extremos, clases relacionadas de objetos. Por ejemplo: sensores, vehculos de cuatro ruedas o computadoras. La clasificacin mostrada es una de las muchas que se han propuesto en la literatura. Tambin es importante destacar qu no son los objetos. En general, un objeto nunca debe tener un nombre procedimental imperativo. Por ejemplo, si los desarrolladores de un software para un sistema grfico mdico definieron un objeto con el nombre inversin de imagen, estaran cometiendo un sutil error. La imagen obtenida por el software pudiera ser, en efecto, un objeto (es un elemento que forma parte del dominio de informacin), pero la inversin de la imagen es una operacin que se aplica a dicho objeto. Inversin debe definirse como una operacin del objeto imagen, pero no como un objeto separado que signifique inversin de imagen. Como establecen algunos autores, el objetivo de la orientacin a objetos es encapsular, pero manteniendo separados los datos y las operaciones sobre estos datos. Para ilustrar cmo pueden definirse los objetos se presenta la narrativa de procesamiento para el sistema Hogar Seguro: El software Hogar Seguro le permite al propietario de la casa configurar el sistema de seguridad una vez que este se instala, controla todos los sensores conectados al sistema de seguridad, e interacta con el propietario a travs de un teclado numrico y teclas de funcin contenidas en el panel de control de Hogar Seguro. Durante la instalacin, el panel de control de Hogar Seguro se usa para programar y configurar el sistema. A cada sensor se le asigna un nmero y tipo, se programa una contrasea maestra para activar y desactivar el sistema, y se introducen nmeros de telfono a marcar cuando un sensor detecte un suceso. Cuando se reconoce un suceso de sensor, el software invoca una alarma audible asociada al sistema. Despus de un tiempo de espera especificado por el propietario durante las actividades de configuracin del sistema, el software marca un nmero de telfono de un servicio de control, proporciona informacin acerca de la localizacin, e informa de la naturaleza del suceso detectado. El nmero ser remarcado cada 20 segundos hasta obtener una conexin telefnica. Toda la interaccin con Hogar Seguro est gestionada por un subsistema de interaccin con el usuario que toma la entrada a partir del teclado numrico y teclas de funcin, y muestra mensajes y el estado del sistema en la pantalla LCD.
15
La interaccin con el teclado toma la siguiente formaExtrayendo los nombres pueden proponerse varios objetos potenciales:
La lista anterior debe ser continuada hasta que se hayan considerado todos los nombres de la descripcin del proceso. Observe que se ha llamado a cada entrada en la lista un objeto potencial. Se debe considerar cada uno de ellos antes de tomar una decisin final. Coud y Yourdon sugieren seis caractersticas de seleccin a usar cada vez que un analista considera si incluye o no un objeto potencial en el modelo de anlisis: Informacin retenida el objeto potencial ser de utilidad durante el anlisis solamente si la informacin acerca de l debe recordarse para que el sistema funciones. Servicios necesarios el objeto potencial debe poseer un conjunto de operaciones identificables que pueden cambiar de alguna manera el valor de sus atributos. Atributos mltiples durante el anlisis de requisitos, se debe centrar la atencin en la informacin principal (un objeto con un solo atributo puede, en efecto, ser til durante el diseo, pero seguramente ser mejor presentado como un atributo de otro objeto durante la actividad de anlisis). Atributos comunes puede definirse un conjunto de atributos para el objeto potencial, los cuales son aplicables a todas las ocurrencias del objeto. Operaciones comunes puede definirse un conjunto de operaciones para el objeto potencial, las cuales son aplicables a todas las ocurrencias del objeto. Requisitos esenciales entidades externas que aparecen en el espacio del problema y producen o consumen informacin esencial para la produccin de cualquier solucin para el sistema, sern casi siempre definidas como objetos en el modelo de requisitos. Para ser considerado un objeto vlido a incluir en el modelo de requisitos, un objeto potencial debe satisfacer todas (o casi todas) las caractersticas anteriores. La decisin de incluir objetos potenciales en el modelo de anlisis es algo subjetivo, y una evaluacin posterior puede llegar a descartar un objeto o reincluirlo. Sin embargo, el primer paso del Anlisis Orientado a Objetos debe ser la definicin de objetos, y la consiguiente toma de decisiones (incluso subjetivas). Teniendo esto en cuenta, se aplicarn las caractersticas selectivas a la lista de objetos potenciales de Hogar Seguro:
16
Debe tenerse en cuenta que: (1) la lista anterior no incluye todo, hay que aadir objetos adicionales para completar el modelo; (2) algunos de los objetos potenciales rechazados sern atributos de los objetos aceptados (por ejemplo, nmero y tipo son atributos de sensor, y contrasea maestra y nmero de telfono pueden convertirse en atributos de sistema); y (3) diferentes descripciones del problema pueden provocar la toma de diferentes decisiones de aceptacin o rechazo (por ejemplo, si cada propietario tiene su propia contrasea o fue identificado por impresiones de voz, el objeto Propietario cumplira las caractersticas a y b y habra sido aceptado).
17
Informacin de identificacin = ID del sistema + verificacin de nmero de telfono + estado del sistema.
Alumno DNI : char[10] nmero_exp : int nombre : char[50] alta() poner_nota(asignatura : char *, ao : int, nota : float) matricular(cursos : asignatura, ao : int) listar_expediente()
Diagrama de Clases
18
Un Diagrama de Clases de Diseo muestra la especificacin para las clases software de una aplicacin. Incluye la siguiente informacin: Clases, asociaciones y atributos. Interfaces, con sus operaciones y constantes. Mtodos. Navegabilidad. Dependencias. A diferencia del Modelo Conceptual, un Diagrama de Clases de Diseo muestra definiciones de entidades software ms que conceptos del mundo real. En la Figura 39 se muestra un ejemplo de Diagrama de Clases de Diseo sencillo.
19
Ejemplo de Diagrama de Clases 2.6.2.- Diagrama de iteracin entre la aplicacin y una clase.
Los Diagramas de Interaccin muestran el intercambio de mensajes entre instancias del modelo de clases para cumplir las post-condiciones establecidas en un contrato Hay dos clases de Diagramas de Interaccin: 1. Diagramas de Colaboracin. 2. Diagramas de Secuencia. La notacin en UML para ambos es la definida en la pgina 11. De entre ambos tipos, los Diagramas de Colaboracin tienen una mayor expresividad y mayor economa espacial (una interaccin compleja puede ser muy larga en un Diagrama de Secuencia), sin embargo en ellos la secuencia de interaccin entre objetos es ms difcil de seguir que en un Diagrama de Secuencia. Ambos tipos de diagramas expresan la misma informacin, por lo que se puede usar cualquiera de los dos para expresar la interaccin entre los objetos del sistema. La creacin de los Diagramas de Interaccin de un sistema es una de las actividades ms importantes en el desarrollo orientado a objetos, pues al construirlos se toman unas decisiones clave acerca del funcionamiento del futuro sistema. La creacin de estos diagramas, por tanto, debera ocupar un porcentaje significativo en el esfuerzo dedicado al proyecto entero.
20
- Iniciar una accin en otros objetos. - Controlar y coordinar actividades en otros objetos. Por ejemplo, puedo decir que un Recibo es responsable de calcular el total (tipo hacer), o que una Transaccin es responsable de saber su fecha (tipo conocer). Las responsabilidades de tipo conocer se pueden inferir normalmente del Modelo Conceptual. Una responsabilidad no es lo mismo que un mtodo, pero los mtodos se implementan para satisfacer responsabilidades .
:Socio
4: registrar prstamo
:Prstamo
21
2. Diagramas de Secuencia
: Encargado
:WInPrstamos
:Socio
:Video
:Prstamo
alta
baja
sin prstamos
nmero_prstamos = 0
alta() baja() prestar(cdigo_libro : int, fecha : date) devolver(cdigo_libro : int, fecha : date)
con prstamos prestar
nmero_prstamos > 0
22