0% encontró este documento útil (0 votos)
2 vistas12 páginas

Fundamentos de Programación y Computación

Uned Fundamentos de programación Tema 1

Cargado por

davidqm14
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas12 páginas

Fundamentos de Programación y Computación

Uned Fundamentos de programación Tema 1

Cargado por

davidqm14
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

FUNDAMENTOS DE LA PROGRAMACIÓN

CURSO PRIMERO- 1º CUATRIMESTRE

TABLA DE CONTENIDOS Y ORGANIZACIÓN

Máquinas y programas.
Máquinas programables.
Concepto de cómputo.
Concepto de computador.
Programación e ingeniería de software.
Programación.
Objetivos de la programación.
Lenguajes de programación.
Compiladores e Intérpretes.
Modelos abstractos de cómputo.
Modelo funcional .
Modelo de flujo de datos.
Modelo de programación lógica .
Modelo imperativo .
Elementos de la programación imperativa .
Procesador, entorno, acciones .
Acciones primitivas. Acciones compuestas.
Esquemas de acciones.
Evolución de la programación.

Evolución comparativa. Hardware/Software.


Necesidad de metodología y buenas prácticas.
TEMA 1 – INTRODUCCIÓN
Fundamentos de la programación

MÁQUINAS Y PROGRAMAS
Concepto de máquina: Dispositivo o instrumento físico capaz de realizar un cierto trabajo u
operación. Pueden existir físicamente, o no cómo el caso de las máquinas virtuales.

MÁQUINAS PROGRAMABLES
Desde el punto de vista del control de funcionamiento, podemos clasificar las máquinas
en diferentes tipos:

Máquinas no automáticas o de control manual: Controladas por un operador o agente


externo que desencadena unas determinadas operaciones en cada momento.
Ejemplo: Piano.

Máquinas automáticas: Actúan por si solas , sin necesidad de un operador, aunque


pueden responder a estímulos externos.
Ejemplo: Caja de música.

El funcionamiento de una máquina automática depende de la forma en la que esté


construida, es decir…
… de los elementos que la componen.
… de la manera en la que están conectados entre sí.

Máquinas automáticas programables: Son aquellas en las que su comportamiento no es


siempre el mismo. Una máquina programable se puede concebir como una máquina
base (comportamiento fijo) que se completa con una parte modificable que describe el
funcionamiento de la máquina base. A esta parte se le denomina programa.
Ejemplo: Reproductor CD.

PROGRAMA
PROGRAMA

MÁQUINA MÁQUINA
BASE BASE

COMPONENTES MÁQUINA COMPLETA

FIGURA 1.1 : Componentes de una máquina programable.

Dependiendo de cuál sea el programa que gobierne su funcionamiento, una máquina


programable responderá a los estímulos externos de una forma o de otra. Una máquina
programable, por lo tanto, se comporta como diferentes máquinas particulares, en
función del programa utilizado.

Cuando una máquina programable opera bajo control de un programa determinado, se


dice que el programa se ejecuta en dicha máquina.
PROGRAMA A PROGRAMA B

PROGRAMA A PROGRAMA
v B

MÁQUINA MÁQUINA
BASE BASE

MÁQUINA A MÁQUINA B

MÁQUINA
BASE

FIGURA 1.2 : Una máquina programable puede comportarse como diferentes máquinas.

CONCEPTO DE CÓMPUTO
En informática, el concepto de cómputo puede identificarse con el de tratamiento
de la información. Un cómputo se concibe como un proceso a lo largo del cual se van
realizando operaciones o cálculos elementales hasta conseguir el resultado final, es
decir, a partir de una información conocida se obtiene otra nueva como resultado de
unos cálculos.
Ejemplo (fórmula o expresión matemática): 34 x 5 + 8 x 7

CONCEPTO DE COMPUTADOR
Un computador se define como máquina programable para el tratamiento de la
información, es decir, un computador es una máquina para realizar cómputos. Posee
unos elementos fijos (máquina base) y otros modificables (programa).
Elementos fijos: dispositivos físicos del computador (Hardware).
Elementos modificables: representaciones de los programas (Software).
Los computadores actuales se constituyen como máquinas de programa
almacenado, ya que la modificación de los programas no implica una modificación
de los dispositivos físicos de la máquina.

FIGURA 1.3 : Esquema general de un computador

MEMORIA

PROCESADOR

DATOS DE RESULTADOS
ENTRADA/SALIDA
ENTRADA DE SALIDA
La memoria almacena datos y programas. Los dispositivos de Entrada/Salida permiten
intercambiar información con el exterior. El procesador es el elemento de control que
realiza las operaciones elementales del tratamiento de la información interna u
operaciones de entrada/salida de la información al exterior (de acuerdo con los
códigos de los programas almacenados en la memoria).

PROGRAMACIÓN E INGENIERÍA DE SOFTWARE


Un computador es totalmente inútil si no dispone del programa adecuado. Para realizar un
determinado tratamiento de la información con la ayuda de un computador habrá sido
necesario:

EJECUTAR DICHO
PROGRAMA EN EL
COMPUTADOR
CONSTRUIR EL
COMPUTADOR USUARIO
(HARDWARE)

Fabricantes de
hardware
IDEAR Y
DESAROLLAR EL
Profesionales PROGRAMA
de la (SOFTWARE)
informática
(encargados) Fabricantes/desarrolladores
de software

PROGRAMACIÓN
Concepto de programación: Labor de desarrollar programas a pequeña escalera,
es decir, realizados por una sola persona.
Concepto de Ingeniería de software: Conjunto de técnicas o estrategias
organizativas para desarrollar programas complejos, realizados normalmente
por un equipo.
Descomponer el trabajo total de programación en partes independientes
que pueden ser desarrolladas por miembros individuales del equipo.

OBJETIVOS PARTICULARES DE LA PROGRAMACIÓN

Corrección: El programa debe realizar el tratamiento esperado y no producir errores


(importancia de la especificación previa en la que se indica el resultado esperado).

Claridad: Es fundamental que las descripciones de los programas sean claras y


fácilmente interpretables por otras personas (los programas suelen modificarse).

Eficiencia: Los programas eficientes aprovechan mejor los recursos disponibles.


LENGUAJE DE PROGRAMACIÓN
El programa contiene una descripción codificada del comportamiento deseado del computador.
Cada modelo de computador podrá utilizar una forma particular de codificación de
programas , que no coincidirá con la de otros modelos. La forma de codificar programas
de una máquina en particular se dice que es su código de máquina o lenguaje de
máquina. Los programas en código de máquina son extraordinariamente difíciles de leer
en persona. A la representación de un programa en código de máquina se le denomina
programa objeto o lenguaje objeto.

FIGURA 1.5 : Fragmento de programa en código de máquina.

Lenguaje de programación: Sirven para representar programas de manera simbólica en


forma de texto que puede ser leído con cierta facilidad por una persona. Los lenguajes
de programación son formas de representación prácticamente independientes de las
máquinas particulares donde se vayan a usar. A la representación de un programa en el
lenguaje simbólico se le denomina fuente o lenguaje fuente.

FIGURA 1.6 : Fragmento de programa en lenguaje C+/-.

COPILADORES E INTÉRPRETES
Un programa escrito en un lenguaje de programación simbólico puede ejecutarse en máquinas
muy diferentes. Pero para ello necesita de disponer de los mecanismos adecuados para
transformar ese programa simbólico en un programa en el lenguaje particular de cada máquina.

LP- LM1 PROGRAMA LP- LM2


LP
LP

PROGRAMA PROGRAMA
LM1
LM1 LM2
LM2

MÁQUINA 1 MÁQUINA 2
MÁQUINA 1 MÁQUINA 1
LM2 LM2
FIGURA 1.7 : Un programa en un lenguaje de programación simbólico ha de
adaptarse al lenguaje de cada máquina
Los procesadores de lenguaje son todos los programas que a través de una entrada escrita en
un lenguaje de programación pueden manipular herramientas de software y hardware de un
computador.
Compilador: Es un programa que traduce programas de un lenguaje de programación
simbólico a código de máquina. A la representación del programa en lenguaje simbólico
se le llama programa fuente, y su representación en código de máquina se le llama
programa objeto. Analógicamente al lenguaje simbólico y al lenguaje máquina se les
llama también lenguaje fuente y lenguaje objeto, respectivamente.

La ejecución de programa mediante un compilador exige, al menos, 2 etapas separadas.

COMPILADOR
PROGRAMA FUENTE PROGRAMA OBJETO
MÁQUINA
LF BASE LM
LM

PROGRAMA OBJETO
DATOS RESULTADOS
MÁQUINA
BASE
LM

FIGURA 1.8 : Proceso de un programa en lenguaje fuente (LF) mediante compilador.

ETAPA 1: Durante la primera etapa se traduce el programa simbólico a código de


máquina mediante el programa compilador. Esta operación solo se debe realizar una
vez, quedando el programa en código de máquina disponible para ser utilizado de forma
inmediata tantas veces como se desee.
ETAPA 2: En esta etapa se ejecuta ya directamente el programa en código de máquina,
y se procesan los datos y resultados particulares.

Intérprete: Programa que analiza directamente la descripción simbólica del programa


fuente y realiza las operaciones oportunas. El intérprete se limita a ejecutar
directamente el programa en la máquina base.
Ventajas: es más sencillo.
Inconvenientes: Velocidad de ejecución más lenta.
LF
PROGRAMA FUENTE

INTÉRPRETE
LM
MÁQUINA
DATOS RESULTADOS
BASE

FIGURA 1.10 : Proceso de un programa en lenguaje fuente (LF) mediante


intérprete.
MODELOS ABSTRACTOS DE CÓMPUTO
Existen muchos lenguajes de programación distintos que unas veces difieren en aspectos
generales y otras simplemente en detalles. Si de un conjunto de lenguajes de programación
similares extraemos los conceptos comunes, obtendremos un modelo abstracto o modelo de
programación.

Existen diversos modelos abstractos de cómputo, o modelos de programación. Entre ellos están:
La programación funcional.
La programación lógica.
La programación imperativa - Es el más extendido.
El modelo de flujos de datos.
La programación orientada a objetos (POO).

Un programa que resuelva un determinado problema puede adoptar diferentes formas muy
diferentes, dependiendo del modelo de cómputo que se utilice para desarrollarlo.

MODELO FUNCIONAL
Modelo basado en el empleo de funciones. Una función se refiere a una
regla/operación/aplicación que asigna a cada elemento de un primero conjunto
(argumento) un único elemento de un segundo conjunto (resultado).

3 4
6

En la imagen se muestra la relación entre un conjunto de polígonos y un conjunto de


números. A cada polígono le corresponde su número de lados.

De forma convencional, representaremos como f(x) al resultado que se obtendría al


aplicar la función f al argumento x. Por ejemplo:
FUNCIÓN RESULTADO
Suma (a, b) a+b
Diferencia (a, b) a-b
Producto (a, b) a*b

Para describir cómputos complejos, las funciones pueden combinarse unas con otras,
de manera que el resultado obtenido en una función se use como argumento para otra.

Ejemplo: El cómputo 34 x 5 + 8 x 7 lo podemos representar de manera funcional de la


siguiente forma:
Suma(Producto(34,5), Producto(8,7))

El proceso de cómputo, llamado reducción, se basa en reemplazar progresivamente


cada función por el resultado de la misma. Este sistema de evaluación por sustitución
es la base del llamado cálculo-λ. Aplicado al ejemplo se tendría:
CÓMPUTO PARCIAL EXPRESIÓN/RESULTADO
Suma(Producto(34,5), Producto(8,7))
34 x 5 Suma(170, Producto (8,7))
8x7 Suma(170, 56)
170+56 226

La programación funcional permite la definición por parte del programador de nuevas


funciones a partir de las ya existentes. De manera convencional se utiliza el símbolo ::=
para indicar la definición de una función. De esta forma podemos definir la función
cuadrado de un número basándonos en el uso del producto de dos números:

Cuadrado (x) ::= Producto (x, x)

Cuando en un cómputo intervienen funciones definidas, el procesamiento se sigue


haciendo por sustitución. El proceso llamado reescritura consiste en reemplazar una
función por su definición. Por ejemplo, para (5+3)2 tendríamos:

CÓMPUTO PARCIAL EXPRESIÓN/RESULTADO


Cuadrado(Suma (5,3))
Reducir Suma Cuadrado (8)
Reducir Cuadrado Producto(8,8)
Reducir Producto 64

MODELO DE FLUJO DE DATOS


En este modelo, un programa corresponde a una red de operadores interconectados
entre sí. Cada operador se representa gráficamente mediante un cuadrado con entradas
y salidas y, dentro de él el símbolo de la operación que realiza. Un operador espera a
tener valores presentes en sus entradas y, entonces, se activa él solo, consumiendo los
valores de las entradas, procesándolas y devolviendo el resultado a la salida. Después
de esto vuelve a esperar a que le lleguen nuevos valores por las entradas.

34
5 X
+
8 X
7

FIGURA 1.11 : Red de flujo de datos.

Por ejemplo, la expresión 34 x 5 + 8 x 7 puede ser calculada por la red de la figura 1.11.

El cómputo se realiza durante la evolución de la red, tal y como se indica en la figura


1.12. Cuando la evolución termina, el resultado está presente en la salida de la derecha.

Paso 1 Paso 2
170
X X
226
+ +
56
X X
FIGURA 1.11 : Evolución de la red de flujo de datos.
Una red de flujo de datos puede organizarse de manera que opere de forma iterativa,
obteniendo no ya un resultado sino una serie de ellos. Por ejemplo, la red de la figura
1.13 produce la serie de números naturales, a base de reciclar sobre sí mismo un
operador de incremento. Las líneas verticales representan operadores de duplicación o
mezcla de valores.

0 +1 1,2,3,4…

FIGURA 1.13 : Generación de una serie de números.

Esta red no termina nunca de evolucionar. Añadiendo operadores especiales de


bifurcación se puede conseguir que se detenga al llegar a un resultado adecuado.

MODELO DE PROGRAMACIÓN LÓGICA


Este modelo abstracto de cómputo corresponde plenamente a lo que se
denomina programación declarativa. Un programa consiste en plantear de
manera formal un problema base de declarar una serie de elementos conocidos
y luego preguntar por un resultado, dejando que sea la propia máquina la que
decida cómo obtenerlo. Los elementos conocidos que pueden declararse son
hechos y reglas.
Hecho: Relación entre objetos concretos.
Regla: Relación entre objetos que cumplen ciertas propiedades.

Para escribir un hecho, pondremos el nombre de la relación entre los objetos


relacionados entre paréntesis. Ejemplo:
Hijo (Juan, Luis)
Esto significa que juan es hijo de Luis. Si tenemos un árbol genealógico, podemos
declarar (prescindiendo del texto) los siguientes hechos:

HECHOS Luis Ana


Hijo (Felipe, Luis)
Hijo (Felipe, Ana)
Hijo (Juan, Luis)
Hijo (Juan, Ana) Felipe Juan Sonia
Hijo (Sonia, Luis)
Hijo (Sonia, Ana) FIGURA 1.14 : Árbol genealógico.

Para realizar una consulta, escribiremos el esquema de un hecho en el que alguno de


los elementos sea desconocido. Esto lo indicaremos usando nombres de incógnitas en
minúsculas (ya que los nombres de los elementos conocidos se habrían escrito en
mayúsculas). La consulta será respondida indicando todos los valores posibles que
puedan tomar las incógnitas. Ejemplo:

CONSULTA RESPUESTA
Hijo (x, Ana) x = Felipe
x = Juan
x = Sonia
La verdadera potencia de la programación lógica aparece cuando declaramos reglas. Al
realizar consultas basadas en reglas, la máquina realiza automáticamente las
deducciones necesarias para responderla. Para definir una regla se usa el símbolo :-

Ejemplo:
REGLAS
Padre(x, y) :- Hijo (y, x)
Hermano (x, y) :- Hijo (x, z), Hijo (y, z)

La primera regla se limita a nombrar la relación inversa de “Hijo”. La segunda expresa


que dos personas son hermanas si son hijas de un mismo padre o madre. Ahora pueden
realizarse consultas como las siguientes.

CONSULTA RESPUESTA
Padre (x, Sonia) x = Luis
x = Ana
Hermano (x, Felipe) x = Felipe
x = Juan
x = Sonia

La segunda consulta tiene una respuesta aparentemente errónea. Sin embargo, el error
radica en la formulación de la regla, ya que no se ha informado a la máquina que una
persona no se considera hermano de sí misma. Modificando la regla se obtendría la
respuesta deseada.

REGLAS
Hermano (x, y) :- Hijo (x, z), Hijo (y, z), ≠ (x, y)

CONSULTA RESPUESTA
Hermano (x, Felipe) x = Juan
x = Sonia

MODELO IMPERATIVO
El modelo de programación imperativa responde a la estructura interna habitual de un
computador, que se denomina arquitectura Von Neuman. El programa aparece como
una lista de instrucciones que han de ejecutarse una tras otra, en el orden en que
aparece en el programa.

El orden de ejecución puede alterarse en caso necesario mediante el uso de


instrucciones de control. Con ello se persigue ejecutar (o no), o repetir, determinadas
partes del programa dependiendo de ciertas condiciones en los datos.

Las instrucciones de un programa imperativo utilizan datos almacenados en la memoria


del computador. Esta capacidad de almacenamiento de valores se representa mediante
el uso de variables. Una variable representa un dato almacenado bajo un nombre dado.
Una variable contiene un valor que puede ser usado o modificado tantas veces como se
desee.

Un programa imperativo se plantea como el cálculo o modificación de sucesivos valores


hasta obtener el resultado final. En los lenguajes de programación simbólicos, las
instrucciones u órdenes se denominan sentencias. Las sentencias típicas de un programa
imperativo son las de asignación, que consisten en obtener un resultado parcial
mediante un cálculo elemental que puede ser realizado por la máquina, y que se
almacena en una variable para ser utilizado posteriormente.
En C +/- y otros lenguajes similares, la sentencia de asignación se representa de la
siguiente forma:

Variable = expresión

La parte derecha es una expresión aritmética que puede usar variables o valores
constantes, así como operadores que estén definidos en el lenguaje (suma, resta, etc.).
Una sentencia de asignación representa un orden de calcular el resultado de la
expresión y luego almacenar dicho resultado como un nuevo valor de la variable.

Ejemplo:
Usando sólo expresiones simples y variables auxiliares, podremos expresar el cálculo de
34 x 5 + 8 x 7
Mediante las sentencias siguientes:
1. a= 34 x 5
2. b= 8 x 7
3. c= a+ b
que obtendrán el resultado final en la variable c.

ELEMENTOS DE LA PROGRAMACIÓN IMPERATIVA

PROCESADOR, ENTORNO, ACCIONES


Definimos como procesador a todo agente capaz de entender las órdenes del programa
y ejecutarlas. Es esencialmente un elemento de control. Para ejecutar las instrucciones
empleará los recursos necesarios, que formará parte del sistema en el cual se ejecute el
programa (ejemplo: Dispositivos de almacenamiento, dispositivos de entrada-salida…),
esto se denomina entorno. Las ordenes o instrucciones del programa se definen
determinadas acciones que deben ser realizadas por el procesador.

ACCIONES PRIMITIVAS. ACCIONES COMPUESTAS

ACCIONES PRIMITIVAS ACCIONES PRIMITIVAS

Aquellas que son directamente Consiste en abstraer un


realizables por el procesador. fragmento de programa más o
Suelen ser bastantes sencillas. menos largo que realiza una
Debido a su gran nivel de detalle, operación bien definida. La
es tedioso y complejo entender un descripción de un programa en
programa descrito enteramente a acciones compuestas es útil para
base de acciones primitivas. facilitar su compresión.
ESQUEMA DE ACCIONES
La manera en la que varias acciones sencillas se combinan para realizar una acción
complicada se denomina esquema de la acción compuesta. Una buena metodología de
programación exige usar esquemas sencillos y fáciles de entender a la hora de
desarrollar acciones compuestas.

La llamada programación estructurada sugiere el uso de 3 estructuras lógicas:

Secuencias Selección Iteración


Con estas tres estructuras se puede llegar a desarrollar de forma comprensible un
programa complicado que sea necesario.

EVOLUCIÓN DE LA PROGRAMACIÓN

EVOLUCIÓN COMPARATIVA HARDWARE/ SOFTWARE


Los primeros computadores eran máquinas extraordinariamente costosas y con una
capacidad muy limitada. Como consecuencia de ello, la finalidad principal de la
programación era obtener el máximo rendimiento de los computadores. Los programas
se escribían directamente en el lenguaje de la máquina. No existían ideas abstractas
sobre el significado u objetivo preciso de un programa. La programación era, por tanto,
una labor artesanal, basada en la habilidad del programador para conseguir que el
programa cumpliera con esos objetivos de eficiencia.

El coste de desarrollo del software era muy inferior al del hardware. Los avances en la
tecnología electrónica han ido suministrando computadores cada vez más capaces y
baratos. La necesidad de preparar programas muy eficientes ha ido disminuyendo. La
mayor capacidad de los computadores ha permitido abordar aplicaciones cada vez más
complejas.

En la actualidad el coste de desarrollo del software supera ampliamente al coste de los


equipos hardware utilizados. Ya no tiene sentido dedicar un gran esfuerzo a conseguir
programas eficientes. Es más barato desarrollar programas relativamente más simples,
aunque no aprovechen muy bien los recursos de la máquina, y comprar un computador
con mayor potencia de proceso que compense esa posible falta de eficiencia.

NECESIDAD DE METODOLOGÍA Y BUENAS PRÁCTICAS


Los programas actuales son tan complicados que ya no es posible desarrollarlos de una
manera artesanal. Es necesario aplicar técnicas de desarrollo muy precisas para
controlar el resultado. Estas técnicas aplicables a proyectos desarrollados en equipo
constituyen la ingeniería de software. A nivel individual hay que promover una
metodología de programación apropiada, que satisfaga los objetivos de corrección y
claridad.
Para grandes aplicaciones en las que intervienen cientos de ingenieros es
absolutamente necesario emplear técnicas de ingeniería de software basadas en las
buenas prácticas. Las buenas prácticas son un conjunto de normas, basadas en la
experiencia de desarrollos anteriores, que se autoimponen todos los miembros de un
equipo. El Manual de Estilo es el documento que compendia el conjunto de buenas
prácticas que todos los miembros del equipo deben observar durante el desarrollo de
una aplicación compleja.

También podría gustarte