programación orientada a objetos
Post on 16-Jan-2016
58 Views
Preview:
DESCRIPTION
TRANSCRIPT
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
1
Programación Orientada a Objetos
Repaso
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
2
Historia
Crisis del softwareSistemas ambiciosos y carosCalidad insuficienteDifíciles de planearCasi 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
• 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 objetosProgramación orientada a objetos
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
8
Programación orientada a objetos
Basada en el Diseño recursivoDefinir nuevas estructuras a partir de otras ya
existentesNoció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
• 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
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
Nombres de variables Miembro
Variables de clase y nombres
Funciones y miembro
Punteros a clases base
A clases base
De clasesderivadas
Puntero a clase
Variables Miembro
Puntero a clase
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
Clasesclass 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
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
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
41
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
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
42
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
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
43
// 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";
}
Ejemplos
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
44
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
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
45
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
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
46
Ejemploscout << 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
51
Ejemplos // Programa 3. 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
52
Ejemplos// Programa 4. Ejemplo de constructores y destructores
// Utiliza la librería de usuario previa (Create.h)
#include <Create.h>
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";
}
UNIVERSIDAD DEL CAUCA - PIS Ing. Miguel Angel Niño Zambrano EDII
53
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";
}
top related