Está en la página 1de 38

Introducción a la Programación

orientada a objetos con C++

Informática Industrial
Ing. en automática y electrónica Industrial
Objetivos principales
„ Exponer las ideas básicas de la
programación orientada a objetos (POO)

„ Comparar el enfoque tradicional (prog.


estructurada) con el enfoque OO

„ Ver cuáles son las principales diferencias


entre C y C++

Isidro Calvo Informática Industrial 2006/07 2


¿Qué es la POO?
„ Es un modelo de programación más abstracto
„ Pretende organizar los programas a imagen y
semejanza de la organización de los objetos del
mundo real
„ Contiene información de los objetos + las acciones
que se pueden realizar con ellos
„ Objetos = Métodos (Operaciones) + Atributos (Datos)
„ Pueden crearse varios objetos del mismo ‘tipo’ a
partir de modelos (Clases)

Isidro Calvo Informática Industrial 2006/07 3


Ejemplo: Una cuenta bancaria
„ Clase: Cuenta
„ Atributos (Información de la cuenta):
„ Nombre
„ Número de cuenta
„ Saldo
„ Métodos (Operaciones que se pueden hacer con ella):
„ Ingresar Dinero
„ Retirar Dinero
„ Abonar Intereses
„ Obtener Saldo Actual
„ Ordenar Transferencia

Isidro Calvo Informática Industrial 2006/07 4


Lenguajes de programación OO
„ Proporcionan mecanismos para estructurar el
código de acuerdo a las características de la
POO:
„ Algunos lenguajes OO:
„ C++
„ Java
„ Delphi (Object Pascal)
„ Visual Basic
„ Ada
„ etc…

Isidro Calvo Informática Industrial 2006/07 5


Conceptos principales (I)
„ Objeto: entidad provista de un conjunto de
propiedades o atributos (datos) y de comportamiento
o funcionalidad ("métodos"). 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
instanciación es la lectura de estas definiciones y la
creación de un objeto a partir de ellas.

Isidro Calvo Informática Industrial 2006/07 6


Conceptos principales (II)
„ Método: algoritmo asociado a un objeto (o a una
clase de objetos), cuya ejecución se desencadena
tras la recepción de un "mensaje". Desde el punto de
vista del comportamiento, es lo que el objeto puede
hacer. Un método puede producir un cambio en las
propiedades del objeto, o la generación de un
"evento" con un nuevo mensaje para otro objeto del
sistema.

„ Mensaje: una comunicación dirigida a un objeto,


que le ordena que ejecute uno de sus métodos con
ciertos parámetros asociados al evento que lo
generó.

Isidro Calvo Informática Industrial 2006/07 7


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
ejecución de algún método.
„ Evento: un suceso en el sistema (tal como una
interacción del usuario con la máquina, 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 método del objeto, y que se utiliza
para indicar distintas situaciones posibles para el
objeto (o clase de objetos).
Isidro Calvo Informática Industrial 2006/07 8
Diseño de programas OOs
„ Concepto tradicional de programa (No
OO):
„ Lista de instrucciones a ser ejecutadas por
una máquina

„ Filosofía de diseño OO:


„ Conjunto de objetos que dialogan entre sí
para realizar una serie de tareas
Isidro Calvo Informática Industrial 2006/07 9
Programas OO
„ Un programa OO es un programa que usa
objetos. Por ejemplo:

„ Una aplicación bancaria relacionará objetos que


representan entidades bancarias tales como
cuentas, valores, etc.

„ Una aplicación de fabricación puede utilizar


objetos que representan diversos dispositivos
físicos tales como robots, PLCs, CNCs, etc.

Isidro Calvo Informática 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 públicas public
„ Los métodos y atributos declarados como private sólo se
pueden usar por métodos de la clase
„ Los métodos 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 extensión .h y el código en un fichero
con extensión .cpp
Isidro Calvo Informática Industrial 2006/07 11
Ej: Una cuenta bancaria
class cCuenta {
private: //Atributos
double tipoDeInteres;
double saldo;
string cuenta;
string nombre;
public: //Métodos
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 Informática Industrial 2006/07 12
Programa principal
int main()
{
cCuenta cuenta01; //Creación 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 Informática Industrial 2006/07 13
Ficheros involucrados
„ Clase Cuenta bancaria:
„ cCuenta.h Contiene la estructura de la clase cCuenta
„ cCuenta.cpp Contiene el código asociado a cada
método de la clase
„ Programa orientado a objetos (P.e. Banco.cpp):
„ Instancia (crea) objetos a partir de una clase
(cCuenta)
„ Utiliza los objetos (envía mensajes –métodos– para
que los objetos realicen tareas)

Isidro Calvo Informática 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: //Métodos
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 Informática Industrial 2006/07 15
// FICHERO: cCuenta.cpp
// Código asociado a cada uno de los métodos

#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;
}

... // Continúa

Isidro Calvo Informática 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 Informática 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; //Creación 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 Informática Industrial 2006/07 18
Isidro Calvo Informática Industrial 2006/07 19
Constructor
„ Un constructor es un método especial que es
llamado automáticamente al crear un objeto de
esa clase
„ Contiene el código que se ejecuta al iniciar el
objeto
„ Tiene el mismo nombre que la clase
„ No puede retornar ningún valor (ni siquiera void)
„ Si no se escribe uno se adopta uno por defecto
„ Puede haber más de un constructor, con
diferentes parámetros

Isidro Calvo Informática Industrial 2006/07 20


Constructores (cCuenta.h)
class cCuenta {
private: //Atributos
double tipoDeInteres;
double saldo;
string cuenta;
string nombre;
public: //Métodos
//CONSTRUCTORES
cCuenta();
cCuenta (string nom, string cue,
double sal, double tipo);

//DESTRUCTOR
virtual ~cCuenta();

// Resto de métodos
...
};
Isidro Calvo Informática 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 Informática 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 Informática 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 automáticamente cuando
el objeto se destruye
„ Tiene el mismo nombre que el
constructor (la clase), pero precedido
con el símbolo ~
Isidro Calvo Informática Industrial 2006/07 24
Características de la POO
„ Encapsulamiento
„ Concepto de una caja negra.
„ Parte del código 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 jerárquicas
„ Polimorfismo
„ Se permite usar el mismo nombre de un método para varios
propósitos relacionados pero ligeramente diferentes

Isidro Calvo Informática Industrial 2006/07 25


Encapsulamiento
class cCuenta {
private: // protected
double saldo;
string cuenta;
string nombre;
// METODO PRIVADO: Sólo 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 Informática Industrial 2006/07 26


Herencia: Jerarquía de clases

Clase
ClasecCuenta
cCuenta

Clase
ClasecCuentaCorriente
cCuentaCorriente Clase
ClasecCuentaAhorro
cCuentaAhorro

Isidro Calvo Informática 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:
// Métodos ADICIONALES
cCuentaAhorro(string nom, string cue,
double sal, double tipo,
double mant);
void asignarCuotaManten(double cantidad);
double obtenerCuotaManten();
// reintegro “tapa” al método reintegro de cCuenta
void reintegro(double cantidad);
};
Isidro Calvo Informática 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);
}
// CÓDIGO DE LOS MÉTODOS
void cCuentaAhorro::asignarCuotaManten(double cantidad) {
if(cantidad < 0) {
cout << "Error: cantidad negativa" << endl;
return;
}
cuotaMantenimiento = cantidad;
}
... // etc.

Isidro Calvo Informática Industrial 2006/07 29


Clase cCuenta
„ Atributos „ Métodos
„ nombre „ Constructores cCuenta
„ cuenta „ asignarNombre
„ saldo „ obtenerNombre
„ tipoDeInteres „ asignarCuenta
„ obtenerCuenta
„ estado
„ ingreso
„ reintegro
„ asignarTipoDeInteres
„ obtenerTipoDeInteres

Isidro Calvo Informática Industrial 2006/07 30


Clase cCuentaAhorro
„ Atributos „ Métodos
„ nombre „ Constructores cCuenta
„ cuenta „ asignarNombre
„ saldo „ obtenerNombre
„ tipoDeInteres „ asignarCuenta
„ cuotaMantenimiento „ obtenerCuenta
„ estado
„ ingreso
„ reintegro
„ asignarTipoDeInteres
„ obtenerTipoDeInteres
„ Constructores cCuentaAhorro
„ asignarCuotaManten
„ obtenerCuotaManten
„ reintegro

Isidro Calvo Informática Industrial 2006/07 31


Polimorfismo
„ El polimorfismo en C++ se consigue con la
sobrecarga de funciones

„ La sobrecarga permite que dos o más


funciones puedan compartir el mismo
nombre (aunque con distintos parámetros)

„ Es el compilador quien decide (en base a


los tipos de los parámetros) cuál debe
utilizar
Isidro Calvo Informática 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 Informática Industrial 2006/07 33


Ejemplo
//FICHERO: cOperaciones.cpp
//Continúa 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 Informática 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 Informática Industrial 2006/07 35
Entrada y Salida estándar
„ Normalmente los programas en C++ usan
cin y cout en lugar de printf y scanf
„ Las operaciones de entrada/salida estándar
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 leído en
una variable (tipos básicos o cadenas)
„ Ej: cin >> i ;
Isidro Calvo Informática Industrial 2006/07 36
Palabras reservadas de C++
„ asm „ private
„ catch „ protected
„ class „ public
„ delete „ template
„ friend „ this
„ inline „ throw
„ new „ try
„ operator „ virtual
„ overload

Isidro Calvo Informática Industrial 2006/07 37


Conclusiones
„ C++ es un superconjunto de C
„ Añade una serie de palabras reservadas
„ C++ permite programar siguiendo el enfoque
Orientado a Objetos
„ El enfoque orientado a objetos es más abstracto y
se adecúa mejor a aplicaciones complejas
„ Se definen Clases a partir de las que se crean
objetos (que se utilizarán en los programas)
„ Cada clase tiene un conjunto de atributos y
métodos
„ Las principales características de los lenguajes OO
son:
„ Encapsulamiento, Herencia y Polimorfismo
Isidro Calvo Informática Industrial 2006/07 38

También podría gustarte