29
Mejoras de C++ Builder. Las nuevas palabras reservadas que Builder le agrega a C++. Nueva area de visualización de las clases en C++ Builder. ¿Cómo crear propiedades en C++ Builder? La definición del modificador __fastcall. Como C++ Builder incluye recursos DFM en los proyectos. Nuevas clases creadas en C++ Builder para utilizar VCL. ¿Cómo usar arreglos abiertos en C++ Builder? ¿Cómo usar arreglos de constantes en C++ Builder? ¿Cómo manejar excepciones de VCL? ¿Cómo re-lanzar excepciones de VCL? ¿Cómo lanzar excepciones de VCL? ¿Cómo crear excepciones de VCL? ¿Cómo crear sus propias excepciones de VCL?

Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Embed Size (px)

Citation preview

Page 1: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Mejoras de C++ Builder.

– Las nuevas palabras reservadas que Builder le agrega a C++.

– Nueva area de visualización de las clases en C++ Builder.

– ¿Cómo crear propiedades en C++ Builder?– La definición del modificador __fastcall.– Como C++ Builder incluye recursos DFM en los

proyectos.– Nuevas clases creadas en C++ Builder para utilizar VCL.– ¿Cómo usar arreglos abiertos en C++ Builder?– ¿Cómo usar arreglos de constantes en C++ Builder?– ¿Cómo manejar excepciones de VCL?– ¿Cómo re-lanzar excepciones de VCL?– ¿Cómo lanzar excepciones de VCL?– ¿Cómo crear excepciones de VCL?– ¿Cómo crear sus propias excepciones de VCL?

Page 2: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Las nuevas palabras reservadas que Builder le agrega a C++.

Se han incorporado nuevas palabras reservadas para especificar nuevas áreas de visualización para las clases, con la finalidad de facilitar el desarrollo de aplicaciones.

Page 3: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Nueva area de visualización de las clases en C++ Builder.

– __published: es igual que public excepto que se utiliza para indicar que las propiedades son visibles en el object inspector a la hora de diseñar.

NOTA: si esta diseñando una forma no se recomienda que agregue elementos en la sección _published de ella, pues eso provocaría que los archivos DFM y .h quedaran desincronizados. Esta sección la maneja C++ Bulder.

– __automated: otorga los mismos derechos de acceso que public y published. Difiere en que se usa para especificar información OLE para la clase. Se usa cuando crea servidores de OLE.

Page 4: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo crear propiedades en C++ Builder?

Además de los miembros de la clase (datos y métodos), en C++ Builder las clases también pueden contener propiedades (son las que usted ve en el Object Inspector).

Page 5: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Agregando propiedades a una clase.

Una propiedad es esencialmente un nivel de indirección para poder accesar a los miembros de una clase, típicamente los privados.

Page 6: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Las rutinas Get/Set

Para cada miembro privado de la clase que se desee accesar, se puede escribir una rutina Get para leer su valor y una rutina Set para asignarle un valor. Esto provee un macanismo muy conveniente para ocultar información, pues no se está accesando directamente la parte privada. Además nos da la libertad de en un futuro poder cambiar la representación interna de dicha información. En el código se vería mas o menos así:

{ …private:

TColor FColor;public:

__property TColor Color ={read = FColor, write = FColor};

},

Page 7: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Las rutinas Get/Set

En el ejemplo anterior el acceso a FColor era casi directo pues lo que hacíamos en Color se replicaba en FColor. Sin embargo también se puede hacer algo más seguro:

{ … private:

TColor FColor;void __fastcall SetColor(TColor valor);TColor __fastcall GetColor(void);public:

__property TColor Color = {read=GetColor, write=SetColor};

…};

Page 8: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

La definición del modificador __fastcall.

Observará que en todos los métodos de la forma aparece. Es una directiva al compilador que indica que los parámetros se le pasarán al método por medio de registros y no en el stack.

Page 9: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo C++ Builder incluye recursos DFM en los proyectos?

Cuando diseñamos una forma C++ Builder crea un archivo de recursos llamado igual que la unidad, pero con extensión DFM.

La asociación entre la unidad y la forma está dada por una directiva llamada pragma:#include <vcl.h>#pragma hdrstop

#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}

Page 10: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Nuevas clases creadas en C++ Builder para utilizar VCL.

AnsiString fue diseñada por compatibilidad con Delphi. Tienen un contador de referencia, terminan en NULL y se inicializan a vacío si no se especifica un valor inicial en el constructor. Muchos componentes del VCL las usan.

Page 11: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Nuevas clases creadas en C++ Builder para utilizar VCL.

Variant: En si son variables sin tipo, que dinámicamente pueden tomar valores de cualquier tipo.

void __fastcall TForm1::Button1Click (TObject *Sender){ Variant x; x = 13; edtTest->Text= IntToStr(x +12); x= “Hola Mundo”; ShowMessage(x);}

Page 12: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Nuevas clases creadas en C++ Builder para utilizar VCL.

Currency: Implementa un tipo de dato de punto flotante diseñado específicamente para almacenar cantidades monetarias su rango es:

-922, 337,203,685,477.5808 a 922, 337,203,685,477.5807

Page 13: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Nuevas clases creadas en C++ Builder para utilizar VCL.

Set: Implementa una estructura de datos, que esencialmente es una lista no ordenada. Los conjuntos solo pueden contener tipos de datos ordinales (como caracteres, enteros y tipos enumerados). El valor mas pequeño debe ser mayor que cero y el más grande debe ser menor que 255.

Page 14: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Nuevas clases creadas en C++ Builder para utilizar VCL.

Para crear un objeto Set se necesitan 3 parámetros:– Tipo de los elementos– Valor mínimo– Valor máximoEjemplo:Typedef Set <char,’A’,’Z’> ConjuntoMayusculas;ConjuntoMayusculas MiConjunto;Se usan los operadores << para agregar; y el >>

para eliminar elementos.

Page 15: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Práctica 11. Prueba de conjuntos.

Cree una nueva aplicación: Nombre la Forma frmPruebaConjuntos, cambie

su Caption a Prueba Conjuntos y guarde la unidad de la forma como cPruebaConjuntos.

Guarde el proyecto como DemoConjuntos

Page 16: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Práctica 11. Prueba de conjuntos.

Deposite 4 CheckBox(Standard) y llámelos: chckbxNegritas, chckbxItalica, chckbxSubrayada y chckbxTachada.

Cambie supropiedad Caption a Negritas, Itálica, Subrayada y Tachada.

Deposite un Label, llámelo lblPrueba y de Caption asignele: ¿Cómo me veo?

Page 17: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

En el evento OnClick chckbxNegritas escriba if (chckbxNegritas->Checked) lblPrueba->Font->Style= lblPrueba->Font->Style << fsBold; else lblPrueba->Font->Style= lblPrueba->Font->Style >> fsBold;En el evento OnClick de chckbxItalica escriba:if (chckbxItalica->Checked) lblPrueba->Font->Style= lblPrueba->Font->Style << fsItalic; else lblPrueba->Font->Style= lblPrueba->Font->Style >> fsItalic;

Práctica 11. Prueba de conjuntos.

Page 18: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Práctica 11. Prueba de conjuntos.

En el evento OnClick de chckbxSubrayada escriba:if (chckbxSubrayada->Checked) lblPrueba->Font->Style= lblPrueba->Font->Style <<

fsUnderline; else lblPrueba->Font->Style= lblPrueba->Font->Style >>

fsUnderline;En el evento OnClick de chckbxTachada escriba:if (chckbxTachada->Checked) lblPrueba->Font->Style= lblPrueba->Font->Style <<

fsStrikeOut; else lblPrueba->Font->Style= lblPrueba->Font->Style >>

fsStrikeOut;

Page 19: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Presione F9 para ejecutar.

Page 20: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo usar arreglos abiertos en C++ Builder?

Es otro tipo requerido por compatibilidad con el VCL.

Un arreglo abierto es aquel que se construye como parámetro para una función, esto permite que las funciones reciban un número variable de argumentos. Este es el mismo mecanismo que se utiliza en Object Pascal para permitir que una función reciba un número variable de parámetros.

Page 21: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo usar arreglos de constantes en C++ Builder?

Existe un macro llamado OPENARRAY, el cual recibe el tipo y su lista de elementos entre paréntesis. Ejemplo:

OPENARRAY(int, (5,7,82,mivariable,96));

También es posible crear un arreglo de valores de diferente tipo:

OPENARRAY(TVarRec, (mistring,7, 82.9, mivariableVariant,96, “hola”));

Page 22: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo manejar excepciones de VCL?

C++ Builder permite manejar las excepciones tradicionales y las del VCL. Sin embargo dado que casi siempre se usa el VCL, se recomienda el modelo de excepciones del VCL.

Page 23: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

La Clase Exception

Todas las excepciones de VCL se derivan de esta clase.

Encapsula los métodos y propiedades necesarios para manejar excepciones a la hora de ejecución.

Es derivada directamente de TObject.Cuando se lanza una excepción, C++ Builder

automáticamente crea una instancia de la clase excepción.

C++ Builder siempre maneja la construcción y destrucción de los objetos de excepción.

Si se desea lanzar una excepción se usa throw, en lugar de llamar al constructor.

Page 24: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Manejando las excepciones de VCL

No difiere mucho de la sintaxis de C++, la diferencia es que se está buscando una clase de excepción de VCL.

try { edtTotal->Text = IntToStr( StrToInt(edtOp1->Text) / StrToInt(edtOp1-

>Text) );}catch ( EDivByZero& ){ ShowMessage(“No puede dividir entre 0”);}catch( EConvertError& ){ ShowMessage (“Error durante la conversión”);}NOTA: Si se genera otra excepción esta seguirá activa hasta que

llegue a un objeto que la detecte o bien la detecte el módulo principal de la aplicación.

Page 25: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Excepción principal de la aplicación

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0;}

Page 26: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo re-lanzar excepciones de VCL?

Hay situaciones donde uno desea manejar una excepción, efectuar una acción y luego relanzar la excepción.

try{ edtPromedio->Text = FloatToStr(sum/numElementos);}catch (EDivByZero&){ edtPromedio->Text = FloatToStr(0.0); throw;}

Page 27: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo lanzar excepciones de VCL?

También se puede lanzar una excepción. Ejemplo:

try { if (numElementos == 0) throw EDivByZero(“No puede dividir entre 0”); else edtPromedio->Text = FloatToStr( sum/ numElementos);}catch ( EDivByZero& ){ edtPromedio->Text = FloatToStr(0.0); throw;}

Page 28: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

¿Cómo crear sus propias excepciones de VCL?

La manera de hacerlo es heredando de la clase Exception, el único código que debe tener es el constructor por default. Ejemplo:

class EBalanceIncorrecto : public Exception{ public: virtual __fastcall EbalanceIncorrecto(String s): Exception(s) {};};

Page 29: Mejoras de C++ Builder. –Las nuevas palabras reservadas que Builder le agrega a C++. –Nueva area de visualización de las clases en C++ Builder. –¿Cómo

Cuestionario

¿Para qué sirve __published?¿Con qué palabra se especifican las

propiedades de una clase?¿Cuál es el principal uso de las rutinas

Get/Set?¿Para qué sirve __fastcall?¿Cuál es el uso de las excepciones?