Sie sind auf Seite 1von 22

1

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

Realizado por: Ing. Jorge Eloy Toledo Coronel

2 2.1.- Definicin de Clases, Atributos, Mtodos y Objetos. Clases


El mecanismo de clases de Python aade clases al lenguaje con un mnimo de sintaxis y semntica nueva. Es una mezcla de los mecanismos de clase de C++ y Modula-3. Como en los mdulos, las clases de Python no ponen una barrera absoluta entre la definicin y el usuario, sino que ms bien se fan de la buena educacin del usuario para no ``invadir la definicin''. Se mantienen las caractersticas ms importantes con plena potencia. El mecanismo de herencia de clases permite mltiples clases base, una clase derivada puede redefinir cualquier mtodo de sus clases base y un mtodo puede llamar a un mtodo de una clase base con el mismo nombre. Los objetos pueden contener una cantidad arbitraria de datos privados. En terminologa C++, todos los miembros de la clase (datos incluidos) son pblicos y todas las funciones miembro son virtuales . No hay constructores ni destructores especiales. Como en Modula-3, no existen abreviaturas para hacer referencia a los miembros del objeto desde sus propios mtodos. La funcin mtodo se declara con un primer argumento explcito que representa al objeto y que se proporciona implcitamente al llamar a la funcin. Como en Smalltalk, las clases son ellas mismas objetos, aunque en un sentido ms amplio de la palabra: en Python, todos los tipos de datos son objetos. Esto proporciona la semntica para importar y renombrar. Sin embargo, como en C++ o en Modula3, los tipos internos no pueden ser la clase base para extensiones del usuario. Adems, como en C++ y al contrario de Modula-3, la mayora de operadores internos con sintaxis especial (operadores aritmticos, ndices, etc.) se pueden redefinir en las clases.

Unas palabras sobre la terminologa


A falta de una terminologa universalmente aceptada para hablar de clases, har uso ocasional de trminos de Smalltalk y C++ (hara uso de trminos de Modula-3, ya que la semntica orientada al objeto es ms cercana a Python que la de C++, pero no espero que muchos lectores la dominen). Tambin he notado que hay un agujero en la terminologa de los lectores orientados a objetos: La palabra ``objeto'' en Python no significa necesariamente una instancia de una clase. Como en C++ y en Modula-3, al contrario que en Smalltalk, no todos los tipos son clases: Los tipos internos, como listas y enteros no lo son, ni siquiera algunos tipos ms exticos, como los ficheros. Sin embargo, todos los tipos de Python comparten algo de semntica comn, descrita adecuadamente mediante la palabra ``objeto''. Los objetos tienen individualidad. Se pueden asociar mltiples nombres (y en diferentes mbitos) al mismo objeto, lo que se conoce como ``generar alias'' en otros lenguajes. Esto no se aprecia a primera vista en Python y no hace falta tenerlo en cuenta cuando se trata con tipos inmutables (nmeros, cadenas, tuplas...). Sin embargo los alias tienen un efecto (buscado!) en la semntica del cdigo Python que involucra los objetos mutables, como listas, diccionarios y la mayora de los tipos que representan entidades externas al programa (ficheros, ventanas...). Se suele usar en beneficio del programa, ya que los alias se comportan como punteros en algunos aspectos. Por ejemplo, pasar un objeto es poco costoso, ya que la implementacin slo pasa un puntero. Si la funcin modifica el objeto que pasa como argumento, el que llama a la funcin ver los cambios. De este modo se elimina la necesidad de tener los dos mecanismos de traspaso de argumentos de Pascal.

mbitos y espacios nominales en Python

Realizado por: Ing. Jorge Eloy Toledo Coronel

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.

Un primer vistazo a las clases


Las clases introducen una pizca de sintaxis nueva, tres tipos de objeto nuevos y algo de semntica nueva.

Sintaxis de definicin de clases


La forma ms simple de definicin de clase tiene este aspecto: class nombreClase: <sentencia-1> . . . <sentencia-N> Las definiciones de clases, como las definiciones de funciones (sentencias def) deben ejecutarse para tener efecto (es perfectamente correcto colocar una definicin de clase en una rama de una sentencia if o dentro de una funcin). En la prctica, las sentencias de dentro de una definicin de clase sern definiciones de funciones, pero se permite otro tipo de sentencias, lo que resulta til en algunos casos, ya veremos esto. Las definiciones de funciones interiores a la clase suelen tener una lista de argumentos un poco especial, dictada por las convenciones de llamada a mtodo. Esto tambin se explica ms adelante. Cuando se entra en una definicin de clase, se genera un nuevo espacio nominal, que se utiliza como mbito local; as que todas las asignaciones a variables locales caen dentro de este nuevo espacio nominal. En particular, las definiciones de funciones enlazan aqu el nombre de la nueva funcin. Cuando se abandona una definicin de clase de manera normal (se ejecuta la ltima lnea de su cdigo), se crea un objeto de clase. Es, sencillamente, un envoltorio del contenido del espacio nominal creado por la definicin de la clase. Se ver con ms detalle en la siguiente seccin. El mbito local original (el que estaba activo cuando se entr en la definicin de clase) se reinstancia y el objeto clase se enlaza con el nombre de clase dado en la cabecera de la funcin (en el ejemplo nombreClase).

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

Realizado por: Ing. Jorge Eloy Toledo Coronel

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

Las excepciones pueden ser clases


Las excepciones definidas por usuario ya no estn limitadas a objetos cadena de texto; tambin pueden identificarse mediante clases. Utilizando estos mecanismos es posible crear jerarquas ampliables de excepciones. Hay dos formas vlidas nuevas de sentencia raise: raise Clase, instancia raise instancia En la primera forma, instancia debe ser una instancia de Clase o de una clase derivada de ella. La segunda forma es un atajo de: raise instancia.__class__, instancia Una clusula except puede enumerar clases al igual que objetos cadena. Una clase de una clusula except captura una excepcin si es de la misma clase que la excepcin que ha saltado o es de una clase base de ella (al revs no; una clase derivada no captura ninguna de sus clases base). Por ejemplo, el cdigo a continuacin mostrar B, C, D, en ese orden: class B: pass class C(B): pass class D(C): pass for c in [B, C, D]: try: raise c() except D: print "D" except C: print "C" except B: print "B" Observa que si invertimos las clusulas ("except B" primero), se mostrara B, B, B, ya que la primera clusula captura todas las excepciones, por ser clase base de todas ellas. Cuando se presenta un mensaje de error para una excepcin sin capturar, se muestra el nombre de la clase, dos puntos, un espacio y, por ltimo, la instancia convertida a cadena mediante la funcin interna str().

Realizado por: Ing. Jorge Eloy Toledo Coronel

2.2.- El Modelo como resultado de la abstraccin


El modelo procedimental puede representarse como en la figura 8.1.

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

2.3.- El UML como una Herramienta de modelado de Objetos


A comienzos de 1999 se le dio forma a la primera versin de este curso de modelado OO con UML. A partir del material recolectado y preparado para la asignatura de quinto ao de facultad Laboratorio de Sistemas de Informacin. Por otra parte, en mi tesis doctoral (en animacin automtica de modelos conceptuales) haba trabajado en profundidad en aspectos de modelado orientado a objetos. En un comienzo no exista una demanda especfica pero ya en Agosto de 1999 el curso pudo estrenarse parcialmente en un seminario que dict en la Universidad Santa Mara de Valparaso-Chile. Posteriormente y hasta la fecha se han realizado 16 ediciones del curso, el cual se ofrece a travs de nuestro departamento y el Centro de Formacin de Postgrado de la UPV. A m ediados de 2000 se dio otro paso: dejar a libre disposicin va internet el material del curso. El objetivo ha sido promover y difundir el uso de tcnicas OO en el mundo hispano, facilitando la labor de preparacin de material para profesores y/o proporcionar documentacin de apoyo para los estudiantes. Hasta fines del 2003 se haban realizado ms de 20000 descargas del material del curso, lo cual confirmaba la necesidad de informacin de UML en espaol en la red. Cada edicin del curso ha dado pie a mejoras, todo ello intentando mantener el volumen de trasparencias. Se han aadido notas al pie de pgina en algunas trasparencias para apoyar la exposicin. Precisamente en esto se centra el esfuerzo actual y futuro de este material. Esperamos que el material proporcionado os sea de utilidad,

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

Realizado por: Ing. Jorge Eloy Toledo Coronel

10

Participantes en UML 1.0


Rational Software o (Grady Booch, Jim Rumbaugh y Ivar Jacobson) Digital Equipment Hewlett-Packard i-Logix (David Harel) IBM ICON Computing o (Desmond DSouza) Intellicorp and James Martin & co. (James Odell)

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

Realizado por: Ing. Jorge Eloy Toledo Coronel

11

Monopolio de conceptos, tcnicas y mtodos en torno a UML y el OMG

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.

Diagramas de UML Los diagramas expresan grficamente partes de un modelo

Use Case Use Case Diagramas Diagrams Diagrams de Secuencia Scenario Scenario Diagramas Diagrams Diagrams de Colaboraci Scenario Scenario Diagramas Diagrams Diagrams de Estados

Use Case Use Case Diagramas Diagrams Diagrams de Casos de

State State Diagramas Diagrams Diagrams de Clases

State State Diagramas Diagrams Diagrams de Objetos State State Diagramas Diagrams Diagrams de Component

Modelos

Component Component Diagrams Diagramas Diagrams

Diagramas de Actividad

de Distribuci

Realizado por: Ing. Jorge Eloy Toledo Coronel

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

2.4.- Planteamiento del Problema


Esta fase est dada por el enunciado del problema, el cual requiere una definicin clara y precisa. Es importante que se conozca lo que se desea que realice la computadora; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa

2.4.1.- Analizar el enunciado del problema


El Anlisis de Sistemas trata bsicamente de determinar los objetivos y lmites del sistema objeto de anlisis, caracterizar su estructura y funcionamiento, marcar las directrices que permitan alcanzar los objetivos propuestos y evaluar sus consecuencias. Dependiendo de los objetivos del anlisis podemos encontrarnos ante dos problemticas distintas: Anlisis de un sistema ya existente para comprender, mejorar, ajustar yo predecir su comportamiento. Anlisis como paso previo al diseo de un nuevo sistema-producto.

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.

Realizado por: Ing. Jorge Eloy Toledo Coronel

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

2.5.1.- Descubrir objetos en el dominio del problema


Si se observa alrededor en una habitacin, existen un conjunto de objetos fsicos que pueden ser fcilmente identificados, clasificados y definidos (en trminos de atributos y operaciones). Pero cuando se observa el espacio de un problema en una aplicacin de software, los objetos pueden ser ms difciles de identificar. Se puede empezar a identificar objetos examinando el planteamiento del problema o realizando un anlisis sintctico gramatical en la narrativa del sistema que se va a construir. Los objetos se determinan subrayando cada nombre o clusula nominal e introducindola en una tabla simple. Los sinnimos deben destacarse. Si se requiere del objeto que implemente una solucin, entonces ste formar parte del espacio de solucin; en caso de que el objeto se necesite solamente para describir una solucin, ste forma parte del espacio del problema. Los objetos se manifiestan de alguna de las formas siguientes:
Realizado por: Ing. Jorge Eloy Toledo Coronel

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.

Realizado por: Ing. Jorge Eloy Toledo Coronel

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:

Realizado por: Ing. Jorge Eloy Toledo Coronel

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).

2.5.2.- Identificar atributos de los objetos


Los atributos describen un objeto que ha sido seleccionado para ser incluido en el modelo de anlisis. En esencia, son los atributos los que definen al objeto, los que clarifican lo que representa el objeto en el contexto del espacio del problema. Por ejemplo, si se tratara de construir un sistema de estadsticas para jugadores profesionales de bisbol, los atributos del objeto Jugador seran muy diferentes de los atributos del mismo objeto cuando se use dentro del contexto de un sistema de pensiones para jugadores profesionales. En el primero, atributos tales como nombre, posicin, promedio de bateo, porcentaje de estancia en el campo de juego, aos jugados y partidos jugados pueden ser relevantes. En el segundo caso, algunos de estos atributos seran relevantes pero otros seran reemplazados (o potenciados) por atributos como salario medio, crdito total, opciones elegidas para el plan de pensin, direccin postal, etc. Para desarrollar un conjunto significativo de atributos para un objeto, el analista puede estudiar de nuevo la narrativa del proceso (o descripcin del mbito del alcance) para el problema y seleccionar aquellos elementos que razonablemente pertenecen al objeto. Adems, para cada objeto debe responderse el siguiente interrogante: Qu elementos (compuestos y/o simples) definen completamente al objeto en el contexto del problema actual? Para ilustrar esto, se considerar el objeto Sistema definido para Hogar Seguro. Anteriormente se indic que el propietario puede configurar el sistema de seguridad para reflejar la informacin acerca de los sensores, sobre la respuesta de la alarma, sobre la activacin / desactivacin, sobre identificacin, etc. Usando la notacin de la descripcin del contenido se podra representar estos elementos de datos compuestos de la siguiente manera: Informacin del sensor = tipo de sensor + nmero de sensor + umbral de alarma. Informacin de respuesta de la alarma = tiempo de retardo + nmero de telfono + tipo de alarma. Informacin de activacin / desactivacin = contrasea maestra + cantidad de intentos permitidos + contrasea temporal.

Realizado por: Ing. Jorge Eloy Toledo Coronel

17
Informacin de identificacin = ID del sistema + verificacin de nmero de telfono + estado del sistema.

2.5.3.- Identificar mtodos en los objetos.


Los mtodos especifican la forma en que se controlan los datos de un objeto. Los mtodos en un tipo de objeto slo hacen referencia a la estructura de datos de ese tipo de objeto. No deben tener acceso directo a las estructuras de datos de otros objetos. Para utilizar la estructura de datos de otro objeto, deben enviar un mensaje a ste. El tipo de objeto empaca juntos los tipos de datos y su comportamiento. Un objeto entonces es una cosa cuyas propiedades estn representadas por tipos de datos y su comportamiento por mtodos. Un mtodo asociado con el tipo de objeto factura podra ser aquel que calcule el total de la factura. Otro podra transmitir la factura a un cliente. Otro podra verificar de manera peridica si la factura ha sido pagada y, en caso contrario, aadir cierta tasa de inters.

2.6.- Introduccin al Diseo de la solucin 2.6.1.- Representacin grafica de una clase


El Diagrama de Clases es el diagrama principal para el anlisis y diseo del sistema Un diagrama de clases presenta las clases del sistema con sus relaciones estructurales y de herencia La definicin de clase incluye definiciones para atributos y operaciones El modelo de casos de uso debera aportar informacin para establecer las clases, objetos, atributos y operaciones

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

Realizado por: Ing. Jorge Eloy Toledo Coronel

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.

Realizado por: Ing. Jorge Eloy Toledo Coronel

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.

Creacin de Diagramas de Interaccin


Para crear los Diagramas de Colaboracin o de Secuencia se pueden seguir los siguientes consejos: Crear un diagrama separado para cada operacin del sistema en desarrollo en el ciclo de desarrollo actual. - Para cada evento del sistema, hacer un diagrama con l como mensaje inicial. Usando los apartados de responsabilidades y de post-condiciones del contrato de operacin, y la descripcin del caso de uso como punto de partida, disear un sistema de objetos que interaccionan para llevar a cabo las tareas requeridas. Si el diagrama se complica, dividirlo en dos diagramas ms pequeos. Para ello se termina la secuencia de mensajes en un mensaje determinado, y en el segundo diagrama se comienza con el mensaje que termin el primero. Debe indicarse en el primer diagrama que el resto de la interaccin se detalla en el segundo. El comportamiento dinmico del sistema que se describe en un Diagrama de Interaccin debe ser acorde con la estructura esttica del sistema que se refleja en el Diagrama de Clases de Diseo. Es aconsejable realizar un Diagrama de Clases de Diseo borrador antes de comenzar con los Diagramas de Interaccin. La capacidad de realizar una buena asignacin de responsabilidades a los distintos objetos es una habilidad clave, y se va adquiriendo segn aumenta la experiencia en el desarrollo orientado a objetos. Responsabilidad es como un contrato u obligacin de una clase o tipo. Las responsabilidades estn ligadas a las obligaciones de un objeto en cuanto a su comportamiento. Bsicamente, estas responsabilidades pueden ser de tipo Conocer o de tipo Hacer: Conocer: - Conocer datos privados encapsulados. - Conocer los objetos relacionados. - Conocer las cosas que puede calcular o derivar. Hacer: - Hacer algo l mismo.

Realizado por: Ing. Jorge Eloy Toledo Coronel

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 .

1.- Diagramas de Colaboracin.

:Socio

:Video 2: verificar situacin socio

1: prestar(video, socio) :WInPrstamos 5: entregar recibo : Encargado

3: verificar situacin video

4: registrar prstamo

:Prstamo

Realizado por: Ing. Jorge Eloy Toledo Coronel

21
2. Diagramas de Secuencia

: Encargado

:WInPrstamos

:Socio

:Video

:Prstamo

prestar(video, socio) verificar situacin socio verificar situacin video

registrar prstamo entregar recibo

2.6.3.- Diagramas de estado de una clase

alta

baja

sin prstamos

nmero_prstamos = 0

Socio nmero : int nombre : char[50] nmero_prestamos : int = 0


prestar devolver[ nmero_prstamos = 1 ]

alta() baja() prestar(cdigo_libro : int, fecha : date) devolver(cdigo_libro : int, fecha : date)
con prstamos prestar

nmero_prstamos > 0

devolver[ nmero_prstamos > 1 ]

Realizado por: Ing. Jorge Eloy Toledo Coronel

22

Realizado por: Ing. Jorge Eloy Toledo Coronel