Fecha y hora actual: Jueves 17 Ene 2019 04:38
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Curso VB .NET - Tema 1.24 - Como programar una clase VB 2005

Responder al Tema

Índice del Foro > Visual Basic .NET > Curso VB .NET - Tema 1.24 - Como programar una clase VB 2005

Autor Mensaje
Tesis
Administrador


Registrado: 04 Mar 2007
Mensajes: 3200
Ubicación: Valencia - España

Mensaje Publicado: Miércoles 13 May 2009 20:45

Título del mensaje: Curso VB .NET - Tema 1.24 - Como programar una clase VB 2005

Responder citando

Curso de programación en .NET - Tema 1.24 - Como programar una clase, VB Studio 2005.


1. Como programar una clase, VB.

1.1 Objetivos del tema.

Vista la introducción a este tema, vamos a ver la parte propia de cada lenguaje.

1.2 Introducción.
Programar es un tema muy personal, de estilo, de gustos y más si hablamos de un elemento como una clase que luego se integra en un programa, donde los matices son muy importantes y cada cual los ve o aprecia de forma distinta.

No vamos a entrar en todas las posibilidades de las clases, sino se convertiría en un apartado muy extenso, y la pretensión es la de sentar un punto de partida, para que a partir de ahí se siga progresando.

Hay que tener presente que en todo desarrollo de código hay que tener siempre un tratamiento de errores, al cual aun no hemos llegado y que aquí no se contempla, pero de lo cual hay que dejar constancia.

1.3 Declarar un objeto de esa clase.
En este punto es cuando se instancia el objeto, y en el que se queda configurado con los valores por defecto que nosotros hayamos asignado a las variables internas, y a las propiedades.
Código:
Dim Objeto as New ClaseDefinidaExistente


Ahora hay que escribir la clase, y hay que escribirla en función de esos parámetros que hemos comentado que se han de dar en el inicio del objeto.

    Decidir que tipo de inicialización nos interesa.
    Estudiar cuantas posibilidades de inicio nos puede interesar para escribir las sobre
    cargas adecuadas.
    Recepción y control de los datos necesarios en la inicialización.
    Valores iniciales de variables y propiedades adecuados.

Código:
Public Class Ejemplo
  Dim Variable As String = "Variable inicializada"
  Dim Propiedad As String = "Propiedad inicializada"
  Private Sub New()
     ‘ esto impide la creación de un objeto .
  End Sub
  Public Sub New(ByVal Valor As String)
     Propiedad = Valor
  End Sub
End Class


Este ejemplo nos obliga a declarar el objeto con la siguiente sintaxis.
Código:
Dim Objeto As New Ejemplo("Inicialización")


Impide que se pueda utilizar
Código:
Dim Objeto As New Ejemplo


Por lo que si nosotros añadimos en el método New de la clase el siguiente código
Código:
Private Sub New()
End Sub

Public Sub New(ByVal Valor As String)
   If Valor <> "" Then Propiedad = Valor
End Sub


Si al inicializar la clase no se recibe un valor adecuado la clase quedaría inicializada con el valor por defecto de la propiedad, sin asumir el valor recibido.

Si la clase es heredada desde otra clase la condición se mantiene, vemos un ejemplo.
Código:
Public Class Heredera
  Inherits Ejemplo ‘ Heredar la clase del ejemplo anterior
  Public Sub New()
    ‘ El primer paso es llamar al New de la clase origen, y proporcionar
    ‘ un valor de inicialización.
    MyBase.New("Valor desde la clase heredera")
  End Sub
End Class


Todo lo anterior se puede probar desde el código siguiente.
Código:
Module Tema_24
  Sub Main()
    Dim Objeto As New Ejemplo("Valor de inicialización")
    Console.WriteLine(Objeto.Propiedad)
    Dim Otro As New Heredera
    Console.WriteLine(Otro.Propiedad)
    Console.Read()
  End Sub
End Module


Que produce el siguiente resultado


Como vemos en los ejemplos, la adecuada utilización del método New es importante.
Por lo tanto ya se ha cubierto una primera etapa que es la de controlar la creación de un objeto de nuestra clase de forma incontrolada.
El siguiente paso es la declaración de las variables.

1.4 Asignar valores a las variables de la clase.
En el momento de declarar las variables de la clase nos encontraremos con dos tipos de variables.
Aquellas que se refieren a datos de la clase, y a las que se refieren a las propiedades que se ven desde el exterior de la clase.

A las variables normales, les podemos dar el tratamiento que habitualmente le damos a las variables de cualquier programa, pero las que se emparejan con las propiedades lo lógico es inicializarlas al valor que nos interese, con el fin de que la clase a la hora de inicializarse no sea imprescindible asignar valor a las propiedades, si no que estas ya dispongan de un valor que pueda ser operativo, y solo sea necesario ajustar para personalizar el objeto.

En el ejemplo anterior podemos observar los dos tipos de variables.

1.5 Asignar valores a las propiedades de la clase.
Un objeto deriva de una clase, y ese objeto debe tener unas características, para que las tenga podemos:
    Asignar los valores de sus propiedades en el momento de inicializar el objeto.
    Asignar a posteriori vía métodos o propiedades.
    Inicializar todas las variables en el momento de su declaración.
    Utilizar las propiedades para asignar valores.


Asignar los valores de sus propiedades en el momento de inicializar el objeto equivale a recibir sus valores en el constructor.
Código:
Public Sub New(ByVal Valor As String)
   VariablePropiedad = Valor
End Sub



Asignar los valores en la declaración equivale a:
Código:
Dim VariablePropiedad As String = "Propiedad inicializada"


Asignar a posteriori implica recibir valores en la línea de argumentos de un método.
Código:
Public Sub Metodo(ByVal VariablePropiedad As String)
   VariablePropiedad = Valor
End Sub


La última alternativa es utilizar el camino de las propiedades.
Código:
Public Property Propiedad() As String
  Get
     Return VariablePropiedad
  End Get
 
  Set(ByVal value As String)
     Select Case value <> ""
        Case True
           VariablePropiedad = value
      End Select
  End Set
End Property


Los valores de las propiedades se asignan en el apartado Set de la propiedad en cuestión y es ahí donde hay que escribir el código adecuado para su validación, como de costumbre es un apartado que nunca hay que olvidar, no solo se ha de asignar el dato, sino que también hay que validarlo previamente.
Código:
Public Class Ejemplo
  Dim Variable As String = "Variable inicializada"
  Dim VariablePropiedad As String = "Propiedad inicializada"
  Private Sub New() ' esto impide la creación de un objeto .
 
  End Sub
 
  Public Sub New(ByVal Valor As String)
    Console.WriteLine("Valor antes de recibir la inicialización {0} ",
    VariablePropiedad)
    VariablePropiedad = Valor
  End Sub
 
  Public Property Propiedad() As String
    Get
       Return VariablePropiedad
    End Get
   
    Set(ByVal value As String)
    Select Case value <> ""
       Case True
          VariablePropiedad = value
       End Select
    End Set
  End Property
 
  Public Sub Metodo(ByVal Valor As String)
     VariablePropiedad = Valor
  End Sub
End Class


El resultado de la ejecución es el siguiente:


Los valores de la propiedad se devuelven en el apartado del Get.
El último caso es la posibilidad de bloquear una propiedad en uno de los dos sentidos, para ello solo hay que declararla ReadOnly o WriteOnly.

Vemos en el ejemplo como se recibe o se trata una propiedad, esa propiedad es de lectura y escritura, pero podemos declararlas como ReadOnly o WriteOnly.
Código:
ReadOnly Property SoloLectura() As String
   Get
      Return VariablePropiedad
   End Get
End Property


Cuando declaramos una propiedad de solo lectura, la parte de escritura se elimina, y al revés cuando es de solo escritura.
Código:
WriteOnly Property SoloEscritura() As String
  Set(ByVal value As String)
    Select Case value <> ""
       Case True
          VariablePropiedad = value
    End Select
  End Set
End Property


1.6 Utilización de los objetos de una clase.
La utilización de los objetos declarados de una clase, dependerá de la implementación de la clase en cuestión, que es la que le proporciona los recursos a los objetos. La utilización del objeto, una vez declarado, será:
    Asignar valores a las propiedades, si estas lo requieren o lo necesita el código, y si no se ha hecho ya en la declaración del objeto.
    Hacer uso de los métodos disponibles de la clase en el momento adecuado.
    Finalizar el objeto, si procede, o dejar que la salida del procedimiento acabe con el mismo.


El uso dependerá evidentemente del tipo de clase que se haya implementado.
La codificación del uso de la clase puede hacerse bajo dos estilos de código.
El primero podría decirse que es el habitual.
    Definir
    Usar
    Y no realizar acciones especificas de finalización, o utilizar la clase GC.

Código:
Dim Objeto As New Clase(6)
Objeto = Nothing
GC.Collect()


Con el método Collet de la clase GC, se obliga a la recuperación de los resursos libres del sistema.

La clase GC, controla el recolector de elementos no utilizados del sistema, es un servicio que reclama de forma automática la memoria que no se utiliza.

Los métodos de esta clase influyen en el momento en que se realiza la recolección de elementos no utilizados de un objeto y en el momento en que se liberan los recursos asignados por un objeto.

Las propiedades de esta clase proporcionan información sobre la cantidad de memoria total disponible en el sistema y la categoría de edad, o generación, de la memoria asignada a un objeto.

El segundo, y sobre todo si se consumen muchos recursos del sistema, es utilizar la instrucción Using, End Using. Con esta instrucción se garantiza la recuperación de los recursos al finalizar el uso de los objetos.
Código:
Using Objeto As New Clase(7)
   MsgBox("El valor de la propiedad es " & Objeto.Propiedad & ".")
End Using


1.7 Secuencia de uso de un objeto.
El objeto creado como instancia de una clase, cuando se libera ejecuta el método finalize de la clase.

Este método existe por defecto.
Ese método se ejecuta siempre de forma predeterminada antes de liberar el objeto.

Por lo tanto todas aquellas acciones que sean imprescindibles realizar antes de que se destruya el objeto se deben realizar en ese método.

Por ejemplo realizar el cierre de archivos, o de una conexión con base de datos.
Para finalizar el uso de un objeto se establece a Nothing, y a partir de ahí la referencia al mismo no es posible.
Código:
Objeto = Nothing


También podemos preguntar por
Código:
If Objeto IsNot Nothing Then ...


Lo que nos permite saber si un objeto sigue haciendo referencia a algún recurso.
El ejemplo que sigue expresa de forma bastante efectiva la secuencia y el funcionamiento de los métodos Dispose y Finalize, para su correcto funcionamiento hay que poner en las propiedades de proyecto como elemento inicial el Sub Main.

Este es el código principal del ejemplo, donde se crean los objetos para la prueba.
Código:
Module Principal
  Sub Main()
    ' Demostración de como Using llama al método dispose
    Using Objeto As New ClaseHeredera(6)
       MsgBox("El valor de la propiedad después de la “ & _
       “inicialización es " & Objeto.Propiedad & ".")
    End Using
    MsgBox("Punto intermedio entre demos.", MsgBoxStyle.Information)
    ' Demostración de como el Recolector de objetos
    ' del CLR, Common Lenguage Runtime, llama al método finalize.
    Dim OtroObjeto As New ClaseHeredera(6)
    OtroObjeto = Nothing
    GC.Collect()
  End Sub
End Module


Y este es el módulo con el código de las clases del ejemplo.
Código:
Module ClaseDos
  Public Class ClaseBase
    Sub New()
       MsgBox("ClaseBase inicializándose con el método New.")
    End Sub
    Protected Overrides Sub Finalize()
       MsgBox("ClaseBase haciendo shutdown con el método Finalize.")
       MyBase.Finalize()
    End Sub
  End Class
 
  Public Class ClaseHeredera
  Inherits ClaseBase
  Implements IDisposable
  Private ValorPropiedad As Integer
  Sub New(ByVal Valor As Integer)
     ' La llamada al método New de la clase base ess obligado.
     MyBase.New()
     MsgBox("Clase heredera se inicializa con el método New.")
     ValorPropiedad = Valor
  End Sub
  Property Propiedad() As Integer
    Get ' Entrada
      CheckIfDisposed()
      Propiedad = ValorPropiedad
    End Get
   
    Set(ByVal Value As Integer) ' Salida
      CheckIfDisposed()
      ValorPropiedad = Value
    End Set
  End Property
  Protected Overrides Sub Finalize()
    MsgBox("Clase heredera haciendo shuttdown con el método Finalize.")
    Dispose(False)
  End Sub

    ' No añadir Overridable a éste método.
  Public Overloads Sub Dispose() Implements IDisposable.Dispose
     MsgBox("Clase heredera haciendo shuttdown con el método Dispose.")
     Dispose(True)
     GC.SuppressFinalize(Me)
  End Sub
  Private disposed As Boolean = False
  Public Sub CheckIfDisposed()
    If Me.disposed Then
       Throw New ObjectDisposedException(Me.GetType().ToString, _
       "Este objeto ha sido liberado.")
    End If
  End Sub

  Protected Overridable Overloads Sub Dispose( ByVal disposing As Boolean)
       MsgBox("Clase heredera haciendo shuttdown con el ” & _
                 “método Dispose sobrecargado, OverLoad")
     
    ' Código de tareas finales
    If Not Me.disposed Then
       If disposing Then
          ' Dispose de cualquier recurso utilizado.
       End If
       ' Dispose de cualquier recurso.
       ' Llamar a MyBase.Finalize si es una clase derivada ,
       ' y la clase base no ejecuta Dispose.
       MyBase.Finalize()
    End If
    Me.disposed = True
   End Sub
 
  End Class
End Module


1.8 Recuperar los recursos utilizados que están libres, clase GC.
La clase GC está diseñada para la gestión de los recursos liberados en memoria sin utilizarse, dispone de métodos para la gestión y recuperación de dichos recursos.

El recolector de elementos no utilizados realiza un seguimiento de los objetos asignados en la memoria administrada, y los reclama. De forma periódica, el recolector de elementos no utilizados reclama la memoria asignada a los objetos para los que no existen referencias válidas.

La recolección de elementos no utilizados se produce de forma automática, cuando una solicitud de memoria no puede satisfacerse utilizando la memoria libre que queda disponible.

La recolección de elementos no utilizados consta de los siguientes pasos:
    El recolector de elementos no utilizados busca los objetos administrados a los que se hace referencia en el código administrado.
    El recolector de elementos no utilizados intenta finalizar los objetos a los que no se hace referencia.
    El recolector de elementos no utilizados libera los objetos a los que no se hace referencia y reclama la memoria utilizada por estos objetos.

Durante la recolección de elementos no utilizados, el recolector no liberará un objeto si encuentra una o varias referencias al mismo en el código administrado.

El recolector de elementos no utilizados no reconoce, sin embargo, las referencias a objetos desde el código no administrado y puede liberar objetos que se estén utilizando exclusivamente en código no administrado, a menos que se le impida hacerlo de forma explícita.


Autor del curso: casiopea


Normas del foro
Aprende a postear correctamente usando las etiquetas
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

¿como puedo obtener un dato de un radiobutton

jose mansilla Programación para dispositivos móviles 0 Jueves 27 Sep 2018 16:08 Ver último mensaje
El foro no contiene ningún mensaje nuevo

COmo puedo entrar a los Menus de una Verifone V...

manuelomeli Temas generales 0 Miércoles 23 May 2018 19:58 Ver último mensaje
El foro no contiene ningún mensaje nuevo

AYUDA: COMO RECONECTO VB6 A MYSQL SIN PERDER LA...

rjaguin Visual Basic y VBA 2 Miércoles 09 May 2018 22:27 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Ayuda Programar Ruleta con tablero en Netbeans

Danielilla Java 0 Jueves 12 Oct 2017 05:41 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Ayuda Programar Ruleta con tablero en Netbeans

Danielilla Programación en general 0 Jueves 12 Oct 2017 05:40 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,