lunes, 10 de octubre de 2011

Herencias en C#

Definicion: El mecanismo de herencia es uno de los pilares fundamentales en los que se basa la programación  orientada a objetos. Es un mecanismo que permite definir nuevas clases a partir de otras ya definidas de modo que si en la definición de una clase indicamos que ésta deriva de otra, entonces la primera -a la que se le suele llamar clase hija- será tratada por el compilador automáticamente como si su definición incluyese la definición de la segunda –a la que se le suele llamar clase padre o clase base.
Ej:

Clase madre"Clase persona":
namespace Herencia
{
    class Persona {

        protected String nombre;
        protected String ci;
        
        public Persona() {
            nombre = ci = "";
        }
        public Persona(String n,String c) {

            nombre = n;
            ci = c;
        }
        public void SetPersona(String n, String c)
        {
            nombre = n;
            ci = c;
        }

        public String GetPersona() {

            return "Nombre: " + nombre + "\nCI: " + ci;
        }

    }

}
Clases derivadas o hijas
clase Empleado:

 class Empleado:Persona{

        protected String salario;
        protected String cargo;
        protected DateTime fnacimiento;
        protected int edad;
        

        public Empleado():base(){
            cargo = "";
            salario = "";
            fnacimiento = DateTime.MinValue;
            
        }

        public Empleado(String n,String c,String ca,String s,DateTime fn):base(n,c){
            salario = s;
            cargo = ca;
            fnacimiento = fn;
                
        }
        public void SetEmpleado(String n, String c, String ca, String s,DateTime fn){
            base.SetPersona(n,c);
            
            salario = s;
            cargo = ca;
            fnacimiento = fn;
      }
        
        
        public String GetEmpleado() {
            edad = DateTime.Now.Year - fnacimiento.Year;
            return base.GetPersona() + "\nCargo: " + cargo + "\nSalario: " + salario+"\nFecha De Nacimiento:"+fnacimiento.ToLongDateString()+"\nEdad: "+edad;
        
        }
    }
}
Clase Estudiante:
 class Estudiante :Persona{
       
       protected DateTime fnacimiento;
       protected int edad;
       public int ru;
       protected String carrera;
       protected DateTime f_ingreso;
       protected double nparcial;
       protected double npractica;
       protected double nfinal;
       protected double promedio;
       protected int antiguedad; 



       public Estudiante() : base() {

           
           fnacimiento = DateTime.MinValue;
           ru = 0;
           carrera = "";
           f_ingreso = DateTime.MinValue;
           nparcial = npractica = nfinal = 00;
           
           
           
       }

       public Estudiante(String n,String c,DateTime fn,int ru,String car,DateTime fing,double npa,double npr,double nf):base(n,c) {
           base.SetPersona(n,c);
           fnacimiento = fn;
           this.ru = ru;
           carrera = car;
           f_ingreso = fing;
           nparcial = npa;
           npractica = npr;
           nfinal = nf;
       }


       public void SetEstudiante(String n, String c, DateTime fn, int r, String car, DateTime fing, double npa, double npr, double nf)
       {

           base.SetPersona(n,c);
           
           fnacimiento = fn;
           ru = r;
           carrera = car;
           f_ingreso = fing;
           nparcial = npa;
           npractica = npr;
           nfinal = nf;

       }
       public String GetEstudiante() {

           edad = DateTime.Now.Year - fnacimiento.Year;
           antiguedad = DateTime.Now.Year - f_ingreso.Year;    
           return base.GetPersona() +  "\nFecha de Nacimiento: "+fnacimiento.ToLongDateString()+"\nEdad:"+edad
               +"\nRU:"+ru+"\nCarrera: "+carrera+"\nFecha de Ingreso: "+f_ingreso.ToLongDateString()+"\nNota Parcial: "+nparcial
               +"\nNota Practica: "+npractica+"\nNota Final: "+nfinal+"\nAntiguedad: "+antiguedad;
       
       }

       public String getnombre() {
           return nombre;
       }
       public String   getci()
       {
           return ci ;
       }
       public DateTime getfnacimiento()
       {
           return fnacimiento;
       }
       public int getedad()
       {
           return edad;
       }
       public int getru()
       {
           return ru;
       }
       
       public String getcarrera()
       {
           return carrera;
       }
       public DateTime getfingreso()
       {
           return f_ingreso;
       }
       public double getnparcial()
       {
           return nparcial;
       }
       public double getnpractico()
       {
           return npractica;
       }
       public double getnfinal()
       {
           return nfinal;
       }
       public double getnpromedio()
       {
           return promedio;
       }
       public int getantiguedad() {
           return antiguedad;
       }
       
       public double Calcularpromedio() {
           return promedio=(nparcial * 0.35) + (npractica * 0.35) + (nfinal * 0.30);
       
       }
    }
}
Form1:


En este formulario enlazamos los dos formularios que hemos creado el frmEstudiante y frmEmpleado.

FrmEstudiante:

CÓDIGO FUENTE:

public partial class FrmEstudiante : Form
    {


        public void Combocarrera() {
            cbcarrera.Items.Add("Ingenieria de sistemas");
            cbcarrera.Items.Add("Ingenieria Agronoma");
            cbcarrera.Items.Add("Ingenieria Civil");
            cbcarrera.Items.Add("Derecho");
            cbcarrera.Items.Add("Bioquimica");
        
        }

        public void limpiar() {
            txtnombreE.Clear();
            txtciE.Clear();
            txtru.Clear();
            txtnparcial.Clear();
            txtnpractica.Clear();
            txtnfinal.Clear();
         
           
        
        }
        public FrmEstudiante()
        {
            InitializeComponent();
        }

        private void FrmEstudiante_Load(object sender, EventArgs e)
        {
            Combocarrera();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Estudiante Es = new Estudiante((txtnombreE.Text), (txtciE.Text), DateTime.Parse(dtpfn.Text), int.Parse(txtru.Text), cbcarrera.Text, DateTime.Parse(dtpingreso.Text), double.Parse(txtnparcial.Text), double.Parse(txtnpractica.Text), double.Parse(txtnfinal.Text));
                MessageBox.Show(Es.GetEstudiante()+"\nPromedio: "+Es.Calcularpromedio(), "Datos del Estudiante");
                String[] fila=new String[] {Es.getnombre(),Es.getci(),Es.getru().ToString(),Es.getfnacimiento().ToShortDateString(),Es.getcarrera(),Es.getnparcial().ToString(),Es.getnpractico().ToString(),Es.getnpromedio().ToString(),Es.getnfinal().ToString(),Es.getedad().ToString(),Es.getfingreso().ToShortDateString(),Es.getantiguedad().ToString()};
                dataGridView1.Rows.Add(fila);
                limpiar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "ERROR");
            }
           
            
            }
            
            }

        }
    
FrmEmpleado:



Codigo fuente:

public partial class FrmEmpleado : Form
    {

        public void Combocargo() {

            cbcargo.Items.Add("Abogado");
            cbcargo.Items.Add("Ingeniero");
            cbcargo.Items.Add("Secretaria");
            cbcargo.Items.Add("Mensajero");
    
        
        }

        public void Combosalario() {
            cbsalario.Items.Add("1000 Bs");
            cbsalario.Items.Add("2000 Bs");
            cbsalario.Items.Add("3000 Bs");
            cbsalario.Items.Add("4000 Bs");
        
        
        }
        public FrmEmpleado()
        {
            InitializeComponent();
        }

        private void FrmEmpleado_Load(object sender, EventArgs e)
        {
            Combocargo();
            Combosalario();
            
        }

        private void cbcargo_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void btnsalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnmostrar_Click(object sender, EventArgs e)
        {
            try {

                Empleado Em = new Empleado((txtnombre.Text),(txtci.Text),cbcargo.Text,cbsalario.Text,DateTime.Parse(dtpfecha.Text));
                MessageBox.Show(Em.GetEmpleado(),"Datos del Empleado");
                
             }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "ERROR");
            }
            
        }

    }
}









Programación visual en C#

Clases compuestas:
Son aquellas clases que tienen como tipo de atributo a otra clase
a continuación veremos un ejemplo de una clase compuesta:
CLASE DISCO DURO:

  class DiscoDuro
    {
        private int nplatos;
        private String capacidad;
        private String fabricanteDD;


        //--------------------------------
        DiscoDuro() {
            nplatos = 0;
            capacidad = fabricanteDD = "";
        }


        public DiscoDuro(int np,String ca,String fa) {
            nplatos = np;
            capacidad = ca;
            fabricanteDD = fa;
            
        }
        public void setDiscoDuro(int np, String ca, String fa)
        {
            nplatos = np;
            capacidad = ca;
            fabricanteDD = fa;
        }
        public String getDiscoDuro() {
        
            return "NPlatos:"+nplatos+"\nCapacidad:"+capacidad+"\nFabricante:"+fabricanteDD;
        }


    }
}


CLASE TARJETA MADRE:

 class TarjetaMadre
    {
        private int NRanurasPCI;
        private int NRanurasAGP;
        private String fabricante;
        private int NPuertosUAB;


        public TarjetaMadre() {
            NRanurasAGP = NRanurasPCI = NPuertosUAB = 0;
            fabricante = "";
        }


        public TarjetaMadre(int pci,int agp,String fa,int usb ) {
            NRanurasPCI = pci;
            NRanurasAGP = agp;
            fabricante = fa;
            NPuertosUAB = usb;
        }
        public void setTarjetaMadre(int pci, int agp, String fa, int usb)
        {
            NRanurasPCI = pci;
            NRanurasAGP = agp;
            fabricante = fa;
            NPuertosUAB = usb;
        }
        public String getTarjetaMadre() {
            return "\nPCI:" + NRanurasPCI + "\nAGP" + NRanurasAGP + "\nFabricante:" + fabricante + "\nUSB:" + NPuertosUAB;
        }
    }
}


CLASE PROCESADOR:
class Procesador{
        public String frecuencia;
        public String fabricante;

        public Procesador() {
            frecuencia = fabricante = "";
        }
        public Procesador(String fre,String fa){
            frecuencia =fre;
            fabricante = fa;
        }
        public void SetProcesador(String fre, String fa){
            frecuencia = fre;
            fabricante = fa;
        }
        public String GetProcesador() {
            return "Frecuencia:" + frecuencia + "\nFabricante:" + fabricante;
        }

    }
}
CLASE COMPUTADOR: 
La clase computador es la clase principal de donde sus tipos de atributos pertenecen a una clase.
 class Computadora
    {
        private TarjetaMadre tm;
        private DiscoDuro dd;
        private DateTime fecha;

        //-----------------------

        public Computadora() {
            tm = new TarjetaMadre();
            dd = new DiscoDuro(0, "", "");
            fecha = DateTime.MinValue;
        }

        public Computadora(int pci, int agp, String fa, int usb, int np, String ca, String fab, DateTime fe)
        {
            tm = new TarjetaMadre(pci, agp, fa, usb);
            dd = new DiscoDuro(np, ca, fab);
            fecha = fe;
        }


        //---------------------------
        public void setComputadora(int pci, int agp, String fa, int usb, int np, String ca, String fab,DateTime fe)
        {
            tm = new TarjetaMadre(pci, agp, fa, usb);
            dd = new DiscoDuro(np, ca, fab);
            fecha = fe;
        }

        public String getComputadora() { 
            return "\nTarjeta:"+tm.getTarjetaMadre()+"\nDisco Duro:"+dd.getDiscoDuro()+"\nFEcha Compra:"+fecha.ToLongDateString();
        }
    }
}
Formulario1:
En este formulario se enlaza todos los demás formularios que deseemos crear,  añadiendo un menú y se hace de esta manera:

private void computadoraToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmComputadora pc = new frmComputadora();
            pc.Show();
        }
FORMULARIO COMPUTADORA:
En este formulario agregamos 2 group box y de a una etiqueta para cada combo box , text box y date time picker, luego programamos el boton salir y el boton crear para que nos muestre todo los datos que introduscamos.


BOTÓN 
 SALIR:


 private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

BOTÓN
CREAR:
 private void btnCrear_Click(object sender, EventArgs e)
        {
            try
            {
                Computadora pc = new Computadora(int.Parse(txtPCI.Text), int.Parse(txtAGP.Text), cbFabTarjeta.Text, int.Parse(txtUSB.Text),int.Parse(txtNPlatos.Text),cbCapacidadDD.Text,cbFabricanteDD.Text, DateTime.Parse(dtpFecha.Text));
                MessageBox.Show(pc.getComputadora(), "Datos de la Computadora");
            }
            catch (Exception ex) {
                MessageBox.Show(ex.ToString(),"ERROR");
            }
        }
LLENADO DE LOS COMBO BOX:
 public partial class frmComputadora : Form
    {

        //-------metodos propios

        public void ComboFabricanteTarjeta() {
            cbFabTarjeta.Items.Add("AsRock");
            cbFabTarjeta.Items.Add("Intel");
            cbFabTarjeta.Items.Add("PCChip");
        
        }

        public void ComboCapacidadDD() {
            cbCapacidadDD.Items.Add("80 Gb");
            cbCapacidadDD.Items.Add("160 Gb");
            cbCapacidadDD.Items.Add("320 Gb");
            cbCapacidadDD.Items.Add("500 Gb");
        }


        public void ComboFabricanteDD() {
            cbFabricanteDD.Items.Add("Samsung");
            cbFabricanteDD.Items.Add("Maxtor");
            cbFabricanteDD.Items.Add("Seagate");
        }



Luego los llamamos en la función load para cuando ejecute nuestra aplicación cargue nuestros combo box