En general, en programaci¢n orientada a objetos, una clase es una definici¢n abstracta de (1.) tipos de datos y (2.) acciones que pueden realizarse sobre dichos datos. Estas £ltimas son com£nmente conocidas como m‚todos de los objetos.
Mientras las clases s¢lo describen un tipo de objeto de una forma abstracta, los objetos que existen en un programa son llamados instancias de una cierta clase.
Sea un objeto de programa del WPS, por ejemplo: cada objeto de programa es una instancia de la clase WWProgram, definida por el WPS. Los (1.) datos del objeto de programa ser¡an, entre otros, el ejecutable asociado con ‚l (p.e. "CMD.EXE"), mientras que sus (2.) m‚todos (lo que se puede hacer con estos datos) ser¡an iniciar el ejecutable (haciendo doble clic sobre ‚l o eligiendo "Abrir" del men£) o cambiar el ejecutable en el cuaderno de propiedades. Mientras que no se "ven" los m‚todos desde el interfaz de usuario, los m‚todos se utilizan internamente todo el tiempo cada vez que el WPS est haciendo algo. Si est ud. familiarizado con el t‚rmino, los m‚todos podr¡an describirse vagamente como el/la API (Application Programmer's Interface) de un objeto. Si sabe ud. programar en REXX: cada vez que utiliza ud. una de esas cadenas de configuraci¢n de objeto para modificar los datos de un objeto, en realidad est llamando a un m‚todo sobre ese objeto.
Como los m‚todos se definene para cada clase, los m‚todos que pueden invocarse sobre un objeto dependen de la clase del objeto. No los he contado, pero ya WPObject, la clase m s b sica del WPS, define m s de 100 m‚todos.
Lo que hace la programaci¢n orientada a objetos tan flexible (y popular) es que pueden definirse relaciones entre clases. Para entender esto, los siguientes conceptos son de cierta ayuda:
Por ejemplo, en el WorkPlace Shell, la clase del Escritorio (llamada "WPDesktop") deriva de la clase de las carpetas (llamada "WPFolder"), lo que convierte al escritorio en s¢lo un tipo especial de carpeta.
De modo que, b sicamente, el Escritorio tiene todas las caracter¡sticas de una carpeta com£n: se pueden poner objetos en ‚l, clasificar su contenido, abrir una vista de rbol o detalles, y as¡ sucesivamente. Pero adem s, la clase del Escritorio provee algunas acciones m s: su men£ emergente contiene m s elementos (tales como "Concluir" y "Configuraci¢n del sistema"), su cuaderno de propiedades tiene m s p ginas, etc. Obviamente, el escritorio hereda las caracter¡sticas de las carpetas, pero a¤ade unas pocas m s. Por otra parte, se suprimen algunas caracter¡sticas de las carpetas: por ejemplo, no puede cerrarse el Escritorio activo y no tiene una barra de t¡tulo.
El WPS mantiene una estructura derivativa tal que todos los objetos est n agrupados l¢gicamene y son interdependientes. Incluso en un nivel m s abstracto, todas las clases de objetos del WPSson descendientes de UNA éNICA CLASE llamada "WPObject", que provee ciertas funciones que todos los objetos del WPS necesitan: principalmente la capaciadad de mostrar men£s emergentes, cuadernos de propiedades y todo eso. Esto es t¡pico de la programaci¢n orientada a objetos; una clase antecesora tal se denomina com£nmente "clase ra¡z" de una "jerarqu¡a de clases".
Sobre WPObject, el WPS construye un rbol completo de clases conocido como la jerarqu¡a de clases del WPS. Puede utilizar la p gina "Clases del WPS" del objeto "Workplace Shell" de XFolder para echar un vistazo a esto.
Una jerarqu¡a de clases tal tiene la ventaja de que uno puede cambiar s¢lo las
caracter¡sticas de esta clase ra¡z y todas las clases que deriven de ella cambiar n
tambi‚n. (La desventaja es -- desde el punto de vista de un programador -- que
construir una jerarqu¡a de clases as¡ requiere un mont¢n de planificaci¢n sobre
qu‚ datos y qu‚ m‚todos son comunes a qu‚ clases, y muchas resulta que esta
planificaci¢n no era demasiado ¢ptima. Pero una vez que esta jerarqu¡a ha sido
construida de modo eficiente -- lo cual, gracias a IBM, es verdaderamente el caso
del WPS -- las ventajas son simplemente extraordinarias.)
Uno de los muchos ejemplos de esto puede verse en el elemento "Ayuda" del men£ emergente que est disponible en todos los objetos. Si se selecciona este elemento del men£ el resultado es una llamada al m‚todo wpDisplayHelp. Este m‚todo lo introduce la clase ra¡z del WPS, WPObject, de modo que todos los objetos del WPS pueden mostrar ayuda: se inicia el gestor de ayuda de OS/2, se muestra la ventana de ayuda, etc. La p gina de ayuda concreta que se muestra es redefinida, sin embargo, por casi cualquier clase del WPS. De esta forma, seleccionar "Ayuda" del men£ de ayuda de una carpeta har que se muestre algo diferente de, digamos, la ayuda que mostrar el men£ de un objeto de programa.
Mientras que la herencia y el polimorfismo son conceptos comunes a todos los entornos de programaci¢n orientada a objetos (y de los lenguajes orientados a objetos, como C++), el WorkPlace Shell es incluso capaz de proporcionar sus ventajas entre varias aplicaciones. El WPS consiste en muchas DLLs que son en parte independientes entre s¡, y el programador de fuera de IBM puede extender el WPS utilizando estas funciones sin tan siquiera tener el c¢digo fuente del WPS, lo cual no resulta posible en los lenguajes orientados a objetos "normales".
Esto s¢lo funciona porque el WPS utiliza el System Object Model (SOM) de IBM, un complejo sistema que provee interfaces de programaci¢n orientados a objetos incluso entre diferentes m¢dulos de c¢digo e incluso independientes del lenguaje de programaci¢n. El SOM es tan potente porque las instancias de las clases se crean y mantienen en tiempo de ejecuci¢n en vez de en tiempo de compilaci¢n.
Aqu¡ es, de paso, donde aparece la lista de clases del WPS: cuando el WPS est arrancando, crea todas las clases (que en SOM, son objetos tambi‚n, pero ‚ste es un tema complejo), y establece las relaciones entre ellas s¢lo en este punto. S¢lo por esto es posible modificar las clases sin IBM, que cre¢ las originales, incluso sin conocerlas bien.
S¢lo como una breve nota personal, esto es a£n algo que hace a OS/2 £nico
en el mundo de la inform tica actual. Mientras muchas de sus otras ventajas
sobre otros sistemas operativos ya no son tan £nicas, como su altamente fiable
multitarea (p.e. Linux es bastante bueno en ello, tambi‚n), el interfaz de
usuario no ha sido a£n igualado por ning£n otro sistema operativo que yo conozca.
Especialmente no por Windows 95.