La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Lenguaje C++ Segunda parte

Presentaciones similares


Presentación del tema: "Lenguaje C++ Segunda parte"— Transcripción de la presentación:

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

2 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

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

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

5 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

6 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

7 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

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

9 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

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

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

12 Sobrecarga

13 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

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

15 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; }

16 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 );

17 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

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

19 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 ); }

20 Polimorfismo

21 Polimorfismo Muchas formas A un mismo mensaje distinto comportamiento

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

23 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

24 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í.

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

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

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

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

29 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;

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

31 Herencia en C++

32 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

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

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

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

36 Ejemplo Persona Propiedades comunes Nombre Fecha de nacimiento Genero
Estado civil

37 Empleado Características adicionales Sueldo Número empleado Area

38 Alumno Características adicionales Matricula Licenciatura

39 Jerarquía de Clases

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

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

42 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

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

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

45 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; };

46 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

47 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(); }

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

49 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

50 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

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

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

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

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

55 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

56 #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); }

57 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); }

58 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(); } };

59 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();

60 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(); }


Descargar ppt "Lenguaje C++ Segunda parte"

Presentaciones similares


Anuncios Google