GoConqr hat ein neues Design! Sag uns, wie es dir gefällt.

Notizen

Lenguaje de programación

DAVID ALEJANDRO SUAREZ VARON Spanisch 10 Seiten

Inhalt der Notizen (10)

Seite 1

¿Qué es un lenguaje de programación?

Un lenguaje de programación es un lenguaje formal (o artificial, es decir, un lenguaje con reglas gramaticales bien definidas) que le proporciona a una persona, en este caso el programador, la capacidad de escribir (o programar) una serie de instrucciones o secuencias de órdenes en forma de algoritmos con el fin de controlar el comportamiento físico o lógico de un sistema informático, de manera que se puedan obtener diversas clases de datos o ejecutar determinadas tareas. A todo este conjunto de órdenes escritas mediante un lenguaje de programación se le denomina programa informático.

"Programar" viene a ser el proceso de crear un software fiable mediante la escritura, prueba, depuración, compilación o interpretación, y mantenimiento del código fuente de dicho programa informático. Básicamente, este proceso se define aplicando lógicamente los siguientes pasos:

El desarrollo lógico del programa para resolver un problema en particular.

Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa).

Compilación o interpretación del programa hasta convertirlo en lenguaje de máquina.

Prueba y depuración del programa.

Desarrollo de la documentación.

Qué son los lenguajes de programación y para qué sirven | Computación y programación (Einbetten)

Seite 2

Alto y Bajo Nivel

Lenguajes de Alto Nivel

Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de la capacidad con que los ejecutan las máquinas. Estos lenguajes permiten una máxima flexibilidad al programador a la hora de abstraerse o de ser literal. Permiten un camino bidireccional entre el lenguaje máquina y una expresión casi oral entre la escritura del programa y su posterior compilación. Por lo general suelen estar orientados a objetos, a eventos o a funciones, pudiendo estos combinarse. Asimismo, pueden ser compilados o interpretados. Algunos ejemplos son: Java, PHP, Python, Javascript, C#.

En los primeros lenguajes, la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales o lenguajes de bajo nivel. Otra limitación de estos es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de alto nivel se crearon para que el usuario común pudiese solucionar un problema de procesamiento de datos de una manera más fácil y rápida.

Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se llaman de tercera generación o de nivel alto, en contraposición a los de bajo nivel o de nivel próximo a la máquina.

Características

Lenguaje de alto nivel se refiere al nivel más alto de abstracción de lenguaje de máquina. En lugar de tratar con registros, direcciones de memoria y las pilas de llamadas, lenguajes de alto nivel se refieren a las variables, matrices, objetos, aritmética compleja o expresiones booleanas, subrutinas y funciones, bucles, hilos, cierres y otros conceptos de informática abstracta, con un enfoque en la facilidad de uso sobre la eficiencia óptima del programa.

Ventajas e inconvenientes

Ventajas

Genera un código más sencillo y comprensible.

Escribir un código válido para diversas máquinas o sistemas operativos.

Permite utilizar paradigmas de programación.

Permite crear programas complejos en relativamente menos líneas de código.

Inconvenientes

Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.

Algunos requieren que la máquina cliente posea una determinada plataforma.

Principales leguajes de nivel alto

VB.NET

Erlang

Ada

ALGOL

BASIC

C Sharp

FORTRAN

C++ Se usa en conjunto con C y deben mencionarse como C/C++

Ventajas e inconvenientes Ventajas Genera un código más sencillo y comprensible. Escribir un código válido para diversas…

[Tema 7] Lenguajes de alto y bajo nivel (Einbetten)

Seite 3

Lenguajes de Bajo Nivel

Un lenguaje de programación de características de bajo nivel o de primera generación, es aquel en el que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de las computadoras que lo soportan.

El uso de la palabra bajo en su denominación no implica que el lenguaje sea menos potente que un lenguaje de alto nivel, sino que se refiere a la reducida abstracción entre el lenguaje y el hardware. Por ejemplo, este tipo de lenguajes se utiliza para programar tareas críticas de los sistemas operativos, de aplicaciones en tiempo real o controladores de dispositivos.

Los lenguajes de bajo nivel tales como el lenguaje ensamblador pueden ser más difíciles de programar que los lenguajes de alto nivel debido a que están más íntimamente relacionados con las características técnicas del hardware. Además estos suelen carecer de abstracciones de mayor nivel. No es posible una abstracción fuera de lo estipulado para el conjunto del microcódigos del microprocesador de un ordenador. Por otro lado, es más fácilmente traducible a lenguaje de máquina, tarea que realiza esencialmente un compilador.

De menor a mayor nivel de abstracción respecto del hardware es posible clasificar los lenguajes de programación de la siguiente manera:

Lenguaje de máquina: Está formado por los unos (1) y ceros (0) que ejecutará directamente la unidad central de procesamiento (CPU). Al visualizar este lenguaje en un editor de texto plano parecerá sin sentido (caracteres basura). Muchos de ellos serán caracteres no imprimibles. Estos ceros y unos representan literalmente instrucciones y datos a ser procesados.

Lenguajes ensambladores (en inglés assembler): También denominados nemotécnicos o nemónicos, son un primer nivel de abstracción. No son ya programas ejecutables directamente por el ordenador, sino textos de código fuente inteligibles por humanos que necesitan de alguna herramienta (esencialmente un compilador) para su traducción a lenguaje de máquina que el CPU pueda ejecutar. Sus instrucciones suelen ser una denominación abreviada de la instrucción máquina que simbolizan, y tienen una correspondencia casi directa (uno a uno) a las instrucciones de máquina que representan. El código resultante de la compilación del lenguaje ensamblador genera un código de máquina binario ejecutable.

Son instrucciones que ensamblan los grupos de conmutadores necesarios para expresar una mínima lógica aritmética. Están íntimamente vinculados al hardware. Algunas de estas instrucciones pueden ser por ejemplo MOV para mover un dato de un lugar a otro, o ADD para sumar dos valores. Por norma general están disponibles a nivel firmware, cmos o chip set. Estos lenguajes están orientados a procesos. Los procesos se componen de tareas. Contienen tantas instrucciones como la arquitectura del hardware así haya sido diseñada. La arquitectura CISC contiene muchas más instrucciones a este nivel, que la RISC.

Por ejemplo: Assembler x86, JMP y MULT.

Los otros lenguajes que completan la clasificación no serían ya lenguajes de bajo nivel.

Lenguajes de medio nivel: Son aquellos que, basándose en los juegos de instrucciones disponibles (chip set), permiten el uso de funciones a nivel aritmético, pero a nivel lógico dependen de literales en ensamblador. Estos lenguajes están orientados a procedimientos. Los procedimientos se componen de procesos.

Ejemplos: C, Basic. De mayor nivel pero aun así considerables de nivel medio: C++, Fortran, Cobol, Lisp.

Un lenguaje de programación de características de bajo nivel o de primera generación, es aquel en el que sus instrucciones…

Seite 4

Lenguajes de propósito general

Lenguajes de Propósito General permiten la implementación de prácticamente cualquier algoritmo, el nivel de abstracción es más uniforme, proporciona razonable rendimiento. Ej Pascal, C, C++, Java, Delphi, Lisp, Scheme.

están diseñados para escribir software que se utilizará para resolver una amplia gama de problemas. Tienen varios dominios de aplicación. Se les conoce como de propósito general porque están diseñados para no resolver ningún problema específico. En cambio, cubren una amplia gama de problemas.

A veces, los lenguajes de programación de propósito general se conocen como programación basada en texto. Esto se debe a que los programadores necesitan escribir textos, números y símbolos al codificar. Estos lenguajes también usan una sintaxis formal.

Los lenguajes de programación de propósito general se dividen en dos tipos:

(I) lenguajes de marcado de propósito general; Este es un lenguaje de marcado que se usa para más de un propósito, pero generalmente para hacer estructuras. Algunos de estos lenguajes incluyen XML y HTML.

(II) modelado de propósito general; Este tipo de lenguajes de programación de propósito general se utilizan para crear una representación de un sistema. Uno de estos lenguajes es Unified Modeling Language (UML)

Propósito especifico

Lenguajes de Propósito Específico tienen por lo general un conjunto muy restringido de características y un alto nivel de abstracción para cumplir tareas especificas como el procesamiento de textos, gráficos, audio, video e ingeniería. Ejemplos: Snobol, SQL, Matlab.

Un lenguaje de programación específico para un dominio o un propósito especial es el que está especialmente diseñado para un dominio de aplicación en particular. Solo se puede utilizar para resolver un problema particular. No puede usar un lenguaje de este tipo para resolver un problema que no se encuentre dentro de su dominio.

Ejemplos de lenguajes de programación para propósitos especiales incluyen LISP y Prolog. Estos dos idiomas están especialmente diseñados para propósitos de inteligencia artificial. SQL es una programación específica de dominio para la manipulación de bases de datos.

Entonces, ¿cuáles son algunas de las diferencias? Quedarse quieto. Vamos a esbozar áreas clave en las que las GPL y las DPL difieren.

Semántica:

Los lenguajes de programación específicos del dominio tienen una semántica precisa que pretende abordar problemas específicos. Tienen ciertas propiedades que son adecuadas para ciertos problemas. Los lenguajes especiales son muy específicos y ofrecen las abstracciones y notaciones necesarias. También son más fáciles de usar, especialmente cuando se resuelven problemas específicos.

Por otro lado, los lenguajes de uso general son muy abiertos. Rara vez apoyan la notación específica de dominio. Las GPL carecen de semántica precisa.

Proceso de software

Los lenguajes de uso general están bien establecidos en un proceso de desarrollo de software. Tienen características comunes que son familiares para la mayoría de los ingenieros de software. Por esta razón, pueden encajar fácilmente en un ciclo de vida del software.

Por otro lado, puede ser muy técnico integrar un lenguaje de programación de propósito especial en un ciclo de vida de desarrollo de software. Como desarrollador de software, debe asegurarse de que existe un problema específico que solo será resuelto por ese lenguaje de programación en particular. Es posible que deba obtener un experto en un dominio particular para integrar un DSL en el ciclo de vida del software. Sin embargo, todavía tienen un lugar especial en un proceso de ingeniería de software.

(Apoyo)

Una de las razones por las que a los programadores les encantan las GPL es que son fácilmente compatibles con bibliotecas y API de terceros. Por otro lado, los DSL carecen de soporte y promociones de terceros. Esto explica por qué son rechazados por la mayoría de los programadores.

Como puede ver, hay una línea entre los lenguajes de programación de propósito general y de propósito especial. Sin embargo, todavía se pueden utilizar juntos en el desarrollo de un software completo.

Cuarta generación. Lenguajes de propósito específico || TheMasterCode (Einbetten)

Seite 5

Clasificación Histórica

Los equipos de ordenador (el hardware) han pasado por cuatro generaciones, de las que las tres primeras (ordenadores con válvulas, transistores y circuitos integrados) están muy claras, la cuarta (circuitos integrados a gran escala) es más discutible.

Algo parecido ha ocurrido con la programación de los ordenadores (el software), que se realiza en lenguajes que suelen clasificarse en cinco generaciones, de las que las tres primeras son evidentes, mientras no todo el mundo está de acuerdo en las otras dos. Estas generaciones no coincidieron exactamente en el tiempo con las de hardware, pero sí de forma aproximada, y son las siguientes:

Primera generación: los primeros ordenadores se programaban directamente en código de máquina (basado en sistema binario), que puede representarse mediante secuencias de 0 y 1. No obstante, cada modelo de ordenador tiene su propia estructura interna a la hora de programarse. A estos lenguajes se les denominaba Lenguaje de bajo nivel, porque sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de las computadoras que lo soportan.

Dado que este tipo de lenguaje se acerca mucho más a la lógica de la máquina que a la humana, es mucho más complicado programar con él. El uso de la palabra bajo en su denominación no implica que el lenguaje sea menos potente que un lenguaje de alto nivel, sino que se refiere a la reducida abstracción entre el lenguaje y el hardware. Por ejemplo, se utiliza este tipo de lenguajes para programar tareas críticas de los sistemas operativos, de aplicaciones en tiempo real o controladores de dispositivos. Otra limitación de estos lenguajes es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas.

Segunda generación: los lenguajes simbólicos, asimismo propios de la máquina, simplifican la escritura de las instrucciones y las hacen más legibles. Se refiere al lenguaje ensamblador ensamblado a través de un macroensamblador. Es el lenguaje de máquina combinado con una serie de poderosas macros que permiten declarar estructuras de datos y de control complejas.

Tercera generación: los lenguajes de alto nivel sustituyen las instrucciones simbólicas por códigos independientes de la máquina, parecidas al lenguaje humano o al de las Matemáticas. Se crearon para que el usuario común pudiese solucionar un problema de procesamiento de datos de una manera más fácil y rápida. Son usados en ámbitos computacionales donde se logra un alto rendimiento con respecto a lenguajes de generaciones anteriores. Entre ellos se encuentran C, Fortran, Smalltalk, Ada, C++, C#, Cobol, Delphi, Java y PHP, entre otros. Algunos de estos lenguajes pueden ser de propósito general, es decir, que el lenguaje no está enfocado a una única especialidad, sino que puede usarse para crear todo tipo de programas. Para ciertas tareas más comunes, existen bibliotecas para facilitar la programación que permiten la reutilización de código.

Cuarta generación: se ha dado este nombre a ciertas herramientas que permiten construir aplicaciones sencillas combinando piezas prefabricadas. Hoy se piensa que estas herramientas no son, propiamente hablando, lenguajes. Cabe mencionar que, algunos proponen reservar el nombre de cuarta generación para la programación orientada a objetos. Estos últimos tienen una estructura muy parecida al idioma inglés.

Algunas de sus características son:

acceso a base de datos, capacidades gráficas,

generación de código automáticamente, así como poder programar visualmente (como por ejemplo Visual Basic o SQL).

Entre sus ventajas se cuenta una mayor productividad y menor agotamiento del programador, así como menor concentración por su parte, ya que las herramientas proporcionadas incluyen secuencias de instrucciones. El nivel de concentración que se requiere es menor, ya que algunas instrucciones, que le son dadas a las herramientas, a su vez, engloban secuencias de instrucciones a otro nivel dentro de la herramienta.

Cuando hay que dar mantenimiento a los programas previamente elaborados, es menos complicado por requerir menor nivel de concentración. Por otro lado, sus desventajas consisten en que estas herramientas prefabricadas son generalmente menos flexibles que las instrucciones directas en los lenguajes de bajo nivel. Además, se suelen crear dependencias con uno o varios proveedores externos, lo que se traduce en pérdida de autonomía. Asimismo, es frecuente que dichas herramientas prefabricadas contengan librerías de otros proveedores, que conlleva instalar opciones adicionales que son consideradas opcionales.

A menos que existan acuerdos con otros proveedores, son programas que se ejecutan únicamente con el lenguaje que lo creó. Tampoco suelen cumplir con los estándares internacionales ISO y ANSI, lo cual conlleva un riesgo futuro por desconocerse su tiempo de permanencia en el mercado. Algunos ejemplos son: NATURAL y PL/SQL.

Quinta generación: en ocasiones se llama así a los lenguajes de inteligencia artificial, aunque con el fracaso del proyecto japonés de la quinta generación esta denominación ha caído en desuso.

Los equipos de ordenador (el hardware) han pasado por cuatro generaciones, de las que las tres primeras (ordenadores con…

Historia de los Lenguajes de Programación (Einbetten)

Seite 6

Paradigmas

En general, la mayoría de paradigmas son variantes de los dos tipos principales de programación, imperativa y declarativa. En la programación imperativa se describe paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado del programa y hallar la solución, es decir, un algoritmo en el que se describen los pasos necesarios para solucionar el problema.

En la programación declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar; se programa diciendo lo que se quiere resolver a nivel de usuario, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos internos de inferencia de información a partir de la descripción realizada.

A continuación se describen algunas de las distintas variantes de paradigmas de programación:

Programación imperativa o por procedimientos

La programación imperativa (del latín imperare = ordenar) es el paradigma de programación más antiguo. De acuerdo con este paradigma, un programa consiste en una secuencia claramente definida de instrucciones para un ordenador.

El código fuente de los lenguajes imperativos encadena instrucciones una detrás de otra que determinan lo que debe hacer el ordenador en cada momento para alcanzar un resultado deseado. Los valores utilizados en las variables se modifican durante la ejecución del programa. Para gestionar las instrucciones, se integran estructuras de control como bucles o estructuras anidadas en el código.

Los lenguajes de programación imperativa son muy concretos y trabajan cerca del sistema. De esta forma, el código es, por un lado, fácilmente comprensible, pero, por el otro, requiere muchas líneas de texto fuente para describir lo que en los lenguajes de la programación declarativa se consigue con solo una parte de las instrucciones.

Los lenguajes de programación imperativa más conocidos son:

Fortran

Java

Pascal

ALGOL

C

C#

C++

Ensambladores

BASIC

COBOL

Python

Ruby

Los distintos lenguajes de programación imperativa pueden clasificarse a su vez en tres estilos distintos de programación subordinados: el estructurado, el procedimental y el modular.

El estilo estructurado de programación amplía el principio imperativo central con las estructuras concretas de control: secuencias, selección e iteración. Esto se hace para mitigar o evitar por completo las instrucciones de salto que añaden una complejidad innecesaria al código imperativo.

El enfoque procedimental divide las tareas de las que se debe ocupar un programa en tareas parciales más pequeñas que se describen en el código por separado. De esta forma, se crean principios básicos de programación que también se pueden reutilizar en otros programas.

Un paso más allá, en el modelo de programación modular, cada uno de los componentes de programa se diseñan, desarrollan y prueban con total independencia los unos de los otros. No es hasta el final del proceso cuando los módulos se combinan para conformar el software real.

Programación declarativa:

No hay consenso sobre la definición de este paradigma, pero todas las explicaciones coinciden en algo: lo que destaca de los lenguajes de programación declarativa es que siempre se describe el resultado final deseado, en lugar de mostrar todos los pasos de trabajo. Para alcanzar el objetivo, en la programación declarativa se determina automáticamente la vía de solución. Esto funciona siempre y cuando las especificaciones del estado final se definan claramente y exista un procedimiento de ejecución adecuado. Si se dan las dos condiciones, la programación declarativa es muy eficiente.

Como la programación declarativa no determina el “cómo”, sino que funciona a un nivel de abstracción muy alto, este paradigma deja margen para la optimización. Si se ha desarrollado un procedimiento de ejecución mejor, el algoritmo integrado lo encuentra y lo aplica. En este sentido, el paradigma está muy preparado para el futuro porque, al escribir el código, no es necesario determinar el procedimiento según el cual se alcanza el resultado.

Los lenguajes de programación declarativa más conocidos son:

Prolog

Lisp

Haskell

Miranda

Erlang

SQL (en un sentido amplio)

Los distintos lenguajes declarativos se pueden subdividir, a su vez, en dos paradigmas, el de la programación funcional y el de la programación lógica.

Sin embargo, es habitual que en la práctica los límites se difuminen y que, a la hora de solucionar problemas, se apliquen tanto elementos de la programación imperativa, con sus subtipos de programación procedimental, modular y estructurada, como de la programación declarativa.

Programación Multiparadigma:

es el uso de dos o más paradigmas dentro de un programa. El lenguaje Lisp se considera Multiparadigma. Al igual que Python, que es orientado a objetos, reflexivo, imperativo y funcional.5 Según lo describe Bjarne Stroustrup, esos lenguajes permiten crear programas usando más de un estilo de programación.

Un lenguaje de programación multiparadigma es el cual soporta más de un paradigma de programación. Según lo describe Bjarne Stroustrup, permiten crear “programas usando más de un estilo de programación”.

El objetivo en el diseño de estos lenguajes es permitir a los programadores utilizar el mejor paradigma para cada trabajo, admitiendo que ninguno resuelve todos los problemas de la forma más fácil y eficiente posible.

Por ejemplo, lenguajes de programación como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con la orientación a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como en el caso de Oz, que tiene subconjuntos (particularidad de los lenguages lógicos), y otras características propias de lenguages de programación funcional y de orientación a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lógico), que cuentan con estructuras repetitivas, propias del paradigma imperativo.

Programación reactiva:

La programación reactiva, o Reactive Programming, es un paradigma enfocado en el trabajo con flujos de datos finitos o infinitos de manera asíncrona, permitiendo que estos datos se propaguen generando cambios en la aplicación, es decir, “reaccionan” a los datos ejecutando una serie de eventos. Hoy, nuestro Slashboy Gerardo Astone, nos habla sobre esta manera de programar, cuáles son sus características, beneficios y cómo aplicarla. ¡Vamos a por ello!

La programación reactiva está relacionada con el patrón de diseño Observer: cuando hay un cambio de estado en un objeto, los otros objetos son notificados y actualizados acorde. Por lo tanto, en lugar de sondear eventos para los cambios, los eventos se realizan de forma asíncrona para que los observadores puedan procesarlos.

Utilizando programación asíncrona, la idea es simple: disminuir el uso ineficiente de recursos usando recursos que, de lo contrario, estarían inactivos, ya que permanecen a la espera de actividad de algún componente. Los nuevos datos se notifican a los clientes en vez de tener que solicitarlos, debido a que la entrada y salida de datos es asíncrona. Por ello se invierte el diseño normal del procesamiento de entrada y salida. Este enfoque libera al cliente para hacer otras cosas mientras espera nuevas notificaciones.

Características de la programación reactiva

La principales características que ofrece la programación reactiva, y por lo cual se está convirtiendo en tendencia, es que permite que los sistemas sean:

Responsivos: aseguran la calidad del servicio cumpliendo unos tiempos de respuesta establecidos. Además define límites en dichos tiempos de respuesta, de forma que los problemas pueden ser detectados rápidamente y tratados de forma efectiva.

Resilientes: se mantienen responsivos incluso cuando se enfrentan a situaciones de error.

Elásticos: se mantienen responsivos incluso ante aumentos en la carga de trabajo.

Orientados a mensajes: minimizan el acoplamiento entre componentes al establecer interacciones basadas en el intercambio de mensajes de manera asíncrona. Afectando (de manera positiva) todo el sistema.

¿Qué son los paradigmas de programación? (Einbetten)

En general, la mayoría de paradigmas son variantes de los dos tipos principales de programación, imperativa y declarativa…

Seite 7

Reactiva

La programación reactiva, o Reactive Programming, es un paradigma enfocado en el trabajo con flujos de datos finitos o infinitos de manera asíncrona, permitiendo que estos datos se propaguen generando cambios en la aplicación, es decir, “reaccionan” a los datos ejecutando una serie de eventos. Hoy, nuestro Slashboy Gerardo Astone, nos habla sobre esta manera de programar, cuáles son sus características, beneficios y cómo aplicarla. ¡Vamos a por ello!

La programación reactiva está relacionada con el patrón de diseño Observer: cuando hay un cambio de estado en un objeto, los otros objetos son notificados y actualizados acorde. Por lo tanto, en lugar de sondear eventos para los cambios, los eventos se realizan de forma asíncrona para que los observadores puedan procesarlos.

Utilizando programación asíncrona, la idea es simple: disminuir el uso ineficiente de recursos usando recursos que, de lo contrario, estarían inactivos, ya que permanecen a la espera de actividad de algún componente. Los nuevos datos se notifican a los clientes en vez de tener que solicitarlos, debido a que la entrada y salida de datos es asíncrona. Por ello se invierte el diseño normal del procesamiento de entrada y salida. Este enfoque libera al cliente para hacer otras cosas mientras espera nuevas notificaciones.

Características de la programación reactiva

La principales características que ofrece la programación reactiva, y por lo cual se está convirtiendo en tendencia, es que permite que los sistemas sean:

Responsivos: aseguran la calidad del servicio cumpliendo unos tiempos de respuesta establecidos. Además define límites en dichos tiempos de respuesta, de forma que los problemas pueden ser detectados rápidamente y tratados de forma efectiva

Resilientes: se mantienen responsivos incluso cuando se enfrentan a situaciones de error.

Elásticos: se mantienen responsivos incluso ante aumentos en la carga de trabajo.

Orientados a mensajes: minimizan el acoplamiento entre componentes al establecer interacciones basadas en el intercambio de mensajes de manera asíncrona. Afectando (de manera positiva) todo el sistema.

La programación reactiva (Einbetten)

La programación reactiva, o Reactive Programming, es un paradigma enfocado en el trabajo con flujos de datos finitos o…

Seite 8

Multiparadigma

Un lenguaje de programación multiparadigma es el que soporta más de un paradigma de programación. Según lo describe Bjarne Stroustrup, permiten crear “programas usando más de un estilo de programación”.

El objetivo en el diseño de estos lenguajes es permitir a los programadores utilizar el mejor paradigma para cada trabajo, admitiendo que ninguno resuelve todos los problemas de la forma más fácil y eficiente posible.

Por ejemplo, lenguajes de programación como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con la orientación a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como en el caso de Oz, que tiene subconjuntos (particularidad de los lenguajes lógicos), y otras características propias de lenguajes de programación funcional y de orientación a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lógico), que cuentan con estructuras repetitivas, propias del paradigma imperativo.

Un lenguaje de programación multiparadigma es el que soporta más de un paradigma de programación. Según lo describe Bjarne…

Programación Multiparadigma (Einbetten)

Programación Multiparadigma (Einbetten)

Seite 9

Lenguaje Java

Java es un lenguaje de programación y una plataforma informática que fue comercializada por primera vez en 1995 por Sun Microsystems. Hay muchas aplicaciones y sitios web que no funcionarán, probablemente, a menos que tengan Java instalado y cada día se crean más. Java es rápido, seguro y fiable. Desde ordenadores portátiles hasta centros de datos, desde consolas para juegos hasta computadoras avanzadas, desde teléfonos móviles hasta Internet, Java está en todas partes, si es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos diez millones de usuarios reportados.

El lenguaje de programación Java fue desarrollado originalmente por James Gosling, de Sun Microsystems (constituida en 1983 y posteriormente adquirida el 27 de enero de 2010 por la compañía Oracle),4 y publicado en 1995 como un componente fundamental de la plataforma Java de Sun Microsystems. Su sintaxis deriva en gran medida de C y C++, pero tiene menos utilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Java son compiladas a bytecode (clase Java), que puede ejecutarse en cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente.

La compañía Sun desarrolló la implementación de referencia original para los compiladores de Java, máquinas virtuales y librerías de clases en 1991, y las publicó por primera vez en 1995. A partir de mayo de 2007, en cumplimiento de las especificaciones del Proceso de la Comunidad Java, Sun volvió a licenciar la mayoría de sus tecnologías de Java bajo la Licencia Pública General de GNU. Otros han desarrollado también implementaciones alternas a estas tecnologías de Sun, tales como el Compilador de Java de GNU y el GNU Classpath.

Filosofía:

El lenguaje Java se creó con cinco objetivos principales:

Debería usar el paradigma de la programación orientada a objetos.

Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.

Debería incluir por defecto soporte para trabajo en red.

Debería diseñarse para ejecutar código en sistemas remotos de forma segura.

Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.

Para conseguir la ejecución de código remoto y el soporte de red, los programadores de Java a veces recurren a extensiones como CORBA (Common Object Request Broker Architecture), Internet Communications Engine u OSGi, respectivamente.

Sintaxis

La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de este, que combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java fue construido desde el principio para ser completamente orientado a objetos. Todo en Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase (recordemos que una clase es un molde a partir del cual pueden crearse varios objetos).

A diferencia de C++, Java no tiene sobrecarga de operadores o herencia múltiple para clases, aunque la herencia múltiple está disponible para interfaces.

Aplicaciones autónomas:

Este ejemplo necesita una pequeña explicación.

Todo en Java está dentro de una clase, incluyendo programas autónomos.

El código fuente se guarda en archivos con el mismo nombre que la clase que contienen y con extensión “.java”. Una clase (class) declarada pública (public) debe seguir este convenio. Si tenemos una clase llamada Hola, su código fuente deberá guardarse en el fichero “Hola.java”.

El compilador genera un archivo de clase (con extensión “.class”) por cada una de las clases definidas en el archivo fuente. Una clase anónima se trata como si su nombre fuera la concatenación del nombre de la clase que la encierra, el símbolo “$”, y un número entero.

Los programas que se ejecutan de forma independiente y autónoma, deben contener el método ”main()”.

La palabra reservada ”void” indica que el método main no devuelve nada.

El método main debe aceptar un array de objetos tipo String. Por acuerdo se referencia como ”args”, aunque puede emplearse cualquier otro identificador.

La palabra reservada ”static” indica que el método es un método de clase, asociado a la clase en vez de a una instancia de la misma. El método main debe ser estático o ’’de clase’’.

La palabra reservada public significa que un método puede ser llamado desde otras clases, o que la clase puede ser usada por clases fuera de la jerarquía de la propia clase. Otros tipos de acceso son ”private” o ”protected”.

La utilidad de impresión (en pantalla por ejemplo) forma parte de la biblioteca estándar de Java: la clase ‘’’System’’’ define un campo público estático llamado ‘’’out’’’. El objeto out es una instancia de ‘’’PrintStream’’’, que ofrece el método ‘’’println (String)’’’ para volcar datos en la pantalla (la salida estándar).

Las aplicaciones autónomas se ejecutan dando al entorno de ejecución de Java el nombre de la clase cuyo método main debe invocarse. Por ejemplo, una línea de comando (en Unix o Windows) de la forma java –cp . Hola ejecutará el programa del ejemplo (previamente compilado y generado “Hola.class”). El nombre de la clase cuyo método main se llama puede especificarse también en el fichero “MANIFEST” del archivo de empaquetamiento de Java (.jar).

Programación

Expresiones

Las expresiones son un conjunto de elementos o tokens junto con literales que son evaluados para devolver un resultado. Los tokens son elemento más pequeño de un programa que es significativo, e interpretado o entendido por el compilador, en Java los tokens se dividen en cinco categorías que son:

Identificadores: Son las representaciones que se les da a los nombres que se asignan a las variables, clases, paquetes, métodos y constantes en el código de Java para que el compilador los identifique y el programador pueda entenderlos. En Java los identificadores pueden diferenciar entre mayúsculas o minúsculas por ser case sensitive, por lo que la variable cuyo nombre sea “Mivariable”, no es igual a “mivariable”, ya que Java identifica estas como variables diferentes por ser case sensitive, también se puede utilizar números, o el signo “_” para asignar un identificador.

Palabras claves: Son los identificadores reservados por java para cumplir con un objetivo específico en el código y el compilador, se usan de forma limitada y en casos específicos. Las palabras claves que usa Java son las siguientes:

Las palabras que se encuentran en negrilla, son palabras claves para Java aunque actualmente no se utilicen en la versión de Java, pero se pretenden integrar en las siguientes versiones de Java.

Literales y constantes: Los literales son sintaxis para asignar valores a una variable, es decir el valor que puede tomar una variable, también es un valor constante que puede ser de tipo numérico. Las constantes son variables que tienen un valor fijo y no puede ser modificado en el trascurso de la ejecución del código, estas se declaran por medio de los modificadores final y static.

final static double pi= 3.1416;

Operadores: Son los que nos indican una evaluación que se aplica a un objeto o un dato, sobre un identificador o constante. Un ejemplo de operadores puede ser la suma, resta o multiplicación.

Separadores: Se utilizan para indicarle al compilador de Java donde se ubican los elementos del código, los separadores que admite Java son: { },:;

También el compilador de Java identifica y elimina los comentarios, retornos de carros espacios vacíos y de tabulación a la hora de compilar por lo que no son considerados parte de un token.

Las expresiones pueden ser una combinación en secuencia de variables, operadores y métodos. Las expresiones son utilizadas para realizar cálculos, para asignar valores a variables, o para controlar la ejecución del flujo del programa.

Entornos de establecimiento

El diseño de Java, su robustez, el respaldo de la industria y su fácil portabilidad han hecho de Java uno de los lenguajes con un mayor crecimiento y amplitud de uso en distintos ámbitos de la industria de la informática.

En dispositivos móviles y sistemas embebidos

Desde la creación de la especificación J2ME (Java 2 Platform, Micro Edition), una versión del entorno de ejecución Java reducido y altamente optimizado, especialmente desarrollado para el mercado de dispositivos electrónicos de consumo, se ha producido toda una revolución en lo que a la extensión de Java se refiere.

Es posible encontrar microprocesadores diseñados para ejecutar bytecode Java y software Java para tarjetas inteligentes (JavaCard), teléfonos móviles, buscapersonas, set-top-boxes, sintonizadores de TV y otros pequeños electrodomésticos.

El modelo de desarrollo de estas aplicaciones es muy semejante a las applets de los navegadores, salvo que en este caso se denominan MIDlets.

Véase Sun Mobile Device Tecnology

En el navegador web

Desde la primera versión de Java existe la posibilidad de desarrollar pequeñas aplicaciones (Applets) en Java que luego pueden ser incrustadas en una página HTML para que sean descargadas y ejecutadas por el navegador web. Estas miniaplicaciones se ejecutan en una JVM que el navegador tiene configurada como extensión (plug-in) en un contexto de seguridad restringido configurable para impedir la ejecución local de código potencialmente malicioso.

El éxito de este tipo de aplicaciones (la visión del equipo de Gosling) no fue realmente el esperado debido a diversos factores, siendo quizás el más importante la lentitud y el reducido ancho de banda de las comunicaciones en aquel entonces que limitaba el tamaño de las applets que se incrustaban en el navegador. La aparición posterior de otras alternativas (aplicaciones web dinámicas de servidor) dejó un reducido ámbito de uso para esta tecnología, quedando hoy relegada fundamentalmente a componentes específicos para la intermediación desde una aplicación web dinámica de servidor con dispositivos ubicados en la máquina cliente donde se ejecuta el navegador.

Las applets Java no son las únicas tecnologías (aunque sí las primeras) de componentes complejos incrustados en el navegador. Otras tecnologías similares pueden ser: ActiveX de Microsoft, Flash, Java Web Start, etc.

En sistemas de servidor

En la parte del servidor, Java es más popular que nunca, desde la aparición de la especificación de Servlets y JSP (Java Server Pages).

Hasta entonces, las aplicaciones web dinámicas de servidor que existían se basaban fundamentalmente en componentes CGI y lenguajes interpretados. Ambos tenían diversos inconvenientes (fundamentalmente lentitud, elevada carga computacional o de memoria y propensión a errores por su interpretación dinámica).

Los servlets y las JSP supusieron un importante avance ya que:

El API de programación es muy sencilla, flexible y extensible.

Los servlets no son procesos independientes (como los CGI) y por tanto se ejecutan dentro del mismo proceso que la JVM mejorando notablemente el rendimiento y reduciendo la carga computacional y de memoria requeridas.

Las JSP son páginas que se compilan dinámicamente (o se precompilan previamente a su distribución) de modo que el código que se consigue supone una ventaja en rendimiento substancial frente a muchos lenguajes interpretados.

La especificación de Servlets y JSP define un API de programación y los requisitos para un contenedor (servidor) dentro del cual se puedan desplegar estos componentes para formar aplicaciones web dinámicas completas. Hoy día existen multitud de contenedores (libres y comerciales) compatibles con estas especificaciones.

A partir de su expansión entre la comunidad de desarrolladores, estas tecnologías han dado paso a modelos de desarrollo mucho más elaborados con frameworks (pe Struts, Webwork) que se sobreponen sobre los servlets y las JSP para conseguir un entorno de trabajo mucho más poderoso y segmentado en el que la especialización de roles sea posible (desarrolladores, diseñadores gráficos,...) y se facilite la reutilización y robustez de código. A pesar de todo ello, las tecnologías que subyacen (Servlets y JSP) son substancialmente las mismas.

Este modelo de trabajo se ha convertido en uno de los estándar de facto para el desarrollo de aplicaciones web dinámicas de servidor.

En aplicaciones de escritorio

Hoy en día existen multitud de aplicaciones gráficas de usuario basadas en Java. El entorno de ejecución Java (JRE) se ha convertido en un componente habitual en los PC de usuario de los sistemas operativos más usados en el mundo. Además, muchas aplicaciones Java lo incluyen dentro del propio paquete de la aplicación de modo que se ejecuten en cualquier PC.

En las primeras versiones de la plataforma Java existían importantes limitaciones en las API de desarrollo gráfico (AWT). Desde la aparición de la biblioteca Swing la situación mejoró substancialmente y posteriormente con la aparición de bibliotecas como SWT hacen que el desarrollo de aplicaciones de escritorio complejas y con gran dinamismo, usabilidad, etc. sea relativamente sencillo.

Plataformas soportadas

Una versión del entorno de ejecución Java JRE (Java Runtime Environment) está disponible en la mayoría de equipos de escritorio. Sin embargo, Microsoft no lo ha incluido por defecto en sus sistemas operativos. En el caso de Apple, este incluye una versión propia del JRE en su sistema operativo, el Mac OS. También es un producto que por defecto aparece en la mayoría de las distribuciones de GNU/Linux. Debido a incompatibilidades entre distintas versiones del JRE, muchas aplicaciones prefieren instalar su propia copia del JRE antes que confiar su suerte a la aplicación instalada por defecto. Los desarrolladores de applets de Java o bien deben insistir a los usuarios en la actualización del JRE, o bien desarrollar bajo una versión antigua de Java y verificar el correcto funcionamiento en las versiones posteriores.

¿Qué es Java? (Einbetten)

Seite 10

Lenguaje Python

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en la legibilidad de su código. Se trata de un lenguaje de programación Multiparadigma, ya que soporta parcialmente la orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, dinámico y multiplataforma.

Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License.

Python es un lenguaje de programación interpretado cuya principal filosofía es que sea legible por cualquier persona con conocimientos básicos de programación. Además, posee una serie de características que lo hacen muy particular y que, sin duda, le aportan muchas ventajas y están en la raíz de su uso tan extendido:

Es totalmente gratuito. Se trata de un lenguaje open source o de código abierto, por lo que no hay que pagar ninguna licencia para utilizarlo.

Está respaldado por una enorme comunidad. Su carácter gratuito hace que continuamente se estén desarrollando nuevas librerías y aplicaciones. Es difícil pensar en algo que no haya hecho alguien. Esto es un factor multiplicativo para los programadores, puesto que cualquier duda estará resuelta en los foros.

Es un lenguaje Multiparadigma. Esto significa que combina propiedades de diferentes paradigmas de programación, lo que permite que sea muy flexible y fácil de aprender de manera independiente de los conocimientos del interesado.

Sus aplicaciones no se limitan a un área en concreto. El hecho de que sea multiparadigma permite utilizarlo en campos aparentemente tan dispares como el diseño de aplicaciones web o la inteligencia artificial, entre muchos otros.

Python es apto para todas las plataformas. Podemos ejecutarlo en diferentes sistemas operativos como Windows o Linux simplemente usando el intérprete correspondiente.

Filosofía

Los usuarios de Python se refieren a menudo a la filosofía de Python que es bastante análoga a la filosofía de Unix. El código que siga los principios de Python se dice que es "pythonico". Estos principios fueron descritos por el desarrollador de Python Tim Peters en El Zen de Python

Bello es mejor que feo.

Explícito es mejor que implícito.

Simple es mejor que complejo.

Complejo es mejor que complicado.

Plano es mejor que anidado.

Disperso es mejor que denso.

La legibilidad cuenta.

Los casos especiales no son tan especiales como para quebrantar las reglas.

Lo práctico gana a lo puro.

Los errores nunca deberían dejarse pasar silenciosamente.

A menos que hayan sido silenciados explícitamente.

Frente a la ambigüedad, rechaza la tentación de adivinar.

Debería haber una —y preferiblemente solo una— manera obvia de hacerlo.

Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.23

Ahora es mejor que nunca.

Aunque nunca es a menudo mejor que ya mismo.

Si la implementación es difícil de explicar, es una mala idea.

Si la implementación es fácil de explicar, puede que sea una buena idea.

Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

Modo interactivo

El intérprete de Python estándar incluye un modo interactivo en el cual se escriben las instrucciones en una especie de intérprete de comandos: las expresiones pueden ser introducidas una a una, pudiendo verse el resultado de su evaluación inmediatamente, lo que da la posibilidad de probar porciones de código en el modo interactivo antes de integrarlo como parte de un programa. Esto resulta útil tanto para las personas que se están familiarizando con el lenguaje como para los programadores más avanzados.

Existen otros programas, tales como IDLE, bpython o IPython,25 que añaden funcionalidades extra al modo interactivo, como la compleción automática de código y el coloreado de la sintaxis del lenguaje.

Ejemplo del modo interactivo:

>>> 1 + 1 2 >>> a = range(10) >>> print(list(a)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Características y paradigmas

Python es un lenguaje de programación multiparadigma. Esto significa que más que forzar a los programadores a adoptar un estilo particular de programación, permite varios estilos: programación orientada a objetos, programación imperativa y programación funcional. Otros paradigmas están soportados mediante el uso de extensiones.

Python usa tipado dinámico y conteo de referencias para la administración de memoria.

Una característica importante de Python es la resolución dinámica de nombres; es decir, lo que enlaza un método y un nombre de variable durante la ejecución del programa (también llamado enlace dinámico de métodos).

Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se pueden escribir nuevos módulos fácilmente en C o C++. Python puede incluirse en aplicaciones que necesitan una interfaz programable.

Aunque la programación en Python podría considerarse en algunas situaciones hostil a la programación funcional tradicional del Lisp, existen bastantes analogías entre Python y los lenguajes minimalistas de la familia Lisp como puede ser Scheme.

Listas y Tuplas

Para declarar una lista se usan los corchetes [], en cambio, para declarar una tupla se usan los paréntesis (). En ambas los elementos se separan por comas, y en el caso de las tuplas es necesario que tengan como mínimo una coma.

Tanto las listas como las tuplas pueden contener elementos de diferentes tipos. No obstante las listas suelen usarse para elementos del mismo tipo en cantidad variable mientras que las tuplas se reservan para elementos distintos en cantidad fija.

Para acceder a los elementos de una lista o tupla se utiliza un índice entero (empezando por "0", no por "1"). Se pueden utilizar índices negativos para acceder elementos a partir del final.

Las listas se caracterizan por ser mutables, es decir, se puede cambiar su contenido en tiempo de ejecución, mientras que las tuplas son inmutables ya que no es posible modificar el contenido una vez creada.

Listas:

>>> lista = ["abc", 42, 3.1415] >>> lista[0] # Acceder a un elemento por su índice 'abc' >>> lista[-1] # Acceder a un elemento usando un índice negativo 3.1415 >>> lista.append(True) # Añadir un elemento al final de la lista >>> lista ['abc', 42, 3.1415, True] >>> del lista[3] # Borra un elemento de la lista usando un índice (en este caso: True) >>> lista[0] = "xyz" # Re-asignar el valor del primer elemento de la lista >>> lista[0:2] # Mostrar los elementos de la lista del índice "0" al "2" (sin incluir este último) ['xyz', 42] >>> lista_anidada = [lista, [True, 42L]] # Es posible anidar listas >>> lista_anidada [['xyz', 42, 3.1415], [True, 42L]] >>> lista_anidada[1][0] # Acceder a un elemento de una lista dentro de otra lista (del segundo elemento, mostrar el primer elemento) True

Tuplas:

>>> tupla = ("abc", 42, 3.1415) >>> tupla[0] # Acceder a un elemento por su índice 'abc' >>> del tupla[0] # No es posible borrar (ni añadir) un elemento en una tupla, lo que provocará una excepción ( Excepción ) >>> tupla[0] = "xyz" # Tampoco es posible re-asignar el valor de un elemento en una tupla, lo que también provocará una excepción ( Excepción ) >>> tupla[0:2] # Mostrar los elementos de la tupla del índice "0" al "2" (sin incluir este último) ('abc', 42) >>> tupla_anidada = (tupla, (True, 3.1415)) # También es posible anidar tuplas >>> 1, 2, 3, "abc" # Esto también es una tupla, aunque es recomendable ponerla entre paréntesis (recuerda que requiere, al menos, una coma) (1, 2, 3, 'abc') >>> (1) # Aunque entre paréntesis, esto no es una tupla, ya que no posee al menos una coma, por lo que únicamente aparecerá el valor 1 >>> (1,) # En cambio, en este otro caso, sí es una tupla (1,) >>> (1, 2) # Con más de un elemento no es necesaria la coma final (1, 2) >>> (1, 2,) # Aunque agregarla no modifica el resultado (1, 2)

Aprende Python en 15 Minutos ? (Einbetten)

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en la legibilidad de su código. Se trata de…

Informationen

Beschreibung
Notiz am Lenguaje de programación, erstellt von DAVID ALEJANDRO SUAREZ VARON am 04/08/2021.
Erstellt von
DAVID ALEJANDRO SUAREZ VARON · Aug 2021
Aktualisiert
4 Aug 2021
Aufrufe
23
Bewertung

Mehr zu Lenguajes y herramientas de programación

Feedback

Worum geht es?

Wie gefällt dir das neue Design?

Dein Eindruck