Resumen LP PDF

Title Resumen LP
Course Lenguajes de Programacion
Institution Universidad Nacional de Entre Ríos
Pages 77
File Size 2.9 MB
File Type PDF
Total Downloads 17
Total Views 116

Summary

Resumen en base a audios de clases y otros apuntes....


Description

Lenguajes de programación

Unidad 1 Evolución de los lenguajes de programación Lenguaje de programación: Un lenguaje de programación es un sistema notacional para describir computaciones en una forma legible tanto para maquina como para el ser humano. Un lenguaje de programación es un conjunto de símbolos (alfabeto, léxico) junto con sus reglas de composición (síntesis) e interpretación (semántica) que sirven para expresar programas informáticos. Es decir sirve de interfaz entre la computadora y el programador.

Clasificación de los lenguajes

Los lenguajes de programación han sido históricamente clasificados atendiendo a distintos criterios: ●

Por nivel: ○ Lenguajes de alto y de bajo nivel Los lenguajes de programación se suelen clasificar dentro de dos amplias categorías que se refieren a su "nivel de abstracción", es decir, en cuanto a lo específico o general que es respecto a la arquitectura de computación inherente al sistema que se está utilizando. ○

Bajo nivel: Son aquellos en los que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de la computadora que lo soporta. LP de bajo nivel, también llamados ensambladores, que con el uso de mnemotécnicos (cortos) y abstracciones de direcciones de memoria (registros), permiten generar código más cercano a la máquina, pero alejados de los 1s y los 0s. Estos lenguajes “ensambladores” son muy dependientes de las arquitecturas subyacentes



Alto nivel: Son los más utilizados para programar aplicaciones. Tiene un nivel y estilo de escritura fácilmente legible y comprensible. Buscan ser independientes de la arquitectura subyacente.

Lenguajes de programación





Por jerarquía: ○ A medida que surgían nuevos lenguajes que permitían nuevos estilos de programación más expresiva, se distinguieron dichos estilos en una serie de generaciones, cada una representando lenguajes de programación surgidos en una época similar y con características genéricas comunes. ○

Primera Generación: (En los 40) La primera generación fue constituido por la aparición del Lenguaje de Máquina. Inentendible para los humanos.



Segunda Generación: (En los 50) Aparece el Lenguaje Ensamblador facilitando la forma de programar al programador. Utiliza variables que el programador puede manipular. Pero tiene la desventaja de depender de la arquitectura subyacente. Elimina un poco la propensión a cometer errores, y aumenta la eficiencia de programación.



Tercera Generación: (Fines de los 50s, hasta la actualidad) Aparecen los Lenguajes de Alto Nivel. Son independientes de la arquitectura subyacente, y son más fáciles de entender y actualizar. (Programación estructurada).



Cuarta Generación: (Fines 80s) Los Lenguajes de Cuarta Generación, son más cercanos al lenguaje y al razonamiento humano. Son declarativos. Se contemplan, por ejemplo, aquellos LP que siguen paradigmas lógicos, funcionales, gestores de bases de datos. Son entornos que dan apoyo a los LP de alto nivel. Los lenguajes categorizados como de 4rta generación.



Quinta Generación: (80s) Se denominó a aquellos intentos de lenguajes que buscaban las soluciones a los problemas de la inteligencia artificial. Tiene su epicentro en la idea de que las máquinas solucionen problemas sin la colaboración de un programador.

Por el tipo de programación: ○ Imperativos: Los lenguajes imperativos o de procedimiento son lenguajes controlados por mandatos u orientados a enunciados(instrucciones). Un programa se compone de una serie de enunciados, y la ejecución de cada enunciado hace que el intérprete cambie el valor de una localidad o más en su memoria, es decir pase a un nuevo estado. ○



Declarativos: Usados para Programación Lógica. Los programas constan de declaraciones en vez de asignaciones y sentencia de control de flujo. Una de las características esenciales es su semántica, que se denomina declarativa. La programación en los Lenguajes Declarativos es no procedural. Es decir, no se declara exactamente cómo será calculado el resultado.

Por paradigma (Instrucciones): Los paradigmas de programación distinguen distintos modelos de cómputo y de estilos de estructurar y organizar las tareas que debe realizar un programa. Un lenguaje de programación puede ofrecer soporte a uno o varios paradigmas de programación, total o

Lenguajes de programación parcialmente.



Lenguajes Imperativos: La programación de los LP imperativos es procedural, orientados a instrucciones (enunciados), se caracteriza por el uso de variables, y asignaciones a memoria. Va cambiando de estado a través de su ejecución. Von Neumann (CPU+Memoria+I/O). Ejemplo: Fortran, Algol, C, Pascal y Ada.



Lenguajes funcionales: Se basan en funciones matemáticas. Un programa se considera una gran función compuesta de funciones simples que se aplican a los datos de entradas pasados como parámetros (argumentos). No se usan variables ni asignación a memoria (funcionales dogmáticos). Ejemplo: Lisp, ML, Haskell. (PROGRAMA = FUNCIONES+ESTRUCTURAS DE DATOS)



Lenguajes Lógicos: Se basan en la lógica. La programación se realiza a través de enunciados lógicos de los cuales se va comprobando su veracidad (se manejan hechos y reglas, sobre los cuales se realizan consultas). Se utilizan variables en los parámetros pero no asignación de memoria. Ejemplo: Prolog. (PROGRAMA = LÓGICA+CONTROL+ESTRUCTURAS DE DATOS)



Lenguajes Orientados a Objetos: Están orientados a solucionar problemas simulando el comportamiento del mundo real. Se definen objetos y sus clases respectivas para simbolizar situaciones dadas, aprovechando además que sus clases son reutilizables. (Se definen clases y objetos para simular entidades de la vida real que se coordinan a través del paso de mensajes. Ventaja de reutilización). Ejemplo: Simula 67, Smalltalk, C++, Ada 95, Java. (PROGRAMA = OBJETOS+MENSAJES)



Lenguajes Concurrentes, Paralelos y Distribuidos: Son los lenguajes que permiten realizar operaciones diferentes al mismo tiempo (concurrencia), o una misma operación con varios procesadores simultáneamente, o la ejecución en paralelo con procesadores separados geográficamente. Son ejemplo de estos tipos de lenguajes, Pascal Concurrente, Modula, Ada.

Proceso de desarrollo: (Modelo de cascada) El modelo en cascada es un enfoque metodológico que que ordena rigurosamente las etapas del proceso de desarrollo de software. El desarrollo de software debe influir en la elección de un lenguaje, y no al revés. Es decir, según la metodología elegida, voy a elegir el lenguaje.

Especificación y Análisis de requerimientos: El propósito de esta fase es elaborar un documento de especificación de requerimientos, es elaborado en conjunto entre los usuarios y diseñadores. Se

Lenguajes de programación define “cual” es el problema y “el que” debe hacer el sistema. Se plasma en un documento “cual” es el problema a resolver y “el que” debe hacer el sistema. El éxito del sistema se mide en base al cumplimiento de los requerimientos. • Diseño: Se toma el documento de especificación de requerimientos y se plasma en otro documento (llamado Documento de Especificación de Diseño), “como” se resolverá el problema. El base al diseño (módulos e interfaces del sistema) se va elegir el LP. • Implementación: En base a la documentación de Especificación  de Diseño se procede a realizar la programación. Se codifica el sistema de acuerdo a las especificaciones de diseño, eligiendo las formas de codificación para ajustarse al diseño. El resultado de esta etapa es el sistema codificado (implementado) y documentado. • Verificación y Evaluación: Se testea el rendimiento del sistema integralmente y por módulos y luego se lo entrega al usuario. Se verifica si el sistema responde con las expectativas (si se construyó el sistema de manera correcta) y si resuelve el problema (si es el producto correcto). Esta fase no debería realizarse luego de la implementación, sino durante cada una de las etapas para chequear que las entregas intermedias cumplan sus objetivos. • Mantenimiento: Es la etapa más importante o de mayor costo. Luego de la entrega del sistema, se pueden requerir cambios para adicionar nuevas funciones y/o mejora de las existentes. Adaptación del sistema a nuevos ambientes o crecimientos del usuario mismo.

Arquitectura Von Neumann:

Un lenguaje programación de tipo Von Neumann es cualquier lenguaje de programación que contiene un alto grado de abstracción y que está basado en la arquitectura de von Neumann. En pocas palabras, toda la programación se basa en su estilo de programar la computadora (Von Neumann). En conclusión, es un estilo único. Algunas relaciones del isomorfismo entre los lenguajes de programación y arquitecturas von Neumann son las siguientes: ● ● ● ●

Las variables ↔ Celdas de almacenamiento Instrucciones de control ↔ instrucciones de salto Instrucciones de asignación ↔ búsqueda, almacenamiento de instrucciones. Expresiones ↔ Referencias de memoria e instrucciones aritméticas.

Los lenguajes de programación convencionales pueden ser vistos como abstracciones de una arquitectura subyacente de Von Neumann. Por esta razón, se llaman lenguas Von Neumann. Una abstracción de un fenómeno es un modelo que ignora los detalles irrelevantes y resalta los aspectos relevantes. Los lenguajes de programación convencionales mantienen su modelo de cálculo alejado de la arquitectura subyacente de Von Neumann, pero abstracto de los detalles de los pasos individuales de ejecución. LP, arquitectura de computadoras y los entornos de desarrollo: Los lenguajes también están influenciados por la arquitectura de las computadoras y los entornos de desarrollo. El hardware

Lenguajes de programación restringe al diseño de un lenguaje. La mayoría de los lenguajes de los últimos 40 años han sido diseñados en base a la arquitectura de Von Neumann (CPU+Memoria+I/O). Estos lenguajes son los imperativos. (Los Declarativos  están algo más alejados de la arquitectura de la computadora, al menos a nivel conceptual a nivel implementación interna, necesariamente deben restringirse a la Arq. De VN). El lenguaje es solo un parte de la tecnología necesaria para resolver un problema. Ambiente de desarrollo: Un ambiente de desarrollo de software es un conjunto integrado de herramientas y técnicas utilizadas en todas las etapas del ciclo de vida. Dominio de aplicación: Las computadoras son utilizadas para resolver problemas en una amplia variedad de dominios. ● ● ● ● ●

Aplicaciones científicas. Aplicaciones de negocio. Inteligencia artificial. Programación de sistemas. Aplicaciones web.

Abstracción: La abstracción, tanto de datos como de control, es esencial para brindar legibilidad a los programas. Abstracción de datos: ● Básicas ○ Tipos primitivos ○ Variables ● Estructuradas ○ Tipos de datos estructuradas ● Unitarias ○ Encapsulamiento y ocultamiento ○ Reutilización Abstracciones de control: ● Básicas ○ Enunciados y sentencias de asignación ○ Transferencia incondicional ● Estructuradas ○ Sentencias de selección condicionales ○ Procedimientos y funciones ● Unitarias ○ Reutilización Eficiencia: Aparecen las aplicaciones científicas, codificación. Mantenimiento: Aplicaciones comerciales e industriales, especificación y diseño. Confiabilidad: Aplicaciones para áreas críticas, verificación y validación. Crisis del software:

Lenguajes de programación La potencia computacional de las máquinas era bastante limitada. Es por esto que los programas que se desarrollaban eran “simples” desde nuestro punto de vista actual. Seguían un proceso de desarrollo bastante artesanal, sin una metodología o un camino a seguir para su desarrollo. En esta época se solían usar los lenguajes de bajo nivel para el desarrollo de Software. La potencia de las máquinas empezó a aumentar de forma considerable. Empezaron a aparecer los lenguajes de programación de alto nivel, y las máquinas necesitaban programas mucho más complejos de los desarrollados hasta la época. En definitiva, fue un salto tremendo en cuanto a potencial de hardware, que no fue acompañado por un salto en el desarrollo de software. En esta época, se empezó a concebir el Software como producto, y se empezaron a desarrollar algunos proyectos para que funcionaran en las máquinas de la época. Pero aparecieron importantes problemas, los productos excedían la estimación de costes, había retrasos en las entregas, las prestaciones no eran las solicitadas, el mantenimiento se hacía extremadamente complicado y a veces imposible, las modificaciones tenían un coste prohibitivo…en resumen, se desarrollaba software de mala calidad, ya que la técnica utilizada para desarrollar pequeños programas para máquinas con mucho menos potencial se quedaba desfasada, y muchas veces este software acababa en el olvido.

Paradigmas de programación Un paradigma de programación consiste en un método para llevar a cabo cómputos y la forma en la que deben estructurarse y organizarse las tareas que debe realizar un programa. Se trata de una propuesta tecnológica adoptada por una comunidad de programadores, y desarrolladores cuyo núcleo central es incuestionable en cuanto que únicamente trata de resolver uno o varios problemas claramente delimitados la resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Representa un enfoque particular o filosofía para diseñar soluciones. Los paradigmas difieren unos de otros, en los conceptos y la forma de abstraer los elementos involucrados en un problema, así como en los pasos que integran su solución del problema, en otras palabras, el cómputo. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Es un estilo de programación empleado. Es un conjunto de patrones, estructuras y modelos. Que modelan la forma en la que se razona sobre un problema, se genera el algoritmo y se estructura el programa, el algoritmo nos lleva a resolver el problema de una forma particular siguiendo lineamiento del paradigma escogido.

Diferencia entre metodología y paradigma: La metodología conjunto de métodos, es la forma que adoptamos para resolver el problema, abarca más que el paradigma. El paradigma se basa más en el lenguaje y se encuentra adentro de la metodología. Diferencia entre lenguajes que soportan un paradigma y otros que lo admiten: El que admite es el que tiene construcciones que me permiten escribir programas que fueron modelados con un determinado paradigma en ese lenguaje, pero no fue creado ese lenguaje con la filosofía o características de ese paradigma. Ejemplo: Java soporta POO, mientras C++ no, solo admite la POO. Convencionales: Son los que se adhieren a la arquitectura de Von Neumann, su forma de trabajo es la ejecución de construcciones, modificación en celda de memoria, trabajar sobre repeticiones del ciclo del procesador.

Lenguajes de programación Existen los seudo funcionales mezcla de imperativo y funcionales, se establecen el orden que se tienen que ejecutar las funciones. Una variable se lo considera una celda de memoria. Ejemplos: Imperativo, orientados a objeto. No convencionales: No se adhieren a la arquitectura de Von Neumann, se basan en reglas, métodos, funciones y aserciones. La forma de resolver un problema es diferente a la de los paradigmas convencionales. El concepto de variable ya no se lo considera una celda de memoria. Ejemplos: Declarativo o lógicos, aplicativo o funcional. ●

Paradigma imperativo: Son aquellos que facilitan los cálculos por medio de cambios de estado, entendiendo como estado la condición de una memoria de almacenamiento. Los lenguajes estructurados en bloques, se refieren a los ámbitos anidados, es decir los bloques pueden estar anidados dentro de otros bloques y contener sus propias variables.



Paradigma Orientado a objetos: La Programación Orientada a Objetos es un paradigma de programación que define los programas en términos de "clases de objetos", objetos que son entidades que combinan estado ( es decir, datos), comportamiento ( esto es, procedimientos o métodos ) e identidad (propiedad del objeto que lo diferencia del resto).



Funcional: El paradigma funcional está basado en el modelo matemático de composición funcional. En este modelo, el resultado de un cálculo es la entrada del siguiente, y así sucesivamente hasta que una composición produce el valor deseado. Un lenguaje funcional es el Lisp.



Lógico: La Programación Lógica es un paradigma de programación basado en la Lógica. Los programas construidos un lenguaje lógico están construidos únicamente por expresiones lógicas, es decir, que son ciertas o falsas, en oposición a un expresión interrogativa (una pregunta) o expresiones imperativas (una orden). Un ejemplo de lenguaje lógico es Prolog.

Principios de diseño de lenguaje La mirada del diseñador: ¿Con qué principios cumplir? ¿Que incluir?¿Que omitir? ●

Simplicidad: Propiedad del diseño determinada por el número de componentes básicos, la minimalidad de los conceptos y la consistencia de sus estructuras.



Expresividad: Habilidad que posee un lenguaje para reflejar el significado deseado por el programador lo más naturalmente posible.



Seguridad: Propiedad del diseño que desalienta la posibilidad de escribir programas con errores.

Lenguajes de programación ●

Regularidad: cualidad del lenguaje que refleja la adecuada combinación de los conceptos que lo caracterizan. Es aquel que tiene una adecuada combinación de conceptos que lo hacen característico, combinación como generalidad y ortogonalidad.



Robustez: Habilidad que tiene el lenguaje de tratar eventos no deseados durante la ejecución.

Características que debería tener el lenguaje para cumplir con el principio de regularidad: Ortogonalidad, este principio tiene la capacidad de que el lenguaje poder combinar todos sus componentes en estructuras que tengan un significado parecido. Si hay demasiada ortogonalidad disminuye la seguridad del código o del lenguaje por la cantidad de combinaciones que permite realizar, muchas veces se pierde y hay un error de lógica y ese error puede pasar desapercibido. Supongamos que no sean arrays y que sean funciones que reciba como parámetro cualquier tipo de dato incluso arrays, eso es ortogonalidad. También influye en la simplicidad permitir mucha ortogonalidad va en decrimento de la simplicidad, al permitir muchas combinaciones no lo convierte en un lenguaje simple. Uniformidad: Se pretende que la estructuras o los constructores se comporte uniformemente, es decir tenga previsibilidad en cuanto a su comportamiento, está dada en el concepto de tipo de dato, apunta a que la variable cuando tenga definido un tipo de dato tenga un comportamiento uniforme, es decir el resultado esperado pueda ser previsto. En cuanto a las estructuras de control tratar de que represente lo que realmente está reflejando su sintaxis. Robustez Es la posibilidad de que un lenguaje pueda tratar algún evento no esperado, las excepciones, overflow por ejemplo. La robustez a diferencia de la seguridad, son situaciones que se te presenta en tiempo de ejecución. Flexibilidad En un mismo programa puede realizar variaciones sobre una misma entidad, variable o procedimientos, sin necesidad de realizar modificaciones. Tiempo de ligadura tiempo en que se une una variable con su tipo de dato, los tiempos de ligadura va afectar la flexibilidad en positivo o en lenguaje, si el tiempo es en compilación, ese lenguaje va a ser menos flexible pero más seguro, ahora si es en ejecución ese lenguaje va ser mas flexible pero menos seguro. Siempre va estar en contraposición de la s...


Similar Free PDFs
Resumen LP
  • 77 Pages
LP Typhoid
  • 21 Pages
LP DIARE
  • 13 Pages
LP DHF
  • 18 Pages
LP imunisasi
  • 17 Pages
lp varicella
  • 23 Pages
LP HDR
  • 19 Pages
LP Hepatitis
  • 11 Pages
LP CHF
  • 21 Pages
LP Bronkitis
  • 12 Pages
LP Gerontik
  • 24 Pages