Vous êtes sur la page 1sur 16

Clases y Objetos en lenguaje C++

por Fabián Gentile

1
Ort 2009 Gentile Fabián
Objetos, Clases
• Objeto: es una entidad que puede mantener un
estado ( información) y que expone un
comportamiento (operaciones)
Ejemplos de objetos estado

Juan Pablo

Apellido:Garcia Apellido:Sosa
Nombre:Juan Nombre:Franco
Password:Jua Password:franc

getApeNom() getApeNom()
isPasswordOK() isPasswordOK()

Comportamiento (lo que puedo hacer) 2


Ort 2009 Gentile Fabián
Objetos, Clases
• Clase: representa una plantilla o molde
(template) para varios objetos y describe como
dichos objetos están estructurados
internamente.
• Instancia: es un objeto creado a partir de una
clase. La clase describe la estructura de la
instancia, mientras que el estado de la instancia
es definido por las operaciones realizadas por la
instancia.
• Encapsulamiento: es la propiedad que tiene los
objetos de ocultar la manera en que
implementan su comportamiento.
3
Ort 2009 Gentile Fabián
La Clase
Una clase es una implementación de un tipo abstracto de datos TAD.

datos + operaciones TAD


atributos + métodos Clase

• Las clases, como los TAD, son declaraciones.


• Instancias (lo que existe durante la ejecución) equivalen:
variables para un TAD, objetos para una clase.
• Los datos se identifican como atributos en la clase: cada ejemplar
(objeto) de la clase tendrá sus propios atributos.
• Todos los objetos de una clase tienen definido un mismo conjunto de
métodos (operaciones).
• Encapsulamiento de código y datos: la clase es como un módulo.
• Ocultación de información: público/privado ( equivale a interfaz /
implementación )

4
Ort 2009 Gentile Fabián
Las Clases en C++
Sintácticamente la definición de una clase es similar a struct
class NombreClase{// Por defecto el contenido es private
private: Atributo
int _dato; Área Privada
No es visible desde el
exterior
public:
Métodos
void setdato(int dato);
int getdato( ); Área Publica
void mostrar( ); Visible desde el exterior
Servicios que ofrece
};
Siempre debe terminar en punto y coma
5
Ort 2009 Gentile Fabián
Atributos y métodos
• Los atributos deben estar ocultos (ser privados).
(si bien C++ permite declarar atributos públicos, lo correcto es que
los atributos sean privados)
• Los métodos se implementan con funciones miembro. La forma de
las funciones (cabeceras de los métodos públicos) debe ser visible
desde el exterior (pública) y constituyen la interfaz de la clase.
• Puede haber métodos privados (auxiliares para la clase, pero no
serán parte de la interfaz de la clase).

• Interfaz (es lo público) son:


los servicios que ofrece (los métodos públicos).
• Implementación (es lo privado) son:
los atributos,
las cabeceras de los métodos privados y
el código de todos los métodos (tanto los públicos como los
privados).
6
Ort 2009 Gentile Fabián
Métodos Implementados
fuera de la estructura class

Los métodos pueden estar implementados fuera de la estructura class


(lo más correcto sobre todo si contiene más de 2 o 3 instrucciones):
Ejemplo del método mostrar( ):

1 2 3 4 5
tipo Nombre la clase Operador de resolución de ámbito (::) Nombre método parámetros( )

void Clase :: mostrar( ) {


cout << "El dato es: " << _dato << endl;
}
La implementación siempre debe tener las 5 partes y en ese orden.

7
Ort 2009 Gentile Fabián
Métodos insertados
La implementación de los métodos puede también estar en la propia estructura class
en forma de funciones miembro insertadas.No terminan en punto y coma.
Métodos que manipulan a _dato de la clase anterior:
void setdato(int d) { _dato = d; }
int getdato( ){ return _dato; }

Forma general de un método implementado en forma de función miembro insertada:


inline tipo nombre(parámetros) { código }
• El método irá dentro de la estructura class y tanto los parámetros como el código
son opcionales (y no figura tipo en los constructores y destructores, como
veremos más adelante).
• La palabra clave inline se puede omitir (nosotros la omitiremos).
• En el código de los métodos se puede usar todo lo que está declarado en la
clase: lo público y también lo privado.

Por ejemplo, en el método mostrar( ) se puede usar lo siguiente:


atributo dato (privado), método “seteador” setdato (público) y
método “geteador” getdato (público).
8
Ort 2009 Gentile Fabián
Paso de mensajes
• Los objetos se manipulan mediante el paso de mensajes.
Cada objeto entiende tantos mensajes como métodos públicos
están definidos en su clase.

Paso de mensaje:
objeto_receptor • función_miembro_pública( argumentos)

• El paso de mensaje provoca la ejecución del método con igual


nombre que esté definido en la clase del objeto.
• Por lo tanto para la clase anterior Clase, cualquier objeto entiende
tres mensajes diferentes:

getDato( )
setDato( int dato )
mostrar( )

9
Ort 2009 Gentile Fabián
Creación y uso de objetos
La clase ya está terminada (declarada e implementada).
Ya podemos crear objetos y trabajar con ellos:

void main(){
Clase objeto1, objeto2; // 1º suceso Objetos o instancias de la clase

objeto1.setdato(10); // 2º suceso
objeto2.setdato(5); // Paso de mensajes: NombreDelObjeto.Metodo( )
objeto1.mostrar();
objeto2.mostrar();

cout << objeto1.getdato();

} // 3º suceso se destruyen los objetos

Observe que tanto, Objeto1 como Objeto2, aceptan el mismo mensaje, pero
cada uno tiene su propio juego de atributos dato.
10
Ort 2009 Gentile Fabián
La clase (dentro del objeto)
Dentro de la clase

• Se conocen todos los atributos.


• Se conocen todos los métodos (públicos o privados).
• Implementa y/o inserta los métodos ( tanto los públicos y
los privados):
• En el método se trabaja sobre o con el objeto receptor.
• Para invocar un método dentro de otro, basta invocarlo
(sin poner ni receptor ni punto).
• El método puede utilizar también objetos locales y objetos
parámetros.
• Dentro de una clase todos sus elementos son visibles.

11
Ort 2009 Gentile Fabián
Desde fuera del objeto

• No se conocen sus atributos.


• No se conocen sus métodos privados.
• Sólo se conocen los métodos públicos (servicios que
proporciona).
• Se utiliza pasándole mensajes.
Paso de mensaje: objeto.Mensaje(parámetros)

• Se ejecuta el código del método con igual nombre que


esté definido en su clase
(y con parámetros que concuerden).

12
Ort 2009 Gentile Fabián
Categoría de los métodos
En las clases se pueden identificar distintas categorías de métodos:

• Métodos inicializadores: inicializan atributos, piden memoria


dinámica, abren archivos. ejemplo constructores
• Métodos geteadores: devuelven el contenido de los atributos
ejemplo getdato( )
• Métodos seteadores: establecen el contenido de los atributos
(cambian el contenido de un atributo) ejemplo setdato(int )
• Métodos visualizadores: muestran el estado del objeto
( valores de los atributos ) ejemplo verTodo()
• Métodos computadores: realizan cálculos y generan resultados
• Métodos finalizadores: devuelven memoria dinámica, cierran
archivos, etc. Ejemplo destructores
• Otras categorías.
No todas las clases tendrán todas las categorías, en la clase pila por
ejemplo no existirán los set y get (existirán apilar y desapilar)
13
Ort 2009 Gentile Fabián
La clase Punto
class Punto {
private:
float _x;
float _y; // 2 Atributos (Privados)
public:
Punto( ) { _x = 0; _y = 0; } // Método Inicializador
~Punto( ){ …} // Método finalizador
void setx(float x) { _x = x; } // Método Seteador
void sety(float y) { _y = y; } // Método Seteador
float getX( ) { return _x; } // Método geteador
float getY( ) { return _y; } // Método geteador
void verTodo( ){ cout<<_x<<_y;} // Método visualizador
void dibujate( );
}; Finaliza con Punto y coma

void Punto::dibujate(){
...
} No Finaliza con Punto y coma
14
Ort 2009 Gentile Fabián
Convención de denominaciones
Para dar nombre a los elementos de los programas se puede utilizar cualquier
convenio de denominación, pero lo mejor es utilizar uno y ser consecuente.
Aquí vamos a seguir las siguientes reglas:

• Los identificadores se escribirán en general en minúsculas, a excepción, en


los casos que se indique, de ciertas letras.
• Las nombres de clases comenzarán por mayúscula: Clase, Punto,
Circulo.
• Los métodos comenzarán por minúscula: mostrar( ), dibujar( ).
• Lo objetos comenzarán por minúscula: objeto1, punto.
• El nombre de un método geteador comenzara con la palabra get:
getdato( ), getX( ); el método devolverá el valor del atributo.
• El nombre de un método seteador comenzara con la palabra set:
setdato( ), setX( ); el método aceptará el valor del atributo.
• Identificadores compuestos por varias palabras: la segunda y siguientes
palabras llevarán su primera letra en mayúscula: listaObjetosGraficos,
circuloColor.

15
Ort 2009 Gentile Fabián
Representación gráfica
Nombre Nombre de la Clase
Atributos
Atributos definidos en la
Metodos clase

Metodos definidos en la clase

Reponsabilidad de la clase
Representa …

Punto
- int _x Metodos:
- int _y - Indica privado
+ indica publico
+ setX(int) Nombres seguido de los
+ getX():int tipos de los parámetros
+ setY(int) separados por comas y entre
+ getY():int paréntesis.
+ dibujate() Si la funcion devuelve un
Representa un punto valor , el tipo se coloca al final
en el plano
precedido de :
16
Ort 2009 Gentile Fabián