1 / 53

Programación Orientada a Objetos

Programación Orientada a Objetos. Repaso. 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. Revolución del software.

tiana
Download Presentation

Programación Orientada a Objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  3. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  4. 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?. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  5. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  6. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  7. Programación orientada a objetos • 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  8. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  9. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  10. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  11. 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 NO UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  12. 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))). UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  13. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  14. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

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

  16. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  17. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  18. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  19. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  20. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

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

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

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

  24. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  25. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  26. 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). UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  27. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  28. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  29. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  30. 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). UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  31. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  32. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

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

  34. 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; UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  35. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

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

  37. 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 UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

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

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

  40. Ejemplos 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; UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  41. Ejemplos 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; } UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  42. Ejemplos 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"); } UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  43. Ejemplos // Programa 2. Time class. #include <iostream.h> 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 <iostream.h> // 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"; } UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  44. Ejemplos 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; } UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  45. Ejemplos 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( ); UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  46. 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; } UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  47. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  48. 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). UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  49. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

  50. 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. UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII

More Related