martes, 8 de noviembre de 2011

APLICACIONES INFORMÁTICAS

Definición de aplicación informática


Programa informático que permite a un usuario reutilizar una computadora con un fin específico. Las aplicaciones son parte del software de la computadora y suelen ejecutarse sobre el sistema operativo.

Una aplicación de software suele tener un único objetivo: Navegar en la web, revisar correo, explorar tu disco duro, editar textos, jugar, etc… Ejemplos: Internet Explorer, Outlook, Word, Excel, Winamp, etc…

Una aplicación que posee múltiples programas se le denomina paquete o suite. Un ejemplo de paquete informático la suit ofimática Microsoft Office.

 Licencias de Software


La licencia de Software es el conjunto de permisos que un desarrollador da para la distribución, uso y o modificación de la aplicación que desarrolló. Puede indicar en esta licencia también los plazos de duración, el territorio en el que se aplica y otros puntos. Ejemplos de licencias:

·         De pago: Para usar el Software de manera legal es necesario el pago de la cantidad fijada.

·         Freeware: De uso libre y en ocasiones de distribución libre.

·         Shareware Trialware: Software de prueba a veces limitado en tiempo o funcionalidad.

·         De código abierto: Se permite acceso al código fuente del programa y su modificación.

·         Licencia Pública General (GNU o en inglés GPL): El autor conserva los derechos de autor (Copyright) y este tipo de Software puede venderse, sin embargo, da permiso para la modificación y redistribución del mismo, eso sí, únicamente bajo esta misma licencia.

·         Etc.



ü  Ingeniería social: Este término se refiere a la obtención de un código fuente a partir de los ejecutables. El código fuente generado no es exactamente igual que el original, como mínimo perderá los comentarios.



 Clasificaciones de las aplicaciones


Existen innumerables tipos de aplicaciones, pero intentaremos alguna clasificación.

Por ámbito de aplicación


v Aplicaciones de escritorio: Se ejecutan solo en un equipo, utilizando un interfaz gráfico para interaccionar con ellas.

v Aplicaciones de línea de comandos: Se comunican solo con el equipo utilizando una interfaz de ámbito con el usuario. Aunque son menos amigables para el usuario siguen utilizándose, sobre todo para tareas de administración de sistemas u otras tareas técnicas.

v Aplicaciones distribuidas: Se ejecutan en más de un equipo, utilizando comunicaciones de red para realizar su trabajo.

v Aplicaciones web: Son un tipo de aplicaciones distribuidas que utilizando para su ejecución el entorno de servidor de páginas web y sus programas clientes (navegadores).

No todas las aplicaciones pertenecen a un único tipo, a veces se mezclan. Ejemplos:

  • El correo electrónico: Tiene su versión de aplicación de escritorio (como Outlook Express) que usa servidores de correo SMTP, POP3 o IMAP (porque aunque esto es una aplicación de escritorio en conjunto forma una aplicación distribuida) o su versión de aplicación web como (Gmail, Hotmail, Yahoo) que utiliza un servidor web para realizar la misma función.
  • Los gestores de bases de datos: Pueden ser orientados para ser ejecutados como aplicaciones de escritorio (Microsoft Access) o como aplicaciones distribuidas. En este último caso los accesos pueden ser desde diferentes equipos y los datos se pueden guardar y consultar en diferentes equipos; imagínese la base de datos de Google.
  • En los grandes centros de cálculo se requiere el uso de la potencia de múltiples ordenadores simultáneamente: Se requiere de una aplicación distribuida o quizás de un cluster de ordenadores.
  • Si queremos conocer en un entorno Windows la IP que tiene nuestro equipo podemos abrir el interfaz de línea de comandos y escribir “ip config /all”. Si es de tipo dinámico liberamos la IP con “ip config /release” y la renovamos con “ipconfig /renew”.



  Por propósito


v Aplicaciones de propósito general:

§  Para la oficina: Procesadores de textos, hojas de cálculo, gestor de base de datos sencillo, desarrollo de presentaciones.

§  Para la gestión de la empresa: Contabilidad, facturación, realización de nóminas, para la gestión de almacén: Aplicaciones de TPV (Terminal de punto de venta).

§  Diseño gráfico: Retoque fotográfico, realización de esquemas y organigramas.

§  Otras para el usuario estándar: Compresores y descompresores de archivos, lectores de documentos, reproductores de música y vídeos, navegadores web, antivirus…

v  Aplicaciones de propósito específico:

Son útiles en un campo concreto.

§  Científicas: Matemáticas, Simuladores de Física, Procesos de cálculo masivo, etc…

§  Para otros campos: Educativos/Productivos, Medicina, Abogacía, Ingeniería, Arquitectura.

§  CAD/CAM: Diseño y producción asistido por ordenador.

§  Asistentes para el sector primario: Como para la siembra o recolección asistida por GPS.

§  Aplicaciones personales para el móvil: iCuenca.

§  Aplicaciones de comunicaciones/Internet: Correo electrónico, transferencia de ficheros, servidores web.

§  Bibliotecas de información/recursos: Wikipedia, Softonic, Youtube, Moodle.

§  De programación a medida: No existe aplicación previa que solucione la tarea y se encarga una aplicación a un equipo de desarrollo para cumplir esa función. Esta aplicación será difícilmente trasladable a otro contexto por parte de los desarrolladores, y suele requerir tareas de mantenimiento del Software para adaptar su funcionamiento a la realidad cambiante. Ejemplo: El Software de los bancos, aplicaciones web para dar soporte a cierta tarea de la empresa.

§  Juegos/ocio.

LENGUAJES DE ALTO Y BAJO NIVEL

Al contrario de lo que cabría suponer, los lenguajes clásicos son los más cercanos al programador, los altos, en contrario a los de bajo nivel son los que están más relacionados con el Hardware. El lenguaje “C” se considera de medio – alto nivel ya que aunque tiene muchas características de los de alto nivel exige algo de conocimiento de la máquina.

Otras clasificaciones de lenguajes de programación


Por propósito


  • Lenguajes de propósito general: Aptos para todo tipo de tareas, ejemplos “C”, Java, Basic.
  • Lenguajes de propósito específico: Para un objetivo concreto, ejemplo CSound.
  • Lenguajes de programación de sistemas: Diseñados para realizar sistemas operativos o drivers, ejemplos Ensamblador, “C”.
  • Lenguajes de script: Para realizar tareas varias de control de auxiliares, antiguamente eran los llamados lenguajes de procesamiento por lotes (Batch). Se subdividen en varias clases (de Shell, de GUI, de programación web,). Ejemplos, Bash(shell), IRC script, JavaScript (web).

 Por el paso del tiempo


Con el paso del tiempo se va incrementando el nivel de abstracción pero en la práctica los de última generación no terminan de sustituir al del anterior.

  • Lenguajes de primera generación (1GL): Código máquina.
  • Lenguajes de segunda generación (2GL): Código ensamblador.
  • Lenguajes de tercera generación (3GL): Entre los que se encuentran la mayoría de lenguajes modernos de más alto nivel de abstracción. Diseñados para facilitar la programación a los humanos. Ejemplos: C, Java, PHP…
  • Lenguajes de cuarta generación (4GL): Diseñados con un propósito concreto para abordar un tipo de problemas. Ejemplos: Natural, matemática.
  • Lenguajes de quinta generación (5GL): La intención es que el programador establezca que problema ha de ser resuelto y las condiciones a reunir y la máquina lo resuelve. Se usan en inteligencia artificial. Ejemplo: Prolog.

  Lugar de ejecución


En sistemas distribuidos según donde se ejecute:

  • Lenguajes de servidor: Se ejecutan en el servidor. Ejemplo: PHP.
  • Lenguajes de cliente: Se ejecutan en el cliente. Ejemplo: JavaScript, Visual Basic Script (lo ejecutan los navegadores web).

  Concurrencia


Según admitan o no concurrencia de procesos, esto es la ejecución simultanea de varios procesos lanzados por el programa.

  • Lenguajes concurrentes: ADA, Java.
  • Lenguajes no concurrentes: C.

Interactividad


Según la interactividad del programa con el usuario u otros programas.

  • Lenguajes orientados a sucesos o eventos: El flujo del programa es controlado por la interacción con el usuario o por mensajes de otros programas / sistema operativo, como editores de texto, interfaces gráficos de usuario (UI) o kernels. Ejemplos: VisualBasic, Entornos MVC (Modern View Controller), Lenguajes de programación declarativos.
  • Lenguajes no orientados a sucesos: El flujo del programa no depende de sucesos exteriores, si no que se conoce de antemano, siendo los procesos BATCH el proceso más claro (actualizaciones de bases de datos, colas de impresión de documentos…) Ejemplos: Lenguajes de programación interactivos, ejecución en línea de comandos.


  Productividad (momento freak)


Según se caractericen por tener virtudes útiles o productivas, u oscuras y enrevesadas.

·         Lenguajes útiles o productivos: Sus virtudes en cuanto a eficacia, sencillez, claridad, productividad, motiva a que sean utilizados en empresas, administraciones públicas y o en la enseñanza. Existen diferentes grados de productividad en esta clase de lenguajes a mayor productividad mayor conveniencia para la empresa. Ejemplos: Cualquier lenguaje de uso habitual, C, Java, C++, C#, Lisp, Python, Ruby.

·         Lenguajes esotéricos o exóticos: Inventados con la intención de ser los más raros, oscuros, difíciles, simples y o retorcidos de los lenguajes, para diversión o entretenimiento de freaks programadores. A veces exploran nuevas ideas en programación. Ejemplos: BrainFuck.

LENGUAJES COMPILADOS Y LENGUAJES EJECUTADOS

No todos los lenguajes necesitan ser compilados para su ejecución, en la plataforma adecuada puede haber intérpretes del código fuente, que lo traducen (digamos línea a línea) a código máquina en el momento de la ejecución, un ejemplo de estos lenguajes pueden ser el antiguo Basic o el moderno PHP, que integrado como texto en documentos de un servidor web, se traduce y ejecuta en el momento en que el usuario solicita esa página (.php).

Como se podría deducir los programas ejecutables en máquinas virtuales son una mezcla entre compilados e interpretados. Necesitan compilación, cuyo resultado será interpretado por la máquina virtual en el momento de la ejecución. La ventaja de la compilación en estos lenguajes es que la interpretación será más rápida que la de un programa realizado en un lenguaje “puramente interpretado”.

Si tuviéramos que ordenarlos por velocidad en el momento de su ejecución, de mayor a menor:

Programas compilados >> Bytecodes >> Programas interpretados

MÁQUINAS VIRTUALES


El proceso anterior es adecuado y sigue utilizándose en la actualidad, pero tiene un problema. El programa ejecutable es dependiente de la plataforma. Un programa escrito en lenguaje C compilado y linkado para Windows, por ejemplo no podrá ser ejecutado en plataformas Linux; debería ser recompilado y linkado de nuevo en la nueva plataforma.

Pueden realizarse programas multiplataforma gracias al uso de máquinas virtuales. Supongamos una máquina virtual Java: los programas se compilarían no para una plataforma real, sino para “la máquina virtual”. Sería la máquina virtual Java (JVM) la que cambiara su interfaz con la plataforma en la que se encuentre: Linux, Windows, móviles, lavadoras,  frigoríficos,…. Pero al programa le ofrecerá el mismo entorno de ejecución.
Definición: Una máquina virtual no es más que otro programa ejecutable en la plataforma elegida y que enmascara la máquina real a los programas producidos para ella.

Además de Java hay otros lenguajes que permiten producir ejecutables multiplataforma, por ejemplo, todos los del Framework (entorno de trabajo) .NET de Microsoft (Visual Basic .NET, C++, C#). La ejecución de estos programas multiplataforma es algo más lenta que los compilados directamente para la plataforma por tener que ser interpretados por la máquina  virtual.

CÓDIGO FUENTE, CÓDIGO OBJETO Y CÓDIGO EJECUTABLE. MÁQUINAS VIRTUALES

  Definiciones
  • Código fuente: Conjunto de sentencias entendibles por el programador que componen el programa o una parte de ello. Suele estar almacenado en un fichero del tipo texto como los que se pueden abrir por ejemplo, con el bloc de notas o Wordpad en los entornos Windows. El código fuente estará escrito en un lenguaje de programación determinado, elegido por el programador, como pueden ser: Basic, C, C++, C#, Java, Perl, Python, PHP.
  • Código objeto: Conjunto de instrucciones y datos escritos en un lenguaje que entiende el ordenador directamente: binario o código máquina. Provienen de la traducción de cierto código fuente, es un fragmento del programa final y es específico de la plataforma de ejecución.
  • Código ejecutable: Reúne diferentes códigos u objetos generados por los programadores junto con las “librerías de uso general” (propias del entorno o del lenguaje de programación) componiendo el programa final. Este es el código que ejecutan los usuarios del sistema, y es específico para una plataforma concreta: Windows, Linux, Mac OS, o cierto sistema Hardware.

Concepto de programa informático

El concepto es diferente según el paradigma de programación que se siga:

  • Paradigma imperativo: según el paradigma imperativo un programa un conjunto de instrucciones que al ejecutarse resuelven un problema. El programa le dice al ordenador: haz esto,…, es decir, le da órdenes
  • Paradigma declarativo: se le dice “o explica” al ordenador como deben ser las cosas. Un ejemplo es el código HTML. Se le dice que se quiere un título con un texto en concreto, un color de fondo, un color de letra y el ordenador lo presenta tal cual
  • Paradigma lógico: los programas son un conjunto de hechos y reglas lógicas, la ejecución es una respuesta a una pregunta de tipo lógico. Fueron usados en el inicio de la inteligencia artificial. Un ejemplo PROLOG
  • Paradigma funcional: los programas se ven como funciones matemáticas que son definidas por el programador, como operaciones o aplicaciones entre dominios(suma , resta, etc) pero que pueden llegar a ser tan complejas como se desee. La ejecución de un programa de este tipo es la ejecución de una función compleja a la que dados unos parámetros responde con un resultado que sirve para resolver el problema. Por ejemplo  suma(2,3)  à  5. También se utilizó este paradigma en inteligencia artificial o lenguajes de programación como LISP.
  • Paradigma orientado a objetos: los programas son definidos y ejecutados como un conjunto de objetos de distintas clases que se interrelacionan pasándose mensajes entre sí. La ejecución del programa podría verse como un envío desde el usuario al objeto principal de un mensaje diciéndole “ejecuta que..” y a partir de ahí quizá este objeto cree otros objetos a los que les pase mensajes y quizá le den respuesta que a su vez podrían crear otros objetos, con los que se comunicaran , etc. Es paradigma actual conceptualmente más simple y potente, es el más utilizado en la actualidad. Se nutre tanto del paradigma declarativo, explicando como son los objetos (que tienen como del imperativo, indicando que hacer cuando recibe cierto mensaje). Ejemplos C++, SmallTalk. JAVA. C#, PHP.

Entornos de Desarrollo

Un entorno de desarrollo integrado es un programa informático compuesto por un conjunto de herramientas de programación. Puede dedicarse en exclusiva a un sólo lenguaje de programación o bien, poder utilizarse para varios.