Colaboraciones en el Guille

Creando una pequeña aplicación con ShapDevelop

[SharpDevelop2 2.0.0.1291 Beta 3, 4/12/2006]

 

Fecha: 21/Abr/2006 (16/04/2006)
Autor: Gonzalo Pérez Correa- gonzalo@corobori.com

 


(Descarga este excelente IDE de http://www.sharpdevelop.net/OpenSource/SD/)
Si quedan algunos que todavía piensan que desarrollar un sistema en .NET es muy costoso en términos monetarios, esto les puede cambiar su manera de pensar.

Ya se ha habla en otros artículos sobre lo gratuito del Frameworks (ya sabes, seguramente esta instalado en tu PC). Mira este artículo del Guille:
http://www.elguille.info/lonuevo/lo_nuevo0201.htm#Ene12

Si bien existen las Versiones Express de VS 2005, que son muy completas y nos sirven para el aprendizaje de las herramientas, puede quieras vender tus aplicaciones sin tener que registrar nada. Y es aquí en donde entra SharpDevelop .

¿Que es SharpDevelop?

Es un IDE libre para C# y VB.NET sobre la plataforma .NET de Microsoft, además es Open-Source, con lo cual puedes descargar el código fuente y modificarlo a tu gusto.

Tenemos que decir que el team de desarrollo ha hecho grandes esfuerzos para entregar un producto maduro, y estos esfuerzos no fueron en vano. La versión que analizaremos es la 2.0, que es compatible con el Frameworks 2.0 (así de actual!)

Estas son las características principales de SharpDevelop, las cuales las extraje de la pagina web (las dejé en ingles para que nos acostumbremos a los términos)

  • Forms designer for C# and VB.NET
  • Code completion for C# and VB.NET (including Ctrl+Space support)
  • XML Editing
  • Folding
  • Code AutoInsert (Alt+Ins)
  • C# to VB.NET converter, as well as VB.NET to C# converter
  • Completely written in C#
  • Compile C# and VB.NET in the IDE out-of-the-box
  • Open source, GPL licensed
  • ILAsm and C++ backends
  • Integrated NUnit support
  • Assembly Analyzer ("FxCop on steroids")
  • Xml documentation preview
  • User interface translated to many languages
  • Everything templated: add new project or file types, or even compilers to SharpDevelop

Como ven, son varias las características, que a mi parecer, lo hacen el ide gratuito más completo hasta el momento.
Vamos a crear una pequeña aplicación, utilizando SD, para mostrar lo potente de este producto. El diagrama de Clases es el siguiente, nuestra aplicación consistirá en un formulario en donde podremos crear los objetos Gerente e ir almacenándolos en un ArrayList, luego este lo cargaremos un un ListBox.

Diagrama de Clases.

Diagrama de Clases

A continuación sigue código en Visual Basic (o C# o C++.NET):

El Inicio

Después de haber instalado SD 2.0, nos encontraremos con una ventana algo familiar:

Pantalla de Inicio de SharpDevelop

En donde tenemos una lista de los proyectos que hemos estado realizando y además nos permite crear una nueva Solución.

Creando una nueva Solución

Vamos a crear una aplicación para Windows en VBNET, por lo tanto veremos estas opciones. Además nos permite seleccionar si queremos que nos cree un directorio para las fuentes del proyecto (los .vb) y también si es que nos cree automáticamente el subdirectorio para el proyecto. En mi caso, el una inspiración máxima, le puse por nombre al proyecto MiDemoApp.

Manos a la Obra.

¿Que te parece la interfaz?, es bastante similar al VS 2005, y bien, tenemos nuestro proyecto en blanco, al lado izquierdo tenemos algo muy similar a nuestro querido Solutions Explorer. Solo nos queda agregar nuestra pequeña clase persona, sus atributos y métodos. Cabe destacar que SD utiliza clases parciales para dar mayor orden al código generado.

Interfaz de SD

Agregaremos una nueva clase, para eso punchamos con el botón derecho sobre el proyecto en el panel de proyectos y seleccionaremos “Agregar -> Nuevo Elemento - > Clase” (Para NET).

Mis clases se llamarán Empleado y Gerente, la cual extiende de Empleado.

Creación de la Clase Empleado

Vamos a implementar las clases en archivos separados, para mantener un orden (aunque nuestro proyecto es bastante pequeño).
Para crear las propiedades, SD nos provee una interesante función de Refactoring.

Crear una propiedad a partir de un atributo

La clase empleado no la utilizaremos directamente en esta entrega, es decir, solo utilizaremos la clase Gerente. Luego nuestras clases deberían parecerse a lo siguiente.

Código en Visual Basic.NET de la Clase Empleado:

Public Class Empleado
   Public nombre As String
   Public apellido As String
   Private _edad As Integer
   ' Propiedad edad

   Public property Edad As Integer
     Get
       return  me._edad
     End Get
     Set (Valor as Integer)
       'Validamos un poco, si la edad es menor que 0 o mayor
       ' que 110 no asignamos el nuevo valor.
       If Valor >0 or  Valor <110 Then
         me._edad =Valor
       End If
     End Set
   End Property
   'Pequeño metodo obtDetalle que devuelve los datos del objeto
   Public Overridable  Function obtDetalle() as String
     Return "Nombre: "& me.nombre & " Apellido:" & me.apellido & " Edad: "& me.edad
   End Function
End Class


Para la clase gerente no crearemos propiedades, aunque siempre es conveniente encapsular, ya que para el ejemplo, no necesitaremos validar la integridad del dato Departamento.

Código en Visual Basic.NET de la Clase Gerente:

'Clase Gerente que Hereda de Empleado,agrega un atributo y sobreescribe obtDetalle
Public Class Gerente
   Inherits Empleado
   Public departamento As String
   'Constructor de la Clase
   Public Sub New(nombre as String,apellido as String,edad as Integer, depto as String  )
      Me.nombre   = nombre
      Me.apellido = apellido
      Me.Edad   =edad
      Me.departamento =depto
   End Sub

   Public Overrides Function obtDetalle() as String
    return Mybase.obtDetalle & " Departamento :" & me.Departamento
   end function
End Class
 Asumo que entiendes el código, si no es así, puedes ver algún artículo de POO, y entenderás sin problemas lo que escribí ( Te recomiendo los artículos de Percy Reyes). Luego lo que tenemos, dos clases, las cuales instanciaremos desde nuestro formulario, estas instancias las almacenaremos en un ArrayList.

Diseñando el Formulario.

El diseño del formulario es una tarea trivial y SD nos permite crear la interfaz del usuario con la misma facilidad que Visual Studio 2005. También tenemos las guías para alinear los controles dentro del formulario, excelente!.

El formulario que diseñe tiene los campos que se corresponden a los atributos de la clase, además un listbox que servirá para mostrar los datos de los objetos haciendo referencia al método obtDetalle. Además agregamos un control ErrorProvider para apoyar las validaciones dentro del formulario.

Diseñando el Formulario

Parece realmente que estuviésemos trabajando en VS 2005, eso si, a mi parecer, la asignatura pendiente de SD es el manejo de los eventos, ya que para eventos adicionales al por defecto, tendremos que crearlos nosotros mismos en la inicialización de los componentes de la clase form. Es decir, si quieres utilizar el evento Validating del Textbox Nombre, deberás agregar en el método InitializeComponent():

AddHandler Nombre.validating,Addressof Nombre_Validating

Con lo que le estas diciendo al compilador que el manejador del evento Validating del objeto Nombre (instancia de Textbox1) será el método Nombre_Validating, y luego agregar el evento:

Sub Nombre_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
...
End Sub
 

Declararemos en ArraList como variable de instancia del formulario, es decir, su ámbito será toda la clase (y si quieres modificarla desde otra clase, no tendrás restricciones)

Public Partial Class MainForm
Public Dim Lista As New ArrayList
Public Sub New() …

Pero para que no suframos tanto, vamos a dejar las validaciones en el evento Click del Botón Guardar
El Código en Visual Basic.NET sería el siguiente:

Sub Button1Click(sender As Object, e As System.EventArgs)
'Utilizaremos el ErrorProvider para Validar
   If String.IsNullOrEmpty(nombre.Text) Then
    ErrorProvider1.SetError(nombre,"Ingrese un Dato")
    nombre.Focus()
    Exit Sub
   Else
	ErrorProvider1.SetError(nombre,"")
   End If
	'Validamos que Apellido tenga un Valor
   If String.IsNullOrEmpty(apellido.Text) Then
		ErrorProvider1.SetError(apellido,"Ingrese un Dato")
		apellido.Focus()
		Exit Sub
	Else
		ErrorProvider1.SetError(apellido,"")
	End If

	'Validamos que edad sea numerico y no vacio
	If String.IsNullOrEmpty(edad.Text) orelse not Isnumeric(edad.Text) Then
		ErrorProvider1.SetError(edad,"Ingrese un Dato Válido")
		edad.Focus()
		Exit Sub
	Else
		ErrorProvider1.SetError(edad,"")
	End If

	If String.IsNullOrEmpty(depto.Text) Then
		ErrorProvider1.SetError(depto,"Ingrese un Dato")
 			depto.Focus()
		Exit Sub
	Else
		ErrorProvider1.SetError(apellido,"")
	End If
	'si llegamos hasta aca es por que esta todo bien.
	Dim nGerente As New Gerente (nombre.Text,Apellido.Text,edad.Text,depto.text)
	'Agregamos a nuestra lista de Objetos la nueva instancia de la Clase.
	Lista.Add(nGerente)
End Sub

SD nos da la facilidad de auto completar el código, por si nos olvidamos de cómo se llamaba el evento que necesitamos.

Autocompletación de Codigo

Por ultimo, necesitamos codificar el botón “Mostrar ArrayList”, su funcionamiento es bastante sencillo, es mostrar el Arraylist(Lista) que hemos creado en el ListBox( que se llama Listado), llamando al método obtDetalle.

Código en Visual Basic.NET

Sub Button3Click(sender As Object, e As System.EventArgs)
	'limpiamos el listbox
	Listado.Items.Clear
	'Mostramos los datos de la Lista
	Dim i as Integer
	For i=0 To Lista.Count -1
		listado.Items.Add(Lista.Item(i).obtDetalle)
	Next
End Sub

Ya tenemos nuestro mini proyecto funcionando!

Funciono! y todo con SD

Conclusión

Hemos creado una pequeña aplicación funcional, con una herramienta Open Source, si bien esta vez no hicimos un desarrollo con acceso a datos, SD lo permite con mucha facilidad. Dentro de las características más relevantes se encuentra un diseñador de Reportes, el Sharp Report, si quieres aprender a utilizarlo puedes ir a la página http://laputa.sharpdevelop.net/DemoReport.aspx y podrás ver un video de creación paso a paso de un reporte.

Nos vemos en el siguiente artículo.
Saludos,
Gonzalo Pérez C. (Concepción – Chile)
gonzalo@corobori.com
DCE2003 - 4 Estrellas
DCE2005 - 2 Estrellas

 


Fichero con el código de ejemplo: Gonzalo_SharpDevelopApp.zip - 7 KB

(MD5 checksum: 1dd1dab4cc000396d3cb2505c28b77cb)


ir al índice principal del Guille