BotonMenu
BotonIndice

Visita : conoce3000.com
Paypal : https://www.paypal.com/donate/?hosted_button_id=XY8TZ3MGN64GE

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.2. CREAR NUESTRA PROPIA EXCEPCIÓN.
12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.2. CREAR NUESTRA PROPIA EXCEPCIÓN.
12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.2. CREAR NUESTRA PROPIA EXCEPCIÓN.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Crear nuestra propia excepción.

En el capítulo 11.1, explique sobre el uso de excepciones, en este capítulo explicare como crear nuestra propia excepción.

Para crear nuestra propia excepción personalizada, es bastante sencillo sólo basta crear una clase que herede los atributos de la clase Exception. Como práctica habitual las clases que son Excepciones se escriben con la letra inicial E, el uso de la letra inicial E no forma parte de la sintaxis del compilador si no que es más bien una practica habitual entre los programadores.

El siguiente ejemplo es una modificación de la clase TNumeros que hemos visto en los capítulos anteriores, esta clase define una excepción EdatosInvalidos. Además para poder usar la excepción EDatosInvalidos, se debe crear un método PonCadE, primero en la clase TNumero como método abstracto y después en la clase TComplejo que sobreescribe al método abstracto. Con lo que tenemos la siguiente clase TNumero.


Descargar
{$codepage utf8}
{$mode objfpc}
Unit Numeros02;
Interface
Uses sysutils,math;
Type
  EDatosInvalidos = class(Exception)
  End;

  TClassNumero = class of TNumero;
  TNumero = class
    private
     ParteReal,ParteImag:double;
     Procedure PonComp(indice:integer;r:double);
     Function ObtComp(indice:integer):double;
    public
     decimales:integer;

     Constructor Crear(i:double);virtual;abstract;
     Constructor Crear(r,i:double;dec:integer=0);virtual;abstract;
     Function ObtCad(dec:integer=0):string;virtual;abstract;
     Function PonCad(n:string):integer;virtual;abstract;
     Procedure PonCadE(n:string);virtual;abstract;

     Procedure Adicion(n:TNumero);virtual;abstract;
     Procedure Sustracion(n:TNumero);virtual;abstract;
     Procedure Division(n:TNumero);virtual;abstract;
     Procedure Cuadrado(n:TNumero);virtual;abstract;
     Procedure Cuadrado;virtual;abstract;
     Function modulo:double;virtual;abstract;
     Function argumento:double;virtual;abstract;
     Procedure Potencia(n:integer);virtual;abstract;
     Procedure Multiplicacion(n:TNumero);virtual;abstract;


     Property Real:double index 1 read ObtComp write PonComp;
     Property Imag:double index 2 read ObtComp write PonComp;
  End;

Implementation
     Procedure TNumero.PonComp(indice:integer;r:double);
     Begin
       if indice=1 then ParteReal:=r;
       if indice=2 then ParteImag:=r
     End;

    Function TNumero.ObtComp(indice:integer):double;
     Begin
       if indice=1 then ObtComp:=ParteReal;
       if indice=2 then ObtComp:=ParteImag
     End;

End.
Código fuente 4: La Clase TNumero con la excepción EDatosInvalidos.
Descargar

El método PonCadE, que se debe implementar en la Clase TComplejo es el siguiente:


Descargar
Procedure TComplejo.PonCadE(n:string);
   Begin
     if PonCad(n)<>0 then raise EDatosInvalidos.Create('Error datos no validos ingresados')
   End;
Código fuente 5: Método PonCadE modificado de la clase TComplejo.
Descargar

PonCadE es un método que enmascara el método PonCad, y comprueba el valor devuelto por este y cuando es distinto de cero, nos dice que ha sucedido un error en la conversión, y lanza la excepción EDatosInvalidos, que se usará en el siguiente programa de ejemplo:


Descargar
{$codepage utf8}
{$mode objfpc}
Uses Numeros02,Complejos08,Reales05;
Var
   Ref:TClassNumero;
   cad:string;
   num1,num2:TNumero;
   rpt,continuar:char;
Begin
  continuar:='S';
  Repeat
   Writeln('Ingrese con que numeros quiere Multiplicar:');
   Writeln('[1] Complejos');
   Writeln('[2] Reales');
   Readln(rpt);
   Case rpt of
     '1': Ref:=TComplejo;
     '2': Ref:=TReal;
   End;

   try
    Write('Ingrese el primer numero ');readln(cad);
    num1:=Ref.create;
    num1.PonCadE(cad);

    Write('Ingrese el segundo numero ');readln(cad);
    num2:=Ref.create;
    num2.PonCadE(cad);

    num1.Multiplicacion(num2);
    Writeln(num1.ObtCad(3));
   except
     on E:EDatosInvalidos do Writeln(E.Message);
   end;
    Write('¿Desea continuar Multiplicando?:');
    Readln(continuar)
  Until continuar in ['N','n']
End.
Código fuente 6: Programa de ejemplo que usa la excepción EDatosInvalidos.
Descargar

En este ejemplo hemos creado una excepción bastante simple, pero podemos hacerlo un poco más complejo como el siguiente ejemplo:

EDatosInvalidos = class(Exception)
   Error:longint;
   Constructor Crear(cad:string;perror:longint);
End;

.
..
...

Constructor EDatosInvalidos.Crear(cad:string;perror:longint);
   Begin
      inherited create(cad);
      Error:=perror;
End;

en donde, como se puede observar se añadió el atributo Error y un constructor propio que permite manejar el error sucedido. Obviamente luego se debe cambiar el método PonCadE, para que procese el error, del siguiente modo:


Descargar
Procedure TComplejo.PonCadE(n:string);	  
   var error:longint; 
   Begin
     error:=PonCad(n);
     if error<>0 then raise EDatosInvalidos.Crear('Error datos no validos ingresados',error)
   End;
Código fuente 7: Uso de EDatosInvalidos con el constructor Crear.
Descargar

Con esto el programa ya podrá enviar el mensaje de error adecuado cuando suceda el error, al final el programa de ejemplo quedaría así:


Descargar
{$codepage utf8}
{$mode objfpc}
Uses Numeros02,Complejos08,Reales05;
Var
   Ref:TClassNumero;
   cad:string;
   num1,num2:TNumero;
   rpt,continuar:char;
Begin
  continuar:='S';
  Repeat
   Writeln('Ingrese con que numeros quiere Multiplicar:');
   Writeln('[1] Complejos');
   Writeln('[2] Reales');
   Readln(rpt);
   Case rpt of
     '1': Ref:=TComplejo;
     '2': Ref:=TReal;
   End;

   try
    Write('Ingrese el primer numero ');readln(cad);
    num1:=Ref.create;
    num1.PonCadE(cad);

    Write('Ingrese el segundo numero ');readln(cad);
    num2:=Ref.create;
    num2.PonCadE(cad);

    num1.Multiplicacion(num2);
    Writeln(num1.ObtCad(3));
   except
     on E:EDatosInvalidos do Begin
                               Writeln(E.Message);
                               Writeln('posición del error : ',E.error)
                             End
   end;
    Write('¿Desea continuar Multiplicando?:');
    Readln(continuar)
  Until continuar in ['N','n']
End.
Código fuente 8: Programa de ejemplo que usa la excepción EDatosInvalidos que tiene un cosntructor Crear.
Descargar

Los códigos completos de los ejemplos explicados en este capítulo lo pueden descargar desde aquí.


Última revisión: 14/04/2014.



SIGUIENTE
SIGUIENTE
SIGUIENTE


 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo a través de , que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado. Para clases particulares contactame por whatsapp al 📲 (+51) 999 264 073








PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.