C +-

0 Prólogo: 

Este  manifiesto introduce progresiva, ordenada y metodológicamente al lenguaje C+-, diseñado para la enseñanza de computación de ordenadores.

1 Introducción.

1.1 Máquinas y programas 

Máquina es un dispositivo físico capaz de realizar un trabajo, con mayor o menor intervención del hombre. 

1.1.1 También lo son las máquinas virtuales.

Podemos establecer una serie de ejemplos:      

  a.- Piano: máquina manual con la que se puede producir música.

  b.- Caja de música: máquina automática de producir música.

  c.- Reproductor de CD; máquina programable para producir música.

 1.1.2 Máquinas programables:  

     Conceptos de cómputo y de computador:

  .- Cómputo es una operación que "trata" una información.

  .- Un computador es una máquina para realizar cómputos.


1.3 Programación e ingeniería de software. 

Para tratar una  información con un computador  requiere:

a. Un computador (hardware).

b. Un programa (software)

c. Ejecutar el programa en el computador. 

Sólo la última fase (c) es habitualmente realizada por el usuario. Las dos primeras son realizadas por los profesionales de la informática: la fase (a) a los fabricantes de hardware y la (b) a los de software.

     1.3.1 Desarrollar programas se denomina programar, (programas en pequeña escala) o realizadas por una sola persona. Las técnicas para desarrollo de software a gran escala constituyen la ingeniería de software.

     1.3.2 Propiedades de la programación 

La programación exige, en éste orden:

    Fiabilidad al comportamiento esperado.

    Claridad: fácil de entender por terceras personas.

    Eficiencia: en tiempo y memoria.

     1.3.3 Lenguajes de programación. 

Un computador requiere un programa.

La programación de código para una máquina se llama código fuente, (o código máquina o lenguaje máquina).

Un programa codificado en el lenguaje para un modelo de máquina no podrá ser ejecutado, en general, en otro modelo distinto. Si queremos que un programa funcione en diferentes modelos de  máquinas tendremos que preparar versiones particulares en el lenguaje máquina para cada una de ellas. Con ello se multiplica el coste del desarrollo.

Por otra parte, los programas en código máquina. son extraordinariamente difíciles de leer por una persona. Normalmente contienen códigos alfanuméricos sin ningún sentido nemotécnico, y compuestos por millones de operaciones elementales muy sencillas, que pueden realizar los tratamientos complejos habituales.

A nivel máquina, un programa y los datos se codifican en binario: lenguaje máquina. Ejemplo: Multiplicar unos ciertos valores en memoria. 

 Código de posición de memoria de la operación sobre la que trabaja 

    10111100 00100100     cargar el valor que está en 24h 

    10111111 00110011     multiplicar por el valor que está en 33h

    11001110 00111100     almacenar el resultado en 3Ch

                            Figura 1.1.-  Fragmento de programa en código máquina.

En particular se representan programas de manera "simbólica", en forma de un texto, que puede ser leído con relativa facilidad por una persona experta:

Los lenguajes de alto nivel contienen una instrucción como la del ejemplo anterior:

                                 c <-- a*b

se denominan imperativos, aunque existen otros modelos como los lógicos y funcionales (LTPP).

Figura 1.2 Fragmento de programa en lenguaje simbólico, cercano al humano.

Un programa escrito en un lenguaje simbólico, puede ser ejecutado en máquinas diferentes. Pero se necesita transformar ese programa simbólico al lenguaje de cada máquina.

1.4 Compiladores e Intérpretes 

Existen dos maneras de traducir un programa escrito en un lenguaje de alto nivel a lenguaje máquina: la interpretación y la compilación.

 • En la interpretación se traduce a lenguaje máquina cada instrucción del lenguaje de alto nivel, una a una, en tiempo de ejecución.

 • En la compilación se traducen (compilan) por medio de un programa (compilador) todas las instrucciones del lenguaje a lenguaje máquina, previamente a su ejecución.

1.5  Modelos abstractos de cómputo 

Si de un conjunto de lenguajes de programación basados en elementos computacionales similares extraemos los conceptos comunes, obtendremos un modelo abstracto de cómputo. Este modelo abstracto recoge los elementos básicos y formas de combinación de una manera abstracta, prescindiendo de la notación concreta usada en cada lenguaje de programación para representarlos. 

Existen diversos modelos de programación que subyacen en los lenguajes de programación actuales. Todos estos modelos son modelos universales, en el sentido de que pueden utilizarse para describir cualquier cómputo intuitivamente posible. Es semejante al lenguaje humano: existen ideas o conceptos comunes, universales, que se expresan en los diversos lenguajes con palabras distintas.

     1.5.1 Modelo funcional, o modelo de programación funcional, se basa casi exclusivamente en el empleo de funciones. El concepto de función se corresponde aquí con el concepto de función en matemáticas. Una función es una aplicación, que hace corresponder un elemento de un conjunto de destino (resultado) a cada elemento de un conjunto de partida (argumento) para el que la función esté definida. 

Por ejemplo, la operación de suma de números enteros es una función en que el conjunto de partida es el de las parejas de números enteros y el de destino es el conjunto de los números enteros. A cada pareja de enteros se le hace corresponder un entero, que es su suma. 

De forma convencional, representaremos como f(x) al resultado que se obtendrá al aplicar la función f al argumento x. Por ejemplo, podemos suponer definidas las funciones de suma, resta y producto de la forma: 

Función Suma ( a, b ), Diferencia ( a, b ), Producto ( a, b ), Resultado a+b, a - b, a x 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. De esta manera un cómputo tal como 34x5+8x7 puede representarse de manera funcional de la forma Suma( Producto( 34, 5 ), Producto( 8, 7 ) ) Este es el aspecto que tiene un programa funcional, que será siempre en último extremo una aplicación de una función a unos instrumentos, para obtener tal resultado. Es 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-A. 

Aplicado al ejemplo se tendría:

Cómputo parcial.     Expresión / Resultado

34 x 5

Suma( Producto( 34, 5), Producto( 8, 7) )

Suma( 170, Producto( 8, 7) )

8 x 7

170 + 56

Suma( 170, 56 )

226

     1.5.2 Modelo de flujo de datos 

     1.5.3 Modelo de programación lógica . 

     1.5.4 Modelo imperativo. 

l.6 Elementos de la programación imperativa. 

     1.6.1 Procesador, entorno, acciones . 

     1.6.2 Acciones primitivas. Acciones compuestas 

     1.6.3 Esquemas de acciones 

1.7 Evolución de la programación 

     1.7.1 Evolución comparativa. Hardware/Software 

     1.7.2 Necesidad de metodología y buenas prácticas

Comentarios

Entradas populares de este blog

Notación BNF