Sei sulla pagina 1di 90

ESCUELA POLITCNICA DEL EJERCITO

PROGRAMACION ORIENTADA DE OBJETOS


Ing. Jos Luis Carrillo Medina
CARRERA DE MECTRNICA ESCUELA POLITCNICA DEL EJERCITO Marzo, 2011

OBJETIVOS
Conocer los conceptos bsicos de los programas orientados a objetos (POO). Conocer herramientas de desarrollo de POO: Turbo C++, Visual C++. Implementar programas para Windows en C++ utilizando Microsoft Foundation Class Library 6.0 (MFC).

CONOCIMIENTOS PREVIOS
A personas que quieren programar para Windows y quieren hacerlo en C++ Saber como programar sea C o C++, Visual Basic, Pascal, o cualquier otro lenguaje de programacin.

CONTENIDO
Lenguaje de Programacin Orientado a Objetos: C++ Turbo C++ 3.0 Visual C++ 6.0 Microsoft Foundation Class Library 6.0 Bibliografa

BIBLIOGRAFA
Herbert Schildt. Turbo C++, Mc Graw Hill, Espaa, 1996.
Herbert Schildt. C++ Guia de la Autoenseanza, Mc Graw Hill, Espaa, 1996. Jon Bates & Tim Tompkins. Descubre Microsoft Visual C++, Prentice Hall, Espaa, 1999 Chuck Sphar. Aprenda Microsoft Visual C++ 6.0 Ya. Mc Graw Hill, Espaa, 1999. Jose Luis Carrillo M, Programacin Orientada a Objetos: Curso C++, Mayo 2004

Curso de C++
Proceso para la obtencin de un programa ejecutable
Probablemente este es el lugar ms adecuado para explicar cmo se obtiene un fichero ejecutable a partir de un programa C++. Para empezar necesitamos un poco de vocabulario tcnico. Veremos algunos conceptos que se manejan frecuentemente en cualquier curso de programacin y sobre todo en manuales de C y C++.

Curso de C++
Fichero fuente y programa o cdigo fuente:
Los programas C y C++ se escriben con la ayuda de un editor de textos del mismo modo que cualquier texto corriente. Los ficheros que contiene programas en C o C++ en forma de texto se conocen como ficheros fuente, y el texto del programa que contiene se conoce como programa fuente. Nosotros siempre escribiremos programas fuente y los guardaremos en ficheros fuente.

Curso de C++
Ficheros objeto, cdigo objeto y compiladores:
Los programas fuente no pueden ejecutarse. Son ficheros de texto, pensados para que los comprendan los seres humanos, pero incomprensibles para los ordenadores. Para conseguir un programa ejecutable hay que seguir algunos pasos. El primero es compilar o traducir el programa fuente a su cdigo objeto equivalente. Este es el trabajo que hacen los compiladores de C y C++. Consiste en obtener un fichero equivalente a nuestro programa fuente

Curso de C++
comprensible para el ordenador, este fichero se conoce como fichero objeto, y su contenido como cdigo objeto. Los compiladores son programas que leen un fichero de texto que contiene el programa fuente y generan un fichero que contiene el cdigo objeto. El cdigo objeto no tiene ningn significado para los seres humanos, al menos no directamente. Adems es diferente para cada ordenador y para cada sistema operativo. Por lo tanto existen diferentes compiladores para diferentes sistemas operativos y para cada tipo de ordenador.

Curso de C++
Libreras:
Junto con los compiladores de C y C++, se incluyen ciertos ficheros llamados libreras. Las libreras contienen el cdigo objeto de muchos programas que permiten hacer cosas comunes, como leer el teclado, escribir en la pantalla, manejar nmeros, realizar funciones matemticas, etc. Las libreras estn clasificadas por el tipo de trabajos que hacen, hay libreras de entrada y salida, matemticas, de manejo de memoria, de manejo de textos, etc.

Curso de C++
Hay un conjunto de libreras muy especiales, que se incluyen con todos los compiladores de C y de C++. Son las libreras ANSI o estndar. Pero tambin hay libreras no estndar, y dentro de estas las hay pblicas y comerciales. En este curso slo usaremos libreras ANSI.

Ficheros ejecutables y enlazadores:


Cuando obtenemos el fichero objeto, an no hemos terminado el proceso. El fichero objeto, a pesar de ser comprensible para el ordenador, no puede ser ejecutado. Hay varias razones para eso:

Curso de C++
1. Nuestros programas usaran, en general, funciones que estarn incluidas en libreras externas, ya sean ANSI o no. Es necesario combinar nuestro fichero objeto con esas libreras para obtener un ejecutable. 2. Muy a menudo, nuestros programas estarn compuestos por varios ficheros fuente, y de cada uno de ellos se obtendr un fichero objeto. Es necesario unir todos los ficheros objeto, ms las libreras en un nico fichero ejecutable.

Curso de C++
3. Hay que dar ciertas instrucciones al ordenador para que cargue en memoria el programa y los datos, y para que organice la memoria de modo que se disponga de una pila de tamao adecuado, etc. La pila es una zona de memoria que se usa para que el programa intercambie datos con otros programas o con otras partes del propio programa. Veremos esto con ms detalle durante el curso.

Existe un programa que hace todas estas cosas, se trata del "link", o enlazador. El enlazador toma

Curso de C++
todos los ficheros objeto que componen nuestro programa, los combina con los ficheros de librera que sea necesario y crea un fichero ejecutable. Una vez terminada la fase de enlazado, ya podremos ejecutar nuestro programa.

Errores:
Por supuesto, somos humanos, y por lo tanto nos equivocamos. Los errores de programacin pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten.

Curso de C++
Errores de sintaxis: son errores en el programa
fuente. Pueden deberse a palabras reservadas mal escritas, expresiones errneas o incompletas, variables que no existen, etc. Los errores de sintaxis se detectan en la fase de compilacin. El compilador, adems de generar el cdigo objeto, nos dar una lista de errores de sintaxis. De hecho nos dar slo una cosa o la otra, ya que si hay errores no es posible generar un cdigo objeto.

Curso de C++
Avisos: adems de errores, el compilador puede
dar tambin avisos (warnings). Los avisos son errores, pero no lo suficientemente graves como para impedir la generacin del cdigo objeto. No obstante, es importante corregir estos avisos, ya que el compilador tiene que decidir entre varias opciones, y sus decisiones no tienen por qu coincidir con lo que nosotros pretendemos, se basan en las directivas que los creadores del compilador decidieron durante su creacin.

Curso de C++
Errores de enlazado: el programa enlazador
tambin puede encontrar errores. Normalmente se refieren a funciones que no estn definidas en ninguno de los ficheros objetos ni en las libreras. Puede que hayamos olvidado incluir alguna librera, o algn fichero objeto, o puede que hayamos olvidado definir alguna funcin o variable, o lo hayamos hecho mal.

Errores de ejecucin: incluso despus de obtener


un fichero ejecutable, es posible que se produzcan errores.

Curso de C++
En el caso de los errores de ejecucin normalmente no obtendremos mensajes de error, sino que simplemente el programa terminar bruscamente. Estos errores son ms difciles de detectar y corregir. Existen programas auxiliares para buscar estos errores, son los llamados depuradores (debuggers). Estos programas permiten detener la ejecucin de nuestros programas, inspeccionar variables y ejecutar nuestro programa paso a paso. Esto resulta til para detectar excepciones, errores sutiles, y fallos que se presentan dependiendo de circunstancias distintas.

Curso de C++
Errores de diseo: finalmente los errores ms
difciles de corregir y prevenir. Si nos hemos equivocado al disear nuestro algoritmo, no habr ningn programa que nos pueda ayudar a corregir los nuestros. Contra estos errores slo cabe practicar y pensar.

Curso de C++
Qu clase de programas y aplicaciones se pueden crear usando C y C++?
La respuesta es muy sencilla: TODOS.

Tanto C como C++ son lenguajes de programacin de propsito general. Todo puede programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, etc.

Curso de C++
Oirs y leers mucho sobre este tema. Sobre todo diciendo que estos lenguajes son complicados y que requieren pginas y pginas de cdigo para hacer cosas que con otros lenguajes se hacen con pocas lneas. Esto es una verdad a medias. Es cierto que un listado completo de un programa en C o C++ para gestin de bases de datos (por poner un ejemplo) puede requerir varios miles de lneas de cdigo, y que su equivalente en Visual Basic slo requiere unos pocos cientos. Pero detrs de cada lnea de estos compiladores de alto nivel hay

Curso de C++
cientos de lneas de cdigo en C, la mayor parte de estos compiladores estn respaldados por enormes libreras escritas en C. Nada te impide a ti, como programador, usar libreras, e incluso crear las tuyas propias.

Una de las propiedades de C y C++ es la reutilizacin del cdigo en forma de libreras de usuario. Despus de un tiempo trabajando, todos los programadores desarrollan sus propias libreras para aquellas cosas que hacen frecuentemente. Y adems, raramente piensan en ello, se limitan a usarlas.

Curso de C++
Adems, los programas escritos en C o C++ tienen otras ventajas sobre el resto. Con la excepcin del ensamblador, generan los programas ms compactos y rpidos. El cdigo es transportable, es decir, un programa ANSI en C o C++ podr ejecutarse en cualquier mquina y bajo cualquier sistema operativo. Y si es necesario, proporcionan un acceso a bajo nivel de hardware slo igualado por el ensamblador.

Curso de C++
Otra ventaja importante, C tiene ms de 30 aos de vida, y C++ casi 20 y no parece que su uso se debilite demasiado. No se trata de un lenguaje de moda, y probablemente a ambos les quede an mucha vida por delante. Slo hay que pensar que sistemas operativos como Linux, Unix o incluso Windows se escriben casi por completo en C.

Curso de C++

Por ltimo, existen varios compiladores de C y C++ gratuitos, o bajo la norma GNU, as como cientos de libreras de todo propsito y miles de programadores en todo el mundo, muchos de ellos dispuestos a compartir su experiencia y conocimientos.

Curso de C++
TIPOS DE DATOS EN C++

TIPO ENTEROS

NOMBRE Char Int Long int

REALES CARACTER VACO

float double Long double Char Void

RANGO DE VALORES -128..127 -32768..32767 2.147.438.648..2.147.483.647 +/-1E-37..+/-1E38 +/-1E-307..+/-1E308 +/-1E-4932..+/-1E4932 CDIGO ASCII -

Curso de C++
TIPOS ENUMERADOS Un tipo enumerado o enumeracin est construido

por una serie de constantes simblicas enteras. El


ejemplo asocia falso a cero y verdadero a 1. enum {falso, verdadero}; // falso =0, verdadero =1

Esta asignacin se puede cambiar:


enum {lunes=1,martes, mircoles}; //lunes=1, martes=2, mircoles=3 enum {lunes=10,martes=20,mircoles=30} enum dias {lunes, martes, mircoles};

Curso de C++
INTRODUCCIN A LOS LENGUAJES ORIENTADOS A OBJETOS
La Programacin Orientada a Objetos (POO) es una nueva forma de programacin que se utiliza para desarrollar programas ms eficientes y con gran fiabilidad. Para ello quiz sea necesario dejar a un lado las ideas de la programacin tradicional, en la que los datos se tratan separadamente de los procedimientos que actan como una caja negra, y adentrarse en aquellas orientadas a objetos, en la que los programas se dividen en entidades

Curso de C++
INTRODUCCIN A LOS LENGUAJES ORIENTADOS A OBJETOS
independientes conocidas como objetos, que contienen datos y procedimientos que actan sobre esos datos. Dichos objetos se comunican entre s por medio de mtodos a travs de mensajes que son acciones que debe ejecutar el objeto. Objetos fsicos (un automvil, un avin), elementos de interfaces grficas de usuario (ventanas, botones, conos), estructuras de datos (arrays, pilas, colas), tipos de datos definidos por el usuario (nmeros complejos, puntos de un plano), etc.

Curso de C++
EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOS
Lenguaje ensamblador: en los primeros computadores la programacin se realizaba con instrucciones de lenguaje de mquina en cdigo binario; al aumentar la complejidad de los programas se cre un traductor llamado ensamblador que converta a lenguaje de mquina.

Lenguaje de alto nivel: con ellos se pudieron resolver problemas un poco ms complejos, pero con ellos se dificulta la creacin de programas ms grandes y elaborados.

Curso de C++
EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOS
Lenguaje de procedimientos: el modelo utilizado en estos lenguajes es la caja negra, donde cada parte de un programa se cambia completamente por una caja negra o procedimiento. Tales procedimientos tienen ms importancia que los datos; mientras que ciertos datos se introducen, otros salen de l. Estos lenguajes se utilizan para proyectos limitados, pero aparecen dificultades a medida que aumenta la complejidad en los programas.

Curso de C++
EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOS
Lenguaje estructurado: estos lenguajes tienen las siguientes caractersticas: fcil lectura, fcil modificacin y fcil deteccin de errores; de esta manera se salvaron los programas de lenguaje de procedimiento para su empleo en grandes proyectos. Sin embargo, en este tipo de lenguaje, se necesita gran prudencia y planificacin para que un proyecto se ensamble correctamente, sin errores y sea fcil de mantener, pero esta tcnica de programacin no puede ser utilizada cuando un proyecto alcanza cierto tamao y complejidad.

Curso de C++
EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOS
Lenguaje orientado a objetos: estos lenguajes tienen un nuevo medio de organizar cdigo y datos para realizar un control creciente de la complejidad del proceso de desarrollo del software, ya que las propiedades fundamentales de la POO son: herencia, encapsulacin y polimorfismo, junto con los conceptos de: objetos, clases, mtodos y mensajes.

Curso de C++
VENTAJAS Y DESVENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS.
Ventajas. Un lenguaje de programacin que soporta POO beneficia el desarrollo de software de programas extensos y sofisticados, ya que ofrece una forma ms natural de desarrollo de modelos utilizando clases. Un lenguaje con POO tiene menos lneas de cdigo, menos sentencias de bifurcacin, y mdulos que son ms comprensibles porque reflejan de una forma ms clara la relacin existente entre cada concepto a desarrollar.

Curso de C++
VENTAJAS Y DESVENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS.
Ventajas. La herencia, que es una caracterstica exclusiva de la POO, es una de las claves ms importantes para la reutilizacin de cdigo, que a su vez reduce el cdigo de programacin, y para la creacin de programas extensibles. En la POO no se necesita examinar todo el cdigo fuente para ver si un cambio local afecta a otras partes, porque se utiliza el concepto de encapsulamiento de los objetos.

Curso de C++
VENTAJAS Y DESVENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS.
Desventajas. Obliga a usuario a conocer una amplia librera de clases antes de empezar a manipular un lenguaje orientado a objetos. La ejecucin de un programa orientado a objetos es ms lenta, porque se aprovecha todos los recursos de la plataforma utilizada para el desarrollo de dicho programa.

Curso de C++
CARACTERSTICAS DE LA PROGRAMACIN ORIENTADA A OBJETOS
Los objetos son paquetes compactos que no se rompen al aadir otros objetos, por lo que si existen errores en el nuevo objeto estos sern aislados del resto del programa. Un lenguaje orientado a objetos soporta datos abstractos (clases), herencia y polimorfismo.

Mediante la herencia los objetos pueden adquirir las propiedades de otros objetos ya existentes y aadir sus propias caractersticas.

Curso de C++
CARACTERSTICAS DE LA PROGRAMACIN ORIENTADA A OBJETOS
La abstraccin y ocultacin de datos reduce la dependencia de los mdulos.

Los datos internos que definen el estado actual del objeto y los mtodos que definen su comportamiento estn encapsulados.
Los objetos pueden comunicarse entre s por medio de mensajes a travs de sus mtodos.

Curso de C++
LOS LENGUAJES DE PROGRAMACIN ORIENTADOS A OBJETOS
Los lenguajes de programacin orientados objetos se dividen en puros e hbridos. a

Los lenguajes de programacin orientados a objetos puros son aquellos que tienen las orientadas a objetos como: Smalltalk y Eiffel.
Los lenguajes de programacin orientados a objetos hbridos son aquellos que aaden las propiedades de orientacin a objetos a las propiedades intrnsecas de tipo procedimental como C++ y Objective C.

Curso de C++
Programacion Orientada a Objetos:
Siglas de Programacin Orientada a Objetos POO". En ingls se pone al revs "OOP". 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.

Curso de C++
Objeto:
Un objeto es una unidad que engloba en s mismo datos y procedimientos necesarios para el tratamiento de esos datos. Hasta ahora habamos hecho programas en los que los datos y las funciones estaban perfectamente separadas, cuando se programa con objetos esto no es as, cada objeto contiene datos y funciones. Y un programa se construye como un conjunto de objetos, o incluso como un nico objeto.

Curso de C++
Mensaje:
El mensaje es el modo en que se comunican los objetos entre si. En C++, un mensaje no es ms que una llamada a una funcin de un determinado objeto. Cuando llamemos a una funcin de un objeto, muy a menudo diremos que estamos enviando un mensaje a ese objeto.

En este sentido, mensaje es el trmino adecuado cuando hablamos de programacin orientada a objetos en general.

Curso de C++
Mtodo:
Se trata de otro concepto de POO, los mensajes que lleguen a un objeto se procesarn ejecutando un determinado mtodo. En C++ un mtodo no es otra cosa que una funcin o procedimiento perteneciente a un objeto.

Curso de C++
Clase:
Una clase se puede considerar como un patrn para construir objetos. En C++, un objeto es slo un tipo de variable de una clase determinada. Es importante distinguir entre objetos y clases, la clase es simplemente una declaracin, no tiene asociado ningn objeto, de modo que no puede recibir mensajes ni procesarlos, esto nicamente lo hacen los objetos.

Curso de C++
Interfaz:
Las clases y por lo tanto tambin los objetos, tienen partes pblicas y partes privadas. Algunas veces llamaremos a la parte pblica de un objeto su interfaz. Se trata de la nica parte del objeto que es visible para el resto de los objetos, de modo que es lo nico de lo que se dispone para comunicarse con ellos.

Curso de C++
Encapsulamiento: Es tener todos los datos lo ms privado posible, y para poder acceder a ellos, sera necesario acceder a los metodos (funciones) que proporcione el modulo, limitando el acceso. Abstraccion: Representar la realidad con los detalles necesarios, sin los no necesarios para el dominio del problema que hay que representar.

Curso de C++
Polimorfismo.
(Polimorfismo significa muchas formas) Es una caracterstica de la programacin orientada a objetos que permite que un nombre pueda utilizarse en dos o mas formas, para dos o mas propsitos relacionados entre si. Esto significa que el lenguaje C++ puede admitir una sobrecarga de funciones u operadores de una misma funcin.

Curso de C++
Herencia:
Veremos que es posible disear nuevas clases basndose en clases ya existentes. En C++ esto se llama derivacin de clases, y en POO herencia. Cuando se deriva una clase de otra, normalmente se aadirn nuevos mtodos y datos. El conjunto de datos y mtodos que sobreviven, es lo que se conoce como herencia. La Herencia ayuda a la reutilizacin del cdigo cuando se utiliza con el Polimorfismo y es til para reutilizar diseos del programa y crear programas extensibles.

Curso de C++
Declaracin de una clase
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>];

Curso de C++
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.

Curso de C++
Las funciones pueden ser simplemente declaraciones de prototipos, que se deben definir aparte de la clase o tambin definiciones. Cuando se definen fuera de la clase se debe usar el operador de mbito "::". Lo veremos mucho mejor con un ejemplo.

Aqu va un Ejemplo:

Curso de C++
Especificaciones de acceso:
Dentro de la lista de miembros, cada miembro puede tener diferentes niveles de acceso.
class <identificador de clase>{ public: <lista de miembros> private: <lista de miembros> protected: <lista de miembros> };

Curso de C++
Acceso privado, private:
Los miembros privados de una clase slo son accesibles por los propios miembros de la clase y en general por objetos de la misma clase, pero no desde funciones externas o desde funciones de clases derivadas.

Acceso pblico, public:


Cualquier miembro pblico de una clase es accesible desde cualquier parte donde sea accesible el propio objeto.

Aqu va un Ejemplo:

Curso de C++
Constructores
Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase cuando se declara. Los constructores tienen el mismo nombre que la clase, no retornan ningn valor y no pueden ser heredados. Adems deben ser pblicos, no tendra ningn sentido declarar un constructor como privado, ya que siempre se usan desde el exterior de la clase, ni tampoco como protegido, ya que no puede ser heredado.

Aqu va un Ejemplo:

Curso de C++
Destructores
Los destructores son funciones miembro especiales que sirven para eliminar un objeto de una determinada clase, liberando la memoria utilizada por dicho objeto. Los destructores tienen el mismo nombre que la clase, pero con el smbolo ~ delante, no retornan ningn valor y no pueden ser heredados. Cuando se define un destructor para una clase, ste es llamado automticamente cuando se abandona el mbito en el que fue definido.

Curso de C++
Esto es as salvo cuando el objeto fue creado dinmicamente con el operador new, ya que en ese caso, si es necesario eliminarlo, hay que usar el operador delete. En general, ser necesario definir un destructor cuando nuestra clase tenga datos miembro de tipo puntero, aunque esto no es una regla estricta. El destructor no puede sobrecargarse, por la sencilla razn de que no admite argumentos.

Aqu va un Ejemplo:

Curso de C++
Constructores con Parmetros
A menudo, cuando se crea un objeto, es necesario o deseable inicializar varios elementos de datos con valores especficos. El concepto de inicializacin de objetos se amplia para permitir la inicializacin de objetos especficos utilizando valores definidos por el programador.

Aqu va un Ejemplo:

Curso de C++
Funciones inline
C++ permite sustituir, en tiempo de compilacin, la llamada a una funcin por el cdigo correspondiente en el punto en que se realiza la llamada. De esta manera la ejecucin es ms rpida, pues no se pierde tiempo transfiriendo el control y realizando conversiones de parmetros. Como contrapartida, el programa resultante ocupa ms memoria, pues es posible que el cdigo de una misma funcin se introduzca muchas veces, con las repeticiones consiguientes. Las funciones inline resultan interesantes en el caso de funciones muy breves, que aparecen en pocas lneas de cdigo pero que se ejecutan muchas veces (en un bucle for, por ejemplo).

Curso de C++
Existen dos formas de definirlas: Una primera forma de utilizar funciones inline es anteponer dicha palabra en la declaracin de la funcin, Otra forma de utilizar funciones inline sin necesidad de utilizar esta palabra es introducir el cdigo de la funcin en la declaracin (convirtindose de esta manera en definicin), ponindolo entre llaves { } a continuacin de sta.

Aqu va un Ejemplo

Curso de C++
Funciones friend
Una funcin que no es miembro de una clase y que puede acceder a la parte privada de una clase se le conoce como una funcin amiga(friend) de la clase. El formato de la declaracin de funciones friend es el siguiente:
class <nombre de la clase>{ public : friend <declaracin de funcin> //Datos y funciones miembros }

Curso de C++
Hay otros dos motivos por los que las funciones amigas son tiles y tienen que ver con la sobrecarga de operadores y la creacin de ciertos tipos de funciones de E/S.

Otro de los motivos es el de comparar los datos privados de dos clases como en el ejemplo siguiente que permite comparar las areas de dos objetos(triangulo y rectangulo).

Aqu va un Ejemplo

Curso de C++
POLIMORFISMO
Otra de las caractersticas mas importantes de un lenguaje orientado a objetos es el polimorfismo, el cual permite el uso de un nombre para especificar un nombre de accin general. De esta manera se ejecuta una parte especfica de la clase general dependiendo del tipo de dato con el que est tratando. En este captulo se presentan las formas de hacer polimorfismo: Sobrecarga de Funciones y Sobrecarga de Operadores

Curso de C++
Sobrecarga de funciones
Una de las maneras que tiene C++ de llegar al polimorfismo es a travs de la sobrecarga de funciones. En C++, dos o ms funciones pueden compartir un mismo nombre siempre y cuando difieran en la declaracin de sus parmetros. Las funciones que comparten el mismo nombre se dice que estn sobrecargadas.

Aqu va un Ejemplo:

Curso de C++
Sobrecarga de operadores
Para sobrecargar un operador se debe definir la operacin significa con relacin a la clase a la que se aplica. Para hacer esto, hay que crear una funcin operador que defina su accin. La forma general de declarar una sobrecarga de operadores es: tipo_devuelto nombre_clase :: operator # (lista de argumentos){ // operacin que se va ha realizar }

Curso de C++
# - es el operador que se quiere sobrecargar. tipo es el tipo de valor devuelto por la operacin especificada, es con frecuencia del mismo tipo que la clase para la cual se ha sobrecargado el operador. El objeto causante de una llamada a un operador sobrecargado siempre es el situado a la izquierda del operador. C++ permite sobrecargar los operadores de modo similar a lo que se hace con las funciones. La mayora de operadores de C++ pueden ser sobrecargados como son: +,-, *, /, =, ==, !=, <<, >>, etc. Los nicos operadores que no pueden sobrecargarse son: . :: .* ?

Curso de C++
Tampoco pueden sobrecargarse los operadores del preprocesador (El operador .* es muy especializado). En una expresin a + b donde a y b son objetos, a es el causante de la llamada (pasa su valor a travs de this), mientras que el valor de b es recibido a travs del paso de parmetros. En general, cuando se usa una funcin miembro no se necesitan parmetros al sobrecargar una operacin monaria y solo se necesita un parmetro cuando se sobrecarga un operador binario.

Aqu va un Ejemplo:

Curso de C++
HERENCIA
Otra de las caractersticas de un leguaje de programacin orientada a objetos es la herencia. La herencia es un proceso por medio del cual un objeto puede adquirir las propiedades de otro esto es importante porque permite dar soporte al concepto de calificacin. En este capitulo se presentan herencia simple, tipos de herencia, herencia con constructores sin parmetros y constructores con parmetros, herencia mltiple

Curso de C++
Herencia Simple
Las clases que heredan propiedades se llaman clase derivada, mientras que la clase de la que se heredan se denomina clase base. En herencia por lo menos existe una clase llamada clase base y otra llamada clase heredada. En nuestro lenguaje formulamos la herencia con "hereda de". En C++ estas palabras son reemplazadas por dos puntos ( : ). Una descripcin general de Herencia seria:

Curso de C++
class nombre_clase_base{ //datos y funciones miembros propios de la clase //base };

Class nombre_clase_derivada : modo_acceso nombre_clase_base{ //datos y funciones miembros propios de la //clase heredada };

Aqu va un Ejemplo

Curso de C++
Acceso protegido, protected:
Con respecto a las funciones externas, es equivalente al acceso privado, pero con respecto a las clases derivadas se comporta como pblico. Cada una de stas palabras, seguidas de ":", da comienzo a una seccin, que terminar cuando se inicie la seccin siguiente o cuando termine la declaracin de la clase. Es posible tener varias secciones de cada tipo dentro de una clase. Si no se especifica nada, por defecto, los miembros de una clase son privados.

Curso de C++
Tipos de Herencia (modos de acceso)
Es necesario porque C++ distingue dos tipos de herencia: pblica y privada. "Por default", las clases se derivan unas de otras en forma privada. Consecuentemente, debemos decirle explcitamente al compilador que use herencia pblica. modo_acceso: public: Los datos y funciones miembros public siguen siendo public, y los private siguen siendo private en la clase derivada. private: Los datos y funciones miembros public y private son todos private en la clase derivada.

Curso de C++
Herencia con Constructores sin parmetros.
Es posible que una clase base y una clase derivada tengan cada una su funcin de construccin sin parmetros. Cuando una clase derivada contiene un constructor, se ejecuta el constructor base antes de ejecutar el constructor de la clase derivada. Cuando existe herencia los constructores de las clases base se invocan por rden, de izquierda a derecha y siempre antes que el de la clase derivada. Mientras que los destructores se invocan de derecha a izquierda, y siempre despus que el destructor de la clase derivada.

Aqu va un Ejemplo

Curso de C++
Herencia con Constructores con parmetros.
Es posible que una clase base y una clase derivada tengan cada una su funcin de construccin con parmetros. Cuando una clase derivada contiene un constructor, se ejecuta el constructor base antes de ejecutar el constructor de la clase derivada. Si el constructor de la clase base tiene parmetros la clase derivada debe tener necesariamente un constructor con parmetros

Aqu va un Ejemplo

Curso de C++
Herencia Mltiple
Es posible que una clase herede atributos de dos o ms clases. Para realizar esto, se usa una lista de herencia, separada por comas, en la lista de las clases base de la clase derivada. class nombre_clase_derivada : lista_de_clases_bases{ datos y funciones miembros de la clase derivada };

Aqu va un Ejemplo

Curso de C++
CLASES BASES VIRTUALES
Cuando dos o ms objetos se derivan de una clase base comn, se puede impedir que estn presentes mltiples copias de la clase base en un objeto derivado de esos objetos, declarando la clase base como virtual cuando se hereda.

Aqu va un Ejemplo

Curso de C++
FUNCIONES VIRTUALES
Una funcin virtual es una funcin que se declara en la clase base como virtual y se redefine en una o ms clases derivadas. Las funciones virtuales son especiales, porque cuando se accede a una usando un puntero de la clase base a un objeto de una clase derivada, C++ determinada en tiempo de ejecucin a que funcin llamar en funcin del tipo de objeto apuntado. Una funcin virtual se declara como virtual dentro de la clase base usando la palabra clave virtual. Sin embargo, cuando se redefine una funcin virtual en una clase derivada no se necesita repetir la palabra clave virtual (aunque no es un error hacerlo).

Aqu va un Ejemplo

Curso de C++H
FUNCIONES VIRTUALES PURAS Y TIPOS ABSTRACTOS
Una funcin virtual pura es una funcin que se declara en una clase base y que no tiene definicin relativa a la base, por lo que todos los tipos derivados se ven obligados a definir su propia versin de esa funcin.

Para declarar una funcin virtual pura se utiliza la forma general:

Curso de C++H
virtual tipo nombre_funcion (lista parmetros) = 0; Si una clase tiene por lo menos una funcin virtual pura entonces se dice que esa clase es abstracta. Las clases abstractas tienen una caracterstica importante no puede haber objetos de esa clase, porque una o ms de sus funciones carecen de definicin. Nota: Pero si es posible declarar punteros de una clase abstracta.

Aqu va un Ejemplo

Curso de C++H
PLANTILLAS (TEMPLATE)
Las funciones genricas se crean mediante la palabra reservada template. La palabra template se refleja en el uso de C++. Se utiliza para crear una pantilla que describe lo que har una funcin, dejando al compilador que complete los detalles necesarios El formato de una funcin template es el siguiente:

template<class tipo> tipo_devuelto nombre_funcin(lista_de_parmetros){ //cuerpo de la funcin }

Curso de C++H
donde tipo es un nombre de marcador para el tipo de dato que utilizara la funcin, el nombre puede ser utilizado dentro de la funcin no obstante se trate nicamente de un marcador que el compilador se encargar de reemplazar automticamente por un tipo de dato real cuanto cree una versin especfica de la funcin.

Aqu va un Ejemplo

Curso de C++H
GESTIN DE EXCEPCIONES Y ERRORES Manejo De Excepciones
El control de flujo en un programa C++ puede hacerse mediante las ya conocidas sentencias estructuradas (if, while, return). Mediante las excepciones se podr evitar repetir continuamente cdigo, en busca de un posible error, y avisar a otros objetos de una condicin anormal de ejecucin durante un programa. Mediante la gestin de excepciones se prescindir de sentencias de control de errores del tipo: if ( error == true ) return ERROR;

Curso de C++H
Tipos de Excepciones:
Error: Excepciones que indican problemas muy graves, que suelen ser no recuperables y no deben casi nunca ser capturadas. Exception: Excepciones no definitivas, pero que se detectan fuera del tiempo de ejecucin.

Funcionamiento
Para que el sistema de gestin de excepciones funcione se ha de trabajar en dos partes de los programas:

Curso de C++H
Definir qu partes de los programas crean una excepcin y bajo qu condiciones. Para ello se utilizan las palabras reservadas throw y throws. Comprobar en ciertas partes de los programas si una excepcin se ha producido y actuar en consecuencia. Para ello se utilizan las palabras reservadas try, catch y finally.

Manejo de excepciones: try - catch finally


Cuando el programador va a ejecutar un trozo de cdigo que pueda provocar una excepcin (por ejemplo, una lectura en un archivo), debe incluir este fragmento de cdigo dentro de un bloque try:

Curso de C++H
try { // Cdigo posiblemente problemtico } Pero lo importante es cmo controlar, qu hacer con la posible excepcin que se cree. Para ello se utilizan las clusulas catch, en las que se especifica que accin realizar:

Aqu va un Ejemplo

Curso de C++H
try { // Cdigo posiblemente problemtico } catch( tipo_de_excepcion e) { // Cdigo para solucionar la excepcin e } catch( tipo_de_excepcion_mas_general e) { // Cdigo para solucionar la excepcin e }

Aqu va un Ejemplo

Curso de C++H
Ejemplo: Se observa que se pueden anidar sentencias catch, pero conviene hacerlo indicando en ltimo lugar las excepciones ms generales (es decir, que se encuentren ms arriba en el rbol de herencia de excepciones), porque el intrprete C++ ejecutar aquel bloque de cdigo catch cuyo parmetro sea del tipo de una excepcin lanzada.
Si no se ha lanzado ninguna excepcin el cdigo contina sin ejecutar ninguna sentencia catch.

Curso de C++H
Si quisiremos realizar una accin comn para todas las opciones. Se insertan fragmentos de cdigo que se ejecuten tras la gestin de las excepciones. Este cdigo se ejecutar tanto si se ha tratado una excepcin (catch) como si no. Este tipo de cdigo se inserta en una sentencia finally, que ser ejecutada tras el bloque try o catch: try { } catch( Exception e ) { } finally { // Se ejecutara tras try o catch }

Aqu va un Ejemplo

Curso de C++H
Lanzamiento de excepciones: throw - throws
Muchas veces el programador dentro de un determinado mtodo deber comprobar si alguna condicin de excepcin se cumple, y si es as lanzarla. Para ello se utilizan las palabras reservadas throw y throws. Por una parte la excepcin se lanza mediante la sentencia throw: if ( condicion_de_excepcion == true ) throw new miExcepcion();

Curso de C++H
Se puede observar que hemos creado un objeto de la clase miExcepcion, puesto que las excepciones son objetos y por tanto debern ser instanciadas antes de ser lanzadas.

Aquellos mtodos que pueden lanzar excepciones deben usar esas excepciones en su declaracin. Para ello se utiliza la sentencia throws:

Aqu va un Ejemplo

Curso de C++H
tipo_devuelto miMetodoLanzador() throws miExcep1, miExcep2 { // Cdigo capaz de lanzar excepciones miExcep1 y miExcep2 }
Se puede observar que cuando se pueden lanzar en el mtodo ms de una excepcin se deben indicar en su declaracin separadas por comas.

Potrebbero piacerti anche