Sunteți pe pagina 1din 11

03) Gonzlez, L. A. (1988). Clases en INFO 161.

Lenguajes de programacin: Programacin orientada


a objetos. Chile: Valdivia, pp. 7-17.

2 Clases.
Un objeto es una instancia de una clase.
Un objeto tiene un estado y uno o varios mtodos.
La estado es privado y puede ser accesado solo su propios
Mtodos.
Objeto

Una clase, es a la cual pertenecen los objetos.


Por lo tanto.
Una clase tiene una parte pblica y una parte privada.
La parte privada tiene que ver con el estado del objeto.
La parte pblica es la interfaz al objeto.
Ejemplo:

Se declara una clase llamada Point.


Tiene cuatro componentes. XVal, yVal, SetPt y
Offset.
Tiene dos datos miembros y dos funciones miembros.
La parte privada est compuesta por los datos miembros.
La parte pblica est compuesta por las funciones miembros y la forma en cmo podr
accesarse los objetos.
No importa el orden de la parte pblica y privada.
Si la primera parte es la privada, se puede omitir prvate.
Es decir quedara.

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

El encabezado de las declaraciones de las funciones miembros deben ser de la siguiente forma:
Tipo clase :: funcin (parmetros)
Por ejemplo

Esto se lee: De la clase Point se declara setPt como


...
La funcin setPt asigna los valores x e y a los valores privados xVal, yVal.
La funcin OffsetPt le agrega a xVal e yVal, los valores de x e y.
O sea xVal+=x; equivale a xVal=xVal+x;
2.1 Creacin de Objetos de una clase.
Se hace de la misma que la declaracin de los tipos concretos, por ejemplo,
Point punto_1, punto_2, xy, pt;
aqu, punto_1, punto_2, xy y pt, son objetos de la clase Point .

Se pueden crear infinitos objetos de una clase.


Se puede accesar un mtodo pblico de un objeto, de la siguiente manera.

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

Objeto. Mtodo (parmetros);


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);
Aqu estamos trabajando con el objeto pt.
Intentar accesar un dato privado es ilegal, por ejemplo
pt.xVal=10; // ilegal
Otro ejemplo,
Supongamos la clase fecha

Con las siguientes definiciones,

Si definimos un objeto hoy, por ejemplo, fecha hoy;


Como poder obtener el da, mes y agno del objeto hoy?
Respuesta.
El dia, mes y agno de hoy son privados. Por lo tanto la nica forma es a travs de una funcin
miembro. Tendremos entonces que agregar una funcin miembro a la clase.
Llamemos a esta funcin obtener En la clase deber definirse de la siguiente forma:
Void obtener (int*, int*, int*);
Cual deber ser su declaracin?
2.2 Funciones en lnea
Cuando un mtodo se declara en la misma definicin de la Clases se dice que est en lnea,
del ejemplo:

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

De esta forma se aumenta la eficiencia de los objetos de la clase.


Otra forma de declarar las funciones en lnea es usando la sentencia inline, de esta forma
quedara:

La declaracin de un mtodo dentro de la definicin ayuda a la eficiencia, pero atenta contra la


claridad del programa.
Conclusin. Usar funciones en lnea slo cuando la sea muy importante la eficiencia o cuando
la definicin sea realmente corta.
2.3 Constructores
Supongamos que declaramos un objeto pt de la clase Point y posteriormente, invocamos el
mtodos OffsetPt e imprimimos el resultado. Qu ocurre?
Point pt;
pt.OffsetPt (2, 2);
pt.PrintPt ();
O creamos el objeto hoy de la clase fecha y a continuacin invocamos el mtodo siguiente() e
imprimimos la nueva fecha.
Fecha hoy;
Hoy. Siguiente ();
hoy.imprimir ();

Se debe entonces, declarar el objeto e inmediatamente despus inicializarlo, O sea,


Point pt;
pt.set (10,10);
Y
Fecha hoy;
Hoy fijar (26,4, 96)
Para que evitar cualquier olvido, el objeto debera poder inicializarse al momento de su
declaracin.

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

10

Por ejemplo:
Point pt(10,10);
y
fecha hoy(26,4,96);
Cmo debera definirse la clase para que esto ocurra?
Si se declara un mtodo pblico con el mismo nombre de la clase, entonces se puede realizar.
El mtodo 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 quedara:
class Point {
int xVal, yVal;
public:
Point(int x, int y) {xVal=x; yVal=y;}
void OffsetPt(int,int);
void PrintPt() ;
};
Notas :
El constructor esta declarado en lnea, pero no es necesario.
El constructor no debe estar precedido por algn tipo o void.
De esta forma ahora podemos declarar,

Sera 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:

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

11

Note que como xVal e yVal son declarados enteros, es necesario que la operacin sea
convertida finalmente a enteros.
Podemos crear los siguientes objetos
Point pt (10,10), pt1 (0.0, 0.0), pt2;
As
Pt trabaja en coordenadas cartesianas,
pt1 en coordenadas polares y
pt2 en coordenadas cartesianas pero se inicializa con 0.
De igual manera con los objetos de la clase fecha.
Se podra 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 funcin constructor, por ejemplo crear un arreglo,

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 estn precedidos por un tilde (~).

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

12

2.5 Funciones Amigas


Supongamos las clases vector y matriz. 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 funcin elem ().
Si se desea multiplicar, se puede construir una funcin que no pertenezca a ninguna de las
clases y lo permita, esto sera,

Desventajas, multiplicar () llama a elem ()


4*(1+4*3). Si elem () verifica intervalo => an ms tiempo.
Si multiplicar fuera funcin nica de la clase vector y la clase matriz, no habra necesidad de
verificar y podra evitarse la funcin elem ().
Pero, una funcin no puede ser miembro de dos clases.

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

13

Recuerde, tipo clase: funcin (parmetros);


Solucin. En la definicin de clases debe existir forma de declarar una funcin 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:

Una funcin friend puede ser puesta tanto en la parte privada como en la pblica.
Luego la funcin friend queda como sigue,

Una funcin friend puede ser amiga de ms de dos clases.


Una funcin miembro, es adems una interfaz a la clase.
Una funcin miembro de una clase puede ser declarada
amiga por otra, ejemplo,

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

14

sto ltimo se conoce como miembros amigos.


3 Ms Conceptos sobre Orientacin a Objetos
3.1 Relaciones.
3.1.1 Relacin Un - Tipo - De (A - Kind Of Relationship)
Consideremos que tenemos que escribir un programa para dibujar varios objetos tales como
puntos, crculos, rectngulos, tringulos etc.
Para cada objeto debemos tener una clase. Por ejemplo, si usamos un pseudolenguaje para
definir la clase punto, tenemos:

Si continuamos definiendo una clase para definir crculos tenemos,

Donde x e y define el centro de los objetos de circulo.


Si comparamos ambas clases se observa lo siguiente:
Ambas clases tienen los elementos x e y. En la clase Punto, estos describen la posicin del
punto, en la clase Crculo, estos describen el centro del circulo. As x e y,
Tienen el mismo significado; en ambas clases describen, a travs de un punto, la posicin del
objeto asociado.
Ambas clases ofrecen el mismo conjunto de mtodos para fijar y obtener x e y.
La clase Crculo agrega un nuevo elemento llamado radio y los mtodos de acceso
correspondiente.

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

15

Conociendo las propiedades de la clase Punto, se puede describir un crculo como un punto +
un radio y los mtodos de acceso de este. De esta forma
Un crculo es A - Kind - Of punto.
(Un crculo es un tipo de punto)
Sin embargo, un crculo es un poco ms especializado.

La relacin A - Kind - Of es usada a nivel de clases Para esta relacin comnmente se usa
Las clases encerradas dentro de rectngulos.
El nombre de la clase comienza con mayscula
El sentido de la flecha indica la relacin A - Kind - Of.
3.1.2 Relacin Es Un(a) (Is - A relationship)
Si creamos objetos de tales clases, su relacin ser Es - Un(a) (Is - A).
Ya que la clase Circulo es un tipo de Punto, un objeto de Circulo, digamos circulo es un punto.
Consecuentemente, cada crculo se comporta como un punto. Por ejemplo, un punto se puede
mover en la direccin
x alterando el valor de x. De manera similar se puede mover un crculo.

Para representar la relacin Es - Un se usar:


Los objetos se escribirn con letra minscula.
Los rectngulos tendrn las esquinas redondeadas.

3.1.3 Relacin Parte - De


Algunas veces se necesita construir un objeto para combinarlo con otros. En la programacin
procedural se puede usar estructuras o records.
Supongamos que se han creado varias clases para diferentes figuras, entre ella Circulo y
Triangulo.
Si decidimos crear una figura especial para representar nuestro logo, que consiste de un crculo
y un tringulo.
As nuestro logo tendr dos partes, crculo y tringulo que son Parte - De nuestro logo, es
decir:

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

16

3.1.4 Relacin Tiene - Un


Esta es la relacin inversa de la relacion Parte - De

Material compilado con fines acadmicos, se prohbe su


reproduccin total o parcial sin la autorizacin de cada autor.

17

S-ar putea să vă placă și