S2 (Style System 2) es un lenguaje de programación orientado a objetos desarrollado a fines de la década de 1990 por Brad Fitzpatrick , Martin "Mart" Atkins y otros para el servicio de diario en línea LiveJournal con el fin de permitir a los usuarios un control total sobre la apariencia de sus páginas. El código fuente de S2 se compila en Perl , que el servidor web puede ejecutar directamente para solicitudes de páginas web individuales .
Paradigma | Orientado a objetos |
---|---|
Desarrollador | Brad Fitzpatrick y Martin Atkins |
Apareció por primera vez | 1999 |
Sitio web | www |
El sistema S2 es, en esencia, completamente general y se puede utilizar para casi cualquier aplicación web ; sin embargo, no existe documentación para la implementación de S2 en otras aplicaciones, lo que lo vincula relativamente con LiveJournal.
Este artículo hará uso de la implementación de LiveJournal de S2 como ejemplos. En la parte inferior se puede encontrar un enlace a la documentación detallada sobre esta implementación.
Características del idioma
La estructura de S2 se parece mucho a la de la mayoría de la programación imperativa idiomas, e incluye instrucciones básicas tales como asignaciones de variables, operaciones aritméticas, condicionada control de flujo y para bucles más conjuntos finitos (sin embargo, carece de claridad , mientras que los bucles). Al estar orientado a objetos, S2 permite la declaración de clases con miembros y métodos, pero también se pueden definir funciones globales (no específicas de clase). Se permite la recursividad, pero no las funciones de anidamiento.
Capas y propiedades
Una característica distintiva de S2 es que el código fuente está organizado en capas individuales , de las cuales hay seis tipos diferentes ( núcleo , i18nc , diseño , i18n , tema y usuario ). Estas capas forman una estructura en forma de árbol.
En la raíz se encuentra la capa central , una capa que especifica todas las clases y sus métodos que son específicos del sitio web en el que se utiliza S2. En el caso de LiveJournal, estas clases representan vistas de diario individuales (Entradas recientes, Archivo, etc.) y objetos relacionados con el sitio (usuarios, entradas de diario, etc.). Proporciona implementaciones predeterminadas simples de todos los métodos, pero también funciones globales que son de uso general. Algunas de las funciones se especifican como funciones "integradas" y se implementan en Perl en el subsistema S2; todas las demás funciones se implementan en el propio S2 y el compilador de S2 las compila en código Perl.
El lenguaje S2 introduce un concepto de propiedades : estas son variables que no son específicas de un objeto o clase en particular, sino de una capa. Dicha propiedad puede ser una cadena textual, un número entero, un código de color hexadecimal, etc. La capa central, por ejemplo, define las propiedades de la cadena textual para contener texto visible para el usuario en el idioma inglés .
Subordinadas a la capa central están las capas i18nc ("internacionalización central"), que permiten que las propiedades de la cadena textual en la capa central se anulen con traducciones a otros idiomas.
También subordinadas a la capa central están las capas de diseño . Una capa de diseño especifica un diseño de sitio en particular (diseño de diario en el caso de LiveJournal) y puede proporcionar nuevas propiedades que influyan en el aspecto y el comportamiento del diseño de varias formas. Una capa de diseño normalmente anula casi todos los métodos definidos en la capa central y puede introducir nuevos para realizar ciertas tareas específicas de diseño. Si se llama a un método definido por el núcleo que no se anula en la capa de diseño, pero el mismo método se anula para una clase superior, se llama a este método superior, en lugar de a la implementación predeterminada específica de la clase en la capa principal.
Los tres tipos restantes de capas (capas i18n , capas de tema y capas de usuario ) están subordinados a una capa de diseño específica. En general, los tres pueden anular tanto las propiedades como las funciones / métodos de la capa de diseño, pero su propósito previsto varía. i18n se proporcionan para internacionalizar el diseño; esto es para permitir que el diseño sea utilizado por hablantes de otros idiomas, pero no principalmente para proporcionar una forma de personalizar el texto visible para el usuario. Las capas de tema se pueden utilizar para proporcionar conjuntos de valores sugeridos para las propiedades de un diseño. Una aplicación común de esto es crear temas de color estéticamente consistentes, pero en principio las propiedades que no son de color (fuentes, tamaños, etc.) también se pueden anular en una capa de tema. Las capas de usuario , finalmente, están destinadas a almacenar las preferencias de un usuario particular con respecto a los valores de las propiedades. En última instancia, la capa de usuario tiene la "última palabra" sobre los valores de las propiedades.
Internacionalización
Como se mencionó en la sección anterior, las capas i18nc se usan para traducir la capa central, mientras que las capas i18n se usan para traducir un diseño. En su forma más simple, dicha capa de internacionalización anula las propiedades de la cadena textual para reemplazar el texto en inglés con una traducción a otro idioma.
Sin embargo, a menudo las complejidades de los lenguajes requieren mecanismos más sofisticados, razón por la cual las capas de internacionalización a veces anulan funciones completas. Por ejemplo, se proporciona una función de mapeo plural que especifica cuántas y qué cadenas usa un idioma después de un número entero.
Documentación
S2 incorpora la idea de proporcionar documentación para una clase, método, función o propiedad directamente dentro del código fuente, separada (distinguible por máquina) de los comentarios convencionales. Se pueden agregar pequeñas cadenas de texto explicativo después del encabezado de una clase, método, función o propiedad, y se pueden usar para generar documentación.
Sin embargo, en el momento de escribir este artículo, ninguna de estas cadenas se utiliza realmente, excepto las asociadas con las propiedades, que aparecen en el asistente de personalización; vea abajo. Una capa i18n puede anular estas cadenas documentales de propiedades con el fin de permitir que los hablantes de otros idiomas reciban explicaciones de las opciones disponibles en su idioma.
El asistente de personalización
La interfaz de usuario web de S2 permite a los usuarios cambiar los valores de las propiedades de un diseño sin tener que escribir el código fuente de S2 real. Esta interfaz se denomina "asistente de personalización" y crea una capa de usuario que almacena los valores preferidos de las propiedades por parte del usuario.
Usos no deseados de S2
S2 fue diseñado completamente para ser un lenguaje de programación de diseño web. Originalmente no se había previsto que pronto se utilizaría para crear aplicaciones "geek".
En particular, en el momento de escribir este artículo, se han escrito cuatro juegos en S2: Towers of Hanoi [1] , dos versiones de Tic Tac Toe y un juego llamado "Pawns" [2] . Una de las versiones de Tic Tac Toe se ha incrustado en un estilo de diario como una caja en una barra lateral.
Ver también
enlaces externos
- Documentación S2 de LiveJournal
- Historia de S2 : describe las deficiencias del sistema de estilo anterior de LiveJournal, ahora denominado S1.