SlideShare una empresa de Scribd logo
1 de 90
ESCUELA POLITÉCNICA DEL
        EJERCITO

   PROGRAMACION
ORIENTADA DE OBJETOS
    Ing. José Luis Carrillo Medina

    Facultad de Sistemas e Informática
  ESCUELA POLITÉCNICA DEL EJERCITO
              Febrero , 200 2
OBJETIVOS

 Conocer los conceptos básicos 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 programación.
CONTENIDO

 Lenguaje de Programación
  Orientado a Objetos: C++
 Turbo C++ 3.0
 Visual C++ 6.0
 Microsoft Foundation Class
  Library 6.0
 Bibliografía
BIBLIOGRAFÍA


 Herbert Schildt. Turbo C++, Mc Graw Hill, España,
  1996.
 Herbert Schildt. C++ Guia de la Autoenseñanza, Mc
  Graw Hill, España, 1996.
 Jon Bates & Tim Tompkins. Descubre Microsoft
  Visual C++, Prentice Hall, España, 1999
 Chuck Sphar. Aprenda Microsoft Visual C++ 6.0 Ya. Mc
  Graw Hill, España, 1999.
 Jose Luis Carrillo M, Programación Orientada a
  Objetos: Curso C++, Mayo 2004
Curso de C++

 Proceso para la obtención de un programa
                  ejecutable

 Probablemente este es el lugar más adecuado
  para explicar cómo se obtiene un fichero
  ejecutable a partir de un programa C++.
 Para   empezar      necesitamos   un    poco de
  vocabulario técnico. Veremos algunos conceptos
  que se manejan frecuentemente en cualquier
  curso de programación y sobre todo en manuales
  de C y C++.
Curso de C++

Fichero fuente y programa o código 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, código 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 código 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
  código objeto.
 Los compiladores son programas que leen un
  fichero de texto que contiene el programa fuente
  y generan un fichero que contiene el código
  objeto.
 El código objeto no tiene ningún significado para
  los seres humanos, al menos no directamente.
  Además 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++

                     Librerías:

 Junto con los compiladores de C y C++, se
  incluyen ciertos ficheros llamados librerías. Las
  librerías contienen el código objeto de muchos
  programas que permiten hacer cosas comunes,
  como leer el teclado, escribir en la pantalla,
  manejar números, realizar funciones matemáticas,
  etc. Las librerías están clasificadas por el tipo de
  trabajos que hacen, hay librerías de entrada y
  salida, matemáticas, de manejo de memoria, de
  manejo de textos, etc.
Curso de C++
 Hay un conjunto de librerías muy especiales, que
  se incluyen con todos los compiladores de C y de
  C++. Son las librerías ANSI o estándar. Pero
  también hay librerías no estándar, y dentro de
  estas las hay públicas y comerciales. En este
  curso sólo usaremos librerías ANSI.


      Ficheros ejecutables y enlazadores:
 Cuando obtenemos el fichero objeto, aún 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 estarán incluidas en librerías
  externas, ya sean ANSI o no. Es necesario
  combinar nuestro fichero objeto con esas
  librerías para obtener un ejecutable.


 2. Muy a menudo, nuestros programas estarán
  compuestos por varios ficheros fuente, y de cada
  uno de ellos se obtendrá un fichero objeto. Es
  necesario unir todos los ficheros objeto, más las
  librerías 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 tamaño 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 más 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
  librería 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 programación
  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      erróneas    o
  incompletas, variables que no existen, etc. Los
  errores de sintaxis se detectan en la fase de
  compilación. El compilador, además de generar
  el código objeto, nos dará una lista de errores de
  sintaxis. De hecho nos dará sólo una cosa o la
  otra, ya que si hay errores no es posible generar
  un código objeto.
Curso de C++

 Avisos: además de errores, el compilador puede
  dar también avisos (warnings). Los avisos son
  errores, pero no lo suficientemente graves como
  para impedir la generación del código 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 creación.
Curso de C++

 Errores de enlazado: el programa enlazador
 también puede encontrar errores. Normalmente
 se refieren a funciones que no están definidas en
 ninguno de los ficheros objetos ni en las
 librerías. Puede que hayamos olvidado incluir
 alguna librería, o algún fichero objeto, o puede
 que hayamos olvidado definir alguna función o
 variable, o lo hayamos hecho mal.
 Errores de ejecución: incluso después de
 obtener un fichero ejecutable, es posible que se
 produzcan errores.
Curso de C++

 En el caso de los errores de ejecución
  normalmente no obtendremos mensajes de error,
  sino que simplemente el programa terminará
  bruscamente. Estos errores son más difíciles de
  detectar y corregir. Existen programas auxiliares
  para buscar estos errores, son los llamados
  depuradores    (debuggers).    Estos  programas
  permiten detener la ejecución 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 diseño: finalmente los errores más
  difíciles de corregir y prevenir. Si nos hemos
  equivocado al diseñar nuestro algoritmo, no
  habrá ningún programa que nos pueda ayudar a
  corregir los nuestros. Contra estos errores sólo
  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
  programación de propósito 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++

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

  cientos de líneas de código en C, la mayor parte
  de estos compiladores están respaldados por
  enormes librerías escritas en C. Nada te impide
  a ti, como programador, usar librerías, e incluso
  crear las tuyas propias.
 Una de las propiedades de C y C++ es la
  reutilización del código en forma de librerías de
  usuario. Después de un tiempo trabajando, todos
  los programadores desarrollan sus propias
  librerías para aquellas cosas que hacen
  frecuentemente. Y además, raramente piensan
  en ello, se limitan a usarlas.
Curso de C++


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


 Otra ventaja importante, C tiene más de 30 años
  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
  aún mucha vida por delante. Sólo 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 librerías de todo propósito 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       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
REALES     double        +/-1E-307..+/-1E308
           Long double   +/-1E-4932..+/-1E4932
CARACTER   Char          CÓDIGO ASCII
VACÍO      Void          -
Curso de C++
TIPOS ENUMERADOS
Un tipo enumerado o enumeración está construido
por una serie de constantes simbólicas enteras. El
ejemplo asocia falso a cero y verdadero a 1.
enum {falso, verdadero};  // falso =0, verdadero =1
Esta asignación se puede cambiar:


enum {lunes=1,martes, miércoles};
//lunes=1, martes=2, miércoles=3
enum {lunes=10,martes=20,miércoles=30}
enum dias {lunes, martes, miércoles };
Curso de C++

      INTRODUCCIÓN A LOS LENGUAJES
           ORIENTADOS A OBJETOS
 La Programación Orientada a Objetos (POO) es
  una nueva forma de programación que se utiliza
  para desarrollar programas más eficientes y con
  gran fiabilidad.
 Para ello quizá sea necesario dejar a un lado las
  ideas de la programación tradicional, en la que los
  datos    se    tratan  separadamente       de   los
  procedimientos que actúan como una “caja
  negra”, y adentrarse en aquellas orientadas a
  objetos, en la que los programas se dividen en
  “entidades”
Curso de C++
     INTRODUCCIÓN A LOS LENGUAJES
         ORIENTADOS A OBJETOS  
  independientes conocidas como objetos, que
  contienen datos y procedimientos que actúan
  sobre esos datos. Dichos objetos se comunican
  entre sí por medio de “métodos” a través de
  “mensajes” que son acciones que debe ejecutar
  el objeto.
 Objetos físicos (un automóvil, un avión),
  elementos de interfaces gráficas de usuario
  (ventanas, botones, íconos), estructuras de datos
  (arrays, pilas, colas), tipos de datos definidos por
  el usuario (números complejos, puntos de un
  plano), etc.
Curso de C++
      EVOLUCION DE LOS LENGUAJES
         ORIENTADOS A 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.
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 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.
Curso de C++
    EVOLUCION DE LOS LENGUAJES
       ORIENTADOS A OBJETOS
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.
Curso de C++
    EVOLUCION DE LOS LENGUAJES
       ORIENTADOS 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.
Curso de C++
    VENTAJAS Y DESVENTAJAS DE LOS
    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.
Curso de C++
    VENTAJAS Y DESVENTAJAS DE LOS
    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.
Curso de C++
    VENTAJAS Y DESVENTAJAS DE LOS
    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.
Curso de C++
 CARACTERÍSTICAS DE LA PROGRAMACIÓN
         ORIENTADA 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.
Curso de C++
    CARACTERÍSTICAS DE LA PROGRAMACIÓN
            ORIENTADA 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.
 
Curso de C++
    LOS LENGUAJES DE PROGRAMACIÓN
          ORIENTADOS 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.
Curso de C++
      P rogramacion O rientada a O bjetos :

 Siglas de Programación Orientada a Objetos
  ”POO ". En inglés se pone al revés "OOP". La
  idea básica de este tipo de programación 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 programación
  estructurada no ha desaparecido, de hecho se
  refuerza   y  resulta   más   evidente,  como
  comprobarás 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
  habíamos 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 más
  que una llamada a una función de un
  determinado objeto. Cuando llamemos a una
  función de un objeto, muy a menudo diremos que
  estamos enviando un mensaje a ese objeto.
 En este sentido, mensaje es el término adecuado
  cuando hablamos de programación orientada a
  objetos en general.
Curso de C++

Método:

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

Clase:

 Una clase se puede considerar como un patrón
  para construir objetos. En C++, un objeto es sólo
  un tipo de variable de una clase determinada. Es
  importante distinguir entre objetos y clases, la
  clase es simplemente una declaración, no tiene
  asociado ningún 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 también los objetos,
  tienen partes públicas y partes privadas. Algunas
  veces llamaremos a la parte pública 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 :
 E s tener todos los datos lo más 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
  característica de la programación orientada a
  objetos que permite que un nombre pueda
  utilizarse en dos o mas formas, para dos o mas
  propósitos relacionados entre si. Esto significa
  que el lenguaje C++ puede admitir una
  sobrecarga de funciones u operadores de una
  misma función.
Curso de C++
Herencia:

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

Declaración de una clase

 Ahora va a empezar un pequeño bombardeo de
  nuevas palabras reservadas de C++, pero no te
  asustes, no es tan complicado como parece.
 La primera palabra que aparece es lógicamente
  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
  atención, ya que por ahora sólo 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
  hacíamos 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 capítulo 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 también 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 sólo 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 público, public:
 Cualquier miembro público 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 ningún valor y no pueden ser
  heredados. Además deben ser públicos, no
  tendría ningún 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 símbolo ~ delante, no
  retornan ningún valor y no pueden ser
  heredados.
 Cuando se define un destructor para una
  clase, éste es llamado automáticamente
  cuando se abandona el ámbito en el que fue
  definido.
Curso de C++

 Esto es así salvo cuando el objeto fue creado
  dinámicamente 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 razón de que no
  admite argumentos.

  Aquí va un Ejemplo:
Curso de C++

Constructores con Parámetros

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


   Aquí va un Ejemplo:
Curso de C++
Funciones inline

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

 O tra forma de utilizar funciones inline sin
  necesidad de utilizar esta palabra es introducir el
  código de la función en la declaración
  (convirtiéndose de esta manera en definición),
  poniéndolo entre llaves { } a continuación de
  ésta.
  Aquí va un Ejemplo
Curso de C++
Funciones friend

 Una función que no es miembro de una clase y
   que puede acceder a la parte privada de una
   clase    se   le  conoce   como   una   función
   amiga(friend) de la clase.
 El formato de la declaración de funciones friend
   es el siguiente:
 
class <nombre de la clase>{
public :
    friend <declaración de función>
    //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 creación 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 características mas importantes de
  un lenguaje orientado a objetos es el
  polimorfismo, el cual permite el uso de un
  nombre para especificar un nombre de acción
  general. De esta manera se ejecuta una parte
  específica de la clase general dependiendo del
  tipo de dato con el que está tratando. En este
  capítulo 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 través de la sobrecarga de
  funciones . En C++, dos o más funciones pueden
  compartir un mismo nombre siempre y cuando
  difieran en la declaración de sus parámetros.
 Las funciones que comparten el mismo nombre
  se dice que están sobrecargadas.


  Aquí va un Ejemplo:
Curso de C++
Sobrecarga de operadores

 Para sobrecargar un operador se debe definir la
  operación significa con relación a la clase a la
  que se aplica. Para hacer esto, hay que crear
  una función operador que defina su acción.
 La forma general de declarar una sobrecarga de
  operadores es:

tipo_devuelto nombre_clase :: operator # (lista de
   argumentos){
   // operación que se va ha realizar
} 
Curso de C++

 # - es el operador que se quiere sobrecargar.
  tipo es el tipo de valor devuelto por la operación
  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
  mayoría 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 expresión a + b donde a y b son objetos,
  a es el causante de la llamada (pasa su valor a
  través de this), mientras que el valor de b es
  recibido a través del paso de parámetros.
 En general, cuando se usa una función miembro
  no se necesitan parámetros al sobrecargar una
  operación monaria y solo se necesita un
  parámetro cuando se sobrecarga un operador
  binario.


  Aquí va un Ejemplo:
Curso de C++

HERENCIA

 Otra de las características de un leguaje de
  programación 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 calificación. En este capitulo se
  presentan herencia simple, tipos de herencia,
  herencia con constructores sin parámetros y
  constructores con parámetros, herencia múltiple
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 descripción 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
  público.
 Cada una de éstas palabras, seguidas de ":", da
  comienzo a una sección, que terminará cuando
  se inicie la sección siguiente o cuando termine la
  declaración 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: pública y privada. "Por default", las
  clases se derivan unas de otras en forma
  privada. Consecuentemente, debemos decirle
  explícitamente al compilador que use herencia
  pública. 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 parámetros.

 Es posible que una clase base y una clase
  derivada tengan cada una su función de
  construcción sin parámetros. 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
  después que el destructor de la clase derivada.
  Aquí va un Ejemplo
Curso de C++

Herencia con Constructores con parámetros.

 Es posible que una clase base y una clase
  derivada tengan cada una su función de
  construcción con parámetros. 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
  parámetros la clase derivada debe tener
  necesariamente un constructor con parámetros
  Aquí va un Ejemplo
Curso de C++

Herencia Múltiple

 Es posible que una clase herede atributos de dos
  o más 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 más objetos se derivan de
  una clase base común, se puede impedir
  que estén presentes múltiples 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 función virtual es una función que se declara
  en la clase base como virtual y se redefine en una
  o más 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 ejecución a que función
  llamar en función del tipo de objeto apuntado.
 Una función virtual se declara como virtual dentro
  de la clase base usando la palabra clave virtual.
  Sin embargo, cuando se redefine una función
  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
A BSTRACTOS

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

 Para declarar una función virtual pura se utiliza
  la forma general:
Curso de C++H

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

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


  Aquí va un Ejemplo
Curso de C++H
PLANTILLAS (TEMPLATE)

 Las funciones genéricas 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 función, dejando al compilador que
  complete los detalles necesarios
 El formato de una función template es el
  siguiente:

template<class tipo> tipo_devuelto
nombre_función(lista_de_parámetros){
   //cuerpo de la función
}
Curso de C++H

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


   Aquí va un Ejemplo
Curso de C++H
 GESTIÓN 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 código, en busca de un posible
    error, y avisar a otros objetos de una condición
    anormal de ejecución durante un programa.
 Mediante       la  gestión     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 ejecución.

Funcionamiento

 Para que el sistema de gestión 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
  excepción y bajo qué condiciones. Para ello se
  utilizan las palabras reservadas throw y throws.
 Comprobar en ciertas partes de los programas si
  una excepción 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
  código que pueda provocar una excepción (por
  ejemplo, una lectura en un archivo), debe incluir
  este fragmento de código dentro de un bloque
  try:
Curso de C++H

try {
  // Código posiblemente problemático
}
 
 Pero lo importante es cómo controlar, qué hacer
    con la posible excepción que se cree. Para ello
    se utilizan las cláusulas catch, en las que se
    especifica que acción realizar:


   Aquí va un Ejemplo
Curso de C++H

try {
   // Código posiblemente problemático
} catch( tipo_de_excepcion e) {
   // Código para solucionar la excepción e
} catch( tipo_de_excepcion_mas_general e) {
   // Código para solucionar la excepción 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 más
  generales (es decir, que se encuentren más
  arriba en el árbol de herencia de excepciones),
  porque el intérprete C++ ejecutará aquel bloque
  de código catch cuyo parámetro sea del tipo de
  una excepción lanzada.

 Si no se ha lanzado ninguna excepción el código
  continúa sin ejecutar ninguna sentencia catch.
Curso de C++H
 Si quisiéremos realizar una acción común para
  todas las opciones. Se insertan fragmentos de
  código que se ejecuten tras la gestión de las
  excepciones. Este código se ejecutará tanto si se
  ha tratado una excepción (catch) como si no.
  Este tipo de código 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 método deberá comprobar si alguna
  condición de excepción se cumple, y si es así
  lanzarla. Para ello se utilizan las palabras
  reservadas throw y throws.
 
 Por una parte la excepción 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 deberán ser
  instanciadas antes de ser lanzadas.
 
 Aquellos    métodos     que     pueden   lanzar
  excepciones deben usar esas excepciones en su
  declaración. Para ello se utiliza la sentencia
  throws:
 
  Aquí va un Ejemplo
Curso de C++H


tipo_devuelto       miMetodoLanzador()       throws
   miExcep1, miExcep2 {
    // Código capaz de lanzar excepciones miExcep1
   y miExcep2
}
 
 Se puede observar que cuando se pueden lanzar
   en el método más de una excepción se deben
   indicar en su declaración separadas por comas.

Más contenido relacionado

La actualidad más candente

TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOS
xinithazangels
 
Analisis de tarjeta madre genericas
Analisis de tarjeta madre genericasAnalisis de tarjeta madre genericas
Analisis de tarjeta madre genericas
Laura Yaalnda
 
Tarjetas madre intel
Tarjetas madre intelTarjetas madre intel
Tarjetas madre intel
Laura Yaalnda
 

La actualidad más candente (20)

TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOS
 
Ensamblaje de cpu
Ensamblaje de cpuEnsamblaje de cpu
Ensamblaje de cpu
 
Discos duros
Discos durosDiscos duros
Discos duros
 
3 Placa base
3 Placa base3 Placa base
3 Placa base
 
Tipos de Placa-Mãe
Tipos de Placa-MãeTipos de Placa-Mãe
Tipos de Placa-Mãe
 
Procesos e Hilos
Procesos e HilosProcesos e Hilos
Procesos e Hilos
 
Clases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programaciónClases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programación
 
Arquitectura interna de la computadora
Arquitectura interna de la computadoraArquitectura interna de la computadora
Arquitectura interna de la computadora
 
Analisis de tarjeta madre genericas
Analisis de tarjeta madre genericasAnalisis de tarjeta madre genericas
Analisis de tarjeta madre genericas
 
Tarjetas madre intel
Tarjetas madre intelTarjetas madre intel
Tarjetas madre intel
 
Segmetación de instrucciones
Segmetación de instruccionesSegmetación de instrucciones
Segmetación de instrucciones
 
Sistemas operativos - Sistemas De Archivos - reporte unidad 5
Sistemas operativos - Sistemas De Archivos - reporte unidad 5Sistemas operativos - Sistemas De Archivos - reporte unidad 5
Sistemas operativos - Sistemas De Archivos - reporte unidad 5
 
Software de diagnostico y mantenimiento
Software de diagnostico y mantenimientoSoftware de diagnostico y mantenimiento
Software de diagnostico y mantenimiento
 
Gestión de Entrada y Salida
Gestión de Entrada y SalidaGestión de Entrada y Salida
Gestión de Entrada y Salida
 
Capitulo 1 IT Essential.pptx
Capitulo 1 IT Essential.pptxCapitulo 1 IT Essential.pptx
Capitulo 1 IT Essential.pptx
 
Squirrelmail Debian
Squirrelmail DebianSquirrelmail Debian
Squirrelmail Debian
 
UNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓNUNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓN
 
configuración y control de un sistema de red
configuración y control  de un sistema de redconfiguración y control  de un sistema de red
configuración y control de un sistema de red
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 

Similar a Curso c++ (20)

Curso de programacion en c++ prev
Curso de programacion en c++ prevCurso de programacion en c++ prev
Curso de programacion en c++ prev
 
2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase
 
Cursocpp
CursocppCursocpp
Cursocpp
 
Manual de-c-dev
Manual de-c-devManual de-c-dev
Manual de-c-dev
 
Manual C++ 3ra parte
Manual C++ 3ra parteManual C++ 3ra parte
Manual C++ 3ra parte
 
/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp
 
Cursocpp
CursocppCursocpp
Cursocpp
 
Proceso para la obtención de un programa ejecutable
Proceso para la obtención de un programa ejecutableProceso para la obtención de un programa ejecutable
Proceso para la obtención de un programa ejecutable
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Resolviendo problemas-con-cplusplus
Resolviendo problemas-con-cplusplusResolviendo problemas-con-cplusplus
Resolviendo problemas-con-cplusplus
 
Resolviendo problemas-con-cplusplus
Resolviendo problemas-con-cplusplusResolviendo problemas-con-cplusplus
Resolviendo problemas-con-cplusplus
 
Zanjai-como-entorno-de-programacion
Zanjai-como-entorno-de-programacionZanjai-como-entorno-de-programacion
Zanjai-como-entorno-de-programacion
 
LENGUAJE C++
LENGUAJE C++LENGUAJE C++
LENGUAJE C++
 
Consulta c++
Consulta c++Consulta c++
Consulta c++
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
historia del lenguaje c++
historia del lenguaje c++historia del lenguaje c++
historia del lenguaje c++
 
C
C C
C
 
Tutorial de- c. ++
Tutorial de- c. ++ Tutorial de- c. ++
Tutorial de- c. ++
 
Tutorial de-c ++
Tutorial de-c ++Tutorial de-c ++
Tutorial de-c ++
 

Último

NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
RigoTito
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
JonathanCovena1
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
NancyLoaa
 

Último (20)

Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 

Curso c++

  • 1. ESCUELA POLITÉCNICA DEL EJERCITO PROGRAMACION ORIENTADA DE OBJETOS Ing. José Luis Carrillo Medina Facultad de Sistemas e Informática ESCUELA POLITÉCNICA DEL EJERCITO Febrero , 200 2
  • 2. OBJETIVOS  Conocer los conceptos básicos 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).
  • 3. 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 programación.
  • 4. CONTENIDO  Lenguaje de Programación Orientado a Objetos: C++  Turbo C++ 3.0  Visual C++ 6.0  Microsoft Foundation Class Library 6.0  Bibliografía
  • 5. BIBLIOGRAFÍA  Herbert Schildt. Turbo C++, Mc Graw Hill, España, 1996.  Herbert Schildt. C++ Guia de la Autoenseñanza, Mc Graw Hill, España, 1996.  Jon Bates & Tim Tompkins. Descubre Microsoft Visual C++, Prentice Hall, España, 1999  Chuck Sphar. Aprenda Microsoft Visual C++ 6.0 Ya. Mc Graw Hill, España, 1999.  Jose Luis Carrillo M, Programación Orientada a Objetos: Curso C++, Mayo 2004
  • 6. Curso de C++ Proceso para la obtención de un programa ejecutable  Probablemente este es el lugar más adecuado para explicar cómo se obtiene un fichero ejecutable a partir de un programa C++.  Para empezar necesitamos un poco de vocabulario técnico. Veremos algunos conceptos que se manejan frecuentemente en cualquier curso de programación y sobre todo en manuales de C y C++.
  • 7. Curso de C++ Fichero fuente y programa o código 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.
  • 8. Curso de C++ Ficheros objeto, código 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 código objeto equivalente. Este es el trabajo que hacen los compiladores de C y C++. Consiste en obtener un fichero equivalente a nuestro programa fuente
  • 9. Curso de C++  comprensible para el ordenador, este fichero se conoce como fichero objeto, y su contenido como código objeto.  Los compiladores son programas que leen un fichero de texto que contiene el programa fuente y generan un fichero que contiene el código objeto.  El código objeto no tiene ningún significado para los seres humanos, al menos no directamente. Además 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.
  • 10. Curso de C++ Librerías:  Junto con los compiladores de C y C++, se incluyen ciertos ficheros llamados librerías. Las librerías contienen el código objeto de muchos programas que permiten hacer cosas comunes, como leer el teclado, escribir en la pantalla, manejar números, realizar funciones matemáticas, etc. Las librerías están clasificadas por el tipo de trabajos que hacen, hay librerías de entrada y salida, matemáticas, de manejo de memoria, de manejo de textos, etc.
  • 11. Curso de C++  Hay un conjunto de librerías muy especiales, que se incluyen con todos los compiladores de C y de C++. Son las librerías ANSI o estándar. Pero también hay librerías no estándar, y dentro de estas las hay públicas y comerciales. En este curso sólo usaremos librerías ANSI. Ficheros ejecutables y enlazadores:  Cuando obtenemos el fichero objeto, aún 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:
  • 12. Curso de C++  1. Nuestros programas usaran, en general, funciones que estarán incluidas en librerías externas, ya sean ANSI o no. Es necesario combinar nuestro fichero objeto con esas librerías para obtener un ejecutable.  2. Muy a menudo, nuestros programas estarán compuestos por varios ficheros fuente, y de cada uno de ellos se obtendrá un fichero objeto. Es necesario unir todos los ficheros objeto, más las librerías en un único fichero ejecutable.
  • 13. 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 tamaño 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 más detalle durante el curso.  Existe un programa que hace todas estas cosas, se trata del "link", o enlazador. El enlazador toma
  • 14. Curso de C++  todos los ficheros objeto que componen nuestro programa, los combina con los ficheros de librería 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 programación pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten.
  • 15. Curso de C++  Errores de sintaxis: son errores en el programa fuente. Pueden deberse a palabras reservadas mal escritas, expresiones erróneas o incompletas, variables que no existen, etc. Los errores de sintaxis se detectan en la fase de compilación. El compilador, además de generar el código objeto, nos dará una lista de errores de sintaxis. De hecho nos dará sólo una cosa o la otra, ya que si hay errores no es posible generar un código objeto.
  • 16. Curso de C++  Avisos: además de errores, el compilador puede dar también avisos (warnings). Los avisos son errores, pero no lo suficientemente graves como para impedir la generación del código 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 creación.
  • 17. Curso de C++  Errores de enlazado: el programa enlazador también puede encontrar errores. Normalmente se refieren a funciones que no están definidas en ninguno de los ficheros objetos ni en las librerías. Puede que hayamos olvidado incluir alguna librería, o algún fichero objeto, o puede que hayamos olvidado definir alguna función o variable, o lo hayamos hecho mal.  Errores de ejecución: incluso después de obtener un fichero ejecutable, es posible que se produzcan errores.
  • 18. Curso de C++  En el caso de los errores de ejecución normalmente no obtendremos mensajes de error, sino que simplemente el programa terminará bruscamente. Estos errores son más difíciles de detectar y corregir. Existen programas auxiliares para buscar estos errores, son los llamados depuradores (debuggers). Estos programas permiten detener la ejecución 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.
  • 19. Curso de C++  Errores de diseño: finalmente los errores más difíciles de corregir y prevenir. Si nos hemos equivocado al diseñar nuestro algoritmo, no habrá ningún programa que nos pueda ayudar a corregir los nuestros. Contra estos errores sólo cabe practicar y pensar.
  • 20. 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 programación de propósito 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.
  • 21. Curso de C++  Oirás y leerás mucho sobre este tema. Sobre todo diciendo que estos lenguajes son complicados y que requieren páginas y páginas de código para hacer cosas que con otros lenguajes se hacen con pocas líneas. Esto es una verdad a medias. Es cierto que un listado completo de un programa en C o C++ para gestión de bases de datos (por poner un ejemplo) puede requerir varios miles de líneas de código, y que su equivalente en Visual Basic sólo requiere unos pocos cientos. Pero detrás de cada línea de estos compiladores de alto nivel hay
  • 22. Curso de C++ cientos de líneas de código en C, la mayor parte de estos compiladores están respaldados por enormes librerías escritas en C. Nada te impide a ti, como programador, usar librerías, e incluso crear las tuyas propias.  Una de las propiedades de C y C++ es la reutilización del código en forma de librerías de usuario. Después de un tiempo trabajando, todos los programadores desarrollan sus propias librerías para aquellas cosas que hacen frecuentemente. Y además, raramente piensan en ello, se limitan a usarlas.
  • 23. Curso de C++  Además, los programas escritos en C o C++ tienen otras ventajas sobre el resto. Con la excepción del ensamblador, generan los programas más compactos y rápidos. El código es transportable, es decir, un programa ANSI en C o C++ podrá ejecutarse en cualquier máquina y bajo cualquier sistema operativo. Y si es necesario, proporcionan un acceso a bajo nivel de hardware sólo igualado por el ensamblador.
  • 24. Curso de C++  Otra ventaja importante, C tiene más de 30 años 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 aún mucha vida por delante. Sólo hay que pensar que sistemas operativos como Linux, Unix o incluso Windows se escriben casi por completo en C.
  • 25. Curso de C++  Por último, existen varios compiladores de C y C++ gratuitos, o bajo la norma GNU, así como cientos de librerías de todo propósito y miles de programadores en todo el mundo, muchos de ellos dispuestos a compartir su experiencia y conocimientos.
  • 26. Curso de 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 REALES double +/-1E-307..+/-1E308 Long double +/-1E-4932..+/-1E4932 CARACTER Char CÓDIGO ASCII VACÍO Void -
  • 27. Curso de C++ TIPOS ENUMERADOS Un tipo enumerado o enumeración está construido por una serie de constantes simbólicas enteras. El ejemplo asocia falso a cero y verdadero a 1. enum {falso, verdadero};  // falso =0, verdadero =1 Esta asignación se puede cambiar: enum {lunes=1,martes, miércoles}; //lunes=1, martes=2, miércoles=3 enum {lunes=10,martes=20,miércoles=30} enum dias {lunes, martes, miércoles };
  • 28. Curso de C++ INTRODUCCIÓN A LOS LENGUAJES ORIENTADOS A OBJETOS  La Programación Orientada a Objetos (POO) es una nueva forma de programación que se utiliza para desarrollar programas más eficientes y con gran fiabilidad.  Para ello quizá sea necesario dejar a un lado las ideas de la programación tradicional, en la que los datos se tratan separadamente de los procedimientos que actúan como una “caja negra”, y adentrarse en aquellas orientadas a objetos, en la que los programas se dividen en “entidades”
  • 29. Curso de C++ INTRODUCCIÓN A LOS LENGUAJES ORIENTADOS A OBJETOS   independientes conocidas como objetos, que contienen datos y procedimientos que actúan sobre esos datos. Dichos objetos se comunican entre sí por medio de “métodos” a través de “mensajes” que son acciones que debe ejecutar el objeto.  Objetos físicos (un automóvil, un avión), elementos de interfaces gráficas de usuario (ventanas, botones, íconos), estructuras de datos (arrays, pilas, colas), tipos de datos definidos por el usuario (números complejos, puntos de un plano), etc.
  • 30. Curso de C++ EVOLUCION DE LOS LENGUAJES ORIENTADOS A 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.
  • 31. 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 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.
  • 32. Curso de C++ EVOLUCION DE LOS LENGUAJES ORIENTADOS A OBJETOS 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.
  • 33. Curso de C++ EVOLUCION DE LOS LENGUAJES ORIENTADOS 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.
  • 34. Curso de C++ VENTAJAS Y DESVENTAJAS DE LOS 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.
  • 35. Curso de C++ VENTAJAS Y DESVENTAJAS DE LOS 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.
  • 36. Curso de C++ VENTAJAS Y DESVENTAJAS DE LOS 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.
  • 37. Curso de C++ CARACTERÍSTICAS DE LA PROGRAMACIÓN ORIENTADA 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.
  • 38. Curso de C++ CARACTERÍSTICAS DE LA PROGRAMACIÓN ORIENTADA 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.  
  • 39. Curso de C++ LOS LENGUAJES DE PROGRAMACIÓN ORIENTADOS 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.
  • 40. Curso de C++ P rogramacion O rientada a O bjetos :  Siglas de Programación Orientada a Objetos ”POO ". En inglés se pone al revés "OOP". La idea básica de este tipo de programación 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 programación estructurada no ha desaparecido, de hecho se refuerza y resulta más evidente, como comprobarás cuando veamos conceptos como la herencia.
  • 41. 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 habíamos 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.
  • 42. Curso de C++ Mensaje:  El mensaje es el modo en que se comunican los objetos entre si. En C++, un mensaje no es más que una llamada a una función de un determinado objeto. Cuando llamemos a una función de un objeto, muy a menudo diremos que estamos enviando un mensaje a ese objeto.  En este sentido, mensaje es el término adecuado cuando hablamos de programación orientada a objetos en general.
  • 43. Curso de C++ Método:  Se trata de otro concepto de POO, los mensajes que lleguen a un objeto se procesarán ejecutando un determinado método. En C++ un método no es otra cosa que una función o procedimiento perteneciente a un objeto.
  • 44. Curso de C++ Clase:  Una clase se puede considerar como un patrón para construir objetos. En C++, un objeto es sólo un tipo de variable de una clase determinada. Es importante distinguir entre objetos y clases, la clase es simplemente una declaración, no tiene asociado ningún objeto, de modo que no puede recibir mensajes ni procesarlos, esto únicamente lo hacen los objetos.
  • 45. Curso de C++ Interfaz:  Las clases y por lo tanto también los objetos, tienen partes públicas y partes privadas. Algunas veces llamaremos a la parte pública 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.
  • 46. Curso de C++ Encapsulamiento :  E s tener todos los datos lo más 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.
  • 47. Curso de C++ Polimorfismo.  (Polimorfismo significa “muchas formas”) Es una característica de la programación orientada a objetos que permite que un nombre pueda utilizarse en dos o mas formas, para dos o mas propósitos relacionados entre si. Esto significa que el lenguaje C++ puede admitir una sobrecarga de funciones u operadores de una misma función.
  • 48. Curso de C++ Herencia:  Veremos que es posible diseñar nuevas clases basándose en clases ya existentes. En C++ esto se llama derivación de clases, y en POO herencia. Cuando se deriva una clase de otra, normalmente se añadirán nuevos métodos y datos. El conjunto de datos y métodos que sobreviven, es lo que se conoce como herencia. La Herencia ayuda a la reutilización del código cuando se utiliza con el Polimorfismo y es útil para reutilizar diseños del programa y crear programas extensibles.
  • 49. Curso de C++ Declaración de una clase  Ahora va a empezar un pequeño bombardeo de nuevas palabras reservadas de C++, pero no te asustes, no es tan complicado como parece.  La primera palabra que aparece es lógicamente 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>];
  • 50. Curso de C++  La lista de clases base se usa para derivar clases, de momento no le prestes demasiada atención, ya que por ahora sólo 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 hacíamos 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 capítulo veremos el modo de inicializar las variables de un objeto.
  • 51. Curso de C++  Las funciones pueden ser simplemente declaraciones de prototipos, que se deben definir aparte de la clase o también 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:
  • 52. 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> };
  • 53. Curso de C++ Acceso privado, private:  Los miembros privados de una clase sólo 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 público, public:  Cualquier miembro público de una clase es accesible desde cualquier parte donde sea accesible el propio objeto. Aquí va un Ejemplo:
  • 54. 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 ningún valor y no pueden ser heredados. Además deben ser públicos, no tendría ningún 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:
  • 55. 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 símbolo ~ delante, no retornan ningún valor y no pueden ser heredados.  Cuando se define un destructor para una clase, éste es llamado automáticamente cuando se abandona el ámbito en el que fue definido.
  • 56. Curso de C++  Esto es así salvo cuando el objeto fue creado dinámicamente 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 razón de que no admite argumentos. Aquí va un Ejemplo:
  • 57. Curso de C++ Constructores con Parámetros  A menudo, cuando se crea un objeto, es necesario o deseable inicializar varios elementos de datos con valores específicos. El concepto de inicialización de objetos se amplia para permitir la inicialización de objetos específicos utilizando valores definidos por el programador. Aquí va un Ejemplo:
  • 58. Curso de C++ Funciones inline  C++ permite sustituir, en tiempo de compilación, la llamada a una función por el código correspondiente en el punto en que se realiza la llamada. De esta manera la ejecución es más rápida, pues no se pierde tiempo transfiriendo el control y realizando conversiones de parámetros. Como contrapartida, el programa resultante ocupa más memoria, pues es posible que el código de una misma función se introduzca muchas veces, con las repeticiones consiguientes. Las funciones inline resultan interesantes en el caso de funciones muy breves, que aparecen en pocas líneas de código pero que se ejecutan muchas veces (en un bucle for, por ejemplo).
  • 59. Curso de C++ Existen dos formas de definirlas:  Una primera forma de utilizar funciones inline es anteponer dicha palabra en la declaración de la función,  O tra forma de utilizar funciones inline sin necesidad de utilizar esta palabra es introducir el código de la función en la declaración (convirtiéndose de esta manera en definición), poniéndolo entre llaves { } a continuación de ésta. Aquí va un Ejemplo
  • 60. Curso de C++ Funciones friend  Una función que no es miembro de una clase y que puede acceder a la parte privada de una clase se le conoce como una función amiga(friend) de la clase.  El formato de la declaración de funciones friend es el siguiente:   class <nombre de la clase>{ public : friend <declaración de función> //Datos y funciones miembros }
  • 61. 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 creación 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
  • 62. Curso de C++ POLIMORFISMO  Otra de las características mas importantes de un lenguaje orientado a objetos es el polimorfismo, el cual permite el uso de un nombre para especificar un nombre de acción general. De esta manera se ejecuta una parte específica de la clase general dependiendo del tipo de dato con el que está tratando. En este capítulo se presentan las formas de hacer polimorfismo: Sobrecarga de Funciones y Sobrecarga de Operadores
  • 63. Curso de C++ Sobrecarga de funciones  Una de las maneras que tiene C++ de llegar al polimorfismo es a través de la sobrecarga de funciones . En C++, dos o más funciones pueden compartir un mismo nombre siempre y cuando difieran en la declaración de sus parámetros.  Las funciones que comparten el mismo nombre se dice que están sobrecargadas. Aquí va un Ejemplo:
  • 64. Curso de C++ Sobrecarga de operadores  Para sobrecargar un operador se debe definir la operación significa con relación a la clase a la que se aplica. Para hacer esto, hay que crear una función operador que defina su acción.  La forma general de declarar una sobrecarga de operadores es: tipo_devuelto nombre_clase :: operator # (lista de argumentos){ // operación que se va ha realizar } 
  • 65. Curso de C++  # - es el operador que se quiere sobrecargar. tipo es el tipo de valor devuelto por la operación 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 mayoría de operadores de C++ pueden ser sobrecargados como son: +,-, *, /, =, ==, !=, <<, >>, etc. Los únicos operadores que no pueden sobrecargarse son: . :: .* ?
  • 66. Curso de C++  Tampoco pueden sobrecargarse los operadores del preprocesador (El operador .* es muy especializado).  En una expresión a + b donde a y b son objetos, a es el causante de la llamada (pasa su valor a través de this), mientras que el valor de b es recibido a través del paso de parámetros.  En general, cuando se usa una función miembro no se necesitan parámetros al sobrecargar una operación monaria y solo se necesita un parámetro cuando se sobrecarga un operador binario. Aquí va un Ejemplo:
  • 67. Curso de C++ HERENCIA  Otra de las características de un leguaje de programación 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 calificación. En este capitulo se presentan herencia simple, tipos de herencia, herencia con constructores sin parámetros y constructores con parámetros, herencia múltiple
  • 68. 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 descripción general de Herencia seria:
  • 69. 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
  • 70. 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 público.  Cada una de éstas palabras, seguidas de ":", da comienzo a una sección, que terminará cuando se inicie la sección siguiente o cuando termine la declaración 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.
  • 71. Curso de C++ Tipos de Herencia (modos de acceso)  Es necesario porque C++ distingue dos tipos de herencia: pública y privada. "Por default", las clases se derivan unas de otras en forma privada. Consecuentemente, debemos decirle explícitamente al compilador que use herencia pública. 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.
  • 72. Curso de C++ Herencia con Constructores sin parámetros.  Es posible que una clase base y una clase derivada tengan cada una su función de construcción sin parámetros. 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 después que el destructor de la clase derivada. Aquí va un Ejemplo
  • 73. Curso de C++ Herencia con Constructores con parámetros.  Es posible que una clase base y una clase derivada tengan cada una su función de construcción con parámetros. 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 parámetros la clase derivada debe tener necesariamente un constructor con parámetros Aquí va un Ejemplo
  • 74. Curso de C++ Herencia Múltiple  Es posible que una clase herede atributos de dos o más 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
  • 75. Curso de C++ CLASES BASES VIRTUALES  Cuando dos o más objetos se derivan de una clase base común, se puede impedir que estén presentes múltiples 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
  • 76. Curso de C++ FUNCIONES VIRTUALES  Una función virtual es una función que se declara en la clase base como virtual y se redefine en una o más 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 ejecución a que función llamar en función del tipo de objeto apuntado.  Una función virtual se declara como virtual dentro de la clase base usando la palabra clave virtual. Sin embargo, cuando se redefine una función virtual en una clase derivada no se necesita repetir la palabra clave virtual (aunque no es un error hacerlo). Aquí va un Ejemplo
  • 77. Curso de C++H FUNCIONES VIRTUALES PURAS Y TIPOS A BSTRACTOS  Una función virtual pura es una función que se declara en una clase base y que no tiene definición relativa a la base, por lo que todos los tipos derivados se ven obligados a definir su propia versión de esa función.  Para declarar una función virtual pura se utiliza la forma general:
  • 78. Curso de C++H  virtual tipo nombre_funcion (lista parámetros) = 0;  Si una clase tiene por lo menos una función virtual pura entonces se dice que esa clase es abstracta. Las clases abstractas tienen una característica importante no puede haber objetos de esa clase, porque una o más de sus funciones carecen de definición.  Nota: Pero si es posible declarar punteros de una clase abstracta. Aquí va un Ejemplo
  • 79. Curso de C++H PLANTILLAS (TEMPLATE)  Las funciones genéricas 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 función, dejando al compilador que complete los detalles necesarios  El formato de una función template es el siguiente: template<class tipo> tipo_devuelto nombre_función(lista_de_parámetros){ //cuerpo de la función }
  • 80. Curso de C++H  donde tipo es un nombre de marcador para el tipo de dato que utilizara la función, el nombre puede ser utilizado dentro de la función no obstante se trate únicamente de un marcador que el compilador se encargará de reemplazar automáticamente por un tipo de dato real cuanto cree una versión específica de la función. Aquí va un Ejemplo
  • 81. Curso de C++H GESTIÓN 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 código, en busca de un posible error, y avisar a otros objetos de una condición anormal de ejecución durante un programa.  Mediante la gestión de excepciones se prescindirá de sentencias de control de errores del tipo:  if ( error == true ) return ERROR;
  • 82. 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 ejecución. Funcionamiento  Para que el sistema de gestión de excepciones funcione se ha de trabajar en dos partes de los programas:
  • 83. Curso de C++H  Definir qué partes de los programas crean una excepción y bajo qué condiciones. Para ello se utilizan las palabras reservadas throw y throws.  Comprobar en ciertas partes de los programas si una excepción 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 código que pueda provocar una excepción (por ejemplo, una lectura en un archivo), debe incluir este fragmento de código dentro de un bloque try:
  • 84. Curso de C++H try { // Código posiblemente problemático }    Pero lo importante es cómo controlar, qué hacer con la posible excepción que se cree. Para ello se utilizan las cláusulas catch, en las que se especifica que acción realizar: Aquí va un Ejemplo
  • 85. Curso de C++H try { // Código posiblemente problemático } catch( tipo_de_excepcion e) { // Código para solucionar la excepción e } catch( tipo_de_excepcion_mas_general e) { // Código para solucionar la excepción e } Aquí va un Ejemplo
  • 86. Curso de C++H  Ejemplo: Se observa que se pueden anidar sentencias catch, pero conviene hacerlo indicando en último lugar las excepciones más generales (es decir, que se encuentren más arriba en el árbol de herencia de excepciones), porque el intérprete C++ ejecutará aquel bloque de código catch cuyo parámetro sea del tipo de una excepción lanzada.  Si no se ha lanzado ninguna excepción el código continúa sin ejecutar ninguna sentencia catch.
  • 87. Curso de C++H  Si quisiéremos realizar una acción común para todas las opciones. Se insertan fragmentos de código que se ejecuten tras la gestión de las excepciones. Este código se ejecutará tanto si se ha tratado una excepción (catch) como si no. Este tipo de código 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
  • 88. Curso de C++H Lanzamiento de excepciones: throw - throws    Muchas veces el programador dentro de un determinado método deberá comprobar si alguna condición de excepción se cumple, y si es así lanzarla. Para ello se utilizan las palabras reservadas throw y throws.    Por una parte la excepción se lanza mediante la sentencia throw:   if ( condicion_de_excepcion == true ) throw new miExcepcion();
  • 89. 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 deberán ser instanciadas antes de ser lanzadas.    Aquellos métodos que pueden lanzar excepciones deben usar esas excepciones en su declaración. Para ello se utiliza la sentencia throws:   Aquí va un Ejemplo
  • 90. Curso de C++H tipo_devuelto miMetodoLanzador() throws miExcep1, miExcep2 { // Código capaz de lanzar excepciones miExcep1 y miExcep2 }    Se puede observar que cuando se pueden lanzar en el método más de una excepción se deben indicar en su declaración separadas por comas.