Você está na página 1de 107

Universidad Austral de Chile

Facultad de Cs. de la Ingeniería


Instituto de Informatica
Apuntes de Clases
INFO 161 : Lenguajes de Programación
Programación Orientada a Objetos
Prof. Luis Alberto Alvarez González
Valdivia, Agosto de 1998.-
ii
Tabla de Contenidos
1 INTRODUCCIÓN.
1
1.1 DISEÑO DIRIGIDO POR RESPONSABILIDADES
9
2 CLASES.
14
2.1 CREACIÓN DE OBJETOS DE UNA CLASE.
17
2.2 FUNCIONES EN LÍNEA
19
2.3 CONSTRUCTORES
21
2.4 DESTRUCTORES.
24
2.5 FUNCIONES AMIGAS
27
2.6 EJERCICIOS.
30
3 MÁS CONCEPTOS SOBRE ORIENTACIÓN A OBJETOS
31
3.1 RELACIONES.
31
3.1.1
RELACIÓN “UN - TIPO - DE” (A - KIND - OF RELATIONSHIP)
31
3.1.2
RELACIÓN “ES UN(A)” ( IS - ARELATIONSHIP)
33
3.1.3
RELACIÓN “PARTE - DE”
34
3.1.4
RELACIÓN “TIENE - UN”
35
3.2 HERENCIA
35
3.3 HERENCIA MÚLTIPLE
38
3.3.1
CLASES ABSTRACTAS
41
3.3.2
EJERCICIOS
43
4 HERENCIA EN C++
46
4.1 TIPOS DE HERENCIA.
47
4.2 CONSTRUCCIÓN
48
4.3 DESTRUCCIÓN
49
4.4 HERENCIA MÚLTIPLE.
50
4.5 POLIMORFISMO
50
4.6 CLASES ABSTRACTAS
53
5 SOBRECARGA DE OPERADORES
55
6 TIPOS GENÉRICOS
60
7 TIPOS GENÉRICOS (TÉMPLATE EN C++)
63

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 1
1 Introducción.
Envío de Flores
Si mando flores a una dama tengo las siguientes
alternativas.
Alternativas
1. Lo hago directamente enviándole un mensaje a
Margarita la florista.
2. Usando otro objeto intermedio, por ejemplo
Gertrudis, la secretaria.
El objeto Margarita y el objeto Gertrudis tienen métodos
que
entienden el mensaje.
El objeto Margarita tiene métodos que permiten realizar
la
acción.
Si le pido a mi jefe Lalo que mande flores,
probablemente
no lo hará porque no tiene el método.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 2
• E n P O O , l a a c c i ó n s e i n i c i a
m e d i a n t e l a t r a n s m i s i ó n d e
u n
mensaje (paso de mensajes) a un agente (objeto)
responsable de la acción.
• E l m e n s a j e t i e n e c o d i f i c a d a
l a p e t i c i ó n y s e a c o m p a ñ a d e
información adicional.
• S i e l o b j e t o r e c e p t o r a c e p t a
e l m e n s a j e , s i g n i f i c a q u e
t i e n e
los métodos para llevarla a cabo.
• E l o b j e t o r e c e p t o r r e a l i z a l a
a c c i ó n .
Si hubiese ido donde la florista Rosa el resultado habría
sido
el mismo, porque Margarita y Rosa pertenecen a la
misma
clase. Esta clase la podemos llamar Florista.
• T o d o s l o s o b j e t o s d e u n a
m i s m a c l a s e t i e n e n l o s
m i s m o s m é t o d o s .

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 3
Probablemente Margarita pedirá dinero y entregará una
boleta, porque ese método los usan todos los
comerciantes, o sea la clase florista pertenece a una clase
mayor llamada comerciante y el objeto Margarita,
conoce los métodos de la clase florista y todos los
métodos de la clase comerciante
Dicho de otra forma la clase florista hereda métodos de
una
clase jerárquicamente superior.
Otros comerciantes son los panaderos, fotocopiadores,
etc.
Los comerciantes son humanos, como otro tipo de
profesiones.
Los Humanos son mamíferos,
Los mamíferos son animales,
Los animales son objetos materiales
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 4
Objeto Material
Animal
Planta
Mamífero
Flor
Perro
Humano
Ornitorrinco
Comerciante
Artista
Ingeniero
Florista
Fococopiador
Pluto
Margarita
Rosa Pedro Pablo Ana Orni
Clavel
Herencia.-
• L a s c l a s e s s e p u e d e n
o r g a n i z a r e n f o r m a j e r á r q u i c a
p o r
herencia.
• U n a s u b c l a s e h e r e d a r á l o s
m é t o d o s d e u n a s u p e r c l a s e .
• U n a s u p e r c l a s e a b s t r a c t a s e
u s a s o l o p a r a c r e a r s u b c l a s e s
no posee objetos.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 5
Un problema, los mamíferos dan a luz crías vivas.
La ornitorrinco Orni es mamífero y pone huevos. Así
que
necesitamos método que codifiquenexcepciones para
anular
métodos de las superclases.
Enlaces de Métodos.
• U n m é t o d o s e b u s c a e n l a
c l a s e d e l o b j e t o , s i n o s e
encuentra se busca en la superclase y así sucesivamente
hasta que se encuentra. Una vez que se encuentra se
ejecuta o de lo contrario emite un mensaje de error.
Volviendo al ejemplo.
El hecho que yo no conozca con exactitud los métodos
que
usará Margarita, se conoce como ocultamiento de la
información.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 6
Resolver un problema complejo usando técnicas
tradicionales, puede volverse muy engorroso, puesto que
obliga a conocer variables, registros o parámetros que se
usan anteriormente y de igual forma con el código que
viene.
Para resolver ese problema, se usan:
Procedimientos,
Procedimientos y funciones permiten ocultar métodos,
permite reutilización. Sin embargo la información la
pueden ocultar sólo parcialmente.
Por ejemplo,

• u n p r o c e d i m i e n t o p a r a

m a n e j a r u n a p i l a .

• I n t e r f a z v i s i b l e . r u t i n a s ,

i n i c i a r , s a c a r , m e t e r y t o p e .

• S e p u d e u s a r a r r e g l o ,

p u n t e r o s , l i s t a s e n l a z a d a s

e t c .
• L o s d a t o s d e l a p i l a n o

p u e d e n s e r l o c a l e s , d e b e n s e r
compartidos, entonces deben ser globales.
• S u p o n g a m o s u n a r r e g l o d e
n o m b r e p i l a _ d e _ d a t o s .
Problemas.
• T o d o s l o s p r o g r a m a d o r e s
d e b e n s a b e r e s t e n o m b r e
para no crear otro igual.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 7
• L o s n o m b r e s i n i c i a r , s a c a r ,
m e t e r y t o p e s o n a h o r a
reservados.
Módulos.
La programación modular resuelve los problemas
anteriores permitiendo dividir los módulos en dos partes,
una parte privada y otra pública. La parte privada es sólo
accesible por las rutinas al interior del módulo.
Problemas.
• Q u e p a s a s i o t r o s u s u a r i o s
d e s e a n m a n t e n e r m á s d e
una pila.
• L a p r o g r a m a c i ó n m o d u l a r n o
p e r m i t e h a c e r l a
instanciación de otros ejemplares.
Tipo de Datos Abstracto.
• T i p o d e f i n i d o p o r e l
p r o g r a m a d o r .
• C o n j u n t o d e v a l o r e s ( p o d r í a
s e r i n f i n i t o ) y n ú m e r o d e
operaciones primitivas.
• L o s u s u a r i o s p u e d e n c r e a r
v a r i a b l e s p a r a e l t i p o
definido.
Ejemplo, definir una pila como TDA y las operaciones
iniciar, sacar, metery tope, como las únicas operaciones
válidas para pila.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 8
Los módulos se usan como implantación de TDA. El
TDA
es un concepto.
Para construir un TDA se debe ser capaz de:
1. Exportar una definición de tipo
2. Proporcionar un conjunto de operaciones.
3. Proteger los datos asociados, de tal manera que sólo
se puedan usar con las operaciones establecidas.
4. Crear múltiples ejemplares del tipo.
Los módulos están dirigidos hacia los puntos 2 y 3.
Los objetos son tipos abstractos de datos.
Programación Orientada a Objetos (POO).
La POO agrega ideas nuevas al concepto de TDA.
Ellas son
• p a s o d e m e n s a j e s . C a m b i o d e
e n f o q u e e n t r e h a c e r l o u n o
mismo invocando el método apropiado o que el objeto lo
haga por uno.
• S o b r e c a r g a d e n o m b r e s
• R e u t i l i z a c i ó n d e s o f t w a r e .
• M e c a n i s m o s d e h e r e n c i a
y p o l i m o r f i s m o ( m é t o d o s
q u e
pueden ser aplicados a diferentes objetos)

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 9
1.1 Diseño Dirigido por Responsabilidades
¿ Que es POO ?
Respuesta típica : clases, herencia, etc., sintaxis del
lenguaje.
Importante, delegación de responsabilidades. Esta
técnica se
llama diseño dirigido por responsabilidades.
Una técnica útil es el uso de tarjetas CRC (Clases,
Responsabilidad, Colaboradores), como se muestra en la
figura
Nombre de la Clase
Colaboradores
Responsabilidades
Algunas reglas
• U s a r n o m b r e p r o n u n c i a b l e s .
• U s a r e l s u b r a y a d o _
( u n d e r l i n e ) p a r a s e p a r a r
p a l a b r a s
dentro de un nombre o usar la primera letra mayúscula.
Ejemplo “Ordenador_de_lista¨ u “OrdenadorDeLista”
• U s a r a d e c u a d a m e n t e l a s
a b r e v i a t u r a s , p o r e j e m p l o
“ordlist” no es un buen ejemplo, sin embargo “IDuser”
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 10
podría ser una abreviatura al número de identificación de
usuario.
• N o u s a r d í g i t o s q u e
c o n f u n d a n a l l e c t o r p o r
e j e m p l o 0 y O ,
1 y l, 2 y Z, 5 y S, etc.
• U s a r c l a r a m e n t e v a r i a b l e s
b o o l i a n a s , p o r e j e m p l o
“Impresora_Lista” es mejor que “Estado_Impresora”.
Un ejemplo es el de cajeros automáticos
Lector_de_Tarjetas
Colaboradores
Muestre mensaje de bienvenida, espera tarjeta
Verificador_de_NIP
Pida al Verificador_de_NIP que compruebe validez
Selector_de_Actvidad
Llame al Selector_de_Actvidad
Devuelve tarjeta a usuario
Verificador_de_NIP
Colaboradores
Recibe número NIP del Manejador_de_cuenta.
Manejador_de_cuenta

Devuelve falso si no hay cuenta


Presenta ventana de solicitud de NIP
Recibe el NIP del usuario
Compara NIP, devuelve resultado
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 11
Manejador_de_cuenta
Colaboradores
Verifica valides de cuenta; devuelve NIP
Verifica información retiro/depósito
Selector_de_actividad
Colaboradores
Muestra menú de actividades
Manejador_de_depósito
Espera selección del usuario
Manejador_de_retiros
Llamar al manejador de la transacción adecuada
Manejador_de_Retiros
Colaboradores
Pregunta al usuario la cantidad a retirar
Manejador_de_cuenta
Verifique la cantidad con Manejador_de_Cuenta Distribuidor_de_efectivo
Diga al Distribuidor_de_efectivo que descargue efectivo
Caja_electrónica
Colaboradores
Dar efectivo
Manejador_de_retiros
Dar sobre de depósitos con indicación de hora
Manejador_de_depósitos
Recuperar sobre del depósito.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 12

Ejemplos.-
Organización de escuela. profesores, alumnos, director, inspector, auxiliar,
jardinero.
Industria. Gerente, asesores, secretaria, Ingenieros, técnicos, trabajadores,
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 13
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 14
2 Clases.

• U n o b j e t o e s u n a i n s t a n c i a

d e u n a c l a s e .

• U n o b j e t o t i e n e u n e s t a d o y

u n o o v a r i o s m é t o d o s .

• L a e s t a d o e s p r i v a d o y p u e d e

s e r a c c e s a d o s o l o s u p r o p i o s
métodos.
Objeto
Una clase, es a la cual pertenecen los objetos.
Por lo tanto.

• U n a c l a s e t i e n e u n a p a r t e

p ú b l i c a y u n a p a r t e p r i v a d a .

• L a p a r t e p r i v a d a t i e n e q u e

v e r c o n e l e s t a d o d e l o b j e t o .

• L a p a r t e p ú b l i c a e s l a

i n t e r f a z a l o b j e t o .
estado
métodos
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 15
Ejemplo
class Point {
private :
int xVal, yVal;
public:
void SetPt(int,int);
void OffsetPt(int,int);
};
Se declara una clase llamadaPoint.
• T i e n e c u a t r o
c o m p o n e n t e . x V a l , y V a l , S e t P t y
OffsetPt.

• T i e n e d o s d a t o s m i e m b r o s y

d o s f u n c i o n e s m i e m b r o s .

• L a p a r t e p r i v a d a e s t á

c o m p u e s t a p o r l o s d a t o s

m i e m b r o s .

• L a p a r t e p ú b l i c a e s t a

c o m p u e s t a p o r l a s f u n c i o n e s
miembros y la forma en como podrá accesarse los
objetos.
• N o i m p o r t a e l o r d e n d e l a
p a r t e p ú b l i c a y p r i v a d a .
Si la primera parte es la privada, se puede omitirprivate.
Es decir quedaría.
class Point {
int xVal, yVal;
public:
void SetPt(int,int);
void OffsetPt(int,int);
void PrintPt() ;
};

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 16
El encabezado de las declaraciones de las funciones
miembros deben ser de la siguiente forma :
tipo clase :: función (parámetros)
por ejemplo
void Point::SetPt(int x, int y) {
xVal=x;
yVal=y;
}void Point::OffsetPt(int x, int y) {
xVal+=x;
yVal+=y;
}
• E s t o s e l e e : “ D e l a
c l a s e P o i n t s e d e c l a r a s e t P t
c o m o
...”
• L a f u n c i ó n s e t P t a s i g n a l o s
v a l o r e s x e y a l o s v a l o r e s
privados xVal, yVal.
• L a f u n c i ó n O f f s e t P t l e a g r e g a
a x V a l e y V a l , l o s
valores dex e y .
O seaxVal+=x; equivale axVal=xVal+x;
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 17
2.1 Creación de Objetos de una clase.
Se hace de la misma que la declaración de los tipos
concretos, por ejemplo,
Point punto_1, punto_2, xy, pt;
aquí,punto_1, punto_2, xy ypt, son objetos de la
clasePoint .
Point.
punto_1 punto_2
xy
pt
Se pueden crear “infinitos” objetos de una clase.
Se puede accesar un método público de un objeto, de la
siguiente manera.
objeto.método(parámetros);
Por ejemplo a un objeto lo podemos fijar en un punto
pt.SetPt(10,10);
y posteriormente lo podemos incrementar en 2 unidades
en x
e y, o sea
pt.OffsetPt(2,2);

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 18
Aquí estamos trabajando con el objetopt.
Intentar accesar un dato privado es ilegal, por ejemplo
pt.xVal=10; // ilegal
Otro ejemplo,
Supongamos la clase fecha
class fecha {
int mes,dia,agno;
public:
void fijar(int,int,int);
void siguiente();
void imprimir();
};
con las siguientes definiciones,
void fecha::fijar(int d,int m, int a) {
dia=d;
mes=m;
agno=a;
}void fecha::siguiente() {
dia++;
if(dia>28)....
}void fecha::imprimir() {
cout<<dia<<"/"<<mes<<"/"<<agno<<'\n';

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 19
}Si definimos un objetohoy, por ejemplo,
fecha hoy;
Como poder obtener eldia,mes yagno del objetohoy ?
Respuesta.
Eldia,mes yagno de hoy son privados. Por lo tanto la
única forma es a través de una función miembro.
Tendremos
entonces que agregar una función miembro a la clase.
Llamemos a esta funciónobtener
En la clase deberá definirse de la siguiente forma :
void obtener(int*,int*,int*);
¿ Cual deberá ser su declaración.?
Tarea: Hacer un programa que cree el objeto hoy de la
clase
fecha. Fije el objeto hoy en 25 de abril de 1996, a
continuación incremente hoy al día siguiente y muestre
el
contenido sin usar el método imprimir y usándolo.
2.2 Funciones en línea
Cuando un método se declara en la misma definición de
la
clases se dice que esta “en línea”, del ejemplo

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 20
class fecha {
int mes,dia,agno;
public:
void fijar(int d,int m, int a)
{dia=d; mes=m; agno=a;}
void siguiente();
void imprimir() {cout<<dia<<"/"
<<mes<<"/"
<<agno<<'\n';}
};

De esta forma se aumenta la eficiencia de los objetos de


la
clase.
Otra forma de declarar las funciones en línea es usando
la
sentenciainline, de esta forma quedaría
inline void fecha::fijar(int d,int m,
int a) {
dia=d;
mes=m;
agno=a;
}La declaración de un método dentro de la definición
ayuda a
la eficiencia, pero atenta contra la claridad del programa.
Conclusión. Usar funciones en línea sólo cuando la sea
muy
importante la eficiencia o cuando la definición sea
realmente
corta.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 21
2.3 Constructores
Supongamos que declaramos un objetopt de la clase
Point y posteriormente, invocamos el métodos OffsetPt
e imprimimos el resultado. ¿ Que ocurre ?
Point pt;
pt.OffsetPt(2,2);
pt.PrintPt();
O creamos el objetohoy de la clasefecha y a
continuación invocamos el métodosiguiente() e
imprimimos la nueva fecha.
fecha hoy;
hoy.siguiente();
hoy.imprimir();
Se debe entonces, declarar el objeto e inmediatamente
despues inicializarlo, O sea,
Point pt;
pt.set(10,10);
y
fecha hoy;
hoy fijar(26,4,96)

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 22
Para que evitar cualquier olvido, el objeto debería poder
inicializarse al momento de su declaración.
Por ejemplo
Point pt(10,10);
y
fecha hoy(26,4,96);
¿ Como debería definirse la clase para que esto ocurra ?
Si se declara un método público con el mismo nombre de
la
clase, entonces se puede realizar.
El método con el mismo nombre de la clase y que tiene
como objetivo inicializar los objetos que se declaren de
la
clase se llaman constructores.
Así la clase quedaría
class Point {
int xVal, yVal;
public:
Point(int x, int y) {xVal=x; yVal=y;}
void OffsetPt(int,int);
void PrintPt() ;
};
Notas :
• E l c o n s t r u c t o r e s t a
d e c l a r a d o e n l í n e a , p e r o n o
e s
necesario.
• E l c o n s t r u c t o r n o d e b e e s t a r
p r e c e d i d o p o r a l g ú n t i p o o
void.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 23
De esta forma ahora podemos declarar,
Point pt(10,10), pt1(0,0), pt2(1,3);
y
fecha hoy(26,4,96), eclipse(5,5,96);
Sería interesante poder usar la misma clase para crear
objetos que permitan manejar puntos en coordenada
polares
u otras.
De igual forma poder escribir las fechas de distinta
manera.
Para resolverlos se puede hacer uso de la “sobrecarga” y
escribir varios constructores uno para cada caso.
Por ejemplo
class Point {
int xVal, yVal;
public:
Point(int x, int y)
{xVal=x; yVal=y;}
Point()
{xVal=yVal=0;}
void OffsetPt(int,int);
void PrintPt() ;
};
Point::Point(float radio,float angulo) {
xVal=(int) (radio*cos(angulo));
yVal=(int) (radio*sin(angulo));
};

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 24
Note que comoxVal eyVal son declarados enteros, es
necesario que la operación sea convertida finalmente a
enteros.
Podemos crear los siguientes objetos
Point pt(10,10), pt1(0.0,0.0), pt2;
Así

• p t t r a b a j a e n c o o r d e n a d a s

c a r t e s i a n a s ,

• p t 1 e n c o o r d e n a d a s p o l a r e s

• p t 2 e n c o o r d e n a d a s

c a r t e s i a n a s p e r o s e i n i c i a l i z a

c o n 0 .
De igual manera con los objetos de la clasefecha.
Se podría ingresar fecha de distintas maneras, por
ejemplo
en forma int dia,char* mes, int* agno.
2.4 Destructores.
En algunos casos los objetos creados, necesitan espacio
en
memoria adicional, el cual debe ser creado en la función
constructor, por ejemplo crear un arreglo,

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 25
class vector {
int tamagno;
int* v;
.
public:
vector(int); // constructor
..
}donde
vector::vector(int t) {
tamagno=t;
v=new int[t];
// asigna espacio a
// un arreglo de t
// enteros
}Sin embargo, una vez que se deja de usar un objeto, se
puede
liberar la memoria que usar, para ello se usa un
destructor.
Los destructores tiene el mismo nombre de la clase pero
están precedidos por un tilde (~)

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 26
ejemplo
class vector {
int tamagno;
int* v;
.
public:
vector(int); // constructor
~vector();
// destructor
.
}donde
vector::~vector() {
delete [] v;
// libera el espacio
// que ocupaba el
// arreglo al que
// apunta v
}

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 27
2.5 Funciones Amigas
Supongamos las clasesvector ymatriz. El vector de 4
elementos y la matriz de 4 columnas o vectores. El
acceso a cada uno de los elementos, se obtiene con la
función
elem().
Si se desea multiplicar, se puede construir una función
que
no pertenezca a ninguna de las clases y lo permita,
esto sería,
vector multiplicar(const matriz& m, const vector& v) {
vector r;
for(int i=0;i<3;i++) {
r.elem(i)=0;
for(int j=0;j<3;j++)
r.elem(i)+=m.elem(i,j)*v.elem(j);
}return r;
}• Desventajas,multiplicar() llama aelem()
4*(1+4*3). Sielem() verifica intervalo => aún mas
tiempo.
• S i m u l t i p l i c a r f u e r a f u n c i ó n
ú n i c a d e l a c l a s e v e c t o r y l a
clase matriz, no habría necesidad de verificar y podría
evitarse la funciónelem().
• P e r o , u n a f u n c i ó n n o p u e d e
s e r m i e m b r o d e d o s c l a s e s .
Recuerde,
tipo clase::función(parámetros);
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 28
Solución. En la definición de clases debe existir forma de
declarar una función que no pertenezca a la clases, pero
que
si tenga acceso a la parte privada de los objetos de la
clase.
Las funciones así declaradas, se llaman funciones amigas
y
se declaran de la siguiente forma
class matriz;
class vector {
float v[4];
//..
friend vector multiplicar(const
matriz&,
const vector&);
}class matriz {
vector v[4];
//..
friend vector multiplicar(const
matriz&,
const vector&);
}Una funciónfriend puede
ser puesta tanto en la parte
privada como en la pública.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 29
Luego la funciónfriend queda como sigue,
vector multiplicar(const matriz& m,
const vector& v) {
vector r;
for(int i=0;i<3;i++) {
r.v[i]=0;
for(int j=0;j<3;j++)
r.v[i]+=m.v[i][j]*v.v[j];
}return r;
}• Una funciónfriend puede ser amiga de más de dos
clases.
• U n a f u n c i ó n m i e m b r o , e s
a d e m á s u n a i n t e r f a z a l a
c l a s e .
• U n a f u n c i ó n m i e m b r o d e u n a
c l a s e p u e d e s e r d e c l a r a d a
amiga por otra, ejemplo,
class x {
//..
void f();
};
class y {
//..
friend void x::f();
};
ésto último se conoce como miembros amigos.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 30
2.6 Ejercicios.
1. Escribir programas completos con las clases Point y
Fecha,
sin usar constructores y usándolos.
3. Defina una clase letra que tenga como funciones:
• e s c r i b i r _ l e t r a i m p r i m a
l a s l e t r a s ‘ a ` , . . , ` z ` y
l o s
dígitos‘0’,..,’9’
• e s c r i b i r _ a s c i i q u e
i m p r i m a s u s v a l o r e s
e n t e r o s , y
• e s c r i b i r _ h e x a
u t i l i z a n d o n o t a c i ó n
h e x a d e c i m a l .
4. Cuales son nombre apropiados para clases, objetos y
métodos : Imprimir, raiz_cuadrada, complejo,
año_bisiesto, fecha, hora.
5. - Escriba definiciones para las clases: complejo,
vector,
matriz.
6. - Escriba las declaraciones de todas las funciones
miembros de las clases anteriores. Use Constructores.
7. - Escriba pequeños programas completos, donde se
creen objetos de las clases anteriores y se pueda usar
cada uno de los métodos o funciones miembros de los
objetos.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 31
3 Más Conceptos sobre Orientación a Objetos
3.1 Relaciones.
3.1.1
Relación “Un - Tipo - De” (A - Kind - Of
Relationship)
Consideremos que tenemos que escribir un programa
para dibujar variosobjetos tales como puntos, círculos,
rectángulos, triángulos etc.
Para cadaobjeto debemos tener unaclase. Por ejemplo, si
usamos un pseudo lenguaje para definir la clase punto,
tenemos :
class Punto {
atributos:
int x, y
métodos:
fijarX(int nuevoX)
obtenerX()
fijarY(int nuevoY)
obtenerY()
}

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 32
Si continuamos definiendo una clase para definir círculos
tenemos,
class Circulo {
attributos:
int x, y, radio
métodos:
fijarX(int nuevoX)
obtenerX()
fijarY(int nuevoY)
obtenerY()
fijarRadio(int nuevoRadio)
obtenerRadio()
}Dondex ey define el centro de losobjetos de circulo.
Si comparamos ambas clases se observa lo siguiente:
• A m b a s c l a s e s t i e n e n l o s
e l e m e n t o s x e y . E n l a c l a s e
Punto, estos describen la posición del punto, en la clase
Circulo, estos describen el centro del circulo. Asíx ey,
tienen el mismo significado; en ambas clases describen,
a
través de un punto, la posición del objeto asociado.
• A m b a s c l a s e s o f r e c e n e l
m i s m o c o n j u n t o d e m é t o d o s
p a r a
fijar y obtenerx ey.
• L a c l a s e C i r c u l o a g r e g a u n
n u e v o e l e m e n t o l l a m a d o r a d i o
y los métodos de acceso correspondiente.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 33
Conociendo las propiedades de la clase Punto, se puede
describir un círculo como un punto+ un radio y los
métodos
de acceso de este. De esta forma
un círculo es “ A - Kind - Of” punto.
(un circulo es un tipo de punto)
Sin embargo, un círculo es un poco más especializado.
La relación “A - Kind - Of” es usada a nivel de clases
Para esta relación comúnmente se usa
• L a s c l a s e s e n c e r r a d a s d e n t r o
d e r e c t á n g u l o s .
• E l n o m b r e d e l a c l a s e
c o m i e n z a c o n m a y ú s c u l a
• E l s e n t i d o d e l a f l e c h a
i n d i c a l a r e l a c i ó n “ A - K i n d
-
Of”.
3.1.2
Relación “Es Un(a)” ( Is - A relationship)
Si creamos objetos de tales clases, su relación será “Es -
Un(a)” (Is - A).
Ya que la claseCirculo es un tipo dePunto, un objeto de
Circulo, digamos circulo es un punto.
Consecuentemente, cada círculo se comporta como un
punto. Por ejemplo, un punto se puede mover en la
dirección
Círculo
Punto
A - Kind - Of
Un - Tipo - De
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 34
x alterando el valor de x. De manera similar se puede
mover
un círculo.
Para representar la relación “Es - Un” se usará :
• L o s o b j e t o s s e e s c r i b i r á n
c o n l e t r a m i n ú s c u l a .
• L o s r e c t á n g u l o s t e n d r a n l a s
e s q u i n a s r e d o n d e a d a s .
3.1.3
Relación “Parte - De”
Algunas veces se necesita construir un objeto para
combinarlo con otros. En la programación procedural se
puede usar estructuras o records.
Supongamos que se han creado varias clases para
diferentes
figuras, entre ellaCirculo yTriangulo.
Si decidimos crear una figura especial para representar
nuestro logo, que consiste de un círculo y un triángulo.
Así nuestro logo tendrá dospartes, círculo y triángulo que
son “Parte - De” nuestro logo, es decir:
circulo
punto
Is - A
Es - Un
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 35
class Logo {
atributos:
Circulo circulo
Triangulo triangulo
métodos:
fijarLogo(Punto donde)
}3.1.4
Relación “Tiene - Un”
Esta es la relación inversa de la relacion “Parte - De”
3.2 Herencia
Con la herencia podemos usar la relación “A - Kind -
Of”
para clases y la relación “Is - A” para objetos.
Las clases que son “A - Kind - Of” otra clase comparte
propiedades de las últimas. Por ejemplo si se declara la
clase
Circulo como “heredada de” Punto, se tiene:
Circulo
Triangulo
Logo
Parte - De
Parte - De
Circulo
Triangulo
Logo
Parte - De
Parte - De
Tiene - Un
Tiene - Un

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 36
class Circulo heredada de Punto {
atributos:
int radio
metodos:
fijarRadio(int nuevoRadio)
obtenerRadio()
}La claseCirculo hereda todos los atributos y métodos de la
clasePunto, por lo tanto no necesita definir los atributos y
métodos Punto.
A nivel de objetos, un circulo, podría usar un punto,
porque
un circulo es un punto. Por ejemplo se puede definir un
objeto circulo y fijar su centro se la siguiente forma :
Circulo acirculo
acirculo.fijarX(1)
// heredada dePunto
acirculo.fijarY(2)
acirculo.fijarRadio(3)//
agregada aCirculo
La relación “Es un” implica que podemos usar un circulo
en
cualquier parte donde exista un punto.
Por ejemplo si escribimos una función llamadamueve, que
permite mover un punto en la dirección x
mueve(Punto apunto, int delta_x) {
apunto.fijaX(apunto.obtenerX()+delta_x)
}
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 37
Un circulo heredado de punto puede usar un círculo
como
argumento, para mover el punto centro.
Circulo acirculo
...
move(acirculo,10)
// mueve el circulo
// moviendo el punto centro.
Definiciones.-
Herencia.- Es el mecanismo con el cual una clase A
hereda
las propiedades de la clase B. Se dice “A es heredada de
B”.
Los objetos de la clase A tiene acceso a los atributos y
métodos de la clase B sin necesidad de redefinirlos.
Superclase/Subclase.- Si A es heredada de B, entonces B
es
llamada superclase de A y A es llamada subclase de B.
Los objetos de una subclase comparten el mismo
comportamiento que los objetos de la superclase.
Las superclases también son conocidas como clases
padres o
clases base y las subclases como clases hijas o clases
derivadas.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 38
Del ejemplo
3.3 Herencia Múltiple
Una clase puede ser subclase de mas de una superclase.
Una subclase por lo tanto puede “mesclar” las
propiedades
heredadas de las superclases.
Supongamos que existe una claseString que permite
manipilación de texto. Por ejemplo con un método que
permiteagregar otro texto. Si en nuestro programa que
dibuja objetos queremos agregar texto.
Sería interesante que además podamos podamos mover
el
texto en el dibujo.
Para resolver el problema crearemos una clase
String_Dibujable que herede las propiedades de
Puntoy String.
Punto
Circulo
heredada de
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 39
En el pseudo lenguaje usaremos coma (,) para separar las
múltiples herencias.
class String_Dibujable heredada de
Punto, String
{
atributos:
// todos los heredados de las
// superclases
métodos:
// todos los heredados de las
// superclases
}Podemos usar objetos deString_Dibujable como si
fueran objetosPunto oString. Así
Punto
String
String_Dibujable
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 40
String_Dibujable dstring
...
move(dstring, 10)
...
Esto es posible porquedstring es unpunto ( donde
punto es un objeto de Punto)
Por otro lado si en la claseString existe el método agregar
para agregar texto, o sea también podemos hacer,
dstring.agregar(“Esta caja es ...”)
Definición.-
Si la clase A hereda de mas de una clase, por ejemplo de
B1,
B2, ..., Bn, podemos hablar de múltiple herencia. Esto
puede
producir conflictos de nombre si al menos dos de las
superclases definen propiedades con el mismo nombre.
El problema de conflicto de nombre puede ser resuelto
de la
siguientes dos formas :
1. El orden en el cual las superclases son provistas.
2. La subclase puede resolver el conflicto especificando
la
superclase.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 41
Otra forma es usando otra superclase para las clases que
heredan.
Las múltiples herencias son un mecanismo poderoso, sin
embargo puede producir conflictos de nombres.
3.3.1
Clases Abstractas
Con herencia forzamos a una subclase a tener las mismas
propiedades que la superclase. Consecuentemente, los
objetos de una subclase tienen el mismo comportamiento
que los objetos de la superclase.
A
B
C
D

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 42
En el programa de dibujo, cada objeto deberá proveer un
método para dibujar su área. Sin embargo, dibujar un
círculo
es diferente a dibujar un rectángulo.
Supongamos el métodoprint(). que fuerce a todos los
objetos dibujables a tener tal método. Para esto
definamos la
claseObjeto_Dibujable de la cual todos los objetos
dibujables heredan sus propiedades :
abstracta class Objeto_Dibujable {
atributos:
métodos:
print()
}Se introduce la palabra clave abstracta, para especificar
que
las heredadas deben re definir el métodoprint().
Así, desde el punto de vista de una clase abstarcta las
propiedades estas especificadas, pero no definidas.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 43
Ejemplo
class Punto heredada de Objeto_Dibujable
{atributos:
int x,y
métodos :
fijarX(int nuevoX)
obtenerX()
fijarY(int nuevoY)
obtenerY()
print()
//re definida para Punto
}Definición.
Una clase A es llamada abstracta si sólo es usada como
superclase para otras clases. La clase A sólo especifica
propiedades. Esta no es usada para crear objetos. Las
clases
derivadas deben definir las propiedades de A.
3.3.2
Ejercicios
1.- Herencia. Considere los siguientes programas de
dibujo.
a) Defina la claseRectángulo por herencia dePunto. El
punto debe indicar la esquina superior izquierda del
rectángulo. ¿ Cuales son sus atributos. ?. ¿ Que métodos
adicionales debe agregar ?.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 44
b) Todos los ejemplos anteriores estan basados en dos
dimensiones. Si ahora introduce objetos en tres
dimensiones
como esferas y cubos. Diseñe una claseEsfera que use la
ClasePunto3D. Especifique el rol delpunto en una
esfera. ¿ Que relación existe entre la clase Puntoy
Punto3D?
c) Que funcionalidad le damover() a los objetos 3D ?.
Puede usarse.
d) Dibuje un grafo de herencia que incluya las clases
Objeto_Dibujable, Punto, Círculo,
Rectángulo, Punto3D y Esfera.
e) Fijece en el gráfo de la claseEsfera. . ¿ Puede la
siguiente ser una definición ?
Punto
Circulo
Esfera
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 45
class Esfera heredada de Circulo {
atributos:
int z
// agrega tercera dimensión
métodos:
fijarZ(int nuevoZ)
obtenerZ()
}De razones para ventajas y desventajas de esta
alternativa.
2.- Herencia Múltiple. Compare el gráfo de la figura con
el
de clase. ¿Cuales son las diferencias ?. Que conflictos de
nombres ocurren ?
A
B
C
D
A

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 46
4 Herencia en C++
Asumamos que tenemos la clasePunto como,
class Punto {
int _x, _y;
public:
Punto() {_x=_y=0;}
Punto(const int x, const int y)
{_x=x; _y=y;}
~Punto() {// nada }
void fijarX(const int x){_x=x;}
void fijarY(const int y){_y=y;}
int obtenerX(){return _x;}
int obtenerY(){return _y;}
}La palabra usada anteriormente como“heredada de”
se reemplaza por dos puntos (:).
Si la clase Punto3D se hereda de la clase Punto se
escribe,

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 47
class Punto3D : public Punto {
int _z;
public:
Punto3D(){fijarX(0);fijarY(0);_z=0}
Punto3D(const int x,
const int y,
const int z,) {
fijarX(x);fijarY(y);_z=z
}
~Punto3D() {// nada }
void fijarZ(const int z){_y=z;}
int obtenerZ(){return _z;}
}4.1 Tipos de Herencia.
En C++ existen dos tipos de herencia :
Pública
Privada
Si se usa herencia pública:
Todos lo que es declarado privado en la superclase,
permanece privado.
Todos lo que es declarado público en la superclase,
permanece público.
Si se usa herencia privada :
Todo lo declarado en la superclase (público y privado),
es
privado en la subclase.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 48
4.2 Construcción
Note que la inicialización de una instancia dePunto3D se
hace usando un constructor, el cual llama los métodos
públicos dePunto para inicializarx ey.
Sin embargo, podría haberse usado el constructor dePunto,
es decir,
class Punto3D : public Punto {
int _z;
public:
Punto3D():Punto(){_z=0;}
Punto3D(const int x,
const int y,
const int z,): Punto(x,y)
{_z=z; }
~Punto3D() {// nada }
void fijarZ(const int z){_y=z;}
int obtenerZ(){return _z;}
}Si se usan mas superclases, los constructores se separan
por
comas.
Supongamos que la clase Logo esta formada sólo por un
objeto de la claseCirculo y otro de la clase
Rectangulo, entonces, quedaría

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 49
class Logo {
Circulo acirc;
Rectangulo arec;
...
public:
Logo(Circulo c, Rectangulo r):
Circulo(a),Rectangulo(r) {}
....
}
De acuerdo a esto la clasePunto pudo haber sido escrita
class Punto {
int _x, _y;
public:
Punto():_x(0),_y(0) {}
Punto(const int x, const int y):
_x(x),_y(y){}
...
...
}4.3 Destrucción
Si un objeto es destruido, los destructores de las
superclases
también son invocados.
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 50
4.4 Herencia Múltiple.
Las superclases se separan por comas, ejemplo
class StringDibujable: public Punto,
public ObjetoDibujable {
...
public:StringDibujable(...):Punto(...),
ObjetoDibujable(...)
{ ... }
};
4.5 Polimorfismo
Es posible crear métodos virtuales de alguna clase
particular,
para poder mas tarde se definidos. En C++
class ObjetoDibujable {
public:
virtual void print();
};
Si ahora declaramos
class Punto : public ObjetoDibujable {
...
public:
void print(){ ... // definición }
}

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 51
De nuevoprint() es un método virtual, porque hereda
esta propiedad de ObjetoDibujable.
Si se crea una función cualquiera, encargada de dibujar
un
ObjetoDibujable cualesquiera, puede ser definida
como :
void desplegar(const ObjetoDibujable
&obj) {
// instrucciones necesarias previas
obj.print();
}Cuando se usa métodos virtuales, algunos compiladores
reclaman, si el destructor de la correspondiente clase no
es
declarado también virtual.
Esto es necesario cuando se usan punteros a una subclase
(virtual) y se desea destruir objetos de estos últimos.
Si el destructor es virtual, se invoca al destructor del
objeto
actual referenciado ( y así, recursivamente a todos los
destructores de las superclases). Ejemplo

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 52
class Color {
public:
virtual ~Color();
};class Rojo: public Color {
public:
~Rojo(); //virtualmente heredada de Color
}class RojoFuerte: public Rojo {
public:
~RojoFuerte();
};
Si se definepaleta como,
Color *paleta[3];
paleta[0]=new Rojo; //dinámicamente crea un nuevo Rojo
paleta[1]=new RojoFuerte;
paleta[2]=new Color;
El operadornew crea un nuevo objeto del tipo
especificado
en memoria dinámica y retorna un puntero de éste. Así,
new Rojoretorna un puntero a un objeto de la clase
Rojo y lo asigna al primer elemento del arreglo paleta.
Los elementos de paleta son punteros aColor y porque
Rojoes-un Color
la asignación es válida.
El operador contrario esdelete, que explícitamente
destruye un objeto referenciado por un puntero, de esta
forma se puede usar

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 53
delete palette[0];
//invoca al destructor ~Rojo y de ~Color()
delete palette[1];
//invoca a destructor ~RojoFuerte y ~Color()
delete palette[2];
// invoca al destructor ~Color()
La invocación a varios destructores es debido a que los
destructores son virtuales.
Si los destructores no hubiesen sido declarados como
virtuales sólo se habría invocado el destructor~Color.
4.6 Clases Abstractas
Las clases abstractas son definidas como clases
ordinarias.
Sin embargo, algunos de sus métodos pueden ser
diseñados
para que necesariamente deban ser definidos en las
subclases.
Llamaremos signature o firma al tipo que retorna,
nombre y
parámetros que usa, pero no a la definición.
Ejemplo,
class ObjetoDibujable {
public:
...
virtual void print()=0;
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 54
};
Con “=0” estamos obligando a el métodoprint() sea
definido en la subclase.
También a este tipo de métodos se les denomina métodos
puros.
La clases abstractas contienen sólo métodos puros.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 55
5 Sobrecarga de Operadores
Para tipos definidos por el usuario, es posible re-definir
los
operadores establecidos para los tipos concretos, es decir
+,
-, * , / , etc.
Por ejemplo supongamos la claseComplejo de la siguiente
forma
class Complejo {
double _real, _imag;
public:
Complejo(): _real(0.0), _imag(0.0) {}
Complejo(const double real,
const double imag) :
_real(real), _imag(imag) {}
Complejo suma(const Complejo op);
Complejo mul(const Complejo op);
...
};
Luego si se define
Complejo a(1.0, 2.0), b(3.5, 1.2), c;
c=a.suma(b);
se asigna la suma dea yb ac.
Esto es correcto, sin embargo resulta mas entendible usar
el
operador+.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 56
Afortunadamente C++ permite la sobre carga de
operadores.
De esta forma, usando sobrecarga de operadores se
escribe :
class Complejo {
....;
public:
...
Complejo operator+(const Complejo
&op) {
double real = _real+op._real,
imag = _imag+op._imag;
return(Complejo(real,imag));
}...
};
Ahora podemos escribir la expresión anterior como :
c = a + b;
esto es interpretado como,
c = a.operator+(b);
si queremos usar la función de la siguiente forma :
c = operator+(a,b);
se comete un error porque la sobrecarga del operador no
esta
definida con dos argumentos :

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 57
Por otra parte se dice que por definicióna+b es
equivalente
aoperator+(a,b), por lo tanto se debe definir como,
Complejo operator+(Complejo a1, Complejo a2) {
return complejo(a1._real + a2._real,
a1._imag+a2._imag)
}sin embargo, es necesario accesar la parte real y
imaginaria
de un Complejo, por lo tanto una buena definición sería,
class Complejo {
double _real, _imag;
public:
double real(return _real);
double imag(return _imag);
...
...
};
Complejo operator+(Complejo a1, Complejo a2) {
return complejo(a1.real + a2.real,
a1.imag+a2.imag)
}Las funciones amigas permiten accesar la parte privada,
entonces podría resultar mejor declarar las clase y sus
operadores como sigue,

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 58
class Complejo {
double _real, _imag;
public:
...
friend Complejo operator+(Complejo a1,
Complejo a2);
...
...
};
Complejo :: friend Complejo operator+(Complejo a1,
Complejo a2) {
return complejo(a1.real + a2.real, a1.imag+a2.imag)
}
...
...
LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 59
La clase completa quedaría,
class Complejo {
double _real, _imag;
public:
Complejo(double r=0, double i=0)
{_real=r; _imag=i; }
void print();
friend Complejo operator+(Complejo,Complejo);
friend Complejo operator*(Complejo,Complejo);
friend Complejo operator/(Complejo,Complejo);
};
void
Complejo :: print(){
cout << _real << “ + “<<_imag <<‘\n’;
}Complejo
operator+(Complejo a1, Complejo a2) {
return complejo
(a1._real + a2._real, a1._imag+a2._imag)
}Complejo
operator*(Complejo a1, Complejo a2) {
plejo(a1._real*a2._real -
a1._imag*a2._imag,
a1._real*a2._imag +
a1._imag*a2._real)

}Tarea
Complejo
operator/(Complejo a1, Complejo a2)

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 60
6 Tipos Genéricos
Los Tipos de Datos Abstractos (TDA) se usan para
definir
tipos creados por el usuario. A partir de los cuales nacen
las
clases.
Por ejemplo se puede pensar en una lista de manzanas,
autos
o cualquier lista.
La definición semántica de la lista es siempre la misma.
Solo cambia el tipo de datos de acuerdo al tipo de lista.
Esta información adicional puede ser especificada por un
parámetro genérico el cual es especificado al momento de la
creación de la instancia..
De esta forma una instancia de un TDA genérico es una
instancia de una variante particular de un TDA.
Por ejemplo
Lista<Manzanas> Lista_de_Manzanas
Los paréntesis en ángulos encierran el tipo de dato
variante
del TDALista.
Lista_de_Manzanas tiene las mismas interfaces de
cualquier lista pero funciona con instancias de tipo
Manzanas.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 61
Cuando se define una clase, debemos especificar que
estamos definiendo un tipo genérico. Sin embargo no se
sabe
que tipo de clase se usará.
O sea, se debe definir una clase con un “recipiente” donde
se
indique el tipo de clase.
La definición de clase debe proveer un “molde”
(template).
La clase, de acuerdo a nuestra definición esta definida
para
un tipo particular de objetos.
Un ejemplo para la definición para un tipo genérico será:
template class Lista T
{
atributos :
...//Datos necesarios
métodos :
agregar (T elemento)
T obtener_primero()
T obtener_proximo()
...
}La clase anterior es como cualquier clase. Sin embargo la
clase lista es declarada como un “molde” para varios
tipos
de listas.
El identificador T es el “recipiente”.
Por ejemplo para una lista de manzanas.

LENGUAJES DE PROGRAMACIÓN
Orientación a Objetos
Página 62
Lista <Manzanas> Lista_de_Manzanas
Manzanas una_manzana, otra_manzana
Manzanas.agregar(otra_manzana)
Manzanas.agregar(una_manzana)
La primera línea declaraLista_de_Manzanas como una
lista de Manzanas.
La definición anterior es similar a:
class Lista {
atributos :
...//Datos necesarios
métodos :
agregar (Manzana elemento)
Manzana obtener_primero()
Manzana obtener_proximo()
...
}(Debe haber una definición de manzanas)
El compilador debe poder crear diferentes listas es decir:
Lista <Manzana> Lista_de_Manzanas
Lista <Auto> Lista_de_Autos
Podemos adicionalmente declarar mas listas de
manzanas, es
decir,
Lista <Manzana> una_Lista
Lista <Manzana> otra_Lista

Programacion Orientada a Objetos


Descargar gratis este documentoImprimirMóvilColeccionesDenunciar documento
¿Quiere denunciar este documento?
Por favor, indique los motivos por los que está denunciando este documento
Principio del formulario
b7a1ea565d7faa

doc

Spam o correo basura

Contenido para adultos con pornografía

Detestable u ofensivo
If you are the copyright owner of this document and want to report it, please follow
these directions to submit a copyright infringement notice.
Denunciar Cancelar
Final del formulario

Este es un documento privado.


Información y clasificación
Lecturas:
121,124
Subido:
03/12/2007
Categoría:
Recetas/Menús
Clasificación:
4.94444 5 false false 0

36 Ratings()
Derechos de autor:
Funciones no comerciales
Apuntes Universidad de Chile
Programming
Technology
literature
Other
object
oriented
PROGRAMACION
oo
orientada
objetos
aplica programacion
(mas etiquetas)
Programming
Technology
literature
Other
object
oriented
PROGRAMACION
oo
orientada
objetos
aplica programacion
programa poo
eclipse area
ejercicio echo
aobjeto
publica privada
mandar
encuentra
resueltos codificados
programacion estructural
si
metodos atributos
(menos)
Síganos
merovingio
Compartir e incluir
Documentos relacionados
AnteriorSiguiente
1.
p.

p.

p.

2.

p.

p.
p.

3.

p.

p.

p.

4.

p.
p.

p.

5.

p.

p.

p.

6.
p.

p.

p.

7.

p.

p.
p.

8.

p.

p.

p.

9.

p.
p.

p.

10.

p.

p.

p.

11.
p.

p.

p.

12.

p.

p.
p.

13.

p.

p.

p.

14.

p.
p.

p.

Más material de este usuario


AnteriorSiguiente
1.

2 p.

233 p.

21 p.

2.
49 p.

13 p.

154 p.

3.

38 p.

165 p.
58 p.

4.

30 p.

37 p.

18 p.

5.

18 p.
62 p.

11 p.

6.

35 p.

68 p.

43 p.

7.
90 p.

8 p.

30 p.

8.

70 p.

9 p.
42 p.

9.

52 p.

Readcasters nuevos

Agregar un comentario
Principio del formulario
b7a1ea565d7faa

Enviar
Caracteres: 400
document_comme

4gen

Final del formulario


Imprimir este documento
Alta calidad
Open the downloaded document, and select print from the file menu (PDF reader
required).
Descargar e imprimir
You Must be Logged in to Download a Document
Utilice su nombre de usuario de Facebook y vea lo que sus amigos leen y comparten.
Otras opciones de nombre de usuario

Login with Facebook


Principio del formulario
http://es.scribd.co http://es.scribd.co

9762 dow nload Scribd.logged_in

Final del formulario

Inscripción
No tengo una cuenta de Facebook
Principio del formulario
b7a1ea565d7faa

9762 dow nload Scribd.logged_in

Dirección de correo electrónico (obligatoria)

Crear nombre de usuario (obligatorio)

Contraseña (obligatoria)
Enviarme el boletín informativo de Scribd y las notificaciones ocasionales
relacionadas con mi cuenta

Inscríbase Política de privacidad


Recibirá notificaciones por correo electrónico con respecto a la actividad de su cuenta.
Puede administrar estas notificaciones en la configuración de su cuenta. Nos
comprometemos a respetar su privacidad.
Final del formulario

¿Por qué inscribirse?

Para descubrir y conectarse con personas que comparten intereses similares.

Publique sus documentos de una manera rápida y fácil.


Comparta su interés por la lectura en Scribd y sitios sociales.

¿Ya tiene una cuenta en Scribd?


Principio del formulario
b7a1ea565d7faa

9762 dow nload Scribd.logged_in

Dirección de correo electrónico o nombre de usuario

Contraseña

Ingresar ¿Problemas para ingresar?


Final del formulario

Inicio de sesión correcto


Ahora, volviendo a usted...

«Volver a inicio de sesión


Restablecer su contraseña
Por favor, ingrese su dirección de correo electrónico a continuación para restablecer la
contraseña. Le enviaremos un correo electrónico con instrucciones sobre cómo
continuar.
Principio del formulario
b7a1ea565d7faa

Dirección de correo electrónico:

También es necesario que proporcione un


nombre de usuario para esta cuenta.

Nombre de usuario:

Enviar
Final del formulario
Subir un documento
Principio del formulario

Buscar Documentos
Final del formulario
• ¡Síganos!
• scribd.com/scribd
• twitter.com/scribd
• facebook.com/scribd
• A cerca de
• Prensa
• Blog
• Socios
• Scribd 101
• Material de la web
• Tienda Scribd
• Asistencia técnica
• Preguntas más frecuentes
• Desarrolladores / API
• Puestos de trabajo
• Condiciones
• Derecho de autor
• Privacidad
Copyright © 2011 Scribd Inc.
Idioma:
Español