Foros del Web » Programación para mayores de 30 ;) » Programación General »

Instanciar un objeto de tipo clases abstracta

Estas en el tema de Instanciar un objeto de tipo clases abstracta en el foro de Programación General en Foros del Web. Buenas gente. Viendo este código. Puedo hacer lo que hago en el manejador del evento? Me lo preguntaron en un test y contesté que no ...
  #1 (permalink)  
Antiguo 13/01/2012, 18:42
 
Fecha de Ingreso: julio-2010
Mensajes: 26
Antigüedad: 13 años, 9 meses
Puntos: 0
Instanciar un objeto de tipo clases abstracta

Buenas gente.
Viendo este código. Puedo hacer lo que hago en el manejador del evento? Me lo preguntaron en un test y contesté que no porque las clases abstractas no se pueden instanciar pero .... en este caso que instanciamos? la clase abstracta? o la clase que hereda de la abstracta?


Código:
using System;
using System.Windows.Forms;

namespace ClasesAbstractas
{
    
    abstract class FiguraGeometrica {

        public abstract double Area();    
    }


    class Circulo: FiguraGeometrica   {
        private int radio;


        // A read-write instance property:
        public int Radio  {
            get  {
                return radio; 
            }
            set  {
                radio = value; 
            }
        }


        public Circulo(int r) {
            Radio = r;
        }

        public override double Area()   {
            return (double)(Radio*Radio*3.14);
        }

    }


    //calse tirangulo
    class Triangulo: FiguraGeometrica
    {
    
        //propiedades
        private int ladA;
        private int ladB;
        private int ladC;

        //propiedades
        public int LadoA
        {
            get {
                return ladA; 
            }
            set  {
                ladA = value; 
            }
        }
        public int LadoB   {
            get   {
                return ladB; 
            }
            set   {
                ladB = value; 
            }
        }
        public int LadoC {
            get {
                return ladC; 
            }
            set {
                ladC = value; 
            }
        }


        public Triangulo (int a, int b, int c)
        {
            LadoA = a;
            LadoB = b;
            LadoC = c;
        }

        public override double Area()
        {
            double num, mPer;

            mPer = (double)(LadoA+LadoB+LadoC)/2;

            num = mPer*(mPer-LadoA)*(mPer-LadoB)*(mPer-LadoC);

            if (num <= 0 ) {            
                MessageBox.Show("posiblemente el triangulo no exista, intentelo nuevamente"); 
                return 0;
            }
            else
                return Math.Pow(num,0.5);

        }

    }


    class Cuadrado: FiguraGeometrica 
    {
        //atributos
        private int lado;

        public int Lado {
            get {
                return lado; 
            }
            set  {
                lado = value; 
            }
        }

        public Cuadrado(int l)  {
            Lado = l;
        }

        public override double Area()   {
            return Lado*Lado;
        }

    }
}

private void cmdgetAreaCir_Click(object sender, System.EventArgs e)
{
   //Es correcto? diganme que no
    FiguraGeometrica miFigura = new Cuadrado()
           
}
Saludos
  #2 (permalink)  
Antiguo 14/01/2012, 07:15
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 3 meses
Puntos: 39
Respuesta: Instanciar un objeto de tipo clases abstracta

Si es correcto, lo que no es correcto es:
FiguraGeometrica miFigura = new FiguraGeometrica();
  #3 (permalink)  
Antiguo 14/01/2012, 09:34
 
Fecha de Ingreso: julio-2010
Mensajes: 26
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Instanciar un objeto de tipo clases abstracta

Claro. El tema es que al ser del tipo de la clase abstracta creía que también era importante

Muchas gracias

Saludos
  #4 (permalink)  
Antiguo 14/01/2012, 10:26
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 3 meses
Puntos: 39
Respuesta: Instanciar un objeto de tipo clases abstracta

Lo importante es que lo que hay a la derecha del igual (lo que se instancia) no sea abstracto. Si de FiguraGeometrica heredase la clase Cuadrilatero (que también sería abstracta) y de Cuadrilatero heredase Cuadrado, entonces esto sería incorrecto:
FiguraGeometrica miFigura = new Cuadrilatero();

Pero si serían correctas:
FiguraGeometrica miFigura = new Cuadrado();
Cuadrilatero miFigura = new Cuadrado();
  #5 (permalink)  
Antiguo 14/01/2012, 11:27
 
Fecha de Ingreso: julio-2010
Mensajes: 26
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Instanciar un objeto de tipo clases abstracta

Lo que no me queda muy en claro es que utilidad tiene, ya que si instancio directamente Cuadrado miFigura = new Cuadrado() también tengo acceso a los métodos de la clase abstracta
  #6 (permalink)  
Antiguo 14/01/2012, 13:39
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 3 meses
Puntos: 39
Respuesta: Instanciar un objeto de tipo clases abstracta

Calcular el área de todas las figuras geométricas:
Código:
FiguraGeometrica figura1 = new Cuadrado(5);
FiguraGeometrica figura2 = new Circulo(5);
List<FiguraGeometrica> figuras = new List<FiguraGeometrica>();
figuras.add(figura1);
figuras.add(figura2);
foreach (FiguraGeometrica figura in figuras)
       figura.Area();
Pasar como parámetro una figura geométrica a un método:
Código:
public void realizarOperacion(FiguraGeometrica figura1, FiguraGeometrica figura2) {
   ....
}
Y llamarlo haciendo:
Código:
realizarOperacion(new Cuadrado(5), new Circulo(5));

Intenta hacer esas operaciones sin usar una clase abstracta, verás que complicado es.

Supón que en lugar de cuadrado y circulo usas el triangulo y cualquier otra figura que aun no esta entre esas clases, como por ejemplo un pentágono.
  #7 (permalink)  
Antiguo 15/01/2012, 09:56
 
Fecha de Ingreso: julio-2010
Mensajes: 26
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Instanciar un objeto de tipo clases abstracta

Está bien, me quedó muy claro ahora.
Muchas gracias

Etiquetas: clases, ide, instanciar, objeto, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:51.