Top Banner
Abstracción Fundamentos de Computación II
30

Abstracción - aulavirtual.fio.unam.edu.ar

Nov 25, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Abstracción - aulavirtual.fio.unam.edu.ar

Abstracción

Fundamentos de Computación II

Page 2: Abstracción - aulavirtual.fio.unam.edu.ar

¿Qué es un lenguaje de programación?

Programa: descripción abstracta de un proceso

Clasificación

Los lenguajes de programación se clasifican según el nivel de abstracción, la forma según

se ejecutan en la computadoras y por el paradigma que implemente.

Proceso: manera de indicarle a la computadora que haga determinadas tareas.

Page 3: Abstracción - aulavirtual.fio.unam.edu.ar

1. Según su nivel de abstracción

a) Lenguajes de máquina: simbolizaba con cadenas de 1 y 0 - estados de las señales

eléctricas- a las direcciones de memoria y las operaciones a realizarse sobre ellas,

sin distinción aparente.

Cada modelo de procesador tenía su lenguaje de máquina ya que los enunciados a usar

en un programa hacían referencia exclusiva a sus atributos: las instrucciones del

lenguaje eran las instrucciones del procesador.

Los circuitos electrónicos del procesador eran capaces de interpretar el significado de

cada una de esas secuencias de bits y llevar a cabo las acciones que codifican.

Ejemplo del aspecto real de un programa

Page 4: Abstracción - aulavirtual.fio.unam.edu.ar

b) Lenguaje de bajo nivel: se incorpora un mecanismo de abstracción.

El programador no necesita conocer el código de máquina, porque las posiciones de

memoria y operaciones a realizar sobre ellas se representan por nombres simbólicos

pero sigue teniendo que pensar y recordar la secuencia de operaciones elementales

del procesador. El lenguaje se denomina ensamblador. Para hacer una tarea sencilla

como sumar dos números puede necesitar varias operaciones del procesador.

El programa se introduce en la memoria de la computadora con la ayuda de un teclado

y cada letra se almacena en una posición, como una combinación particular de unos y

ceros. Para ello se creó un programa especial que al ejecutarse actúa sobre el código

ensamblador y lo “reescribe” en lenguaje de máquina: ensamblador.

“El lenguaje sigue atado a la máquina”.

Las palabras representan instrucciones y los # seguidos de números indican las direcciones de memoria a cuyo contenido se desea acceder.

Page 5: Abstracción - aulavirtual.fio.unam.edu.ar

c) Lenguaje de alto nivel: Más parecido al lenguaje humano.

Con los lenguajes de alto nivel se alcanza independencia de los procesadores, ya que los

elementos de estos lenguajes son palabras propias del humano que no hacen referencia a

ningún procesador en particular.

Una instrucción en lenguaje de alto nivel se corresponde con una secuencia de operaciones

realizables en determinadas posiciones de memoria. Con ella el programador hace

abstracción de cómo hará la máquina para ejecutarla.

Ejemplo: Se desea obtener el resultado de agregar el valor 8 al valor 25; El enunciado que

se corresponda con esta actividad humana en lenguaje natural podría ser: “sumar 8 y 25”

o “add 8 and 25”, etc.

Expresada en un lenguaje de alto nivel, la instrucción será por ejemplo: wr = 8 + 25;, pero

también podría ser wr := 8 + 25;.

. En ninguno de los dos casos es relevante cuáles serán las operaciones y las celdas de memoria que

intervendrán, la tarea es la misma. El símbolo es distinto por que corresponden a distintos

lenguajes de programación, es simplemente una cuestión de codificación.

Page 6: Abstracción - aulavirtual.fio.unam.edu.ar

En este caso se creó también un programa especial que al ejecutarse actúa sobre el

código de alto nivel y lo “reescribe” en lenguaje de máquina con el programa traductor.

Contando con estos recursos el programador puede ahora, ubicarse más cerca del

dominio del problema y alejarse completamente de la máquina.

No necesita conocer las formas de representación interna de los valores y puede

concentrar su atención, en la solución global del problema.

El trabajo del programador es el de construir abstracciones que permitan tratar con

eficiencia la complejidad del mundo real y el de los lenguajes de programación es

proporcionar herramientas que sirvan para construir estas abstracciones.

Page 7: Abstracción - aulavirtual.fio.unam.edu.ar

2. Según la forma de ejecución

a) Lenguajes compilados:

Un programa traductor traduce el código del programa, código fuente, en código

máquina, código objeto. Otro programa, el enlazador, unirá los ficheros de código

objeto del programa principal con los de las librerías para producir el programa

ejecutable. Ejemplo: C.

b) Lenguajes interpretados:

Un programa, intérprete, ejecuta las instrucciones del programa de manera directa.

Ejemplo: Lisp.

También hay mixtos, como Java, que primero pasan por una fase de compilación en la

que el código fuente se transforma en “bytecode”, y este “bytecode” puede ser

ejecutado luego, interpretado, en computadoras con distintos arquitecturas

(procesadores) que tengan todos instalados la misma “máquina virtual” Java.

Page 8: Abstracción - aulavirtual.fio.unam.edu.ar

3. Según el paradigma

a) Imperativos: establecen cómo debe ejecutarse una tarea fraccionándola en

procedimientos que especifican cada una de las tareas, por ejemplo C, Fortran y Pascal.

b) Declarativos: establecen estructuras de datos y las relaciones entre ellos que son

significativas para ejecutar una tarea determinada, al tiempo que indican cual es el

objetivo de dicha tarea. Ejemplo: Prolog.

c) Orientado a objetos: usa objetos y sus interacciones para diseñar aplicaciones y

programas de ordenador; está basado en varias técnicas, incluyendo herencia,

modularidad, polimorfismo y encapsulamiento. Ejemplo: Smalltalk

d) Funcional: es un paradigma de programación declarativo basado en la utilización de

funciones matemáticas, Ejemplo: LISP.

En la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma.

Page 9: Abstracción - aulavirtual.fio.unam.edu.ar

La abstracción es uno de los procesos mentales más comunes que realizamos de manera

rutinaria y usamos sin darnos cuenta. El medio de qué nos valemos los seres humanos

para realizar esta construcción mental es el lenguaje.

Entonces…

La abstracción en informática

Enunciado de una situación problemática

Al buscar la solución crea, en su mente, una abstracción del problema para encontrar un método que describa el proceso de solución.

Encontrado el método, es decir, paso a paso “lo qué hay que hacer”, lo implementará en un programa mediante un lenguaje de programación

1 3 2

Page 10: Abstracción - aulavirtual.fio.unam.edu.ar

Ejemplo:

HECHO REAL ENUNCIADOS A RESOLVER

En un seminario sobre “Teoría de los lenguajes” que tiene un cupo de 100 asistentes se registran apellido, edad e importe pagado en concepto de inscripción por los presentes al mismo. No todos pagan el mismo valor

PROBLEMA 1: Teniendo como dato el apellido de cada asistente a un seminario se quiere determinar cuántos no asistieron sabiendo que el cupo era de 100

PROBLEMA 2: Calcular la edad promedio de los asistentes a un seminario a partir de la edad de cada uno de ellos.

PROBLEMA 3: Calcular el importe promedio pagado por los asistentes a un seminario a partir del valor pagado por cada uno de ellos.

Page 11: Abstracción - aulavirtual.fio.unam.edu.ar

Un lenguaje de programación permite:

definir un proceso que ejecutará una computadora

hacer abstracción de la máquina, se ajusta más al problema

construir nuevas abstracciones que se adapten al dominio del problema

Un programa es una descripción abstracta de un procedimiento que existe o puede existir en

el mundo real.

Los lenguajes de programación son las herramientas para implementar esos modelos

abstractos.

Por medio de un lenguaje de programación se puede representar, en la computadora, el

proceso de solución de un problema.

La abstracción es clave para diseñar un buen programa.

Al diseñarse un lenguaje se tiene en cuenta el estilo de programación o paradigma al que se

ajustará.

Conclusiones

Page 12: Abstracción - aulavirtual.fio.unam.edu.ar

La abstracción ofrecida por los lenguajes de programación

Alejados ya de la máquina, los lenguajes siguieron evolucionando de la mano de la

complejidad de los problemas que se pretendían resolver automáticamente.

Brindan variados recursos al programador, para que, al diseñar el programa “ignore”

distintos detalles del funcionamiento interno de la computadora.

Se dividen en dos grandes grupos:

1. Las que tienen que ver con los datos que deberán procesarse, abstracción de datos

2. Las que tienen que ver con el orden en que se ejecuten las acciones que corresponden

al proceso, abstracción de control.

Page 13: Abstracción - aulavirtual.fio.unam.edu.ar

Abstracciones de Datos

Abstracciones básicas:

Se refieren a la “representación” de las características del valor de un dato: del precio de un

producto, del largo de un barco, de la edad de una persona, etc. en cuanto a los patrones

de bits que lo deben codificar, las direcciones de las celdas de memoria que se utilicen y las

operaciones que con ellos se pueda realizar.

Todo esto queda resumido en lo que, en los lenguajes llaman tipo de dato. Proveen de

palabras especiales con las que se identifica cada uno de los tipos, tal que, el programador

se abstrae de conocer los detalles de implementación en el hardware de los valores a

procesar. Por ejemplo, en el lenguaje C, los enunciados:

float pr,largo;

char ton

Indican que los identificadores pr y largo se refieren a respectivas posiciones de

memoria que contienen representaciones en punto flotante, que sus valores

corresponderán a números que pueden incluir valores fraccionarios y que

soportarán las operaciones aritméticas tradicionales y la comparación de su valor.

En tanto que ton se refiere a los números o de puntuación reconocidos en la

notación ASCII y que tendrán a la comparación como una operación permitida.

Page 14: Abstracción - aulavirtual.fio.unam.edu.ar

En Pascal, lo mismo se representaría:

var largo, pr: real;

ton: char;

En los lenguajes de alto nivel más antiguos o de primera generación (FORTRAN I, ALGOL,

etc.) los datos que se podían manipular eran puramente matemáticos, porque respondían

a aplicaciones científicas y de ingeniería.

Al extenderse el campo de acción de la programación hacia otras áreas, fue necesario

trabajar con otros datos y, por lo tanto, con valores de otro tipo que se incorporarían

como básicos a los lenguajes. Es el caso de los valores lógicos y de los caracteres.

El programador estaba limitado a usar las abstracciones que proveía el lenguaje.

Page 15: Abstracción - aulavirtual.fio.unam.edu.ar

Abstracciones de organización

Se refieren a la “representación” de datos más complejos.

Son los que se corresponden con una colección de valores de datos relacionados entre sí

(nombre de una ciudad, datos personales de un estudiante, etc.).

Para la abstracción de estos conjuntos, el concepto fundamental es el de dato

estructurado.

Los lenguajes incluyen como propias, algunas formas de organización o estructuras de

datos, tales como arreglos, registros, cadenas entre otras, cada una de las cuales

presenta características exclusivas del agrupamiento.

Con algunos lenguajes se pueden definir las estructuras de datos como si fueran tipos,

con las mismas posibilidades de manejo que los tipos básicos, pero con los rasgos y

cualidades específicas que el programador requiera.

Page 16: Abstracción - aulavirtual.fio.unam.edu.ar

Al contar con estos recursos, el programador tuvo la posibilidad de pensar en distintas

formas de organizar los grupos de valores que fuera necesario manipular.

Se hizo sumamente importante en la etapa de diseño de la solución del problema, detectar la

o las estructuras más apropiadas para cubrir las necesidades del tratamiento de los datos

ajustando las exigencias del problema a las posibilidades que ofrecen estas herramientas.

Los lenguajes que se fueron inventando (que serían luego encuadrados en generaciones)

incluyeron progresivamente, no sólo estas abstracciones sino que fueron incorporando la

posibilidad de permitir al programador definir nuevas abstracciones de datos más

específicas.

Page 17: Abstracción - aulavirtual.fio.unam.edu.ar

Se refieren a la posibilidad de trabajar, en determinados lugares del programa, con

agrupamiento de código en forma de archivo.

Las abstracciones de datos unitarias son la base del mecanismo de las bibliotecas

estándar, de los paquetes o de las clases (en los lenguajes orientados a objeto).

Abstracciones unitarias:

Page 18: Abstracción - aulavirtual.fio.unam.edu.ar

Abstracciones de Control

Abstracciones básicas:

Son las que sintetizan en una sola instrucción, expresada en un único enunciado, a

varias acciones de máquina.

El mecanismo que usa la máquina, para realizar un cálculo (aritmético, lógico, de

concatenación, etc.) involucra varias acciones que son distintas a las que tienen que ver

con el traslado de valores de una localización a otra de la memoria. Sin embargo, el

programador no se ocupa de ello, el lenguaje tiene un único enunciado llamado

sentencia de asignación que combinada o no con algún símbolos especial, resume el

accionar interno del hardware.

Page 19: Abstracción - aulavirtual.fio.unam.edu.ar

Por ejemplo, en lenguaje C:

x = ‘M’; activa una determinada cadena de bits en una dirección de memoria.

z = 4 + w; recupera el valor almacenado en una dirección de memoria y lo agrega

a otro valor, activándose en una dirección de memoria distinta, la cadena de bits

que representa al resultado. ex = imp; copia (o traslada) el valor almacenado en una dirección a otra.

En lenguaje Fortran:

x = ‘M’

z = 4 + w

ex = imp

En lenguaje Pascal:

x := ‘M’;

z := 4 + w;

ex := imp;

Page 20: Abstracción - aulavirtual.fio.unam.edu.ar

En un lenguaje de programación el enunciado que viene a resumir este accionar, es la

sentencia goto (ir a…). Se considera que, salvo para necesidades especiales, esta

sentencia no es una forma útil de abstracción porque en realidad, con ella el

programador no se libera de “pensar” en el accionar de la máquina para mantener el

control sobre las instrucciones.

Internamente, la máquina almacena también en posiciones de memoria, a cada una de las

instrucciones. Estas posiciones son consecutivas, de tal manera que, cuando se lo requiera,

se ejecutarán automáticamente una después de la otra, salvo que una de esas instrucciones

de máquina sea la que indica un salto en la secuencia. En ese caso, lo que hace, es transferir

el control a la posición específica de memoria donde se encuentra otra instrucción que, de

alguna forma, se ha etiquetado para ese fin (mediante un nombre o un número)

Page 21: Abstracción - aulavirtual.fio.unam.edu.ar

1 GOTO 10 2 estas líneas se saltan ... 3 ... 4 ...y la ejecución continúa aquí 5 10 CONTINUE

el control salta de la línea 1 a la 5.

Todas las sentencias que haya las líneas intermedias no se ejecutan

Los lenguajes actuales tienen esta sentencia pero habilitada sólo para

situaciones puntuales de la programación.

Page 22: Abstracción - aulavirtual.fio.unam.edu.ar

Abstracciones estructuradas:

Son las que describen el orden en el cual las acciones van a ser ejecutadas.

El hardware dispone de mecanismos que implementan la secuencialidad en la

ejecución de las instrucciones de máquina, mediante un contador de programa que se

incrementa con cada instrucción llevada a cabo.

El contador puede ser modificado por una instrucción especial, tal que se provoque un

cambio en el flujo de las acciones pues se estaría transfiriendo el control a una

posición especificada, distinta que la próxima en la secuencia.

Así es que se puede provocar una división en el flujo de instrucciones o una

reiteración de las ya ejecutadas.

Page 23: Abstracción - aulavirtual.fio.unam.edu.ar

Las abstracciones que proveen los lenguajes para que el programador no tenga que manipular

con estas acciones, son las denominadas estructuras de control y corresponden a enunciados

de selección simple (if-then-else en la mayoría de los lenguajes) de selección múltiple (case

en Pascal, switch en C) y a los bucles o ciclos (for, while, dowhile en C o for, while, repeat-

until en Pascal, o do, do while en Fortran)).

Otro mecanismo para controlar el flujo durante la ejecución de un programa, aunque

bastante más complejo a nivel de máquina, es el subprograma.

Es un recurso que se puede trabajar de dos maneras distintas: una es la que se denomina

subrutina o procedimiento) y la otra función.

Consiste en un agrupamiento de acciones que resuelven un problema determinado, tiene

sus propios datos y responde a un algoritmo específico.

Se comporta como una unidad de programa independiente, pero asociada al programa

principal de tal manera, que puede intercambiar explícitamente valores con él.

Page 24: Abstracción - aulavirtual.fio.unam.edu.ar

El grupo de sentencias de las líneas 2 a la 4 , encerradas entre

llaves, se ejecutan como un único bloque si se cumple que x>=0 y

en otro caso se ejecuta la sentencia 6.

Otros lenguajes como Haskell, utilizan la sangría como sustitución de llaves para indicar

anidamiento, como en la siguiente función:

Además las abstracciones de control

estructuradas se pueden anidar unas dentro de

otras. Por ejemplo en C:

Page 25: Abstracción - aulavirtual.fio.unam.edu.ar

Es así que el subprograma es llamado desde el programa principal.

En esa circunstancia, se establece una conexión de paso (parámetros) para intercambiar

información y se transfiere el control a la unidad de programa invocada.

El subprograma es una abstracción muy especial que distingue entre la definición y el uso

de la acción abstracta. Debe ser diseñado por el programador y puede ser usado cuando

sea necesario, como si fuera una única acción.

Durante su diseño, el programador se concentra solamente en el “cómo debe

trabajar” (implementa la abstracción) e incluso debe identificar el proceso con un

nombre. Cuando lo pone en uso, se concentra en el “qué hace”, ignorando los

detalles de su real implementación (usa la abstracción).

En esta doble abstracción se sintetiza no sólo la operatoria (en el cuerpo del

subprograma) sino un mecanismo complejo que incluye la información referida al

estado del programa en el punto de la invocación y al proceso de transferencia del

control hacia y desde el subprograma (en la llamada)

Page 26: Abstracción - aulavirtual.fio.unam.edu.ar

Ejemplo en Ada que calcula el máximo común divisor de los enteros u y v (sus parámetros):

Page 27: Abstracción - aulavirtual.fio.unam.edu.ar

Son las que permiten reunir procedimientos que resuelven situaciones individuales,

lógicamente vinculadas.

Este tipo de abstracción de control provee herramientas para la programación en paralelo.

El hardware actual, al tener varios procesadores, puede ejecutar varios procesos a la par.

Los lenguajes modernos han incorporado entonces, mecanismos de control específicas

como son los hilos o los task.

Abstracciones unitarias:

Page 28: Abstracción - aulavirtual.fio.unam.edu.ar

Implementación de un lenguaje

Se refiere a la manera de convertir o traducir a lenguaje de máquina un programa escrito en un

lenguaje de programación. Es lo que va a permitir que se ejecute un programa para una

determinada combinación hardware-software.

La conversión se realiza a través de un traductor, que no es más que un programa que recibe a

otro programa escrito en un determinado lenguaje.

El proceso de conversión se puede realizar de dos maneras:

- mediante interpretación (el traductor se llama intérprete): convierte y ejecuta el programa.

El programador no percibe la conversión a lenguaje de máquina, parece que se ejecuta

directamente.

- mediante compilación (el traductor se llama compilador): la actividad final del proceso de

traducción es la generación de un nuevo código, se construye una secuencia de instrucciones en

lenguaje de máquina que representan a los enunciados del programa fuente, el producto final

es el programa objeto.

Este sufrirá otros tratamientos para terminar en un programa ejecutable.

Page 29: Abstracción - aulavirtual.fio.unam.edu.ar

La traducción consiste, esencialmente, en tres actividades básicas que llevan a cabo tanto

los compiladores como los intérpretes: análisis léxico, análisis sintáctico y semántico.

En el análisis léxico se reconocen las entidades elementales que se representan con las

distintas cadenas de símbolos (identificadores, palabras reservadas y constantes), en el

sintáctico se analiza la estructura gramatical de un enunciado y se reconoce el papel de

cada uno de sus componentes y en el análisis semántico se analiza el significado.

Page 30: Abstracción - aulavirtual.fio.unam.edu.ar

Los lenguajes de programación “ son una herramienta para describir computaciones"

donde prevalecen la legibilidad de la maquina y de los programadores.

“El reto de un lenguaje es lograr la potencia, expresividad y comprensión que requiere

la legibilidad del programador conservando la precisión y simplicidad necesarias para su

traducción al lenguaje de maquina. La legibilidad del programador es parcialmente

proporcional a las capacidades de abstracción del lenguaje con mecanismos para la

abstracción de datos mediante estructuras de datos y la abstracción del control de la

ejecución para resolver el problema

y por lo tanto el objetivo principal de la abstracción en el diseño de los lenguajes de

programación es el control de la complejidad.