Clases


PRIMERA CLASE
Manual Tutorial

CLASE 1

TEORIA DE OBJETOS
  1. ¿ Que es la Programación Orientada a Objetos ?
La POO es una nueva filosofía de programación que se basa en la utilización de objetos. El objetivo de la POO no es sino la meta de cualquier modelo de programación estructurada convencional: "imponer" una serie de normas de desarrollo que aseguren y faciliten la mantenibilidad y reusabilidad del código.
Los mecanismos básicos de la POO son: objetos, mensajes, métodos y clases.
  • Objetos. Un objeto es una entidad que tiene unos atributos particulares (datos) y unas formas de operar sobre ellos (los métodos o funciones miembro). Es decir, un objeto incluye, por una parte una serie de operaciones que definen su comportamiento, y una serie de variables manipuladas por esas funciones que definen su estado. Por ejemplo, una ventana Windows contendrá operaciones como "maximizar" y variables como "ancho" y "alto" de la ventana.
  • Mensajes. En C++, un mensaje se corresponde con el nombre de uno de los métodos de un objeto. Cuando se pasa un mensaje a un objeto, este responde ejecutando el código de la función asociada.
  • Método. Un método (función miembro) se implementa dentro de un objeto y determina como tiene que actuar el objeto cuando se produce el mensaje asociado. En C++ un método se corresponde con la definición de la función miembro del objeto. La estructura más interna de un objeto está oculta, de tal manera que la única conexión con el exterior son los mensajes
  • Clases. Una clase es la definición de un tipo de objetos. De esta manera, una clase "Empleado" representaría todos los empleados de una empresa, mientras que un objeto de esa clase (también denominado instancia) representaría a uno de esos empleados en particular.
Las principales características de la POO son: abstracción, encapsulamiento, herencia y polimorfismo:
  • Abstracción. Es el mecanismo de diseño en la POO. Nos permite extraer de un conjunto de entidades datos y comportamientos comunes para almacenarlos en clases.
  • Encapsulamiento. Mediante esta técnica conseguiremos que cada clase sea una caja negra, de tal manera que los objetos de esa clase se puedan manipular como unidades básicas. Los detalles de la implementación se encuentran dentro de la clase, mientras que desde el exterior, un objeto será simplemente una entidad que responde a una serie de mensajes públicos (también denominados interfaz de la clase).
  • Herencia. Es el mecanismo que nos permite crear clases derivadas (especialización) a partir de clases bases (generalización). Es decir, podríamos tener la clase "Empleado" (clase base) y la clase "Vendedor" derivando de la anterior. Una librería de clases (como la MFC) no es más que un conjunto de definiciones de clases interconectadas por múltiples relaciones de herencia.
  • Polimorfismo. Esta característica nos permite disponer de múltiples implementaciones de un mismo método de clase, dependiendo de la clase en la que se realice. Es decir, podemos acceder a una variedad de métodos distintos (con el mismo nombre) mediante el mismo mecanismo de acceso. En C++ el polimorfismo se consigue mediante la definición de clases derivadas, funciones virtuales y el uso de punteros a objetos.
 Otros dos conceptos muy importantes en la POO son relativos a la creación y destrucción de objetos. En lenguajes estructurados convencionales, cuando se define una variable se le reserva espacio en memoria y, si no se inicializa expresamente, se hace por defecto (por ejemplo, en C una variable global siempre se inicializa a 0, pero una automática no, por lo que si no se inicializa expresamente su contenido inicial será basura); por otra parte, cuando se destruye una variable (por que se abandona el ámbito de su definición - scope -) se libera la memoria que estaba ocupando. Si ahora hacemos el paralelismo obligado entre variables y objetos para los lenguajes POO nos daremos cuenta de que deben existir procedimientos especiales de construcción y destrucción de objetos. En concreto, cada clase tiene dos funciones miembro especiales denominadas constructor y destructor. 
  • Constructor -> Función miembro que es automáticamente invocada cada vez que se define un objeto, su objetivo es la inicialización del mismo. Toma el mismo nombre que la clase, puede recibir parámetros y podemos tener varios constructores definidos.
  • Destructor -> Función miembro invocada automáticamente cada vez que se destruye un objeto. Su objetivo es realizar operaciones como liberación de memoria, cerrar ficheros abiertos, etc. Toma el mismo nombre de la clase comenzado primero por el carácter "~", no toma parámetros y no admite la sobrecarga (sólo puede existir uno en cada clase).

En muchos casos, para las clases más sencillas, podemos encontrar clases que no tienen constructor o destructor, ó ninguno de los dos. En C++, siempre existen constructores y destructores por defecto que realizan una inicialización/liberación estándar.

2.     El modelo de programación Windows

 El modelo de programación propuesto por Windows es totalmente diferente al modelo de ejecución secuencial de DOS. Al ser Windows un entorno multitarea los programas tienen que estar preparados para compartir los recursos de la computadora (procesador, memoria, teclado, ratón …). Esto supone que Windows ha de disponer de métodos que permitan suspender tareas para activar otras en función de las circunstancias del momento (por ejemplo, por acción del usuario).
Pero por parte de las aplicaciones, este hecho supone que han de cooperar en la compartición de esos recursos. Las aplicaciones Windows se limitan a "esperar" mensajes procedentes del sistema, procesarlos y volver al estado de espera. Este modelo de programación se conoce como "orientado al evento".
  • Mensaje. Es una notificación a la aplicación de que ha ocurrido algo de interés y que por lo tanto debe de realizarse alguna acción específica. El origen del mensaje puede ser el usuario (haciendo click con el ratón dentro e una ventana), la propia aplicación (mandándose un mensaje a si misma) o Windows (pidiendo, por ejemplo, que se repinte la ventana tras ocultarse otra que tuviese delante). Dado que la unidad mínima de ejecución en Windows es una ventana, los mensajes van realmente dirigidos a ellas.
  • Ventana y procedimiento de ventana. En Windows, una aplicación se representa físicamente por su ventana principal (aunque después pueda desplegar diversas ventanas hijas). Cada una de esas ventanas dispone de una serie de propiedades y un código asociado (lo que concuerda con el principio de la POO, en el concepto de objeto). Al código asociado a cada ventana se le denomina procedimiento de ventana. Es una función que recibe los mensajes, los procesa y devuelve el control a Windows para quedar en espera.
 Otra de las características específicas de Windows frente a DOS es el uso de recursos por parte de las aplicaciones, como son iconos, menús, mapas de bits, cursores, plantillas de diálogos, etc. Las aplicaciones Windows disponen por tanto de recursos (gráficos generalmente) propios almacenados en lo que se llama el fichero de recursos). El proceso de construcción de programas en Windows incorpora una fase adicional al compilado y enlazado de los módulos objeto y las librerías. Hay un proceso final de compilación y de enlazado (bind) del fichero de recursos.

3.     Posibilidades de programación

Cuando se crea un nuevo proyecto (desde la opción “Nuevo” del menú “Fichero” aparece un diálogo que nos permite especificar que se cree un nuevo workspace), lo primero que solicita el sistema es determinar el tipo de objetivo que se persigue con este proyecto. Destacar las siguientes posibilidades:
·       Aplicación (.EXE) basada en la MFC (MFC AppWizard)
·       Librería de enlace dinámico (.DLL) basada en la MFC. (MFC AppWizard)
·       Aplicación (.EXE) estándar para Windows (basada en el SDK)
·       Librería de enlace dinámico (.DLL) (basada en el SDK)
·       Aplicación (.EXE) modelo DOS (Console application)
·       Librería estática (.LIB)
Como ya hemos destacado anteriormente, el objetivo del presente curso es el manejo de la librería MFC, por lo que nos centraremos básicamente en el primer punto (la construcción de una DLL con MFC es totalmente similar).

EL GENERADOR DE APLICACIONES.

Ya sabemos que Visual C++, apoyado en la potencia de la MFC, es capaz de convertirse en un generador de aplicaciones. Para ello dispone de dos herramientas integradas complementarias:
·       AppWizard, que es el generador de aplicaciones propiamente dicho. Con él podremos generar esqueletos de programas para Windows basados en la MFC.
·       ClassWizard, herramienta de mantenimiento de los programas generados con la anterior. Permite añadir o eliminar clases, modificar los comportamientos de las mismas, etc.
Pero el código generado mediante este método presenta una complejidad añadida a la natural de cualquier programa; junto con el código C/C++ y el de la MFC aparecen líneas (generalmente entre comentarios) que son totalmente necesarias para el funcionamiento de las dos herramientas anteriores, modificar cualquiera de esas líneas de código dará muchos problemas a la hora de utilizar ClassWizard para modificarlo. De todas maneras, este “defecto” es bastante popular entre los usuarios de cualquier generador de código, para cualquier lenguaje.
El formato general de los proyectos generados con estas herramientas suele tener las siguientes características:
·       Cada clase de nuestro programa dispondrá de dos ficheros: Un fichero de cabecera (extensiones .h o .hpp) y un fichero de implementación (.cpp). El fichero de cabecera contiene la definición de la clase (definiciones de sus miembros datos y funciones - los mensajes -), mientras que el fichero fuente contiene la implementación de esas funciones miembro (los métodos de la clase).
·       Un fichero de recursos (extensión .rc), aunque éste es opcional.
Módulos objetos (.obj) y librerías estáticas (.lib) necesarias para crear nuestro programa.
Referencia de la Web Site
http://jungla.dit.upm.es/~jsr/oop/c++/



                                 
Universidad Nacional “San Luis Gonzaga” de Ica
Facultad de Ingeniería Mecánica y Eléctrica
Escuela de Ingeniería Electrónica
IIIME-2, IIIME-3
CLASE 2

VENTANA DE DIALOGO QUE INGRESA NOMBRE DEL USUARIO Y CLAVE

Desarrollar una aplicación que permita crear una ventana basada en diálogo, donde se tenga que ingresar un nombre de usuario y su clave.  El siguiente ejercicio tendrá el nombre App05.
<<File/New/MFC AppWizard(exe)/Proyect Name=App05/
Location = D:\IIIME\App05/Ok>>

<<Step1=Dialog Based/Next>>
<<Step2=3D controls/ActiveX controls/Next>>
<<Step3=MFC Standard/Yes Pleace/As a shared DLL/Next>>
<<Step4=Finish/Ok>>

Seleccione los controles creados por el asistente y eliminelos.
Ubique los controles indicados:
·          2 etiquetas.
·          2 cajas de texto.
·          1 Control picture.


Modifique la posición de los controles hasta que su aplicación tenga la apariencia que se muestra en la ventana siguiente:

         

Control
Propiedades
Valor
IDD_APP05_DIALOG
IDC_STATIC
IDC_BUTTON1
IDC_EDIT1
ID
ID
ID
ID
Seguridad del sistema
Static
Button1
Edit

Como Importar una Imagen
Para poder insertar el icono llamado “SECUR08.ico”, se procederá de la siguiente manera:
·          Hacer clik derecho sobre la carpeta Icon.
·          Clic en Import

           

Ubicar la carpeta BMP en la siguiente ruta C:\VC60, seleccionar el icono indicado y dar clic en Import.
El paso siguiente cosiste en cambiar las propiedades de los controles indicados para esto seleccione el control Clic derecho sobre el menú contextual, elija la opción Properties tal como se muestra a continuación

                  


Control
Propiedades
Valor
IDD_APP05_DIALOG
IDC_STATIC
IDC_STATIC(1)
IDC_EDIT1
IDC_EDIT2

IDC_BUTTON1

IDC_BUTTON2

IDC_STATIC (picture)
Caption
Caption
Caption
ID
ID
Password
ID
Caption
ID
Caption
ID
Type
Image
Seguridad del sistema
Usuario
Clave
IDC_USUARIO
IDC_CLAVE
true
IDC_ACEPTAR
&Aceptar
IDC_CANCELAR
&Cancelar
IDC_STATIC
Icon
IDI_ICON1

Una vez terminada la fase de diseño, ejecute la aplicación, obtendrá la siguiente ventana.

              

Como agregar código a la aplicación:

Hacer clic derecho sobre el botón Aceptar y del menú contextual seleccione ClassWizard.

            

De la ventana MFC ClassWizard Seleccione la pestaña Member Variable, seleccione el objeto IDC_USUARIO, seguidamente haga clic en el botón Add variable, realizar los cambios observados en la siguiente ventana.

             

De la ventana MFC ClassWizard seleccione la prestaña Message Maps, asegúrese que esté seleccionado el Object IDC_ACEPTAR, a continuación seleccione del cuadro de lista Messages, el mensaje denominado BN_CLICKED luego dé un clic en el botón Add Function….


Se presenta la siguiente ventana

                

Dar un clic en el botón Ok, a continuación hacer clic en el botón Edit Clde.  Luego escriba la siguiente codificación:

Void CApp05Dlg::Inaceptar()
 {
   UpdateData(TRUE) ;
   SetWindowText(”Usuario: ” + m_Usuario);)
 }

Finalmente ejecute la aplicación, al escribir en la caja de texto de usuario y dar clic en Aceptar observará que la barra de título cambia y ahora muestra un mensaje que indique el Usuario y el nombre ingresado.

     




Manual de Clases

No hay comentarios:

Publicar un comentario