introduccion a la programacion orientada a objetos

30
LENGUAJE DE PROGRAMACION IV - OOP Pag. 1 de 30 Juan Carlos Bernal CONTENIDO I. INTRODUCCION A LA POO 1.1. CONCEPTOS BASICOS DE LA PROGRAMACION ORIENTADA A OBJETOS. 1.1.1. QUE ES LA PROGRAMACION ORIENTADA A OBJETOS: 1.1.2. COMO ES LA ESTRUCTUTURA DE LA PROGRAMACION ORIENTADA A OBJETOS: 1.1.3. MECANISMOS BASICOS DE LA OOP 1.1.3.1. OBJETOS 1.1.3.2. MENSAJES 1.1.3.3. METODOS 1.1.3.4. CLASES 1.1.3.5. SUBCLASES II. PROGRAMACION POR ABSTRACCION 2.1 LA ABSTRACCION COMO PROCESO NATURAL MENTAL 2.2. MECANISMOS DE ABSTRACCION 2.2.1. PROCEDIMIENTOS Y FUNCIONES 2.2.2. MODULOS 2.2.3. TAD 2.2.4. OBJETOS 2.3 ELEMENTOS IMPORTANTES DEL MODELO OOP. 2.3.1. ABSTRACCION: 2.3.2. ENCAPSULACION: 2.3.3. MODULARIDAD:

Upload: tenisllanero

Post on 06-Dec-2015

222 views

Category:

Documents


3 download

DESCRIPTION

Conceptos basicos de la programaciocion orientada a objetos

TRANSCRIPT

Page 1: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 1 de 23 Juan Carlos Bernal

CONTENIDO

I. INTRODUCCION A LA POO

1.1. CONCEPTOS BASICOS DE LA PROGRAMACION ORIENTADA A OBJETOS.

1.1.1. QUE ES LA PROGRAMACION ORIENTADA A OBJETOS:1.1.2. COMO ES LA ESTRUCTUTURA DE LA PROGRAMACION ORIENTADA A OBJETOS:1.1.3. MECANISMOS BASICOS DE LA OOP

1.1.3.1. OBJETOS1.1.3.2. MENSAJES1.1.3.3. METODOS1.1.3.4. CLASES 1.1.3.5. SUBCLASES

II. PROGRAMACION POR ABSTRACCION

2.1 LA ABSTRACCION COMO PROCESO NATURAL MENTAL2.2. MECANISMOS DE ABSTRACCION

2.2.1. PROCEDIMIENTOS Y FUNCIONES2.2.2. MODULOS2.2.3. TAD2.2.4. OBJETOS

2.3 ELEMENTOS IMPORTANTES DEL MODELO OOP.2.3.1. ABSTRACCION: 2.3.2. ENCAPSULACION: 2.3.3. MODULARIDAD: 2.3.4. JERARQUIA:

2.3.4.1. ESTRUCTURA DE CLASES (is a)2.3.4.2. ESTRUCTURA DE OBJETOS (part of) agregación

III. LENGUAJES DE PROGRAMACION ORIENTADOS A OBJETOS

Page 2: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 2 de 23 Juan Carlos Bernal

IV. CLASES Y OBJETOS EN C++

4.1 DIAGRAMAS DE CLASES Y OBJETOS

4.2. CONSTRUCCION DE CLASES EN C4.2.1 DECLARACION Y DEFINICION DE CLASES4.2.2. CONSTRUCTORES Y DESTRUCTORES4.2.3. USAR LAS CLASES4.2.4 ESPECIFICACION/IMPLEMENTACION DE CLASES4.2.5 TECNICAS DE CREACION E INICIALIZACION DE OBJETOS4.2.6 INICIALIZACION Y LIMPIEZA DE OBJETOS

4.2.6.1 CONSTRUCTOR ORDINARIO4.2.6.2 CONSTRUCTOR POR DEFECTO4.2.6.3 CONSTRUCTOR DE COPIA4.2.6.4 CONSTRUCTOR DE INICIALIZACION4.2.7 EL PUNTERO this

V. CLASES ABSTRACTAS Y HERENCIA

5.1 ABSTRACCION DE LA ENERALIZACION Y ESPECIALIZACIÓN DE CLASES5.2 CLASES ABSTRACTAS5.3 HERENCIA EN C** , CLASES DERIVADAS5.4 HERENCIA REPETIDA Y CLASES BASE VIRTUALES5.5 FUNCIONES VIRTUALES PURAS5.6 DISEÑO DE CLASES ABSTRACTAS

Page 3: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 3 de 23 Juan Carlos Bernal

I. INTRODUCCION A LA POO

1.1. CONCEPTOS BASICOS DE LA PROGRAMACION ORIENTADA A OBJETOS.

1.1.1. QUE ES LA PROGRAMACION ORIENTADA A OBJETOS:ES UNA FORMA DE PROGRAMACION QUE UTILIZA OBJETOS QUE CORRESPONDEN A SUCESOS, LOS CUALES PRODUCEN UN FLUJO DE MENSAJES ENTRE OBJETOS, ORIGINANDO CAMBIOS EN EL ESTADO DEL OBJETO QUE RECIBE EL MENSAJE.

1.1.2. COMO ES LA ESTRUCTUTURA DE LA PROGRAMACION ORIENTADA A OBJETOS:

LA ESTRUCTURA DE LA PROGRAMACION ESTA FORMADA POR OBJETOS Y MAPAS DE MENSAJES, LOS CUALES RELACIONAN CON EL BOTON O BOTONES QUE TIENEN QUE EJECUTARSE PARA REALIZAR CIERTA OPERACIÓN CON LOS OBJETOS.

1.1.3. MECANISMOS BASICOS DE LA OOP

1.1.3.1. OBJETOSUN OBJETO ES UNA ENCAPSULACION GENERICA DE DATOS Y DE LOS PROCEDIMIENTOS PARA MANIPULARLOS.

ES UNA ENTIDAD QUE TIENE UNOS ATRIBUTOS: DATOSY UNAS FORMAS DE OPERAR SOBRE ELLOS: LOS METODOS.

UN OBJETO CONTIENE POR UNA PARTE, OPERACIONES QUE DEFINEN SU COMPORTAMIENTO Y POR OTRA VARIABLES MANIPULADAS POR ESTAS OPERACIONES, QUE DEFINEN SU ESTADO.

1.1.3.2. MENSAJESAL EJECUTAR UN OOP LOS OBJETOS ESTAN RECIBIENDO, INTERPRETANDO Y RESPONDIENDO MENSAJES ENVIADOS DE OTROS OBJETOS, LOS MENSAJES REEMPLAZAN EL FLUJO DE CONTROL FUNCIONAL, ORIGINANDO CAMBIOS EN EL ESTADO DEL OBJETO.

1.1.3.3. METODOS

Page 4: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 4 de 23 Juan Carlos Bernal

UN METODO SE APLICA EN UNA CLASE, DETERMINA COMO TIENE QUE ACTUAR EL OBJETO CUANDO RECIBE EL MENSAJE.LAS VARIABLES ASOCIADAS A ATRIBUTOS PERMITEN ALMACENAR INFORMACION PARA DICHO OBJETO.

1.1.3.4. CLASES UNA CLASE DESCRIBE LOS METODOS Y ATRIBUTOS QUE DEFINEN LAS CARACTERISTICAS COMUNES A TODOS LOS OBJETOS DE ESA CLASE. UN ATRIBUTO ASOCIADO CON UNA CLASE REPRESENTA UN VALOR QUE COMPARTEN TODOS LOS OBJETOS DE ESA CLASE (DATO MIEMBRO STATIC)

EJ: CREAR UN OBJETO DE LA CLASE PARRAFO: EL OBJETO PARRAFO1: PARRAFOPARRAFO 1;

PATRA JUSTIFICAR EL TEXTO DE PARRAFO1 SE TENDRIA QUE ENVIAR EL MENSAJE JUSTIFICACION, O INVOCAR LA FUNCION JUSTIFICACION: PARRAFO1.JUSTIFICACION()

1.1.3.5. SUBCLASESES UNA CLASIFICACIN JERARQUICA EN LA QUE LA CLASE HIJA O SUBCLASE HEREDA LOS ATRIBUTOS Y METODOS DE SU CLASE PADRE. TIENE POR OBJETO ELIMINAR LA REDUNDANCIA DE ALMACENAR EL MISMO METODO MAS VECES DE LO NECESARIO.

Page 5: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 5 de 23 Juan Carlos Bernal

II. PROGRAMACION POR ABSTRACCION

PARA COMPRENDER MEJOR EL SIGNIFICADO DE LA REVOLUCION QUE SUPONEN LAS TECNOLOGIAS ORIENTADAS A OBJETOS, SE DEBE ANALIZAR UNO DE LOS ELEMENTOS FUNDAMENTALES LA PROGRAMACION POR ABSTRACCION.

UN PROG ES UNA DESCRIPCION ABSTRACTA DE UN PROCEDIMIENTO O FENOMENO QUE EXISTE O SUCEDE EN EL MUNDO REAL.

Y ADICIONALMENTE EL LENG DESCRIBE DE MODO ABSTRACTO EL COMP FISICO DEL COMPUTADOR (EJ USO DEDECIMALES EN VEZ DE BINARIOS, VARIABLES EN VEZ DE DIRECCIONES DE MEMORIA, ETC)

2.1 LA ABSTRACCION COMO PROCESO NATURAL MENTAL

LAS PERSONAS NORMALMENTE COMPRENDEN EL MUNDO CONSTRUYENDO MODELOS MENTALES DE PARTE DEL MISMO; UN MODELO MENTAL ES UNA VISTA SIMPLIFICADA DE CÓMO FUNCIONA DE MODO QUE SE PUEDA INTERACTUAR CONTRA ELLA PASO SIMILAR EN EL DISEÑO DE SOFTWARE. EJ UN MAPA.

2.2. MECANISMOS DE ABSTRACCION

2.2.1. PROCEDIMIENTOS Y FUNCIONES EJ CONJ DE RUTINAS, PARA IMPLEMENTAR UNA PILA

PRIMERO CREA EL INTERFAZ VISIBLE A SU TRABAJO METER SACAR PILAVACIA PILALLENAA CONTINUACION IMPLEMENTA LOS DATOS MEDIANTE ARRAYS, LISTAS, LISTAS ENLAZADAS, ETC. PERO NO OCULTACION DE INFORM.

2.2.2. MODULOSPERMITE DIVIDIR LOS DATOS Y PROCEDIMIENTOS EN PARTE PRIVADA Y PARTE PUBLICA. PERO NO SE PERMITE REALIZAR INSTANCION, O CAPACIDAD DE HACER MULTIPLES COPIAS DE LAS ZONAS DE DATOS.

2.2.3. TADPERMITE DEFINIR VARIABLES Y OPERACIONES VALIDAS EN ESTAS.

Page 6: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 6 de 23 Juan Carlos Bernal

2.2.4. OBJETOSES UN TAD AL QUE SE AÑADEN INNOVACIONES EN COMPARTICION DE CODIGO Y REUTILIZACION.

EN POO, LAS ENTIDADES CENTRALES SON LOS OBJETOS, QUE SON TIPOS DE DATOS QUE ENCAPSULAN CON EL MISMO NOMBRE ESTRUCTURAS DE DATOS Y LAS OPERACIONES O ALGORITMOS QUE MANIPULAN ESOS DATOS.

2.3 ELEMENTOS IMPORTANTES DEL MODELO OOP.

2.3.1. ABSTRACCION: PROPIEDAD QUE PERMITE REPRESENTAR LAS CARACTERISTICAS ESENCIALES DE UN OBJETO, SIN PREOCUPARSE DE LAS RESTANTES CARACTERISTICAS. EL ELEMENTO CLAVE DE LA OOP ES LA CLASE.

2.3.2. ENCAPSULACION: PROPIEDAD QUE PERMITE ASEGURAR QUE EL CONTENIDO DE LA INFORMACION DE UN OBJETO ESTA OCULTA AL MUNDO EXTERIOR. LA ENCAPSULACION PERMITE LA DIVISION DE UN PROGRAMA EN MODULOS. ESTOS MODULOS SE IMPLEMENTAN MEDIANTE CLASES, DE FORMA QUE UNA CLASE REPRESENTA LA ENCAPSULACION DE UNA ABSTRACCION.EN LA PRACTICA, ESTO SIGNIFICA QUE CADA CLASE DEBE TENER DOS PARTES: UN INTERFAZ (CAPTURA SU VISTA EXTERNA) Y UNA IMPLEMENTACION (CONTIENE LA REPRESENTACION DE LA ABSTRACCION, ASI COMO LOS MECANISMOS QUE REALIZAN EL COMPORTAMIENTO DESEADO)

2.3.3. MODULARIDAD: PROPIEDAD QUE PERMITE SUBDIVIDIR UNA APLICACIÓN EN PARTES MAS PEQUEÑAS(MODULOS). EN LA PRACTICA LOS INTERFACES DE LOS MODULOS EN ARCHIVOS .h Y LOS LA SIMPLEMENTACIONES DE LOS MODULOS EN ARCHIVOS .cpp

2.3.4. JERARQUIA:PROPIEDAD QUE PERMITE UNA ORDENACION DE LAS ABSTRACCIONES.LAS DOS JERARQUIAS MAS IMPORTANTES DE UN SISTEMA COMPLEJO SON: 2.3.4.1. ESTRUCTURA DE CLASES (is a)

generalizacion/especializacion LAS JERARQUIAS DE generalización / especialización

SE CONOCEN COMO HERENCIA, BASICAMENTE ESTA DEFINE UNA RELACION ENTRE CLASES, EN

Page 7: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 7 de 23 Juan Carlos Bernal

DONDE UNA CLASE COMPARTE LA ESTRUCTURA O COMPORTAMIENTO DEFINIDO EN UNA O MAS CLASES (HERENCIA SIMPLE Y MULTIPLE RESPECTIVAMENTE). GRACIAS A ESTA HERENCIA SE PERMITE LA COMPARTICIÓN DE CODIGO Y POR ENDE LA REUTILIZACION

2.3.4.2. ESTRUCTURA DE OBJETOS (part of) agregación LA AGREGACION ES EL CONCEPTO QUE PERMITE

EL AGRUPAMIENTO FISICO DE ESTRUCTURAS RELACIONADAS LOGICAMENTE.

NOTA: No confundir clases y objetos de la misma clase. Coche rojo y azul. Objetos de la misma clase pero con un atributo diferente.

2.3.5. POLIMORFISMOLA PROPIEDAD QUE INDICA LA POSIBILIDAD DE QUE UNA ENTIDAD, TOME MUCHAS FORMAS.EN TERMINOS PRACTICOS EL POLIMORFISMO PERMITE REFERIRSE A OBJETOS DE CLASES DIFERENTES MEDIANTE EL MISMO ELEMENTO DE PROGRAMA Y REALIZAR LA MISMA OPERACIÓN DE DIFERENTES FORMAS, SEGÚN SEA EL OBJETO QUE SE REFERENCIA EN ESE MOMENTO.

EJ. LA CLASE FIGURA PUEDE ACEPTAR LOS MENSAJES DIBUJAR, BORRAR Y MOVER. CUALQUIER TIPO DERIVADO DE UNA FIGURA ES UN TIPO DE FIGURA Y PUEDERECIBIR EL MISMO MENSAJE. CUANDO SE ENVIA UN MENSAJE, POR EJEMPLO DIBUJAR, ESTA TAREA SERA DISTINTA SEGÚN QUE LA CLASE SEA UN TRIANGULO, UN CUADRADO O UNA ELIPSE.

LA FUNCION DIBUJAR, SE APLICA IGUALMENTE A UN CIRCULO, CUADRADO O ELIPSE, Y EL OBJETO EJECUTARA EL CODIGO APROPIADO DEPENDIENDO DEL TIPO ESPECIFICO.

Page 8: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 8 de 23 Juan Carlos Bernal

III. LENGUAJES DE PROGRAMACION ORIENTADOS A OBJETOS

ALGOL

SIMULA 67

CLU PASCAL SMALLTALK C BASIC

OBJECT PASCAL

ADA ACTOR OBJETIVE C C++ VISUAL 3

EIFFEL

ADA 95 VISUAL 4

BORLAND PASCAL

DELPHI JAVA

Page 9: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 9 de 23 Juan Carlos Bernal

IV. CLASES Y OBJETOS EN C++

4.1 DIAGRAMAS DE CLASES Y OBJETOSUN OBJETO SE DIBUJA COMO UNA CAJA

OBJETO

CAMPOS MIEMBRO I N T E R FUNCIONES MIEMBRO F A Z

INTERIOR EXTERIOR

UNA CLASE REPRESENTA UN CONJUNTO O CATEGORIA DE OBJETOS, MIENTRAS QUE CADA OBJETO ES UNA INSTANCIA DE UNA CLASE.

4.2. CONSTRUCCION DE CLASES EN CUN BUEN METODO PARA ESCRIBIR UN PROGRAMA EN C++ ES DECLARAR LAS CLASES A UTILIZAR, A CONTINUACION DEFINIR LAS ACCIONES DE ESAS CLASES Y POR ULTIMO UTILIZAR LAS INSTANCIAS DE LAS CLASES (OBJETOS) EN UN PROGRAMA PRINCIPAL

4.2.1 DECLARACION Y DEFINICION DE CLASESUNA CLASE EN C++ DEBE SER DECLARADA ANTES DE PODER SER UTILIZADA.

Class NOMBRE{

CUERPO DE LA CLASEPrivate:

//miembros privados (funciones y datos)public:

// miembros públicos (funciones y datos)Protected:

// miembros protegidos (funciones y datos)};

Label1

Page 10: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 10 de 23 Juan Carlos Bernal

DONDE EL CUERPO DE LA CLASE CONTIENE CERO O MAS DECLARACIONES DE MIEMBROS.

LOS MIEMBROS DATO, SE DECLARAN COMO VARIABLES PERO NO SE PUEDEN INICIALIZAR.

LOS MIEMBROS FUNCION, SE DECLARAN CON PROTOTIPOS DE FUNCIONES, Y SU DEFINICION (LA CUAL CONSISTE EN LA DEFINICION O DETALLES DE IMPLEMENTACION DE LA FUNCION MIEMBRO)

LOS MIEMBROS DE UNA CLASE PUEDEN SER PUBLICOS, PRIVADOS O PROTEGIDOS.

MIEMBROS PRIVADOS: SOLO SON ACCESIBLES POR LAS FUNCIONES MIEMBRO DE LA CLASE.

MIEMBROS PUBLICOS: SON ACCESIBLES DESDE CUALQUIER PARTE DEL PROGRAMA COMPLETO.

MIEMBROS PROTEGIDOS: SON ACCESIBLES POR LAS FUNCIONES MIEMBRO DE LA CLASE Y TAMBIEM POR LAS FUNCIONES MIEMBRO DE LAS CLASES DERIVADAS.

Class cuenta {

private:float saldo;

public:cuenta(){

saldo=0.0;}float saldo_cuenta(){

return saldo;}float retirar(float cantidad){

if (cantidad<=saldo){

saldo=saldo-cantidad;return cantidad;

}else{

return o;}

}void depositar(float cantidad){

saldo=saldo+cantidad;}

};

Page 11: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 11 de 23 Juan Carlos Bernal

4.2.2. CONSTRUCTORES Y DESTRUCTORESUN CONSTRUCTOR, SE LLAMA AUTOMATICAMENTE CUANDO SE CREA UNA INSTANCIA DE UNA CLASE. EL PROPOSITO DE UN CONSTRUCTOR ES INICIALIZAR LOS MIEMBROS DATO DEL OBJETO.UN CONSTRUCTOR SE IMPLEMENTA COMO UNA FUNCION Y TIENE EL MISMO NOMBRE; NO DEVUELVEN VALORES. EJ. LA FUNCION CUENTA:

Nombre_clase :: nombre_clase(lista de argumentos){ .....}

EJ.Cuenta :: cuenta(){ saldo=0.0;}

SE DISPONE TAMBIEN EN LAS CLASES DE FUNCIONES DESTRUCTORAS QUE SE LLAMAN CUANDO SE DESEA ELIMINAR EL OBJETO.

~CUENTA(){

COUT << “DESTRUCTOR”;}

4.2.3. USAR LAS CLASESDESPUES DE DEFINIR UNA CLASE Y SE HAYAN ESCRITO SUS FUNCIONES MIEMBRO ASOCIADAS, SE PUEDE DECLARAR UNA INSTANCIA DE CLASE DE IGUAL MODO QUE SE DECLARA CUALQUIER OTRA VARIABLE.LA UNICA DIFERENCIA ES QUE NO SE LLAMA VARIABLE, SINO OBJETO.EJ.

Cuenta cliente;Cuenta carlos, juan, rosa;

O SI SE DESEA INICIALIZAR UN OBJETO CON UN CONSTRUCTOR:Cuenta carlos(25000.50);

Page 12: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 12 de 23 Juan Carlos Bernal

4.2.4 ESPECIFICACION/IMPLEMENTACION DE CLASESEL ENCAPSULAMIENTO DE UNA CLASE SE CONSIGUE CUANDO SE CREAN LA ESPECIFICACION Y LA IMPLEMENTACION DE UNA CLASE DE MODO INDEPENDIENTE.

ESPECIFICACION

Class Cuenta{ //archivo conta.hpublic:

Cuenta();float saldo_cuenta();float retirar(float);void depositar(float);

private:Float saldo;

};

IMPLEMENTACION

Cuenta :: cuenta() //archivo conta.cpp{

saldo=0.0;}float cuenta :: saldo_cuenta(){

return saldo;}float cuenta :: retirar(float cantidad){

if (cantidad<=saldo){

saldo=saldo-cantidad;return cantidad;

}else{

return o;}

}void cuenta :: depositar(float cantidad){

saldo=saldo+cantidad;}

:: OPERADOR DE RESOLUCION DE ALCANCE, MUESTRA CUALES SON LAS FUNCIONES MIEMBRO DE UNA CLASE.

Page 13: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 13 de 23 Juan Carlos Bernal

#include <iostream.h>#include <conta.h>

void main(){

cuenta miguel;float total;cout << “Saldo miguel=” << miguel.saldo_cuenta << endl;miguel.depositar(100);cout << “Saldo miguel=” << miguel.saldo_cuenta << endl;total=miguel.retirar(20);cout <<”miguel ha retirado”<< total <<endl;cout << “Saldo miguel=” << miguel.saldo_cuenta << endl;miguel.depositar(50);cout << “Saldo miguel=” << miguel.saldo_cuenta << endl;

}

Cuando se compila y ejecuta el programa anterior se visualizara:

saldo miguel = 0saldo miguel = 100nmiguel ha retirado 20saldo miguel = 80saldo miguel = 130

4.2.5 TECNICAS DE CREACION E INICIALIZACION DE OBJETOS

YA SABEMOS QUE UNA DEFINICION DE UNA CLASE SIRVE PARA CONSTRUIR OBJETOS, POR LO TANTO UN OBJETO ES UNA INSTANCIA (un ejemplar) DE UNA CLASE.

UN OBJETO DE UNA CLASE SE INTRODUCE EN UN PROGRAMA DECLARANDO UNA VARIABLE CUYO TIPO ES EL NOMBRE DE LA CLASE

EXISTEN DOS TIPOS DE OBJETOS ESTATICOS Y DINAMICOS; LOS OBJETOS ESTATICOS SE DECLARAN AL PRINCIPIO DEL PROGRAMA Y PERMANECEN HASTA QUE EL PROGRAMA TERMINA; OBJETOS DINAMICOS SON AQUELLOS QUE SE CREAN Y DESTRUYEN A MEDIDA QUE SE NECESITAN

EJEMPLO:

Page 14: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 14 de 23 Juan Carlos Bernal

Class empleado{

char nombre[ ];int edad;float salario;

public:void leer_datos_emp(void);void calcular_salario();

};

LA DEFINICIOPN DE OBJETOS SE HACE EN EL PRORAMA PRINCIPAL,

main(){

empleado emp1;emp1.leer_datos_emp();empl.calcular_salario();

}

ESTE PROCESO SE EMPLEA PARA PROGRAMAS SENCILLOS SIN EMBARGO CUANDO SE ESCRIBEN PROGRAMAS QUE UTILIZAN MUCHOS OBJETOS DIFERENETES, SERA PRECISO ASINAR MEMORIA DINAMICAMENTE A LOS OBJETOS, PARA LO CULA SE DEBE ESPECIFICAR EXPLICITAMENTE EL TAMAÑO DE LA VARIABLE QUE SE ESTA ASINANDO.

emptr = malloc (sizeof (struct empleado));

C++ MEJORA EL SISTEMA DE ASINACION DE MEMORIA PROPORCIONANDO LOS OPERADORES new y delete, que corresponden a las funciones de C malloc() y free(), y su formato es:

new nombretipo

por ejemplo:

int *i = new int;float *x = new float;int *m = new int [3]prueba * = new Prueba;

Se pueden asignar arrays de objetos:

int *p; // define un puntero a un punterop= new int[10]; // asina arrays de enteros

Page 15: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 15 de 23 Juan Carlos Bernal

Tambien se puede asignar un array de puntero a objetos

int *p;p = new int *[10];

DESPUES QUE SE HA ASINADO MEMORIA PARA UN OBJETO, Y ESTE YA NO SE NECESITA, HA DE LIBERARSE LA MEMORIA QUE OCUPA Y DEJARLA LIBRE MEDIANTE EL OPERADOR delete

EJEMPLOS:

Int *p = new int; // declara y asigna memoria*p = 50; // asigna 50 a la posicion apuntad por pdelete p; // elimina el objeto

PARA SUPRIMIR UN ARRAY:

int *p = new int[50] // declara y asina un arraydelete [ ] p; // libera el array

4.2.6 INICIALIZACION Y LIMPIEZA DE OBJETOS

La inicializacion de objetos se facilita mediante funciones constructores

4.2.6.1 CONSTRUCTOR ORDINARIOCREA UNA NUEVA INSTANCIA DE LA CLASE Y P0NE LOS MIEMBROS DATO A LOS VALORES INCLUIDOS EN LA DECLARACION.EJEMPLO:

Class Complejo{public:

complejo (double, double); // constructor ordinario~complejo(); // destructor// otras funciones miembro

private:double real;double ima;

};..........complejo::complejo(double x,double y) // def de la funcion{ ......}

complejo c1(4.5 , 7.4); // uso del constructor ordinario

Page 16: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 16 de 23 Juan Carlos Bernal

4.2.6.2 CONSTRUCTOR POR DEFECTOES UN CONSTRUCTOR QUE NO REQUIERE RGUMENTOS; LA LISTA DE ARGUMENTOS ES O BIEN VACIA O TODOS LOS ARUMENTOS TIENEN VALORES POR OMISION ASINADOS A ELLOS.Class Complejo{

public:complejo() // constructor por defecto{

real = 0;imag =0;

}~complejo();// funciones miembro restantes

privatedouble real;double imag;

};

Complejo Cn; // se invoca el constructor por defecto

4.2.6.3 CONSTRUCTOR DE COPIAESTOS SE INVOCAN CUANDO SE REQUIERE CREAR UN OBJETO NUEVO E INICIALIZAR ESTE OBJETO CON LOS VALORES DE OTRO OBJETO DE LA MISMA CLASE

Class Complejo{public:

complejo (double, double); // constructor ordinariocomplejo (const Complejo &); // construct de copia~complejo(); // destructor// otras funciones miembro

private:double real;double ima;

};

Si en la clase no esta declarado un constructor de copia, el compilador creara uno por nosotros.Double func(Complejo);.....Complejo C2(5.0 , 25.0); // constructor ordinariodouble d1=func(C2); // paso de una copia a C2Complejo C1=C2; // invoca el constructor de copia

LA FUNCION func() PASARA UNA COPIA DE C2 CON UNA LLAMADA A:

Page 17: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 17 de 23 Juan Carlos Bernal

Complejo:: Complejo (const Complejo&)

complejo c1(4.5 , 7.4); // uso del constructor ordinario

4.2.6.4 CONSTRUCTOR DE INICIALIZACIONLOS CONSTRUCTORES DE INICACION PUEDEN PROPORCIONAR INICIACION SI SOLO UNA PARTE DEL NUEVO OBJETO SON VALORES QUE NO REPRESENTAN UN OBJETO COMPLETO DEL MISMO TIPO QUE EL NUEVO OBJETOClass Cadena{public:

cadena( const char*);Cadena();~cadena();

privatechar *cadena;int longitud;

};

Cadena::cadena(const char* cad){ ......}EL PARAMETRO PASADO A ESTE CONSTRUCTOR DE INICIALIZACION ES UN PUNTERO A UNA CADENA ORDINARIA, ES DECIR EL PARAMETRO TIENE UN TIPO DIFERENTE DE LAS INSTANCIAS DE LA CLASE DEL CONSTRUCTOR. UN CONSTRUCTOR DE INICIALIZACION SE UTILIZA PARA PROPORCIONAR VALORES DE MIEMBROS DATO PARA NUEVOS OBJETOS, ESTA ACCION SE CONOCE CON EL NOMBRE DE OBJETOS PROFUNDOS.

4.2.7 EL PUNTERO this

CADA CLASE CONTIENE UN PUNTO IMPLICITO LLAMADO this QUE APUNTA A SI MISMO.

1.- this nombre miembro apunta a un miembro del objeto2. *this es el objeto real completo3. return *this devuelve el objeto actual, es decir, el objeto al que

. apunta thisthis es la direccion del objeto al que se esta apuntando

Page 18: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 18 de 23 Juan Carlos Bernal

V. CLASES ABSTRACTAS Y HERENCIA

5.1 ABSTRACCION DE LA GENERALIZACION Y ESPECIALIZACIÓN DE CLASES

EL TERMINO GENERALIZACIÓN, PERMITE QUE UNA CLASE, DENOMINADA SUPERCLASE O SUPERTIPO (CLASE BASE EN C++), SE FORME FACTORIZANDO LAS PROPIEDADES DEDIFERENTES CLASES, LLAMADAS SUB CLASES O SUBTIPOS (CLASE DERIVADA EN C++)ESPECIALIZACIÓN ES EL CASO INVERSO, EN EL QUE UNA NUEVA CLASE SE DEFINE COMO UNA VERSIÓN MAS ESPECIALIZADA DE UNA SUPERCLASE.

GENERALFIGURA

ES UN

FIGURA CERRADA

ES UN

POLÍGONO

ES UN

CUADRILATERO

ES UN

RECTANGULO

ESPECIFICO

5.2 CLASES ABSTRACTAS

EN LAS JERARQUIAS DE CLASES, LAS SUPERCLASES QUE SE CREAN A PARTIR DE SUBCLSES CON ATRIBUTOS Y COMPORTAMIENTOS COMUNES, SE DENOMINAN CLASES ABSTRACTAS, ES DECIR ES UNA CLASE QUE SIRVE COMO BASE PARA OBTENER OTRAS CLASES DERIVADAS.

LAS CLASES ABSTRACTAS NO SE PUEDEN INSTANCIAR (NO SE PUEDE CREAR NINGUN OBJETO DE ESA CLASE) Y SOLO TIENEN SIGNIFICADO COMO UNA CLASE BASE DE OTRAS CLASES.

Page 19: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 19 de 23 Juan Carlos Bernal

DESDE EL PUNTO DE VISTA DEL LENGUAJE, UNA CLASE ES ABSTRACTA SI TIENE AL MENOS UNA FUNCION VIRTUAL PURA (UNA FUNCION MIEMBRO QUE SE DECLARA PERO NO SE DEFINE,; SU DEFINICIÓN SE REALIZA EN UNA CLASE DERIVADA)

5.3 HERENCIA EN C** , CLASES DERIVADAS

EN C++ SE PUEDEN CREAR NUEVAS CLASES A PARTIR DE LAS ANTIGUAS POR EL MECANISMO DE HERENCIA, Y SOPORTA LOS DOS TIPOS DE HERENCIA HERENCIA SIMPLE HERENCIA MÚLTIPLE.

5.3.1 SINTAXIS DE LA HERENCIA SIMPLE

class base {....};..............class derivada : [public | private | protected ] base {.....};

EJEMPLO:

class Habitacion{ public: Habitacion(const int); ~Habitacion(); void tamaño(void); private int tamaño_m_cuadrados; };

class oficina : public Habitacion{ public: oficina(const int, const int);

~oficina(); void planilla(void); // visualiza el numero de empleados private: int num_planilla; // numero de empleados };

5.3.1 SINTAXIS DE LA HERENCIA MULTIPLE

LA SINTAXIS ES LA MISMA QUE SE EMPLEA EN LA HERENCIA SIMPLE, CON LA DIFERENCIA DE Q UE SE ENUMERAN LAS DIFERENTES CLASES BASES, EN LUGAR DE UNA SOLA.

class baseA {....};class baseB {....};class baseC {....};

Page 20: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 20 de 23 Juan Carlos Bernal

class D:public A, public B, public C { ………. };

class derivada : [public | private | protected ] base1, [public | private | protected ] base2, …. {.....};

5.4 HERENCIA REPETIDA Y CLASES BASE VIRTUALESLAS JERARQUIAS DE HERENCIA MÚLTIPLE PUEDEN SER COMPLEJAS Y CONDUCIR A SITUACIONES EN LAS QUE UNA CLASE DERIVADA HEREDA MULTIPLES VECES DE UNA CLASE BASE INDIRECTA.

class B {protected:

int x;…..

};

class D1:public B {protected:

….. };

class D2:public B {protected:

….. };

class z:public D1, public D2 {…..

};

EN ESTE CASO B SE PRESENTA DOS VECES EN LA LISTA DE CLASES BASE DE z, POR LO TANTO z HEREDA x DOS VECES DE B UNA A TRAVES DE D1 Y OTRA A TRAVES DE D2

AUNQUE EL COMPILADOR NORMALMENTE DUPLICARA LA CLASE QUE SE HEREDA POR DOS VECES, SE FUEDE FORZAR PARA QUE SE GENERE SOLO UNA COPIA DE CUALQUIER CLASE REPETIDA UTILIZANDO LA PALABRA RESERVADA virtual, EN ESTE CASO LA CLASE B SE DENOMINA CLASE BASE VIRTUAL.

class B {protected:

int x;

Page 21: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 21 de 23 Juan Carlos Bernal

….. };

class D1:virtual public B {protected:

….. };

class D2:virtual public B {protected:

….. };

class z:public D1, public D2 {…..

};

5.5 FUNCIONES VIRTUALES PURAS

SON AQUELLAS FUNCIONES CUYA DECLARACIÓN NO ESTA SEGUIDA POR UNA DEFINICIÓN. ESTAS FUNCIONES SE DECLARAN DENTRO DE UNA CLASE ABSTRACTA Y CUYA DEFINICIÓN SE POSPONE A ALGUNA CLASE DERIVADA. ADICIONALMENTE SU CUERPO SE DEFINE COMO CERO, ES DECIR “NO HACE NADA”

virtual tipo nombrefuncion(argumentos)=0;

5.6 DISEÑO DE CLASES ABSTRACTAS

LA CLASE DE NIVEL MAS ALTO EN LA JERARQUIA DEBE SER ABSTRACTA. La razón para esta regla es elemental, siempre es mejor heredar de una clase abstracta.

LAS CLASES DERIVADAS DEBEN SER ESPECIALIZACIONES. TODAS LAS CLASES INTERMEDIAS DEBEN SER ABSTRACTAS MINIMIZAR EL ACCESO A VARIABLES. La diferencia esencial

entre clases concretas y clases abstractas es la presencia de datos, de modo que las clases se pueden hacer mas abstractas reduciendo su dependencia de estos datos o de una representación especifica de esos datos.

LA HERENCIA SIMPLE SE REPRESENTA CON ÁRBOLES Y LA HERENCIA MÚLTIPLE MEDIANTE GRAFOS ACICLICOS DIRIGIDOS

PROYECTO FINAL PROPUESTO.

Page 22: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 22 de 23 Juan Carlos Bernal

DISEÑAR UNA JERARQUIA DE CLASES QUE UTILICE COMO CLASE BASE O RAIOZ UNA CLASE LAN (RED DE AREA LOCAL).

LAS SUBCLASES DERIVADAS DEBEN REPRESENTAR DIFERENTES TOPOLOGÍAS, COMO ESTRELLA, ANILLO, BUS Y HUB. LOS MIEMBROS DATOS DEBEN REPRESENTAR PROPIEDADES TALES COMO SOPORTE DE TRANSMISIÓN, CONTROL DE ACCESO, FORMATO DEL MARCO DE DATOS, STANDARES, VELOCIDAD DE TRANSMISIÓN, ETC. SE DESEA SIMULAR LA ACTIVIDAD DE LOS NODOS DE TAL LAN.

LA RED CONSTA DE NODOS, QUE PUEDEN SER DISPOSITIVOS TALES COMO COMPUTADORAS PERSONALES, ESTACIONES DE TRABAJO, MAQUINAS FAX, ETC.

UNA TAREA PRINCIPAL DE LAN ES SOPORTAR COMUNICACIONES DE DATOS ENTRE SUS NODOS. EL USUARIO DE SIMULACIÓN DEL PROCESO DEBE, COMO MINIMO, PODER>

ENUMERAR LOS NODOS ACTUALES DE LA RED LAN AÑADIR UN NUEVO NODO QUITAR UN NODO CONFIGURAR LA RED, PROPORCIONÁNDOLE UNA

TOPOLOGÍA DE ESTRELLA O BUS ESPECIFICAR EL TAMAÑO DEL PAQUETE, QUE ES EL

TAMAÑO EN BYTES DEL MENSAJE QUE VA DE UN NODO A OTRO.

ENVIAR UN PAQUETE DE UN NODO ESPECIFICADO A OTRO

DIFUNDIR UN PAQUETE DE UN NODO A TODOS LOS DEMAS DE LA RED

Page 23: Introduccion a La Programacion orientada a objetos

LENGUAJE DE PROGRAMACION IV - OOP Pag. 23 de 23 Juan Carlos Bernal

QUIZZ

I. Cual es la diferencia de significado entre la estructura

struct a { int i,j,k;}

y la clase

class a { int i, j, k;};

II. Explique la razón por la que la declaración de la clase no es útil.

III. Como se puede utilizar la palabra reservada public para cambiar la declaración de la clase en una declaración equivalente a struct a?

IV. Realizar un programa que calcule la distancia media correspondiente a 100 distancias entre ciudades dadas cada una de ellas en kilómetros y metros.