390 likes | 612 Vues
UML Lenguaje Unificado de Construcción de Modelos. Programación Orientada a Objetos Análisis y Diseño Orientado a Objetos Notación: Usando UML. Semana de Sistemas e Informática 2004 Ing. Jorge Maranto Iglecias. Programación Orientada a Objetos. Origenes Qué es la POO Ventajas de la POO
E N D
UML Lenguaje Unificado de Construcción de Modelos • Programación Orientada a Objetos • Análisis y Diseño Orientado a Objetos • Notación: Usando UML Semana de Sistemas e Informática 2004 Ing. Jorge Maranto Iglecias
Programación Orientada a Objetos • Origenes • Qué es la POO • Ventajas de la POO • Necesidad de documentación estándar para la POO
UML: Lenguaje Unificado de Construcción de Modelos • Notación para el análisis y diseño • Booch, OMT, OOSE • Origen de UML • Rational y el grupo OMG • Grady Booch, James Rumbaugh e Ivar Jacobson
UML es un lenguaje para desarrollar la especificación, visualización, construcción y documentación de los artefactos de sistemas de software, así como el modelado de negocios y otros sistemas no de software.
UML: Lenguaje Unificado de Construcción de Modelos • Enfoque de UML • Artefactos de UML • Cuatro niveles de diseño • Meta-MetaModelo • MetaModelo • Modelo • Objetos de usuario
UML: Lenguaje Unificado de Construcción de Modelos • Paquetes de UML • Diagramas de vistas de un modelo • Casos (Use case) • Diagrama de clases • Diagramas de comportamiento (diagramas de estado, de actividad, de secuencia y de colaboraciones)
Los paquetes se definen en los siguientes términos: • Sintaxis abstracta • Reglas formales • Semántica
// Fig. 7.41: elevador.h // Definición de la clase Elevador. #ifndef ELEVADOR_H #define ELEVADOR_H #include "botonElevador.h" #include "puerta.h" #include "campana.h" class Piso; // declaración forward class Persona; // declaración forward class Elevador { public: Elevador( Piso &, Piso & ); // constructor ~Elevador(); // destructor void llamaElevador( int ); // solicitud de servicio al piso void preparaParaPartir( bool ); // prepara para partir void tiempoProceso( int ); // indica el tiempo actual al elevador void pasajeroEntra( Persona * const ); // aborda un pasajero void pasajeroSale(); // sale un pasaero // elevador.h // Definición de la clase Elevador. #ifndef ELEVADOR_H #define ELEVADOR_H #include "botonElevador.h" #include "puerta.h" #include "campana.h" class Piso; // declaración forward class Persona; // declaración forward class Elevador { public: Elevador( Piso &, Piso & ); // constructor ~Elevador(); // destructor void llamaElevador( int ); // solicitud de servicio al piso void preparaParaPartir( bool ); // prepara para partir void tiempoProceso( int ); // indica el tiempo actual al elevador void pasajeroEntra( Persona * const ); // aborda un pasajero void pasajeroSale(); // sale un pasaero
private: // funciones de utilidad void procesaPosibleLlegada(); void procesaPosiblePartida(); void llegaAlPiso( Piso & ); void mover(); // constantes estáticas que representan el tiempo requerido para viajar // entre los pisos y las direcciones del elevador static const int TIEMPO_VIAJE_ELEVADOR; static const int ARRIBA; static const int ABAJO; // datos miembros int tiempoActualRelojDelEdificio; // tiempo actual bool enMovimiento; // estado del elevador int direccion; // dirección actual int pisoActual; // ubicación actual int tiempoLlegada; // tiempo de llegada al piso bool piso1NecesitaServicio; // bandera de servicio del piso1 bool piso2NecesitaServicio; // bandera de servicio del piso1 Piso &refPiso1; // referencia al piso 1 Piso &refPiso2; // referencia al piso 2 Persona *ptrPasajero; Puerta puerta; // objeto puerta Campana campana; // objeto campana }; // fin de la clase Elevador #endif // ELEVADOR_H
// elevador.cpp // Definición de las funciones miembro para la clase Elevador. #include <iostream> using std::cout; using std::endl; #include "elevador.h" // definición de la clase Elevador #include "persona.h" // definición de la clase Persona #include "piso.h" // definición de la clase Piso // constantes que representan el tiempo que se requiere para viajar // entre pisos y direcciones del elevador const int Elevador::TIEMPO_VIAJE_ELEVADOR = 5; const int Elevador::ARRIBA = 0; const int Elevador::ABAJO = 1; // constructor Elevador::Elevador( Piso &primerPiso, Piso &segundoPiso ) : botonElevador( *this ), tiempoActualRelojDelEdificio( 0 ), enMovimiento( false ), direccion( ARRIBA ), pisoActual( Piso::PISO1 ), tiempoLlegada( 0 ), piso1NecesitaServicio( false ), piso2NecesitaServicio( false ), refPiso1( primerPiso ), refPiso2( segundoPiso ), ptrPasajero( 0 )
{ cout << "elevador construido" << endl; } // fin del constructor Elevador // destructor Elevador::~Elevador() { delete ptrPasajero; cout << "elevador destruido" << endl; } // fin del destructor ~Elevador // da tiempo al elevador void Elevador::tiempoProceso( int tiempo ) { tiempoActualRelojDelEdificio = tiempo; if ( enMovimiento ) // elevador en movimiento procesaPosibleLlegada(); else // elevador detenido procesaPosiblePartida(); if ( !enMovimiento ) cout << "el elevador descansa en el piso " << pisoActual << endl; } // fin de la función tiempoProceso
Recursos UML en internet • www.omg.org/uml • www.rational.com/uml • www.therationaledge.com • www.platinum.com/corp/uml/uml.htm • www.methods-tools.com/cgi-bin/DiscussionUML.cgi • www.celignet.com/uml • www.embarcadero.com/downloads • www.jguru.com/faq