Está en la página 1de 0

Introduccin a la Programacin

orientada a objetos con C++


Informtica Industrial
Ing. en automtica y electrnica Industrial
Isidro Calvo Informtica Industrial 2006/07 2
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 3
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 4
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 5
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 6
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 7
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 8
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 9
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 10
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 11
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 12
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 13
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 << cuenta01.obtenerNombre() << endl;
cout << cuenta01.obtenerCuenta() << endl;
cout << cuenta01.estado() << endl;
cout << cuenta01.obtenerTipoDeInteres() << endl;
}
Isidro Calvo Informtica Industrial 2006/07 14
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 15
// 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 16
// 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 17
... // 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 18
// 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 << Nombre: << cuenta01.obtenerNombre() << endl;
cout << N.Cuenta: << cuenta01.obtenerCuenta() << endl;
cout << Saldo: << cuenta01.estado() << endl;
cout << Tipo Interes <<cuenta01.obtenerTipoDeInteres()<< endl;
return 0;
}
Isidro Calvo Informtica Industrial 2006/07 19
Isidro Calvo Informtica Industrial 2006/07 20
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 21
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 22
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 23
// 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 24
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 25
Caractersticas de la POO
Encapsulamiento
Concepto de una caja negra.
Parte del cdigo o datos pueden ser privados al objeto e
inaccesibles fuera de l
Herencia
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 26
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();
};
Encapsulamiento
Isidro Calvo Informtica Industrial 2006/07 27
Herencia: Jerarqua de clases
Clase cCuenta
Clase cCuenta
Clase cCuentaAhorro
Clase cCuentaAhorro
Clase cCuentaCorriente
Clase cCuentaCorriente
Isidro Calvo Informtica Industrial 2006/07 28
//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);
};
Herencia: cCuentaAhorro.h
La clase cCuentaAhorro hereda
la estructura de cCuenta
Isidro Calvo Informtica Industrial 2006/07 29
// 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 30
Atributos
nombre
cuenta
saldo
tipoDeInteres
Clase cCuenta
Mtodos
Constructores cCuenta
asignarNombre
obtenerNombre
asignarCuenta
obtenerCuenta
estado
ingreso
reintegro
asignarTipoDeInteres
obtenerTipoDeInteres
Isidro Calvo Informtica Industrial 2006/07 31
Atributos
nombre
cuenta
saldo
tipoDeInteres
cuotaMantenimiento
Clase cCuentaAhorro
Mtodos
Constructores cCuenta
asignarNombre
obtenerNombre
asignarCuenta
obtenerCuenta
estado
ingreso
reintegro
asignarTipoDeInteres
obtenerTipoDeInteres
Constructores cCuentaAhorro
asignarCuotaManten
obtenerCuotaManten
reintegro
Isidro Calvo Informtica Industrial 2006/07 32
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 33
//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
Ejemplo
Isidro Calvo Informtica Industrial 2006/07 34
//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);
}
Ejemplo
Isidro Calvo Informtica Industrial 2006/07 35
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 36
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 37
asm
catch
class
delete
friend
inline
new
operator
overload
Palabras reservadas de C++
private
protected
public
template
this
throw
try
virtual
Isidro Calvo Informtica Industrial 2006/07 38
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

También podría gustarte