La idea principal de la herencia entre clases es la de compartir atributos de manera armoniosa, pero también son conscientes que el valor tomado desde ellas puede ser implementados como lo desee usar la clase derivada; por tanto, debemos especificar algunos modificadores dentro de las propiedades y métodos de la clase derivada:
- Overridable: permite reemplazar una propiedad o un método de una clase en una clase derivada.
- Overrides: reemplaza una propiedad o un método Overridable definido en la clase base.
- NotOverridable: evita que una propiedad o un método se invaliden en una clase que hereda. De forma predeterminada, los métodos Public son NotOverridable.
- MustOverride: requiere que una clase derivada reemplace una propiedad o un método. Cuando se utiliza la palabra clave MustOverride, la definición del método está formada simplemente por la instrucción Sub, Function o Property.No se permite ninguna otra instrucción y, en concreto, no hay ninguna instrucción End Function ni End Sub. Los métodos MustOverride se deben declarar en las clases MustInherit.
NIVEL DE ACCESO PROTEGIDO EN LA CLASE DERIVADA
El alcance Protected especifica que sólo se puede obtener acceso a uno o varios elementos de programación declarados desde su propia clase o desde una clase derivada.
A veces un elemento de programación declarado en una clase contiene datos confidenciales o código restringido, por lo que conviene limitar el acceso a dicho elemento. Sin embargo, si la clase se puede heredar y se espera una jerarquía de clases derivadas, quizás sea necesario que estas clases derivadas tengan acceso a los datos y al código. En este caso, deseará que se pueda tener acceso al elemento desde la clase base y desde todas las clases derivadas. Para limitar el acceso a un elemento, puede declararlo con Protected.
Reglas básicas:
- Contexto de la declaración: puede usar Protected sólo a nivel de clase. Esto significa que el contexto
de la declaración de un elemento Protected debe ser una clase, y no un archivo de código fuente, un
espacio de nombres, una interfaz, un módulo, una estructura ni un procedimiento.
- Modificadores combinados: puede usar el modificador Protected junto con el modificador Friend (Visual Basic) en la misma declaración. Esta combinación hace que se pueda obtener acceso a los elementos declarados desde cualquier punto del mismo ensamblado, desde su propia clase y desde las clases derivadas. Sólo puede especificar Protected Friend en miembros de clases.
Sintaxis:
CASO DESARROLLADO
En una empresa de venta de productos se necesita una aplicación que permita controlar los sueldos de sus empleados los cuales están organizados en dos tipos: los empleados asalariados y los de comisión, la diferencia radica en que los asalariados tienen un sueldo fijo mensual y sólo se someten a descuentos de ley que asiendo a un 10% del monto mensual, mientras que los de comisión tienen una asignación mensual dependiendo del monto vendido durante el mes, existe un monto adicional asignado a todos los empleados por comisión que tienen más de tres años de servicio. En ambos casos los datos de los empleados son: código, nombres, teléfono y fecha de ingreso a labores.
En vista que ambos empleados tienen factores comunes debemos construir el siguientes Diagrama de Clases en un proyecto de Net.
En la Figura anterior se factoriza las atributos entre los dos tipos de empleados y lo registraremos dentro de la clase Empleado, mientras que en la clase Asalariado sólo se declara el atributo bruto con un valor constante, el método calculaDescuento que tendrá por misión determinar el descuento asignado por ley del 10% y el método calculaNeto que tiene la misión de determinar el sueldo bruto descontando los montos de ley.
En la clase Comisión se declara el atributo monto vendido que tiene por misión obtener el monto vendido durante un mes por el empleado y así poder determinar su sueldo gracias al método calculaSueldo.
Ambas clases heredan los atributos código, fecha de ingreso, teléfono y fecha de ingreso a la empresa.
Solución:
1.Creamos un nuevo proyecto lo llamamos pjHerencia
2.Agregamos una nueva clase al proyecto pjHerencia llamado Empleado esta será la definición de la clase base para el desarrollo de la aplicación.
Y le agregamos el siguiente código a la clase Empleado:
Explicación:
Se declaran los atributos código, nombres, teléfono y fecha de ingreso de los empleados como siempre de visibilidad privada.
Se implementan las propiedades de cada atributo:
Y finalmente se implementa la función calculaAñosServicio que determinará el número de años que tiene de un empleado en la empresa, esto resultará de restar el año actual YEAR(Date.Today) y el año de la fecha de Ingreso.
3.Agregamos una nueva clase al proyecto pjHerencia llamado Asalariado.
Agregue el siguiente código a la clase Asalariado:
Explicación:
En primer lugar se debe definir que la clase Asalariado es una clase hija o derivada de la clase Empleado; por lo tanto, se agrega cláusula Inherits Empleado después de la definición de la clase.
Se declara el atributo bruto de la clase Asalariado para poder asignar próximamente un valor constante como lo indica la regla de negocio.
Se implementa el método constructor que inicializa el valor del atributo bruto con $ 1200.00, este método no debe ser visible por el exterior por eso no se define visibilidad alguna.
La forma de hacer visible el atributo bruto desde el formulario es por medio de la definición de su propiedad como el atributo tiene una definición en el constructor se le asigna ReadOnly para que sea lo legible pero no actualizable.
La función calculaDescuento tiene por misión determinar el monto asignado por el descuento según aportaciones de ley.
Y finalmente la implementación de la función calculaNeto que permite determinar el monto descontando sus aportes de ley.
4. Agregamos una nueva clase al proyecto pjHerencia llamada Comisión
Agregue el siguiente código a la clase Comisión:
Explicación:
Primero debe definir que la clase Comisión también es una clase hija o derivada de la clase Empleado; por lo tanto, se agrega la cláusula Inherits Empleado después de la definición de la clase.
Luego se declara el atributo monto vendido que tiene por misión obtener el monto Vendido por el empleado de tipo Comisión.
Seguidamente, se implementa su propiedad del atributo montoVendido
Y finalmente, se implementa la función calculaSueldo que determinará el monto asignado al empleado según su monto vendido, hay que considerar que el empleado sólo recibirá el10% del monto total vendido y a la vez se verificará el número de años de servicio para agregarle 200 dólares más.
5.Agregamos una Windows Forms al proyecto pjHerencia llamado frmAsalariado y tendrá la misión de registrar a todos los empleados de tipo Asalariado de la empresa.
Agregue las siguientes propiedades a los objetos contenidos dentro del Windows Forms frmAsalariado
mostrados en la tabla.
Form1(Archivo) | (Name) frmAsalariado |
Form1(Objeto) | Text Sistema de control de pagos |
Label1 | Text PAGODEEMPLEADOSASALARIADOS |
Label2 | Text CODIGO |
Label3 | Text FECHADEINGRESO |
Label4 | Text NOMBRES |
Label5 | Text TELEFONO |
TextBox1 | (Name) txtCodigo |
TextBox2 | (Name) txtNombres |
TextBox3 | (Name) txtFono |
DateTimePicker1 | (Name) dtFecha Format Short |
Button1 | (Name) btnRegistrar Text REGISTRAR COMPRA |
Button2 | (Name) btnLimpiar Text LIMPIAR |
ListView1 | (Name) lvEmpleados |
Colocamos el siguiente código dentro del formulario.
Explicación:
Primero se implementa el procedimiento de limpieza de los controles este se encargará de limpiar las cajas de texto.
Luego se implementa el procedimiento configuraLista que tiene por misión definir el encabezado mostrado en la lista de empleado.
Ahora debemos capturar los valores Ingresados en el Windows Form por medio de funciones para los objetos relevantes como el código, nombres, fecha de Ingreso aquí tenga en cuenta que para obtener el valor del DateTimePicker tiene que usar la propiedad Value del objeto y finalmente el teléfono.
Se invoca el procedimiento configuraLista dentro del evento load del Windows Form para que al iniciar el formulario ya se encuentre establecido.
Ahora implementaremos el código del botón Registrar empezando por la declaración del objeto objAsalariado de la clase Asalariado, tome en cuenta que también podrá tener acceso a los atributos declarados como públicos de la clase Empleado.
Se envían los valores capturados hacia los atributos de la clase.
Luego se enviarán los valores obtenidos de la clase hacia el objeto ListView.
6. Agregamos una Windows Forms al proyecto pjHerencia llamado frmComision y tendrá la misión de registrar a todos los empleados de Tipo Comisión de la empresa.
Coloque el siguiente código dentro del Windows Form frmComision:
Explicación:
Primero se implementará los procedimientos limpieza de controles y configuración de la lista, este se encargará de limpiar las cajas de texto y asignar el encabezado del listado de los empleado respectivamente.
Se implementa las funciones que permiten capturar los valores ingresados en los objetos de Windows Form.
Se implementa el código del botón Registrar, se empezará por crear el objComision de tipo Comisión.
Luego se asignan los valores obtenidos en las funciones y enviadas a la clase por intermedio del objeto objComision.
Finalmente, se envían los valores obtenidos de la clase hacia el ListViewltem.