25 - Constructor de la clase


En C# podemos definir un método que se ejecute inicialmente y en forma automática. Este método se lo llama constructor.

El constructor tiene las siguientes características:

  • Tiene el mismo nombre de la clase.
  • Es el primer método que se ejecuta.
  • Se ejecuta en forma automática.
  • No puede retornar datos.
  • Se ejecuta una única vez.
  • Un constructor tiene por objetivo inicializar atributos.

Problema 1:

Se desea guardar los sueldos de 5 operarios en un vector. Realizar la creación y carga del vector en el constructor.

Programa:

Ver video

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PruebaConstructor1
{
    class Operarios
    {
        private int[] sueldos;

        public Operarios()
        {
            sueldos=new int[5];
            for(int f = 0; f < sueldos.Length; f++) 
            {
                Console.Write("Ingrese el sueldo:");
                string linea = Console.ReadLine();
                sueldos[f]=int.Parse(linea);
            }	
        }

        public void Imprimir() 
        {
            for(int f = 0; f < sueldos.Length; f++)
            {
                Console.WriteLine(sueldos[f]);
            }
            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            Operarios op = new Operarios();
            op.Imprimir();
        }
    }
}

Como podemos ver es el mismo problema que resolvimos cuando vimos vectores. La diferencia es que hemos sustituido el método Cargar con el constructor:

        public Operarios()
        {
            sueldos=new int[5];
            for(int f = 0; f < sueldos.Length; f++) 
            {
                Console.Write("Ingrese el sueldo:");
                string linea = Console.ReadLine();
                sueldos[f]=int.Parse(linea);
            }	
        }

Como la clase se llama Operarios el constructor tiene el mismo nombre, no disponemos la palabra clave void ya que el constructor no puede retornar datos.

La ventaja de plantear un constructor en lugar de definir un método con cualquier nombre es que se llamará en forma automática cuando se crea un objeto de esta clase:

            Operarios op = new Operarios();

Cuando se crea el objeto op se llama al método constructor.

Finalmente llamamos al método imprimir:

            op.Imprimir();

Problema 2:

Plantear una clase llamada Alumno y definir como atributos su nombre y su edad. En el constructor realizar la carga de datos. Definir otros dos métodos para imprimir los datos ingresados y un mensaje si es mayor o no de edad (edad >=18)

Programa:

Ver video

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PruebaConstructor2
{
    class Alumno
    {
        private string nombre;
        private int edad;

        public Alumno() 
        {
            Console.Write("Ingrese nombre:");
            nombre = Console.ReadLine();
            Console.Write("Ingrese edad:");
            string linea = Console.ReadLine();
            edad=int.Parse(linea);
        }

        public void Imprimir()
        {
            Console.WriteLine("Nombre:"+nombre);
            Console.WriteLine("Edad:"+edad);
        }

        public void EsMayorEdad() 
        {
            if (edad >= 18) 
            {
                Console.Write(nombre+" es mayor de edad.");
            }
            else 
            {
                Console.Write(nombre+" no es mayor de edad.");
            }
        }

        static void Main(string[] args)
        {
            Alumno alumno1 = new Alumno();
            alumno1.Imprimir();
            alumno1.EsMayorEdad();
            Console.ReadKey();
        }
    }
}

Declaramos la clase Alumno, sus dos atributos y definimos el constructor con el mismo nombre de la clase:

    class Alumno
    {
        private string nombre;
        private int edad;

        public Alumno() 
        {
            Console.Write("Ingrese nombre:");
            nombre = Console.ReadLine();
            Console.Write("Ingrese edad:");
            string linea = Console.ReadLine();
            edad=int.Parse(linea);
        }

En la main el constructor se llama en forma automática cuando creamos un objeto de la clase Alumno:

        static void Main(string[] args)
        {
            Alumno alumno1 = new Alumno();

Los otros dos métodos deben llamarse por su nombre y en el orden que necesitemos:

            alumno1.Imprimir();
            alumno1.EsMayorEdad();

Problemas propuestos

  1. Confeccionar una clase que represente un empleado. Definir como atributos su nombre y su sueldo. En el constructor cargar los atributos y luego en otro método imprimir sus datos y por último uno que imprima un mensaje si debe pagar impuestos (si el sueldo supera a 3000)

    Ver video

  2. Implementar la clase operaciones. Se deben cargar dos valores enteros en el constructor, calcular su suma, resta, multiplicación y división, cada una en un método, imprimir dichos resultados.

    Ver video

Solución
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PruebaConstructor3
{
    class EmpleadoFabrica
    {
        string nombre;
        float sueldo;
    
        public EmpleadoFabrica() 
        {
            Console.Write("Ingrese el nombre del empleado:");
            nombre = Console.ReadLine();
            Console.Write("Ingrese su sueldo:");
            string linea = Console.ReadLine();
            sueldo = float.Parse(linea);
        }
    
        public void PagaImpuestos() 
        {
            if (sueldo > 3000)
            {
                Console.Write("Debe abonar impuestos");
            }
            else 
            {
                Console.Write("No paga impuestos");
            }
            Console.ReadKey();
        }
    
        static void Main(string[] args)
        {
            EmpleadoFabrica empleado1;
            empleado1 = new EmpleadoFabrica();
            empleado1.PagaImpuestos();
        }
    }
}




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PruebaConstructor4
{
    class OperacionesCalculo
    {
        int valor1, valor2;

        public OperacionesCalculo() 
        {
            Console.Write("Ingrese primer valor:");
            string linea = Console.ReadLine();
            valor1=int.Parse(linea);
            Console.Write("Ingrese segundo valor:");
            linea = Console.ReadLine();
            valor2=int.Parse(linea);
        }

        public void Sumar() 
        {
            int suma;
            suma=valor1+valor2;
            Console.WriteLine("La suma es:"+suma);
        }

        public void Restar() 
        {
            int resta;
            resta=valor1-valor2;
            Console.WriteLine("La resta es:"+resta);
        }

        public void Multiplicar() 
        {
            int multiplicacion;
            multiplicacion=valor1*valor2;
            Console.WriteLine("La multiplicación es:"+multiplicacion);
        }

        public void Dividir()
        {
            int division;
            division=valor1/valor2;
            Console.WriteLine("La división es:"+division);
        }

        static void Main(string[] args)
        {
            OperacionesCalculo opera = new OperacionesCalculo();
            opera.Sumar();
            opera.Restar();
            opera.Multiplicar();
            opera.Dividir();
            Console.ReadKey();
        }
    }
}

Retornar