53
UNIVERSIDAD DEL CAUCA - P IS Ing. Miguel A ngel Niño Zambrano 1 Programación Orientada a Objetos Repaso

Programación Orientada a Objetos

  • Upload
    tiana

  • View
    58

  • Download
    0

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Programación Orientada a Objetos

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

1

Programación Orientada a Objetos

Repaso

Page 2: Programación Orientada a Objetos

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

Page 3: Programación Orientada a Objetos

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

Page 4: Programación Orientada a Objetos

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

Page 5: Programación Orientada a Objetos

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.

Page 6: Programación Orientada a Objetos

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.

Page 7: Programación Orientada a Objetos

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

Page 8: Programació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

Page 9: Programación Orientada a Objetos

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.

Page 10: Programación Orientada a Objetos

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.

Page 11: Programación Orientada a 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

Page 12: Programación Orientada a Objetos

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

Page 13: Programación Orientada a Objetos

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

Page 14: Programación Orientada a Objetos

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

Page 15: Programación Orientada a Objetos

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

Page 16: Programación Orientada a Objetos

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.

Page 17: Programación Orientada a Objetos

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

Page 18: Programación Orientada a Objetos

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.

Page 19: Programación Orientada a Objetos

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

Page 20: Programación Orientada a Objetos

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

Page 21: Programación Orientada a Objetos

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

21

Page 22: Programación Orientada a Objetos

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

Page 23: Programación Orientada a Objetos

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

Page 24: Programación Orientada a Objetos

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.

Page 25: Programación Orientada a Objetos

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.

Page 26: Programación Orientada 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).

Page 27: Programación Orientada a Objetos

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.

Page 28: Programación Orientada a Objetos

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.

Page 29: Programación Orientada a Objetos

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.

Page 30: Programación Orientada a Objetos

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

Page 31: Programación Orientada a Objetos

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.

Page 32: Programación Orientada a Objetos

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.

Page 33: Programación Orientada a Objetos

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

33

Estructuras

struct Time {

int hour;

int minute;

int second;

};

Page 34: Programación Orientada a Objetos

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;

Page 35: Programación Orientada a Objetos

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

Page 36: Programación Orientada a Objetos

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;

Page 37: Programación Orientada a Objetos

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

Page 38: Programación Orientada a Objetos

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;

};

Page 39: Programación Orientada a Objetos

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

Page 40: Programación Orientada a Objetos

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

Page 41: Programación Orientada a Objetos

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

Page 42: Programación Orientada a Objetos

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

Page 43: Programación Orientada a Objetos

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

Page 44: Programación Orientada a Objetos

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

Page 45: Programación Orientada a Objetos

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

Page 46: Programación Orientada a Objetos

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;

}

Page 47: Programación Orientada a Objetos

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.

Page 48: Programación Orientada a Objetos

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

Page 49: Programación Orientada a Objetos

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.

Page 50: Programación Orientada a Objetos

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.

Page 51: Programación Orientada a Objetos

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

}

Page 52: Programación Orientada a Objetos

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

}

Page 53: Programación Orientada a Objetos

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

}