En Visual Basic, el nivel de acceso "protected" (Protected) está destinado a la encapsulación: permite que los miembros de la clase sean accesibles solo dentro de la propia clase y de sus derivados. Esto es importante tanto para la organización de la arquitectura OOP como para limitar el acceso directo a la implementación interna del objeto.
Históricamente, en el VB6 clásico casi no había tal flexibilidad, pero a partir de VB.NET se introdujeron modificadores de acceso completos, que cumplen con los estándares modernos de OOP.
Un error en la organización del acceso puede llevar a un uso incorrecto de las propiedades o métodos de la clase y, potencialmente, a una violación de la encapsulación. Por ejemplo, un método público (Public) estará accesible para todos, incluidos componentes externos, mientras que el protegido limita el acceso a los derivados.
En VB.NET, hay disponibles los modificadores Protected, Protected Friend y Private. Protected es visible solo dentro de la clase y sus herederos, Protected Friend — dentro del ensamblado (assembly) y sus herederos, Private — solo dentro de la clase que lo declara.
Ejemplo de código:
Public Class Animal Protected Sub Eat() Console.WriteLine("Eating...") End Sub Private Sub Sleep() Console.WriteLine("Sleeping...") End Sub End Class Public Class Dog Inherits Animal Public Sub PerformEat() Eat() ' Accesible: Protected End Sub ' Sleep() no es accesible: Private End Class
Características clave:
¿Puede el modificador Protected proporcionar visibilidad al miembro de la clase para todas las clases en el ensamblado?
No, solo para la propia clase y sus derivados. Protected Friend — para la clase, sus herederos y todas las clases en el ensamblado.
¿Es posible indicar explícitamente que una propiedad es visible solo para las clases hijas fuera del ensamblado, pero no dentro del ensamblado?
No, no existe tal nivel. Protected Friend divide la visibilidad entre herederos y el ensamblado a la vez, pero no se pueden separar estas áreas.
Si en la clase base el método se define como Protected, ¿se puede sobrescribir como Public en la clase derivada?
No, el nivel de acceso solo se puede mantener o ampliar estrictamente hacia abajo, pero no se puede restringir; la ampliación del acceso viola los principios de encapsulación. En .NET, el compilador arrojará un error si se intenta restringir el acceso.
Un desarrollador principiante declaró métodos internos de la lógica de negocio como Public. Después de un tiempo, al actualizar el programa aparecieron numerosos errores debido al acceso incontrolado a estos métodos por componentes externos.
Ventajas:
Desventajas:
Un programador experimentado utiliza Protected y Private, separa las áreas de responsabilidad entre las clases padres e hijas. Gracias a esto, las actualizaciones no afectan a las API externas, reduciendo el número de errores.
Ventajas:
Desventajas: