MSR Develop Blog

Posts Tagged ‘fundamental

Un componente es una instancia de la clase TComponent o de sus clases hijas. La clase base TComponent implementa el mecanismo de las propiedades y eventos de los componentes.

Propiedades de los componentes

La propiedad de un componente puede ser vista como una variable pública que describe un aspecto específico del componente, como por ejemplo el color de fondo, el tamaño de la fuente, etc. Una propiedad es definida por la existencia de los getters &/o setters que son métodos de encapsulamiento en la clase del componente, veamos:

class TControl extends TComponent {
    public function getID() {
        ...
    }
    public function setID($value) {
        ...
    }
}

Para tener acceso al Get o al Set de la propiedad ID, podrás hacer lo siguiente (como si estuvieras trabajando con una variable) :

$id = $component->ID;
$component->ID = $id;

o también podrás hacerlo de la siguiente manera:

$id = $component->getID();
$component->setID( $id );

Una propiedad es de solo-lectura si tiene un método Get pero no tiene un método Set. Como los métodos en PHP son sensibles a las mayúsculas, los nombres de las propiedades también lo son. Una clase componente hereda todas las propiedades de sus clases *padres*.

SubPropiedades

Una subpropiedad es la propiedad de la propiedad de algún objeto-tipado. Por ejemplo, TWebControl tiene la propiedad Font que es del tipo TFont. Entonces la propiedad Name de Font es referenciada como una subpropiedad con respecto a TWebControl.

Para acceder a la subpropiedad mediante Set o Get se hace de la siguiente manera:

$name = $component->getSubProperty('Font.Name');
$component->setSubProperty('Font.Name', $name);

o también podrás hacerlo de la siguiente manera:

$name = $component->getFont()->getName();
$component->getFont()->setName( $name );

Eventos de los componentes

Los eventos de los componentes son propiedades especiales que toman el nombre de los métodos como valor. Adjuntar(o setear) un método a un evento conectará el método a los lugares en donde el evento ha sido activado.
Por lo tanto, el comportamiento de un componente puede ser modificado de tal forma que no pueda ser visto durante el desarrollo del componente.

Un evento de componente es definido por la existencia de un método el cuál su nombre empieza con la palabra “on”. El nombre del evento es el nombre del método y es sensible a las mayúsculas. Por ejemplo, en TButton, tenemos:

class TButton extends TWebControl {
    public function onClick( $param ) {
        ...
    }
}

Este código define un evento llamado OnClick, y un handler(manejador) puede ser ser adjunto al evento de alguna de estas maneras:

$button->OnClick = $callback;
$button->OnClick->add( $callback );
$button->OnClick[] = $callback;
$button->attachEventHandler( 'OnClick' , $callback );

donde la variable $callback se refiere a un callback (ej: un nombre de función, un método de clase array($objeto,’metodo’), etc.) válido de PHP.

NameSpaces

Un namespace se refiere a un agrupamiento lógico de nombres de clases para que puedan ser diferenciadas unas con otras aún si tienen el mismo nombre. Ya que PHP no soporta namespaces de forma nativa, usted no puede crear instancias de dos clases que tengan el mismo nombre pero diferente comportamiento.

Para diferenciarse de las clases definidas por los usuarios, todas las clases de PRADO tiene la letra ‘T’ al comienzo del nombre. Los usuarios están advertidos de no nombrar a sus clases de esta manera. Pueden hacerlo de cualquier otra forma.

Un namespace en PRADO es considerado un directorio conteniendo uno o mas archivos de clases. Una clase puede ser especificada sin ambiguedad usando el namespace seguido del nombre de la clase. Cada namespace en PRADO es especificado con el siguiente formato: PathAlias.Dir1.Dir2,

donde PathAlias es un alias para cualquier directorio, mientras que Dir1 y Dir2 son subdirectorios bajo ese directorio. Una clase nombrada MiClase definida en el directorio Dir2 puede ser accedida de la siguiente manera: PathAlias.Dir1.Dir2.MiClase

Para usar un namespace en el código puede ser de la siguiente forma:

Prado::using('PathAlias.Dir1.Dir2.*');

lo cual añade el directorio referido por PathAlias.Dir1.Dir2 en el PHP include path, asi las clases definidas bajo ese directorio pueden ser instanciadas sin necesidad de usar el prefijo de namespace. Usted también podrá incluir una definicion de clase individual de la siguiente manera:

Prado::using('PathAlias.Dir1.Dir2.MiClase');

Lo cual incluye la clase MiClase si ya no está definida.
Para mas detalles acerca de definir un alias a las rutas, vea la seccion configuracion de la aplicacion

Instanciar componentes

Instanciar componentes significa crear instancias de las clases de los componentes. Hay dos tipos de componentes instanciados: instancias estáticas e instancias dinámicas. Los componentes creados son llamados estáticos y dinámicos, respectivamente.

Instancias dinámicas de componentes

Instanciar dinamicamente a un componente significa crear instancias del componente en el código PHP. Es lo mismo a lo que comunmente se le llama creación de objetos en PHP u otros lenguajes orientados a objetos.
Un componente puede ser dinamicamente creado usando uno de los siguientes 2 métodos en PHP:

$component = new ComponentClassName;
$component = Prado::createComponent('ComponentType');

donde ComponentType refiere al nombre de una clase o al tipo nombre en un formato de namespace(ej: System.Web.UI.TControl). La segunda manera es para compensar la falta de soporte de namespace en PHP.

Instancias estáticas de componentes

Instanciar estaticamente es crear componentes vía configuraciones. La creación de estas componentes las hace el framework PRADO. Por ejemplo, en una aplicación de configuracion, uno puede configurar un módulo para ser cargado cuando la aplicación corra. El modulo es un componente estático creado por el Framework.

Instancias componentes estaticamente se usa mucho en los templates(plantillas). Cada tag componente en un template especifica un componente que será creado automáticamente por el framework cuando el template sea cargado. Por ejemplo, en una pagina template, el siguiente tag hará que se cree un componente TButton en la página:

<com:TButton Text="Register" />

Artículo: Fundamentals : Components
Traducción: Martin Sagastume Rue (msr)
Fuente: http://www.pradosoft.com/demos/quickstart/index.php?page=Fundamentals.Components

PRADO es principalmente un framework presentacional, aunque no esté limitado a serlo. El framework está enfocado en la programacion web, lo cuál trata todo el tiempo con la interacción del usuario, y está basado en componentes y eventos asi los programadores pueden ser mas productivos. El siguiente arbol de clases muestra casi todas las clases que nos provee PRADO.

classtree

Cuando una aplicación PRADO esta procesando el pedido de una página, el diagrama del objeto static  se muestra de la siguiente manera:

objectdiagram

Artículo: Fundamentals : Architecture
Traducción: Martin Sagastume Rue (msr)
Fuente: http://www.pradosoft.com/demos/quickstart/index.php?page=Fundamentals.Architecture