introducción a la programación orientada a objetos con c++ · características de la poo...

38
Introducción a la Programación orientada a objetos con C++ Informática Industrial Ing. en automática y electrónica Industrial

Upload: lethuan

Post on 20-Jan-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

Introducción a la Programación orientada a objetos con C++

Informática IndustrialIng. en automática y electrónica Industrial

Page 2: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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++

Page 3: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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)

Page 4: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 5: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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…

Page 6: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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.

Page 7: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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ó.

Page 8: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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).

Page 9: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 10: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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.

Page 11: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 12: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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);

};

Page 13: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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;

}

Page 14: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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)

Page 15: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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();

};

Page 16: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 17: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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.

Page 18: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 19: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

Isidro Calvo Informática Industrial 2006/07 19

Page 20: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 21: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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...

};

Page 22: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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;

}

Page 23: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 24: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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 ~

Page 25: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 26: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 27: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

Isidro Calvo Informática Industrial 2006/07 27

Herencia: Jerarquía de clases

Clase cCuentaClase cCuenta

Clase cCuentaAhorroClase cCuentaAhorroClase cCuentaCorrienteClase cCuentaCorriente

Page 28: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 29: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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.

Page 30: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

Isidro Calvo Informática Industrial 2006/07 30

AtributosnombrecuentasaldotipoDeInteres

Clase cCuentaMétodos

Constructores cCuentaasignarNombreobtenerNombreasignarCuentaobtenerCuentaestadoingresoreintegroasignarTipoDeInteresobtenerTipoDeInteres

Page 31: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

Isidro Calvo Informática Industrial 2006/07 31

AtributosnombrecuentasaldotipoDeInterescuotaMantenimiento

Clase cCuentaAhorroMétodos

Constructores cCuentaasignarNombreobtenerNombreasignarCuentaobtenerCuentaestadoingresoreintegroasignarTipoDeInteresobtenerTipoDeInteresConstructores cCuentaAhorroasignarCuotaMantenobtenerCuotaMantenreintegro

Page 32: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 33: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 34: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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

Page 35: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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);//...

}

Page 36: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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 ;

Page 37: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

Isidro Calvo Informática Industrial 2006/07 37

asmcatchclassdeletefriendinlinenewoperatoroverload

Palabras reservadas de C++

privateprotectedpublictemplatethisthrowtryvirtual

Page 38: Introducción a la Programación orientada a objetos con C++ · Características de la POO Encapsulamiento Concepto de una caja negra. Parte del código o datos pueden ser privados

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