Download 1 4. lenguaje de programació
Document related concepts
no text concepts found
Transcript
TABLA DE CONTENIDO 1. 2. 3. 4. 5. 6. 7. 8. INTRODUCCION DESCRIPCION EL LENGUAJE UNIFICADO DE MODELADO – UML – 1 LENGUAJE DE PROGRAMACIÓN JAVA – 7 PLATAFORMA JAVA – 8 PLATAFORMA .NET – 9 ARQUITECTURA J2EE vs ARQUITECTURA .NET – 12 CONCLUSIONES – 20 1 INTRODUCCION Los servicios Web aún deben recorrer un largo camino entre estándares, proveedores de servicios y consumidores de los mismos, pero hasta el momento Microsoft y específicamente .Net llevan una cierta ventaja sobre J2EE. Aún así, sigue planeando la cuestión de la independencia de la plataforma. Si .Net no acaba siendo realmente multiplataforma, posiblemente J2EE predominará en el desarrollo de servicios Web para grandes empresas y para servicios Web clientes que requieran no depender de una plataforma específica, y .Net predominará en el desarrollo de servicios Web para pequeñas y medianas empresas que usan Windows. Mas por ahora conforme al desarrollo del entorno parece que lo anteriormente descrito puede ser un camino seguro, mas vemos que en esta área no todo esta escrito ya vimos como avanzo Google y los productos que tenia alrededor. 2 2. DESCRIPCION Por el valor eminentemente técnico del presente documento he decidido intentar desarrollar la posibilidad 1 que se describe abajo, conforme al modelo declarado en los documentos AIU. 1. Investigación publicable en revista o foro Internacional de la especialidad. (Amplío a continuación esta opción) El objetivo de AIU es procurar que la capacidad de cada uno de los estudiantes sea reconocida para abrir fronteras. Por lo mismo le solicitamos que su(s) proyectos(s) tengan un reconocimiento regional y mundial. Sabemos y creemos que sus aportaciones serán de mucha ayuda; por esto requerimos que el proyecto sea publicado en alguna revista, periódico y/o otros medios (TV, radio, Internet, etc.). Previo a la realización de su trabajo consultarlo con la fuente correspondiente para conocer los requerimientos que se deben cubrir. Una vez publicado su artículo le pedimos enviar una copia a AIU para su archivo y difusión. Así las cosas he publicado el texto en www.monografias.com El centro de tesis, documentos, publicaciones y recursos educativos más amplio de la Red. Con varios millones de usuarios. 3 3. EL LENGUAJE UNIFICADO DE MODELADO – UML Lenguaje Unificado de Modelado (UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; aún cuando todavía no es un estándar oficial, está respaldado por el OMG 1 (Object Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema de software. UML ofrece un estándar para describir un modelo del sistema, incluyendo aspectos conceptuales tales como procesos de negocios y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes de software reutilizables. En otros términos, así como en la construcción de un edificio se realizan planos previo a su construcción, en software se deben realizar diseños en UML previa codificación de un sistema, ahora bien, aunque UML es un lenguaje, éste posee más características visuales que programáticas que facilitan a integrantes de un equipo multidisciplinario participar e intercomunicarse fácilmente, estos integrantes son los analistas, diseñadores, especialistas de área y desde luego los programadores. Además de haberse convertido en un estándar de facto, UML es un estándar industrial promovido por el grupo OMG al mismo nivel que el estándar CORBA2 para intercambio de objetos distribuidos. Para la revisión de UML se formaron dos "corrientes" que promovían la aparición de la nueva versión desde distintos puntos de vista. Finalmente se impuso la visión más industrial frente a la académica. Recientemente se ha publicado la versión 2.0 en la que aparecen muchas novedades y cambios que, fundamentalmente, se centran en resolver carencias prácticas. Además, esta versión recibe diversas mejoras que provienen del lenguaje SDL 3. 1 La OMG (Object Management Group) es una asociación sin fines de lucro formada por grandes corporaciones, muchas de ellas de la industria del software, como por ejemplo: IBM, Apple Computer, Sun Microsystems Inc y Hewlett-Packard?. Esta asociación se encarga de la definición y mantenimiento de estándares para aplicaciones de la industria de la computación. Otro de los estándares definidos por la OMG, además del UML, es CORBA, el cual permite interoperabilidad multiplataforma a nivel de objetos de negocio. 2 En computación, CORBA (Common Object Request Broker Architecture — arquitectura común de intermediarios en peticiones a objetos), es un estándar que establece una plataforma de desarrollo de sistemas distribuidos facilitando la invocación de métodos remotos bajo un paradigma orientado a objetos. Fue definido y está controlado por el OMG que define las APIs, el protocolo de comunicaciones y los mecanismos necesarios para permitir la interoperabilidad entre diferentes aplicaciones escritas en diferentes lenguajes y ejecutadas en diferentes plataformas, lo que es fundamental en computación distribuida. 3 SDL (Specification and Description Language) es un lenguaje de especificación formal y visual. Está diseñado para la especificación de sistemas complejos, interactivos, orientados a eventos, de 4 Es importante resaltar que UML es un "lenguaje" para especificar y no para describir métodos o procesos. Se utiliza para definir un sistema de software, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que está descrito el modelo. Se puede aplicar en una gran variedad de formas para dar soporte a una metodología de desarrollo de software (tal como el Proceso Unificado de Rational 4) pero no especifica en sí mismo qué metodología o proceso usar. Hoy en día, esta consolidado como el lenguaje estándar en el análisis y diseño de sistemas de computo. Mediante UML es posible establecer la serie de requerimientos y estructuras necesarias para plasmar un sistema de software previo al proceso intensivo de escribir código. Entre más complejo es el sistema que se desea crear más beneficios presenta el uso de UML, las razones de esto son evidentes, sin embargo, existen dos puntos claves : El primero se debe a que mediante un plano/visión global resulta más fácil detectar las dependencias y dificultades implícitas del sistema, y la segunda razón radica en que los cambios en una etapa inicial (análisis) resultan más fáciles de realizar que en una etapa final de un sistema como lo seria la fase intensiva de codificación. Puesto que UML es empleado en el análisis para sistemas de mediana-alta complejidad, era de esperarse que su base radicara en otro paradigma empleado en diseños de sistemas de alto nivel que es la orientación a objetos 5, por lo que para trabajar en UML puede ser considerado un pre-requisito tener experiencia en un lenguaje orientado a objetos. UML cuenta con varios tipos de diagramas, los cuales muestran diferentes aspectos de las entidades representadas. Un diagrama Caso de Uso describe lo que hace un sistema desde el punto de vista de un observador externo, debido a esto, un diagrama de este tipo generalmente es de los más sencillos de interpretar en UML, ya que su razón de tiempo real o que presenten un comportamiento paralelo, y donde módulos o entidades independientes se comuniquen por medio de señales para efectuar su función. 4 El Proceso Unificado Racional (Rational Unified Process en inglés, habitualmente resumido como RUP) es un proceso de desarrollo de software y junto con el Lenguaje Unificado de Modelado UML, constituye la metodología estándar más utilizada para el análisis, implementación y documentación de sistemas orientados a objetos. Es un conjunto de metodologías adaptables al contexto y necesidades de cada organización. También se conoce por este nombre al software desarrollado por Rational, hoy propiedad de IBM, el cual incluye información entrelazada de diversos artefactos y descripciones de las diversas actividades. Está incluido en el Rational Method Composer (RMC), que permite la personalización de acuerdo a necesidades. 5 La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Incluye herencia, modularidad, polimorfismo, y encapsulamiento. 5 ser se concentra en un Que hace el sistema, a diferencia de otros diagramas UML que intentan dar respuesta a un Como logra su comportamiento el sistema. Un Caso de Uso esta muy relacionado con lo que pudiera ser considerado un escenario en el sistema, esto es, lo que ocurre cuando alguien interactúa con el sistema: "Acude un mesero a colocar la orden, la orden es tomada por el cocinero, y posteriormente se abona a la cuenta del cliente el cargo". Un Caso de Uso es empleado con más frecuencia en alguna de las siguientes etapas : • Determinación de Requerimientos: Por lo general nuevos requerimientos de sistema generan nuevos usos-casos, conforme es analizado y diseñado el sistema. • Comunicación con el Cliente: Debido a la sencillez de este tipo de diagramas, son fáciles de emplear para comunicarse con el cliente final del proyecto. • Generación de pruebas de Sistemas: A través de los diagramas uso-caso se pueden generar una serie de pruebas de sistema. Un Diagrama de Actividad demuestra la serie de actividades que deben ser realizadas en un Caso de Uso, así como las distintas rutas que pueden irse desencadenando. Es importante recalcar que aunque un diagrama de actividad es muy similar en definición a un diagrama de flujo (típicamente asociado en el diseño de software), estos no son lo mismo. Un diagrama de actividad es utilizado en conjunción de un diagrama caso de uso para auxiliar a los miembros del equipo de desarrollo a entender como es utilizado el sistema y como reacciona en determinados eventos. Lo anterior, en contraste con un diagrama de flujo que ayuda a un programador a desarrollar código a través de una descripción lógica de un proceso. Se pudiera considerar que un diagrama de actividad describe el problema, mientras un diagrama de flujo describe la solución. Un diagrama de actividad incluye los siguientes elementos: • • • Inicio: El inicio de un diagrama de actividad es representado por un círculo de color negro sólido. Actividad : Una actividad representa la acción que será realizada por el sistema la cual es representada dentro de un ovalo. Transición: Una transición ocurre cuando se lleva acabo el cambio de una actividad a otra, la transición es representada simplemente por una linea con una flecha en su terminación para indicar dirección. En UML, un diagrama de clases es un tipo de diagrama estático que describe la estructura de un sistema mostrando sus clases, atributos y las relaciones entre ellos. Los diagramas de clases son utilizados durante el proceso de análisis y 6 diseño de los sistemas informáticos, donde se crea el diseño conceptual de la información que se manejará en el sistema, y los componentes que se encargaran del funcionamiento y la relación entre uno y otro. A pesar de su status de estándar ampliamente reconocido y utilizado, UML siempre ha sido muy criticado por su carencia de una semántica precisa, lo que ha dado lugar a que la interpretación de un modelo UML no pueda ser objetiva. Otro problema de UML es que no se presta con facilidad al diseño de sistemas distribuidos. En tales sistemas cobran importancia factores como transmisión, serialización6, persistencia 7, etc. UML no cuenta con maneras de describir tales factores. No se puede, por ejemplo, usar UML para señalar que un objeto es persistente o remoto, o que existe en un servidor que corre continuamente y que es compartido entre varias instancias de ejecución del sistema analizado. Por lo anterior se ha desarrollado un nuevo enfoque denominado UML 2.0. En las versiones previas del UML, se hacía un fuerte hincapié en que UML no era un lenguaje de programación. Un modelo creado mediante UML no podía ejecutarse. En el UML 2.0, esta asunción cambió de manera drástica y se modificó el lenguaje, de manera tal que permitiera capturar mucho más comportamiento. De esta forma, se permitió la creación de herramientas que soporten la automatización y generación de código ejecutable, a partir de modelos UML, mediante la utilización de los siguientes estándares: • • • • Superestructura: Es la especificación que se usa todos los días. Aquí se encuentran todos los diagramas que la mayoría de los desarrolladores conocen. Infraestructura: Conceptos de bajo nivel. Meta-Modelo da soporte a la superestructura, entre otras. OCL: Lenguaje de restricción. De utilidad para especificar conceptos ambiguos sobre los distintos elementos del diagrama. XMI / Intercambio de diagramas: Permite compartir diagramas entre diferentes herramientas de modelado UML. 6 La serialización es un mecanismo ampliamente usado para transportar objetos a través de una red, para hacer persistente un objeto en un archivo o base de datos, o para distribuir objetos idénticos a varias aplicaciones o localizaciones. 7 Se entiende por persistencia en la programación orientada por objetos la capacidad que tienen los objetos de conservar su estado e identidad entre distintas ejecuciones del programa que los creó o de otros programas que accedan a ellos. De este modo los objetos pueden clasificarse en: Transitorios: cuyo tiempo de vida depende directamente del ámbito del proceso que los instanció. Persistentes: cuyo estado es almacenado en un medio secundario para su posterior reconstrucción y utilización, por lo que su tiempo de vida es independiente del proceso que los instanció. La persistencia permite al programador almacenar, transferir y recuperar el estado de los objetos. Para esto existen varias técnicas: Serialización, motores de persistencia y bases de datos orientadas a objetos 7 Para lograr los objetivos enunciados, varios aspectos del lenguaje fueron reestructurados y/o modificados. La especificación se separó en cuatro especificaciones (paquetes) bien definidas, tal como se muestra en la Figura 1. Es interesante destacar que el UML 2.0 puede definirse a sí mismo. Es decir, su estructura y organización es modelable utilizando el propio UML 2.0; de esta manera, se da un ejemplo de utilización del UML en un dominio distinto al del desarrollo de software. En este caso, cada paquete del diagrama representa cada una de las cuatro especificaciones que componen el lenguaje. :: Figura 1: Especificaciones principales del UML 2.0 8 En UML 2.0 hay 13 tipos diferentes de diagramas 9. Para comprenderlos de manera concreta, a veces es útil categorizarlos jerárquicamente: Diagramas de estructura, enfatizan en los elementos que deben existir en el sistema modelado: • Diagrama de clases • Diagrama de componentes • Diagrama de objetos • Diagrama de estructura compuesta (UML 2.0) • Diagrama de despliegue • Diagrama de paquetes 8 9 Tomado de http://www.epidataconsulting.com/tikiwiki/tiki-read_article.php?articleId=15 Tomado de http://es.wikipedia.org/wiki/Uml 8 Diagramas de comportamiento, enfatizan en lo que debe suceder en el sistema modelado: • Diagrama de actividades • Diagrama de casos de uso • Diagrama de estados Diagramas de Interacción, son un subtipo de diagramas de comportamiento, que enfatiza sobre el flujo de control y de datos entre los elementos del sistema modelado: • Diagrama de secuencia • Diagrama de colaboración • Diagrama de tiempos (UML 2.0) • Diagrama de vista de interacción (UML 2.0) UML se puede aplicar a cualquier lenguaje orientado a objetos tales como Java, C++, PHP, Ruby, C#, NET y en general cualquiera de los lenguajes soportados en la plataforma Net de Microsoft. Esto se puede hacer mediante la aplicación de una metodología como RUP, acrónimo de "Rational Unified Process", una metodología que permite emplear UML de manera eficiente y de esta forma evolucionar adecuadamente en el diseño e implementación de un sistema informático, lo que permite desarrollar sistemas informáticos muy eficientes y ampliamente documentados y en donde el conocimiento del sistema reside en la propia empresa y no solo en los sujetos que lo desarrollaron. El Proceso Unificado tiene varias décadas de desarrollo y uso práctico, desde sus inicios en el proceso Objectory 10 hasta el Proceso Unificado de Rational (Rational Unified Process, o RUP). El RUP es un proceso de desarrollo de software dirigido por casos de uso, centrado en la arquitectura, iterativo e incremental. RUP pretende implementar las mejores prácticas en ingeniería de software, con el objetivo de asegurar la producción de software de calidad, dentro de plazos y presupuestos predecibles. 10 Objectory es una metodología orientada objetos creada sobre todo por Ivar Jacobson, quien es también responsable de la ingeniería de programas informáticos orientadas objetos. 9 4. LENGUAJE DE PROGRAMACIÓN JAVA Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems a principios de los años 1990. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel como punteros 11. Las aplicaciones Java están típicamente compiladas en un bytecode 12, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible. La implementación original y de referencia del compilador, la máquina virtual y las librerías de clases de Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolución del lenguaje a través del Java Community Process, si bien otros han desarrollado también implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo licencias de software libre. Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java todavía no es software libre). Entre junio y julio de 1994, se reorientó la plataforma hacia la Web. Con el advenimiento del navegador web Mosaic, los desarrolladores de Java consideraron que asi se propiciaría que Internet se convirtiese en un medio interactivo. El entorno de ejecución era relativamente seguro y los principales navegadores web pronto incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web. 11 Un puntero es una variable manipulable que referencia una región de memoria; en otras palabras es una variable cuyo valor es una dirección de memoria. Una forma común de describir la memoria principal de un ordenador es como una colección de pequeñas cajitas (celdas) que almacenan datos e instrucciones. Cada celda está identificada unívocamente por un número o dirección de memoria. 12 El bytecode es un código intermedio más abstracto que el código máquina. Habitualmente se lo trata como a un fichero binario que contiene un programa ejecutable similar a un módulo objeto, que es un fichero binario que contiene código máquina producido por el compilador. Como código intermedio, se trata de una forma de salida utilizada para reducir la dependencia respecto del hardware específico y facilitar la interpretación. Los programas en bytecode suelen ser interpretados por un intérprete de bytecode (en general llamado máquina virtual, dado que es análogo a un computador). Su ventaja es su portabilidad: el mismo código binario puede ser ejecutado en diferentes plataformas y arquitecturas. 10 Un applet es un componente de una aplicación que se ejecuta en el contexto de otro programa, por ejemplo un navegador web. El applet debe ejecutarse en un contenedor, que lo proporciona un programa anfitrión, mediante un plugin13, o en aplicaciones como teléfonos móviles que soportan el modelo de programación por applets. A diferencia de un programa, un applet no puede ejecutarse de manera independiente, ofrece información gráfica y a veces interactúa con el usuario, típicamente carece de sesión y tiene privilegios de seguridad restringidos. Un applet normalmente lleva a cabo una función muy específica que carece de uso independiente. Un Java applet es un código JAVA que se utiliza principalmente para el trabajo de páginas web, ya que es un pequeño programa que es utilizado en una página HTML y representado por una pequeña pantalla gráfica dentro de ésta. Por otra parte, la diferencia entre una aplicación JAVA y un applet radica en cómo se ejecutan. Para cargar una aplicación JAVA se utiliza el intérprete de JAVA De otra parte los servlets son objetos que corren dentro del contexto de un contenedor de servlets o dentro de un servidor de aplicaciones que además de contenedor para servlet tendrá contenedor para objetos más avanzados como son los EJB14. La palabra servlet deriva de applet que, como se dijo arriba, se refiere a pequeños programas escritos en Java que se ejecutan en el contexto de un navegador web. Por contraposición, un servlet es un programa que se ejecuta en un servidor. El uso más común de los servlets es generar páginas web de forma dinámica a partir de los parámetros de la petición que envíe el navegador web. 5. PLATAFORMA JAVA La plataforma Java es el nombre de un entorno o plataforma de computación originaria de Sun Microsystems, capaz de ejecutar aplicaciones desarrolladas 13 Un plugin (o plug-in -en inglés "enchufar"-, también conocido como addin, add-in, addon o addon) es una aplicación informática que interactúa con otra aplicación para aportarle una función o utilidad específica, generalmente muy específica, como por ejemplo servir como driver o controlador en una aplicación, para hacer así funcionar un dispositivo en otro programa. Ésta aplicación adicional es ejecutada por la aplicación principal. Los plugins típicos tienen la función de reproducir determinados formatos de gráficos, reproducir datos multimedia, codificar/decodificar emails, filtrar imágenes de programas gráficos, tales como flash, Windows media etc. 14 Un "Java Bean" es un componente utilizado en Java que permite agrupar funcionalidades para formar parte de una aplicación, como agrupar información personal, datos sobre un pedimento, requerimientos de ordenes,etc. Un "Enterprise Java Bean" también agrupa funcionalidades para una aplicación, sin embargo, a diferencia de un "Java Bean" un "Enterprise Java Bean" es un " deployable component ", el término "deployable component" implica que existe un ambiente de ejecución , éste ambiente es precisamente un "EJB (Enterprise Java Bean) Container" parte de un java application server . Un "Java Bean" requiere ser integrado con otros componentes para que éste sea funcional, mientras un "Enterprise Java Bean" a través de un "EJB Container" puede ser activado("deployed"). 11 usando el Lenguaje de programación Java y un conjunto de herramientas de desarrollo. En este caso, la plataforma no es un hardware específico o un sistema operativo, sino más bien una máquina virtual encargada de la ejecución, y un conjunto de librerías estándar que ofrecen funcionalidad común. La plataforma es así llamada la Plataforma Java (antes conocida como Plataforma Java 2[1]), e incluye: • Plataforma Java, Edición Estándar (Java Platform, Standard Edition), o Java SE (antes J2SE) • Plataforma Java, Edición Empresa (Java Platform, Enterprise Edition), o Java EE (antes J2EE) • Plataforma Java, Edición Micro (Java Platform, Micro Edition), o Java ME (antes J2ME) Desde 2006, la versión actual de la Plataforma Java se conoce tanto por versión 1.5 o versión 5, aunque todas las denominaciones se refieren a la misma versión. Sin embargo, se prefiere el término versión 5. Una visión general de la multitud de tecnologías que componen la Plataforma Java puede encontrarse en la página de documentación del JDK. La Plataforma Java se compone de un amplio abanico de tecnologías, cada una de las cuales ofrece una parte del complejo de desarrollo o del entorno de ejecución en tiempo real. Por ejemplo, los usuarios finales suelen interactuar con la máquina virtual de Java y el conjunto estándar de bibliotecas. Además, las aplicaciones Java pueden usarse de forma variada, como por ejemplo ser incrustadas en una página Web. Para el desarrollo de aplicaciones, se utiliza un conjunto de herramientas conocidas como JDK (Java Development Kit, o herramientas de desarrollo para Java). Java Runtime Environment [editar] Un programa destinado a la Plataforma Java necesita dos componentes en el sistema donde se va a ejecutar: una máquina virtual de Java (JVM), y un conjunto de librerías para proporcionar los servicios que pueda necesitar la aplicación. La JVM que proporciona Sun Microsystems, junto con su implementación de las librerías estándar, se conocen como Java Runtime Environment (JRE) o Entorno en tiempo de ejecución para Java. El JRE es lo mínimo que debe contener un sistema para poder ejecutar una aplicación Java sobre el mismo. Para el desarrollo de programas se ofrece un paquete de utilidades y herramientas conocido como JSDK (Java Software Development Kit). 6. PLATAFORMA .NET .NET es un proyecto de Microsoft para crear una nueva plataforma de desarrollo de software con énfasis en transparencia de redes, con independencia de 12 plataforma y que permita un rápido desarrollo de aplicaciones. .NET podría considerarse una respuesta de Microsoft al creciente mercado de los negocios en entornos Web, como competencia a la plataforma Java de Sun Microsystems. A largo plazo Microsoft pretende reemplazar el API Win32 o Windows API15 con la plataforma .NET. Esto debido a que el API Win32 o Windows API fue desarrollada sobre la marcha, careciendo de documentación detallada, uniformidad y cohesión entre sus distintos componentes, provocando múltiples problemas en el desarrollo de aplicaciones para el sistema operativo Windows. La plataforma .NET pretende solventar la mayoría de estos problemas proveyendo un conjunto único y expandible con facilidad, de bloques interconectados, diseñados de forma uniforme y bien documentados, que permitan a los desarrolladores tener a mano todo lo que necesitan para producir aplicaciones sólidas. Debido a las ventajas que la disponibilidad de una plataforma de este tipo puede darle a las empresas de tecnología y al público en general, muchas otras empresas e instituciones se han unido a Microsoft en el desarrollo y fortalecimiento de la plataforma .NET, ya sea por medio de la implementación de la plataforma para otros sistemas operativos aparte de Windows (Proyecto Mono de Ximian/Novell para Linux/MacOS X/BSD/Solaris), el desarrollo de lenguajes de programación adicionales para la plataforma (ANSI C de la Universidad de Princeton, NetCOBOL de Fujitsu, Delphi de Borland, entre otros) o la creación de bloques adicionales para la plataforma (como controles, componentes y bibliotecas de clases adicionales); siendo algunas de ellas software libre, distribuibles bajo la licencia GPL16. Con esta plataforma Microsoft incursiona de lleno en el campo de los Servicios Web y establece el XML 17 como norma en el transporte de información en sus productos y lo promociona como tal en los sistemas desarrollados utilizando sus herramientas. 15 La Interfaz de Programación de Aplicaciones, cuyo acrónimo en inglés es API (Application Programming Interface), es un conjunto de funciones residentes en bibliotecas (generalmente dinámicas) que permiten que una aplicación corra bajo el sistema operativo Windows. Debido a su estrecha relación con el desarrollo de software, los programas en sus especificaciones generalmente explicitan la versión de la API del sistema operativo, mediante diversas nomenclaturas tales como la versión específica del sistema operativo (para Windows 98, por ejemplo), o explicitando la versión del conjunto de librerías (Plataforma Win32, etc.). 16 Licencia Pública General (GPL). El autor conserva los derechos de autor (copyright), y permite la redistribución y modificación bajo términos diseñados para asegurarse de que todas las versiones modificadas del software permanecen bajo los términos más restrictivos de la propia GPL. Esto hace que sea imposible crear un producto con partes no licenciadas GPL: el conjunto tiene que ser GPL. 17 XML es un Lenguaje de Etiquetado Extensible muy simple, pero estricto que juega un papel fundamental en el intercambio de una gran variedad de datos. Es un lenguaje muy similar a HTML pero su función principal es describir datos y no mostrarlos como es el caso de HTML. XML es un formato que permite la lectura de datos a través de diferentes aplicaciones. 13 Ahora bien, la W3C18 define "Servicio Web" como un sistema de software diseñado para permitir interoperatibilidad máquina a máquina en una red. En general, los servicios web son sólo APIs Web que pueden ser accedidas en una red, como internet, y ejecutadas en un sistema de hosting remoto. En términos sencillos, un servicio web es cualquier sistema de software diseñado para soportar interacción máquina a máquina sobre una red. En definitiva, permite comunicación entre diferentes máquinas, con diferentes plataformas y entre programas distintos. Esta comunicación se logra a través de la adopción de diversos estándares abiertos. Esta amplia definición abarca múltiples y diferentes sistemas, pero en general "servicio web" suele referir a clientes y servidores que se comunican usando mensajes XML que siguen el estándar SOAP. .NET intenta ofrecer una manera rápida y económica pero a la vez segura y robusta de desarrollar aplicaciones - o como la misma plataforma las denomina, soluciones - permitiendo a su vez una integración más rápida y ágil entre empresas y un acceso más simple y universal a todo tipo de información desde cualquier tipo de dispositivo. Los principales componentes del marco de trabajo son: • El conjunto de lenguajes de programación • La Biblioteca de Clases Base o BCL • El Entorno Común de Ejecución para Lenguajes o CLR por sus siglas en inglés. Debido a la publicación de la norma para la infraestructura común de lenguajes (CLI por sus siglas en inglés), el desarrollo de lenguajes se facilita, por lo que el marco de trabajo .NET soporta ya más de 20 lenguajes de programación y es posible desarrollar cualquiera de los tipos de aplicaciones soportados en la plataforma con cualquiera de ellos, lo que elimina las diferencias que existían entre lo que era posible hacer con uno u otro lenguaje. Algunos de los lenguajes desarrollados para el marco de trabajo .NET son: C#, Visual Basic, Delphi (Object Pascal), C++, J#, Perl, Python, Fortran y Cobol.NET. 18 El Consorcio World Wide Web (W3C) es un consorcio internacional donde las organizaciones miembro, personal a tiempo completo y el público en general, trabajan conjuntamente para desarrollar estándares Web. La misión del W3C es: Guiar la Web hacia su máximo potencial a través del desarrollo de protocolos y pautas que aseguren el crecimiento futuro de la Web. 14 7. ARQUITECTURA J2EE vs ARQUITECTURA .NET 19 Repasando un poco se tiene: J2EE (Java 2 Platform, Enterprise Edition) es, según la definicion de Sun Microsystems, un conjunto de estándares y especificaciones para el desarrollo de aplicaciones empresariales basado en la tecnología Java. Esquemáticamente se resume en la siguiente fórmula J2EE = Java + Componentes adicionales orientados a empresas (EJBs, JSPs). La plataforma J2EE ha sido creada con la participación de cientos de empresas de diversa índole y es, sin lugar a dudas una plataforma conjunta, no exclusiva de Sun o de ninguna otra compañía. Actualmente se han desarrollado una serie de herramientas (quizá las más conocidas sean JBuilder, de Borland, y ForteTM de la propia Sun) comerciales para implementar esta plataforma. La sintaxis de Java es muy similar a la de otro lenguaje orientada a objetos, pero su filosofía se encuentra a medio camino entre éste y Smalltalk. Java incorpora un recolector automático de memoria (garbage collector), al igual que Smalltalk, con lo que elimina una fuente tradicional de problemas en C/C++. Sin embargo, tal y como sucede con C++, Java es un lenguaje fuertemente "tipado", en el que se comprueban los tipos declarados en tiempo de compilación, a diferencia de lo que sucede en Smalltalk, donde esto se comprueba en tiempo de ejecución (lo cual suele retrasar el proceso de depuración). Desde su origen, Java dispuso de una líbrería de clases estándar (al igual que Smalltalk y al contrario de lo que sucedió con C++, que al principio no tenía). En Java existe un clase básica única: la clase Object de la cual se derivan todas las otras, de modo similar a lo que ocurre en Smalltalk, mientras que en C++ una clase no tiene por qué tener una clase base de la cual derive. Java admite la herencia múltiple (es decir, una clase puede derivar de varias clases distintas) de un modo distinto a lo que lo hace C++, usando interfaces. Un interfaz es una colección de nombres de métodos sin definiciones reales (o lo que es lo mismo: sin implementación) que indican que una clase tiene un conjunto de comportamientos, además de los que la clase hereda de sus superclases. Existe una diferencia esencial entre Java y C++, desde el punto de vista de la orientación a objetos: no es posible -al igual que ocurre en Smalltalk- utilizar funciones libres o una programación estructurada en Java, desde un comienzo hay que programar mediante clases y objetos en Java; sin embargo, en C++ es posible utilizar funciones libres y realizar programas que no estén orientados a objetos e incluso utilizar código orientado a objetos y código orientado a 19 Tomado de (ABIÁN, 2003), (SANCHO, 2004), (OSMOSIS LATINA, 2005), (GONZÁLEZ MORENO, 2006), (ROBERT FRANZ GROUP, 2006), (GOMEZ, 2007), (BARRAPUNTO, 2007), (GOMEZ, 2007) 15 programación estructurada en un mismo programa, lo cual (con un mal uso) puede llevar a la escritura de código de dudosa legibilidad. Java, por cuestión de eficiencia, dispone de tipos de datos primitivos (enteros, carácteres, etc.) que no son clases, aunque sí tienen clases asociadas, con sus correspondientes métodos. Lo mismo sucede con C++, pero no con Smalltalk: en este lenguaje todos los tipos de datos son clases: es un lenguaje OO completamente "puro". Java, por otra parte, no admite punteros, uno de los principales problemas de los programadores en C/C++. Una de las novedades revolucionarias de Java fue la portabilidad: Sun abordó el problema introduciendo el modelo de bytecodes: cuando un programa Java se compila no se transforma en un conjunto de instrucciones código máquina nativas de la plataforma utilizada (lo cual impediría su completa portabilidad), sino que se transforma en un conjunto de bytecodes independientes de la plataforma utilizada que son leídos e interpretados por la máquina virtual Java (JVM) para ejecutar el programa. Por ejemplo, cuando se compila un programa Java en una plataforma Windows/Intel, se obtiene la misma salida compilada (o los mismos bytecodes) que en un sistema Macinstosh o Unix. Esta máquina virtual Java (recibe este nombre porque es una máquina imaginaria que se implementa emulando por software una máquina real) es una aplicación que debe ser instalada en el ordenador para que los programas Java puedan ser ejecutados y será diferente para cada plataforma. A la hora de hacer funcionar una aplicación Java en una plataforma distinta a aquella en la que se escribió el programa, bastará con llevar los archivos de bytecodes generados por la primera plataforma a la otra plataforma (donde deberá haberse instalado la máquina virtual Java correspondiente a ésta, que será distinta a la máquina virtual Java de la primera plataforma). En la práctica, a partir de la aparición de Java 2 (ó Java 1.2) ni siquiera es necesario que la plataforma de destino tenga la JVM correspondiente, basta con que tenga instalado el JRE (Java Runtime Environment), que tiene el permiso de Sun para distribuirse gratuitamente junto con las aplicaciones realizadas por los desarrolladores. Lógicamente, Sun provee de un gran número de versiones de JVM y JRE, para distintos ordenadores y sistemas operativos. En resumidas cuentas: los archivos binarios Java, que se obtienen al compilar el código fuente, son independientes de la plataforma y pueden ejecutarse en múltiples plataformas sin necesidad de volver a compilar el archivo fuente, al contrario de lo que sucede en lenguajes como Visual Basic 6.0 ó Delphi. Microsoft .Net es, de acuerdo con la definición de Microsoft, una plataforma que comprende servidores, clientes y servicios. Consiste en un conjunto de aplicaciones como Visual Studio .Net, los servicios .Net, etc. Esta plataforma es una implementación basada en estándares abiertos como SOAP, WSDL, C#, y el CLI (Command Line Interface). Desde el punto de vista del programador, el 16 entorno .NET ofrece un solo entorno de desarrollo para todos los lenguajes que soporta (actualmente [Abril 2002] unos 30: Visual Basic, C++, C#, Visual J#, Fortran, Cobol...). La manera en que lo hace se verá más adelante. La estrategia .Net es innovadora en el sentido de que no compila aplicaciones en código nativo -es decir, no compila aplicaciones en código específico para Intel o Mac, por ejemplo-. La compilación, al igual que sucede con Java, se realiza en dos pasos sucesivos. El código escrito por el programador se compila en el lenguaje intermedio de Microsoft (MSIL: Microsoft Intermediate Language), del mismo modo que las instrucciones en Java se convierten en bytecodes. Es entonces cuando el CLR (CLR: Common Language Runtime ó entorno común de ejecución) de Microsoft compila en tiempo de ejecución las aplicaciones en código nativo de la plataforma Intel ó Mac, por ejemplo. El CLR también revisa el código, verificando la seguridad del mismo y recolectando los objetos para los cuales no existe ya ninguna referencia (recolección de basura), además de gestionar las excepciones entre otras tareas. Es inevitable comparar este manera de trabajar con los bytecodes de Java. Para generar el código MSIL, los compiladores de .NET utilizan la información recogida en el CTS (Common Type System), un sistema de tipos comunes en el que se incluyen todos los tipos de datos, estructuras y operaciones de muchos lenguajes de alto nivel distintos. Para que el código pueda utilizarse en otras aplicaciones escritas en otro/otros lenguajes es necesario que los lenguajes usados cumplan la CLS (Common Language Specification), una especificación de los tipos de datos, estructuras y operaciones comunes a todos los lenguajes de programación (y, por tanto, un subconjunto del CTS). El código escrito en un lenguaje que cumpla la CLS puede ser utilizado en el entorno .NET en aplicaciones escritas en otros lenguajes que también cumplan la CLS (Nota: Es precisa la exigencia de que cumplan la CLS, pues el CTS es demasiado general y podría suceder que un lenguaje A usara características del CTS de las que otro lenguaje B carece, por lo que no sería posible utilizar código escrito en A en aplicaciones escritas en B -y viceversa-). Por ejemplo, es posible definir una clase en C# y derivar una subclase de ella usando Visual Basic .Net, pues ambos lenguajes se ajustan a la CLS aunque su sintaxis sea muy diferente. Del mismo modo, y por poner otro ejemplo, un bucle que imprima diez veces el tradicional mensaje "Hola Mundo" se escribirá de distinta manera en C# y Visual Basic .Net (o en lenguajes de terceras partes como Fortran, Cobol, etc.), pero los compilador de estos lenguajes -si cumplen la CLS- generarán el mismo código MSIL. Por otro lado, Visual Basic Net ha experimentado un profundo cambio y puede ya ser considerado como un verdadero lenguaje orientado a objetos. Estos cambios se deben a que debe cumplir la CLS para que pueda utilizarse junto a otros lenguajes de la plataforma .NET en aplicaciones .NET. Sólo en VB 4.0 se 17 introdujeron algunas de las características de la orientación a objetos, pero ni siguiera en la versión 6.0 se implementaron todas. C# —C Sharp— es un nuevo lenguaje de programación incluido en la plataforma .Net por vez primera. Es un lenguaje orientado a objetos fuertemente "tipado", diseñado por Microsoft para obtener una elevado rendimiento con una relativa simplicidad del lenguaje. Como ya se ha apuntado antes, pero vale la pena remarcar este punto, la plataforma .NET está centrada en torno al Common Languaje Runtime (similar a la Java Virtual Machine de Sun) y a un conjunto de bibliotecas que pueden ser usadas por una amplia variedad de lenguajes capaces de trabajar conjuntamente al ser compilados todos en el lenguaje intermedio MSIL, ya citado anteriormente. C# juega un importante papel en .NET porque ha sido diseñado para trabajar de forma óptima con .NET y ciertas características de .NET se implementaron pensando en que su rendimiento fuera óptimo con C# (de hecho, algunas bibliotecas de .NET como Collection, XML, ADO+, ASP+, GDI+ y otras fueron escritas en C#). A la vista del lenguaje, puede decirse que fue concebido basándose en Java y C++. Algunas (no todas) de las similitudes entre Java y C# son las siguientes: • Ambos lenguajes compilan un código independiente de la máquina y el sistema operativo que se ejecuta mediante sus correspondientes entornos (JVM o entorno .NET). • Incorporan un "recolector de basura". • No necesitan punteros (Java no los permite y C# permite un uso restringido dentro del código señalado como unsafe (inseguro). • No se utilizan ficheros de cabecera (como en C y C++), todo el código se empaqueta en packages (Java) o assemblies (C#). • Admiten hilos (threads). • Admiten herencia múltiple mediante interfaces. • Permiten clases internas (clases en el interior de otras clases). • No admiten programación estructurada, cualquier "cosa" pertenece a una clase. Entre las ventajas mencionadas por Microsoft de utilizar este lenguaje, sintácticamente también parecido a Java, es que ha sido diseñado pensando en Internet y arquitecturas de componentes: En C#, cualquier objeto puede representarse como un objeto COM, permitiendo una integración relativamente sencilla con aplicaciones escritas en otros lenguajes. Posiblemente, C# se utilizará para escribir aplicaciones (o partes de aplicaciones) que requieran un alto rendimiento (como el que podría proporcionar C ó C++) sin tener necesidad de preocuparse de aspectos como la gestión de la memoria, la construcción de bibliotecas de bajo nivel, la comprobación de los índices de los arrays, etc. 18 La plataforma .Net permite utilizar un lenguaje llamado Visual J# (todavía no he tenido la ocasión de utilizarlo, por lo que me baso en lo comentado de forma oficial por Microsoft y algunos articulistas independientes), que implementa casi de forma completa el JDK 1.1.4 (Java Development Kit) de Sun dentro de .Net. Al igual que sucedía con Visual J++, el JNI (Java Native Interface) ha sido excluido de Visual J#. Aunque aún es pronto para juzgar este lenguaje y sus herramientas de desarrollo asociadas, posiblemente tendrá una fuerte dependencia del entorno Windows. De todos modos, debido a que solo alcanza hasta el JDK 1.1.4 (quizás por los problemas legales que tuvo y tiene Microsoft con Sun) estará en desventaja con J2EE, cuya última versión utiliza el SDK 1.4.x. La plataforma .NET se ha diseñado teniendo muy presente los servicios Web, una nueva forma de enfocar el negocio del software que puede decirse que los servicios Web son una prolongación lógica de la arquitectura cliente/servidor. Las consecuencias que se derivan del uso de los servicios Web cambian totalmente las reglas del juego: los usuarios pueden optar por alquilar los componentes que necesiten, que siempre estarán actualizados, sin necesidad de comprar aplicaciones completas mediante el sistema actual de licencias. Aún así, pese al entusiasmo despertado en la comunidad de programadores alrededor de los servicios Web, aún hay un largo camino que recorrer (unificación de estándares, adaptación de las empresas y consumidores a estos servicios). Como similitudes entre las plataformas en discusión puede decirse: • • • • • El propósito tanto de J2EE como de la plataforma .NET es facilitar y simplificar el desarrollo de aplicaciones empresariales o corporativas. De cara al comercio electrónico, las JSP (Java Server Pages) son muy similares a ASP (Active Server Pages) o a su descendiente ASP .Net, y los EJB (Enterprise JavaBeans) son muy similares a los COM/COM+ de Microsoft. Los servidores de aplicaciones J2EE y .Net proporcionan un modelo de acceso de componentes a datos y de lógica del negocio, separados por una capa intermedia de presentación implementada mediante ASP .Net (:Net) ó Servlets (J2EE). Visual Basic .Net y C# son lenguajes orientados a objetos, al igual que Java, y en su diseño ha tenido mucha importancia la existencia de Internet. Desde la perspectiva de los desarrolladores, J2EE y .Net proporcionan las herramientas para crear Servicios Web. Tal y como se ha expuesto J2EE y .Net son multiplataforma. Al usar .Net una compilación en dos pasos, le permitiría teóricamente proporcionar en el futuro entornos de ejecución para diferentes plataformas de forma similar a Java y sus JREs y SDKs. 19 Ahora como ventajas de .Net frente a J2EE 1. Una ventaja muy importante del entorno .Net frente a J2EE es la posibilidad de emplear múltiples lenguajes de programación, mientras que J2EE sólo trabaja con uno: Java. Aunque sin duda algún teórico pensara que lo ideal sería que solo hubiera un lenguaje de programación (a ser posible estandarizado), esta idea es tan utópica como pensar que el esperanto acabará substituyendo a otros idiomas humanos. La realidad es que esta alta diversidad de lenguajes es obligatoria por la misma variedad de las necesidades de los programadores. Todavía hoy existen más líneas de código escritas en Cobol que en C++ ó Java. Un lenguaje moderno y orientado a objetos como Java puede resultar totalmente ineficaz -y hasta inadecuado- a la hora de abordar problemas que involucren cálculos matemáticos masivos y complejos, mientras que esos mismos cálculos pueden ser abordados mucho más adecuadamente con un lenguaje tan primitivo como Fortran 77. Por otro lado, .Net posibilita así que programadores de terceros lenguajes pasen a esta plataforma reduciendo el tiempo de aprendizaje y entrenamiento. 2. Las herramientas de desarrollo incluidas por Microsoft en su Visual Studio .Net son mucho más simples, intuitivas y sencillas de manejar que las herramientas de desarrollo equivalentes en J2EE suministradas por otras empresas (entre ellas la propia Sun). Cualquier programador medio/avanzado se manejará rápidamente con la programación del interface de usuario en Visual Studio .Net, al igual que sucedía con versiones anteriores de Visual Studio. 3. C# es un lenguaje interesante, fácil de aprender por los programadores de Java (de hecho, Microsoft ofrece un conversor de Java a C#), que en caso de estandarizarse podría resultar un lenguaje muy conveniente para ciertas tareas de programación en diferentes plataformas. No está escrito en ninguna parte que los lenguajes no puedan evolucionar (de hecho, tanto los lenguajes de programación como los lenguajes humanos lo hacen) y, en ese sentido, C# es una rama evolutiva más del árbol de los lenguajes orientados a objetos. 4. Microsoft ha impulsado con gran energía los servicios Web y ha resaltado su importancia entre toda la comunidad de desarrolladores (utilicen o no los productos de esta compañía). La plataforma .Net se ha diseñado considerando los servicios Web (mientras que J2EE no) siendo estos servicios propios de la plataforma y ofrece una nueve versión de ASP, ASP .Net, que puede considerarse un entorno de programación "de verdad" en lugar de un entorno basado en scripts. En términos de la propia Microsoft ".Net fue construido para la integración a través de los servicios Web XML usando protocolos y formatos de ficheros como SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language), y UDDI (Universal Description, Discovery, and Integration)". Comparativamente, .Net 20 va por delante con respecto a J2EE con respecto a servicios Web y estos servicios son propios de la plataforma, aunque J2EE respondió ya con el lanzamiento del Java Web Services Developer Pack. De todos modos, la facilidad, rapidez y sencillez con la que se pueden construir servicios Web con el Asistente de servicios Web de Visual Studio .Net son muy superiores a las de las herramientas para construir servicios Web dentro del entorno de J2EE. Ventajas de J2EE frente a .Net : 1. Las implementaciones de J2EE pueden adquirirse a distintas compañías, mientras que .Net solo puede comprarse a Microsoft. El hecho de que haya distintas organizaciones implementando J2EE ofrece mayor variedad para los usuarios finales y permite la existencia de una cierta competencia entre ellas para obtener mejores productos que no existe en el caso de Microsoft y su .Net. 2. Debido al proceso evolutivo de los productos de Microsoft, y en muchos casos, por motivos de compatibilidad la seguridad frente a virus informáticos de los productos de Microsoft es menor que los basados en Java, pues desde un comienzo Java se fundamentó en un estricto modelo de seguridad. 3. Como se ha escrito ya, las aplicaciones Java pueden correr en una amplia gama de sistemas operativos (desde sistemas empresariales como Windows 2000, OS/390, Solaris, HP-UX, IRIX u otras versiones de Unix hasta en sistemas orientados más a ordenadores personales como Mac OS, Windows 9x ó Linux ,y en sistemas operativos para dispositivos móviles) y de arquitecturas hardware. Hasta la fecha, .Net corre solamente sobre sistemas operativos de Microsoft (aunque esta situación podría cambiar en el futuro), siendo J2EE el único entorno de desarrollo que ofrece una independencia real de la plataforma. 4. La tecnología Java es una tecnología abierta (en el sentido de que el código de la plataforma completa puede ser obtenido, revisado y estudiado por cualquiera que esté interesado) y se basa en gran parte en estándares de organizaciones de normalización y estándares empresariales "de facto". Esto posibilita que los desarrolladores puedan conocer y entender completamente cómo hace las cosas Java y aprovecharlo para sus aplicaciones y, por otro lado, al basarse en estándares empresariales, simplifica la integración con productos de múltiples compañías. En contraposición, solo el código fuente del Nuevo lenguaje C# de la plataforma .Net ha sido abierto al público general (aunque Microsoft permite a compañías con las que le unen intereses comunes el acceso al código fuente de ciertas partes de .Net). 5. Aunque Java fue creado originalmente por una compañía: Sun MicroSystems, lo cierto es que J2EE es ahora el producto de la colaboración de más de 400 21 empresas y organizaciones de todo tipo (públicas, privadas sin ánimo de lucro, privadas con ánimo de lucro, y de normalización en ámbitos nacionales e internaciones). La plataforma .Net es -y será- el producto de una sola compañía, que aunque haya implementado algunos estándares en .Net y esté intentando conseguir que ciertos tecnologías se conviertan en estándares "oficiales", no puede tener el mismo consenso que .Net (sobretodo teniendo en cuenta que la mayor parte de su código no es público). 6. La tecnología Java goza ya de una cierta veteranía (6 años en el mercado). J2EE y ha probado su eficacia en muchos entornos y situaciones empresariales distintas, mientras que .Net ha visto oficialmente la luz el presente año. 22 8. CONCLUSIONES Java es un lenguaje destinado a perdurar entre la comunidad programadora. Aunque Microsoft insista en que dentro de la estrategia .Net Java es un lenguaje más, lo cierto es que se ha extendido tanto entre la comunidad programadora, docente e investigadora que su futuro es incluso prometedor, pese a la fuerte competencia de Microsoft. Posiblemente muchos programadores de C++ acabarán programando en C#, por la propia naturaleza de las aplicaciones que desarrollan, pero también muchos de ellos terminaron programando en Java al desarrollar aplicaciones orientadas a la Red. Hasta el momento, la plataforma J2EE es la única plataforma que corre en múltiples sistemas operativos y múltiples máquinas hardware y cuyos usuarios pueden seleccionar la implementación que más le convenga. Esta plataforma corre actualmente no solo en ordenadores doméstico o servidores o estaciones de trabajo, sino también en multitud de dispositivos como teléfonos móviles, agendas electrónicas, componentes electrónicos industriales de automatización, etc. Su implantación en el mercado de la tos teléfonos móviles GMS y UMTS puede asegurar un próspero futuro, puesto que es más que probable que acaben convirtiéndose en un medio generalizado de acceso a Internet. Java ya ha hecho realidad el sueño de "escriba el código una vez, ejecútelo en cualquier parte". Tal y como se señaló antes, es perfectamente posible que Microsoft proporcione en el futuro entornos de ejecución .NET para diferentes plataformas de forma similar a Sun (como para Windows 64 bits sobre Itanium ó para un Windows CE sobre un Pocket PC), pero aún no lo ha hecho para plataformas no Windows, y sería raro que lo hiciera por su propia estrategia de mercado hasta la fecha. Aún así, llegaría con un retraso considerable con respecto a J2EE. Por otro lado, no debe olvidarse que en el pasado anuncios de traslados de tecnologías Microsoft, por parte de la misma compañía, a otras plataformas (componentes DCOM, por ejemplo) no llegaron a materializarse. Por otro lado, la penetración de Microsoft en el mercado de los grandes sistemas corporativos y en las aplicaciones empresariales de alto nivel no es excesivamente alta. En la elaboración de J2EE han participado multitud de empresas, muchas de ellas especializadas en dar servicio software/hardware a grandes empresas y sistemas corporativos y que, por tanto, conocen muy bien ese sector del mercado informático. Esta pluralidad, también hace más probable que J2EE acabe convirtiéndose en un estándar "de facto", al haber sido desarrollado con la participación de muchas empresas que, inevitablemente, habrán mirado hacia sus propios productos a la hora de elaborarlo. J2EE quizá no llegue a convertirse en un estándar tipo ISO ó IEEE, pero al fin y al cabo el protocolo TCP/IP también es un estándar "de facto". 23 Tal y como ya se ha comentado, dentro del Visual Studio .Net el lenguaje Visual Basic .Net es un verdadero lenguaje orientado a objetos. Esta conversión es un lenguaje 100% orientado a objetos –OO-. -quizá, por otro lado, inevitable- no deja de tener sus inconvenientes: aunque muchos programadores profesionales consideraban a VB como un lenguaje menor, era (y es) el lenguaje más utilizado del planeta debido sobretodo a su sencillez. Con VB .Net, se precisan unos conocimientos sólidos de programación OO para apreciar en profundidad las ventajas del mismo y realizar programas que aprovechen todas sus posibilidades. Un programador que posea todos estos conocimientos optará probablemente por trabajar en C# ó Java, que tienen una sintaxis más estándar. Quién sabe, quizás suprimir la sencillez de Visual Basic en aras de hacerlo más moderno acabe con su principal encanto. C# es un lenguaje que puede convertirse en una estupenda herramienta para desarrolladores que quieran elaborar código de alta eficiencia, sin tener que nadar/naufragar en C++, pero aún es pronto para poder afirmar nada seguro sobre su futuro. Aún así, es un lenguaje de alta calidad y que seguramente será ideal para programar dentro de .Net por su simbiosis con el mismo. 24 BIBLIOGRAFIA GUIMPEL, FEDERICO. UML para programadores JAVA. Tomado de: http://www.ccirosario.org.ar/cursos/uml_para_java ABIÁN, MIGUEL ÁNGEL. J2EE y .NEt: la rivalidad permanente. 2003. http://www.willydev.net/descargas/Articulos/General/j2eenet.aspx www.aidima.es http://www.devjoker.com/contenidos/Articulos/42/J2EE-Y-NET-LA-RIVALIDADPERMANENTE.aspx http://www.devjoker.com/asp/impresion_contenido.aspx?co_contenido=42 http://www.javahispano.org/contenidos/es/comparativa_j2ee___net/ ANACLETO, VALERIO ADRIAN. Introducción a UML 2.0. La evolución de la programación hacia la ejecución y validación automática de modelos. Tomado de http://www.epidataconsulting.com/tikiwiki/tiki-read_article.php?articleId=15 BARRAPUNTO. NET vs J2EE. 2007. http://barrapunto.com/article.pl?sid=05/05/08/1810219 OSMOSIS LATINA. J2EE vs .NET un Analisis Tecnico Objetivo. 2005. http://www.osmosislatina.com/java/index.htm GONZÁLEZ MORENO, OSCAR. 2EE vs. .NET. 2006 www.consultec.es/DocInformes/j2ee%20VS%20NET.pdf ROBERT FRANZ GROUP. Otro estudio sobre J2EE. Citado por Ciberaula. 2007. http://www.rfgonline.com/ http://java.ciberaula.com/noticia/estudio_j2ee_net/ SANCHO, LUIS. .NET vs J2EE. 2004 http://www.deltablog.com/2005/06/08/net-vs-j2ee/ Seba Gomez's Weblog: J2EE vs. .Net. why?. 2007. http://sgomez.blogspot.com/2005/08/j2ee-vs-net-why.html http://www.javahispano.org/contenidos.item.action?id=1055&menuId=ARTICLES http://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java http://www.w3c.es/ 25