Mostrando entradas con la etiqueta clases en c#. Mostrar todas las entradas
Mostrando entradas con la etiqueta clases en c#. Mostrar todas las entradas

Clase Parcial (Partial Class) en C#

El lenguaje C# permite la implementación de una clase en dos o más archivos. Para esto hay que agregarle el modificador partial cuando declaramos la clase.
Este concepto es ámpliamente utilizado por el entorno del Visual Studio .Net en la generación de interfaces visuales.
Como veremos en conceptos futuros es necesario presentar "partial class" para su entendimiento.
Una clase parcial no es más ni menos que crear una clase completa y luego agrupar métodos y propiedades en dos o más archivos.

Ejercicios de Clases en C#

Ejemplo 1

Plantear una clase Rectángulo, definir dos propiedades: Lado1 y Lado2. Definir dos métodos RetornarSuperficie y RetornarPerimetro. Dividir la clase en dos archivos utilizando el concepto de "partial class".

Programa.cs

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

namespace ClaseParcial
{
    class Program
    {
        static void Main(string[] args)
        {
            Rectangulo rectangulo1 = new Rectangulo();
            rectangulo1.Lado1 = 5;
            rectangulo1.Lado2 = 10;
            Console.WriteLine("La superficie del rectángulo es:" +
                                rectangulo1.RetornarSuperficie());
            Console.WriteLine("El perímetro del rectángulo es:" +
                                rectangulo1.RetornarPerimetro());
            Console.ReadKey();
        }
    }
}


Clase1.cs

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

namespace ClaseParcial
{
    partial class Rectangulo
    {
        private int lado1;
        public int Lado1
        {
            set
            {
                lado1 = value;
            }
            get
            {
                return lado1;
            }
        }
        private int lado2;
        public int Lado2
        {
            set
            {
                lado2 = value;
            }
            get
            {
                return lado2;
            }
        }
    }
}

Clase2.cs

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

namespace ClaseParcial
{
    partial class Rectangulo
    {
        public int RetornarSuperficie()
        {
            int sup = Lado1 * Lado2;
            return sup;
        }

        public int RetornarPerimetro()
        {
            int per = Lado1 * 2 + Lado2 * 2;
            return per;
        }
    }
}

El resultado al ejecutar el programa es:

Ejercicios con Clases en C#

Normalmente un problema resuelto con la metodología de programación orientada a objetos no interviene una sola clase, sino que hay muchas clases que interactúan y se comunican. Plantearemos un problema separando las actividades en dos clases.

Ejemplo 1

Un banco tiene 3 clientes que pueden hacer depósitos y extracciones. También el banco requiere que al final del día calcule la cantidad de dinero que hay depositada.

La Solución tendrá el siguiente esquema: Debemos definir los atributos y los métodos de cada clase:

Cliente
    atributos
        nombre
        monto
    métodos
        constructor
        Depositar
        Extraer
        RetornarMonto

Banco
    atributos
        3 Cliente (3 objetos de la clase Cliente)
    métodos
        constructor
        Operar
        DepositosTotales

Solución en C#

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

namespace EjerciciosconClases
{
    class Cliente
    {
        private string nombre;
        private int monto;

        public Cliente(string nom)
        {
            nombre = nom;
            monto = 0;
        }

        public void Depositar(int m)
        {
            monto = monto + m;
        }

        public void Extraer(int m)
        {
            monto = monto - m;
        }

        public int RetornarMonto()
        {
            return monto;
        }

        public void Imprimir()
        {
            Console.WriteLine(nombre + " tiene depositado la suma de " + monto);
        }
    }

    class Banco
    {
        private Cliente cliente1, cliente2, cliente3;

        public Banco()
        {
            cliente1 = new Cliente("Yhonas");
            cliente2 = new Cliente("Ana");
            cliente3 = new Cliente("Pedro");
        }

        public void Operar()
        {
            cliente1.Depositar(100);
            cliente2.Depositar(150);
            cliente3.Depositar(200);
            cliente3.Extraer(150);
        }

        public void DepositosTotales()
        {
            int t = cliente1.RetornarMonto() +
                    cliente2.RetornarMonto() +
                    cliente3.RetornarMonto();
            Console.WriteLine("El total de dinero en el banco es:" + t);
            cliente1.Imprimir();
            cliente2.Imprimir();
            cliente3.Imprimir();
        }

        static void Main(string[] args)
        {
            Banco banco1 = new Banco();
            banco1.Operar();
            banco1.DepositosTotales();
            Console.ReadKey();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado



Ejemplo 2

Plantear un programa que permita jugar a los dados. Las reglas de juego son: se tiran tres dados si los tres salen con el mismo valor mostrar un mensaje que "gano", sino "perdió".
Lo primero que hacemos es identificar las clases:
Luego los atributos y los métodos de cada clase:

Dado
    atributos
        valor
    métodos
        constructor
        Tirar
        Imprimir
        RetornarValor

JuegoDeDados
    atributos
        3 Dado (3 objetos de la clase Dado)
    métodos
        constructor
        Jugar

Solución en C#

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

namespace EjerciciosconClases
{
    class Dado
    {
        private int valor;
        private static Random aleatorio;

        public Dado()
        {
            aleatorio = new Random();
        }

        public void Tirar()
        {
            valor = aleatorio.Next(1, 7);
        }

        public void Imprimir()
        {
            Console.WriteLine("El valor del dado es:" + valor);
        }

        public int RetornarValor()
        {
            return valor;
        }
    }

    class JuegoDeDados
    {
        private Dado dado1, dado2, dado3;

        public JuegoDeDados()
        {
            dado1 = new Dado();
            dado2 = new Dado();
            dado3 = new Dado();
        }

        public void Jugar()
        {
            dado1.Tirar();
            dado1.Imprimir();
            dado2.Tirar();
            dado2.Imprimir();
            dado3.Tirar();
            dado3.Imprimir();
            if (dado1.RetornarValor() == dado2.RetornarValor() &&
                dado1.RetornarValor() == dado3.RetornarValor())
            {
                Console.WriteLine("Ganó");
            }
            else
            {
                Console.WriteLine("Perdió");
            }
            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            JuegoDeDados j = new JuegoDeDados();
            j.Jugar();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado

Constructores en C#

Cada vez que se crea una clase o estructura, se llama a su constructor. Una clase o estructura puede tener varios constructores que toman argumentos diferentes. Los constructores permiten al programador establecer valores predeterminados, limitar la creación de instancias y escribir código flexible y fácil de leer.

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.

Sintaxis de un Constructor en C#

Modificador NombredelaClase (Parámetros)
{
   Instrucciones
}

Veamos un Ejemplo de un constructor en C#

using System;

namespace constructores
{
    class EjConstructor
    {
        int a;
        int b;
        //declaramos el constructor
        public EjConstructor(int x, int y)
        {
            a = x;
            b = y;
        }
        public int Suma()
        {
            return a + b;
        }

        public int resta()
        {
            return a - b;
        }

        class Principal
        {
            static void Main(string[] args)
            {
                //creamos objeto de la clase y le pasamos los parametros al constructor
                EjConstructor obj = new EjConstructor(10, 20);
                Console.WriteLine("La suma es: "+obj.Suma());
                Console.WriteLine("La resta es: "+obj.resta());
                Console.ReadKey();
            }
        }
    }
}

Al ejecutar el código muestra el siguiente resultado


El ejemplo es sencillo para que pueda comprenderse creamos una clase EjConstructor con 2 variables enteras, luego definimos el constructor con 2 parámetros observen que tiene el mismo nombre de la clase eso tiene que ser así obligatoriamente, también tenemos un método Suma y un método resta que lo único que hace es realizar una suma y la resta sucesivamente.Luego en la clase Principal al momento de crear el objeto de la clase le pasamos los parámetros de una sola vez al constructor, y después solo imprimimos el resultado de la suma y la resta del método Suma y resta.

Ejercicios Resueltos de Constructores en C# 

Ejemplo 1

Realizar un programa que ingrese los sueldos de 5 operarios en un vector. Realizar la creación y carga del vector en el constructor.

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

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

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

        public void Imprimir()
        {
            Console.WriteLine("Los Sueldos Ingresados.");
            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();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado


Explicación: 
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();

Ejemplo 2

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

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

namespace PruebaConstructor
{
    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();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado



Explicación: 
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();


Clases en C#

La programación orientada a objetos se basa en la programación de clases; a diferencia de la programación estructurada, que está centrada en las funciones.

Clase en C#

Una clase es un molde del que luego se pueden crear múltiples objetos, con similares características.
Una clase es una plantilla (molde), que define atributos (variables) y métodos (funciones)
La clase define los atributos y métodos comunes a los objetos de ese tipo, pero luego, cada objeto tendrá sus propios valores y compartirán las mismas funciones.

Debemos crear una clase antes de poder crear objetos (instancias) de esa clase. Al crear un objeto de una clase, se dice que se crea una instancia de la clase o un objeto propiamente dicho.

La sintaxis de una clase en c# es:

            class [nombre de la clase] {
               [atributos o variables de la clase]
              [métodos o funciones de la clase]
            [main]
            }

Definición de un Método en C#

Un método es un conjunto de instrucciones a las que se les asocia un nombre de modo que si se desea ejecutarlas basta referenciarlas a través de dicho nombre en vez de tener que escribirlas. Dentro de estas instrucciones es posible acceder con total libertad a la información almacenada en los campos pertenecientes a la clase dentro de la que el método se ha definido, los métodos permiten manipular los datos almacenados en los objetos. 

Estructura de una Clase en C#

Los componentes principales de una clase, que a partir de ahora llamaremos miembros, son:

Atributos, que determinan una estructura de almacenamiento para cada objeto de la clase.

Métodos, que no son m´as que operaciones aplicables sobre los objetos. 

Para entender mejor el temo sobre las clases veremos algunos ejemplos 

Ejercicios Resueltos de Clases en C# 

Ejemplo 1

Desarrollar un programa que permita ingresar los lados de un triángulo e implemente los siguientes métodos: inicializar los atributos, imprimir el valor del lado mayor y otro método que muestre si es equilátero o no.

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

namespace PruebaClase
{
    class Triangulo
    {
        private int lado1, lado2, lado3;
        //Metodo inicializar
        public void Inicializar()
        {
            string linea;
            Console.Write("Ingrese lado 1:");
            linea = Console.ReadLine();
            lado1 = int.Parse(linea);
            Console.Write("Ingrese lado 2:");
            linea = Console.ReadLine();
            lado2 = int.Parse(linea);
            Console.Write("Ingrese lado 3:");
            linea = Console.ReadLine();
            lado3 = int.Parse(linea);
        }
        //Metodo lado mayor
        public void LadoMayor()
        {
            Console.Write("Lado mayor:");
            if (lado1 > lado2 && lado1 > lado3)
            {
                Console.WriteLine(lado1);
            }
            else
            {
                if (lado2 > lado3)
                {
                    Console.WriteLine(lado2);
                }
                else
                {
                    Console.WriteLine(lado3);
                }
            }
        }
        //Metodo es equilatero
        public void EsEquilatero()
        {
            if (lado1 == lado2 && lado1 == lado3)
            {
                Console.Write("Es un triángulo equilátero");
            }
            else
            {
                Console.Write("No es un triángulo equilátero");
            }
        }

        static void Main(string[] args)
        {
            Triangulo triangulo1 = new Triangulo();
            triangulo1.Inicializar();
            triangulo1.LadoMayor();
            triangulo1.EsEquilatero();
            Console.ReadKey();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado


Este problema requiere definir tres atributos de tipo entero donde almacenamos los valores de los lados del triángulo:

          private int lado1, lado2, lado3;

El primer método que deberá llamarse desde la main es el Inicializar donde cargamos los tres atributos por teclado:

       public void Inicializar()  {}

El método LadoMayor muestra el valor mayor de los tres enteros ingresados:

       public void LadoMayor() {}

Como podemos observar cuando un problema se vuelve más complejo es más fácil y ordenado separar los distintos algoritmos en varios métodos y no codificar todo en la main.

El último método de esta clase verifica si los tres enteros ingresados son iguales:

       public void EsEquilatero() {}

En la main creamos un objeto de la clase Triangulo y llamamos los métodos respectivos:

static void Main(string[] args)
        {
            Triangulo triangulo1 = new Triangulo();
            triangulo1.Inicializar(); //llamando al método inicializar()
            triangulo1.LadoMayor(); //llamando al método LadoMayor()
            triangulo1.EsEquilatero(); //llamando al método EsEquilatero()
            Console.ReadKey();
        }


Ejemplo 2

Realizar un programa que tenga una clase que permita ingresar el nombre y la edad de una persona. Mostrar los datos ingresados. Imprimir un mensaje si es mayor de edad (edad>=18)

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

namespace PruebaClase
{
    class Persona
    {
        private string nombre;
        private int edad;
        //Método Inicializar()
        public void Inicializar()
        {
            Console.Write("Ingrese nombre:");
            nombre = Console.ReadLine();
            string linea;
            Console.Write("Ingrese edad:");
            linea = Console.ReadLine();
            edad = int.Parse(linea);
        }
        //Método Imprimir()
        public void Imprimir()
        {
            Console.Write("Nombre:");
            Console.WriteLine(nombre);
            Console.Write("Edad:");
            Console.WriteLine(edad);
        }
        //Método es EsMayorEdad()
        public void EsMayorEdad()
        {
            if (edad >= 18)
            {
                Console.Write("Es mayor de edad");
            }
            else
            {
                Console.Write("No es mayor de edad");
            }
            Console.ReadKey();
        }
        // Main principal del programa
        static void Main(string[] args)
        {
            Persona per1 = new Persona();
            per1.Inicializar(); //Llamando al método Inicializar();
            per1.Imprimir();    //Llamando al método Imprimir();
            per1.EsMayorEdad(); //Llamando al método EsMayorEdad
        }
    }
}


Al ejecutar el código muestra el siguiente resultado



Ejemplo 3

Desarrollar un programa que tenga una clase que represente un Cuadrado y tenga los siguientes métodos: ingresar  valor a su lado, imprimir su perímetro y su superficie.

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

namespace PruebaClase
{
    class Cuadrado
    {
        private int lado;
        //método Inicializar()
        public void Inicializar()
        {
            Console.Write("Ingrese valor del lado:");
            string linea;
            linea = Console.ReadLine();
            lado = int.Parse(linea);
        }
        //Método ImprimirPerimetro()
        public void ImprimirPerimetro()
        {
            int perimetro;
            perimetro = lado * 4;
            Console.WriteLine("El perímetro es:" + perimetro);
        }
        //Método ImprimirSuperficie()
        public void ImprimirSuperficie()
        {
            int superficie;
            superficie = lado * lado;
            Console.WriteLine("La superficie es:" + superficie);
        }
        //Main() principal del programa
        static void Main(string[] args)
        {
            Cuadrado cuadrado1 = new Cuadrado();
            cuadrado1.Inicializar();        //Llamando al método Inicializar();
            cuadrado1.ImprimirPerimetro();  //Llamando al método ImprimirPerimetro();
            cuadrado1.ImprimirSuperficie(); //Llamando al método ImprimirSuperficie();
            Console.ReadKey();
        }
    }
}


Al ejecutar el código muestra el siguiente resultado



Ejemplo 4

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

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

namespace PruebaClase
{
    class Operaciones
    {
        private int valor1, valor2;
        // Método Inicializar()
        public void Inicializar()
        {
            string linea;
            Console.Write("Ingrese primer numero:");
            linea = Console.ReadLine();
            valor1 = int.Parse(linea);
            Console.Write("Ingrese segundo numero:");
            linea = Console.ReadLine();
            valor2 = int.Parse(linea);
        }
        // Método Sumar()
        public void Sumar()
        {
            int suma;
            suma = valor1 + valor2;
            Console.WriteLine("La suma es:" + suma);
        }
        //Método Restar()
        public void Restar()
        {
            int resta;
            resta = valor1 - valor2;
            Console.WriteLine("La resta es:" + resta);
        }
        // Método Multiplicar()
        public void Multiplicar()
        {
            int multiplicacion;
            multiplicacion = valor1 * valor2;
            Console.WriteLine("La multiplicación es:" + multiplicacion);
        }
        //Método Dividir()
        public void Dividir()
        {
            int division;
            division = valor1 / valor2;
            Console.WriteLine("La división es:" + division);
        }
        // Main() principal del programa
        static void Main(string[] args)
        {
            Operaciones operacion1 = new Operaciones();
            operacion1.Inicializar();    // Llamando al método Inicializar();
            operacion1.Sumar();          // Llamando al método Sumar();
            operacion1.Restar();         // Llamando al método Restar();
            operacion1.Multiplicar();    // Llamando al método Multiplicar();
            operacion1.Dividir();        // Llamando al método Dividir();
            Console.ReadKey();
        }
    }
}


Al ejecutar el código muestra el siguiente resultado