Acerca de...
El equipo
Encuestas
WinTablets

Encuesta

Si las WINTABLETs no pudiesen ejecutar aplicaciones de escritorio, ¿las seguirías usando?

Cargando ... Cargando ...

últimas entradas importantes

Categorías

Archivos

02
Ago 2014
Desarrollorfogdevtrucos

Desarrollo: Ocultar una propiedad heredada

Este problema suele darse cuando creas un nuevo control a partir de uno ya existente por la vía de heredar y no de agregar, aunque también podría ocurrir en cualquier tipo de herencia. De todos modos la ocultación no puede ser completa ya que el lenguaje no lo soporta. Digamos que es un pequeño truquillo.

Primero os explico la diferencia entre herencia y agregación respecto a los controles de Windows Phone (y Windows), y luego os enseño el truco.

Uno de los puntales básicos de la orientación a objetos es la herencia. Para los legos se trata de tomar algo ya hecho, hacer un hijo de ello y cambiar ciertas partes de su comportamiento. En general, pero no siempre, se trata de ampliarlo.

No sé realmente quién inventó la herencia visual. Sé que uno de los primeros fue Delphi seguido de C++Builder, e ignoro si el Visual Basic de Microsoft llegó a implementarla o no.

Básicamente se trata de heredar un control gráfico (que puede ser un Form o Page  completo) y cambiar su comportamiento, añadiendo y ocultando propiedades. No os confundáis, esto que puede parecer evidente no lo era tanto, y de hecho a Microsoft le costó varias versiones de .NET que la cosa funcionara como debe, y aun a fecha de hoy…

(No entraremos en detalles en el hecho de que en Delphi y C++Builder aquello función perfecto desde el primer día).

Resumiendo, una forma de obtener un control nuevo es heredar de uno viejo y cambiar su comportamiento, igual que heredamos de una clase cualquiera. De hecho un control es una clase. Que no sea un solo fichero de texto y mezcle XAML en una especie de hibridación es incidental. Delphi también lo hacía.

Este tipo de creación de controles es completamente no visual y se suele hacer cuando queremos modificar el comportamiento de un control o su aspecto si se trata de pequeños cambios cosméticos.

La otra forma de crear controles es mediante la agregación. Es decir, cogemos varios controles existentes y los juntamos, creando otro nuevo que contenga la combinación de ambos gracias al uso de un contenedor.

Esto se suele hacer de forma visual y en el caso de .NET para Windows Phone y Windows mediante XAML mezclado con código en C# o VB.NET. Personalmente añoro la herencia múltiple de C++, que habría facilitado enormemente este tipo de creaciones.

Crear un control de este tipo es relativamente fácil, yéndonos al explorador de soluciones y añadiendo un elemento nuevo del tipo “Control de usuario”. Esto nos crea algo como la captura de pantalla.

Pasted Graphic

A partir de ahí podemos soltar controles existentes y ajustarlos a nuestro antojo. También podemos dejar la cosa así, accediendo a cada control añadido de forma manual a través del propio control de usuario, ya sabéis:

 

M_controlDeUsuario.TextBox.Text=“Hola mundo”;

 

Pero lo suyo es crearnos propiedades (reflejadas o no) y nuestros métodos. Más adelante quizás explique cómo hacerlo, pero ahora se escapa del ámbito de esta entrada.

Volviendo al tema de la ocultación de propiedades heredadas, supongamos el código siguiente:

 

    internalclassClaseBase
    {
        public int Veces { get; set; }
 
        public int VecesReales { get; set; }
    }
 
    internalclassClaseHeredada:ClaseBase
    {
        public new int Veces
        {
            get;
            private set;
 
        }
    }

 

Fijáos en la captura de pantalla:

Pasted Graphic 2

Como veis, acabamos de forzar que no se pueda asignar dicha propiedad. También podemos forzar que no se pueda leer, pero no ambas cosas a la vez.

Si cambiamos su tipo de público a privado, el código de la derecha accederá a la propiedad de la clase base en lugar a la de la hija.

Es una limitación de C# que podemos soslayar un poco. Quizás en versiones futuras podamos hacerlo igual que se realiza con métodos.

Y no, tampoco podemos sobrecargar los métodos set_ y get_ ocultos. El compilador no nos deja. ¿De qué estoy hablando con es de los métodos ocultos? Eso es ejercicio para vosotros. Un gallifante para quien lo adivine. :-D

 

Por RFOG | 6 Comentarios | Enlaza esta entrada

6 Comentarios

Quique
Enviado el 02/08/2014 a las 17:23 | Permalink

Me parece que el primero fue NextStep, lanzado en 1988 y disponible a partir de 1989 junto a la Next Cube.

    RFOG
    Enviado el 02/08/2014 a las 20:28 | Permalink

    ¿Herencia visual? Heredar un control cambiando alguna propiedad, de forma visual con un entorno de desarrollo que te muestre los cambios de la herencia?

      Quique
      Enviado el 02/08/2014 a las 20:52 | Permalink

      No voy a poder responder a su pregunta.
      Mi conocimiento sobre desarrollo es demasiado básico como para responder con propiedad.
      Lo que me veo obligado a sugerir es que google un poco para conocer alguna exposición sobre cómo se desarrollaba en NextStep. Así podrá obtener una respuesta.

      Según mi recuerdo y entendimiento, su rápida solución de desarrollo visual orientado a objetos permitía crear o actualizar aplicaciones en un sexto del tiempo que en otros sistemas de su tiempo.
      Supuestamente ayudaba a eso que se podía reutilizar código, que fuera orientado a objetos, que fuera visual, que se pudiera probar la aplicación antes de compilar y, no menor, que estaba fusionado el software de desarrollo en el propio sistema operativo.
      Esta serían las razones por la que allí nacieron Mathematica, Lotus Improv y la propia Web.
      El rápido flujo de desarrollo era una ventaja competitiva de ese sistema operativo y/o en las que fue pionero.

        Quique
        Enviado el 02/08/2014 a las 20:55 | Permalink

        Hasta hay un video donde desarrollan aplicaciones en forma estrictamente visual.
        Tiraba un icono y una ventana en el escritorio, luego con el mouse hacían unas lineas para conectarlos a ambos y, supuestamente, todo el código se creaba automáticamente a partir de allí. Sin que el programador tuviera que hacer nada adicional.

          RFOG
          Enviado el 02/08/2014 a las 20:59 | Permalink

          Pues entonces lo más posible es que sí fuera visual.

          ¿Qué puñetas no habrá salido de Xerox Palo Alto? Hay que joderse, todos reinventando lo que inventaron esos señores.

          Quique
          Enviado el 02/08/2014 a las 21:24 | Permalink

          Por lo que tengo entendido, en parte sí y en parte no.
          Si tenía un lenguaje de programación visual en Xerox. Pero por lo que tengo entendido, no era programación orientada a objetos ni era visual en el sentido moderno del término.
          Por lo que yo tengo entendido, el NextStep fue el primero en su tipo. Pero puedo estar equivocado.

          En una entrevista a Steve Jobs de 1990 contó que Xerox había desarrollado tres tecnologías. La primera, la interfaz gráfica de usuario con el mouse. La segunda, la computación en red (Ethernet, redes par a par, cliente/servidor, etc.). La tercera, la programación visual.
          Jobs agrega que cuándo visito Palo Alto quedo tan impresionado con la interfaz gráfica de usuario que no pudo ver el resto del bosque. También dijo que en el Macintosh era tan limitado el hardware que no se podía siquiera soñar con la programación visual.
          Finalmente, mencionaba que, por “olvido” y por necesidad, haber dejado de lado la computación en red y la programación visual se había transformado en un problema que impedía la evolución de la Macintosh.
          Steve Jobs concluía que con NextStep corregían el error histórico de la Macintosh.

          Así que, en palabras de Steve Jobs, Xerox ya había dado inició a eso.
          Pero cuando se investiga la historia de NextStep, resulta ser que la adopción del lenguaje C-Object (o algo así) es de cosecha propia a partir de recular a investigadores de universidades que estaban abordando este problema. En pocas palabras, los objetos propiamente dichos no serían de Xerox, sino que sería algo nuevo de la década de 1980 que sale al mercado por primera vez en NextStep.
          Lo mismo sería respecto a la “programación visual” consistente en conectar diversos objetos trazando lineas que los unieran.

          Aclaración. A mi me gusta la historia por lo que leo mucho de estas cosas. Pero también las interpreto a mi manera, pues soy autodidacta. Y muchas cosas no tengo el nivel técnico para analizarlas con propiedad. Por ello le sugiero que investigue un poco usted y confirme, o no, lo que escribo.
          Quizás le este errando fiero y usted descubra el error y pueda corregir mi interpretación de la historia.

Deja un comentario  

Tu email nunca se publica o se comparte. Los campos obligatorios están marcados con *

*
*
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:
Puedes usar las siguientes etiquetas y atributos HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

contacto@wintablet.info tema WinTablet.info por Ángel García (Hal9000)