Procedural vs No Porcedural

Institución Profesional Duoc Uc. Informática Biomédica Sede Valparaíso. Fundamentos de Informática. Lenguajes Procedur

Views 294 Downloads 129 File size 261KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Institución Profesional Duoc Uc. Informática Biomédica Sede Valparaíso.

Fundamentos de Informática.

Lenguajes Procedurales y No Procedurales.

Profesora: Isabel Alvarado Alumnos: ponelos tu Marcelo

Valparaíso, Mayo del 2012.

Índice. Introducción ........................................................................................................................................ 3 Historia de la Informática. ................................................................................................................... 3 Definición ............................................................................................................................................ 4 Características Imperativas; ................................................................................................................ 6 Características Declarativas ................................................................................................................ 8 Diferencias entre Procedural y no Procedural .................................................................................... 9 Ejemplos en sentencias- .................................................................................................................... 10 Conclusión ......................................................................................................................................... 12 Bibliografía. ....................................................................................................................................... 13

Introducción En los que respecta a este informe, hemos buscado aclarar el Tema que nos toco de la forma mas explicativa posible. En nuestra búsqueda general nos encontramos con diferentes Tipologías que se le da a los lenguajes procedurales y ciertas confusiones en la división paradigmática. Hemos logrado dilucidar entre estas confusiones centrándonos en el significado mismo de la palabra, como un conjunto de Lenguajes enfocados a los Procedimientos y otros que no. Así en este trabajo se aborda el tema de forma tal que a grandes rasgos podamos diferenciar un lenguaje Procedural de uno No procedural. Siempre recordando que nos encontraremos muchas veces con algunos que tienen un poco de ambos, ya que pueden tener ciertas especificaciones que los identifican con el proceso de transición de estos paradigmas. Para estos, podremos identificar que los hace pertenecer a ambos y porque.

Historia de la Informática. Para crear un programa, y que la computadora interprete y ejecute las instrucciones escritas en él, debe usarse un Lenguaje de programación Como Orgullo del Genero femenino la primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora. Los lenguajes de programación de hoy son el producto de un desarrollo que se inició en los 1950's. Numerosos conceptos de lenguajes han sido inventados, examinados e implementados en sucesivos lenguajes. Con muy pocas excepciones, el diseño de cada lenguaje ha sido fuertemente influenciado por la experiencia con los lenguajes iniciales. Los lenguajes de hoy no son el producto final del desarrollo del diseño del lenguaje; nuevos conceptos y paradigmas están siendo desarrollados y el escenario de los lenguajes de programación de los próximos diez años podría ser un poco diferente al de hoy.

En sus inicios las computadoras interpretaban sólo instrucciones en un lenguaje específico,

del

más

bajo

nivel,

conocido

como código

máquina,

siendo

éste

excesivamente complicado para programar. De hecho sólo consiste en cadenas de números 1 y 0 (Sistema binario). Para facilitar el trabajo de programación, los primeros científicos que trabajaban en el área decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o letras provenientes del inglés; codificándolas así y creando un lenguaje de mayor nivel, que se conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente lo mismo que hacerlo en lenguaje máquina, pero las letras y palabras son bastante más fáciles de recordar y entender que secuencias de números binarios. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método sencillo para programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan trivial como multiplicar dos números puede necesitar un conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una.

Definición Los paradigmas de programación pueden clasificarse como procedurales y no procedurales, también se le llaman de procedimientos y no procedimientos; Imperativo y Declarativo; o Clásico y Moderno. Entre otras formas de

Dividir la historia de la

programación en dos partes. Una en la cual los métodos de programación eran rígidos y cada paso que daba el programa era especificado por el programador, y la nueva era programática donde los lenguajes buscan la interrelación de módulos que dejan un código elegante y simple. EL modelo procedural es un Metaparadigma (División de un conjuntos de paradigmas) de la programación. Muchas veces es aplicable tanto en lenguajes de programación de bajo nivel como en lenguajes de alto nivel. En el caso de que esta técnica se aplique en lenguajes de alto nivel, recibirá el nombre de Programación funcional. Esta técnica consiste en basarse de un número muy bajo de expresiones repetidas, englobarlas todas en un procedimiento o función y llamarlo cada vez que tenga que ejecutarse.

Esta técnica de programación ofrece muy buena respuesta en relación al tamaño de los programas, y en bruto casi no se nota en la velocidad de ejecución de los mismos (mientras que las variables, constantes o índices de vector estén en memoria, como suele ser normal, estos se relacionarán entre sí, sin una carga de memoria considerablemente alta para los procesadores modernos); aunque es muy complicado conseguir una Programación por procedimientos pura El rasgo que distingue a un paradigma de procedimientos es que el programador debe especificar con exactitud cómo debe codificarse la solución de un problema. Incluso los generadores de código deben producir código de procedimientos Ejemplo;.

Paradigma Imperativo Los términos imperativa y orientada a las afirmaciones se usan como sinónimos. Los lenguajes como FORTRAN, Ada, Pascal, COBOL y BASIC tienen las características predominante de que las afirmaciones son imperativos u órdenes que indican que a la computadora lo que tiene que hacer. Los lenguajes imperativos se desarrollan como una forma de liberar al programador de la necesidad de codificar el lenguaje ensamblador en la arquitectura de Von Newman. En consecuencia, los lenguajes imperativos ofrecen gran soporte a variables, asignación de operaciones y repetición. EL Modelo “no procedural” a menudo se define como cualquier estilo de programación que no es imprescindible . . En ciencias de la computación , la programación declarativa es un Metaparadigma que expresa la lógica de un cómputo sin describir su flujo de control . Muchos lenguajes de aplicación

de

este

intento

de

estilo

para

minimizar

o

eliminar los

efectos

secundarios mediante la descripción de lo que el programa debe cumplir, en lugar de describir cómo de ir sobre el cumplimiento de la misma. Esto está en contraste con la programación imperativa , lo que requiere una descripcion, explícitamente algoritmos . La programación declarativa considera a menudo los programas de las teorías de la lógica formal y cálculos como deducciones en ese espacio de la lógica. La programación

declarativa se ha convertido en un interés particular recientemente, ya que en gran medida puede simplificar la escritura de programas paralelos . Comunes de los lenguajes declarativos son los de las expresiones regulares , la programación lógica y programación funcional . Ejemplo;

Paradigma Funcional La programación funcional, y, en particular puramente funcional de programación, los intentos para minimizar o eliminar los efectos secundarios, y tanto, se considera declarativo. Mayoría de los lenguajes funcionales, como el Plan , OCaml , Standard ML , y Unlambda , sin embargo, no permiten efectos secundarios en la práctica. Mientras que los lenguajes funcionales típicamente parecen indicar "cómo", un compilador para un lenguaje de programación puramente funcional es libre para volver a escribir extensamente el comportamiento operacional de una función, siempre y cuando el mismo resultado se devuelve para las mismas entradas. Esto puede ser utilizado para, por ejemplo, hacer una función calcular su resultado en paralelo , o para realizar optimizaciones sustanciales (tales como la deforestación ) que un compilador puede no ser capaz de aplicar con seguridad a un lenguaje con efectos secundarios.

Características Imperativas; Debido a su relación cerrada con las arquitecturas de las máquinas, los lenguajes de Programación Imperativa pueden ser implementados eficientemente. La base de la programación imperativa es la completa especificación y manipulación controlada de datos con nombre de una manera secuencial. Esta programación se cree que se ajusta a la mente humana. En la Programación imperativa se actualizan variables que están en almacenamiento, en 1950, cuando los programadores reconocieron que las variables y comandos de asignación constituyen una simple pero útil abstracción de memoria que se actualiza. Basado en el modelo de computador más extendido, el llamado modelo de Von Neumann. Von Neumann define una máquina que es capaz de ejecutar una serie de instrucciones

secuencialmente, una tras de otra. Estas instrucciones deben estar almacenadas en memoria principal para poder ser leídas y ejecutadas por la unidad de control. Los dispositivos periféricos nos permiten obtener los resultados e introducir datos que queremos procesar en el sistema. El paradigma imperativo permite expresar algoritmos que se realizan de acuerdo a este modo

de

funcionamiento.

Recordemos que un Algoritmo, es un método preciso para resolver automáticamente un problema. Consta de una representación de los datos que se manejan y un conjunto de pasos tales que cada uno de ellos resuelve un problema menor. Es necesario describir el orden en el que se deben ejecutar estos pasos para poder introducirse en el ordenador Si se analizan las características fundamentales de este paradigma se detectan las siguientes: Concepto de celda de memoria ("variable") para almacenar valores. El componente principal de la arquitectura es la memoria, compuesto por un gran número de celdas donde se almacenan los datos. Las celdas tienen nombre (concepto de variable) que las diferencian, y sobre los que se producen efectos de lado y definiciones de alias. Operaciones de asignación: Estrechamente ligado a la arquitectura de la memoria, se encuentra la idea de que cada valor calculado debe ser "almacenado", es decir asignado a una celda. Esta es la razón de la importancia de la sentencia de asignación en el paradigma imperativo. Las nociones de celda de memoria y asignación en bajo nivel, se tienden a todos los lenguajes de programación y fuerzan en los programadores un estilo de pensamiento basado en la arquitectura de Von Neumann. Las asignaciones poseen la forma siguiente: expresión1:=expresión2 donde: 1: denota la localidad de memoria y 2 : denota un valor. Repetición: Un programa imperativo, normalmente realiza su tarea ejecutando repetidamente una secuencia de pasos elementales, ya que en este modelo

computacional la única forma de ejecutar algo complejo es repitiendo una secuencia de instrucciones.

Características Declarativas La Programación Declarativa o “No procedural”, en contraposición a la Programación Imperativa es un paradigma de programación que está basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora que es lo que se desea obtener o que es lo que se está buscando). No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial Aunque en la Programación Declarativa cabe más de un paradigma de programación, se ha optado por centrarla en el estudio de la denominada Programación Lógica, el cual está basado en el cálculo de proposiciones y sus relaciones lógicas. La programación declarativa es un estilo de programación en el que el programador especifica qué debe computarse más bien que cómo deben realizarse los cómputos. "programa = lógica + control" (Kowalski) "algoritmos + estructuras de datos = programas" (Wirth) El componente lógico determina el significado del programa mientras que el componente de control solamente afecta a su eficiencia. La tarea de programar consiste en centrar la atención en la lógica dejando de lado el control, que se asume automático, al sistema. La característica fundamental de la programación declarativa es el uso de la lógica como lenguaje de programación: Un programa es una teoría formal en una cierta lógica, esto es, un conjunto de fórmulas lógicas que resultan ser la especificación del problema que se pretende resolver, y la computación se entiende como una forma de inferencia o deducción en dicha lógica. Los principales requisitos que debe cumplir la lógica empleada son: Disponer de un lenguaje que sea suficientemente expresivo;

Disponer de una semántica operacional (un mecanismo de cómputo que permita ejecutar los programas) y por ultimo una semántica declarativa que permita dar un si.

Diferencias entre Procedural y no Procedural En la Programación Procedural 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. La programación no procedural dice QUÉ, en lugar de CÓMO Cuando las cosas se pueden ordenar en una serie, es natural preguntar si hay un primer elemento o un último elemento en la serie.

Por ejemplo, una vez que un programa se puede hacer más

pequeño que otro y desarrollar la misma función, es natural preguntarse si hay una manera de hacer el programa más pequeño que haga esa misma función. De manera similar, la noción de un programa rápido nos permite buscar el programa más rapido, y la noción de un mejor programa (por cualquier criterio) nos permite buscar el mejor programa. Una manera de juzgar un lenguaje de programación es verificar que ese lenguaje sea de más alto-nivel que otro. Un lenguaje es de más alto nivel que otro si podemos expresar el mismo programa con menos detalle. Otra manera de expresar esto es que un lenguaje es de más alto nivel cuando es menos procedural. En otras palabras, en un lenguaje de más alto nivel nos podemos concentrar más en QUÉ se está haciendo y no en CÓMO se está haciendo. El paradigma Funcional esta en el borde de esta clasificación En Cambio en la programación declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar, 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. Considere el siguiente ejemplo: Suponga que queremos ordenar un arreglo.¿Cómo podemos expresar este problema en un lenguaje no procedural? Tenemos que describir qué significa “Ordenar un arreglo”. Por ejemplo, decimos que B es un orden de A si y solo si B es una permutación de A y B esta ordenado. También tenemos que describir lo que significa una “permutación de un arreglo” y lo que significa un “arreglo ordenado”. Para este último podemos decir que B esta ordenado si B[i]