PRIMERA CLASE
Manual Tutorial
CLASE 1
TEORIA DE OBJETOS
- ¿ 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++/
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