Ejercicios C++
Enviado por cesarcharaco • 12 de Noviembre de 2012 • 2.039 Palabras (9 Páginas) • 469 Visitas
En esta sección no se pretende dar una teoría completa de P.O.O. tan sólo se presentarán los conceptos necesarios para una correcta programación en C++ Builder.
La P.O.O. es un paradigma de programación que se fundamenta en los conceptos de objeto y clase. En primer lugar, definamos que entendemos por objeto y clase:
Objeto: Una entidad autónoma con una funcionalidad concreta y bien definida.
Clase:
Especificación de las características de un conjunto de objetos.
Un objeto es una instancia de una clase.
Los conceptos presentados en esta sección se ilustrarán usando un ejemplo que se irá completando poco a poco a medida que se introduzcan nuevos conceptos. Es más, este mismo ejemplo se emplea en las secciones dedicadas al tratamiento de excepciones y a la programación con hebras. Así, preparemos el camino creando un proyecto:
• Crear un proyecto (File | New | Application)
• Cambiar el nombre del formulario (Name=PpalFrm). Colocar un PaintBox de la página de componentes System que se llame PaintBox, con Align=alTop. Dejar espacio por debajo del PaintBox para colocar un botón.
• Colocar un bevel de ancho 4 y alinearlo en lo alto (Align=alTop). La idea es que delimite la parte inferior del PaintBox.
• Colocar un botón bit que permita terminar la ejecución del programa. El botón estará centrado horizontalmente en la parte inferior del formulario.
• Guardar el código del formulario como Ppal.cpp y el proyecto como Ejemplo.bpr.
• Crear una unidad (File | New | Unit). Guardarla con el nombre ObjGraf.cpp
Cuando se crea una unidad de esta manera se crean, en realidad, dos ficheros, uno con extensión .cpp y otro con extensión .h. Así, disponemos de dos ficheros: ObjGraf.h, que contendrá las declaraciones de las clases con las que vamos a trabajar, y ObjGraf.cpp, que contendrá la definición (implementación de los métodos) de éstas.
En ObjGraf.h:
//--------------------------------------------------
#ifndef ObjGrafH
#define ObjGrafH
// Definición de la clase TObjGraf
class TObjGraf {};
#endif
//--------------------------------------------------
Nótese que el nombre de la clase va precedido por una T, y, aunque no es obligatorio, si es muy recomendable ya que es una convención de C++ Builder que casi todos los nombres de clases vayan precedidos por T.
Muy Importante: Con el ejemplo anterior sólo conseguimos definir la clase, pero no se crea ningún objeto.
5.1. El Paradigma de la POO en C++
Existen cuatro principios básicos que cualquier sistema orientado a objetos debe incorporar, que se esquematizan en la figura 5.1.
Figura 5.1. Pilares de la POO.
5.2. Creación y Destrucción de Objetos
Ya se ha dicho que una clase es únicamente una especificación. Para poder utilizar la funcionalidad contenida en la misma, se debeninstanciar las clases.
1. Creación por Declaración.
Un objeto se puede instanciar de una forma simple, declarando una variable del tipo de la clase.
En Ppal.h:
#include "ObjGraf.h"
En Ppal.cpp:
Pulsando dos veces en OnCreate de la pestaña Events del editor de objetos de PpalFrm:
//--------------------------------------------------
void __fastcall TPpalFrm::FormCreate(TObject *Sender)
{
TObjGraf ObjGraf1();
TObjGraf ObjGraf2;
}
//--------------------------------------------------
Aunque esta forma es posible, y bastante utilizada en la programación de C++ clásica, en C++ Builder se utiliza en muy contadas ocasiones. Esto es así por dos razones, fundamentalmente:
1. La duración de los objetos suele ir más allá de una simple función o bloque. Debido al enfoque de la programación dirigida por eventos, suele ser habitual que un objeto se cree en un gestor de eventos y se destruya en otro.
2. No se puede usar esta modalidad de creación con la VCL.
Por lo tanto, nosotros no la utilizaremos.
2. Creación Dinámica
Es la forma habitual de crear objetos en C++ Builder, y se realiza mediante el operador new .
Cuando usamos new para instanciar un objeto, se usa una variable que referencie o apunte al nuevo objeto creado (de otra manera éste quedaría totalmente inaccesible). En definitiva, se requiere la declaración previa de un puntero a objetos del tipo del que se va a crear.
En Ppal.cpp:
TObjGraf * ObjGraf; // Variable Global.
// ObjGraf es un puntero a objetos de tipo TObjGraf
//--------------------------------------------------
void __fastcall TPpalFrm::FormCreate(TObject *Sender)
{
ObjGraf = new TObjGraf;
}
//--------------------------------------------------
La forma de establecer el estado inicial o destruir las componentes de un objeto se estudiarán en el apartado dedicado aConstructores y Destructores (sección 5.4).
¡Cuidado! Cuando se utiliza esta forma de instanciación de clases es responsabilidad únicamente del programador la correcta destrucción de los mismos.
3. Destrucción de objetos
Cuando un objeto deja de ser útil hay que eliminarlo. De esta manera la aplicación recupera los recursos (memoria) que ese objeto había acaparado cuando se creó.
La destrucción de objetos creados en tiempo de ejecución con new se realiza mediante el operador delete.
En Ppal.cpp:
Pulsando dos veces en OnDestroy de la pestaña Events del editor de objetos de PpalFrm:
//--------------------------------------------------
void __fastcall TPpalFrm::FormDestroy(TObject *Sender)
{
delete ObjGraf;
}
//--------------------------------------------------
5.3. Encapsulamiento
En la programación clásica (lenguaje C, p.e.) existen datos y procedimientos que actúan sobre esos datos. No hay una relación aparente entre datos y procedimientos (funciones) y esta relación se establece de manera más o menos pecisa de acuerdo a la profesionalidad del programador.
En un objeto podemos distinguir dos aspectos bien diferenciados:
• Estado -----------> Propiedades
• Comportamiento ---> Métodos
En P.O.O. los datos y los procedimientos que los gestionan están relacionados explícitamente y se "encapsulan" en un objeto. La especificación de las propiedades de un objeto y los métodos de acceso se realiza en la declaración de
...