You are on page 1of 25

PROGRAMACIN EN C++ Qu ES LA PROGRAMACIN ORIENTADA A OBJETOS?

En la programacin estructurada todos los programas tienen las estructuras secuencial, repetitiva o condicional. Los mecanismos bsicos de la programacin orientada a objetos son: objetos, mensajes, mtodos, clases, variables asociadas y herencias. Objetos Un programa tradicional se compone de procedimientos y datos. Un programa se compone de los datos y las operaciones o funciones que realizamos con esos datos. En la programacin funcional o estructurada se ha definido funciones de forma independiente de los datos. En cambio en el mundo real, los datos vienen definidos por las operaciones que podemos realizar con ellos. Por ejemplo lo que nos interesa de una pantalla son las operaciones que podemos realizar con ella como dibujar, borrar, etc. La programacin orientada a objetos (POO) nos permite acercarnos a esta visin ms real mediante el concepto de clase que permite relacionar los datos con las operaciones sobre dichos datos. Un objeto de una determinada clase solamente ser accesible mediante las operaciones definidas para esa clase. Un programa orientado a objetos consiste solamente en objetos, entendiendo por objeto una entidad que tiene atributos particulares, los datos, y unas formas de operar sobre ellos, los mtodos o procedimientos. La programacin orientada a objetos es una de las tcnicas ms modernas que trata de disminuir el coste del software, aumentando la eficiencia en la programacin y reduciendo el tiempo necesario para el desarrollo de una aplicacin. Con la programacin orientado a objetos, los programas tienen menos lneas de cdigo, menos sentencia de bifurcacin y mdulos que son ms comprensibles porque reflejan de una forma clara la relacin existente entre cada concepto a desarrollar y cada objeto que interviene en dicho desarrollo. Donde la programacin orientada a objetos toma verdadera ventaja es en la comparticin y reutilizacin del cdigo.

TERMINOS QUE NECESITAMOS CONOCER (INTRODUCCIN GRFICA) 1.- EL OBJETO: un objeto es una estructura de datos (cuyos componentes denominaremos atributos) y un conjunto de procedimientos y funciones (que denominaremos mtodos) para manipular la estructura de datos. La nica forma de manipular la informacin del objeto es a travs de sus mtodos.

Aqu tenemos dos objetos. La frutera Pepe, y mi coche. Estos son dos objetos que utilizo en mi vida diaria. Cada objeto tiene su identidad. Nadie confundira mi coche con la frutera pepe! 2. La Clase: El objeto mi coche pertenece a la clase coche. El coche de bill Gates, aunque cuesta mucho ms que el mo, tambin pertenece a la Clase coche.

3.- Los atributos: Como hemos visto arriba, a pesar de que mi coche y el de Bill Gates pertenecen a la clase coche, el suyo es mucho ms caro. Y por qu? El secreto est en sus atributos. Velocidad mxima: Mi coche: 115 en sus mejores tiempos El coche de Bill Gates: 330 y subiendo Pintura: Mi coche: Verde descuartizado El coche de Bill Gates: Negro metalizado Aceleracin: Mi coche: 3 km/h a los 100 segundos El coche de Bill Gates: 3 segundos a los 100 km/h

Equipamiento: Mi coche: Rueda de repuesto El coche de Bill Gates: Ordenador de a bordo, GPS, televisin FULL HD, Asientos calefactados, circulito para el vaso... Caja: Mi coche: Caja flamenca, por el ruido que hace al meter la marcha El coche de Bill Gates: 6 velocidades automticas con relacin de marcha personalizable

4. Los mtodos (o mensajes): Aunque el coche de Bill Gates sea mucho mejor que el mo, podemos manejarlo mediante los mismos mtodos. stos mtodos son el mtodo acelerar, frenar, girarDerecha, girarIzquierda... Si un da me toca el euromilln y me compro un coche como el de Bill Gates sabr manejarlo porque es de la misma clase que mi coche! A esto se le conoce cmo abstraccin. Esto significa que a nosotros como usuarios de la clase (del coche) no nos importa lo ms mnimo como demonios hace el coche para acelerar, sino que lo que queremos es que al apretar el acelerador el vehculo avance, y eso sirve para cualquier coche. sta es una de las principales ventajas de la Programacin Orientada a Objetos. Otro punto importante es que los mtodos son nicos de su clase. Es decir, cualquier objeto coche comprender el mtodo acelera. Pero si intentamos que la Frutera Pepe realice el mtodo acelera, nos encontraremos con que el objeto frutera no comprende se mtodo:

A la frutera Pepe podremos enviarle otros mensajes (mtodos), que sern damePeras(5), dameManzanas(8), tePago... Como tambin ocurre con la clase coche a nosotros no nos importa cmo han llegado las peras a la frutera Pepe. De eso ya se encarga la clase frutera! Cuando vamos a la frutera Pepe a por manzanas Nunca se nos ha ocurrido pensar como han llegado hasta all! Esa es la base de la programacin orientada a objetos. Aunque nos podemos hacer una idea:

Esto tiene ventajas! Si algn da Pepe encuentra unas manzanas ms ricas en un sitio diferente (fruteria Pepe ha mejorado su codigo), Nosotros podremos pedirle manzanas igualmente, aunque las obtenga de otra manera o de otro sitio! As aunque el procedimiento de obtener manzanas cambie, el mensaje seguir siendo el mismo, Pepe lo entender y nos dar Manzanas. Adems nos damos cuenta de que Pepe ha utilizado la clase coche para ir a recoger las manzanas, concretamente el objeto el coche de Pepe, y sus mtodos acelerar, frenar, girarIzquierda, ... Actividades propuestas: 1. Piensa en tu coche y en el coche de algn vecino o familiar. Qu atributos los diferencian? 2. Qu mtodos podra tener una Televisin? Y qu atributos diferencian tu TV de otras?

PROGRAMACIN ORIENTADA A OBJETOS METODOS: - Un mtodo reside en un objeto y determina como tiene que actuar el objeto cuando recibe un mensaje. Objeto

Mensajes

Datos

mtodos

- La estructura ms interna de un objeto, esta oculta para otros usuarios y la nica conexin que tiene con el exterior son los mensajes - Los datos que estn dentro de un objeto, solamente pueden ser manipulados por los mtodos del propio objeto.

CLASE - Una clase es una descripcin para producir objetos. - Una clase est formada por los mtodos y los datos que definen las caractersticas comunes a todos los objetos de esa clase. LA PROGRAMACIN ORIENTADA A OBJETOS FRENTE A LA PROGRAMACIN TRADICIONAL. - La programacin tradicional se desarrolla en base a procedimientos y datos.

PROCEDIMIENTO 1

PROCEDIMIENTO 2

DATOS

PROCEDIMIENTO 3

- La programacin orientada a objetos es una coleccin de objetos OBJETO

Datos mtodos

OBJETO

OBJETO

Datos mtodos

Datos mtodos

VENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS Ejm: consideremos el proceso de aadir, cambiar o borrar registros de un fichero agenda. Programacin tradicional procedimientos Aadir () {} Cambiar () {} Borrar() {.} datos Nombre Telfono Nombre Telfono Nombre telfono

Con la programacin orientada a objetos el esquema seria Persona_1 Aadir Cambiar Borrar Datos

Persona_2 Aadir Cambiar Borrar Datos Aadir Cambiar Borrar

Persona_3

Datos

- Donde Pesona_1, Persona_2, Persona_3 son objetos todos de la misma clase, que denominaremos por ejemplo registro. - Si ahora, por ejemplo, enviamos un mensaje aadir a la clase registro, se creara un nuevo objeto de esa clase, Persona_x - Tambin es preciso sealar que la modificacin de uno de los mtodos no afecta a los otros ni la estructura de los datos. - La clase registro, como se muestra en el ejemplo a continuacin escrito en C++, identifica en un objeto de la misma, tanto su estructura de datos (nombre, telfono), como de los mtodos involucrados en el proceso de ese objeto (aadir, cambiar, borrar) class registro { private: char nombre[40]; long telefono; public: void aadir(char *nombre, long telefono); void cambiar(char *nombre, long telefono); void borrar( char *nombre); }

Supongamos ahora que creamos la subclase agenda de la clase registro, de la forma siguiente:

class agenda:registro { private: long nro_registro; public: void aadir(char *nombre, long telefono, long nro_registro); void borrar( char *nombre, long nro_registro); }

- La sub clase agenda hereda la estructura de datos y los mtodos de una clase padre registro sin duplicar su cdigo. Esta incluye adems un nuevo dato, nro_registro, y se han modificado los mtodos aadir y borrar. - La clase agenda es igual que la clase registro, pero con algunas diferencias. - En contraste con la programacin con la programacin tradicional, donde siempre existe la posibilidad de que una modificacin de un procedimiento o de una estructura de datos afecte a otros procedimientos, la programacin orientada a objetos no necesita examinar todo el cdigo fuente para ver si un cambio afecta a otras partes. Clases en C++ Definicin de una clase Una clase es un tipo definido por el usuario. La definicin de una clase especifica como los objetos de esa clase, esto es, de que miembro consta y el conjunto de operaciones que pueden aplicarse a tales objetos. La definicin de una clase consiste de dos partes. La primera est formada por el nombre de la clase precedido por la palabra reservada class. La segunda parte es el cuerpo de la clase encerrado entre llaves y seguido por un punto y coma o por una lista de identificadores de objetos de esa clase, separados por coma. Class nombre_clase { Cuerpo de la clase } [lista de declaraciones]; El cuerpo de la clase, en general, consta de declaraciones de variables miembro, funciones miembro y especificadores de acceso (private, protected, public).

Ejemplo Class test { Private: Int n_entero; Float n_real; Protected: Char *p; Public: Int leer_ent(void); float leer_real(void); friend void escribir(int a, float b, char *c); };

Este ejemplo define un nuevo tipo test, el cual puede ser utilizado dentro de un programa fuente exactamente igual que el nombre de un tipo predefinido. Miembros de una clase. Los miembros de una clase pueden ser datos, representado por identificadores y funciones. Ejemplo: Int n_entero; Float n_real; Char *p; - Un dato miembro de la clase no puede ser inicializado. Esto es, no sera correcto realizar la siguiente declaracin, como miembro de una clase: Int n_entero=0; - Las funciones miembro de una clase, definen las operaciones que se quieren realizar con los datos miembros de la clase. - la sintaxis para acceder a un miembro public de una clase, Tenemos la clase: Class test { Private: Int n_entero; Float n_real; Protected: Char *p; Public: Int leer_ent(void); float leer_real(void);

friend void escribir(int a, float b, char *c); };

Accedemos con la siguiente sintaxis: Test t, *p; t.leer_ent(); p->leer_ent(); En este ejemplo, t es un objeto de tipo test y p es un puntero a un objeto del tipo test. Las lneas siguientes referencian el miembro leer_ent(), provocando en este caso la llamada a dicha funcin, para el objeto especificado en cada caso. Ejemplo suma de dos nmeros: #include<iostream.h> #include<conio.h> class suma { private: int a,b,c; public: void leer_numeros(); void sumar_numeros(); }; void suma::leer_numeros() { cout<<"ingrese el valor de a:"; cin>>a; cout<<"ingrese el valor de b:"; cin>>b; } void suma::sumar_numeros() { c=a+b; cout<<"la suma de dos numeros es:"<<c; } int main() { suma s; s.leer_numeros(); s.sumar_numeros(); getch(); } Clase suma Datos a,b,c de tipo entero leer_numeros() sumar_numeros()

Cosa que sera lo mismo: #include<conio.h> class suma { private: int a,b,c; public: void leer_numeros() { cout<<"ingrese el valor de a:"; cin>>a; cout<<"ingrese el valor de b:"; cin>>b; } void sumar_numeros() { cout<<"la suma de dos numeros es:"<<a+b; } }; int main() { suma s; s.leer_numeros(); s.sumar_numeros(); getch(); }

Ejemplo recibiendo parmetros de entrada para sumar


#include <stdio.h> #include <conio.h> #include <iostream.h> class calcular { public: double sumar(double a, double b); }; double calcular::sumar(double a, double b) { cout<<"LA SUMA ES: "<<a+b; } int main() { calcular e1; double v1,v2,r; cout<<"DAME PRIMER VALOR: "; cin>>v1; cout<<"DAME SEGUNDO VALOR: "; cin>>v2; e1.sumar(v1,v2); getch(); }

Diferencia entre clase y objeto

Distintos tipos de caballo (janto, pegaso, bucefalo,etc) forman la clase caballo, que comparten caractersticas comunes, pero el valor de esas caractersticas son diferentes para cada caballo por ejemplo cada caballo tienen diferentes edades. Entonces en general tenemos

No se puede acceder ya que el dato es privado, solo puede ser utilizado dentro de la misma clase puede ser por las funciones o mtodos.

#include<iostream.h> #include<conio.h> class caballo //declaramos la clase Caballo { public: //los miembros que siguen son pblicos int suEdad; //variable miembro int suPeso;//variable miembro }; main() {

caballo Janto; Janto.suPeso=110; //lo asignamos a la variable miembro publico cout<<"janto es uno de los caballos que pesaba "; cout<<Janto.suPeso<<" Kilos. "; getch(); }

Por ejemplo si queremos modificar el peso y la edad de un caballo pero en sus atributos esta privado entonces podemos modificarlo mediante accesos pblicos que son los mtodos accesor

Como inicializar a datos miembros de una clase

Herencias

Es un tipo de jerarquas

C++ PROGRAMACION ORIENTADA OBJETOS 2


#include <stdio.h> #include <conio.h> #include <iostream> using namespace std; class datos { public: void nombre(string n) { cout<<"TU NOMBRE ES: "<<n<<"\n"; } void direccion(string d) { cout<<"TU DIRECCIN ES: "<<d<<"\n"; } void telefono(string n) { cout<<"TU TELEFONO ES: "<<n<<"\n"; } }; string nom,dir,tel; int main() { datos p1; cout<<"NOMBRE: "; getline(cin,nom); cout<<"DIRECCION: "; getline(cin,dir); cout<<"TELEFONO: "; getline(cin,tel); p1.nombre(nom); p1.direccion(dir); p1.telefono(tel); getch(); }