Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

miércoles, 29 de agosto de 2012

Clases y Objetos: Instanciar una clase

¿como se crean objetos de una clase?


Dentro de un programa de Gambas una instancia u objeto de la clase se representa como una variable, por lo que para crear una instancia declara una variable cuyo tipo de dato es el nombre del objeto, se usa el siguiente formato:
Para definir el tipo de objeto:
  • [Dim | Public | Private ] nombre as Nombre_Clase
y luego para crear el objeto:
  • nombre=New Nombre_Clase
 Vemos un ejemplo, usando la clase Circulo, del anterior post.
Public Sub Main()


Dim cir As ClassCirculo 'creamos la variable, que sea del tipo ClassCirculo


cir = New ClassCirculo 'Creamos el objeto
Print "Uso de clase Circulo"
Print "Introduce el radio:"
Input cir.radio


Print "El area es: "; cir.area()


'vamos a crear un nuevo objeto circulo, con un radio predefinido:
cir = New ClassCirculo(8)
Print "Radio: "; cir.radio
Print "El area es: "; cir.area()


End

Nota:
Fijate que usamos el operador punto (.) para acceder tanto a las propiedades como a los métodos del circulo.

Descarga del código de circulo: enlace

Ejemplo:
La compañía Ibarra va a remodelar su nave industrial de tal manera que va a pintar toda nave y necesita saber cuanto tiempo le llevaría pintar la nave. Define una clase Rectángulo que tenga las siguientes especificaciones:

Atributos:
· largo
· ancho
Métodos:
· calcula Area
Y utiliza esta clase para resolver el siguiente problema: Hay una pared rectangular que tiene una ventana rectangular; se requiere un programa que dadas las dimensiones (largo y ancho) de la ventana y de la pared muestre en la pantalla el tiempo necesario para pintar la pared si se sabe que se puede pintar 1.5 m2 en 10 minutos.

1º Definimos la clase, con sus propiedades (largo y ancho) y su método (area):

' Gambas class file
Property largo As Float
Private $largo As Float

Private Function largo_read() As Float
Return $largo
End

Private Sub largo_write(Valor As Float)
$largo = Valor
End

Property ancho As Float
Private $ancho As Float

Private Function ancho_read() As Float
Return $ancho
End

Private Sub ancho_write(Valor As Float)
$ancho = Valor
End

Public Sub area() As Float
Return $largo * $ancho
End

 Ahora el programa principal, para resolver el problema...

' Gambas module file

Public Sub Main()

Dim p As Rectangulo 'pared
Dim v As Rectangulo 'ventana

Dim areapintada As Float 'nos servira para almacenar la superfice real de pintado

p = New Rectangulo
v = New Rectangulo

Print "Ejemplo de Clase: Pintado de nave"
'pedimos los datos de la pared y de la ventana
Print "Introduce datos de la nave"
Print "Datos de la pared:"
Print "Largo:"
Input p.largo
Print "Ancho:"
Input p.ancho

Print "Datos de la ventana:"
Print "Largo:"
Input v.largo

Print "Ancho:"
Input v.ancho

'calcula el area de la ventana y de la pared
'la superficie realmente pintada es la diferencia del area de la pared y la ventana
areapintada = p.area() - v.area()

Print "Calculo el tiempo a emplear, sabiendo que 1.5 m2 los hago en 10 minutos..."
'aplico una regla de 3...
Print "Area real a pintar: "; areapintada
Print "Se tardará en pintar la pared: "; areapintada * 10 / 1.5; " minutos"

End

Salida del programa en la terminal:
Ejemplo de Clase: Pintado de nave
Introduce datos de la nave
Datos de la pared:
Largo:
10
Ancho:
2
Datos de la ventana:
Largo:
1
Ancho:
5
Calculo el tiempo a emplear, sabiendo que 1.5 m2 los hago en 10 minutos...
Area real a pintar: 15
Se tardará en pintar la pared: 100 minutos


Enlace de descarga del ejemplo: Enlace

1 comentario:

A falta de donativos... un poco de publicidad