LA TRANSICIÓN A J2EE ES MÁS LARGA DE LO QUE LA MAYORÍA DE ORGANIZACIONES PIENSA VERSION PARA IMPRIMIR (Versión original en español en http://espanol.aurumsol.com/articulos/art2/art2-1.html) Jacquie Barker jjbarker@objectstart.com Traducido con permiso por Dr. Vicent-Ramon Palasí Lallana. Gerente General de Aurum Solutions. http://www.aurumsol.com Julio 2003 Muchas organizaciones informáticas que quieren conseguir ser competentes en tecnologías J2EE (“Java 2 Enterprise Edition” o Edición empresarial de Java 2) desafortunadamente no son realistas sobre la cantidad de tiempo que tarda conseguir esta competencia a desarrolladores de software “de legado”. A pesar de la experiencia de estos desarrolladores en lenguajes de programación procedimentales, como COBOL, C o FORTRAN, muchos de ellos pasaron por alto la oleada de tecnología de objetos que tuvo lugar en los primeros años noventa. Por lo tanto, muchos de ellos están comenzando desde el principio – es decir, intentando conseguir competencia básica con los conceptos de objetos para aprovechar el poder de un lenguaje de programación orientada a objetos como, por ejemplo, Java. El método para diseñar software anterior a la orientación a objetos se llamaba “descomposición funcional”. Con la descomposición funcional, se comenzaba con una descripción de la función general que una aplicación debía ejecutar – por ejemplo, “proceso de la planilla” – y, entonces, se procedía a descomponer este requerimiento funcional en subfunciones – por ejemplo, “entrada de tarjetas de asistencia”, “cálculo de cheques de pago”, “impresión de cheques de pago”. Esta descomposición (descendente) en unidades cada vez más pequeñas de funcionalidad continuaba hasta que se llegaba al punto en el que todas las unidades eran triviales de programar; entonces, se programaban primero las unidades funcionales más pequeñas, probándolas e integrándolas progresivamente en forma ascendente para construir una aplicación informática. Con la descomposición funcional, los datos se consideraban en forma tardía. Por el contrario, en el paradigma orientado a objetos, comenzamos concentrándonos en los datos que se necesitarán para servir como “columna vertebral” de nuestra aplicación: datos en forma de clases y objetos. Las funciones se consideran como un segundo paso en el proceso de modelado de objetos: sólo después de haber determinado la estructura de los datos de nuestras clases y objetos nos concentramos en los comportamientos que necesitamos ejecutar para colaborar en llevar a cabo el “objetivo” de la aplicación en su totalidad. Como puede atestiguar cualquiera que haya hecho la transición de la descomposición funcional a la programación orientada a objetos, cambiar de un enfoque centrado en las funciones a uno centrado en los datos cuando se diseña una aplicación parece, al principio, una inversión de conceptos y un paso atrás. Hacerlo representa un cambio importante de paradigma: o sea, un cambio fundamental en la forma en la que percibimos un problema de ingeniería del software, y de ahí que no sea algo que pueda dominarse rápidamente. De hecho, no es raro que los programadores necesiten un año o más de práctica antes de que “lo capten” y eso sólo si tienen disponible un experimentado ingeniero de software orientado a objetos que los guíe. Además de comprender los fundamentos del paradigma de objetos, se debe aprender también la sintaxis específica de Java para traducir los conceptos de orientación a objetos. Esto no es en sí mismo demasiado difícil, pero con ello viene la tarea desalentadora de familiarizarse con los cientos de clases preexistentes construidas en el lenguaje Java en forma de varias APIs o bibliotecas de clases (llamadas “paquetes” en Java) con el fin de (re)utilizarlas inteligentemente en nuestras aplicaciones. A continuación, surge el reto de comprender y dominar el paradigma de aplicaciones para el Web, el cual es, de nuevo, significativamente diferente del desarrollo tradicional de aplicaciones. Primero, debemos aprender cómo trabajar en lo que es esencialmente un entorno “sin estado” debido a la dependencia de las aplicaciones en la Web del protocolo HTTP de “petición-respuesta”. En una aplicación tradicional (orientada o no a objetos), el programador tiene la posibilidad de guardar datos en la memoria mientras sirvan a un propósito útil de la aplicación (esto se llama, “datos que están en ámbito”). Por el contrario, en una aplicación Web, se deben aprender nuevas formas de conseguir que los datos persistan durante sus idas y venidas entre el navegador y el servidor. En una aplicación convencional, típicamente se compila la aplicación en un único ejecutable o, en el caso de Java, se cargan varias clases y objetos en una única instancia de la Máquina Virtual de Java para ejecutar su lógica. Por contraste, los fragmentos de una aplicación Web están desunidos en forma de Java Server Pages (JSPs), formularios HTML, clases “bean” de apoyo, archivos de configuración XML y cosas así. Se debe dominar una variedad de diferentes lenguajes (Java, JavaScript, HTML, XML, bibliotecas de etiquetas “a la medida”, etc.), cada uno con una sintaxis significativamente diferente, para trabajar estos variados componentes. Incluso si todos los fragmentos se construyen sin fallos, la aplicación en su totalidad puede fallar si cualquiera de estos fragmentos se despliega incorrectamente en un servidor Web; estos problemas son difíciles de depurar. Puede introducirse una miríada de problemas con respecto a la configuración de dichos entornos de despliegue – es decir, los servidores Web. Muchas veces, un desarrollador de aplicaciones Web “golpea su cabeza contra la pared” durante días, semanas o incluso meses, intentando depurar un problema de la aplicación que, al final, resulta ser un asunto de configuración del servidor Web. Desgraciadamente, en muchas organizaciones, la responsabilidad de la administración del servidor Web recae sobre un grupo de individuos separados de los que desarrollan aplicaciones Web. Frecuentemente, se producen “batallas políticas” de acusaciones recíprocas entre las dos organizaciones sobre si una aplicación Web falla debido a un error de desarrollo o a un asunto de configuración del servidor Web. Para acabar, hay un conjunto de tecnologías de componentes J2EE particulares que deben dominarse –servlets, JSPs, JDBC, etc., cada una con sus propios obstáculos y retos conceptuales. Sin importar la experiencia general de una persona como desarrollador de software, no es realista esperar que alguien que es: a) Nuevo en el paradigma de objetos. b) Nuevo en el paradigma de aplicaciones Web. c) Nuevo en el lenguaje Java. d) Nuevo en cómo trabajan las diferentes tecnologías de componentes J2EE, o, incluso más básicamente, a qué propósito sirve cada una de ellas. pueda conseguir competencia en todo lo anterior en menos de un período de dos años y esto sólo si recibe capacitación formal y es guiado correctamente. ¡Aún así, no es raro que las organizaciones se embarquen en su primer proyecto J2EE esperando que sus desarrolladores “de legado”, comenzando de cero, puedan acercarse velozmente a todo lo anterior, entregando una aplicación J2EE robusta, no trivial y de objetivo crítico en seis meses o menos! A menos que podamos transmitir a la gerencia cuán desalentadora es la tarea de reeducar una fuerza informática de trabajo en esas tecnologías, paradigmas y herramientas, los proyectos incumplirán repetidamente sus fechas límite, los desarrolladores se estresarán cada vez más, y las organizaciones en su totalidad se verán decepcionadas profundamente. Sobre la Autora Jacquie Barker es una autora con publicaciones, ingeniera de software profesional y Miembro Adjunto de Facultad en la Universidad George Washington. Con más de 25 años de experiencia tanto como desarrolladora de software en la práctica como gerente de proyectos, ha pasado los últimos 11 años centrándose en la tecnología de objetos y se ha convertido en experta en el modelado práctico de objetos y como programadora de Java certificada por Sun Microsystems. Su libro “Beginning Data Objects” (publicado por Apress LP; ISBN 1590591461) se centra en abordar la crisis de los objetos a través de: Hacer que los lectores se sientan cómodos con la terminología y conceptos fundamentales de la orientación de objetos - o sea, que “piensen” en términos de objetos. Darles experiencia práctica en modelado de objetos; es decir, que desarrollen un “borrador” UML que pueda usarse como base para construir a continuación un sistema informático orientado a objetos. Enseñarles lo básico del lenguaje Java. Ilustrarles cómo un modelo de objetos se traduce a una aplicación Java que funciona. Visite su sitio, http://objectstart.com para más información sobre “Beginning Java Objects” y sus ofertas relacionadas de capacitación. O contacte a Jacquie por correo electrónico, en jjbarker@objectstart.com Compruebe la calidad de nuestro desarrollo offshore. Aurum Solutions tiene experiencia en desarrollo offshore en J2EE y .NET de alta calidad y reducidos costos para empresas europeas y norteamericanas. Conozca nuestro desarrollo offshore haciendo clic aquí o en la página Web http://espanol.aurumsol.com/offshore.html. Cursos de Aurum Solutions relacionados con el tema de este artículo: “Análisis y diseño orientado a objetos” “Lenguaje de programación Java” “Enterprise Javabeans” “Programación en n-capas” “Programación MVC usando Struts” “Servlets y JSP” “JavaScript” “Seguridad en Java” “Patrones de diseño” “HTML” “XML” “Java Data Objects” “Bibliotecas de etiquetas en JSP” “Gestión de proyectos informáticos” |