Lenguaje C++ Segunda parte

Slides:



Advertisements
Presentaciones similares
U.M.L A/Gx. Diego Gutiérrez Application Analysis and Design.
Advertisements

Lenguaje Unificado de Modelado
Programación Orientada a Objetos y Lenguaje de Modelado Unificado
Introduccion a UML Wilson Peláez Hernández
Ingeniería de Software I
Tomado de:
Arquitectura de software dirigida por modelos (Model-Driven Architecture) Liliana Favre UNCPBA 2006.
Introducción a la Orientación a Objetos
Aplicación del paradigma orientado a objetos
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
LENGUAJE UNIFICADO DE MODELADO UML
Ingeniería del Software
Ingeniería del Software
UNIDAD 1: “ Introducción al Lenguaje Unificado de Modelado ”
Análisis y Diseño O.O. Click to add notes Preguntas del diseño :
Sistemas Distribuidos “Técnicas de Especificación Formal”
Lenguaje de Programación Java Profesor: Mauricio Martínez P. Análisis y Diseño Orientado a Objetos UML: Lenguaje de Modelamiento Unificado Toma de Requerimientos.
Unified Modeling Language (Lenguaje de Modelamiento unificado)
Fundamentos de Programación
Material Original de Microsoft para desarrolladores adaptado por Jorge Miguel PERALTA para clases de Informática Aplicada (Haga clic para adelantar/atrasar.
Introducción a la programación Orientada a objetos
* FRAUSTO JIMENEZ GABRIELA * * HERNANDEZ TORRES ANA LAURA * * MANDUJANO JUAN CARLOS * * NOVA MARIN YARELI PAULINA * * ZAVALA CORTE JOCELYN ARELI *
Ingeniería de Software
Ingeniería de Software Orientado a Objetos
Fundamentos de programación
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Poder Expresivo de UML 2.0 para especificar arquitecturas de Software
 Es un tipo de diagrama del Lenguaje Unificado de Modelado que se utiliza para modelar el hardware utilizado en las implementaciones de sistemas y.
Introducción al modelado Unificado
Universidad Central de Venezuela Facultad de Ciencias Postgrado en Ciencias de la Computación Sistemas Distribuidos Albany Márquez.
Ingeniería de software
Andrés Esteban Martínez Huta 10º2 Ciclo de Vida del Software Gloria Cecilia Ríos.
UML Carlos Becerra C. ¿Qué es orientación a objetos? Conceptos de OO  Objetos, características de los objetos, clases e instancias,
Introducción a UML DIAGRAMA DE CLASES Departamento de Informática
DEFINICIÓN DE OBJETO Un objeto es aquello que puede ser observado, estudiado y aprendido CARACTERÍSTICAS nos permiten conocerlos mediante la observación,
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Análisis y diseño de sistemas Diagrama de componentes
TEMA 9: DIAGRAMA DE CLASE EN UML
Programación Orientada a Objeto
ANÁLISIS Y DISEÑO DE SISTEMAS II
I NGENIERÍA DE S OFTWARE L ABORATORIO VI Diseño - Diagrama de clases Eduardo Saavedra A. 07/10/2009.
Clasificación de Diagramas
Introducción a UML Departamento de Informática Universidad de Rancagua
Conceptos Fundamentales
Ingeniería de Requisitos
DIAGRAMA DE SECUENCIA Y ACTIVIDADES.
UML.
Programación IV Desarrollo orientado a Objetos con UML CLASE # 2 Tec. Christian Alexander Martínez Arteaga.
DIAGRAMA DE CLASES.
UML.
(Lenguaje Unificado de Modelado)
 UML es un Lenguaje Unificado de Modelado es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado.
Prof. Joel Moreno Molina
Unified Modeling Language (Lenguaje de Modelamiento unificado)
M.C. Pedro Bello López 1 IMPLEMENTACIÓN. M.C. Pedro Bello López2.
UNIDAD 2: “Características del Modelado UML” CONTENDIDO Elaborado por: Ingeniero Harold Cabrera Meza Actualizado por: Ingeniero Nilson Albeiro Ferreira.
Técnica: es un procedimiento o conjunto de procedimientos, (reglas normas o protocolos), que tienen como objetivo obtener un resultado determinado, ya.
La Programación Orientado a Objetos
Introducción AOO. Contenido - Introducción - Repaso de Orientación a Objetos - UML - Casos de Uso.
Historia del UML UML 1.x evoluciona en UML 2.0
MODELAMIENTO VISUAL Y UML
PRESENTACION DE INGENIERIA ORIENTADA A OBJETOS
Fundamentos de Ingeniería de Software
Introducción a la abstracción de datos MC Beatriz Beltrán Martínez Primavera 2015.
Modelado Orientado a Objetos Programación Orientada a Objetos Departamento de Sistemas Universidad del Cauca 2006.
Presentación De UML Lenguaje estándar para escribir planos de software Se usa para visualizar, especificar, construir y documentar los artefactos de un.
1 Qué es UML Es un Lenguaje de Modelado Unificado basado en una notación gráfica que permite especificar,construir, visualizar y documentar los objetos.
:: Prof. Yeniffer Peña Introducción a JAVA Presentación Programación I.
VERIFICACIÓN Y VALIDACIÓN DE SISTEMAS 3.10 Fase de manejo de requerimientos 4.1 Modelado de pruebas en UML Ponente: ing. Alejandro tapia vazquez.
Universidad Nacional de Ingeniería Comprendiendo los Fundamentos de
Transcripción de la presentación:

Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel

Modelado Visual Es modelado usando una notación gráfica estándarizada Captura las partes esenciales de un sistema Abstrae la complejidad El análisis de casos de uso es una técnica para capturar el proceso del negocio desde la perspectiva del usuario

UML Lenguaje Unificado de Modelado Estandar para el modelado de aplicaciones Orientados a Objetos Es una sintaxis, no una metodología Proporciona una gran gama de diagramas y la semántica asociada a esta.

Booch, Rambaugh y Jacobson adoptaron los siguentes objetivos: Representar sistemas completos, en lugar de solamente la parte de software, usando conceptos orientados a objetos. Establecer una relación explícita entre conceptos y código ejecutable. Crear un lenguaje de modelado que pudiera ser usado por humanos y máquinas.

Ventajas UML es el lenguaje estándar para visualizar, especificar, construir y documentar los productos de un sistema de software UML se puede usar con todos los procesos, a lo largo del ciclo de vida de desarrollo y a través de diferentes tecnologías de implementación

Diseño Diagramas Asociados: - Diagrama de Objetos - Diagrama de Clases - Diagrama de Estados - Diagrama de Actividades - Diagrama de Secuencia - Diagrama de Componentes Fundamental en el diseño y Documentación de un sistema

Conceptos sobre Clases Describe un grupo de objetos con propiedades similares, con relaciones comunes y con semántica común (mismos atributos y patrones de comportamiento) La clase de un objeto es una propiedad implícita de sí mismo Al agrupar los objetos en clases se abstrae el problema, lo que da al modelo su potencia y capacidad de generalizar

Diagramas de Clase • Atributos: es una propiedad del elemento, que es compartida por todos los objetos, y describe una característica. • Operaciones: es la implementación de un servicio que muestra el comportamiento de la clase.

Sección de operaciones Un diagrama de clases se compone de un rectangulo dividido en tres secciones NombreDeClase Sección de atributos Sección de operaciones

Usuario nombre edad fechaNacimiento +agregarUsuario +borrarUsuario +modificarUsuario Nombre de la clase Atributos o características visibilidad son privados + son públicos Comportamiento u operaciones

Sintaxis compacta AutentificaUsuario Usuario Asociación Navegabilidad Indica cómo esta relacionada una clase con otra Navegabilidad Indica el sentido valido de recorrido

Sobrecarga

Sobrecarga La sobrecarga permite definir varias funciones que: Tienen el mismo nombre El número de parámetros que reciben es distinto Los tipos de datos de retorno son iguales Los tipos de datos de los parámetros pueden ser distintos

Sobrecarga int compara(int v1,int v2) { } if(v1>v2) return(1); else if(v1<v2) return(-1); else return(0); }

Sobrecarga int compara(char *v1,char *v2) { } for(int i=0;i<strlen(v1);i++) if(v1[i]==v2[i]) continue; else if(v1[i]<v2[i]) return(-1); else return(0); return (if(strlen(v1)==strlen(v2)?0:-1; }

Sobrecarga con funciones Si se utilizan parámetros con valores default, la función puede representarse con un conjunto de funciones: void funcion( int a = 50, float f = 23.45, char c = 'q' ); El conjunto de funciones equivalentes es: void funcion ( ); void funcion( int ); void funcion ( int, float ); void funcion ( int, float, char );

Sobrecarga de Operadores La sobrecarga del operador se asocia con la semantica Se mantiene la presedencia y asociatividad en los operadores Se pueden definir formas de prefijos y postfijos del mismo operador

Sobrecarga con Operadores Operadores que pueden ser sobrecargados Relacionales >, <, <=, >=, !=, == Aritméticos +, -, *, /, %, ^ A nivel de bits &, |, ~, !, <<, >>, Asignación =, +=, -=, *=, /=, %=, ^=, &=, |=, <<=, >>= Otros , &&, ||, ++, --, ->, [ ], ( ), new, delete

Ejemplo Sobrecarga del operador + entre numeros imaginarios. Imaginario Imginario::operator + (Imaginario i) { Imaginario mi = *this; return Imaginario( im.p_real + i.p_real, im.p_imaginaria + i.p_imaginaria ); }

Polimorfismo

Polimorfismo Muchas formas A un mismo mensaje distinto comportamiento

Overriding o Redefinición de Funciones Overriding es redefinir una función en una clase derivada: mismo nombre de la función. mismo tipo y número de argumentos. mismo tipo de retorno en una clase derivada.

Ejemplo igual tipo de retorno igual número y tipo de argumentos class User { public: ... virtual int getPermissions() const; } class Employee :public User { ... } int Employee::getPermissions() const cout << “ Permisos Empleado\n” igual tipo de retorno igual número y tipo de argumentos

Sobrecarga y sobreescritura La sobrecarga se refiere a crear funciones del mismo nombre, pero con diferente tipo y número de argumentos y valor de retorno dentro de una misma clase derivada o subclase. Las funciones resultantes son independientes entre sí. La redefinición redefine una función en la clase derivada con mismo tipo y número de argumentos, y valor de retorno. Las funciones resultantes se sobreescriben entre sí.

Polimorfismo El polimorfismo es una de las características centrales de la programación orientada a objetos, junto con el encapsulamiento y la herencia. Significa que un objeto responderá a una función de acuerdo a la definición propia que tiene para ese método.

Polimorfismo en C++ El polimorfismo en C++ trabaja sobre métodos heredados y/o redefinidos ( overriden ).

Ejemplo class User { ... virtual int getPermissions() const; } class Employee :public User { ... } int Employee::getPermissions() const { cout << “ Permisos Empleado\n” }

Ejemplo User user1, *user2; Employee employee1; user2 = &employee; user1.getPermissions(); // User. employee1.getPermissions(); // Employee.

Ejemplo - ( 3 de 3 ) int main(void ) { Usuario *persons[]={new Usuario(2), new Empleado(15),new Administrador(500)}; showPermissions( persons ); } void showPermissions( Usuario *usuarios[] ) for( int i = 0; i < 3; i++ ) usuarios[i]->getPermisos(); cout << endl;

Clases Abstractas Una clase abstracta es aquella que define funciones virtuales puras. Las funciones virtuales puras se definen como: virtual void print() const = 0;

Herencia en C++

Herencia Propiedad que permite crear nuevas clases a partir de las clases existentes Conserva las propiedades de la clase original y añade nuevas características Usado para la resolución de problemas complejos

Recomendaciones Buscar categorías, propiedades comunes y distintas que nos permitan clasificar los objetos.

Clase Base y Clase Derivada Se le llama Clase Base a la clase de la cuál van a heredar las demás. Se llama clase derivada a las clases creadas a partir de una clase base.

Clase Derivada Una clase derivada hereda todos los miembros de la clase base y puede acceder a los miembros públicos (public) y protegidos (protected) de la clase o clases base, como si fueran miembros de ella misma. Una clase derivada no tiene acceso a los miembros privados (private) de la clase base.

Ejemplo Persona Propiedades comunes Nombre Fecha de nacimiento Genero Estado civil

Empleado Características adicionales Sueldo Número empleado Area

Alumno Características adicionales Matricula Licenciatura

Jerarquía de Clases

Modelado UML ClaseBase Sección de atributos Sección de funciones ClaseDerivada Sección de atributos Sección de funciones

Modelado UML Persona Diagrama de clases nombre edad fechaNacimiento Sección de funciones Diagrama de clases Empleado idEmpleado sueldo area Sección de funciones

Sintaxis Para la declaración de clases derivadas, encontramos después del nombre de la clase derivada, dos puntos (:) , y luego alguna de las siguientes palabras clave: public private protected

class base {  //Cuerpo de la clase base }; class derivada :[public/private/..] base {  //Cuerpo de la clase derivada };

Constructores de Clases Derivadas Cuando una clase base tiene un constructor y una clase derivada también, al crear el objeto, se llama primero al constructor de la clase base, y cuando la ejecución de éste termina, se llama al constructor de la clase derivada. Gracias a que el constructor de la clase base es llamado, es posible inicializar la clase base, desde el constructor de la clase derivada. Esto se logra pasando una lista de los constructores de las clases base, con sus respectivos parámetros.

Ejemplo PERSO.H #ifndef PERSO_H #define PERSO_H #include<iostream.h> #include<string.h> #include<stdlib.h> class persona{ public: persona::persona(char *n,int e){ nombre=new char[strlen(n)+1]; edad=e; } const char *LeerNombre(char *n) const; int LeerEdad() const{ return edad; protected: char *nombre; int edad; };

class empleado:public persona{ empleado::empleado(char *n,int e,float s):persona(n,e){ salarioanual=s; } float leersalario() const; protected: float salarioanual; }; class alumno:public persona{ alumno::alumno(char *n,int e,double m):persona(n,e){ matricula=m; double leermatricula() const; double matricula; #endif

Principal.cpp #include<iostream.h> #include"perso.h" #include<conio.h> void main() { int edad; system("cls"); alumno edoo("mario",24,20021); edad=edoo.LeerEdad(); cout<<edad; getch(); }

Templates Introducción la programación clásica diferenciación entre los datos y su manipulación, es decir, entre los datos y el conjunto de algoritmos para manejarlos.  Los datos eran tipos muy simples generalmente los algoritmos estaban agrupados en funciones orientadas de forma muy específica a los datos que debían manejar.

Introducción La POO introdujo nuevas facilidades: Extender el concepto de dato, permitiendo tipos más complejos a los que se podía asociar la operaciones necesarias.  Además La posibilidad de ocultación de determinados detalles internos irrelevantes para el usuario y la capacidad de herencia

Programación genérica Se dieron cuenta que frecuentemente las manipulaciones contienen un denominador común que se repite bajo apariencias diversas criterios de ordenación validaciones

Los algoritmos deben ser parametrizados al máximo. Expresados de la forma más independiente posible de detalles concretos permitiendo la posibilidad de servir para una mayor variedad posible de tipos y estructuras de datos.

Algoritmo genérico que permita representar algoritmos con ciertas características comunes Definición de los tipos: a que tipos pueden aplicarse este algoritmo Y sus reglas de uso, independiente.

Las plantillas, que se introdujeron con la versión del Estándar de Julio de 1998

La idea central a resaltar aquí es que una plantilla genera la definición de una clase o de una función mediante uno o varios parámetros.  A esta instancia concreta de la clase o función se la denomina una especialización o especialidad de la plantilla.

C++ utiliza una palabra clave específica template para declarar y definir funciones y clases genéricas.  En estos casos actúa como un especificador de tipo y va unido al par de ángulos < > que delimitan los argumentos de la plantilla: template <T> void fun(T& ref);      // declaración de función genérica template <T> class C {/*...*/};     // declaración de clase genérica

#include class ObjetoGenerico { public: virtual void Dibuja() {}; }; class Circulo : public ObjetoGenerico { int x, y, r; Circulo(int xi=100, int yi=100, int ri=100) { x=xi ; y=yi; r=ri;} void Dibuja() { circle(x, y, r); }

class Elipse : public ObjetoGenerico { int x, y, rx, ry; public: Elipse(int xi=100, int yi=100, int rxi=60, int ryi=80) { x=xi; y=yi; rx=rxi; ry=ryi; } void Dibuja() { ellipse(x, y, 0, 360, rx, ry) ; } }; class Rectangulo : public ObjetoGenerico { int xizq, yarriba, ancho, alto; Rectangulo(int xi=10, int yi=10, int an=40, int al=60) { xizq=xi; yarriba=yi;ancho=an; alto=al; } { rectangle(xizq, yarriba, xizq+ancho, yarriba+alto); }

class Nodo { ObjetoGenerico *figura; Nodo *sig; public: Nodo(ObjetoGenerico *fig) { figura=fig; } Nodo * RecuperaSiguiente() { return sig; } void PonerSiguiente(Nodo *nodosig) { sig=nodosig; } void Muestra() { figura->Dibuja(); } };

class Lista { Nodo *cabeza; public: Lista() { cabeza=new Nodo(NULL); cabeza->PonerSiguiente(NULL); } void Insertar (ObjetoGenerico *fig); void Desplegar(); }; void Lista::Insertar(ObjetoGenerico *fig) { Nodo *aux; For(aux=cabeza; aux->RecuperaSiguiente()!=NULL; aux=aux->RecuperaSiguiente()); Nodo *nuevo = new Nodo(fig); nuevo->PonerSiguiente(NULL); aux->PonerSiguiente(nuevo); } void Lista::Desplegar() { Nodo *aux; for(aux=cabeza->RecuperaSiguiente(); aux!=NULL; aux=aux->RecuperaSiguiente()) aux->Muestra();

void main() { int graphdriver = DETECT, graphmode; initgraph(&graphdriver, &graphmode, "..\\bgi"); Lista ListaFig; Circulo *c1 = new Circulo(50,50,80); ListaFig.Insertar(c1); Elipse *e1 = new Elipse; ListaFig.Insertar(e1); Rectangulo *r1 = new Rectangulo(30,50); ListaFig.Insertar(r1); ListaFig.Desplegar(); closegraph(); }