Sie sind auf Seite 1von 23

LENGUAJE DE PROGRAMACION IV - OOP

Juan Carlos Bernal

Pag.

1 de 23

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:
2.3.4. JERARQUIA:
2.3.4.1. ESTRUCTURA DE CLASES (is a)
2.3.4.2. ESTRUCTURA DE OBJETOS (part of) agregacin

III. LENGUAJES DE PROGRAMACION ORIENTADOS A OBJETOS

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

2 de 23

IV. CLASES Y OBJETOS EN C++


4.1 DIAGRAMAS DE CLASES Y OBJETOS
4.2. CONSTRUCCION DE CLASES EN C
4.2.1 DECLARACION Y DEFINICION DE CLASES
4.2.2. CONSTRUCTORES Y DESTRUCTORES
4.2.3. USAR LAS CLASES
4.2.4 ESPECIFICACION/IMPLEMENTACION DE CLASES
4.2.5 TECNICAS DE CREACION E INICIALIZACION DE
OBJETOS
4.2.6 INICIALIZACION Y LIMPIEZA DE OBJETOS
4.2.6.1 CONSTRUCTOR ORDINARIO
4.2.6.2 CONSTRUCTOR POR DEFECTO
4.2.6.3 CONSTRUCTOR DE COPIA
4.2.6.4 CONSTRUCTOR DE INICIALIZACION
4.2.7 EL PUNTERO this
V. CLASES ABSTRACTAS Y HERENCIA
5.1 ABSTRACCION DE LA ENERALIZACION Y ESPECIALIZACIN
DE CLASES
5.2 CLASES ABSTRACTAS
5.3 HERENCIA EN C** , CLASES DERIVADAS
5.4 HERENCIA REPETIDA Y CLASES BASE VIRTUALES
5.5 FUNCIONES VIRTUALES PURAS
5.6 DISEO DE CLASES ABSTRACTAS

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

3 de 23

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 OPERACIN CON LOS OBJETOS.
1.1.3. MECANISMOS BASICOS DE LA OOP
1.1.3.1. OBJETOS
UN OBJETO ES UNA ENCAPSULACION GENERICA DE
DATOS
Y
DE
LOS
PROCEDIMIENTOS
PARA
MANIPULARLOS.
ES UNA ENTIDAD QUE TIENE UNOS ATRIBUTOS: DATOS
Y 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. MENSAJES
AL 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

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

4 de 23

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: PARRAFO
PARRAFO 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. SUBCLASES
ES 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.

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

5 de 23

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 CMO FUNCIONA DE
MODO QUE SE PUEDA
INTERACTUAR CONTRA ELLA PASO SIMILAR EN EL DISEO
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
PILALLENA
A CONTINUACION IMPLEMENTA LOS DATOS MEDIANTE
ARRAYS, LISTAS, LISTAS ENLAZADAS, ETC. PERO NO
OCULTACION DE INFORM.
2.2.2. MODULOS
PERMITE 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. TAD
PERMITE DEFINIR VARIABLES Y OPERACIONES VALIDAS EN
ESTAS.

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

6 de 23

2.2.4. OBJETOS
ES UN TAD AL QUE SE AADEN 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
APLICACIN EN PARTES MAS PEQUEAS(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 generalizacin / especializacin
SE CONOCEN COMO HERENCIA, BASICAMENTE
ESTA DEFINE UNA RELACION ENTRE CLASES, EN

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

7 de 23

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 COMPARTICIN DE CODIGO Y
POR ENDE LA REUTILIZACION
2.3.4.2. ESTRUCTURA DE OBJETOS (part of) agregacin
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. POLIMORFISMO
LA 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
OPERACIN DE DIFERENTES FORMAS, SEGN
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
SEGN 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.

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

8 de 23

III. LENGUAJES DE PROGRAMACION ORIENTADOS A


OBJETOS

ALGOL
SIMULA 67
CLU

PASCAL

SMALLTALK

BASIC

OBJECT
PASCAL

ADA

ACTOR

OBJETIVE C

C++

VISUAL 3

EIFFEL
ADA 95

VISUAL 4

BORLAND PASCAL

DELPHI

JAVA

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

9 de 23

IV. CLASES Y OBJETOS EN C++


4.1 DIAGRAMAS DE CLASES Y OBJETOS
UN OBJETO SE DIBUJA COMO UNA CAJA
OBJETO
CAMPOS MIEMBRO

FUNCIONES MIEMBRO

I
N
T
E
R
F
A
Z

Label1

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 C
UN 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 CLASES
UNA CLASE EN C++ DEBE SER DECLARADA ANTES DE PODER
SER UTILIZADA.
Class NOMBRE
{
CUERPO DE LA CLASE
Private:
//miembros privados (funciones y datos)
public:
// miembros pblicos (funciones y datos)
Protected:
// miembros protegidos (funciones y datos)
};

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

10 de 23

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

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

11 de 23

4.2.2. CONSTRUCTORES Y DESTRUCTORES


UN 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 CLASES
DESPUES 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
CONSTRUCTOR:
Cuenta carlos(25000.50);

UN

OBJETO

CON

UN

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

12 de 23

4.2.4 ESPECIFICACION/IMPLEMENTACION DE CLASES


EL ENCAPSULAMIENTO DE UNA CLASE SE CONSIGUE
CUANDO
SE
CREAN
LA
ESPECIFICACION
Y
LA
IMPLEMENTACION
DE
UNA
CLASE
DE
MODO
INDEPENDIENTE.
ESPECIFICACION
Class Cuenta{
public:

//archivo conta.h

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.

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

13 de 23

#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 = 0
saldo miguel = 100
nmiguel ha retirado 20
saldo miguel = 80
saldo 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:

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

14 de 23

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
TAMAO 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;
p= new int[10];

// define un puntero a un puntero


// asina arrays de enteros

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

15 de 23

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;
*p = 50;
delete p;

// declara y asigna memoria


// asigna 50 a la posicion apuntad por p
// elimina el objeto

PARA SUPRIMIR UN ARRAY:


int *p = new int[50]
delete [ ] p;

// declara y asina un array


// 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 ORDINARIO
CREA 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
4.2.6.2 CONSTRUCTOR POR DEFECTO

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

16 de 23

ES
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
private
double real;
double imag;
};
Complejo Cn;

// se invoca el constructor por defecto

4.2.6.3 CONSTRUCTOR DE COPIA


ESTOS 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 ordinario
complejo (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 ordinario
double d1=func(C2); // paso de una copia a C2
Complejo C1=C2;
// invoca el constructor de copia
LA FUNCION func() PASARA UNA COPIA DE C2 CON
UNA LLAMADA A:
Complejo:: Complejo (const Complejo&)

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

17 de 23

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


4.2.6.4 CONSTRUCTOR DE INICIALIZACION
LOS 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 OBJETO
Class Cadena
{
public:
cadena( const char*);
Cadena();
~cadena();
private
char *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 objeto
2. *this
es el objeto real completo
3. return *this devuelve el objeto actual, es decir, el objeto al que
.
apunta this
this es la direccion del objeto al que se esta apuntando

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

18 de 23

V. CLASES ABSTRACTAS Y HERENCIA


5.1 ABSTRACCION DE LA GENERALIZACION Y ESPECIALIZACIN DE
CLASES
EL TERMINO GENERALIZACIN, 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++)
ESPECIALIZACIN ES EL CASO INVERSO, EN EL QUE UNA NUEVA
CLASE SE DEFINE COMO UNA VERSIN MAS ESPECIALIZADA DE
UNA SUPERCLASE.

GENERAL
FIGURA
ES UN
FIGURA CERRADA
ES UN
POLGONO
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.

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

19 de 23

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
DEFINICIN 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 MLTIPLE.
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 tamao(void);
private
int tamao_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 {....};

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

20 de 23

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 VIRTUALES
LAS JERARQUIAS DE HERENCIA MLTIPLE 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;
..

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

21 de 23

};
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 DECLARACIN NO ESTA
SEGUIDA POR UNA DEFINICIN. ESTAS FUNCIONES SE DECLARAN
DENTRO DE UNA CLASE ABSTRACTA Y CUYA DEFINICIN 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 DISEO DE CLASES ABSTRACTAS

LA CLASE DE NIVEL MAS ALTO EN LA JERARQUIA DEBE SER


ABSTRACTA. La razn 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 representacin especifica de esos datos.
LA HERENCIA SIMPLE SE REPRESENTA CON RBOLES Y LA
HERENCIA MLTIPLE MEDIANTE GRAFOS ACICLICOS
DIRIGIDOS
PROYECTO FINAL PROPUESTO.

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

22 de 23

DISEAR UNA JERARQUIA DE CLASES QUE UTILICE COMO


CLASE BASE O RAIOZ UNA CLASE LAN (RED DE AREA LOCAL).
LAS
SUBCLASES
DERIVADAS
DEBEN
REPRESENTAR
DIFERENTES TOPOLOGAS, COMO ESTRELLA, ANILLO, BUS Y
HUB. LOS MIEMBROS DATOS DEBEN REPRESENTAR
PROPIEDADES TALES COMO SOPORTE DE TRANSMISIN,
CONTROL DE ACCESO, FORMATO DEL MARCO DE DATOS,
STANDARES, VELOCIDAD DE TRANSMISIN, 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 SIMULACIN DEL PROCESO DEBE, COMO
MINIMO, PODER>

ENUMERAR LOS NODOS ACTUALES DE LA RED LAN


AADIR UN NUEVO NODO
QUITAR UN NODO
CONFIGURAR LA RED, PROPORCIONNDOLE UNA
TOPOLOGA DE ESTRELLA O BUS
ESPECIFICAR EL TAMAO DEL PAQUETE, QUE ES EL
TAMAO 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

LENGUAJE DE PROGRAMACION IV - OOP


Juan Carlos Bernal

Pag.

23 de 23

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 razn por la que la declaracin de la clase no es til.
III. Como se puede utilizar la palabra reservada public para cambiar la
declaracin de la clase en una declaracin 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 kilmetros y
metros.

Das könnte Ihnen auch gefallen