Informática II - Inicio - Departamento de Sistemas e ... · constelación de conceptos y teorías...

61
Informática II Ingeniería Electrónica (2011)

Transcript of Informática II - Inicio - Departamento de Sistemas e ... · constelación de conceptos y teorías...

Informática II

Ingeniería Electrónica (2011)

Paradigmas

Paradigma proviene del griego παράδειγμα (se lee paradeigma), formada del prefijo para (junto) y deigma (modelo), el cual proviene de deiknynai (mostrar o demostrar).

La palabra paradigma fue también utilizada para indicar un patrón, un ejemplo fuera de toda duda, un arquetipo.

Paradigmas

En principio, se aplicaba a la gramática (para definir su uso en un cierto contexto) y a la retórica (para referirse a una parábola o fábula).

Paradigmas

Platón usa paradigma en su acepción de ejemplo, considerando que el ejemplo no es un mero ejemplo sino algo ejemplar que sirve de modelo o patrón.

Paradigmas

Hace 50 años hubiera resultado extraño usar la palabra paradigma. Si en ese tiempo se le hubiese pedido a un profesional una definición de ello, muy difícilmente hubiera dado una respuesta satisfactoria.

Paradigmas

El filósofo y científico Thomas Kuhn dio a paradigma su significado contemporáneo cuando lo adoptó para referirse al conjunto de prácticas que definen una disciplina científica durante un período específico de tiempo.

Paradigmas

Kuhn prefería el términos ejemplar a paradigma, que tiene un significado filosófico más exacto. En su libro La Estructura de las Revoluciones Científicas (1962) define a un paradigma de la siguiente manera:

Paradigmas “Un paradigma se puede definir como la

visión del mundo dominante de una cultura. Más precisamente, es una constelación de conceptos y teorías que juntas forman una particular visión de la realidad. Dentro de un contexto de paradigmas dado, ciertos valores y prácticas son compartidas de modo que se transformen en base de los modos que la comunidad se organice así misma...”

El término permanece impreciso debido a los diferentes usos que se le dan.

Paradigmas

Probablemente el uso más común de paradigma, implique el concepto de "cosmovisión".Por ejemplo, en ciencias sociales, el término se usa para describir el conjunto de experiencias, creencias y valores que afectan la forma en que un individuo percibe la realidad y la forma en que responde a esa percepción.

Paradigmas

Al analizar estas definiciones pueden encontrarse puntos comunes, por cuanto todos ellos consideran el paradigma como: concepciones de problemas y modelos de acción o procedimientos, marcos referenciales o escuelas de pensamiento.

Cambios de paradigma

El cambio de paradigma tiende a ser drástico en las ciencias, ya que éstas parecen ser estables y maduras, como la física a fines del siglo XIX.

Es famosa la frase de Lord Kelvin en 1900, cuando dijo: "No queda nada por ser descubierto en el campo de la física actualmente. Todo lo que falta son medidas más y más precisas".

Cambios de paradigma

5 años después de esta aseveración, Albert Einstein publicó su trabajo sobre la relatividad especial que fijó un sencillo conjunto de reglas superando a la mecánica de Newton, que había sido utilizada para describir la fuerza y el movimiento por más de doscientos años.

Cambios de paradigmas En La estructura de las revoluciones

científicas, Kuhn escribió que "las sucesivas transiciones de un paradigma a otro vía alguna revolución, es el patrón de desarrollo usual de la ciencia madura".

La idea de Kuhn era revolucionaria en su tiempo, y causó más cambios que todos los académicos hablando sobre ciencia. De esta manera fue en sí misma un "cambio paradigmático" en la historia científica y de la sociología.

Paradigmas de programación

Con respecto a las ciencias de la computación, Robert Floyd, fue quien por 1º vez (1979) habló del concepto de Paradigma de Programación

Paradigmas de programación

...y lo define como: "Un proceso de diseño que va más allá de una gramática, reglas semánticas y algoritmos, sino que es un conjunto de métodos sistemáticos aplicables en todos los niveles de diseño de programas".

Paradigmas de programación

Un paradigma de programación es un método de realizar cómputos y la forma en que deben estructurar y organizarse las tareas llevadas a cabo por un programa

Paradigmas de programación

En ciencias de la computación cada comunidad habla su propio lenguaje y usa sus propios paradigmas

Los lenguajes de programación suelen implementar,a menudo de forma parcial,varios paradigmas.

Paradigmas de programación

Paradigmas de programación

Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software.

No es mejor uno que otro sino que cada uno tiene ventajas y desventajas.

También hay situaciones donde un paradigma resulta más apropiado que otro.

Paradigmas de programación

Un lenguaje de programación puede apoyar determinado paradigma de programación pero no puede imponerlo al programador

El programador decide cómo construir su programa usando los elementos del paradigma. Ej.: puede escribir un programa en Java puramente imperativo (no recomendado!)

Un programa escrito en el mismo lenguaje en versión estructurada/no estructurada

Ejemplo10 dim i 20 i = 0 30 i = i + 1 40 if i <> 10 then goto 90 50 if i = 10 then goto 70 60 goto 30 70 print "Program Completed." 80 end 90 print i & " squared = " & i * i 100 goto 30

Ejemplodim i for i = 1 to 10 print i & " squared = " &

square(i) next print "Program Completed."

function square(i) square = i * i end function

Tipos de paradigmas de programación Los paradigmas fundamentales están

basados en diferentes modelos de cómputo y por lo tanto afectan a las construcciones más básicas de un programa

Tipos de paradigmas de programación

Paradigmas de Programación

La división principal reside en el enfoque imperativo o no declarativo (indicar el cómo se debe calcular) y el enfoque declarativo (indicar el qué se debe calcular)

El enfoque declarativo tiene varias ramas diferenciadas, entre ellas: el paradigma funcional y el paradigma lógico

Paradigmas de programación

Otros paradigmas se centran en la estructura y organización de los programas, y son compatibles con los fundamentales:

Ejemplos: Programación estructurada, modular, orientada a objetos, orientada a eventos, programación genérica.

Paradigma imperativo

Describe cómo debe realizarse el cálculo, no el porqué.

Un cómputo consiste en una serie de sentencias (comandos o instrucciones), ejecutadas según un control de flujo explícito, que modifican el estado del programa.

Las variables son celdas de memoria que contienen datos (o referencias), pueden ser modificadas, y representan el estado del programa.

Paradigma imperativo

La sentencia principal es la asignación. Es el más viejo y más popular de los

paradigmas Es el estándar ‘de facto’.

– Ejemplos de lenguajes que lo implementan: Fortran, C, C++, etc.

Modelos computacionales

Modelos computacionales

Modelos computacionales

Ada Augusta Lovelace (1815-1852), que era hija del famoso poeta Lord Byron, escribió y publicó en 1843 un manual sobre la programación de la máquina analítica de Babbage (diseñador de la primer máquina de cómputo programable)

Modelos computacionales Para realizar un estudio riguroso en el área

de la teoría de la computación la gente de ciencias de la computación se utilizan abstracciones matemáticas formales de las computadoras llamadas modelos computacionales

Los modelos computacionales representan en un alto nivel de abstracción los conceptos subyacentes a los lenguajes de programación y las arquitecturas de las computadoras

Modelos computacionales

La teoría de la computación comienza propiamente a principios del siglo XX, poco antes que las computadoras electrónicas fuesen inventadas. En esta época varios matemáticos se preguntaban si existía un método universal para resolver todos los problemas matemáticos. Para ello debían desarrollar la noción precisa de método para resolver problemas, es decir, la definición formal de algoritmo.

Modelos computacionales

Los modelos de cómputo permiten analizar teóricamente el diseño de un algoritmo sobre una arquitectura concreta, en cuanto a su rendimiento y proporciona un marco de referencia común, como lo es el modelo de Von Neumann para los computadores secuenciales.

Modelos computacionales

La mayoría de las computadoras aún usan un modelo computacional llamado modelo de Von Neumann introducido en los años 40s

El modelo imperativo es el más cercano al modelo de hardware sobre el cual se ejecutan los programas (arquitectura de Von Neumann)

Modelo de Von-Neumann

Matemático Húngaro-norteamericano (1903-1957) que desarrolló, entre otras, las bases teóricas para la construcción de computadoras digitales de propósito general

Von-Neumann

Arquitectura

La arquitectura de las computadoras o modelos de operación de los modelos computacionales, indica la forma de construcción y distribución de los elementos físicos de una computadora

Relación entre modelo computacional, lenguaje de programación y arquitectura del computador

Una determinada arquitectura del computador puede pensarse como una herramienta para implementar un determinado modelo computacional o, para ejecutar una dada tarea computacional formulada o especificada mediante un lenguaje de programación

Arquitectura de Von Neumann

Arquitectura de Von Neumann

Se tiene una CPU en el medio interactuando con I/O y memoria

CPU (unidad de procesamiento central) realiza los cálculos

Memoria – provee almacenamiento como si fuese un archivero

I/O (periféricos) comunican con el mundo exterior

Arquitectura de Von Neumann

Arquitectura de Von Neumann

Arquitectura de Von Neumann

La memoria almacena programa (instrucciones, codificadas como datos) y datos

Secuencia básica de operaciones:1. Se obtiene la primer instrucción del programa de

memoria (fetch)2. Se decodifica la instrucción (decodificación)3. Se ejecuta la instrucción (ejecución). Los

resultados se almacenan en memoria4. Se obtiene la siguiente instrucción5. Se repite desde paso 2 h/el fin de instrucciones

Arquitectura de Von Neumann

Algunos registros ayudan a la CPU: – Program Counter (PC): contiene la dirección de

memoria de la próxima instrucción a ejecutar, se incrementa o cambia con cada ciclo de reloj

– Registro de instrucciones (IR)– Registros de propósitos generales, por ejemplo

como acumulador para mantener resultados de operaciones lógicas/aritméticas

Arquitectura de Von Neumann

La CPU consta de una Unidad de Control (CU) que interpreta las instrucciones (decodifica a un lenguaje que entiende la ALU y ejecuta)

Y de una ALU (Unidad Aritmética Lógica): realiza operaciones aritméticas y lógicas: sumas, restas, productos, AND, OR, XOR, desplazamientos de bits

Arquitectura de Von Neumann

Arquitectura de Von Neumann

Arquitectura de Von Neumann

Arquitectura de Von Neumann

Arquitectura de Von Neumann

Arquitectura de Von Neumann

Arquitectura de Von-Neumann

Propuso dos conceptos básicos que revolucionarían la incipiente informática– La utilización del sistema binario– El concepto de programa almacenado en

memoria– Procesamiento secuencial de

instrucciones (excepto cuando se ejecuta una sentencia de salto condicional)

Arquitectura de Von Neumann

Cuello de botella:– El procesador ejecuta una instrucción por

vez...– Comunicación con la memoria y I/O

empeoran las cosas...• Se leen las instrucciones (fetch), se leen los

operandos, se escriben resultados

Paradigma imperativo

En los lenguajes imperativos:– Una variable (estado, manejado a través de

nombres simbólicos) es una abstracción de una celda de memoria

– La sentencia de asignación (cambio de estado) es una abstracción del traslado (piping)de los datos de memoria a la CPU (y viceversa) en dicha arquitectura

• Fuente de ineficiencia: el cuello de botella del modelo– El orden secuencial es una abstracción de las

CPU secuenciales

Paradigmas de programación

Asociados al paradigma imperativo se encuentran los – paradigmas procedural, – modular, – y la programación estructurada.

Paradigma procedimental

Indica un modelo de organización de los programas:

Los programas se organizan como colecciones de subrutinas (procedimientos) relacionadas mediante invocaciones (llamadas) entre ellas

Programación estructurada

La programación estructurada es una técnica para escribir programas de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

Programación modular

Se presenta históricamente como una evolución de la programación estructurada para solucionar problemas de programación más grandes y complejos de lo que ésta puede resolver.

Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples.

Programación modular

Permite la compilación separada (además de la programación y depuración) de las distintas unidades independientes que componen el programa