Está en la página 1de 17

T1.

Introducción al desarrollo del software DAW 2022/2023

T1. Introducción al desarrollo del software

Contenido

1 Introducción. Primeros conceptos..............................................................................................................1

1.1 Estructura jerárquica del computador. Visión multinivel de un computador.....................................2


1.2 Pasar de un nivel superior (L2) a nivel inferior (L1).............................................................................2
1.3 Organización funcional.......................................................................................................................3
1.4 Unidad de Control. EL intérprete de la máquina................................................................................3

2 Lenguajes de programación........................................................................................................................5

2.1 Clasificación y características..............................................................................................................5

2.1.1 Según el nivel de abstracción......................................................................................................6


2.1.2 Según la forma de ejecución.......................................................................................................8
2.1.3 Según el paradigma de programación......................................................................................10

3 Obtención de código ejecutable...............................................................................................................11

3.1 Transformación de código fuente en un lenguaje compilado...........................................................12


3.2 Transformación de código fuente en un lenguaje interpretado.......................................................13
3.3 Compilación......................................................................................................................................13

3.3.1 Fases de la compilación:...........................................................................................................14

1 Introducción. Primeros conceptos.

Se define un sistema informático como el conjunto de elementos que permiten procesar información por
medio de ordenadores, cuya finalidad es obtener nueva información a partir de la ya existente. Los
elementos que compone un sistema informático son:
 Hardware: es el conjunto de todos los elementos físicos que compone el ordenador. Informalmente
se trata de todas las partes del ordenador que pueden ser tocadas con las manos: procesador,
memoria, periféricos, placas, buses, circuitos, etc.
 Software: El software es:

Página 1 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

o instrucciones (programa), que cuando se ejecutan proporcionan la funcionalidad y


rendimiento deseados,
o estructuras de Datos, que permiten a los programas manipular adecuadamente la
información, y
o documentos que describen la operación y uso de los programas.
 Usuario: no podemos olvidar que un sistema informático necesita de nuestra intervención para la
organización y planificación de las tareas.
Ejemplo: un sistema de contabilidad.

1.1 Estructura jerárquica del computador. Visión multinivel de un computador

Los sistemas informáticos son complejos  Se diseñan, estudian y organizan por niveles
Cada nivel se construye con componentes (instrucciones o servicios) proporcionados por el nivel inferior y
proporciona nuevos componentes más complejos al nivel superior.
 Usuario final (no programa)
 Nivel 6 – Aplicaciones dedicadas
 Traducidos (bases datos, juegos…)
 Nivel 5 – Lenguajes evolucionados
 Traducidos (compiladores)
 Nivel 4 – Lenguaje ensamblador
 Traducidos (prog. Ensamblador)
 Nivel 3 – Núcleo del Sistema Operativo
 Interpr. Parcial (programa del S.O.)
 Nivel 2 – Lenguaje máquina (convencional)
 Interpr. Microprograma intérprete
 Nivel 1 – Hardware / circuitos digitales
 La UC es el intérprete, ejecuta sobre la UP las instrucciones de LM

1.2 Pasar de un nivel superior (L2) a nivel inferior (L1)

 Por TRADUCCION: Un programa traductor ejecutándose en el nivel 1 transforma sentencias de L2 en


una o más –equivalentes- de L1. Luego se ejecuta el programa transformado directamente en L1.
o Una traducción -> N ejecuciones Lenguaje L2
o 2 versiones del mismo algoritmo (L1 y L2)
Lenguaje L1
Hardware Página 2 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

 Por INTERPRETACION: Un programa intérprete ejecutándose en el nivel L1 busca, decodifica y


ejecuta las sentencias de L2.
o Cada reejecución del programa L2 -> nueva interpretación

1.3 Organización funcional

 Elementos fundamentales
o Unidades funcionales
o Jerarquía de almacenes
o Unidad de control
 Organización de referencia para el curso:
o PC de sobremesa.

1.4 Unidad de Control. EL intérprete de la máquina

Begin ciclo de ejecución de instrucción La señal de reloj:


Mientras que no halt { señal periódica que distribuida por un
Leer instrucción de memoria; circuito asegura que todos los
PC = PC + tamaño_siguiente_instruccion; elementos de memoria cambian de
Decodificar instrucción; estado al mismo tiempo
[calcular direcciones de los operandos]
Lectura operandos (escritura en almacenes de entrada);
Ejecutar;
[Escribir resultados en almacenes de salida;]
}
End ciclo de ejecución de instrucción
Ejecutar begin
caso {
instrucción aritmético-lógica: activar unidades funcionales;
instrucción de salto:

Página 3 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

si (condición) {
Calcular dirección destino de salto;
PC = dirección destino de salto;
}
End ejecutar

Un programa informático es un conjunto de datos e instrucciones que se ejecutan de manera secuencial con
el objetivo de realizar una o varias tareas en un sistema informático.
Un programa informático es creado por un programador en un lenguaje determinado, que será compilado y
ejecutado por un sistema. Cuando un programa es llamado para ser ejecutado, el procesador ejecuta el
código compilado del programa instrucción por instrucción.
Haciendo un abuso del lenguaje, podemos decir que un programa informático es software, pero no sería del
todo correcto, ya que software comprende un conjunto de programas.
Según su función se distinguen tres tipos de software:
 Software de sistema: conjunto de programas escritos para servir a otros programas. El sistema
operativo, es un software de sistema, es el encargado de controlar y gestionar el hardware, así como
de gestionar el software de aplicación. Ejemplo, un sistema operativo como Ubuntu.
 Software de programación: es el conjunto de herramientas que nos permiten desarrollar programas
informáticos (Compiladores, editores, Gestores de Archivos...ahora integrados en IDEs).
 Software de aplicación: incorporará las librerías necesarias para entenderse con el sistema
operativo, y éste a su vez sería el que se comunicase con el hardware. Como ejemplo podemos
destacar los navegadores como Mozilla Firefox.
En informática una máquina virtual es un software que emula a un ordenador y puede ejecutar programas
como si fuese una computadora real. Este software en un principio fue definido como "un duplicado
eficiente y aislado de una máquina física".
Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están limitados por
los recursos y abstracciones proporcionados por ellas. Estos procesos no pueden escaparse de esta
"computadora virtual".
Uno de los usos domésticos más extendidos de las máquinas virtuales es ejecutar sistemas operativos para
"probarlos". De esta forma podemos ejecutar un sistema operativo que queramos probar (GNU/Linux, por
ejemplo) desde nuestro sistema operativo habitual (Mac OS X por ejemplo) sin necesidad de instalarlo
directamente en nuestra computadora y sin miedo a que se desconfigure el sistema operativo primario.

Página 4 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

2 Lenguajes de programación.

Un lenguaje de programación es un conjunto de instrucciones, operadores y reglas de sintaxis y semánticas,


que se ponen a disposición del programador para que éste pueda comunicarse con los dispositivos de
hardware y software existentes.
En un principio, todos los programas eran creados por el único código que el ordenador era capaz de
entender: el código máquina, un conjunto de 0s y 1s de grandes proporciones. Este método de
programación, aunque absolutamente efectivo y sin restricciones, convertía la tarea de la programación en
una labor sumamente tediosa, hasta que se tomó la solución de establecer un nombre para las secuencias
de programación más frecuentes, estableciéndolas en posiciones de memoria concretas. A cada una de estas
secuencias nominadas se las llamó instrucciones, y al conjunto de dichas instrucciones, lenguaje
ensamblador.
Más adelante, empezaron a usar los ordenadores científicos de otras ramas, con muchos conocimientos de
física o química, pero sin nociones de informática, por lo que les era sumamente complicado el uso del
lenguaje ensamblador; como un modo de facilitar la tarea de programar, y no como un modo de facilitar el
trabajo al programador informático, nace el concepto de lenguaje de alto nivel con FORTRAN como primer
debutante.
Los lenguajes de alto nivel son aquellos que elevan la abstracción del código máquina lo más posible, para
que programar sea una tarea más liviana, entendible e intuitiva. No obstante, nunca hay que olvidar que,
usemos el lenguaje que usemos, el compilador hará que de nuestro código solo lleguen 1s y 0s a la máquina.
Aunque muchas veces se usan los términos 'lenguaje de programación' y 'lenguaje informático' como si
fuesen sinónimos, no es del todo correcto, ya que los lenguajes informáticos engloban a los lenguajes de
programación y a otros más, como por ejemplo HTML que es un lenguaje de marcas de páginas web.
Un lenguaje de programación permite especificar de manera precisa sobre qué datos debe operar un
ordenador, cómo estos datos deben ser almacenados o transmitidos y qué acciones debe tomar bajo una
variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo
al lenguaje humano o natural.

2.1 Clasificación y características.


La cantidad de lenguajes de programación es elevada, aunque cada uno de ellos tiene unas características y
objetivos determinados. Es necesario, en función de sus características principales, establecer una
clasificación de los mismos:
1) Según el nivel de abstracción
2) Según la forma de ejecución

Página 5 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

3) Según el paradigma de programación

Página 6 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

2.1.1 Según el nivel de abstracción.

El nivel de abstracción es el modo en que los lenguajes se alejan del lenguaje máquina y se acercan cada vez
más a un lenguaje similar a los que utilizamos diariamente para comunicarnos. Cuando más alejado esté del
lenguaje máquina, de mayor nivel será el lenguaje.

Lenguajes bajo nivel.

Primera generación: Sólo hay un lenguaje de primera generación: el lenguaje máquina. Los lenguajes de
máquina están escritos en código máquina, directamente inteligibles por el ordenador, siendo sus
instrucciones cadenas binarias (0 y 1) que conforman operaciones que el ordenador puede entender sin
interpretación alguna.
La programación en un lenguaje de bajo nivel tiene como ventajas una mayor adaptación al equipo, además
de la posibilidad de obtener la máxima velocidad con el mínimo uso de memoria.
Sin embargo, tiene importantes inconvenientes, como la imposibilidad de escribir código independiente de
la máquina y la mayor dificultad en la programación y en la comprensión de los programas.

Lenguajes de medio nivel.

Segunda generación: los lenguajes de segunda generación, en lugar de unos y ceros, se programa usando
unas instrucciones para realizar operaciones sencillas con datos simples o posiciones de memoria. El
principal es el lenguaje ensamblador. Para su ejecución necesita su traducción al lenguaje máquina.

Lenguajes de alto nivel.

Los lenguajes de programación de alto nivel se caracterizan por expresar los algoritmos de una manera
adecuada a la capacidad cognitiva humana, en lugar de estar orientados a su ejecución en las máquinas.
Tercera generación: la gran mayoría de los lenguajes de programación que se utilizan hoy en día pertenecen
a este nivel de abstracción. En su mayoría, los lenguajes del paradigma de programación orientada a objetos
son lenguajes de propósito general que permiten un alto nivel de abstracción y una forma de programas
mucho más entendible e intuitiva.
Ejemplos: C++, COBOL, Fortran, Java, PHP, PL/SQL,…
Cuarta generación: son lenguajes creados con un propósito específico, al ser un lenguaje tan específico
permite reducir la cantidad de líneas de código que tendríamos que hacer con otros lenguajes de tercera
generación mediante procedimientos específicos (SQL para BDD, HTML para visualización de páginas,
maple...). Por ejemplo, si tenemos que resolver una ecuación en un lenguaje de tercera generación,
tendríamos que crear complejos métodos para resolverla, mientras que un lenguaje de cuarta generación
como Maple, nos resuelve este problema con solo introducir la ecuación.

Página 7 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

Quinta generación: también llamados lenguajes naturales, pretenden abstraer más aún el lenguaje
utilizando un lenguaje natural con una base de conocimientos que produce un sistema basado en el
conocimiento. Este tipo de lenguajes los podemos encontrar frecuentemente en inteligencia artificial y lógica
(LISP, PROLOG, etc.).

Lenguaje de programación Ventajas Desventajas


Primera Generación Transferir un programa a la memoria Dificultad y lentitud den la
sin traducción posterior, esto le da una codificación. Poca fiabilidad y los
velocidad de ejecución superior. programas sólo son ejecutables en
CPU

Segunda Generación Uso óptimo de los recursos hardware, Repertorio reducido de


permitiendo la obtención de un código instrucciones, rígido formato para
muy eficiente. las instrucciones, baja portabilidad
y fuerte dependencia del
hardware.
Tercera Generación Estandarización, volumen de código y Apenas son portables y.
rendimiento de ejecución normalmente, son menos fáciles
de mantener que los lenguajes de
propósito general.

Cuarta Generación Flexibilidad, nuevas aplicaciones y Código ineficiente y el


conversión de código. mantenimiento cuestionable

Quinta Generación Mayor legibilidad de los programas, Lógica difusa.


portabilidad, facilidad de aprendizaje y
facilidad de modificación.

Página 8 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

2.1.2 Según la forma de ejecución

Dependiendo de cómo un programa se ejecute dentro de un sistema, se puede distinguir tres categorías de
lenguajes:
a) Lenguajes compilados: Antes de poder utilizarse el programa debe utilizarse un traductor
llamado “compilador” que se encarga de traducir (“compilar”) el programa original (“código
fuente”) en código objeto y otro programa (“enlazador” o “linkador”) que unirá el código objeto
del programa con el código objeto de las librerías necesarias producir el programa ejecutable.
Los programas ejecutables están en binario y son los únicos necesarios para el funcionamiento
del programa. Ejemplo: Visual Studio de Microsoft.

b) Lenguajes interpretados: ejecutan las instrucciones directamente, sin que se genere código
objeto, para ello es necesario un programa intérprete en el sistema operativo o en la propia
máquina donde cada instrucción es interpretada y ejecutada de manera independiente y
secuencial. Así, cada vez que se usa el programa debe utilizarse un traductor llamado
“intérprete” que se encarga de traducir (“interpretar”), sin generar código objeto, las
instrucciones del programa original (“código fuente”) a código máquina según van siendo
utilizadas. Para el funcionamiento del programa siempre es necesario disponer del código
original y del intérprete.
La principal ventaja con respecto al lenguaje compilador es que ser traducen a tiempo real solo
las instrucciones que se utilicen en cada ejecución, en vez de interpretar todo el código, se vaya
a utilizar o no.

Página 9 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

c) Lenguajes mixtos o virtuales: tienen un funcionamiento muy similar al de los lenguajes


compilados, pero, a diferencia de éstos, no es código objeto lo que genera el compilador, sino un
código intermedio (bytecode en java) que puede ser interpretado por cualquier arquitectura que
tenga la máquina virtual que se encargará de interpretar el código bytecode generado para
ejecutarlo en la máquina.
Diferencias entre lenguajes compilados e interpretados:
o Los lenguajes interpretados son interpretados, valga la redundancia, cada vez que se ejecutan y
necesitan siempre del intérprete.
o Los compiladores analizan todo el programa y no generan resultados si no es correcto todo el
código. Los intérpretes analizan las instrucciones según las necesitan y pueden iniciar la
ejecución de un programa con errores e incluso terminar correctamente una ejecución de un
programa con errores siempre que no haya sido necesario el uso de las instrucciones que
contienen dichos errores.
o Un compilador traduce cada instrucción una sola vez. Un intérprete debe traducir una
instrucción cada vez que la encuentra.
o Los binarios son compilados para una arquitectura específica y no pueden ser utilizados en otras
arquitecturas no compatibles (deben existir distintos compiladores para generar binarios para
diferentes arquitecturas y Sistemas Operativos). Un lenguaje interpretado puede ser utilizado en
cualquier arquitectura que disponga de un intérprete sin necesidad de cambios.
o Los lenguajes compilados son más eficientes que los interpretados y además permiten distribuir
el programa en forma confidencial mediante binarios. Siempre se pueden decompilar. La
confidencialidad solo se logra mediante el cifrado criptográfico del código.
o Es más sencillo empaquetar lenguajes interpretados dentro de otros lenguajes, como JavaScript
dentro de HTML.
NOTA: Para obtener las ventajas de ambos tipos de lenguajes, algunos utilizan una aproximación en dos
fases. Primero el programa original (código fuente) es precompilado a un binario confidencial, portable e
interpretable. En una segunda fase el binario precompilado es interpretado en cada arquitectura. Esta
aproximación es la que realiza por ejemplo Java.
Hay que hacer notar que algunas aplicaciones permiten ser programadas con lenguajes. Estos lenguajes no
tienen por objeto solicitar acciones al ordenador sino solicitar acciones a la aplicación sobre la que se
ejecutan. Por tanto, aunque algunos de estos lenguajes son lenguajes de programación, no son lenguajes de
programación de ordenadores y por tanto no necesitan ser traducidos a código máquina.

Página 10 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

Es el caso por ejemplo de SQL, un lenguaje declarativo de cuarta generación diseñado para trabajar con
bases de datos. Este lenguaje SQL es interpretado por el motor de la Base de Datos, no por la CPU.

2.1.3 Según el paradigma de programación

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


software, un estilo de programación que facilita la tarea de programación o añade mayor funcionalidad al
programa dependiendo del problema que haya que abordar. Si bien puede seleccionarse la forma pura de
estos paradigmas a la hora de programar, en la práctica es habitual que se mezclen, dando lugar a la
programación multiparadigma.
Los principales son:
a) paradigma estructurado: lo usan lenguajes de programación que se basan en la programación
estructurada, la cual se define como una técnica para escribir lenguajes de programación que
permite sólo el uso de tres tipos de sentencias o estructuras de control:
1) Sentencias secuenciales
2) Sentencias selectivas (condicionales)
3) Sentencias repetitivas (iteraciones o bucles)
Ventajas Inconvenientes
- Los programas son fáciles de leer, sencillos y -Todo el programa se concentrar en un único
rápidos. bloque.
- El mantenimiento de los programas es sencillo. -No permite reutilización eficaz del código.
- La estructura del programa es sencilla y clara.

Ejemplos: Pascal, C, Fortran


b) paradigma orientado a objetos: estos lenguajes tratan a los programas no como un conjunto
ordenado de instrucciones, sino como un conjunto de objetos que colaborar entre ellos para realizar
acciones.
Los programas se componen de objetos independientes entre sí que colaborar para realizar
acciones. Los objetos son reutilizables para proyectos futuros.
Ejemplos: Ada, C++, VB.NET, Delphi, Java, …
c) paradigma imperativo: describe la programación como una secuencia de instrucciones que cambian
el estado del programa, indicando como realizar una tarea.
d) Paradigma declarativo: especifica o declara un conjunto de premisas y condiciones para indicar qué
es lo que hay que hacer y no necesariamente cómo hay que hacerlo.

Página 11 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

e) paradigma procedimental, en el cual, el programa se divide en partes más pequeñas, llamadas


funciones y procedimientos, que pueden comunicarse entre sí. Permite reutilizar el código ya
programado.

Página 12 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

3 Obtención de código ejecutable.

Nuestro programa, esté programado en el lenguaje que esté y se quiera ejecutar en la arquitectura que sea,
necesita ser traducido para poder ser ejecutado (con la excepción del lenguaje máquina).
Por ello, deberemos definir los distintos tipos de código por los que pasará nuestro programa antes de ser
ejecutado por el sistema.
 El código fuente de un programa informático (o software) es un conjunto instrucciones escritas en
un lenguaje de programación determinado e indica lo que debe realizar el ordenador para ejecutar
dicho programa. Por tanto, en el código fuente de un programa describe por completo su
funcionamiento.
El código fuente de un programa está escrito por un programador en algún lenguaje de
programación, pero en este primer estado no es directamente ejecutable por la computadora, sino
que debe ser traducido a otro lenguaje (el lenguaje máquina o código objeto) que sí pueda ser
ejecutado por el hardware de la computadora. Para esta traducción se usan los llamados
compiladores, ensambladores, intérpretes y otros sistemas de traducción.
 El código objeto al código que resulta de la compilación del código fuente. Consiste en lenguaje
máquina y se distribuye en varios archivos que corresponden a cada código fuente compilado. Para
obtener un programa ejecutable se han de enlazar todos los archivos de código objeto con un
programa llamado enlazador (linker).
 El código ejecutable, Este código ya es nuestro programa ejecutable, programa que se ejecutará
directamente en nuestro sistema o sobre una máquina virtual en el caso de los lenguajes de
programación virtuales.
Tradicionalmente, el código ejecutable es un archivo binario cuyo contenido se interpreta por el
ordenador como un programa, pero generalmente, contiene instrucciones en código máquina de un
procesador en concreto y código intermedio que requiere un intérprete para ejecutarlo. Además,
suele contener llamadas a funciones específicas de un sistema operativo.
Dependiendo del tipo de que se traten las instrucciones, hablaremos de ejecutables portables (se
pueden ejecutar en varias plataformas) y no portables (destinado a una plataforma concreta). Por
ejemplo, un ejecutable Java es portable ya que utiliza un código intermedio no asociado a un
procesador en concreto.
Sin embargo, en un sentido más general, un programa ejecutable no tiene por qué necesariamente
contener código de máquina, sino que puede tener instrucciones a interpretar por otro programa.
Este tipo de ejecutables son conocidos con el nombre de scripts.

Página 13 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

Determinar si un archivo es ejecutable es sobre todo una cuestión de convención. Unos sistemas
operativos se basan en la extensión de archivo (como la terminación .exe) y otros lo hacen leyendo
los metadatos (como los bits de permiso de ejecución en Unix).
En la mayoría de los sistemas modernos, un archivo ejecutable contiene mucha información que no
es parte del programa en sí; recursos como textos e imágenes, requisitos del entorno de ejecución,
información simbólica y de depuración, u otra información que ayude al sistema operativo a ejecutar
el programa.

3.1 Transformación de código fuente en un lenguaje compilado

Página 14 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

3.2 Transformación de código fuente en un lenguaje interpretado

3.3 Compilación
El proceso para la obtención del código ejecutable del programa se lleva a cabo mediante dos programas: el
compilador y el enlazador. Mientras que el enlazador solamente une el código objeto con las librerías, el
trabajo del compilador es mucho más completo.
Al proceso completo se le conoce con el nombre de compilación.

Página 15 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

3.3.1 Fases de la compilación:

I. Análisis lexicográfico: se leen de manera secuencial todos los caracteres del código fuente,
buscando palabras reservadas, operaciones, caracteres de puntuación y agrupándolos todos en
cadenas de caracteres que se denominan lexemas.
II. Análisis sintáctico-semántico: agrupa todos los componentes léxicos estudiados en la fase anterior
en forma de frases gramaticales, revisando la coherencia de las mismas.
III. Generación de código intermedio: una vez finalizado el análisis, se genera una representación
intermedia a modo de pseudocódigo con el objetivo de facilitar la tarea de traducir al código objeto.
IV. Optimización de código: revisa el código pseudocódigo generado en el paso anterior optimizándolo
para que el código resultante sea más fácil y rápido de interpretar por la máquina.
V. Generación de código: genera el código objeto de nuestro programa en un código de lenguaje
máquina relocalizable, con diversas posiciones de memoria sin establecer, ya que no sabemos en
qué parte de la memoria volátil se va a ejecutar nuestro programa.
VI. Enlazador de librerías: se enlaza el código objeto con las librerías necesarias, produciendo en último
término el código ejecutable. Características:
a. No cambia de nivel (no traduce ni interpreta).
b. Más rápido que el ensamblador, lo que facilita la programación modular.
c. Reubicación (si se juntan varios módulos) dir. reubicada = dir. reubicable + DESPLAZ.
d. Resolución referencias externas y creación de fichero cargable, con información añadida de
reubicación para el cargador.

Página 16 de 17
T1. Introducción al desarrollo del software DAW 2022/2023

Página 17 de 17

También podría gustarte