90
PROGRAMACION ORIENTADA PROGRAMACION ORIENTADA DE OBJETOS DE OBJETOS Ing. Ing. José Luis Carrillo Medina José Luis Carrillo Medina Facultad de Sistemas e Informática Facultad de Sistemas e Informática ESCUELA POLITÉCNICA ESCUELA POLITÉCNICA DEL EJERCITO DEL EJERCITO Febrero Febrero , 200 , 200 2 2 ESCUELA POLITÉCNICA DEL ESCUELA POLITÉCNICA DEL EJERCITO EJERCITO

Curso c++

Embed Size (px)

Citation preview

Page 1: Curso c++

PROGRAMACION PROGRAMACION ORIENTADA DE OBJETOSORIENTADA DE OBJETOS

Ing.Ing. José Luis Carrillo MedinaJosé Luis Carrillo Medina

Facultad de Sistemas e InformáticaFacultad de Sistemas e Informática

ESCUELA POLITÉCNICA ESCUELA POLITÉCNICA DEL EJERCITODEL EJERCITO

FebreroFebrero, 200, 20022

ESCUELA POLITÉCNICA DEL ESCUELA POLITÉCNICA DEL EJERCITOEJERCITO

Page 2: Curso c++

Conocer los conceptos básicos de Conocer los conceptos básicos de los programas orientados a objetos los programas orientados a objetos (POO).(POO).

Conocer herramientas de desarrollo Conocer herramientas de desarrollo de POO: Turbo C++, Visual C++.de POO: Turbo C++, Visual C++.

Implementar programas para Implementar programas para Windows en C++ utilizando Windows en C++ utilizando Microsoft Foundation Class Library Microsoft Foundation Class Library 6.0 (MFC). 6.0 (MFC).

OBJETIVOSOBJETIVOS

Page 3: Curso c++

A personas que quieren programar A personas que quieren programar para Windows y quieren hacerlo en para Windows y quieren hacerlo en C++C++

Saber como programar sea C o C+Saber como programar sea C o C+

+, Visual Basic, Pascal, o cualquier +, Visual Basic, Pascal, o cualquier otro lenguaje de programación.otro lenguaje de programación.

CONOCIMIENTOS PREVIOSCONOCIMIENTOS PREVIOS

Page 4: Curso c++

Lenguaje de Programación Lenguaje de Programación Orientado a Objetos: C++Orientado a Objetos: C++

Turbo C++ 3.0Turbo C++ 3.0 Visual C++ 6.0Visual C++ 6.0 Microsoft Foundation Microsoft Foundation

Class Library 6.0Class Library 6.0 BibliografíaBibliografía

CONTENIDOCONTENIDO

Page 5: Curso c++

BIBLIOGRAFÍABIBLIOGRAFÍA

Herbert Schildt. Herbert Schildt. Turbo C++, Turbo C++, Mc Graw Hill, Mc Graw Hill, España, 1996.España, 1996.

Herbert Schildt. Herbert Schildt. C++ Guia de la Autoenseñanza, C++ Guia de la Autoenseñanza, Mc Graw Hill, España, 1996.Mc Graw Hill, España, 1996.

Jon Bates & Tim Tompkins. Jon Bates & Tim Tompkins. Descubre Microsoft Descubre Microsoft Visual C++, Visual C++, Prentice Hall, España, 1999Prentice Hall, España, 1999

Chuck Sphar. Chuck Sphar. Aprenda Microsoft Visual C++ 6.0 Aprenda Microsoft Visual C++ 6.0 Ya. Ya. Mc Graw Hill, España, 1999.Mc Graw Hill, España, 1999.

Jose Luis Carrillo M, Jose Luis Carrillo M, Programación Orientada a Programación Orientada a Objetos: Curso C++, Mayo 2004Objetos: Curso C++, Mayo 2004

Page 6: Curso c++

Curso de C++Curso de C++

Proceso para la obtención de un programa Proceso para la obtención de un programa ejecutableejecutable

Probablemente este es el lugar más adecuado Probablemente este es el lugar más adecuado para explicar cómo se obtiene un fichero para explicar cómo se obtiene un fichero ejecutable a partir de un programa C++. ejecutable a partir de un programa C++.

Para empezar necesitamos un poco de Para empezar necesitamos un poco de vocabulario técnico. Veremos algunos vocabulario técnico. Veremos algunos conceptos que se manejan frecuentemente en conceptos que se manejan frecuentemente en cualquier curso de programación y sobre todo cualquier curso de programación y sobre todo en manuales de C y C++.en manuales de C y C++.

Page 7: Curso c++

Curso de C++Curso de C++

Fichero fuente y programa o código fuente:Fichero fuente y programa o código fuente:

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

Page 8: Curso c++

Curso de C++Curso de C++

Ficheros objeto, código objeto y compiladores:Ficheros objeto, código objeto y compiladores:

Los programas fuente no pueden ejecutarse. Son Los programas fuente no pueden ejecutarse. Son ficheros de texto, pensados para que los ficheros de texto, pensados para que los comprendan los seres humanos, pero comprendan los seres humanos, pero incomprensibles para los ordenadores. incomprensibles para los ordenadores.

Para conseguir un programa ejecutable hay que Para conseguir un programa ejecutable hay que seguir algunos pasos. El primero es compilar o seguir algunos pasos. El primero es compilar o traducir el programa fuente a su código objeto traducir el programa fuente a su código objeto equivalente. Este es el trabajo que hacen los equivalente. Este es el trabajo que hacen los compiladores de C y C++. Consiste en obtener un compiladores de C y C++. Consiste en obtener un fichero equivalente a nuestro programa fuentefichero equivalente a nuestro programa fuente

Page 9: Curso c++

Curso de C++Curso de C++

comprensible para el ordenador, este fichero se comprensible para el ordenador, este fichero se conoce como fichero objeto, y su contenido como conoce como fichero objeto, y su contenido como código objeto. código objeto.

Los compiladores son programas que leen un Los compiladores son programas que leen un fichero de texto que contiene el programa fuente y fichero de texto que contiene el programa fuente y generan un fichero que contiene el código objeto.generan un fichero que contiene el código objeto.

El código objeto no tiene ningún significado para El código objeto no tiene ningún significado para los seres humanos, al menos no directamente. los seres humanos, al menos no directamente. Además es diferente para cada ordenador y para Además es diferente para cada ordenador y para cada sistema operativo. Por lo tanto existen cada sistema operativo. Por lo tanto existen diferentes compiladores para diferentes sistemas diferentes compiladores para diferentes sistemas operativos y para cada tipo de ordenador.operativos y para cada tipo de ordenador.

Page 10: Curso c++

Curso de C++Curso de C++

Librerías:Librerías:

Junto con los compiladores de C y C++, se Junto con los compiladores de C y C++, se incluyen ciertos ficheros llamados librerías. Las incluyen ciertos ficheros llamados librerías. Las librerías contienen el código objeto de muchos librerías contienen el código objeto de muchos programas que permiten hacer cosas comunes, programas que permiten hacer cosas comunes, como leer el teclado, escribir en la pantalla, como leer el teclado, escribir en la pantalla, manejar números, realizar funciones manejar números, realizar funciones matemáticas, etc. Las librerías están clasificadas matemáticas, etc. Las librerías están clasificadas por el tipo de trabajos que hacen, hay librerías por el tipo de trabajos que hacen, hay librerías de entrada y salida, matemáticas, de manejo de de entrada y salida, matemáticas, de manejo de memoria, de manejo de textos, etc.memoria, de manejo de textos, etc.

Page 11: Curso c++

Curso de C++Curso de C++

Hay un conjunto de librerías muy especiales, Hay un conjunto de librerías muy especiales, que se incluyen con todos los compiladores de C que se incluyen con todos los compiladores de C y de C++. Son las librerías ANSI o estándar. y de C++. Son las librerías ANSI o estándar. Pero también hay librerías no estándar, y dentro Pero también hay librerías no estándar, y dentro de estas las hay públicas y comerciales. En este de estas las hay públicas y comerciales. En este curso sólo usaremos librerías ANSI.curso sólo usaremos librerías ANSI.

Ficheros ejecutables y enlazadores:Ficheros ejecutables y enlazadores: Cuando obtenemos el fichero objeto, aún no Cuando obtenemos el fichero objeto, aún no

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

Page 12: Curso c++

Curso de C++Curso de C++

1.1. Nuestros programas usaran, en general, Nuestros programas usaran, en general, funciones que estarán incluidas en librerías funciones que estarán incluidas en librerías externas, ya sean ANSI o no. Es necesario externas, ya sean ANSI o no. Es necesario combinar nuestro fichero objeto con esas combinar nuestro fichero objeto con esas librerías para obtener un ejecutable. librerías para obtener un ejecutable.

2.2. Muy a menudo, nuestros programas estarán Muy a menudo, nuestros programas estarán compuestos por varios ficheros fuente, y de compuestos por varios ficheros fuente, y de cada uno de ellos se obtendrá un fichero cada uno de ellos se obtendrá un fichero objeto. Es necesario unir todos los ficheros objeto. Es necesario unir todos los ficheros objeto, más las librerías en un único fichero objeto, más las librerías en un único fichero ejecutable. ejecutable.

Page 13: Curso c++

Curso de C++Curso de C++

3.3. Hay que dar ciertas instrucciones al ordenador Hay que dar ciertas instrucciones al ordenador para que cargue en memoria el programa y los para que cargue en memoria el programa y los datos, y para que organice la memoria de modo datos, y para que organice la memoria de modo que se disponga de una pila de tamaño adecuado, que se disponga de una pila de tamaño adecuado, etc. La pila es una zona de memoria que se usa etc. La pila es una zona de memoria que se usa para que el programa intercambie datos con otros para que el programa intercambie datos con otros programas o con otras partes del propio programas o con otras partes del propio programa. Veremos esto con más detalle durante programa. Veremos esto con más detalle durante el curso.el curso.

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

Page 14: Curso c++

Curso de C++Curso de C++

todos los ficheros objeto que componen nuestro todos los ficheros objeto que componen nuestro programa, los combina con los ficheros de programa, los combina con los ficheros de librería que sea necesario y crea un fichero librería que sea necesario y crea un fichero ejecutable.ejecutable.

Una vez terminada la fase de enlazado, ya Una vez terminada la fase de enlazado, ya podremos ejecutar nuestro programa.podremos ejecutar nuestro programa.

Errores:Errores: Por supuesto, somos humanos, y por lo tanto nos Por supuesto, somos humanos, y por lo tanto nos

equivocamos. Los errores de programación equivocamos. Los errores de programación pueden clasificarse en varios tipos, dependiendo pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten.de la fase en que se presenten.

Page 15: Curso c++

Curso de C++Curso de C++

Errores de sintaxis:Errores de sintaxis: son errores en el son errores en el programa fuente. Pueden deberse a palabras programa fuente. Pueden deberse a palabras reservadas mal escritas, expresiones reservadas mal escritas, expresiones erróneas o incompletas, variables que no erróneas o incompletas, variables que no existen, etc. Los errores de sintaxis se existen, etc. Los errores de sintaxis se detectan en la fase de compilación. El detectan en la fase de compilación. El compilador, además de generar el código compilador, además de generar el código objeto, nos dará una lista de errores de objeto, nos dará una lista de errores de sintaxis. De hecho nos dará sólo una cosa o sintaxis. De hecho nos dará sólo una cosa o la otra, ya que si hay errores no es posible la otra, ya que si hay errores no es posible generar un código objeto.generar un código objeto.

Page 16: Curso c++

Curso de C++Curso de C++

Avisos:Avisos: además de errores, el compilador además de errores, el compilador puede dar también avisos (warnings). Los puede dar también avisos (warnings). Los avisos son errores, pero no lo suficientemente avisos son errores, pero no lo suficientemente graves como para impedir la generación del graves como para impedir la generación del código objeto. No obstante, es importante código objeto. No obstante, es importante corregir estos avisos, ya que el compilador corregir estos avisos, ya que el compilador tiene que decidir entre varias opciones, y sus tiene que decidir entre varias opciones, y sus decisiones no tienen por qué coincidir con lo decisiones no tienen por qué coincidir con lo que nosotros pretendemos, se basan en las que nosotros pretendemos, se basan en las directivas que los creadores del compilador directivas que los creadores del compilador decidieron durante su creación.decidieron durante su creación.

Page 17: Curso c++

Curso de C++Curso de C++

Errores de enlazado:Errores de enlazado: el programa enlazador el programa enlazador también puede encontrar errores. también puede encontrar errores. Normalmente se refieren a funciones que no Normalmente se refieren a funciones que no están definidas en ninguno de los ficheros están definidas en ninguno de los ficheros objetos ni en las librerías. Puede que hayamos objetos ni en las librerías. Puede que hayamos olvidado incluir alguna librería, o algún fichero olvidado incluir alguna librería, o algún fichero objeto, o puede que hayamos olvidado definir objeto, o puede que hayamos olvidado definir alguna función o variable, o lo hayamos hecho alguna función o variable, o lo hayamos hecho mal.mal.

Errores de ejecución:Errores de ejecución: incluso después de incluso después de obtener un fichero ejecutable, es posible que obtener un fichero ejecutable, es posible que se produzcan errores. se produzcan errores.

Page 18: Curso c++

Curso de C++Curso de C++

En el caso de los errores de ejecución En el caso de los errores de ejecución normalmente no obtendremos mensajes de error, normalmente no obtendremos mensajes de error, sino que simplemente el programa terminará sino que simplemente el programa terminará bruscamente. Estos errores son más difíciles de bruscamente. Estos errores son más difíciles de detectar y corregir. Existen programas auxiliares detectar y corregir. Existen programas auxiliares para buscar estos errores, son los llamados para buscar estos errores, son los llamados depuradores (debuggers). Estos programas depuradores (debuggers). Estos programas permiten detener la ejecución de nuestros permiten detener la ejecución de nuestros programas, inspeccionar variables y ejecutar programas, inspeccionar variables y ejecutar nuestro programa paso a paso. Esto resulta útil nuestro programa paso a paso. Esto resulta útil para detectar excepciones, errores sutiles, y fallos para detectar excepciones, errores sutiles, y fallos que se presentan dependiendo de circunstancias que se presentan dependiendo de circunstancias distintas.distintas.

Page 19: Curso c++

Curso de C++Curso de C++

Errores de diseño:Errores de diseño: finalmente los errores finalmente los errores más difíciles de corregir y prevenir. Si nos más difíciles de corregir y prevenir. Si nos hemos equivocado al diseñar nuestro hemos equivocado al diseñar nuestro algoritmo, no habrá ningún programa que algoritmo, no habrá ningún programa que nos pueda ayudar a corregir los nuestros. nos pueda ayudar a corregir los nuestros. Contra estos errores sólo cabe practicar y Contra estos errores sólo cabe practicar y pensar. pensar.

Page 20: Curso c++

Curso de C++Curso de C++

¿Qué clase de programas y aplicaciones se ¿Qué clase de programas y aplicaciones se pueden crear usando C y C++?pueden crear usando C y C++?

La respuesta es muy sencilla: TODOS. La respuesta es muy sencilla: TODOS. Tanto C como C++ son lenguajes de Tanto C como C++ son lenguajes de

programación de propósito general. Todo programación de propósito general. Todo puede programarse con ellos, desde sistemas puede programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones operativos y compiladores hasta aplicaciones de bases de datos y procesadores de texto, de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, pasando por juegos, aplicaciones a medida, etc. etc.

Page 21: Curso c++

Curso de C++Curso de C++

Oirás y leerás mucho sobre este tema. Sobre todo Oirás y leerás mucho sobre este tema. Sobre todo diciendo que estos lenguajes son complicados y diciendo que estos lenguajes son complicados y que requieren páginas y páginas de código para que requieren páginas y páginas de código para hacer cosas que con otros lenguajes se hacen con hacer cosas que con otros lenguajes se hacen con pocas líneas. Esto es una verdad a medias. Es pocas líneas. Esto es una verdad a medias. Es cierto que un listado completo de un programa en cierto que un listado completo de un programa en C o C++ para gestión de bases de datos (por C o C++ para gestión de bases de datos (por poner un ejemplo) puede requerir varios miles de poner un ejemplo) puede requerir varios miles de líneas de código, y que su equivalente en Visual líneas de código, y que su equivalente en Visual Basic sólo requiere unos pocos cientos. Pero Basic sólo requiere unos pocos cientos. Pero detrás de cada línea de estos compiladores de detrás de cada línea de estos compiladores de alto nivel hayalto nivel hay

Page 22: Curso c++

Curso de C++Curso de C++

cientos de líneas de código en C, la mayor parte cientos de líneas de código en C, la mayor parte de estos compiladores están respaldados por de estos compiladores están respaldados por enormes librerías escritas en C. Nada te impide enormes librerías escritas en C. Nada te impide a ti, como programador, usar librerías, e incluso a ti, como programador, usar librerías, e incluso crear las tuyas propias. crear las tuyas propias.

Una de las propiedades de C y C++ es la Una de las propiedades de C y C++ es la reutilización del código en forma de librerías de reutilización del código en forma de librerías de usuario. Después de un tiempo trabajando, usuario. Después de un tiempo trabajando, todos los programadores desarrollan sus todos los programadores desarrollan sus propias librerías para aquellas cosas que hacen propias librerías para aquellas cosas que hacen frecuentemente. Y además, raramente piensan frecuentemente. Y además, raramente piensan en ello, se limitan a usarlas.en ello, se limitan a usarlas.

Page 23: Curso c++

Curso de C++Curso de C++

Además, los programas escritos en C o C++ Además, los programas escritos en C o C++ tienen otras ventajas sobre el resto. Con la tienen otras ventajas sobre el resto. Con la excepción del ensamblador, generan los excepción del ensamblador, generan los programas más compactos y rápidos. El programas más compactos y rápidos. El código es transportable, es decir, un código es transportable, es decir, un programa ANSI en C o C++ podrá ejecutarse programa ANSI en C o C++ podrá ejecutarse en cualquier máquina y bajo cualquier en cualquier máquina y bajo cualquier sistema operativo. Y si es necesario, sistema operativo. Y si es necesario, proporcionan un acceso a bajo nivel de proporcionan un acceso a bajo nivel de hardware sólo igualado por el ensamblador.hardware sólo igualado por el ensamblador.

Page 24: Curso c++

Curso de C++Curso de C++

Otra ventaja importante, C tiene más de 30 Otra ventaja importante, C tiene más de 30 años de vida, y C++ casi 20 y no parece que años de vida, y C++ casi 20 y no parece que su uso se debilite demasiado. No se trata de su uso se debilite demasiado. No se trata de un lenguaje de moda, y probablemente a un lenguaje de moda, y probablemente a ambos les quede aún mucha vida por ambos les quede aún mucha vida por delante. Sólo hay que pensar que sistemas delante. Sólo hay que pensar que sistemas operativos como Linux, Unix o incluso operativos como Linux, Unix o incluso Windows se escriben casi por completo en C.Windows se escriben casi por completo en C.

Page 25: Curso c++

Curso de C++Curso de C++

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

Page 26: Curso c++

Curso de C++Curso de C++

TIPOS DE DATOS EN C++TIPOS DE DATOS EN C++  

TIPO NOMBRE RANGO DE VALORES Char -128..127 Int -32768..32767 ENTEROS Long int

-2.147.438.648..2.147.483.647

float +/-1E-37..+/-1E38 double +/-1E-307..+/-1E308 REALES Long double +/-1E-4932..+/-1E4932

CARACTER Char CÓDIGO ASCII VACÍO Void -

Page 27: Curso c++

Curso de C++Curso de C++

TIPOS ENUMERADOSTIPOS ENUMERADOS

Un tipo enumerado o enumeración está construidoUn tipo enumerado o enumeración está construido

por una serie de constantes simbólicas enteras. El por una serie de constantes simbólicas enteras. El

ejemplo asocia falso a cero y verdadero aejemplo asocia falso a cero y verdadero a 1.1.

enum {falso, verdadero};  // falso =0, verdadero =1enum {falso, verdadero};  // falso =0, verdadero =1

Esta asignación se puede cambiar:Esta asignación se puede cambiar:

enum {lunes=1,martes, miércoles}; enum {lunes=1,martes, miércoles};

//lunes=1, martes=2, miércoles=3//lunes=1, martes=2, miércoles=3

enum {lunes=10,martes=20,miércoles=30}enum {lunes=10,martes=20,miércoles=30}

enum dias {lunes, martes, miércolesenum dias {lunes, martes, miércoles};};

Page 28: Curso c++

Curso de C++Curso de C++

INTRODUCCIÓN A LOS LENGUAJES INTRODUCCIÓN A LOS LENGUAJES ORIENTADOS A OBJETOSORIENTADOS A OBJETOS

La Programación Orientada a Objetos (POO) es La Programación Orientada a Objetos (POO) es una nueva forma de programación que se utiliza una nueva forma de programación que se utiliza para desarrollar programas más eficientes y con para desarrollar programas más eficientes y con gran fiabilidad.gran fiabilidad.

Para ello quizá sea necesario dejar a un lado las Para ello quizá sea necesario dejar a un lado las ideas de la programación tradicional, en la que ideas de la programación tradicional, en la que los datos se tratan separadamente de los los datos se tratan separadamente de los procedimientos que actúan como una “caja procedimientos que actúan como una “caja negra”, y adentrarse en aquellas orientadas a negra”, y adentrarse en aquellas orientadas a objetos, en la que los programas se dividen en objetos, en la que los programas se dividen en “entidades”“entidades”

Page 29: Curso c++

Curso de C++Curso de C++

INTRODUCCIÓN A LOS LENGUAJES ORIENTADOS INTRODUCCIÓN A LOS LENGUAJES ORIENTADOS A OBJETOSA OBJETOS  

independientes conocidas como objetos, que independientes conocidas como objetos, que contienen datos y procedimientos que actúan contienen datos y procedimientos que actúan sobre esos datos. Dichos objetos se comunican sobre esos datos. Dichos objetos se comunican entre sí por medio de “métodos” a través de entre sí por medio de “métodos” a través de “mensajes” que son acciones que debe ejecutar “mensajes” que son acciones que debe ejecutar el objeto.el objeto.

Objetos físicos (un automóvil, un avión), Objetos físicos (un automóvil, un avión), elementos de interfaces gráficas de usuario elementos de interfaces gráficas de usuario (ventanas, botones, íconos), estructuras de datos (ventanas, botones, íconos), estructuras de datos (arrays, pilas, colas), tipos de datos definidos por (arrays, pilas, colas), tipos de datos definidos por el usuario (números complejos, puntos de un el usuario (números complejos, puntos de un plano), etc.plano), etc.

Page 30: Curso c++

Curso de C++Curso de C++

EVOLUCION DE LOS LENGUAJES ORIENTADOS EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOSA OBJETOS

Lenguaje ensamblador: en los primeros computadores la programación se realizaba con instrucciones de “lenguaje de máquina” en código binario; al aumentar la complejidad de los programas se creó un traductor llamado “ensamblador” que convertía a lenguaje de máquina.

  Lenguaje de alto nivel: con ellos se pudieron resolver problemas un poco más complejos, pero con ellos se dificulta la creación de programas más grandes y elaborados.

Page 31: Curso c++

Curso de C++Curso de C++

EVOLUCION DE LOS LENGUAJES EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOSORIENTADOS 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 más 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.

Page 32: Curso c++

Curso de C++Curso de C++

EVOLUCION DE LOS LENGUAJES ORIENTADOS A EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOSOBJETOS

Lenguaje estructurado: estos lenguajes tienen las siguientes características: fácil lectura, fácil modificación y fácil detección 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 planificación para que un proyecto se ensamble correctamente, sin errores y sea fácil de mantener, pero esta técnica de programación no puede ser utilizada cuando un proyecto alcanza cierto tamaño y complejidad.

Page 33: Curso c++

Curso de C++Curso de C++

EVOLUCION DE LOS LENGUAJES EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOSORIENTADOS A OBJETOS

Lenguaje orientado a objetos: estos lenguajes tienen un nuevo medio de organizar código 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, encapsulación y polimorfismo, junto con los conceptos de: objetos, clases, métodos y mensajes.

Page 34: Curso c++

Curso de C++Curso de C++

VENTAJAS Y DESVENTAJAS DE LOS VENTAJAS Y DESVENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS.LENGUAJES ORIENTADOS A OBJETOS.

Ventajas. Un lenguaje de programación que soporta POO

beneficia el desarrollo de software de programas extensos y sofisticados, ya que ofrece una forma más natural de desarrollo de modelos utilizando clases.

Un lenguaje con POO tiene menos líneas de código, menos sentencias de bifurcación, y módulos que son más comprensibles porque reflejan de una forma más clara la relación existente entre cada concepto a desarrollar.

Page 35: Curso c++

Curso de C++Curso de C++

VENTAJAS Y DESVENTAJAS DE LOS VENTAJAS Y DESVENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS.LENGUAJES ORIENTADOS A OBJETOS.

Ventajas. La herencia, que es una característica

exclusiva de la POO, es una de las claves más importantes para la reutilización de código, que a su vez reduce el código de programación, y para la creación de programas extensibles.

En la POO no se necesita examinar todo el código fuente para ver si un cambio local afecta a otras partes, porque se utiliza el concepto de “encapsulamiento” de los objetos.

Page 36: Curso c++

Curso de C++Curso de C++

VENTAJAS Y DESVENTAJAS DE LOS VENTAJAS Y DESVENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS.LENGUAJES ORIENTADOS A OBJETOS.

 

Desventajas. Obliga a usuario a conocer una amplia librería

de clases antes de empezar a manipular un lenguaje orientado a objetos.

La ejecución de un programa orientado a objetos es más lenta, porque se aprovecha todos los recursos de la plataforma utilizada para el desarrollo de dicho programa.

Page 37: Curso c++

Curso de C++Curso de C++

CARACTERÍSTICAS DE LA PROGRAMACIÓN CARACTERÍSTICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOSORIENTADA A OBJETOS

Los objetos son paquetes compactos que no se rompen al añadir otros objetos, por lo que si existen errores en el nuevo objeto estos serán 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 añadir sus propias características.

Page 38: Curso c++

Curso de C++Curso de C++

CARACTERÍSTICAS DE LA PROGRAMACIÓN CARACTERÍSTICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOSORIENTADA A OBJETOS

La abstracción y ocultación de datos reduce la dependencia de los módulos.

Los datos internos que definen el estado actual del objeto y los métodos que definen su comportamiento están encapsulados.

Los objetos pueden comunicarse entre sí por medio de mensajes a través de sus métodos.

 

Page 39: Curso c++

Curso de C++Curso de C++

LOS LENGUAJES DE PROGRAMACIÓN LOS LENGUAJES DE PROGRAMACIÓN ORIENTADOS A OBJETOSORIENTADOS A OBJETOS

  Los lenguajes de programación orientados a objetos se dividen en puros e híbridos.

Los lenguajes de programación orientados a objetos puros son aquellos que tienen las orientadas a objetos como: Smalltalk y Eiffel.

Los lenguajes de programación orientados a objetos híbridos son aquellos que añaden las propiedades de orientación a objetos a las propiedades intrínsecas de tipo procedimental como C++ y Objective C.

Page 40: Curso c++

Curso de C++Curso de C++

PProgramacion rogramacion OOrientada a rientada a OObjetosbjetos::

Siglas de Programación Orientada a ObjetosSiglas de Programación Orientada a Objetos ”POO”POO". En inglés se pone al revés "OOP". La ". En inglés se pone al revés "OOP". La idea básica de este tipo de programación es idea básica de este tipo de programación es agrupar los datos y los procedimientos para agrupar los datos y los procedimientos para manejarlos en una única entidad: el objeto. Un manejarlos en una única entidad: el objeto. Un programa es un objeto, que a su vez está programa es un objeto, que a su vez está formado de objetos. La idea de la formado de objetos. La idea de la programación estructurada no ha programación estructurada no ha desaparecido, de hecho se refuerza y resulta desaparecido, de hecho se refuerza y resulta más evidente, como comprobarás cuando más evidente, como comprobarás cuando veamos conceptos como la herencia.veamos conceptos como la herencia.

Page 41: Curso c++

Curso de C++Curso de C++

Objeto: Objeto:

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

Page 42: Curso c++

Curso de C++Curso de C++

Mensaje:Mensaje:

El mensaje es el modo en que se comunican los El mensaje es el modo en que se comunican los objetos entre si. En C++, un mensaje no es más objetos entre si. En C++, un mensaje no es más que una llamada a una función de un que una llamada a una función de un determinado objeto. Cuando llamemos a una determinado objeto. Cuando llamemos a una función de un objeto, muy a menudo diremos función de un objeto, muy a menudo diremos que estamos enviando un mensaje a ese objeto. que estamos enviando un mensaje a ese objeto.

En este sentido, mensaje es el término En este sentido, mensaje es el término adecuado cuando hablamos de programación adecuado cuando hablamos de programación orientada a objetos en general.orientada a objetos en general.

Page 43: Curso c++

Curso de C++Curso de C++

Método:Método:

Se trata de otro concepto de POO, los Se trata de otro concepto de POO, los mensajes que lleguen a un objeto se mensajes que lleguen a un objeto se procesarán ejecutando un determinado procesarán ejecutando un determinado método. En C++ un método no es otra cosa método. En C++ un método no es otra cosa que una función o procedimiento que una función o procedimiento perteneciente a un objeto. perteneciente a un objeto.

Page 44: Curso c++

Curso de C++Curso de C++

Clase:Clase:

Una clase se puede considerar como un Una clase se puede considerar como un patrón para construir objetos. En C++, un patrón para construir objetos. En C++, un objeto es sólo un tipo de variable de una objeto es sólo un tipo de variable de una clase determinada. Es importante distinguir clase determinada. Es importante distinguir entre objetos y clases, la clase es entre objetos y clases, la clase es simplemente una declaración, no tiene simplemente una declaración, no tiene asociado ningún objeto, de modo que no asociado ningún objeto, de modo que no puede recibir mensajes ni procesarlos, esto puede recibir mensajes ni procesarlos, esto únicamente lo hacen los objetos.únicamente lo hacen los objetos.

Page 45: Curso c++

Curso de C++Curso de C++

Interfaz: Interfaz:

Las clases y por lo tanto también los objetos, Las clases y por lo tanto también los objetos, tienen partes públicas y partes privadas. tienen partes públicas y partes privadas. Algunas veces llamaremos a la parte pública Algunas veces llamaremos a la parte pública de un objeto su interfaz. Se trata de la única de un objeto su interfaz. Se trata de la única parte del objeto que es visible para el resto parte del objeto que es visible para el resto de los objetos, de modo que es lo único de lo de los objetos, de modo que es lo único de lo que se dispone para comunicarse con ellos. que se dispone para comunicarse con ellos.

Page 46: Curso c++

Curso de C++Curso de C++

EncapsulamientoEncapsulamiento: : EEs tener todos los datos lo más privado s tener todos los datos lo más privado

posible, y para poder acceder a ellos, posible, y para poder acceder a ellos, sera necesario acceder a los metodos sera necesario acceder a los metodos (funciones) que proporcione el modulo, (funciones) que proporcione el modulo, limitando el acceso.limitando el acceso.

AbstraccionAbstraccion: : Representar la realidad con los detalles Representar la realidad con los detalles

necesarios, sin los no necesarios para el necesarios, sin los no necesarios para el dominio del problema que hay que dominio del problema que hay que representar. representar.

Page 47: Curso c++

Curso de C++Curso de C++

Polimorfismo.Polimorfismo.

(Polimorfismo significa “muchas formas”) Es (Polimorfismo significa “muchas formas”) Es una característica de la programación una característica de la programación orientada a objetos que permite que un orientada a objetos que permite que un nombre pueda utilizarse en dos o mas nombre pueda utilizarse en dos o mas formas, para dos o mas propósitos formas, para dos o mas propósitos relacionados entre si. Esto significa que el relacionados entre si. Esto significa que el lenguaje C++ puede admitir una sobrecarga lenguaje C++ puede admitir una sobrecarga de funciones u operadores de una misma de funciones u operadores de una misma función.función.

Page 48: Curso c++

Curso de C++Curso de C++

Herencia: Herencia:

Veremos que es posible diseñar nuevas clases Veremos que es posible diseñar nuevas clases basándose en clases ya existentes. En C++ basándose en clases ya existentes. En C++ esto se llama derivación de clases, y en POO esto se llama derivación de clases, y en POO herencia. Cuando se deriva una clase de otra, herencia. Cuando se deriva una clase de otra, normalmente se añadirán nuevos métodos y normalmente se añadirán nuevos métodos y datos. El conjunto de datos y métodos que datos. El conjunto de datos y métodos que sobreviven, es lo que se conoce como herencia. sobreviven, es lo que se conoce como herencia. La Herencia ayuda a la reutilización del código La Herencia ayuda a la reutilización del código cuando se utiliza con el Polimorfismo y es útil cuando se utiliza con el Polimorfismo y es útil para reutilizar diseños del programa y crear para reutilizar diseños del programa y crear programas extensibles.programas extensibles.

Page 49: Curso c++

Curso de C++Curso de C++

Declaración de una clase Declaración de una clase

Ahora va a empezar un pequeño bombardeo de Ahora va a empezar un pequeño bombardeo de nuevas palabras reservadas de C++, pero no te nuevas palabras reservadas de C++, pero no te asustes, no es tan complicado como parece.asustes, no es tan complicado como parece.

La primera palabra que aparece es lógicamente La primera palabra que aparece es lógicamente class que sirve para declarar una clase. Su uso class que sirve para declarar una clase. Su uso es parecido a la ya conocida struct:es parecido a la ya conocida struct:class <identificador de clase> [<:lista de clases class <identificador de clase> [<:lista de clases base>] base>] {{<lista de miembros> <lista de miembros> } [<lista de objetos>]; } [<lista de objetos>];

Page 50: Curso c++

Curso de C++Curso de C++

La lista de clases base se usa para derivar La lista de clases base se usa para derivar clases, de momento no le prestes demasiada clases, de momento no le prestes demasiada atención, ya que por ahora sólo declararemos atención, ya que por ahora sólo declararemos clases base.clases base.

La lista de miembros será en general una lista La lista de miembros será en general una lista de funciones y datos.de funciones y datos.

Los datos se declaran del mismo modo en que lo Los datos se declaran del mismo modo en que lo hacíamos hasta ahora, salvo que no pueden ser hacíamos hasta ahora, salvo que no pueden ser inicializados, recuerda que estamos hablando de inicializados, recuerda que estamos hablando de declaraciones de clases y no de definiciones de declaraciones de clases y no de definiciones de objetos. En el siguiente capítulo veremos el objetos. En el siguiente capítulo veremos el modo de inicializar las variables de un objeto. modo de inicializar las variables de un objeto.

Page 51: Curso c++

Curso de C++Curso de C++

Las funciones pueden ser simplemente Las funciones pueden ser simplemente declaraciones de prototipos, que se deben declaraciones de prototipos, que se deben definir aparte de la clase o también definir aparte de la clase o también definiciones.definiciones.

Cuando se definen fuera de la clase se debe Cuando se definen fuera de la clase se debe usar el operador de ámbito "::".usar el operador de ámbito "::".

Lo veremos mucho mejor con un ejemplo.Lo veremos mucho mejor con un ejemplo.

Aquí va un Ejemplo:Aquí va un Ejemplo:

Page 52: Curso c++

Curso de C++Curso de C++

Especificaciones de acceso:Especificaciones de acceso:

Dentro de la lista de miembros, cada Dentro de la lista de miembros, cada miembro puede tener diferentes niveles de miembro puede tener diferentes niveles de acceso. acceso.

class <identificador de clase>class <identificador de clase> {{ public: public: <lista de miembros> <lista de miembros> private: private: <lista de miembros> <lista de miembros> protected: protected: <lista de miembros> <lista de miembros> }; };

Page 53: Curso c++

Curso de C++Curso de C++

Acceso privado, private:Acceso privado, private: Los miembros privados de una clase sólo son Los miembros privados de una clase sólo son

accesibles por los propios miembros de la accesibles por los propios miembros de la clase y en general por objetos de la misma clase y en general por objetos de la misma clase, pero no desde funciones externas o clase, pero no desde funciones externas o desde funciones de clases derivadas. desde funciones de clases derivadas.

Acceso público, public:Acceso público, public: Cualquier miembro público de una clase es Cualquier miembro público de una clase es

accesible desde cualquier parte donde sea accesible desde cualquier parte donde sea accesible el propio objeto. accesible el propio objeto.

Aquí va un Ejemplo:Aquí va un Ejemplo:

Page 54: Curso c++

Curso de C++Curso de C++

ConstructoresConstructores

Los constructores son funciones miembro Los constructores son funciones miembro especiales que sirven para inicializar un objeto especiales que sirven para inicializar un objeto de una determinada clase cuando se declara.de una determinada clase cuando se declara.

Los constructores tienen el mismo nombre que Los constructores tienen el mismo nombre que la clase, no retornan ningún valor y no pueden la clase, no retornan ningún valor y no pueden ser heredados. Además deben ser públicos, no ser heredados. Además deben ser públicos, no tendría ningún sentido declarar un constructor tendría ningún sentido declarar un constructor como privado, ya que siempre se usan desde el como privado, ya que siempre se usan desde el exterior de la clase, ni tampoco como exterior de la clase, ni tampoco como protegido, ya que no puede ser heredado.protegido, ya que no puede ser heredado.

Aquí va un Ejemplo:Aquí va un Ejemplo:

Page 55: Curso c++

Curso de C++Curso de C++

DestructoresDestructores

Los destructores son funciones miembro Los destructores son funciones miembro especiales que sirven para eliminar un objeto especiales que sirven para eliminar un objeto de una determinada clase, liberando la de una determinada clase, liberando la memoria utilizada por dicho objeto.memoria utilizada por dicho objeto.

Los destructores tienen el mismo nombre que Los destructores tienen el mismo nombre que la clase, pero con el símbolo ~ delante, no la clase, pero con el símbolo ~ delante, no retornan ningún valor y no pueden ser retornan ningún valor y no pueden ser heredados. heredados.

Cuando se define un destructor para una Cuando se define un destructor para una clase, éste es llamado automáticamente clase, éste es llamado automáticamente cuando se abandona el ámbito en el que fue cuando se abandona el ámbito en el que fue definido. definido.

Page 56: Curso c++

Curso de C++Curso de C++

Esto es así salvo cuando el objeto fue creado Esto es así salvo cuando el objeto fue creado dinámicamente con el operador new, ya que dinámicamente con el operador new, ya que en ese caso, si es necesario eliminarlo, hay en ese caso, si es necesario eliminarlo, hay que usar el operador delete.que usar el operador delete.

En general, será necesario definir un En general, será necesario definir un destructor cuando nuestra clase tenga datos destructor cuando nuestra clase tenga datos miembro de tipo puntero, aunque esto no es miembro de tipo puntero, aunque esto no es una regla estricta. El destructor no puede una regla estricta. El destructor no puede sobrecargarse, por la sencilla razón de que sobrecargarse, por la sencilla razón de que no admite argumentos.no admite argumentos.

Aquí va un Ejemplo:Aquí va un Ejemplo:

Page 57: Curso c++

Curso de C++Curso de C++

Constructores con ParámetrosConstructores con Parámetros

A menudo, cuando se crea un objeto, es A menudo, cuando se crea un objeto, es necesario o deseable inicializar varios necesario o deseable inicializar varios elementos de datos con valores específicos. elementos de datos con valores específicos. El concepto de inicialización de objetos se El concepto de inicialización de objetos se amplia para permitir la inicialización de amplia para permitir la inicialización de objetos específicos utilizando valores objetos específicos utilizando valores definidos por el programador.definidos por el programador.

Aquí va un Ejemplo:Aquí va un Ejemplo:

Page 58: Curso c++

Curso de C++Curso de C++Funciones inlineFunciones inline

C++ permite sustituir, en tiempo de C++ permite sustituir, en tiempo de compilación, la llamada a una función por el compilación, la llamada a una función por el código correspondiente en el punto en que se código correspondiente en el punto en que se realiza la llamada. De esta manera la ejecución realiza la llamada. De esta manera la ejecución es más rápida, pues no se pierde tiempo es más rápida, pues no se pierde tiempo transfiriendo el control y realizando transfiriendo el control y realizando conversiones de parámetros. Como conversiones de parámetros. Como contrapartida, el programa resultante ocupa contrapartida, el programa resultante ocupa más memoria, pues es posible que el código de más memoria, pues es posible que el código de una misma función se introduzca muchas una misma función se introduzca muchas veces, con las repeticiones consiguientes. Las veces, con las repeticiones consiguientes. Las funciones inline resultan interesantes en el funciones inline resultan interesantes en el caso de funciones muy breves, que aparecen en caso de funciones muy breves, que aparecen en pocas líneas de código pero que se ejecutan pocas líneas de código pero que se ejecutan muchas veces (en un bucle for, por ejemplo). muchas veces (en un bucle for, por ejemplo).

Page 59: Curso c++

Curso de C++Curso de C++

Existen dos formas de definirlas: Existen dos formas de definirlas:

Una primera forma de utilizar funciones Una primera forma de utilizar funciones inline es anteponer dicha palabra en la inline es anteponer dicha palabra en la declaración de la función, declaración de la función,

OOtra forma de utilizar funciones inline sin tra forma de utilizar funciones inline sin necesidad de utilizar esta palabra es necesidad de utilizar esta palabra es introducir el código de la función en la introducir el código de la función en la declaración (convirtiéndose de esta manera declaración (convirtiéndose de esta manera en definición), poniéndolo entre llaves { } a en definición), poniéndolo entre llaves { } a continuación de ésta.continuación de ésta.

Aquí va un EjemploAquí va un Ejemplo

Page 60: Curso c++

Curso de C++Curso de C++Funciones friendFunciones friend

Una función que no es miembro de una clase Una función que no es miembro de una clase y que puede acceder a la parte privada de y que puede acceder a la parte privada de una clase se le conoce como una función una clase se le conoce como una función amiga(friend) de la clase.amiga(friend) de la clase.

El formato de la declaración de funciones El formato de la declaración de funciones friend es el siguiente:friend es el siguiente:

  class <nombre de la clase>{class <nombre de la clase>{public :public : friend <declaración de función>friend <declaración de función> //Datos y funciones miembros//Datos y funciones miembros}}

Page 61: Curso c++

Curso de C++Curso de C++

Hay otros dos motivos por los que las Hay otros dos motivos por los que las funciones amigas son útiles y tienen que ver funciones amigas son útiles y tienen que ver con la sobrecarga de operadores y la con la sobrecarga de operadores y la creación de ciertos tipos de funciones de E/S.creación de ciertos tipos de funciones de E/S.

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

Aquí va un EjemploAquí va un Ejemplo

Page 62: Curso c++

Curso de C++Curso de C++

POLIMORFISMOPOLIMORFISMO

Otra de las características mas importantes Otra de las características mas importantes de un lenguaje orientado a objetos es el de un lenguaje orientado a objetos es el polimorfismo, el cual permite el uso de un polimorfismo, el cual permite el uso de un nombre para especificar un nombre de acción nombre para especificar un nombre de acción general. De esta manera se ejecuta una parte general. De esta manera se ejecuta una parte específica de la clase general dependiendo específica de la clase general dependiendo del tipo de dato con el que está tratando. En del tipo de dato con el que está tratando. En este capítulo se presentan las formas de este capítulo se presentan las formas de hacer polimorfismo: Sobrecarga de Funciones hacer polimorfismo: Sobrecarga de Funciones y Sobrecarga de Operadoresy Sobrecarga de Operadores

Page 63: Curso c++

Curso de C++Curso de C++

Sobrecarga de funcionesSobrecarga de funciones

Una de las maneras que tiene C++ de llegar al Una de las maneras que tiene C++ de llegar al polimorfismo es a través de la sobrecarga de polimorfismo es a través de la sobrecarga de funcionesfunciones. . En C++, dos o más funciones En C++, dos o más funciones pueden compartir un mismo nombre siempre y pueden compartir un mismo nombre siempre y cuando difieran en la declaración de sus cuando difieran en la declaración de sus parámetros.parámetros.

Las funciones que comparten el mismo nombre Las funciones que comparten el mismo nombre se dice que están sobrecargadas.se dice que están sobrecargadas.

Aquí va un Ejemplo:Aquí va un Ejemplo:

Page 64: Curso c++

Curso de C++Curso de C++

Sobrecarga de operadoresSobrecarga de operadores

Para sobrecargar un operador se debe definir Para sobrecargar un operador se debe definir la operación significa con relación a la clase a la operación significa con relación a la clase a la que se aplica. Para hacer esto, hay que la que se aplica. Para hacer esto, hay que crear una función operador que defina su crear una función operador que defina su acción. acción.

La forma general de declarar una sobrecarga La forma general de declarar una sobrecarga de operadores es:de operadores es:

tipo_devuelto nombre_clase :: operator # (lista tipo_devuelto nombre_clase :: operator # (lista de argumentos){de argumentos){

// operación que se va ha realizar// operación que se va ha realizar} } 

Page 65: Curso c++

Curso de C++Curso de C++

# - es el operador que se quiere sobrecargar.# - es el operador que se quiere sobrecargar. tipo es el tipo de valor devuelto por la operación tipo es el tipo de valor devuelto por la operación especificada, es con frecuencia del mismo tipo especificada, es con frecuencia del mismo tipo que la clase para la cual se ha sobrecargado el que la clase para la cual se ha sobrecargado el operador.operador.

El objeto causante de una llamada a un operador El objeto causante de una llamada a un operador sobrecargado siempre es el situado a la sobrecargado siempre es el situado a la izquierda del operador.izquierda del operador.

C++ permite sobrecargarC++ permite sobrecargar los operadores de los operadores de modo similar a lo que se hace con las funciones. modo similar a lo que se hace con las funciones. La mayoría de operadores de C++ pueden ser La mayoría de operadores de C++ pueden ser sobrecargados como son: +,-, *, /, =, ==, !=, <<, sobrecargados como son: +,-, *, /, =, ==, !=, <<, >>, etc. Los únicos operadores que no pueden >>, etc. Los únicos operadores que no pueden sobrecargarse son: . :: .* ?sobrecargarse son: . :: .* ?

Page 66: Curso c++

Curso de C++Curso de C++

Tampoco pueden sobrecargarse los operadores Tampoco pueden sobrecargarse los operadores del preprocesador (El operador .* es muy del preprocesador (El operador .* es muy especializado).especializado).

En una expresión a + b donde a y b son En una expresión a + b donde a y b son objetos, a es el causante de la llamada (pasa su objetos, a es el causante de la llamada (pasa su valor a través de this), mientras que el valor de valor a través de this), mientras que el valor de b es recibido a través del paso de parámetros.b es recibido a través del paso de parámetros.

En general, cuando se usa una función En general, cuando se usa una función miembro no se necesitan parámetros al miembro no se necesitan parámetros al sobrecargar una operación monaria y solo se sobrecargar una operación monaria y solo se necesita un parámetro cuando se sobrecarga necesita un parámetro cuando se sobrecarga un operador binario.un operador binario.

Aquí va un Ejemplo:Aquí va un Ejemplo:

Page 67: Curso c++

Curso de C++Curso de C++

HERENCIAHERENCIA

Otra de las características de un leguaje de Otra de las características de un leguaje de programación orientada a objetos es la programación orientada a objetos es la herencia. La herencia es un proceso por medio herencia. La herencia es un proceso por medio del cual un objeto puede adquirir las del cual un objeto puede adquirir las propiedades de otro esto es importante porque propiedades de otro esto es importante porque permite dar soporte al concepto de permite dar soporte al concepto de calificación. En este capitulo se presentan calificación. En este capitulo se presentan herencia simple, tipos de herencia, herencia herencia simple, tipos de herencia, herencia con constructores sin parámetros y con constructores sin parámetros y constructores con parámetros, herencia constructores con parámetros, herencia múltiplemúltiple

Page 68: Curso c++

Curso de C++Curso de C++

Herencia SimpleHerencia Simple

Las clases que heredan propiedades se Las clases que heredan propiedades se llaman clase derivada, mientras que la clase llaman clase derivada, mientras que la clase de la que se heredan se denomina clase de la que se heredan se denomina clase base. En herencia por lo menos existe una base. En herencia por lo menos existe una clase llamada clase base y otra llamada clase clase llamada clase base y otra llamada clase heredada.heredada.

En nuestro lenguaje formulamos la herencia En nuestro lenguaje formulamos la herencia con "hereda de". En C++ estas palabras son con "hereda de". En C++ estas palabras son reemplazadas por dos puntos ( : ). reemplazadas por dos puntos ( : ).

Una descripción general de Herencia seria:Una descripción general de Herencia seria:

Page 69: Curso c++

Curso de C++Curso de C++

class nombre_clase_base{class nombre_clase_base{ //datos y funciones miembros propios de la //datos y funciones miembros propios de la

clase //baseclase //base};};  Class nombre_clase_derivada : modo_accesoClass nombre_clase_derivada : modo_accesonombre_clase_base{nombre_clase_base{ //datos y funciones miembros propios de //datos y funciones miembros propios de

la //clase heredadala //clase heredada};};

Aquí va un EjemploAquí va un Ejemplo

Page 70: Curso c++

Curso de C++Curso de C++

Acceso protegido, protected:Acceso protegido, protected: Con respecto a las funciones externas, es Con respecto a las funciones externas, es

equivalente al acceso privado, pero con equivalente al acceso privado, pero con respecto a las clases derivadas se comporta respecto a las clases derivadas se comporta como público.como público.

Cada una de éstas palabras, seguidas de ":", da Cada una de éstas palabras, seguidas de ":", da comienzo a una sección, que terminará cuando comienzo a una sección, que terminará cuando se inicie la sección siguiente o cuando termine se inicie la sección siguiente o cuando termine la declaración de la clase. Es posible tener la declaración de la clase. Es posible tener varias secciones de cada tipo dentro de una varias secciones de cada tipo dentro de una clase.clase.

Si no se especifica nada, por defecto, los Si no se especifica nada, por defecto, los miembros de una clase son privados. miembros de una clase son privados.

Page 71: Curso c++

Curso de C++Curso de C++

Tipos de Herencia (modos de acceso)Tipos de Herencia (modos de acceso)

Es necesario porque C++ distingue dos tipos Es necesario porque C++ distingue dos tipos de herencia: pública y privada. "Por default", de herencia: pública y privada. "Por default", las clases se derivan unas de otras en forma las clases se derivan unas de otras en forma privada. Consecuentemente, debemos decirle privada. Consecuentemente, debemos decirle explícitamente al compilador que use explícitamente al compilador que use herencia pública. modo_acceso:herencia pública. modo_acceso:

public: Los datos y funciones miembros public: Los datos y funciones miembros public siguen siendo public, y los private public siguen siendo public, y los private siguen siendo private en la clase derivada.siguen siendo private en la clase derivada.

private: Los datos y funciones miembros private: Los datos y funciones miembros public y private son todos private en la clase public y private son todos private en la clase derivada.derivada.

Page 72: Curso c++

Curso de C++Curso de C++Herencia con Constructores sin parámetros.Herencia con Constructores sin parámetros.

Es posible que una clase base y una clase Es posible que una clase base y una clase derivada tengan cada una su función de derivada tengan cada una su función de construcción sin parámetros. Cuando una construcción sin parámetros. Cuando una clase derivada contiene un constructor, se clase derivada contiene un constructor, se ejecuta el constructor base antes de ejecutar ejecuta el constructor base antes de ejecutar el constructor de la clase derivada. el constructor de la clase derivada.

Cuando existe herencia los constructores de Cuando existe herencia los constructores de las clases base se invocan por órden, de las clases base se invocan por órden, de izquierda a derecha y siempre antes que el izquierda a derecha y siempre antes que el de la clase derivada. Mientras que los de la clase derivada. Mientras que los destructores se invocan de derecha a destructores se invocan de derecha a izquierda, y siempre después que el izquierda, y siempre después que el destructor de la clase derivada.destructor de la clase derivada.

Aquí va un EjemploAquí va un Ejemplo

Page 73: Curso c++

Curso de C++Curso de C++

Herencia con Constructores con parámetros.Herencia con Constructores con parámetros.

Es posible que una clase base y una clase Es posible que una clase base y una clase derivada tengan cada una su función de derivada tengan cada una su función de construcción con parámetros. Cuando una construcción con parámetros. Cuando una clase derivada contiene un constructor, se clase derivada contiene un constructor, se ejecuta el constructor base antes de ejecutar ejecuta el constructor base antes de ejecutar el constructor de la clase derivada.el constructor de la clase derivada.

Si el constructor de la clase base tiene Si el constructor de la clase base tiene parámetros la clase derivada debe tener parámetros la clase derivada debe tener necesariamente un constructor con necesariamente un constructor con parámetrosparámetros

Aquí va un EjemploAquí va un Ejemplo

Page 74: Curso c++

Curso de C++Curso de C++

Herencia MúltipleHerencia Múltiple Es posible que una clase herede atributos de Es posible que una clase herede atributos de

dos o más clases. Para realizar esto, se usa dos o más clases. Para realizar esto, se usa una lista de herencia, separada por comas, en una lista de herencia, separada por comas, en la lista de las clases base de la clase derivada.la lista de las clases base de la clase derivada.

class nombre_clase_derivada :class nombre_clase_derivada :lista_de_clases_bases{lista_de_clases_bases{ datos y funciones miembros de la clase datos y funciones miembros de la clase

derivadaderivada};};   

Aquí va un EjemploAquí va un Ejemplo

Page 75: Curso c++

Curso de C++Curso de C++

CLASES BASES VIRTUALESCLASES BASES VIRTUALES

Cuando dos o más objetos se derivan de Cuando dos o más objetos se derivan de una clase base común, se puede impedir una clase base común, se puede impedir que estén presentes múltiples copias de que estén presentes múltiples copias de la clase base en un objeto derivado de la clase base en un objeto derivado de esos objetos, declarando la clase base esos objetos, declarando la clase base como virtual cuando se hereda. como virtual cuando se hereda.

Aquí va un EjemploAquí va un Ejemplo

Page 76: Curso c++

Curso de C++Curso de C++FUNCIONES VIRTUALESFUNCIONES VIRTUALES

Una función virtual es una función que se declara Una función virtual es una función que se declara en la clase base como virtual y se redefine en una en la clase base como virtual y se redefine en una o más clases derivadas.o más clases derivadas.

Las funciones virtuales son especiales, porque Las funciones virtuales son especiales, porque cuando se accede a una usando un puntero de la cuando se accede a una usando un puntero de la clase base a un objeto de una clase derivada, C++ clase base a un objeto de una clase derivada, C++ determinada en tiempo de ejecución a que función determinada en tiempo de ejecución a que función llamar en función del tipo de objeto apuntado.llamar en función del tipo de objeto apuntado.

Una función virtual se declara como virtual dentro Una función virtual se declara como virtual dentro de la clase base usando la palabra clave virtual. de la clase base usando la palabra clave virtual. Sin embargo, cuando se redefine una función Sin embargo, cuando se redefine una función virtual en una clase derivada no se necesita virtual en una clase derivada no se necesita repetir la palabra clave virtual (aunque no es un repetir la palabra clave virtual (aunque no es un error hacerlo).error hacerlo).

Aquí va un EjemploAquí va un Ejemplo

Page 77: Curso c++

Curso de C++HCurso de C++H

FUNCIONES VIRTUALES PURAS Y TIPOSFUNCIONES VIRTUALES PURAS Y TIPOS

AABSTRACTOSBSTRACTOS

Una función virtual pura es una función que Una función virtual pura es una función que se declara en una clase base y que no tiene se declara en una clase base y que no tiene definición relativa a la base, por lo que todos definición relativa a la base, por lo que todos los tipos derivados se ven obligados a definir los tipos derivados se ven obligados a definir su propia versión de esa función.su propia versión de esa función.

Para declarar una función virtual pura se Para declarar una función virtual pura se utiliza la forma general:utiliza la forma general:

Page 78: Curso c++

Curso de C++HCurso de C++H

virtual tipo nombre_funcion (lista parámetros) virtual tipo nombre_funcion (lista parámetros) = 0; = 0;  Si una clase tiene por lo menos una Si una clase tiene por lo menos una función virtual pura entonces se dice que esa función virtual pura entonces se dice que esa clase es abstracta. Las clases abstractas clase es abstracta. Las clases abstractas tienen una característica importante no tienen una característica importante no puede haber objetos de esa clase, porque una puede haber objetos de esa clase, porque una o más de sus funciones carecen de definición.o más de sus funciones carecen de definición.

Nota: Pero si es posible declarar punteros de Nota: Pero si es posible declarar punteros de una clase abstracta.una clase abstracta.

Aquí va un EjemploAquí va un Ejemplo

Page 79: Curso c++

Curso de C++HCurso de C++H

PLANTILLAS (TEMPLATE)PLANTILLAS (TEMPLATE)

Las funciones genéricas se crean mediante la Las funciones genéricas se crean mediante la palabra reservada template. palabra reservada template.

La palabra template se refleja en el uso de C++. La palabra template se refleja en el uso de C++. Se utiliza para crear una pantilla que describe lo Se utiliza para crear una pantilla que describe lo que hará una función, dejando al compilador que hará una función, dejando al compilador que complete los detalles necesarios que complete los detalles necesarios

El formato de una función template es el El formato de una función template es el siguiente:siguiente:

template<class tipo> tipo_devueltotemplate<class tipo> tipo_devueltonombre_función(lista_de_parámetros){nombre_función(lista_de_parámetros){ //cuerpo de la función //cuerpo de la función }}

Page 80: Curso c++

Curso de C++HCurso de C++H

donde tipo es un nombre de marcador para el donde tipo es un nombre de marcador para el tipo de dato que utilizara la función, el tipo de dato que utilizara la función, el nombre puede ser utilizado dentro de la nombre puede ser utilizado dentro de la función no obstante se trate únicamente de función no obstante se trate únicamente de un marcador que el compilador se encargará un marcador que el compilador se encargará de reemplazar automáticamente por un tipo de reemplazar automáticamente por un tipo de dato real cuanto cree una versión de dato real cuanto cree una versión específica de la función. específica de la función.

Aquí va un EjemploAquí va un Ejemplo

Page 81: Curso c++

Curso de C++HCurso de C++HGESTIÓN DE EXCEPCIONES Y ERRORESGESTIÓN DE EXCEPCIONES Y ERRORES

Manejo De ExcepcionesManejo De Excepciones

El control de flujo en un programa C++ puede El control de flujo en un programa C++ puede hacerse mediante las ya conocidas sentencias hacerse mediante las ya conocidas sentencias estructuradas (if, while, return).estructuradas (if, while, return).

Mediante las excepciones se podrá evitar Mediante las excepciones se podrá evitar repetir continuamente código, en busca de un repetir continuamente código, en busca de un posible error, y avisar a otros objetos de una posible error, y avisar a otros objetos de una condición anormal de ejecución durante un condición anormal de ejecución durante un programa.programa.

Mediante la gestión de excepciones se Mediante la gestión de excepciones se prescindirá de sentencias de control de errores prescindirá de sentencias de control de errores del tipo: del tipo: 

if ( error == true )if ( error == true )

return ERROR;return ERROR;

Page 82: Curso c++

Curso de C++HCurso de C++H

Tipos de Excepciones:Tipos de Excepciones:

Error: Excepciones que indican problemas muy Error: Excepciones que indican problemas muy graves, que suelen ser no recuperables y no graves, que suelen ser no recuperables y no deben casi nunca ser capturadas. deben casi nunca ser capturadas.

Exception: Excepciones no definitivas, pero Exception: Excepciones no definitivas, pero que se detectan fuera del tiempo de ejecución. que se detectan fuera del tiempo de ejecución.

FuncionamientoFuncionamiento

Para que el sistema de gestión de excepciones Para que el sistema de gestión de excepciones funcione se ha de trabajar en dos partes de los funcione se ha de trabajar en dos partes de los programas:programas:

Page 83: Curso c++

Curso de C++HCurso de C++H

Definir qué partes de los programas crean una Definir qué partes de los programas crean una excepción y bajo qué condiciones. Para ello se excepción y bajo qué condiciones. Para ello se utilizan las palabras reservadas throw y throws. utilizan las palabras reservadas throw y throws.

Comprobar en ciertas partes de los programas si Comprobar en ciertas partes de los programas si una excepción se ha producido y actuar en una excepción se ha producido y actuar en consecuencia. Para ello se utilizan las palabras consecuencia. Para ello se utilizan las palabras reservadas try, catch y finally. reservadas try, catch y finally.

Manejo de excepciones: try - catch – finallyManejo de excepciones: try - catch – finally

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

Page 84: Curso c++

Curso de C++HCurso de C++H

try {try {

// Código posiblemente problemático// Código posiblemente problemático

}}

   Pero lo importante es cómo controlar, qué Pero lo importante es cómo controlar, qué

hacer con la posible excepción que se cree. hacer con la posible excepción que se cree. Para ello se utilizan las cláusulas catch, en Para ello se utilizan las cláusulas catch, en las que se especifica que acción realizar:las que se especifica que acción realizar:

Aquí va un EjemploAquí va un Ejemplo

Page 85: Curso c++

Curso de C++HCurso de C++H

try {try {

// Código posiblemente problemático// Código posiblemente problemático

} catch( tipo_de_excepcion e) {} catch( tipo_de_excepcion e) {

// Código para solucionar la excepción e// Código para solucionar la excepción e

} catch( tipo_de_excepcion_mas_general e) {} catch( tipo_de_excepcion_mas_general e) {

// Código para solucionar la excepción e// Código para solucionar la excepción e

}}

Aquí va un EjemploAquí va un Ejemplo

Page 86: Curso c++

Curso de C++HCurso de C++H

Ejemplo: Se observa que se pueden anidar Ejemplo: Se observa que se pueden anidar sentencias catch, pero conviene hacerlo sentencias catch, pero conviene hacerlo indicando en último lugar las excepciones más indicando en último lugar las excepciones más generales (es decir, que se encuentren más generales (es decir, que se encuentren más arriba en el árbol de herencia de excepciones), arriba en el árbol de herencia de excepciones), porque el intérprete C++ ejecutará aquel porque el intérprete C++ ejecutará aquel bloque de código catch cuyo parámetro sea del bloque de código catch cuyo parámetro sea del tipo de una excepción lanzada.tipo de una excepción lanzada.

Si no se ha lanzado ninguna excepción el código Si no se ha lanzado ninguna excepción el código continúa sin ejecutar ninguna sentencia catch.continúa sin ejecutar ninguna sentencia catch.

Page 87: Curso c++

Curso de C++HCurso de C++H

Si quisiéremos realizar una acción común para Si quisiéremos realizar una acción común para todas las opciones. Se insertan fragmentos de todas las opciones. Se insertan fragmentos de código que se ejecuten tras la gestión de las código que se ejecuten tras la gestión de las excepciones. Este código se ejecutará tanto si excepciones. Este código se ejecutará tanto si se ha tratado una excepción (catch) como si se ha tratado una excepción (catch) como si no. Este tipo de código se inserta en una no. Este tipo de código se inserta en una sentencia finally, que será ejecutada tras el sentencia finally, que será ejecutada tras el bloque try o catchbloque try o catch::

try {try {} catch( Exception e ) {} catch( Exception e ) {} finally {} finally { // Se ejecutara tras try o catch// Se ejecutara tras try o catch}}

Aquí va un EjemploAquí va un Ejemplo

Page 88: Curso c++

Curso de C++HCurso de C++H

Lanzamiento de excepciones: throw - throwsLanzamiento de excepciones: throw - throws   Muchas veces el programador dentro de un Muchas veces el programador dentro de un

determinado método deberá comprobar si determinado método deberá comprobar si alguna condición de excepción se cumple, y si alguna condición de excepción se cumple, y si es así lanzarla. Para ello se utilizan las es así lanzarla. Para ello se utilizan las palabras reservadas throw y throws.palabras reservadas throw y throws.

   Por una parte la excepción se lanza mediante Por una parte la excepción se lanza mediante

la sentencia throw:la sentencia throw:  

if ( condicion_de_excepcion == true )if ( condicion_de_excepcion == true ) throw new miExcepcion();throw new miExcepcion();

Page 89: Curso c++

Curso de C++HCurso de C++H

Se puede observar que hemos creado un Se puede observar que hemos creado un objeto de la clase miExcepcion, puesto que objeto de la clase miExcepcion, puesto que las excepciones son objetos y por tanto las excepciones son objetos y por tanto deberán ser instanciadas antes de ser deberán ser instanciadas antes de ser lanzadas.lanzadas.

   Aquellos métodos que pueden lanzar Aquellos métodos que pueden lanzar

excepciones deben usar esas excepciones en excepciones deben usar esas excepciones en su declaración. Para ello se utiliza la su declaración. Para ello se utiliza la sentencia throws:sentencia throws:

  

Aquí va un EjemploAquí va un Ejemplo

Page 90: Curso c++

Curso de C++HCurso de C++H

tipo_devuelto miMetodoLanzador() throws tipo_devuelto miMetodoLanzador() throws miExcep1, miExcep2 {miExcep1, miExcep2 {

// Código capaz de lanzar excepciones // Código capaz de lanzar excepciones miExcep1 y miExcep2miExcep1 y miExcep2

}}

   Se puede observar que cuando se pueden Se puede observar que cuando se pueden

lanzar en el método más de una excepción se lanzar en el método más de una excepción se deben indicar en su declaración separadas deben indicar en su declaración separadas por comas.por comas.