lunes, 8 de junio de 2009

Practica Teorica Excepciones

1- Que son las excepciones y como se manejan

Es la indicación de un problema que ocurre durante la ejecución de un programa. El nombre excepción viene del hecho de que, aunque puede ocurrir un problema, este ocurre con poco frecuencia. Si la “regla”es que una instrucion generalmente se ejecuta en forma correcta, entonces la ocurrencia de un problema representa la “excepción a la regla”.

2- Cuando utilizar el manejo de excepciones

El manejo de excepciones permite a los programadores remover el código para manejo de errores de la “línea principal” de ejecución del programa, lo cual mejora su claridad y aumenta la capacidad de modificación del mismo.

3 y 4- Ejemplo de manejo de excepciones manejando varios catch

El siguiente ejemplo utiliza el manejo de excepciones para procesar cualquier excepción DivideByZeroexception y FormatException que pueda surgir.

1 // Fig. 12.2: DivideByZeroTest.cs

2 // Exception handlers for FormatException and DivideByZeroException.

3 using System;

4 using System.Windows.Forms;

5

6 namespace DivideByZeroTest

7 {

8 public partial class DivideByZeroTestForm : Form

9 {

10 public DivideByZeroTestForm()

11 {

12 InitializeComponent();

13 } // end constructor

14

15 // obtain 2 integers from the user

16 // and divide numerator by denominator

17 private void DivideButton_Click( object sender, EventArgs e )

18 {

19 OutputLabel.Text = ""; // clear Label OutputLabel

20

21 // retrieve user input and calculate quotient

22 try

23 {

24 // Convert.ToInt32 generates FormatException

25 // if argument is not an integer

26 int numerator = Convert.ToInt32( NumeratorTextBox.Text );

27 int denominator = Convert.ToInt32( DenominatorTextBox.Text );

28

29 // division generates DivideByZeroException

30 // if denominator is 0

31 int result = numerator / denominator;

32

33 // display result in OutputLabel

34 OutputLabel.Text = result.ToString();

35 } // end try

36 catch ( FormatException )

37 {

38 MessageBox.Show( "You must enter two integers.",

39 "Invalid Number Format", MessageBoxButtons.OK,

40 MessageBoxIcon.Error );

41 } // end catch

42 catch ( DivideByZeroException divideByZeroExceptionParameter )

43 {

44 MessageBox.Show( divideByZeroExceptionParameter.Message,

45 "Attempted to Divide by Zero", MessageBoxButtons.OK,

46 MessageBoxIcon.Error );

47 } // end catch

48 } // end method DivideButton_Click

49 } // end class DivideByZeroTestForm

50 } // end namespace DivideByZeroTest

5 y 7- Ejemplo de finally y trow

class UsoDeExcepciones

{

static void Main()

{

// Caso 1: No ocurren excepciones en el metodo que se llamó

Console.WriteLine("Llamando a NoLanzaExcepcion");

NoLanzaExcepcion();

// Caso 2: Ocurre una excepción y se atrapa en el metodo que se llamó

Console.WriteLine("Llamando a LanzaExcepcionConCatch");

LanzaExcepcionConCatch();

// Caso 3: Ocurre una excepcion, pero no se atrapa en el metodo que se llamo,

// ya que no hay bloque catch.

Console.WriteLine("Llamado a LanzaExcepcionSinCatch");

// llama a LanzaExcepcionSinCatch

try

{

LanzaExcepcionSinCatch();

} // fin de try

catch

{

Console.WriteLine("Atrapó la excepción de " + "LanzaExcepcionSinCatch en Main");

} // fin de catch

// Caso 4: Ocurre una excepción y se atrapa en el metodo que se llamo,

// despues se vuelve a lanzar al que hizo la llamada.

Console.WriteLine("Llamando a LanzaExcepcionCatchLanzaDeNuevo");

// llama a LanzaExcepcionCatchLanzaDeNuevo

try

{

LanzaExcepcionCatchLanzaDeNuevo();

}

catch

{

Console.WriteLine("atrapó la excepción de " + "LanzaExcepcionCatchLanzaDeNuevo en Main");

Console.ReadLine();

} // fin de catch

} // fin del metodo Main

// no se lanzan excepciones

static void NoLanzaExcepcion()

{

// el bloque try no lanza excepciones

try

{

Console.WriteLine("En NoLanzaExcepcion");

} // fin de try

catch

{

Console.WriteLine("Este bloque catch nunca se ejecuta");

} // fin de catch

finally

{

Console.WriteLine("se ejecutó finally en NolanzaExcepcion");

} // fin de finally

Console.WriteLine("Fin de NoLanzaExcepcion");

} // fin de metodo NoLanzaExcepcion

//lanza la excepción y la atrapa en forma local

static void LanzaExcepcionConCatch()

{

// el bloque try lanza la excepcion

try

{

Console.WriteLine("En LanzaExcepcionConCatch");

throw new Exception("excepción en LanzaExcepcionConCatch");

} // fin de try

catch (Exception parametroExcepcion)

{

Console.WriteLine("Mensaje: " + parametroExcepcion.Message);

} // fin de catch

finally

{

Console.WriteLine("se ejecutó finally en LanzaExcepcionConCatch");

} // fin de finally

Console.WriteLine("Fin de LanzaExcepcionConCatch");

} // fin del metodo LanzaExcepcionConCatch

// lanza la excepción y no la atrapa en forma local

static void LanzaExcepcionSinCatch()

{

// lanza la excepcion, pero no la atrapa

try

{

Console.WriteLine("En LanzaExcepcionSinCatch");

throw new Exception("Excepción en LanzaExepcionSinCatch");

} // fin de try

finally

{

Console.WriteLine("Se ejecutó finally en" + "LanzaExcepcionSinCatch");

} // fin de finally

// codigo inalcanzable; error logico

Console.WriteLine("Fin de LanzaExcepcionSinCatch");

} // fin del metodo LanzaExcepcionSinCatch

// lanza la excepcion, la atrapa y la vuelve a lanzar

static void LanzaExcepcionCatchLanzaDeNuevo()

{

// el bloque try lanza la excepcion

try

{

Console.WriteLine("En LanzaExcepcionCatchLanzaDeNuevo");

throw new Exception("Exepción en LanzaExcepcionCatchLanzaDeNuevo");

} // fin de try

catch (Exception parametroExcepcion)

{

Console.WriteLine("Mensaje: " + parametroExcepcion);

// vuelve a lanzar la exepcion para procesarla despues

throw;

// codigo inalcanzable; error logico

} // fin de catch

finally

{

Console.WriteLine("se ejecutó finally en " + "LanzaExcepcionCatchLanzaDeNuevo");

} // fin de finally

// cualquier codigo que se coloque aqui nunca se ejecutara

Console.WriteLine("Fin de LanzaExcepcionCatchLanzaDeNuevo");

} // fin del metodo LanzaExcepcionCatchLanzaDeNuevo

} // fin de la clase UsoDeExcepciones

} // fin del namespace finally

6- Describir las clases de excepciones y sus propiedades

La clase Exception del espaciado de nombres System es la clase base de la jerarquía de clases de excepciones del .Net framework. Dos de las clases mas importantes que se derivan de Exception son ApplicationException y SystemException. ApplicationException es una clase base que los programadores pueden extender para crear clases de excepciones especificas para sus aplicaciones.

El CLR genera excepciones SystemException, que pueden ocurrir en cualquier punto durante la ejecución de un programa. Podemos evitar muchas d estas excepciones si codificamos las aplicaciones en forma apropiada. Por ejemplo, si un programa trata de acceder a un subíndice de arreglo fuera de rango, el CLR lanza una excepción de tipo IndexOutOfRangeException (una clase derivada de SystemException).

Los tipos de excepcines se derivan de la clase Exception, la cual tiene varias propiedades. Estas se utilizan con frecuencia para formular mensajes de error que indican una excepción atrapada. De las propiedades mas importantes son Message y StackTrace. La propiedad Message almacena el mensaje de error asociado con un objeto Exception. Este mensaje puede ser un mensaje predeterminado asociado con el tipo de excepción, o puede ser un mensaje personalizado que se pasa al cnstructo de un objeto Exception cuando este se lanza. La propiedad StackTrace contiene un objeto string que representa la pila de llamadas a los métodos. La propiedad StackTrace representa la serie de metoos que no han terminado de procesarse al momento en que ocurre la excepción.

La clase Exception tiene otras propiedades, incluyendo HelpLink, Source y TargetSite. La propiedad HelpLink especifica la ubicación del archivo de ayuda que describe el problema que ocurrió. Esta propiedad es null si no existe dicho archivo. La propiedad Source especifica el nombre de la aplicación en la que ocurrió la excepción. La propiedad TargetSite especifica el método en donde se origino la excepción.


8- Crear excepciones definidas por el usuario

En algunos casos tal ves sea conveniente crear nuevas clases de excepciones que sean especificas para los problemas que ocurran en sus programas. Las clases de excepciones definidas por el usuario deben derivarse de manera directa o indirecta de la clase ApplicationException, del espaciado de nombres System.

jueves, 14 de mayo de 2009

Practica 14




_________________________________________________________


Class Punto


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Practica_14

{

class Punto

{

protected int x;

protected int y;

protected int z=0;

public Punto()

{

x = 0;

y = 0;

}

public Punto(int x1, int y1)

{

x = x1;

y = y1;

}

public virtual double Area()

{

return z;

}

public double distancia(Punto A, Punto B)

{

double x = Math.Pow((A.x - B.x), 2);

double y = Math.Pow((A.y - B.y), 2);

double d = Math.Sqrt(x + y);

return d;

}

}

}


___________________________________________________________

Class Circulo

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Practica_14

{

class Circulo:Punto

{

public double radio;

public Circulo(int x1, int y1,double rad):base (x1,y1)

{

radio = rad;

}

public Circulo()

{

x = 0;

y = 0;

radio = 0;

}

public override double Area()

{

return Math.PI*(radio*radio);

}

}

}


__________________________________________________________

Class Program

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Practica_14

{

class Program

{

static void Main(string[] args)

{

int x1, x2, y1, y2;

double rad1, rad2;

Circulo C1;

Circulo C2;

Console.Write("Ingresa la coordenada X del Punto 1: ");

x1 = int.Parse(Console.ReadLine());

Console.Write("Ingresa la coordenada Y del Punto 1: ");

y1 = int.Parse(Console.ReadLine());

Console.Write("\nIngresa la coordenada X del Punto 2: ");

x2 = int.Parse(Console.ReadLine());

Console.Write("Ingresa la coordenada Y del Punto 2: ");

y2 = int.Parse(Console.ReadLine());

Console.Write("\nIngresa el radio para el Circulo 1: ");

rad1=double.Parse(Console.ReadLine());

Console.Write("Ingresa el radio para el Circulo 2: ");

rad2=double.Parse(Console.ReadLine());

C1 = new Circulo(x1,y1,rad1);

C2 = new Circulo (x2,y2,rad2);

Console.WriteLine("El Area del circulo 1 es: {0}", C1.Area());

Console.WriteLine("El Area del circulo 2 es: {0}", C2.Area());

Console.WriteLine("\nLa distacia entre los 2 puntos es: {0}", C1.distancia(C1, C2));

Console.ReadKey();

}

}

}




miércoles, 13 de mayo de 2009

PracticaTeorica Clases Abstractas

1.- ¿Que es una clase abstracta?

Son clases de las que no es posible crear instancias; frecuentemente,
están implementadas sólo parcialmente o no están implementadas.

2.- Formato General de una clase abstracta

interface I
{
void M();
}
abstract class C: I
{
public abstract void M();
}

3.-Diferencia entre interface y clase abstracta.

Pareciera que son lo mismo, las clases abstractas no se implementa y las interfances tampoco. Pero las interfances son mas un conjunto de comportamientos definidos, que esperan ser implementados por el programador. Las clases abstractas, en primer lugar deben ser heredadas para ser implementadas en su totalidad o parcialmente, las clases abstractas se usan mas para una relacion de " es un ".

4.-Ejemplo de clase abstracta

using System;

namespace ClaseAbstracta {

//clase abstracta
abstract class Persona {

//atributo abstracto
protected string nombre;

public abstract string Nombre {
get;
set;
}

//metodo abstracto
public abstract string Info();
}

//clase Alumno
class Alumno: Persona {
private int grado;
private int nivel;

public override string Nombre {
get {
return nombre;
}
set {
nombre = value;
}
}

//otra propiedad
public int Grado {
get {
return grado;
}
set {
grado = value;
}
}

//otra propiedad
public int Nivel {
get {
return nivel;
}
set {
nivel = value;
}
}

//constructor
public Alumno (string nom, int niv, int grado){
this.nombre = nom;
this.nivel = niv;
this.grado = grado;
}

public override string Info() {
return "Nombre: " + this.nombre + " - Nivel: " +
this.nivel + " - Grado: " + this.grado;
}
}


5.- Ventajas de una clase abstracta y una interface.

Clase abstrácta
* Describen partes de objetos.
* Utilizadas en polimorfismo para definir operaciones comunes.
* Se pueden utilizar junto con la herencia.

Interfaz
* Una de las principales ventajas de utilizar interfaces es el polimorfismo ya que separamos la definicion de los metodos de su implementación.