Está en la página 1de 38

Introduccin a la Programacin

orientada a objetos con C++

Informtica Industrial
Ing. en automtica y electrnica Industrial

Objetivos principales

Exponer las ideas bsicas de la


programacin orientada a objetos (POO)
Comparar el enfoque tradicional (prog.
estructurada) con el enfoque OO
Ver cules son las principales diferencias
entre C y C++
Isidro Calvo

Informtica Industrial 2006/07

Qu es la POO?

Es un modelo de programacin ms abstracto


Pretende organizar los programas a imagen y
semejanza de la organizacin de los objetos del
mundo real
Contiene informacin de los objetos + las acciones
que se pueden realizar con ellos

Objetos = Mtodos (Operaciones) + Atributos (Datos)

Pueden crearse varios objetos del mismo tipo a


partir de modelos (Clases)
Isidro Calvo

Informtica Industrial 2006/07

Ejemplo: Una cuenta bancaria

Clase: Cuenta
Atributos (Informacin de la cuenta):

Nombre
Nmero de cuenta
Saldo

Mtodos (Operaciones que se pueden hacer con ella):

Ingresar Dinero
Retirar Dinero
Abonar Intereses
Obtener Saldo Actual
Ordenar Transferencia

Isidro Calvo

Informtica Industrial 2006/07

Lenguajes de programacin OO

Proporcionan mecanismos para estructurar el


cdigo de acuerdo a las caractersticas de la
POO:
Algunos lenguajes OO:

C++
Java
Delphi (Object Pascal)
Visual Basic
Ada
etc

Isidro Calvo

Informtica Industrial 2006/07

Conceptos principales (I)

Objeto: entidad provista de un conjunto de


propiedades o atributos (datos) y de comportamiento
o funcionalidad ("mtodos"). Corresponden a los
objetos reales del mundo que nos rodea, o a objetos
internos del sistema (del programa).
Clase: definiciones de las propiedades y
comportamiento de un tipo de objeto concreto. La
instanciacin es la lectura de estas definiciones y la
creacin de un objeto a partir de ellas.
Isidro Calvo

Informtica Industrial 2006/07

Conceptos principales (II)

Mtodo: algoritmo asociado a un objeto (o a una


clase de objetos), cuya ejecucin se desencadena
tras la recepcin de un "mensaje". Desde el punto de
vista del comportamiento, es lo que el objeto puede
hacer. Un mtodo puede producir un cambio en las
propiedades del objeto, o la generacin de un
"evento" con un nuevo mensaje para otro objeto del
sistema.
Mensaje: una comunicacin dirigida a un objeto,
que le ordena que ejecute uno de sus mtodos con
ciertos parmetros asociados al evento que lo
gener.
Isidro Calvo

Informtica Industrial 2006/07

Conceptos principales (III)

Propiedad o atributo: contenedor de un tipo de


datos asociados a un objeto (o a una clase de
objetos), que hace los datos visibles desde fuera del
objeto, y cuyo valor puede ser alterado por la
ejecucin de algn mtodo.
Evento: un suceso en el sistema (tal como una
interaccin del usuario con la mquina, o un mensaje
enviado por un objeto). El sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente.
Estado interno: es una propiedad invisible de los
objetos, que puede ser nicamente accedida y
alterada por un mtodo del objeto, y que se utiliza
para indicar distintas situaciones posibles para el
objeto (o clase de objetos).
Isidro Calvo

Informtica Industrial 2006/07

Diseo de programas OOs

Concepto tradicional de programa (No


OO):

Lista de instrucciones a ser ejecutadas por


una mquina

Filosofa de diseo OO:

Conjunto de objetos que dialogan entre s


para realizar una serie de tareas

Isidro Calvo

Informtica Industrial 2006/07

Programas OO

Un programa OO es un programa que usa


objetos. Por ejemplo:

Una aplicacin bancaria relacionar objetos que


representan entidades bancarias tales como
cuentas, valores, etc.
Una aplicacin de fabricacin puede utilizar
objetos que representan diversos dispositivos
fsicos tales como robots, PLCs, CNCs, etc.

Isidro Calvo

Informtica Industrial 2006/07

10

Una clase en C++

La clase es la base de C++


Es preciso definir la forma general de la clase con la
palabra reservada class
Una clase puede contener partes privadas private
y pblicas public

Los mtodos y atributos declarados como private slo se


pueden usar por mtodos de la clase
Los mtodos y atributos declarados como public se ven
desde dentro y fuera de la clase

Frecuentemente se separa el interfaz de la clase en


un fichero con extensin .h y el cdigo en un fichero
con extensin .cpp
Isidro Calvo

Informtica Industrial 2006/07

11

Ej: Una cuenta bancaria


class cCuenta {
private:
//Atributos
double tipoDeInteres;
double saldo;
string cuenta;
string nombre;
public:
//Mtodos
cCuenta();
//Constructor
virtual ~cCuenta();
//Destructor
void asignarNombre(string nom);
void asignarCuenta(string cue);
string obtenerNombre();
string obtenerCuenta();
double obtenerTipoDeInteres();
double estado();
void asignarTipoDeInteres(double tipo);
void reintegro(double cantidad);
void ingreso(double cantidad);
};
Isidro Calvo

Informtica Industrial 2006/07

12

Programa principal
int main()
{
cCuenta cuenta01;

//Creacin de un objeto cCuenta

cuenta01.asignarNombre(Pepito);
cuenta01.asignarCuenta(123456790);
cuenta01.asignarTipoDeInteres(2.5);
cuenta01.ingreso(12000);
cuenta01.reintegro(3000);
cout
cout
cout
cout

<<
<<
<<
<<

cuenta01.obtenerNombre() << endl;


cuenta01.obtenerCuenta() << endl;
cuenta01.estado() << endl;
cuenta01.obtenerTipoDeInteres() << endl;

}
Isidro Calvo

Informtica Industrial 2006/07

13

Ficheros involucrados

Clase Cuenta bancaria:

cCuenta.h Contiene la estructura de la clase cCuenta


cCuenta.cpp Contiene el cdigo asociado a cada
mtodo de la clase

Programa orientado a objetos (P.e. Banco.cpp):

Instancia (crea) objetos a partir de una clase


(cCuenta)
Utiliza los objetos (enva mensajes mtodos para
que los objetos realicen tareas)

Isidro Calvo

Informtica Industrial 2006/07

14

// FICHERO: cCuenta.h
// Contiene la estructura de la clase cCuenta
#include <iostream.h>
#include <string.h>
using namespace std;
class cCuenta {
private:
//Atributos
double tipoDeInteres;
double saldo;
string cuenta;
string nombre;
public:
//Mtodos
cCuenta();
//Constructor
virtual ~cCuenta();
//Destructor
void asignarNombre(string nom);
string obtenerNombre();
void asignarCuenta(string cue);
string obtenerCuenta();
void asignarTipoDeInteres(double tipo);
double obtenerTipoDeInteres();
void reintegro(double cantidad);
void ingreso(double cantidad);
double estado();
};
Isidro Calvo

Informtica Industrial 2006/07

15

// FICHERO: cCuenta.cpp
// Cdigo asociado a cada uno de los mtodos
#include "cCuenta.h"
void cCuenta::asignarNombre(string nom) {
if(nom.length()==0) {
cout << "Error: cadena vacia" << endl;
return;
}
nombre= nom;
}
string cCuenta::obtenerNombre() {
return nombre;
}
... // Contina

Isidro Calvo

Informtica Industrial 2006/07

16

... // Viene de la transparencia anterior


void cCuenta::ingreso(double cantidad) {
if (cantidad <0) {
cout << "Error: cantidad negativa" << endl;
return;
}
saldo = saldo + cantidad;
}
void cCuenta::reintegro(double cantidad) {
if (saldo - cantidad < 0) {
cout << "Error: no dispone de saldo" << endl;
return;
}
saldo = saldo -cantidad;
}
double cCuenta::estado() {
return saldo;
}
... // etc.
Isidro Calvo

Informtica Industrial 2006/07

17

// Programa principal Banco.cpp


#include <iostream.h>
//Permite usar cout, cin, <<, >>,
etc
#include cCuenta.h //Contiene la clase cCuenta
int main()
{
cCuenta cuenta01;

//Creacin de un objeto a parir de


//la clase cCuenta

cuenta01.asignarNombre(Pepito);
cuenta01.asignarCuenta(123456790);
cuenta01.asignarTipoDeInteres(2.5);
cuenta01.ingreso(12000);
cuenta01.reintegro(3000);
cout
cout
cout
cout

<<
<<
<<
<<

Nombre: << cuenta01.obtenerNombre() << endl;


N.Cuenta: << cuenta01.obtenerCuenta() << endl;
Saldo: << cuenta01.estado() << endl;
Tipo Interes <<cuenta01.obtenerTipoDeInteres()<< endl;

return 0;
}

Isidro Calvo

Informtica Industrial 2006/07

18

Isidro Calvo

Informtica Industrial 2006/07

19

Constructor

Un constructor es un mtodo especial que es


llamado automticamente al crear un objeto de
esa clase
Contiene el cdigo que se ejecuta al iniciar el
objeto
Tiene el mismo nombre que la clase
No puede retornar ningn valor (ni siquiera void)
Si no se escribe uno se adopta uno por defecto
Puede haber ms de un constructor, con
diferentes parmetros

Isidro Calvo

Informtica Industrial 2006/07

20

Constructores (cCuenta.h)
class cCuenta {
private:
//Atributos
double tipoDeInteres;
double saldo;
string cuenta;
string nombre;
public:
//Mtodos
//CONSTRUCTORES
cCuenta();
cCuenta (string nom, string cue,
double sal, double tipo);
//DESTRUCTOR
virtual ~cCuenta();
// Resto de mtodos
...
};
Isidro Calvo

Informtica Industrial 2006/07

21

Constructores (cCuenta.cpp)
cCuenta::cCuenta()
{
saldo=0;
tipoDeInteres=0.0;
}
cCuenta::cCuenta (string nom, string cue,
double sal, double tipo)
{
asignarNombre(nom);
asignarCuenta(cue);
saldo=sal;
tipoDeInteres=tipo;
}
Isidro Calvo

Informtica Industrial 2006/07

22

// Programa principal Banco.cpp


#include cCuenta.h
//Contiene la clase cCuenta
int main()
{
//Constructor POR DEFECTO: cCuenta::cCuenta()
cCuenta cuenta01;
//Constructor cCuenta::cCuenta(parametros)
cCuenta cuenta02(Juanito, 0987654321, 6000, 3.5);
cuenta01.asignarNombre(Pepito);
cuenta01.ingreso(12000);
//...
cout << Nombre: << cuenta01.obtenerNombre() << endl;
cout << Saldo: << cuenta01.estado() << endl;
cout << Nombre: << cuenta02.obtenerNombre() << endl;
cout << Saldo: << cuenta02.estado() << endl;
return 0;
}
Isidro Calvo

Informtica Industrial 2006/07

23

Destructor

En muchas ocasiones un objeto debe


realizar alguna(s) accion(es) cuando
se destruye

P.e. Liberar memoria

Es llamado automticamente cuando


el objeto se destruye
Tiene el mismo nombre que el
constructor (la clase), pero precedido
con el smbolo ~

Isidro Calvo

Informtica Industrial 2006/07

24

Caractersticas de la POO

Encapsulamiento

Herencia

Concepto de una caja negra.


Parte del cdigo o datos pueden ser privados al objeto e
inaccesibles fuera de l
Un objeto puede adquirir las propiedades de otro objeto y
expandirlas
Permite clasificaciones jerrquicas

Polimorfismo

Se permite usar el mismo nombre de un mtodo para varios


propsitos relacionados pero ligeramente diferentes

Isidro Calvo

Informtica Industrial 2006/07

25

Encapsulamiento
class cCuenta {
private:
// protected
double saldo;
string cuenta;
string nombre;
// METODO PRIVADO: Slo puede ser llamado dentro
// la clase cCuenta y no desde el programa principal
void hacerAlgo(void);
public:
cCuenta();
virtual ~cCuenta();
void asignarNombre(string nom);
string obtenerNombre();
void reintegro(double cantidad);
void ingreso(double cantidad);
double estado();
};
Isidro Calvo

Informtica Industrial 2006/07

26

Herencia: Jerarqua de clases


Clase
ClasecCuenta
cCuenta

Clase
ClasecCuentaCorriente
cCuentaCorriente

Isidro Calvo

Clase
ClasecCuentaAhorro
cCuentaAhorro

Informtica Industrial 2006/07

27

Herencia: cCuentaAhorro.h
La clase cCuentaAhorro hereda
la estructura de cCuenta
//FICHERO: cCuentaAhorro.h
class cCuentaAhorro : public cCuenta {
private:
// Propiedad ADICIONAL
double cuotaMantenimiento;
public:
// Mtodos ADICIONALES
cCuentaAhorro(string nom, string cue,
double sal, double tipo,
double mant);
void asignarCuotaManten(double cantidad);
double obtenerCuotaManten();
// reintegro tapa al mtodo reintegro de cCuenta
void reintegro(double cantidad);
};
Isidro Calvo

Informtica Industrial 2006/07

28

// FICHERO: cCuentaAhorro.cpp
#include "cCuentaAhorro.h"
// CONSTRUCTOR
cCuentaAhorro::cCuentaAhorro(string nom, string cue,
double sal, double tipo, double mant) {
asignarNombre(nom);
asignarCuenta(cue);
saldo=sal;
tipoDeInteres=tipo;
asignarCuotaManten(mant);
}
// CDIGO DE LOS MTODOS
void cCuentaAhorro::asignarCuotaManten(double cantidad) {
if(cantidad < 0) {
cout << "Error: cantidad negativa" << endl;
return;
}
cuotaMantenimiento = cantidad;
}
... // etc.
Isidro Calvo

Informtica Industrial 2006/07

29

Clase cCuenta

Atributos

nombre
cuenta
saldo
tipoDeInteres

Mtodos

Isidro Calvo

Constructores cCuenta
asignarNombre
obtenerNombre
asignarCuenta
obtenerCuenta
estado
ingreso
reintegro
asignarTipoDeInteres
obtenerTipoDeInteres

Informtica Industrial 2006/07

30

Clase cCuentaAhorro

Atributos

nombre
cuenta
saldo
tipoDeInteres
cuotaMantenimiento

Mtodos

Isidro Calvo

Constructores cCuenta
asignarNombre
obtenerNombre
asignarCuenta
obtenerCuenta
estado
ingreso
reintegro
asignarTipoDeInteres
obtenerTipoDeInteres
Constructores cCuentaAhorro
asignarCuotaManten
obtenerCuotaManten
reintegro

Informtica Industrial 2006/07

31

Polimorfismo

El polimorfismo en C++ se consigue con la

sobrecarga de funciones

La sobrecarga permite que dos o ms


funciones puedan compartir el mismo
nombre (aunque con distintos parmetros)
Es el compilador quien decide (en base a
los tipos de los parmetros) cul debe
utilizar

Isidro Calvo

Informtica Industrial 2006/07

32

Ejemplo
//FICHERO: cOperaciones.h
class cOperaciones {
public:
//...
int calcularCuadrado(int i);
double calcularCuadrado(double d);
trgComplejo *calcularCuadrado(trgComplejo *prg);
};
//FICHERO: cOperaciones.cpp
cOperaciones::calcularCuadrado(int i){
return (i*i);
};
cOperaciones::calcularCuadrado(double d){
return (d*d);
};
// ... sigue
Isidro Calvo

Informtica Industrial 2006/07

33

Ejemplo
//FICHERO: cOperaciones.cpp
//Contina de la trasparencia anterior
trgComplejo * cOperaciones::cuadrado(trgComplejo *prg)
{
trgComplejo rgAux;
rgAux.real = cuadrado(prg->real)
cuadrado(prg->imag);
rgAux.imag = 2*prg->real*prg->imag;
(*prg) = rgAux;
return (prg);
}

Isidro Calvo

Informtica Industrial 2006/07

34

Ejemplo
#include <iostream.h>
int main(void)
{
int i;
double num;
trgComplejo rgNum, * prg;
cOperaciones Objeto;
cout << "Dame un numero entero: ";
cin >> i;
cout << i << ": " << Objeto.cuadrado(i) << endl;
//...
Objeto.cuadrado(num);
//...
prg = Objeto.cuadrado(&rgNum);
//...
}

Isidro Calvo

Informtica Industrial 2006/07

35

Entrada y Salida estndar

Normalmente los programas en C++ usan


cin y cout en lugar de printf y scanf
Las operaciones de entrada/salida estndar
se encuentran en la biblioteca
<iostream.h>
cout : Muestra por pantalla un mensaje. (Si
es preciso se formatean las variables)

Ej: cout << Dato I: << I << endl;

cin : Lee de teclado y carga el valor ledo en


una variable (tipos bsicos o cadenas)

Ej: cin >> i ;

Isidro Calvo

Informtica Industrial 2006/07

36

Palabras reservadas de C++

asm
catch
class
delete
friend
inline
new
operator
overload

Isidro Calvo

private
protected
public
template
this
throw
try
virtual

Informtica Industrial 2006/07

37

Conclusiones

C++ es un superconjunto de C

Aade una serie de palabras reservadas

C++ permite programar siguiendo el enfoque


Orientado a Objetos
El enfoque orientado a objetos es ms abstracto y
se adeca mejor a aplicaciones complejas
Se definen Clases a partir de las que se crean
objetos (que se utilizarn en los programas)
Cada clase tiene un conjunto de atributos y
mtodos
Las principales caractersticas de los lenguajes OO
son:

Encapsulamiento, Herencia y Polimorfismo

Isidro Calvo

Informtica Industrial 2006/07

38

También podría gustarte