¿Qué es multiplataforma?

Multiplataforma se refiere a la capacidad de un lenguaje de programación, software o dispositivo de hardware para ejecutarse en múltiples sistemas operativos o computadoras con diferentes arquitecturas de hardware.

En términos generales, cualquier lenguaje informático puede ser multiplataforma y los desarrolladores solo necesitan proporcionar entornos de ejecución/middleware para diferentes plataformas. Estrictamente hablando, esto significa que un programa compilado en un lenguaje informático, con sólo modificaciones menores, puede compilarse para ejecutarse en otra plataforma que no proporcione un entorno de ejecución/middleware. Por ejemplo, Java es una solución multiplataforma que proporciona un entorno de ejecución, mientras que C es un lenguaje estándar estrictamente multiplataforma.

El concepto de multiplataforma es un concepto importante en el desarrollo de software, es decir, no depende del sistema operativo ni del entorno de hardware. Las aplicaciones desarrolladas bajo un sistema operativo aún pueden ejecutarse bajo otro sistema operativo. En términos relativos, si un determinado lenguaje informático puede lograr un alto grado de multiplataforma sin modificar el código, entonces cuanto más abstracto sea el lenguaje, menor será la capacidad de controlar el hardware y solo es adecuado para desarrollar sistemas modelo altamente abstractos. . Lenguajes como java, delphi y eLanguage ya son multiplataforma. Se pueden desarrollar, ejecutar y mantener en una variedad de sistemas.

La mayoría de los lenguajes informáticos son multiplataforma en un sentido absoluto: envían señales a la CPU de una manera legible por humanos de alto nivel y, por lo tanto, no dependen de ningún sistema operativo. Sin embargo, si desea utilizar el kit de herramientas de widgets del sistema para crear una nueva interfaz gráfica de usuario (GUI), es posible que necesite utilizar bibliotecas o funciones API específicas del sistema para desarrolladores. Aunque C++ es multiplataforma, los programas C++ que utilizan la API Win32 en Windows a menudo no se compilan en máquinas Unix. Los diferentes compiladores interpretan las especificaciones del lenguaje de manera diferente. En este caso, se debe considerar antes de construir el programa para diferentes sistemas.

Algunos lenguajes (como Java) se dan cuenta desde el principio de que necesitan ejecutarse en todas las plataformas, por lo que se ha implementado la multiplataforma en la configuración regional de su plataforma. Por ejemplo, Java se puede utilizar multiplataforma precisamente porque la biblioteca Swing se ha implementado en muchas plataformas. Asimismo, el acceso a archivos multiplataforma es posible porque existen bibliotecas de acceso a archivos para cada plataforma. El marco wxWidgets es una biblioteca multiplataforma que proporciona una variedad de soluciones diferentes a diferentes problemas multiplataforma. Hay muchas bibliotecas similares que se pueden usar de acuerdo con situaciones de desarrollo multiplataforma en diferentes idiomas.

No es factible proporcionar compilación y prueba para cada sistema operativo y CPU; el software de código abierto permite a los usuarios compilar su propio código de destino, lo que es más propicio para el desarrollo multiplataforma. Asimismo, los lenguajes interpretados o que requieren una máquina virtual son más multiplataforma porque los usuarios deben compilarlos ellos mismos. La máquina virtual Java de Sun, Hotspot, proporciona binarios compilados sólo para unas pocas plataformas, pero no para todas. Por ejemplo, Sun para GNU/Linux solo admite la plataforma i386, pero si alguien ejecuta Linux en una computadora PowerPC o SPARC, tendrá que compilar su propio código de máquina nativo (código de máquina) o utilizar software de terceros para ejecutar programas Java. .

Muchas API (interfaces de programación de aplicaciones) dependen de la plataforma. OpenGL puede considerarse multiplataforma porque no está vinculado a ningún sistema operativo, arquitectura de CPU o marca de dispositivo gráfico específico. Las API específicas de la plataforma se pueden crear en otros sistemas como capas de compatibilidad, como la biblioteca WINE, y los programas de Windows se pueden ejecutar en sistemas UNIX.

Muchos lenguajes de programación también tienen extensiones y middleware multiplataforma, por lo que los programadores pueden compilar/ejecutar el mismo código fuente en diferentes plataformas con sólo modificaciones menores, como Qt y wxWidgets.

Software compatible con múltiples sistemas operativos

1. Sistema de gestión de bases de datos (DBMS):

MySQL: MySQL, MySQL, MySQL, MySQL, MySQL, MySQL. MySQL, MySQL, MySQL, MySQL, MySQL, MySQL, MySQL, MySQL, MySQL, MySQL, MySQL, MySQL.

MySQL: Solaris, Linux, Windows, FreeBSD

Oracle: Solaris, Linux, Windows

2. Servidor web, servidor de aplicaciones:

Apache: Solaris, Linux, Windows, FreeBSD

Tomcat: Linux, Windows, FreeBSD

3. Navegador de Internet:

Mozilla Firefox: Linux, FreeBSD. , Solaris, AIX, Windows,

Lenguajes de programación que pueden usarse para el desarrollo de software en diferentes sistemas operativos

C, C++, Java

Perl, Tcl, Erlang

Python, Delphi + Kylix, REALbasic

El desarrollo de aplicaciones java multiplataforma incluye cinco aspectos:

1 Servidor multiaplicaciones<. /p>

2. Base de datos cruzada

3. Sistema operativo cruzado

4. Soporte multilingüe<. /p>

Hablemos de ellos por separado.

■Servidor de aplicaciones cruzadas

Este punto parece un poco redundante, ¿no es uno de los lemas de Java "compilar y ejecutar" pero la experiencia real nos dice que esto es sólo un lema? . En efecto, es "compilar una vez, depurar en todas partes". ¿Por qué sucede esto? Desde la perspectiva de los servidores de aplicaciones, los productos de cada empresa se basan más o menos en las especificaciones estándar de Java. El desarrollo de aplicaciones a pequeña escala se basa principalmente en tomcat y las aplicaciones a gran escala se basan principalmente en weblogic/websphere.

¿Se puede implementar la aplicación desarrollada normalmente en todos los servidores de aplicaciones? La respuesta es no. No hay problemas al implementar en tomcat5, pero puede haber problemas en tomcat4; no hay problemas en tomcat5/4, pero puede haber problemas en resin/jetty/weblogic/websphere. Según mi experiencia, las aplicaciones desarrolladas en resin/jetty/weblogic básicamente no tienen problemas cuando se implementan en Tomcat. Sin embargo, pueden surgir varios problemas cuando las aplicaciones desarrolladas en Tomcat se implementan en otros servidores de aplicaciones. Esto está relacionado con el método de posicionamiento y desarrollo del propio Tomcat. Se parece más a un producto académico que a un producto comercial.

Para aplicaciones pequeñas, prefiero usar resina. Su velocidad, estabilidad, compatibilidad y procesamiento chino son excelentes. En comparación, jetty, conocido por su "java puro y rápido", no es del todo satisfactorio. En las versiones jetty 4/5/6, la ubicación de la sesión, el estándar web.xml, la compatibilidad con el complemento struts y el procesamiento log4j son todos diferentes. En el último jetty6, la imposibilidad de utilizar el método session.validate() es un problema fatal y, una vez que se utiliza este método, ya no se puede utilizar set/getAttribute.

Mover la aplicación a websphere5 también es muy laborioso. La aplicación funciona bien en otros servidores de aplicaciones, pero una vez implementada en websphere5, no carga el archivo de configuración de struts correctamente.

Pensé que era un problema con el archivo de configuración de struts, pero incluso si eliminaba todas las configuraciones de acciones/formularios y dejaba solo un archivo de configuración vacío, no se iniciaba correctamente. Al final, no tuve más remedio que probar suerte. Consideré si había algún problema con las versiones del paquete jar de struts. Después de verificar, descubrí que la aplicación usaba el paquete jar de struts1.2. El paquete jar de struts1.1 y lo inicié de nuevo. Todo funciona bien. Preguntas como esta son realmente tortuosas.

Por eso creo que los servidores entre aplicaciones son muy importantes. No puede decirles a los clientes que nuestro sistema solo puede ejecutarse en Tomcat. En cuanto a weblogic/websphere, gastó mucho dinero para comprarlo, lo siento, todavía no lo admitimos. El cliente vomitará sangre.

■ Base de datos cruzada

A menudo veo productos de una gran empresa que requieren el uso de una base de datos Oracle o SQLServer. ¿Desea cambiar la base de datos para la implementación? De ninguna manera, la gente dice que nuestros productos solo admiten este tipo de base de datos, así que sea honesto y práctico. Pero para los clientes, para reducir la inversión y garantizar que el sistema interno utilice la misma base de datos tanto como sea posible para reducir los costos de mantenimiento (no se puede contratar un DBA de Oracle y luego un DBA de SQLserver), siempre se espera que el nuevo sistema utiliza la misma base de datos. Creo que también quieres que el nuevo sistema utilice la misma base de datos que antes, ¿verdad?

Ahora, con hibernación, sobre la base del desarrollo de aplicaciones, básicamente puede cumplir con los requisitos de bases de datos cruzadas. Creo que este es el punto más destacado de hibernación. Pero también cabe señalar que durante el desarrollo se deben tener en cuenta en la medida de lo posible las características de las diferentes bases de datos. Sin embargo, una cosa a tener en cuenta es que si algunas funciones del sistema dependen de JNI para llamar a componentes nativos de Windows, como impresión, operaciones de Word/Excel o componentes de informes que solo pueden ejecutarse en Windows (como informes digitales de gigantes nacionales, etc. )integrado.

■ Navegador cruzado

Pensé que si fuera solo una aplicación doméstica, esto no sería importante. Sería bueno desarrollarlo basado en IE como estándar.

PD: No es fácil soportar completamente IE, y el propio IE5/6 tiene muchas diferencias.

Sin embargo, si el producto en sí espera afianzarse en el mundo y competir con productos extranjeros, la compatibilidad total con el navegador es esencial. Al menos debería ser compatible con IE y Firefox. Si eres estricto contigo mismo, creo que Opera debería usarse como estándar. El estándar HTML/css/javascript de Opera es el navegador mejor implementado y compatible.

■Soporte multilingüe

Si su producto solo quiere venderse en China y no considera el mercado mundial en absoluto, entonces este es bueno.

¿A qué debe prestar atención al utilizar programas Java en todas las plataformas?

La mayor ventaja de utilizar el lenguaje Java para escribir aplicaciones es "compilar una vez y ejecutar en todas partes", pero esto no Esto significa que todos los programas Java tienen características multiplataforma. De hecho, un número considerable de programas Java no pueden ejecutarse correctamente en otros sistemas operativos. No puede ejecutarse correctamente en otros sistemas operativos, entonces, ¿cómo podemos escribir un programa Java verdaderamente multiplataforma? Las siguientes son algunas cosas a las que debe prestar atención al escribir programas Java multiplataforma:

1. Al escribir aplicaciones Java multiplataforma, puede elegir JDK1.0, 1.1, 1.2 o herramientas de desarrollo GUI. que los admitan, como: Jbuilder, VisualAgeforJava, etc., pero debe tener en cuenta que su programa Java solo puede usar el paquete API central de Java. Si desea utilizar un paquete de biblioteca de terceros, el paquete de biblioteca también debe desarrollarse. por el paquete principal de Java. De lo contrario, antes de publicar su programa, también habrá una versión de JVM que admita este paquete de biblioteca de Java. En otras palabras, su programa debe ser 100% Java puro. Por ejemplo, Visual J++ no es Java puro y los programas escritos en Visual J++ no son independientes de la plataforma.

2. Ya sea que esté utilizando JDK u otras herramientas de desarrollo, active todas las opciones de advertencia al compilar para que el compilador pueda encontrar tantas declaraciones relacionadas con la plataforma como sea posible y emitir advertencias. Aunque no hay garantía de que un programa que se compila sin errores de advertencia sea multiplataforma, es probable que un programa que contiene errores de advertencia no sea independiente de la plataforma.

3. Cuando utilice cualquier método en el programa, verifique la documentación detalladamente para asegurarse de que el método que está utilizando no sea un método que haya sido declarado obsoleto en el documento (método obsoleto), ni lo sea. un método implícito que no está marcado en el documento. Método (método no documentado).

4. Intente no utilizar el método de salida java.lang.System al salir de un programa Java. El método Exit puede finalizar la JVM y, por lo tanto, el programa, pero si tiene otro programa Java ejecutándose al mismo tiempo, usar el método exit permitirá que el programa se cierre, lo que obviamente no es lo que queremos ver. De hecho, para salir de un programa Java, puede utilizar destroy() para salir de un proceso que se ejecuta de forma independiente. Para programas de subprocesos múltiples, es necesario cerrar subprocesos individuales que no sean demonios. Solo cuando el programa se cierre de forma anormal, utilice el método de salida para salir del programa.

5. Evite el uso de métodos locales y código local tanto como sea posible, escriba sus propias clases Java con las funciones correspondientes y reescriba los métodos. Si debe utilizar un método nativo, puede escribir un programa de servidor para llamar al método y luego convertir el programa que está escribiendo ahora en un programa cliente para el programa de servidor, o considerar una estructura de programa CORBA (Common Object Request Broker).

6. Existe un método winexec en Java similar a Delphi, es decir, el método exec en la clase java.lang.runtime. Dado que este método en sí no tiene nada que ver con la plataforma, el comando y. parámetros de comando llamados a este método Sin embargo, depende de la plataforma, así que evite usarlo al escribir programas. Si debe llamar al método, si debe llamar a otros programas, debe permitir que el usuario configure el comando y sus parámetros. Por ejemplo, en Windows puedes llamar al programa notepad.exe, pero en Linux debes llamar al programa vi.

7. Toda la información en programación debe utilizar el juego de caracteres ASCII, porque no todos los sistemas operativos admiten el juego de caracteres Unicode, lo cual es un gran problema para los programas de software chino Java multiplataforma.

8. No codifique ninguna constante relacionada con la plataforma en el programa, como separadores de línea, separadores de archivos, separadores de rutas, etc. Estas constantes son diferentes en diferentes plataformas, como la separación de archivos, que. es "/" en UNIX y MAC, y "\" en Windows. Si desea utilizar estas constantes, debe utilizar el método getProperty en la clase jdava.util.Properties, como java.util.Properties.getProperty(. "file .separator") puede obtener el separador de archivos, getProperty("line.separator") devuelve el separador de línea y getProperty("path.separator") devuelve el separador de ruta.

9. Al escribir programas de red multiplataforma, no utilice el método getHostName de la clase java.net.InetAddress para obtener el nombre de host, porque los formatos de nombre de host son diferentes en diferentes plataformas. Es mejor usar getAddress para obtener la misma dirección IP. Además, todos los nombres de host en el programa deben reemplazarse con direcciones IP. Por ejemplo, www.263.net debe reemplazarse con la dirección IP correspondiente.

10. Los programas que involucran operaciones con archivos deben prestar atención: no codifique la ruta del archivo en el programa, el motivo es el mismo que el del punto 8, pero este punto es particularmente importante, por lo que se enumera por separado. Además, las diferentes plataformas tienen diferentes requisitos para los caracteres utilizados en los nombres de archivos y la longitud máxima del nombre de archivo. Al escribir un programa, utilice caracteres ASCII generales como nombre de archivo y no tenga el mismo nombre que un programa existente en la plataforma, de lo contrario se producirán conflictos.

11. Si el programa que escribe es un programa GUI, no puede establecer rígidamente el tamaño y la posición del componente cuando usa componentes AWT. En su lugar, debe usar el administrador de diseño de Java (laymanager) para configurar y administrar. los componentes visuales.

12. Dado que diferentes sistemas operativos, diferentes máquinas y sistemas admiten diferentes colores, tamaños de pantalla y resoluciones, ¿cómo obtener estas propiedades? Utilice la clase java.awt.Systemcolor para obtener el color deseado. Por ejemplo, inactiveCaption en esta clase es el color de fondo del título activo en el borde de la ventana y menú es el color de fondo del menú. El kit de herramientas utiliza java.awt.Toolkit getScreenResolution para mostrar la resolución de la pantalla en "píxeles por pulgada". La clase getScreenSize puede obtener el tamaño de la pantalla en pulgadas y loadSystemColors puede enumerar todos los colores del sistema.