Está en la página 1de 15

PROGRAMACIN ORIENTADA A OBJETOS

EN C++

1. 2. 3. 4. 5. 6.

Programacin orientada a objetos Ventajas Mecanismos bsicos de la POO Caractersticas de la POO C++ como lenguaje orientado a objetos Entrada y salida estndar

Programacin orientada a objetos

La programacin orientada a objetos es un importante conjunto de tcnicas que pueden utilizarse para hacer el desarrollo de programas ms eficiente, a la par que mejora la fiabilidad de los programas de computadora. En la programacin orientada a objetos, los objetos son los elementos principales de construccin. Sin embargo, la simple compresin de lo que es un objeto, o bien el uso de objetos de unprograma , no significa que estn programando en un modo orientado a objetos. Lo que cuenta es el sistema en el cual los objetos se interconectan y comunican entre s.

Siglas de "Programacin Orientada a Objetos". Se pone "POO". La idea bsica de este tipo de programacin es agrupar los datos y los procedimientos para manejarlos en una nica entidad: el objeto. Un programa es un objeto, que a su vez est formado de objetos. La idea de la programacin estructurada no ha desaparecido, de hecho se refuerza y resulta ms evidente, como comprobars cuando veamos conceptos como la herencia.

Ventaja

La ventaja de la programacin orientada a objetos, es la utilizacin de objetos, puesto que la potencia real de los objetos reside en el modo en que los objetos pueden definir otros objetos. Este proceso, ya comentado, se denomina herencia y es el mecanismo que ayuda a construir programas que se modifican fcilmente y se adaptan a aplicaciones diferentes.

Mecanismos bsicos de la POO

El objeto
Un objeto es una entidad que contiene los atributos que describen el estado de un objeto del mundo real y las acciones que se asocian con el objeto del mundo real. Se designa por un nombre o identificador del objeto. Dentro del contexto de un lenguaje orientado a objetos (LOO), un objeto encapsula datos y los procedimientos/funciones (mtodos) que manejan esos datos. La notacin grfica de un objeto vara de unas metodologas a otras.

Mensajes
Un mensaje es una peticin de un objeto a otro objeto al que se le solicita ejecutar uno de sus mtodos. Por convenio, el objeto que enva la peticin se denomina emisor y el objeto que recibe se denomina receptor. Estructuralmente, un mensaje consta de tres partes:
y y

Identidad del receptor El mtodo que se ha de ejecutar

Informacin especial necesaria para realizar el mtodo invocado (argumentos o parmetros requeridos).

Cunado un objeto esta inactivo (durmiendo) y recibe mensaje se hace activo. El mensaje enviado por otros objetos o fuentes tiene asociado un mtodo que se activara cuando el receptor recibe dicho mensaje. La peticin no especfica como se realiza la operacin. Tal informacin se oculta siempre al emisor. El conjunto de mensajes a los que corresponde un objeto se denomina comportamiento del objeto. No todos los mensajes de un objeto responden; es preciso que pertenezcan al interfaz accesible.

Mtodos
Cuando un objeto recibe un mensaje, se realiza la operacin solicitada ejecutando un mtodo. Un mtodo es el algoritmo ejecutado en respuesta as la recepcin de un mensaje cuyo nombre se corresponde con el nombre del mtodo. La secuencia actual de acontecimientos es que el emisor enva su mensaje; el receptor ejecuta el mtodo apropiado, consumiendo los parmetros; a continuacin, el receptor devuelve algn tipo de respuesta al emisor para reconocer el mensaje y devolver cualquier informacin que se haya solicitado. Los mtodos (operaciones o servicios) describen el comportamiento asociado de un objeto. Representan las acciones que puedan realizarse por un objeto o sobre un objeto la ejecucin de un mtodo puede conducir a cambiar el estado del objeto o dato local del objeto. Un mtodo dentro de un objeto se activa por un mensaje que se enva por otro objeto al objeto que contiene el mtodo. De modo alternativo se puede llamar por otro mtodo el mismo objeto por un mensaje local enviado de un mtodo a otro dentro del objeto.

Mtodo: Precio_coche Inicio Precio_coche=Precio_coche*(marca+1); Fin

CLASES

La clase es la construccin del lenguaje utilizada mas frecuentemente para definir los tipos abstractos de datos en lenguajes de programacin orientados a objetos. Una de las primeras veces que se utilizo el concepto de clase fue en Simula (Dahl y Nygaard, 1966; Dhal, Myhrhang y Nigaard, 1970) como entidad que declara conjunto de objetos similares. En Simula, las clases se utilizaron principalmente como plantillas para crear objetos de una misma estructura. Los atributos de un objeto pueden ser tipos base, tales como enteros, reales y booleans; o bien pueden ser array, procedimientos o instancias de otras clases. Generalmente, una clase se puede definir como una descripcin abstracta de un grupo de objetos, cada uno de los cuales se diferencia por un estado especifico y es capas de realizar una serie de operaciones. Por ejemplo una pluma estilogrfica es un objeto que tiene un estado (llena de tinta o vaca) que puede realizar algunas operaciones (por ejemplo, escribir, poner/quitar el capuchn, rellenar si esta vaca). En programacin, una clase es una estructura que contiene datos y prosediminetos (o funciones) que son capases de operar sobre esos datos. Una clase pluma estilogrfica puede tener, por ejemplo, una variable que indica si esta llena o vaca; otra variable puede contener la cantidad de tinta cargada realmente. La clase contendr algunas funciones que operan o utilizan esas variables. Dentro de un programa, las clases tienen dos propsitos principales: definir abstracciones y favorecer la modularidad. Cul es la diferencia entre una clase y un objeto, con independencia de su complejidad? Una clase verdaderamente describe una familia de elementos similares. En realidad un a clase es una plantilla para un tipo particular de objetos. Si se tienen muchos objetos del mismo tipo, solo hay que definir las caractersticas generales de ese tipo una vez, en lugar de en cada objeto. Apartir de una clase se puede definir un nmero de objetos. Cada uno de estos objetos tendr, generalmente, un estado peculiar propio (una pluma puede estar rellenada, otra puede estar medio vaca y otra estar totalmente vaca) y otras caractersticas (como su color), aunque compartirn operaciones comunes (como <<escribir>>, <<llenar>>, <<poner el capuchn>>, etc.).

Ahora va a empezar un pequeo bombardeo de nuevas palabras reservadas de C++, pero no te asustes, no es tan complicado como parece. La primera palabra que aparece es lgicamente class que sirve para declarar una clase. Su uso es parecido a la ya conocida struct: class <identificador de clase> [<:lista de clases base>] { <lista de miembros>

} [<lista de objetos>]; La lista de clases base se usa para derivar clases, de momento no le prestes demasiada atencin, ya que por ahora slo declararemos clases base. La lista de miembros ser en general una lista de funciones y datos. Los datos se declaran del mismo modo en que lo hacamos hasta ahora, salvo que no pueden ser inicializados, recuerda que estamos hablando de declaraciones de clases y no de definiciones de objetos. En el siguiente captulo veremos el modo de inicializar las variables de un objeto. Las funciones pueden ser simplemente declaraciones de prototipos, que se deben definir aparte de la clase pueden ser tambin definiciones. Cuando se definen fuera de la clase se debe usar el operador de mbito "::". Lo veremos mucho mejor con un ejemplo. #include <iostream> using namespace std; class pareja { private: // Datos miembro de la clase "pareja" int a, b; public: // Funciones miembro de la clase "pareja" void Lee(int &a2, int &b2); void Guarda(int a2, int b2) { a = a2; b = b2; } }; void pareja::Lee(int &a2, int &b2) { a2 = a;

b2 = b; } int main() { pareja par1; int x, y; par1.Guarda(12, 32); par1.Lee(x, y); cout << "Valor de par1.a: " << x << endl; cout << "Valor de par1.b: " << y << endl; cin.get(); return 0; } Nuestra clase "pareja" tiene dos miembros de tipo de datos: a y b. Y dos funciones, una para leer esos valores y otra para modificarlos. En el caso de la funcin "Lee" la hemos declarado en el interior de la clase y definido fuera, observa que en el exterior de la declaracin de la clase tenemos que usar la expresin: void pareja::Lee(int &a2, int &b2) Para que quede claro que nos referimos a la funcin "Lee" de la clase "pareja". Ten en cuenta que pueden existir otras clases que tengan funciones con el mismo nombre, y tambin que si no especificamos que estamos definiendo una funcin de la clase "pareja", en realidad estaremos definiendo una funcin corriente. En el caso de la funcin "Guarda" la hemos definido en el interior de la propia clase. Esto lo haremos slo cuando la definicin sea muy simple, ya que dificulta la lectura y comprensin del programa. Adems, las funciones definidas de este modo sern tratadas como "inline", y esto slo es recomendable para funciones cortas, ya que, (como recordars), en estas funciones se inserta el cdigo cada vez que son llamadas.
En resumen, un objeto es una instancia de una clase.

SUBCLASES
Una clase nueva que se crea a partir de una clase ya existente, utilizando herencia, se denomina clase clase derivada o subclase. La clase padre se denomina clase base o superclase.

Caracteristicas de la POO

Abstraccin
Una clase abstracta es aquella que contiene al menos una funcin virtual pura. Una funcin virtual pura es una funcin miembro que se declara utilizando un especificador puro que significa que el prototipo de la funcin termina con un <<=0>>. La funcin se debe implementar en cualquier clase derivada antes de que se creen las instancias.

Para crear un ejemplo de clases abstractas, recurriremos de nuevo a nuestra clase "Persona". Haremos que sta clase sea abstracta. De hecho, en nuestros programas de ejemplo nunca hemos declarado un objeto "Persona". Veamos un ejemplo: #include <iostream> #include <cstring> using namespace std; class Persona { public: Persona(char *n) { strcpy(nombre, n); } virtual void Mostrar() = 0; protected: char nombre[30];

}; class Empleado : public Persona { public: Empleado(char *n, int s) : Persona(n), salario(s) {} void Mostrar() const; int LeeSalario() const { return salario; } void ModificaSalario(int s) { salario = s; } protected: int salario; }; void Empleado::Mostrar() const { cout << "Empleado: " << nombre << ", Salario: " << salario << endl; } class Estudiante : public Persona { public: Estudiante(char *n, float no) : Persona(n), nota(no) {} void Mostrar() const; float LeeNota() const { return nota; } void ModificaNota(float no) { nota = no; } protected: float nota; };

void Estudiante::Mostrar() { cout << "Estudiante: " << nombre << ", Nota: " << nota << endl; } int main() { Persona *Pepito = new Empleado("Jose", 1000); (1) Persona *Pablito = new Estudiante("Pablo", 7.56); char n[30]; Pepito->Mostrar(); Pablito->Mostrar(); cin.get(); return 0; } La salida ser as: Empleado: Jose, Salario: 1000 Estudiante: Pablo, Nota: 7.56 En este ejemplo combinamos el uso de funciones virtuales puras con polimorfismo. Fjate que, aunque hayamos declarado los objetos "Pepito" y "Pablito" de tipo puntero a "Persona" (1), en realidad no creamos objetos de ese tipo, sino de los tipos "Empleado" y "Estudiante"

Polimorfismo
Es la propiedad de que <<algo>> tome diferentes formas. En un lenguaje orientado a objetos el polimorfismo es la propiedad por la que un mensaje puede significar cosas diferentes dependiendo el objeto que lo recibe.

Para implementar el polimorfismo, un lenguaje debe soportar ligadura dinmica. La razn por que el polimorfismo es til es que proporciona la capacidad de manipular instancias de clases derivadas a travs de un conjunto de operaciones definidas es su clase base. Cada clase derivada puede implementar las operaciones definidas en la clase base.

Veamos un ejemplo, de la estructura de clases basado en la clase "Persona" y supongamos que tenemos la clase base "Persona" y dos clases derivadas: "Empleado" y "Estudiante".
Ejemplo:

#include <iostream> #include <cstring> using namespace std; class Persona { public: Persona(char *n) { strcpy(nombre, n); } void VerNombre() { cout << nombre << endl; } protected: char nombre[30]; }; class Empleado : public Persona { public: Empleado(char *n) : Persona(n) {} void VerNombre() { cout << "Emp: " << nombre << endl; } };

class Estudiante : public Persona { public: Estudiante(char *n) : Persona(n) {} void VerNombre() { cout << "Est: " << nombre << endl; } }; int main() { Persona *Pepito = new Estudiante("Jose"); Persona *Carlos = new Empleado("Carlos"); Carlos->VerNombre(); Pepito->VerNombre(); delete Pepito; delete Carlos; cin.get(); return 0; }

Herencia
Una clase hereda sus caractersticas (datos y funciones) de otra clase. La herencia supone una clase base y una jerarqua de clases que contienen las clases derivadas de la clase base. Las clases derivadas pueden heredar el cdigo y los datos de su clase base, aadiendo su propio cdigo especial y datos a ellas, incluso cambiar aquellos elementos de la clase base que se necesita sean diferentes.

No se debe confundir las relaciones de los objetos con las clases, con las relaciones de una clase base con sus clases derivadas. Los objetos existentes en la memoria de la computadora expresan las caractersticas exactas de su clase y sirven como un modulo o plantilla. Las clases derivadas heredan caractersticas de su propia clase base, pero aaden otras caractersticas propias nuevas.

Tipos de herencia
Herencia simple. Es la relacin entre clases que se produce cuando una nueva clase se crea utilizando las propiedades de una clase ya existente. La nueva clase se denomina clase base. Las relaciones de herencia reducen cdigo redundante en programas. Uno de los requisitos para que un lenguaje sea considerado orientado a objetos o basados en objetos es que soporte herencia.

Herencia privada. Es el termino que se utiliza cuando una clase derivada restringe el acceso a los miembros de su clase hacindolos privados. Esto impide a los usuarios de la clase derivada acceder a los miembros de la clase base.

Herencia mltiple. Se produce cuando una clase se deriva de dos o ms clases base. Aunque es una herramienta potente, puede crear problemas, especialmente de colisin o conflicto de nombres, cosa que se produce cuando nombres idnticos aparecen en mas de una clase base.

C++ como lenguaje orientado a objetos

Grady Booch, autor del mtodo del diseo orientados a objetos, define la programacin orientada a objetos (POO) como

<<Un mtodo de implementacin en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representan una instancia de alguna clase, y cuyas clases son todas miembros de una jerarqua de clases unidas mediante relaciones de erencia>>.

Existen tres importantes partes en la definicin: la programacin orientada a objetos.

1.- Utiliza objetos, no algoritmos, como bloques de construccin lgicos (jerarqua de objetos). 2.- Cada objeto es una instancia de una clase. 3.- Las clases se relacionan unas con otras por medio de relaciones de herencia.

Un programa puede parecer orientado objetos, pero si cualquiera de estos elementos no existe, no es un programa orientado a objetos. Los conceptos fundamentales de la programacin son: objetos, clases, herencia, mensajes y polimorfismo.

Los programas orientados a objetos constan de objetos. Los objetos de un programa se comunican con cada uno de los restantes pasando mensajes.

Entrada y salida estndar

La biblioteca C++ proporciona facilidades para entrada y salida que son ms convenientes que las funciones de biblioteca clsica. En C++ la entrada y salida se lee y se escribe en flujos (streams). Cuando iostream.h se incluye en un programa, diferentes flujos estndar son definidos automticamente. El flujo cin se utiliza para entrada, que normalmente se lee de teclado. El flujo cout se utiliza para salida y, normalmente, se enva a la pantalla de usuario.

Salida
El operador de insercin, <<, inserta datos en el flujo cout que los visualiza en la pantalla de su equipo. As por ejemplo, cout << "Esto es una cadena"; visualiza Esto es una cadena

Entrada
El archivo de cabecera iostream.h de la biblioteca C++ proporciona un flujo de entrada estndar cin y un operador de extraccin, >>, para extraer valores del flujo y almacenarlos en variables. Si no se redirige explcitamente cin, la estrada procede del teclado. int n; cin>> n; double x; cin x;

El medio mas sencillo para introducir respuestas por el teclado es utilizar el flujo de entrada y el operador de extraccin en union de un flujo de salida y el operador de insercin. Un ejemplo tpico es el siguiente: cout<<"Introdusca v1 y v2: "; cin>>v1>>v2 //lectura valores v1 y v2 cout<<"v1="<<v1<<",b="<<b<<'\n'; cout<<"Precio de venta al pblico:";

cin>> precio_venta;
http://rogerdjc.tripod.com/contenido.htm