You are on page 1of 33

Introduccin a Clases

Programacin Orientada a Objetos (POO)

Literalmente, Programacin con objetos"

Modelamiento del mundo real

Los objetos en el programa surgen de los objetos de la


especificacin del proyecto

Originalmente, C++ fue llamado "C with classes


(C con clases) (The Design and Evolution of C++ by
Stroustrup.)

Clases y Objetos

Una clase es un tipo de datos definido por el


usuario.

Provee un molde o diseo" para mltiples objetos del


mismo tipo.

Un objeto es una instancia de una clase.

Cada objeto tiene una localizacin nica en memoria, y


valores nicos para sus atributos

Una clase contiene atributos (almacenan el estado


del objeto) y operaciones (definen sus
responsabilidades o capacidades):

Atributos y Operaciones
Atributos son las caractersticas comunes entre
todas las instancias de un clase

En C++ y Java son implementadas como variables (tambin

llamadas miembros dato)

Operaciones son implementadas en C++ y Java


como funciones (tambin llamados miembros
funcin o mtodos)

(Objetos del mundo real poseen atributos y operaciones)


4

Representacin de una clase


Nombre de la clase
Atributos
Mtodos
Excepciones

LSD

Ejemplos:
Carro

Marca
Modelo
Ao de matrcula
Potencia
Acelerar( )
Frenar ( )
Girar ( )

Jugador de
Baloncesto

Perro
Nombre
Edad
Peso
Altura

Nombre
Altura
Peso
Edad

Correr( )
Dormir ( )
Ladrar ( )

Lanzar( )
Saltar ( )
DarPase ( )

LSD

Ejemplo: Clase Perro


Una clase contiene atributos (variables) y operaciones
(funciones):
class Perro {
void Correr(int tiempo);
void Ladrar( int tono );
void Dormir( int cantidad );

int peso;
char nombre[30];
int edad;
float altura;

Operaciones

Atributos

};
Perro tevito,pluto;
7

Encapsulacin
Encapsulacin es el acto de ocultar los detalles
de implementacin de una clase de los usuarios
de la clase.
Los usuarios de una clase slo deberan
interactuar con la clase a travs de su interfaz.

La implementacin podra cambiar, pero esto


debera tener efecto mnimo en los usuarios de la
clase.
Los calificadores private y protected fuerzan
encapsulacin en clases C++.

Especificadores de Acceso Pblico y Privado

Todos miembros precedidos por el calificador public son visibles


fuera de la clase

por ejemplo, un miembro pblico es visible desde el main(),


como es el caso de cin.get():
cin.get(); // cin es el objeto, get es la
funcin de acceso pblico.

Todos los miembros precedidos por el calificador private quedan


ocultos para funciones fuera de la clase.

Ellos pueden ser slo referenciados por funciones dentro de la


misma clase

Miembros precedidos por protected pueden ser accedidos por


miembros de la misma clase, clases derivadas y clases amigas
(friend)

Cuadro Resumen (X representa que tiene acceso):


Calificador
Miembros de clase
Friend
Privado
X
X
Protected
X
X
Public
X
X

Clases derivadas
X
X

Otros

Clase Point, revisado


Esta versin usa public y private:
class Point {

private:
int peso;
char nombre[30];
int edad;
float altura;
public:
void Correr(int tiempo);
void Ladrar( int tono );
void Dormir( int cantidad );

};
10

Ejemplo: Clase Auto


Imaginemos que queremos programar la simulacin
de un automvil:
Atributos: marca, nmero e puertas, nmero de
cilindros, tamao del motor

Operaciones:entrada, despliegue, partir, parar,


chequear_gas
La eleccin de qu atributo y operaciones incluir
depende de las necesidades de la aplicacin.
11

Clase Auto
class Auto {
private:
string marca;
int
numPuertas;
int
numCilindros;
int
sizeMotor;
public:
Auto();
void entrada();
void set_numPuertas( int puertas );
void despliegue();
int get_numPuertas();
};

12

Clasificacin de Funciones Miembros en una


Clase

Un accesor es una funcin que retorna un valor desde


su objeto, pero no cambia el objeto (sus atributos).
Permite acceder a los atributos del objeto.
Un mutador es una funcin que modifica su objeto
Un constructor es una funcin con el mismo nombre de
la clase que se ejecuta tan pronto como una instancia
de la clase es creada.
Un destructor es una funcin con el mismo nombre de
la clase y un antepuesto Auto()
Ejemplo...
13

Clase Automvil
class Auto {
private:
string marca;
int
numPuertas;
int
numCilindros;
int
sizeMotor;
public:

Automovil();

// private data

// public functions

// constructor

void entrada();
// mutador
void set_numPuertas( int puertas); // mutador
void despliegue();
// accesor
int get_numPuertas();
// accesor
~Auto();
// Destructor
};

14

Creacin de Objetos
Cuando declaramos una variable usando una clase
como su tipo de dato, estamos creando una
instancia de la clase.
Una instancia de una clase es tambin llamada un
objeto u objeto clase (ej. objeto carro)
En el prximo ejemplo creamos un objeto Auto y
llamamos a sus funciones miembros.

Ejemplo...
15

Creando y accediendo un Objeto


void main()
{
Auto miCarro;
miCarro.set_numPuertas( 4 );
cout << Ingrese todos los datos del auto: ";
miCarro.entrada();
cout << Datos: ";
miCarro.Desplegar();
cout << El auto tiene "
<< miCarro.get_numPuertas()
<< puertas.\n";

}
16

Constructores
Un constructor es una funcin que tiene el mismo nombre
de la clase. Puede aparecer varias veces con distinta lista
de parmetros.
Un constructor se ejecuta cuando el objeto es creado, es
decir tan pronto es definido en el programa. Ej. Cuando la
funcin es llamada en el caso de datos locales, antes de
la funcin main() en el caso de objetos globales.
Un default constructor no tiene parmetros.
Los constructores usualmente inicializan los miembros
datos de la clase.
Si definimos un arreglo de objetos, el constructor por
defecto es llamado para cada objeto:
Perro varios[50];
// constructor 50 veces

17

Implementacin de Constructores
Un constructor por defecto para la clase Punto
podra inicializar X e Y:
class Punto {
private:
int m_X;
int m_Y;
public:
Punto() {
// funcin inicializa
m_X = 0;
m_Y = 0;
}
};

18

Funciones Out-of-Line
Todas las funciones miembro deben ser declaradas
(su prototipo) dentro de la definicin de una clase.
La implementacin de funciones no triviales son
usualmente definidas fuera de la clase y en un
archivo separado.
Por ejemplo para el constructor Punto:
Punto::Punto()
{
m_X = 0;
m_Y = 0;
}
Los :: le permite al compilador saber que
estamos definiendo la funcin Punto de la
clase Punto. Este tambin es conocido como
operador de resolucin de alcance.

19

Clase Auto

class Auto {
private:
string marca;
int
numPuertas;
int
numCilindros;
int
sizeMotor;
public:
Auto();
void entrada();
void set_numPuertas( int puertas);
void despliegue();
int get_numPuertas();
};

20

Implementaciones de las funciones de


Automobile
Auto::Auto()
{
numPuertas = 0;
numCilindros = 0;
sizeMotor = 0;
}
void Auto::Desplegar() const
{
cout << Marca: " << marca
<< ", Puertas: " << puertas
<< ", Cilindros: << numCilindros
<< ", Motor: " << sizeMotor
<< endl;
}
21

Implementacin de la Funcin de entrada

void Auto::Entrada()
{
cout << Ingrese la marca: ";
cin >> marca;
cout << Cuantas puertas? ";
cin >> numPuertas;
cout << Cuantos cilindros? ";
cin >> numCilindros;
cout << size Motor? ";
cin >> sizeMotor;
}

22

Sobrecarga del Constructor


Mltiples constructores pueden existir con
diferente lista de parmetros:
class Auto {
public:
Auto();
Auto( string p_marca, int puertas,
int cilindros, int sizeMoto );
Auto( const Auto & A );
// copy constructor

23

Invocando a un Constructor

// muestra de llamada a constructor:


Auto myCarro;
Auto tuCarro("Yugo",4,2,1000);

Auto esteCarro( tuCarro );

24

Implementacin de un Constructor

Auto::Auto( string p_marca, int puertas,


int cilindros, int sizeMoto )
{
marca = p_make;
numPuertas = puertas;
numCilindros = cilindros;
sizeMotor = sizeMoto;
}

25

Constructor con Parametros


Algunas veces puede ocurrir que los nombres de los
parmetros sean los mismos que los datos
miembros:
numPuertas = numPuertas;
numCilindros = numCilindros;

// ??
// ??

Para hacer la distincin se puede usar el calificador this


(palabra reservada), el cual es un puntero definido
por el sistema al objeto actual:
this->numPuertas = numPuertas;
this->numCilindros = numCilindros;

26

Lista de Inicializacin
Usamos una lista de inicializacin para definir los
valores de las miembros datos en un constructor..
Esto es particularmente til para miembros objetos y
miembros constantes :
Auto::Automobile( string p_marca, int puertas,
int cilindros, int sizeMoto ) :
marca(p_marca),
numPuertas(puertas),
numCilindros(cilindros),
sizeMotor(sizeMoto)
{
}
27

Esquema para identificar Nombres


Microsoft normalmente usa prefijos estndares para
los miembros datos: m_
Microsoft tambin usa letras como prefijos para tipos
de datos:

s = string
n = numeric
b = boolean
p = pointer

En ocasiones usan prefijos ms largos:

str = string, bln = boolean, ptr = pointer, int = integer,


lng = long, dbl = double, sng = float (single precision)

28

Ejemplo: En el caso de Miembros datos para


clase Auto
As es como se veran los miembros datos de la case
Automobile usando prefijos:
class Auto {

private:
string
int
int
int
};

m_strMarca;
m_nNumPuertas;
m_nNumCilindros;
m_nSizeMotor;

Una ventaja es que miembros datos nunca son


confundidos por variables locales.
29

Uso de Const
Siempre usamos el modificador const cuando
declaramos miembros funciones si la funcin no
modifica los datos del objeto:
void desplegar() const;

Esto disciplina a los usuarios de la clase a usar


constantes correctamente en sus programas
Un detalle que puede ser molesto es que un objeto
no puede ser pasado como referencia constante a
una funcin si dentro de la funcin se invoca un
mtodo no definido constante para ese objeto..
Ejemplo ...
30

Ejemplo: Uso de Const

La funcin garantiza
que no modificar el
parmetro
void ShowAuto( const Auto & aCar )
{
cout << Ejemplo de un automovil: ";
aCar.desplegar();
cout << "--------------------------\n";
}
Qu tal si la funcin
desplegar() no est
definida como funcin
constante?
31

Ideas para el Diseo de Clases


Descriptiva: Una clase debera corresponder a una
entidad o proceso en el dominio del problema

Simple: Una clase describe slo los atributos y


operaciones necesarios para el problema en
cuestin.
Operaciones deberan describir acciones o
modificar datos de la clase
Cohesiva: Una clase es autocontenida y no
depende de los detalles de implemantacin de
otras clases.
32

Fin

33

You might also like