Visual Basic .NET Language
OOP Keywords
Buscar..
Definiendo una clase
Las clases son aspectos vitales de la POO. Una clase es como el "plano" de un objeto. Un objeto tiene las propiedades de una clase, pero las características no están definidas dentro de la misma clase. Como cada objeto puede ser diferente, definen sus propias características.
Public Class Person
End Class
Public Class Customer
End Class
Una clase también puede contener subclases . Una subclase hereda las mismas propiedades y comportamientos que su clase primaria, pero puede tener sus propias propiedades y clases únicas.
Modificadores de herencia (en clases)
Hereda
Especifica la clase base (o padre)
Public Class Person
End Class
Public Class Customer
Inherits Person
End Class
'One line notation
Public Class Student : Inherits Person
End Class
Posibles objetos:
Dim p As New Person
Dim c As New Customer
Dim s As New Student
No Heredable
Evita que los programadores utilicen la clase como clase base.
Public NotInheritable Class Person
End Class
Posibles objetos:
Dim p As New Person
Debe Heredarse
Especifica que la clase está destinada para ser utilizada como una clase base solamente. (Clase abstracta)
Public MustInherit Class Person
End Class
Public Class Customer
Inherits Person
End Class
Posibles objetos:
Dim c As New Customer
Modificadores de herencia (en propiedades y métodos)
Anulable
Permite que una propiedad o un método en una clase se invalide en una clase derivada.
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Anulaciones
Anula una propiedad o un método anulable definido en la clase base.
Public Class Customer
Inherits Person
'Base Class must be Overridable
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
NotOverridable
Evita que una propiedad o un método se sobrescriba en una clase heredada. Comportamiento por defecto. Solo se puede declarar en métodos de anulaciones
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public NotOverridable Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Public Class DetailedCustomer
Inherits Customer
'DoSomething can't be overridden
End Class
Ejemplo de uso:
Dim p As New Person
p.DoSomething()
Dim c As New Customer
c.DoSomething()
Dim d As New DetailedCustomer
d.DoSomething()
Salida:
Person
Customer
Customer
MustOverride
Requiere que una clase derivada anule la propiedad o el método.
Los métodos MustOverride se deben declarar en las clases MustInherit.
Public MustInherit Class Person
Public MustOverride Sub DoSomething()
'No method definition here
End Class
Public Class Customer
Inherits Person
'DoSomething must be overridden
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Ejemplo de uso:
Dim c As New Customer
c.DoSomething()
Salida:
Customer
MyBase
La palabra clave MyBase se comporta como una variable de objeto que se refiere a la clase base de la instancia actual de una clase.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public Sub DoSomethingElse()
MyBase.DoSomething()
End Sub
End Class
Ejemplo de uso:
Dim p As New Person
p.DoSomething()
Console.WriteLine("----")
Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()
Salida:
Person
----
Person
Person
Yo vs myclass
Yo usa la instancia de objeto actual.
MyClass usa la definición de miembro en la clase donde se llama al miembro
Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub useMe()
Me.DoSomething()
End Sub
Public Sub useMyClass()
MyClass.DoSomething()
End Sub
End Class
Class Customer
Inherits Person
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Ejemplo de uso:
Dim c As New Customer
c.useMe()
c.useMyClass()
Salida:
Customer
Person
Sobrecarga
La sobrecarga es la creación de más de un procedimiento, constructor de instancia o propiedad en una clase con el mismo nombre pero diferentes tipos de argumentos.
Class Person
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
End Class
Oscuridad
Se vuelve a declarar un miembro que no es anulable. Sólo se verán afectadas las llamadas a la instancia. El código dentro de las clases base no se verá afectado por esto.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub UseMe()
Me.DoSomething()
End Sub
End Class
Public Class Customer
Inherits Person
Public Shadows Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Ejemplo de uso:
Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()
Salida:
Person
Person
----
Person
Customer
Escollos :
Ejemplo 1, Creando un nuevo objeto a través de un genérico. ¿Qué función se utilizará?
Public Sub CreateAndDoSomething(Of T As {Person, New})()
Dim obj As New T
obj.DoSomething()
End Sub
ejemplo de uso:
Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()
Salida: Por intuición el resultado debe ser el mismo. Sin embargo, eso no es cierto.
Person
Student
----
Person
Person
Ejemplo 2:
Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()
Salida: Por intuición, podrías pensar que p y s son iguales y se comportarán igual. Sin embargo, eso no es cierto.
Person
Student
En estos simples ejemplos, es fácil aprender el extraño comportamiento de las Sombras. Pero en la vida real trae muchas sorpresas. Es aconsejable evitar el uso de sombras. Uno debería usar otras alternativas tanto como sea posible (anulaciones, etc.)
Interfaces
Public Interface IPerson
Sub DoSomething()
End Interface
Public Class Customer
Implements IPerson
Public Sub DoSomething() Implements IPerson.DoSomething
Console.WriteLine("Customer")
End Sub
End Class