---
title: Objetos e interfaces
slug: develop/es/objetos-e-interfaces
docTags: 
createdAt: 2025-03-11T07:07:17.199Z
---

## Objetos BrightScript

Aunque BrightScript funciona independientemente de su arquitectura de objetos y biblioteca, ambas son necesarias para programar aplicaciones BrightScript. La API de una plataforma BrightSign se expone a BrightScript como objetos de biblioteca: Las plataformas deben registrar un nuevo objeto BrightScript para exponer alguna parte de su API.

Los objetos BrightScript están escritos en C (o un lenguaje compatible como C++) y son resistentes a los cambios de versión: Los scripts generalmente son compatibles con versiones anteriores de objetos que han sido revisados. 

Los objetos BrightScript mantienen un recuento de referencias; se eliminan cuando el recuento de referencias llega a cero.

## Objetos Wrapper

Todos los tipos intrínsecos de BrightScript (Boolean, Integer, Float, Double, String e Invalid) tienen equivalentes de objeto. Si uno de estos tipos intrínsecos se pasa a una función que espera un objeto, se creará el objeto wrapper apropiado, se le asignará el valor correcto y se pasará a la función (esto a veces se denomina "autoboxing"): Esto permite, por ejemplo, que los objetos *roArray* almacenen valores (por ejemplo, enteros y cadenas) además de objetos.

Cualquier expresión que espere uno de los tipos anteriores también funcionará con el objeto wrapper correspondiente: *roBoolean*, *roInt*, *roFloat*, *roDouble*, *roString*.

Los siguientes ejemplos ilustran cómo funcionan los objetos wrapper:

```text
Print 5.tostr()+"th"
Print "5".toint()+5
 
-5.tostr()    'This will cause an error. Instead, use the following:
(-5).tostr()
 
if type(5.tostr())<> "String" then stop
if (-5).tostr()<>"-5" then stop
if (1+2).tostr()<>"3" then stop
i=-55
if i.tostr()<>"-55" then stop
if 100%.tostr()<>"100" then stop
if (-100%).tostr()<>"-100" then stop
y%=10
if y%.tostr()<>"10" then stop
      
if "5".toint()<>5 or type("5".toint())<>"Integer" then stop
if "5".tofloat()<>5.0 or type("5".tofloat())<>"Float" then stop
fs="-1.1"
if fs.tofloat()<>-1.1 or fs.toint()<>-1 then stop
      
if "01234567".left(3)<>"012" then stop
if "01234567".right(4)<>"4567" then stop
if "01234567".mid(3)<>"34567" then stop
if "01234567".mid(3,1)<>"3" then stop
if "01234567".instr("56")<>5 then stop
if "01234567".instr(6,"56")<>-1 then stop
if "01234567".instr(0,"0")<>0 then stop
```

## Interfaces

Las interfaces en BrightScript funcionan de manera similar a Java o Microsoft COM: Una interfaz es un conjunto conocido de funciones miembro que implementan un conjunto de lógica. En algunos aspectos, una interfaz es similar a una clase base virtual en C++; cualquier script o programa compatible con C puede usar una interfaz de objeto sin importar el tipo de objeto al que pertenece: Por ejemplo, el objeto *roSerialPort* , que controla la interfaz serial estándar, implementa tres interfaces: *ifSerialControl*, *ifStreamReceive*, e *ifStreamSend*. Dado que la instrucción print envía su salida a cualquier objeto que tenga una interfaz *ifStreamSend* , funciona con el objeto *roSerialPort* , así como con cualquier otro objeto con la interfaz *ifStreamSend*.

## Integración de Instrucciones e Interfaces

Algunas instrucciones BrightScript tienen funcionalidad integrada con interfaces. Esta sección describe cómo usar instrucciones con interfaces.

### PRINT

Usar la instrucción `IMPRIMIR` en el siguiente formato imprimirá en un objeto que tenga una interfaz *ifStreamSend* , incluidos los objetos *roTextField* y *roSerialPort*:

```text
port = CreateObject("roSerialPort",0,115200)
print port, "string"
```

Si la expresión que se imprime se evalúa como un objeto con una interfaz *ifEnum* , la instrucción `IMPRIMIR` imprimirá cada elemento que pueda enumerarse.

Además de imprimir los valores de tipos intrínsecos, la instrucción `IMPRIMIR` también puede usarse para imprimir cualquier objeto que exponga una de las siguientes interfaces: *ifString*, *ifInt*, *ifFloat*.

### WAIT

La instrucción `ESPERA` puede funcionar junto con cualquier objeto que tenga una interfaz *ifMessagePort* .

### Análisis de Expresiones

Cualquier expresión que espere un determinado tipo de variable —incluyendo Integer, Float, Double, Boolean o String— puede aceptar un objeto con una interfaz equivalente de ese tipo: *ifInt*, *ifFloat*, *ifDouble*, *ifBoolean*, *ifString*.

### Operador de Array

El operador de array \[ ] funciona con cualquier objeto que tenga una interfaz *ifArray* o *ifAssociativeArray* , incluidos arrays, arrays asociativos y listas.

### Operador de acceso a miembros

El operador de acceso a miembros (es decir, [Operador de punto](docId\:x0lWrDdqBcT3aZtLEsB1_)) funciona con cualquier objeto que tenga una interfaz *ifAssociativeArray* . También funciona con cualquier objeto cuando se usa para llamar a una función miembro (es decir, un método). También tiene un significado especial cuando se usa en un objeto *roXMLElement* o *roXMLList* .
