Post on 20-Jan-2019
Introducción a la Programación orientada a objetos con C++
Informática IndustrialIng. en automática y electrónica Industrial
Isidro Calvo Informática Industrial 2006/07 2
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 3
¿Qué es la POO?Es un modelo de programación más abstractoPretende organizar los programas a imagen y semejanza de la organización de los objetos del mundo realContiene 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 4
Ejemplo: Una cuenta bancariaClase: CuentaAtributos (Información de la cuenta):
NombreNúmero de cuentaSaldo
Métodos (Operaciones que se pueden hacer con ella):Ingresar DineroRetirar DineroAbonar InteresesObtener Saldo ActualOrdenar Transferencia
Isidro Calvo Informática Industrial 2006/07 5
Lenguajes de programación OOProporcionan mecanismos para estructurar el código de acuerdo a las características de la POO:Algunos lenguajes OO:
C++JavaDelphi (Object Pascal)Visual BasicAdaetc…
Isidro Calvo Informática Industrial 2006/07 6
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 7
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 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 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 9
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 10
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 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 classUna clase puede contener partes privadas privatey públicas public
Los métodos y atributos declarados como private sólo se pueden usar por métodos de la claseLos 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 12
Ej: Una cuenta bancariaclass cCuenta {
private: //Atributosdouble tipoDeInteres;double saldo;string cuenta;string nombre;
public: //MétodoscCuenta(); //Constructorvirtual ~cCuenta(); //Destructorvoid 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 13
Programa principalint 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 14
Ficheros involucrados
Clase Cuenta bancaria:cCuenta.h Contiene la estructura de la clase cCuentacCuenta.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 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: //MétodoscCuenta(); //Constructorvirtual ~cCuenta(); //Destructorvoid 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 16
// 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 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 Informática 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; //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 19
Isidro Calvo Informática Industrial 2006/07 20
ConstructorUn constructor es un método especial que es llamado automáticamente al crear un objeto de esa claseContiene el código que se ejecuta al iniciar el objetoTiene el mismo nombre que la claseNo puede retornar ningún valor (ni siquiera void)Si no se escribe uno se adopta uno por defectoPuede haber más de un constructor, con diferentes parámetros
Isidro Calvo Informática Industrial 2006/07 21
Constructores (cCuenta.h)class cCuenta {
private: //Atributosdouble tipoDeInteres;double saldo;string cuenta;string nombre;
public: //Métodos//CONSTRUCTOREScCuenta();cCuenta (string nom, string cue,
double sal, double tipo);
//DESTRUCTORvirtual ~cCuenta();
// Resto de métodos...
};
Isidro Calvo Informática 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 Informática 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 Informática Industrial 2006/07 24
Destructor
En muchas ocasiones un objeto debe realizar alguna(s) accion(es) cuando se destruye
P.e. Liberar memoriaEs llamado automáticamente cuandoel objeto se destruyeTiene el mismo nombre que el constructor (la clase), pero precedido con el símbolo ~
Isidro Calvo Informática Industrial 2006/07 25
Características de la POOEncapsulamiento
Concepto de una caja negra. Parte del código o datos pueden ser privados al objeto e inaccesibles fuera de él
HerenciaUn objeto puede adquirir las propiedades de otro objeto y expandirlasPermite clasificaciones jerárquicas
PolimorfismoSe permite usar el mismo nombre de un método para varios propósitos relacionados pero ligeramente diferentes
Isidro Calvo Informática Industrial 2006/07 26
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 principalvoid 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 Informática Industrial 2006/07 27
Herencia: Jerarquía de clases
Clase cCuentaClase cCuenta
Clase cCuentaAhorroClase cCuentaAhorroClase cCuentaCorrienteClase cCuentaCorriente
Isidro Calvo Informática Industrial 2006/07 28
//FICHERO: cCuentaAhorro.h
class cCuentaAhorro : public cCuenta {private:
// Propiedad ADICIONALdouble cuotaMantenimiento;
public:// Métodos ADICIONALEScCuentaAhorro(string nom, string cue,
double sal, double tipo, double mant);
void asignarCuotaManten(double cantidad);double obtenerCuotaManten();// reintegro “tapa” al método reintegro de cCuentavoid reintegro(double cantidad);
};
Herencia: cCuentaAhorro.hLa clase cCuentaAhorro “hereda”
la estructura de cCuenta
Isidro Calvo Informática Industrial 2006/07 29
// FICHERO: cCuentaAhorro.cpp#include "cCuentaAhorro.h"
// CONSTRUCTORcCuentaAhorro::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ÉTODOSvoid cCuentaAhorro::asignarCuotaManten(double cantidad) {
if(cantidad < 0) {cout << "Error: cantidad negativa" << endl;return;
}cuotaMantenimiento = cantidad;
}... // etc.
Isidro Calvo Informática Industrial 2006/07 30
AtributosnombrecuentasaldotipoDeInteres
Clase cCuentaMétodos
Constructores cCuentaasignarNombreobtenerNombreasignarCuentaobtenerCuentaestadoingresoreintegroasignarTipoDeInteresobtenerTipoDeInteres
Isidro Calvo Informática Industrial 2006/07 31
AtributosnombrecuentasaldotipoDeInterescuotaMantenimiento
Clase cCuentaAhorroMétodos
Constructores cCuentaasignarNombreobtenerNombreasignarCuentaobtenerCuentaestadoingresoreintegroasignarTipoDeInteresobtenerTipoDeInteresConstructores cCuentaAhorroasignarCuotaMantenobtenerCuotaMantenreintegro
Isidro Calvo Informática Industrial 2006/07 32
PolimorfismoEl polimorfismo en C++ se consigue con la sobrecarga de funciones
La sobrecarga permite que dos o másfunciones puedan compartir el mismonombre (aunque con distintos parámetros)
Es el compilador quien decide (en base a los tipos de los parámetros) cuál debeutilizar
Isidro Calvo Informática Industrial 2006/07 33
//FICHERO: cOperaciones.hclass cOperaciones {
public://...int calcularCuadrado(int i);double calcularCuadrado(double d);trgComplejo *calcularCuadrado(trgComplejo *prg);
};//FICHERO: cOperaciones.cppcOperaciones::calcularCuadrado(int i){
return (i*i);};cOperaciones::calcularCuadrado(double d){
return (d*d);};// ... sigue
Ejemplo
Isidro Calvo Informática Industrial 2006/07 34
//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);
}
Ejemplo
Isidro Calvo Informática 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 Informática Industrial 2006/07 36
Entrada y Salida estándarNormalmente los programas en C++ usancin y cout en lugar de printf y scanfLas operaciones de entrada/salida estándarse encuentran en la biblioteca<iostream.h>cout : Muestra por pantalla un mensaje. (Sies 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 37
asmcatchclassdeletefriendinlinenewoperatoroverload
Palabras reservadas de C++
privateprotectedpublictemplatethisthrowtryvirtual
Isidro Calvo Informática Industrial 2006/07 38
ConclusionesC++ es un superconjunto de C
Añade una serie de palabras reservadasC++ permite programar siguiendo el enfoqueOrientado a ObjetosEl enfoque orientado a objetos es más abstracto y se adecúa mejor a aplicaciones complejasSe definen Clases a partir de las que se creanobjetos (que se utilizarán en los programas)Cada clase tiene un conjunto de atributos y métodosLas principales características de los lenguajes OO son:
Encapsulamiento, Herencia y Polimorfismo