La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII1 Programación Orientada a Objetos Repaso.

Presentaciones similares


Presentación del tema: "UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII1 Programación Orientada a Objetos Repaso."— Transcripción de la presentación:

1 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII1 Programación Orientada a Objetos Repaso

2 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII2 Historia êCrisis del software êSistemas ambiciosos y caros êCalidad insuficiente êDifíciles de planear êCasi imposibles de manejar êMayor capacidad de hardware (reutilización) êEl software se ha quedado atrás

3 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII3 Revolución del software “La ciencia no progresa de forma continua, expandiendo gradualmente un paradigma ya establecido; avanza en una serie de cataclismos revolucionarios. El descubrimiento de deficiencias insalvables en un paradigma establecido produce una crisis, que puede dar lugar a una revolución en la cual el paradigma establecido es derrocado y sustituido.” Thomas Kuhn

4 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII4 Revolución del software Programación en ensamblador Dificultad en recordar toda la información que necesitaban conocer para desarrollar o corregir su software. –¿Qué valor tienen las variables? –¿La declaración de un nuevo identificador generará un conflicto con identificadores previamente creados? –¿Qué variables es necesario inicializar?.

5 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII5 Revolución del software La generación de lenguajes de alto nivel como FORTRAN, COBOL y ALGOL, solucionaron muchos de los problemas mientras se generaban nuevos problemas, más complejos y que requerían de mayor esfuerzo humano en cantidad y tiempo.

6 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII6 Revolución del software Los sistemas se hacían cada vez más complejos y el software era difícil de reutilizar. Además, el mantenimiento de estos sistemas era una tarea muy costosa en tiempo y dinero.

7 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII7 Así, surgió un nuevo paradigma basado en el producto, en el cual el progreso se mide, principalmente, por la agregación de componentes estándar, intercambiables y reutilizables, y sólo secundariamente por el avance de los procesos que se emplean para construirlo Programación orientada a objetos

8 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII8 Programación orientada a objetos êBasada en el Diseño recursivo êDefinir nuevas estructuras a partir de otras ya existentes êNoción de objeto: conjunto de localidades de memoria junto con las operaciones que pueden cambiar los valores de las mismas êClases: conjunto de objetos con las mismas propiedades êUn objeto: instancia de una clase

9 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII9 Mecanismos de Abstracción Los programadores se han enfrentado al problema de complejidad por largo tiempo en la historia de la ciencia de la computación. Para entender mejor la importancia de las técnicas orientadas a objetos, debemos explicar algunos de los mecanismos que se utilizan para controlar la complejidad.

10 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII10 Mecanismos de Abstracción Abstracción: la capacidad de encapsular y aislar información. De alguna forma las técnicas orientadas a objetos pueden considerarse como un resultado natural de progreso desde procedimientos, a módulos, a tipos de datos abstractos y objetos.

11 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII11 Mecanismos de Abstracción Procedimientos –Repetir tareas reutilizando código –Ocultamiento de información Módulos –Resuelve Information Hidding (parte pública y privada) –Instanciar nuevas estructuras NO

12 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII12 Mecanismos de Abstracción Tipos de datos abstractos (TAD - TDA) –Estructura Algebraica compuesta por un conjunto de objetos abstractos, que modelan elementos del mundo, y un conjunto de operaciones para su manipulación, que modelan el comportamiento real del objeto en el mundo. –TAD (Nombre, Formalismo, Invariante, operaciones(constructoras, modificadoras y analizadoras, adicionales(comparación, copia, destrucción, salida, persistencia))).

13 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII13 Mecanismos de Abstracción Tipos de datos abstractos - Estructuras de Datos –Tipo de dato definido por el usuario que puede manipularse como dato del sistema (datos y operaciones sobre éstos). –Para crearlos: Exportar una definición de tipo Definir operaciones Proteger los datos Realizar múltiples instancias

14 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII14 Mecanismos de abstracción Un TAD = Datos + Algoritmos. Programa = TAD + Interfaz. Un objeto es un tipo de dato abstracto como estructura de datos junto con las siguientes características –Código compartido –Reusabilidad

15 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII15 Programación orientada a objetos Lenguajes OO años 60´s con el proyecto SIMULA Diseñar un lenguaje de programación que hiciera de Algol60 una forma de desarrollar simulaciones del mundo real en la computadora

16 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII16 Programación orientada a objetos Incorporar al lenguaje la noción de un objeto, que es una entidad con ciertas propiedades, y con la capacidad de reaccionar a ciertos eventos. Programa: conjunto de objetos, que pueden cambiar dinámicamente y que actúan y reaccionan unos con otros, de manera similar a los procesos del mundo real.

17 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII17 Programación orientada a objetos Simula67 Smalltalk-80. Primer lenguaje OO OO se convirtió en la expresión de moda –incrementar productividad –mejorar confiabilidad –disminuir huecos –reducir deuda nacional

18 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII18 Programación orientada a objetos A pesar de que la POO tiene muchos beneficios, programar requiere de: –Talento, creatividad, inteligencia, lógica, habilidad para abstraer y experiencia.

19 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII19 Programación orientada a objetos Conocer C no necesariamente ayuda a C++ Nueva forma de pensar en cómo realizar cálculos Envío de mensajes entre objetos Ocultamiento de información –Si la representación de los datos debe cambiar o si hay un error en su manejo, sólo se modifican las funciones miembro, no el programa del usuario

20 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII20 Programación orientada a objetos Late binding (vinculación estática/dinámica) –Polimorfismo El objeto que envía el mensaje desconoce los mecanismos por medio de los cuales se responderá al mismo Clases e instancias Herencia (subclases y superclases) Override y Method Binding

21 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII21

22 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII22 Programación orientada a objetos Lenguaje Orientado a Objetos –Abstracción –Polimorfismo –Herencia –Encapsulamiento

23 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII23 Organización de la Información LPOO Nombres de variables Miembro Variables de clase y nombres Funciones y miembro Punteros a clases base A clases base De clases derivadas Puntero a clase Variables Miembro Puntero a clase Variables Miembro...

24 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII24 Programación orientada a objetos Es un método de implementación en el que los programas se organizan como un conjunto de objetos cooperativos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son miembros de una jerarquía de clases unidas por relaciones de herencia.

25 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII25 Programación orientada a objetos Un programa puede parecer orientado a objetos pero si no cumple alguno de los puntos anteriores, no lo es. Específicamente, programar sin herencia se conoce como programar con tipos de datos abstractos y no orientado a objetos.

26 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII26 Programación orientada a objetos Objeto: Es una abstracción de algo en el dominio de un problema o su implementación, que refleja la capacidad de un sistema para guardar información sobre sí mismo e interactuar. Una encapsulación de los valores de un atributo y de sus procedimientos. (Sinónimo: Una instancia).

27 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII27 Programación orientada a objetos Clase: Una descripción de uno o más objetos, descritos por un conjunto uniforme de atributos y procedimientos; además, puede describir cómo crear nuevos objetos en la clase.

28 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII28 Programación orientada a objetos Abstracción: El principio de ignorar aquellos aspectos de un sujeto que no son relevantes para el propósito principal, con el fin de tener más concentración en aquellos aspectos que sí son importantes.

29 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII29 Programación orientada a objetos Abstracción de datos: El principio de definir un tipo de datos en términos de las operaciones que se aplican a los objetos de ese tipo, con la restricción de que los valores de esos objetos pueden ser modificados u observados únicamente utilizando esas operaciones.

30 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII30 Programación orientada a objetos En C, como en otros lenguajes de programación procedural, la programación tiende a ser orientada a acciones. En C++ la programación es orientada a objetos. En C, la unidad de programación es la función y en C++ la unidad de programación es la clase de la cual pueden instanciarse objetos (crearse).

31 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII31 Estructuras Las clases en C++ son una evolución natural de las estructuras en C (struct). Una estructura es una colección de una o más variables, de tipos posiblemente diferentes, agrupadas bajo un solo nombre para manejo conveniente.

32 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII32 Estructuras Las estructuras ayudan a organizar datos complicados debido a que permiten que a un grupo de variables relacionadas se les trate como una unidad en lugar de como entidades separadas.

33 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII33 Estructuras struct Time { int hour; int minute; int second; };

34 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII34 Estructuras Una estructura NO reserva espacio en memoria, únicamente crea un nuevo tipo de dato que se utiliza para declarar variables. Las variables tipo estructura se declaran como cualquier otra: Time timeObject, timeArray[10], *timePtr;

35 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII35 Estructuras Los miembros de una estructura pueden accederse utilizando los operadores de membresía (. y ->). El punto (.) accede un elemento de la estructura por medio de una referencia al objeto. Por ejemplo: timeObject.hour timeArray[5].hour

36 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII36 Estructuras La flecha (->) accede un elemento de la estructura por medio de un apuntador a dicho objeto. timePtr = &timeObject timePtr->hour;

37 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII37 Clases Las clases permiten al programador modelar objetos que tienen atributos y operaciones. Las funciones miembro se conocen como métodos y son llamados en respuesta a mensajes enviados a un objeto

38 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII38 Clases class Time { public: Time( ); void setTime (int, int, int); void printMilitary ( ); void printStandard ( ); private: int hour, minute, second; };

39 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII39 Ejemplos // Programa 1. Crea una estructura, actualiza sus elementos y los imprime #include struct Time { int hour; int minute; int second; }; void printMilitary (const Time &); void printStandard (const Time &);

40 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII40 void main ( ) { Time dinnerTime; dinnerTime.hour = 18; dinnerTime.minute = 30; dinnerTime.second = 0; cout << "La cena se servirá a las "; printMilitary (dinnerTime);cout << "tiempo militar, " << endl << " que es "; printStandard (dinnerTime); cout << "tiempo estándar." << endl; Ejemplos

41 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII41 dinnerTime.hour = 29;// Colocando valores inválidos dinnerTime.minute = 73; dinnerTime.second = 103; cout << endl << "La hora con valores inválidos : "; printMilitary (dinnerTime); } void printMilitary (Time &t){// Imprime la hora en formato militar cout << (t.hour < 10 ? "0" : "") << t.hour << ":" << (t.minute < 10 ? "0" : "") << t.minute << ":" << (t.second < 10 ? "0" : "") << t.second; } Ejemplos

42 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII42 void printStandard (Time &t) { // Imprime la hora en formato estándar cout << ((t.hour == 0 || t.hour == 12) ? 12 : t.hour % 12) << ":" << (t.minute < 10 ? "0" : "") << t.minute << ":" << (t.second < 10 ? "0" : "") << t.second << (t.hour < 12 ? " AM" : " PM"); } Ejemplos

43 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII43 // Programa 2. Time class. #include class Time { public: Time( ); void setTime(int, int, int); void printMilitary(); void printStandard(); private: int hour, minute, second; }; Time::Time( ) { hour = minute = second = 0; } void Time::setTime(int h, int m, int s) { hour = ( h >= 0 && h < 24) ? h : 0; minute = ( m => 0 && m < 60 ) ? m : 0; second = ( s >= 0 && s < 60 ) ? s : 0; } void Time::printMilitary( ) { cout << ( hour < 10 ? "0" : "" ) << hour << ":" << ( minute < 10 ? "0" : "" ) << minute << ":" << ( second < 10 ? "0" : "" ) << second; } void Time::printStandard( ) { cout << (( hour == 0 || hour == 12) ? 12 : hour % 12) << ":" << ( minute < 10 ? "0" : "") << minute << ":" << ( second < 10 ? "0" : "") << second << ( hour < 12 ? " AM" : " PM"); } void main( ) { Time t; cout << "La hora inicial en formato militar es "; t.printMilitary( ); cout << endl << "La hora inicial en formato estándar es "; t.printStandard( ); t.setTime(13, 27, 6); cout << endl << endl << "La hora cambiada en formato militar es "; t.printMilitary( ); cout << endl << "La hora cambiada en formato estándar es "; t.printStandard( ); t.setTime(99, 99, 99); cout << endl << endl << "Después de intentar inicializar la hora con valores" << "inválidos:"<< endl << "En formato militar: "; t.printMilitary( ); cout << endl << "En formato estándar: "; t.printStandard( ); cout << endl; } // Programa 38. Ejemplo de constructores y destructores #include // Definición de la clase CreateandDestroy en la librería de usuario Create.h class CreateandDestroy {public:CreateandDestroy (int); ~CreateandDestroy ( ); private: int data; }; CreateandDestroy::CreateandDestroy (int value){ data = value; cout << "Object " << data << "constructor"; } CreateandDestroy::~CreateandDestroy ( ){ cout << "Object " << data << "destructor"; } Ejemplos

44 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII44 Time::Time( ) { hour = minute = second = 0; } void Time::setTime(int h, int m, int s) { hour = ( h >= 0 && h < 24) ? h : 0; minute = ( m => 0 && m < 60 ) ? m : 0; second = ( s >= 0 && s < 60 ) ? s : 0; } void Time::printMilitary( ) { cout << ( hour < 10 ? "0" : "" ) << hour << ":" << ( minute < 10 ? "0" : "" ) << minute << ":" << ( second < 10 ? "0" : "" ) << second; } Ejemplos

45 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII45 void Time::printStandard( ) { cout << (( hour == 0 || hour == 12) ? 12 : hour % 12) << ":" << ( minute < 10 ? "0" : "") << minute << ":" << ( second < 10 ? "0" : "") << second << ( hour < 12 ? " AM" : " PM"); } void main( ) { Time t; cout << "La hora inicial en formato militar es "; t.printMilitary( ); Ejemplos

46 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII46 Ejemplos cout << endl << "La hora inicial en formato estándar es "; t.printStandard( ); t.setTime(13, 27, 6); cout << endl << endl << "La hora cambiada en formato militar es "; t.printMilitary( ); cout << endl << "La hora cambiada en formato estándar es "; t.printStandard( ); t.setTime(99, 99, 99); cout << endl << endl << "Después de intentar inicializar la hora con valores" << "inválidos:"<< endl << "En formato militar: "; t.printMilitary( ); cout << endl << "En formato estándar: "; t.printStandard( ); cout << endl; }

47 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII47 Constructor y destructor Si no existe el constructor en la definición de una clase, el compilador genera uno por default pero no realiza ninguna inicialización; así que, cuando se crea un objeto no hay garantía de que esté en un estado consistente.

48 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII48 Constructor y destructor El destructor se llama con una tilde (~) y es el complemento del constructor. Se manda llamar cuando un objeto es destruido (cuando la ejecución de un programa deja el alcance en al cuál el objeto de una clase fue instanciado. ej. recordar Reglas de alcance).

49 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII49 Constructor y destructor Sin embargo, físicamente el destructor no destruye al objeto sino que lo deja de proteger de las reclamaciones de memoria por parte del sistema. Un destructor no recibe parámetros ni regresa algún valor.

50 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII50 Constructor y destructor Los constructores y destructores se llaman automáticamente. El orden en el que se llaman depende del momento en el que se instancían estos objetos en la ejecución.

51 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII51 Ejemplos // Programa 3. Ejemplo de constructores y destructores #include // Definición de la clase CreateandDestroy en la librería de usuario Create.h class CreateandDestroy {public:CreateandDestroy (int); ~CreateandDestroy ( ); private: int data; }; CreateandDestroy::CreateandDestroy (int value){ data = value; cout << "Object " << data << "constructor"; } CreateandDestroy::~CreateandDestroy ( ){ cout << "Object " << data << "destructor"; }

52 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII52 Ejemplos // Programa 4.Ejemplo de constructores y destructores // Utiliza la librería de usuario previa (Create.h) #include CreateandDestroy uno(1); void create (void) { CreateandDestroy cinco (5); cout << "local automático en función create"; static CreateandDestroy seis (6); cout << "local estático en función create"; CreateandDestroy siete (7); cout << "local automático en función create"; }

53 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII53 Ejemplos void main (void) { cout << "global creado antes del main"; CreateandDestroy dos (2); cout << "local automático en el main"; static CreateandDestroy tres (3); cout << "local estático en el main"; create( ); CreateandDestroy cuatro (4); cout << "local automático en el main"; }


Descargar ppt "UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII1 Programación Orientada a Objetos Repaso."

Presentaciones similares


Anuncios Google