Fecha y hora actual: Jueves 17 Ene 2019 05:06
Í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.23 - Como programar una clase

Responder al Tema

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

Autor Mensaje
Tesis
Administrador


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

Mensaje Publicado: Martes 12 May 2009 11:57

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

Responder citando

Curso de programación en .NET - Tema 1.23 - Como programar una clase

1. Como programar una clase.

1.1 Objetivos del tema.

Se han visto los distintos elementos de una clase y sus características, ahora conviene intentar sentar criterios o formas de abordar la programación de una clase.

1.2 Introducción.
No se puede negar que las clases son una evolución natural de la forma de programar, o sea que negar la evidencia es del todo inútil. En principio es muy atrevido escribir un capitulo con éste tema, pero no se pretende decir a nadie como tiene que hacer las cosas, sino simplemente indicar cuales son los criterios que se pueden seguir, o en que orden se ejecutan los métodos y se usan las variables, propiedades, para a partir de ahí crear lo que podría ser un orden más o menos adecuado, evidentemente desde lo que llevamos visto, el tiempo muchas veces te desdice, o te reafirma.

1.3 Utilización de las clases.
La utilización de las clases con los pequeños ejemplos que hemos visto quizás no queda muy claro, pero hay que resaltar que su destino es el de crear objetos con las mismas, y que esos objetos son autónomos unos con respecto a otros.

¿Cuando definir una clase?, en principio eso va a ser un problema, pero desde luego en la actualidad toda la programación se basa o está integrado por clases, otra cosa es el código que tengamos que escribir nosotros. Eso es otra historia. Pero ya lo iremos aprendiendo con el tiempo.

En principio una clase sería práctico crearla cuando deseamos crear lo que anteriormente definíamos como una librería, para la gestión de datos, para cualquier cosa en realidad.
También si deseamos crear una agrupación de código relacionado entre si, y que el fuente quede protegido. Hay que tener en cuenta que las empresas de programación de esta forma pueden tener objetos desarrollados que se reutilizan de una a otra aplicación, y que son o están depurados.

Una de las ventajas de las clases es que en contra de las librerías, o en algunos casos de las librerías, según el lenguaje, el código no es accesible por el usuario de la misma.

Hay más casos en los que se puede definir una clase, como son las denominadas interface, o las equivalente a los tipos, que por cuestiones de rendimiento así se aconseja. Pero no es este el motivo principal del tema, por lo que solo dejar constancia de dicha situación para que quien lo desee pueda buscar ampliar dichos contenidos.

1.4 Como escribir una clase.
Cuando usamos una clase, lo que se hace es siempre seguir los siguientes pasos.

    Declarar un objeto de esa clase.
      Eso implica que se ejecute por defecto un método New, Constructor.
      Por lo tanto los datos que nos interese controlar, o las acciones a ejecutar en esa fase deben estar escritas en ese método.

    Asignar las características a las propiedades de la clase.
      Pero puede que no se le asigne ninguna propiedad de las existentes.

    Utilizar la clase con los objetos que se declaren de la misma.
    Utilizar los métodos de la clase.
    Finalizar el uso del objeto.
      Se ejecuta el método destructor de la clase, Finalize, y se liberan recursos.

En base a esos pasos debemos programar el contenido de nuestra clase.

1.5 Declarar un objeto de nuestra clase.
Este paso es el más sencillo de todos.
Código:
Crear Objeto como nuevo ClaseDefinidaExistente

O bien se puede escribir
Código:
Crear Objeto como ClaseDefinidaExistente
Objeto = nuevo ClaseDefinidaExistente


Cualquiera de las dos sintaxis es válida, aunque la más utilizada es la primera.
Ahora hay que escribir la clase, y hemos de escribir una clase eficiente y robusta contra el mal uso de la misma.
Si por el motivo que fuese deseamos que no se pueda declarar un objeto de la clase que nosotros escribimos sin que se ejecute el control adecuado en su creación hay que proteger o bloquear el método constructor.

Para ello lo declaramos Private sin argumentos y solo podrá ejecutarse en la versión que nosotros escribamos.
El ejemplo que sigue no permite declarar un objeto de la clase, sin que se le pase como argumento un valor de tipo string en el momento de la definición de dicho objeto.

Por lo tanto es imposible crear un objeto de esa clase sin más.
Código:
Clase Ejemplo
   Crear Variable como String = "Variable inicializada"
   Crear VariablePropiedad como String = "Propiedad inicializada"
   Private Constructor()
      // esto impide la creación de un objeto .
   Fin procedimiento
   Public Constructor(Valor Como String)
      VariablePropiedad = Valor
   Fin procedimiento
End Class


Este ejemplo nos obliga a declarar el objeto con la siguiente sintaxis.
Código:
Crear Objeto como nuevo Clase("Inicialización")

Impide que se pueda utilizar
Código:
Crear Objeto como nuevo Clase

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

Fin procedimiento
Public Constructor(Valor como String)
   Si Valor <> Nulo Entonces VariablePropiedad = Valor
Fin procedimiento


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 Clase Heredera
   Heredar Clase // Heredar la clase del ejemplo anterior
   Publico Constructor()
      // El primer paso es llamar al constructor de la clase origen, y
      // proporcionar un valor de inicialización.
      ClaseBase.Constructor("Valor desde la clase heredera")
   Fin procedimiento
Fin de Clase


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.

En el momento de declarar las variables de la clase nos encontraremos con dos tipos de variables.
    Las que actúan como variables.
    Las que representan internamente a una propiedad, que es la parte visible.

Las variables normales, les podemos dar el tratamiento que habitualmente le damos a las variables de cualquier programa, pero las que se han de emparejar con las propiedades, o que simplemente son públicas, lo lógico es inicializarlas al valor que nos interese, con el fin de que la clase a la hora de inicializarse no obligue a que 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.

De esta forma con un mínimo de código, el objeto que se deriva de nuestra clase se convierte en operativo.

1.6 Asignar valores a las propiedades de la clase.
Como hemos comentado, a la hora de inicializar la clase, las variables que se emparejan con las propiedades las vamos a inicializar, pero evidentemente el usuario puede querer personalizar o necesitar ajustar los valores del objeto, por lo tanto necesitará cambiar los valores de las propiedades.

Debemos intentar disponer de un sistema para poder asignar datos a las propiedades de forma controlada.
Esta es la forma de hacerse en VB.
Código:
Public Class Primera
   Dim DatoInterno As Integer = 32
   Public Property DatoExterno() As Integer
      ' validación
      Get ' al devolverse
         Return DatoInterno
      End Get
      Set(ByVal Value As Integer)
         Select Case Value ‘ al asignarse
            Case -32767 To 32767
               DatoInterno = Value
            Case Else
               DatoInterno = 0
         End Select
      End Set
   End Property
End Class

Podemos observar como la variable DatoInterno esta representada en el exterior con la propiedad DatoExterno.
Al asignar datos a la propiedad desde el programa se ejecutará esta zona del código.
Código:
Set(ByVal Value As Integer)
   Select Case Value ‘ al asignarse
      Case -32767 To 32767
         DatoInterno = Value
      Case Else
         DatoInterno = 0
   End Select
End Set

Donde nosotros podemos validar, controlar o bloquear, como deseemos, los datos que se intentan asignar.
Cuando se reclame desde el exterior el valor de la propiedad DatoExterno se ejecutará
Código:
Get ' al devolverse
   Return DatoInterno
End Get


Las propiedades normalmente vamos a utilizarlas en ambos sentidos, es decir devolver su valor y recoger nuevos valores.

Pero en algún momento puede darse la circunstancia o la necesidad de impedir el uso en alguno de los dos sentidos.
El plantearse este tipo de actuación nos va a garantizar o reducir el porcentaje de errores en la ejecución de nuestro programa.
En Java intentaremos crear algo equivalente mediante el uso de métodos.

1.7 Variables públicas.
La otra forma de asignar datos a la clase es la utilización de variables públicas, pero ahí perdemos el control de los datos a recibir, por lo tanto es un camino tortuoso y peligroso, a utilizar en contadas ocasiones.
Código:
Public Class ClaseEjemplo
   Public Publica As Integer
End Class


Esta sería la forma de declarar la variable en la clase.
Como podemos ver no hay ningún código de control.
Código:
Module Module1
   Sub Main()
      Dim Objeto As New ClaseEjemplo
      Objeto.Publica = 25
   End Sub
End Module


Esta es la forma de utilización en el programa.
Se puede asignar cualquier valor sin ninguna restricción.
Cuando menos peligroso, evidentemente cuando lo que represente sean valores que pueden perjudicar el buen funcionamiento de la clase, del objeto.
El siguiente es el mismo ejemplo escrito en Java.
Código:
package tema_23;
public class Ejemplos
{
   public int Publica;
   public Ejemplos()
   {
   }
}


Su utilización.
Código:
package tema_23;
public class Main
{
   public static void main(String[] args)
   {
      Ejemplos Objeto = new Ejemplos();
      Objeto.Publica = 25;
   }
}


1.8 Desarrollar los métodos de la clase.
Está claro que éste no es un orden inamovible, y que se irán creando los métodos y las propiedades a medida que se vaya desarrollando la clase.
En los métodos nos vamos a encontrar que necesitarán a su vez de datos para su ejecución.
Que criterio seguir a la hora de asignar los datos de los métodos, usar una propiedad o un argumento en la línea de llamada al método, veamos.
Un criterio puede ser el siguiente.
Cuando se usa una propiedad y se valida la asignación del dato, no se está ejecutando ningún código que podamos decir que sea ejecutivo, que realiza alguna acción, solo se controla su dato y ya está.

Cuando se asigna un valor en la llamada a un método, ese método va a ejecutar una acción, por lo tanto, ya podemos tener un criterio.
Así que en el método solo tenemos que recabar aquella información que sea imprescindible para la ejecución del mismo.

Otro apartado a la hora de crear los métodos, es si estos han de ser procedimientos a funciones.
Un criterio a seguir es que si el método solo es una acción a ejecutar y no devuelve nada, podemos crear un procedimiento, pero si ese método como consecuencia de su ejecución ha de devolver un dato, entonces debemos crear una función.

Por lo tanto, tenemos otro tema resuelto.
La siguiente cuestión que nos aparece, es cuando un método puede resolver un problema desde distintos puntos de partida.
Eso nos va a llevar a que seguramente tengamos también distintos juegos de datos iniciales, con lo cual la solución es evidente, utilizar la sobrecarga.

Creamos distintos métodos con el mismo nombre y con las líneas de entrada de argumentos adecuada a cada situación prevista.
En cuanto al orden en el que se pueden escribir pero para eso es difícil dar criterios.

1.9 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 asignar nulo y utilizar el recolector de cada lenguaje.

Código:
Crear Objeto como nuevo Clase
Objeto = Nada
Recolector.Limpia()


Con el método Limpia de la clase recolector, se obliga a la recuperación de los recursos libres del sistema.
La clase Recolector, 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.

1.10 Secuencia de uso de un objeto.
El objeto creado como instancia de una clase, cuando se libera ejecuta el método Finalizar de la clase.
Ese método se ejecuta siempre de forma predeterminada antes de liberar el objeto, y suele existir en cada lenguaje.

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.

1.11 Recuperar los recursos utilizados que están libres.
Normalmente existe una clase para la gestión de los recursos liberados en memoria sin utilizarse, y que 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 puede constas 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.


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,