Sie sind auf Seite 1von 27

HERENCIA Y CLASE ABSTRACTAS

HERENCIA
La herencia sirve para crear objetos que
incorporen propiedades y mtodos de otros
objetos. As podremos construir unos objetos
a partir de otros sin tener que reescribirlo
todo.
CLASE ABSTRACTA
Este Tipo de Clases nos permiten crear mtodo
generales, que recrean un comportamiento comn,
pero sin especificar cmo lo hacen. A nivel de cdigo
tienen por particularidad que algunos de sus mtodos
no tienen cuerpo de declaracin, qu quiere decir
esto? no tienen las llaves { } ni cdigo dentro de ellos y
deben estar precedidos por la palabra clave abstract.
Si una clase contiene uno o ms mtodos abstractos
est clase debe ser abstracta. Estas clases como son
generalidades no pueden ser instanciadas por ningn
objeto (se dice que su nivel de abstraccin es
demasiado alto), entonces su nico fin es ser
heredado/extendido por otras clases.
CLASE FIGURA
//se agrega la palabra reservada abstract
//para indicar que la clase es abstracta (genrica)

public abstract class clsFigura


{
//creacion de metodos Abstractos
public abstract String Dibujar();
public abstract String Area();

}
FORMULARIO HERENCIA FIGURA
CLASE CIRCULO
//HEREDA DE LA CLASE FIGURA
public class clsCirculo:clsFigura
{
//Atributos
private double _Radio;

//Constructor
public clsCirculo(double radio)
{
_Radio = radio;
}
CLASE CIRCULO
//sobreescribir los metodos abstractos
//de la clase que hereda

public override string Dibujar()


{
return "DIBUJANDO UN CIRCULO...\n";
}

public override double Area()


{
return Math.PI * _Radio * _Radio;
}

}
CLASE CUADRADO
//HEREDA DE LA CLASE FIGURA
public class clsCuadrado:clsFigura
{
//atributo
private double _Lado;

//constructor
public clsCuadrado(double lado)
{
_Lado = lado;
}
CLASE CUADRADO
//implementa los metodos abstractos de la clase que esta heredand
public override string Dibujar()
{
return "DIBUJANDO CUADRADO...\n";
}
public override double Area()
{
return _Lado * _Lado;
}
}
DIAGRAMA DE HERENCIA - ABSTRACTA
EJEMPLO HERENCIA EMPLEADOS
Objetos Utilizados
Formulario.
Label = Datos Empleados
richTexbox richEmpleado
Button btnEjecutar
CLASE EMPLEADOS (abstracta)
//se agrega la palabra reservada abstract
public abstract class clsEmpleados
{
//declaracion de atributos de la clase
private String _Cedula;
private String _Nombres;
private String _Apellidos;
CLASE EMPLEADOS (abstracta)
//Propiedades
public string Cedula
{
get { return _Cedula; }
set { _Cedula = value; }
}

public string Nombres


{
get { return _Nombres; }
set { _Nombres = value; }
}

public string Apellidos


{
get { return _Apellidos; }
set { _Apellidos = value; }
}
CLASE EMPLEADOS (abstracta)
//METODOS
//constructor
public clsEmpleados(String cedula, string nombres, string apellidos)
{
_Cedula = cedula;
_Nombres = nombres;
_Apellidos = apellidos;
}

//metodo abstracto que se tiene que implementar en todas las clases que hereden
public abstract double Ingresos();

//sobreescribe el metodo ToString


public override string ToString()
{
return String.Format("{0} {1}\n\tCdula: {2}",_Nombres,_Apellidos,_Cedula);
}
CLASE EMPLEADO ASALARIADO
//HEREDA DE LA CLASE EMPLEADOS
class clsEmpleadoAsalariado:clsEmpleados
{
//atributo de la clase
private double _Salario;

//propiedades
public double Salario
{
get { return _Salario; }
set { _Salario = value; }
}
//METODOS
CLASE EMPLEADO ASALARIADO
//constructor
public clsEmpleadoAsalariado(string cedula, string nombres,
string apellidos, double salario):base(cedula,nombres,apellidos)
{
_Salario = salario;
}

//implementa metodo abstracto de la clase heredadora


public override double Ingresos()
{
return _Salario; ;
}

//sobreescribe el metodo ToString


public override string ToString()
{
return String.Format("Empleado Asalariado: {0}\n\tSalario Mensual: ${1,10:N2}",
base.ToString(),Ingresos());
}

}
CLASE EMPLEADO POR HORAS
public class clsEmpleadoPorHoras:clsEmpleados
{
//Atributos de la clase
private double _NumeroHoras;
private double _ValorHora;

//Propiedades
public double NumeroHoras
{
get { return _NumeroHoras; }
set { _NumeroHoras = value; }
}

public double ValorHora


{
get { return _ValorHora; }
set { _ValorHora = value; }
}
CLASE EMPLEADO POR HORAS
//METODOS
//constructor
public clsEmpleadoPorHoras(string cedula, string nombres,
string apellidos, double numerohoras, double valorhora):base(cedula,nombres,apellidos)
{
_NumeroHoras = numerohoras;
_ValorHora = valorhora;
}

//implementa metodo abstracto de la clase heredadora


public override double Ingresos()
{
return _NumeroHoras * _ValorHora;
}

//sobreescribe el metodo ToString


public override string ToString()
{
return String.Format("\nEmpleado Por Horas: {0}\n\tSalario Por Horas: ${1,10:N2}",
base.ToString(), Ingresos());
}

}
CLASE EMPLEADO POR COMISION
public class clsEmpleadoPorComision:clsEmpleados
{
//atributos de la clase
private double _TarifaComision;
private double _VentasBrutas;

//propiedades
public double TarifaComision
{
get { return _TarifaComision; }
set { _TarifaComision = value; }
}

public double VentasBrutas


{
get { return _VentasBrutas; }
set { _VentasBrutas = value; }
}
CLASE EMPLEADO POR COMISION
//Constructor
public clsEmpleadoPorComision(string cedula, string nombres,
string apellidos, double tarifacomision, double ventasbrutas)
: base(cedula, nombres, apellidos)
{
_TarifaComision = tarifacomision;
_VentasBrutas = ventasbrutas;
}

//implementa metodo abstracto de la clase heredadora


public override double Ingresos()
{
return _VentasBrutas * _TarifaComision / 100;
}

//sobreescribe el metodo ToString


public override string ToString()
{
return String.Format("\nEmpleado Por Comision: {0}\n\tSalario Por Comision: ${1,10:N2}",
base.ToString(), Ingresos());
}
EMPLEADO BASE MAS COMISION
public class
clsEmpleadoBaseMasComision:clsEmpleadoPorComision
{
//Atributo de la clase
private double _Salario;

//Propiedad
public double Salario
{
get { return _Salario; }
set { _Salario = value; }
}
EMPLEADO BASE MAS COMISION
//METODOS
//Constructor
public clsEmpleadoBaseMasComision(string cedula, string
nombres,
string apellidos, double tarifacomision, double ventasbrutas,
double salario)
: base(cedula, nombres, apellidos, tarifacomision, ventasbrutas)
{
_Salario = salario;
}

//implementa metodo abstracto de la clase heredadora


public override double Ingresos()
{
return base.Ingresos() + _Salario;
}
EMPLEADO BASE MAS COMISION
//sobreescribe el metodo ToString
public override string ToString()
{

return String.Format("\nEmpleado Base


mas Comision: {0} {1}\n\tCdula: {2}\n\tSalario
Base Mas Comision: ${3,10:N2}", Nombres,
Apellidos, Cedula, Ingresos());
}
CODIGO BOTON EJECUTAR
//Limpia el richEmpleados
richEmpleados.Clear();

//declarar e instanciar los objetos


clsEmpleadoAsalariado eAsalariado = new
clsEmpleadoAsalariado("1111", "CARLOS", "VIVES", 1000000);
clsEmpleadoPorHoras ePorHoras = new
clsEmpleadoPorHoras("2222", "BARTO", "LOME", 20, 100000);
clsEmpleadoPorComision ePorComision = new
clsEmpleadoPorComision("3333", "SIMON", "BOLIVAR", 10,
30000000);
clsEmpleadoBaseMasComision eBaseMasComision =
new clsEmpleadoBaseMasComision("4444", "JULIO",
"VERNE", 10, 60000000, 3400000);
CODIGO BOTON EJECUTAR
//Muestra el metodo ToString en el richEmpleados

/*richEmpleados.AppendText(eAsalariado.ToString());
richEmpleados.AppendText(ePorHoras.ToString());

richEmpleados.AppendText(ePorComision.ToString());

richEmpleados.AppendText(eBaseMasComision.ToString()
);*/
CODIGO BOTON EJECUTAR
//crear arreglo de tipo clsEmpleado
clsEmpleados[] empleados = new clsEmpleados[4];

//llena el arreglo
empleados[0] = eAsalariado;
empleados[1] = ePorHoras;
empleados[2] = ePorComision;
empleados[3] = eBaseMasComision;

//Muestra el metodo ToString en el richEmpleados


//recorriendo el arreglo
foreach (var empleado in empleados)
{
richEmpleados.AppendText(empleado.ToString());
}

Das könnte Ihnen auch gefallen