Informática II - Inicio - Departamento de Sistemas e ... · constelación de conceptos y teorías...
Transcript of Informática II - Inicio - Departamento de Sistemas e ... · constelación de conceptos y teorías...
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
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
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
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
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
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
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
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