Sei sulla pagina 1di 5

Captulo 2.

Aplicacin prctica

Contenido
Qu es una clase? ...................................................................................................................................... 1 De qu se compone una clase? ................................................................................................................. 2 Diseo de una clase en Visual Basic .NET ................................................................................................... 3 Creacin de un objeto en base a la clase ..................................................................................................... 5

Qu es una clase?
Los programas de Visual Basic .NET se generan con objetos como formularios y controles. Los objetos tambin se pueden utilizar para representar cosas reales como personas, equipos informticos o incluso algo ms abstracto, como una cuenta bancaria. Una clase es simplemente un diseo de un tipo de objeto. Podemos pensar que es el plano que describe el objeto. As como un plano puede utilizarse para construir varios coches, una clase podemos usarla para crear varias copias de un objeto. Cuando estamos programando utilizamos una variable de tipo String. Seguro que slo es una variable? Ejemplo con lenguajes no orientados a objetos: Dim variable as string Variable = Hola Ejemplo con Visual Basic .NET Dim variable as string Variable = new string(hola) O bien: Dim variable as new string(Hola) La clase es STRING y el objeto es VARIABLE. Cuntos objetos pueda crear de la clase STRING? Infinidad, tantos como necesite. Cada objeto es una "instancia" independiente de una clase, la accin de crear una clase se denomina creacin de instancias. Seguro que ya te has fijado en la palabra new, es un mtodo que existe en la clase y que no vamos a poder utilizar como el resto de mtodos. Este es especial, se ejecuta al instanciar un nuevo objeto. En ese momento se construye el objeto en base al mtodo new. En el captulo 4 lo veremos ms extensamente.

De qu se compone una clase?


Todos los objetos tienen propiedades que describen sus atributos, mtodos que definen sus acciones y eventos que definen sus respuestas. Igualmente, la clase que define un objeto tiene sus propias propiedades, mtodos y eventos (a veces llamados miembros) que se pasan a todas las instancias de esa clase. Algunos miembros de una clase son privados; slo se tiene acceso a ellos mediante cdigo dentro de la clase. Por ejemplo, una clase de un coche, puede tener un mtodo para variar la velocidad. Lo lgico es permitir que un programa lea la velocidad actual y que no lo pueda cambiar el programa, slo haciendo uso del mtodo adecuado. Es decir, no se permite manipular la variable velocidad, slo se podr llamar al mtodo de la clase que modifica la velocidad, por ejemplo: acelerar, este mtodo variar el valor de la variable velocidad.

En resumen: Propiedades Mtodos Eventos Pongamos como ejemplo un objeto que utilizamos habitualmente en un programa grfico, un cuadro de texto o Textbox. Este objeto tiene diversas propiedades, mtodos y eventos que se pueden utilizar.

Diseo de una clase en Visual Basic .NET


Vamos a utilizar un ejemplo, y, sobre dicho ejemplo vamos a ir construyendo el ejemplo: Versin 1: Vamos a tener una clase persona que se podr utilizar en mltiples entornos: clientes, proveedores, trabajadores, etc.. El ejemplo va a ser muy sencillo, se trata de visualizar la idea. Si hacemos un programa estructurado, sin trabajar con POO sera algo as:
Dim Nombre As String Dim FechaNacimiento As Date Dim Sexo As Char Dim Personas(10, 3) As Object Function Edad(FechaNacimiento As Date) As Integer Edad = Convert.ToInt32(DateDiff(DateInterval.Year, Now, FechaNacimiento)) End Function

Prepararamos el diseo de tres variables para guardar los valores que nos interesan. Si queremos calcular la edad utilizaremos la funcin edad. Ya en este ejemplo vemos que no vamos a poder manipular el valor Edad, salvo que cambie la Fecha de Nacimiento. Con esto se quiere mostrar que an no utilizando POO podemos ser correctos en la programacin. Versin 2: Hacemos una primera versin de la clase
Public Class Persona Public Sexo As Char Public FechaNacimiento As Date Public Nombre As String Sub New(ByVal Nombre As String, ByVal Sexo As Char, ByVal FechaNacimiento As Date) Me.Nombre = Nombre Me.Sexo = Sexo Me.FechaNacimiento = FechaNacimiento End Sub Function Edad() As Integer Edad = Convert.ToInt32(DateDiff(DateInterval.Year, Now, FechaNacimiento)) End Function End Class

Esta clase no es correcta, si repasamos las caractersticas que debe tener. Es posible modificar el valor de las variables desde fuera de la clase, y, eso es un pecado. No se respeta la encapsulacin, en nuestra prxima versin esto lo hemos de solucionar.

Versin 3: Vamos a intentar mejorar la encapsulacin de nuestra clase.


Public Class Persona Private v_Sexo As Char Private v_FechaNacimiento As Date Private v_Nombre As String Public Property Nombre() As String Get Nombre = v_Nombre End Get Set(ByVal value As String) v_Nombre = value End Set End Property Public Property FechaNacimiento() As Date Get FechaNacimiento = v_FechaNacimiento End Get Set(ByVal value As Date) v_FechaNacimiento = value End Set End Property Public Property Sexo() As Char Get Sexo = v_Sexo End Get Set(ByVal value As Char) v_Sexo = value End Set End Property Sub New(ByVal Nombre As String, ByVal Sexo As Char, ByVal FechaNacimiento As Date) v_Nombre = Nombre v_Sexo = Sexo v_FechaNacimiento = FechaNacimiento End Sub Function Edad() As Integer Edad = Convert.ToInt32(DateDiff(DateInterval.Year, FechaNacimiento, Now)) End Function End Class

Ya no es posible acceder a las variables directamente, slo a travs de las Property podemos acceder a ellas. Esto protege los valores. Por ejemplo para introducir el valor Sexo podremos limitar que slo se permita el hombre H o M. Una ltima vuelta, la Edad es una propiedad o un mtodo? Hemos dejado una funcin para que nos muestre la Edad porque es un valor que se obtiene mediante un clculo, es cierto, pero, de verdad la Edad es un mtodo? En todo caso un mtodo sera CumplirAos, pero, no la Edad.

Versin 4: La Edad como propiedad de nuestra clase


Public ReadOnly Property Edad() As Integer Get Edad = Convert.ToInt32(DateDiff(DateInterval.Year, FechaNacimiento, Now)) End Get End Property

Vemos que se ha puesto ReadOnly. La Edad no es una propiedad que podamos manipular desde el objeto Persona, slo se podr cambiar desde la propiedad.

Creacin de un objeto en base a la clase


Module Module1 Sub Main() Dim Pedro As Persona Pedro = New Persona("Pedro", "H"c, #11/18/1968#) Console.WriteLine("Nombre: {0}", Pedro.Nombre) Console.WriteLine("Sexo: {0}", Pedro.Sexo) Console.WriteLine("Fecha Nacimiento: {0}", Pedro.FechaNacimiento.GetDateTimeFormats()) Console.WriteLine("Edad: {0}", Pedro.Edad) Console.WriteLine("Pulse <INTRO> para continuar") Console.ReadLine() End Sub End Module

Potrebbero piacerti anche