QUE
ES UN PROGRAMA DE COMPUTADORA.
El software, o programas de
computadora, sin dudas es el elemento más importante de la PC, ya que si él
sería imposible sacarle algún provecho a una computadora personal.
¿Qué es un programa de
computadora?
Básicamente, un programa de
computadora, aplicación o software, como también son llamados, son un conjunto
de instrucciones en forma secuencial, llamado código, que a través de su
interpretación por el sistema operativo o hardware, le permiten desarrollar una
acción específica a una computadora.
Allá por los albores de la
computación, los programadores cargaban estas instrucciones directamente la
hardware, lo que afortunadamente cambio gracias a los llamados lenguajes de
programación, otro tipo de programa de computadora que simplifican esta tarea
mediante la incorporación en sus comandos de ciertas secuencias y herramientas
para que el programador no tenga que hacerse problemas con los procesos más
oscuros del hardware como el direccionamiento de memoria, las entradas o salidas
de datos y las peticiones de interrupción IRQ, entre otros.
Que es un programa de
computadora
Antes de poder llegar a
nuestra mesa, un programa de computadoras debe ser primero escrito en un
lenguaje de programación y luego compilado para lograr un ejecutable que
nosotros podamos correr en nuestra computadora.
Este proceso de compilación es
absolutamente necesario, ya que sin ello, el hardware de la PC jamás podría
interpretarlo, es decir ejecutarlo. El proceso de compilación básicamente es
una traducción de un lenguaje de programación de alto nivel, código fuente, a
usualmente lenguaje de máquina, un código intermedio (bytecode) o texto el cual
sí puede ser interpretado por el hardware.
Por regla general, el usuario
solo puede acceder a la versión terminada de un software o programa de
computadoras, es decir, el ejecutable del mismo. Pero afortunadamente algunos
movimientos como el del Open Source también distribuyen el código fuente del
programa para que todos los que poseen el suficiente conocimiento puedan
modificarlo y adaptarlo a sus propias necesidades.
Que es un programa de
computadora
Cómo se dividen los programas
de computadoras o software
Existen básicamente dos clases
de software o programas de computación:
el software de sistema, los cuales consisten en un grupo de programas o
aplicaciones que hacen que una computadora funcione, entre los cuales podemos
citar a los sistemas operativos.
Que es un programa de
computadora
Los SO son indispensables para
que una PC inicie, reconozca los periféricos y hardware interno de la misma y
finalmente nos ofrezca una interfaz de usuario en la cual poder usar los demás
programas.
Que es un programa de
computadora
En el segundo lugar podemos
ubicar a todo el software que realiza una acción específica en el sistema, y
que no son indispensables para que el sistema funcione. En este grupo podemos
mencionar a las suites de ofimática, los programas de diseño gráfico, juegos y
muchos otros.
fuente:http://www.informatica-hoy.com.ar/aprender-informatica/Que-es-programa-computadora.php
QUE
ES PROGRAMACIÓN.
Es la acción y efecto de programar. Este verbo
tiene varios usos: se refiere a idear y ordenar las acciones que se realizarán
en el marco de un proyecto; al anuncio de las partes que componen un acto o
espectáculo; a la preparación de máquinas para que cumplan con una cierta tarea
en un momento determinado; a la elaboración de programas para la resolución de
problemas mediante ordenadores; y a la preparación de los datos necesarios para
obtener una solución de un problema a través de una calculadora electrónica,
por ejemplo.
Programación
En la actualidad, la noción de
programación se encuentra muy asociada a la creación de aplicaciones
informáticas y videojuegos; es el proceso por el cual una persona desarrolla un
programa valiéndose de una herramienta que le permita escribir el código (el
cual puede estar en uno o varios lenguajes, tales como C++, Java y Python) y de
otra que sea capaz de “traducirlo” a lo que se conoce como lenguaje de máquina,
el cual puede ser entendido por un microprocesador.
Este último paso se conoce
como compilación y es necesario para que el código pueda ser ejecutado por la
plataforma para la cual haya sido creado, que puede ser un ordenador, una
tableta, una consola o un teléfono móvil, por ejemplo. Existe también una forma
de traducir el código denominada interpretación, que consiste en analizar línea
a línea, hasta que se traduzca lo suficiente como para poder realizar una
tarea. Cabe mencionar que los lenguajes de programación se dividen en dos
grandes grupos, donde los que pueden ser compilados no pueden ser
interpretados, y viceversa.
La totalidad del proceso de
desarrollo abarca varias etapas y requiere del trabajo de diferentes
especialistas. En principio, partiendo de la base de un proyecto bien
organizado, es necesario dar con una idea atractiva, interesante, que
justifique los meses o años de esfuerzo que vendrán. Tan sólo esta primera
parte puede tomar mucho tiempo, dado que lo que comienza como un producto
perfecto puede convertirse, luego de cuestionarlo y observarlo desde diferentes
ángulos, en un fracaso seguro.
Programación Una vez hallada
la idea, se debe establecer el diseño de la misma; en otras palabras, se trata
de formalizar todo aquello que se haya discutido durante la búsqueda inicial.
Si bien cada equipo trabaja a su manera, dado que no se puede estructurar la
creación de una forma rígida, es probable que el siguiente paso lógico sea
comenzar a experimentar a través de la programación, para facilitar a los
diseñadores un contacto directo e interactivo con su idea.
Los programadores tienen en
sus manos el poder de dar vida a un sistema, a una aplicación, a un videojuego.
Es importante notar que todos estos productos pueden ser definidos en absoluto
detalle en un documento, incluyendo imágenes y gráficos que expliquen cómo
funciona cada milímetro de los mismos; sin embargo, hasta que un desarrollador
de software no entra en acción, no es posible verlos en movimiento, probarlos,
pasar de la teoría a la práctica.
En un plano más técnico, la
programación se realiza mediante el uso de algoritmos, que son secuencias
finitas, ordenadas y no ambiguas de instrucciones que deben seguirse para
resolver un problema. Algunas de ellas pueden agruparse y recibir un nombre
para poder ser invocadas con facilidad tantas veces como sea necesario. Del
mismo modo que los seres humanos necesitamos respirar constantemente, una
aplicación informática necesita conocer la posición del puntero del ratón a
cada momento, así como su actividad (si se ha hecho clic y con qué botón, si se
ha soltado o si se mantiene presionado, etcétera).
Por último, cabe destacar que
se conoce como programación al conjunto de los programas de televisión o radio.
Por ejemplo: “Tengo ganas de ver una película; veamos qué hay en la
programación”.
LENGUAJE
DE PROGRAMACION
Un lenguaje de programación es
un lenguaje diseñado para describir el conjunto de acciones consecutivas que un
equipo debe ejecutar. Por lo tanto, un lenguaje de programación es un modo
práctico para que los seres humanos puedan dar instrucciones a un equipo.
Por otro lado, el término
"lenguaje natural" define un medio de comunicación compartido por un
grupo de personas (por ejemplo: inglés o francés).
Los lenguajes que los equipos
usan para comunicarse entre ellos no tienen nada que ver con los lenguajes de
programación; se los conoce como protocolos de comunicación. Se trata de dos
conceptos totalmente diferentes. Un lenguaje de programación es muy estricto:
A CADA instrucción le corresponde
UNA acción de procesador.
El lenguaje utilizado por el
procesador se denomina lenguaje máquina. Se trata de instrucciones que llegan
al procesador consistentes en una serie de datos binarios (ceros y unos).
El lenguaje máquina, por lo
tanto, no es comprensible para los seres humanos, razón por la cual se han
desarrollado lenguajes intermediarios comprensibles para el hombre. El código
escrito en este tipo de lenguaje se transforma en código máquina para que el procesador
pueda interpretarlo.
El ensamblador fue el primer
lenguaje de programación utilizado. Es muy similar al lenguaje máquina, pero
solo los desarrolladores pueden comprenderlo. A pesar de su parecido con
lenguaje máquina, depende estrictamente del tipo de procesador utilizado (cada
tipo de procesador puede tener su propio lenguaje máquina). Así, un programa
desarrollado para un equipo no puede ser "portado" a otro tipo de
equipo. El término portabilidad describe la capacidad de usar un programa de
software en diferentes tipos de equipos. Para poder utilizar un programa de
software escrito en un código ensamblador en otro tipo de equipo, ¡a veces será
necesario volver a escribir todo el programa!
Por lo tanto, un lenguaje de
programación tiene varias ventajas: es mucho más fácil de comprender que un
lenguaje máquina, y permite mayor portabilidad, es decir que puede adaptarse
fácilmente para ejecutarse en diferentes tipos de equipos.
Lenguajes de programación
imperativos y funcionales
Los lenguajes de programación
generalmente se dividen en dos grupos principales en base al procesamiento de
sus comandos: lenguajes imperativos y lenguajes funcionales.
Lenguaje de programación
imperativo
Un lenguaje imperativo
programa mediante una serie de comandos, agrupados en bloques y compuestos de
órdenes condicionales que permiten al programa retornar a un bloque de comandos
si se cumple la condición. Estos fueron los primeros lenguajes de programación
en uso y aún hoy muchos lenguajes modernos usan este principio.
No obstante, los lenguajes
imperativos estructurados carecen de flexibilidad debido a la secuencialidad de
las instrucciones.
Lenguaje de programación
funcional
Un lenguaje de programación
funcional (a menudo llamado lenguaje procedimental) es un lenguaje que crea
programas mediante funciones, devuelve un nuevo estado de resultado y recibe
como entrada el resultado de otras funciones. Cuando una función se invoca a sí
misma, hablamos de recursividad.
Interpretación y compilación
Los lenguajes de programación
pueden, en líneas generales, dividirse en dos categorías: lenguajes
interpretados y lenguajes compilados.
Lenguaje interpretado
Un lenguaje de programación
es, por definición, diferente al lenguaje máquina. Por lo tanto, debe
traducirse para que el procesador pueda comprenderlo. Un programa escrito en un
lenguaje interpretado requiere de un programa auxiliar (el intérprete), que
traduce los comandos de los programas según sea necesario.
Lenguaje compilado
Un programa escrito en un
lenguaje compilado se traduce a través de un programa anexo llamado compilador
que, a su vez, crea un nuevo archivo independiente que no necesita ningún otro
programa para ejecutarse a sí mismo. Este archivo se llama ejecutable.
Un programa escrito en un
lenguaje compilado posee la ventaja de no necesitar un programa anexo para ser
ejecutado una vez que ha sido compilado. Además, como sólo es necesaria una
traducción, la ejecución se vuelve más rápida. Sin embargo, no es tan flexible
como un programa escrito en lenguaje interpretado, ya que cada modificación del
archivo fuente (el archivo comprensible para los seres humanos: el archivo a
compilar) requiere de la compilación del programa para aplicar los cambios.
Por otra parte, un programa
compilado tiene la ventaja de garantizar la seguridad del código fuente. En
efecto, el lenguaje interpretado, al ser directamente un lenguaje legible, hace
que cualquier persona pueda conocer los secretos de fabricación de un programa
y, de ese modo, copiar su código o incluso modificarlo. Por lo tanto, existe el
riesgo de que los derechos de autor no sean respetados. Por otro lado, ciertas
aplicaciones aseguradas necesitan confidencialidad de código para evitar las
copias ilegales (transacciones bancarias, pagos en línea, comunicaciones
seguras...).
Lenguajes intermediarios
Algunos lenguajes pertenecen a
ambas categorías (LISP, Java, Python...) dado que el programa escrito en estos
lenguajes puede, en ciertos casos, sufrir una fase de compilación
intermediaria, en un archivo escrito en un lenguaje ininteligible (por lo tanto
diferente al archivo fuente) y no ejecutable (requeriría un intérprete). Los pallets
Java, pequeños programas que a menudo se cargan en páginas web, son archivos
compilados que sólo pueden ejecutarse dentro de un navegador web (son archivos
con la extensión .class).
Algunos ejemplos de lenguajes
ampliamente usados
A continuación, encontrará una
breve lista de los lenguajes de programación actuales:
Lenguaje
|
Principal área de aplicación
|
Compilado/interpretado
|
ADA
|
Tiempo real
|
Lenguaje compilado
|
BASIC
|
Programación para fines educativos
|
Lenguaje interpretado
|
C
|
Programación de sistema
|
Lenguaje compilado
|
C++
|
Programación de sistema orientado a objeto
|
Lenguaje compilado
|
Cobol
|
Administración
|
Lenguaje compilado
|
Fortran
|
Cálculo
|
Lenguaje compilado
|
Java
|
Programación orientada a Internet
|
Lenguaje intermediario
|
MATLAB
|
Cálculos matemáticos
|
Lenguaje interpretado
|
Cálculos matemáticos
|
Cálculos matemáticos
|
Lenguaje interpretado
|
LISP
|
Inteligencia artificial
|
Lenguaje intermediario
|
Pascal
|
Educación
|
Lenguaje compilado
|
PHP
|
Desarrollo de sitios web dinámicos
|
Lenguaje interpretado
|
Inteligencia artificial
|
Inteligencia artificial
|
Lenguaje interpretado
|
Perl
|
Procesamiento de cadenas de caracteres
|
Lenguaje interpretado
|
¿QUÉ ES UN LENGUAJE DE ALTO NIVEL?
Un lenguaje de alto nivel
permite al programador escribir las instrucciones de un programa utilizando
palabras o expresiones sintácticas muy similares al inglés. Por ejemplo, en C
se pueden usar palabras tales como: case, if, for, while, etc. para construir
con ellas instrucciones como:
if( numero > 0 ) printf(
"El número es positivo" )
Que traducido al castellano
viene a decir que: si número es mayor que cero, entonces, escribir por
pantalla el mensaje: "El número es positivo".
Ésta es la razón por la que
a estos lenguajes se les considera de alto nivel, porque se pueden utilizar
palabras de muy fácil comprensión para el programador. En contraposición, los
lenguajes de bajo nivel son aquellos que están más cerca del
"entendimiento" de la
máquina. Otros lenguajes de alto nivel son: Ada, BASIC, COBOL, FORTRAN,
Pascal, etc.
Otra característica
importante de los lenguajes de alto nivel es que, para la mayoría de las
instrucciones de estos lenguajes, se necesitarían varias instrucciones en un
lenguaje ensamblador para indicar lo mismo. De igual forma que, la mayoría de
las instrucciones de un lenguaje ensamblador, también agrupa a varias
instrucciones de un lenguaje máquina.
|
|
LENGUAJE
DE UNA MAQUINA
Fue el primer lenguaje
utilizado en la programación para las primeras computadoras, pero dejó de
utilizarse por su dificultad y complicación, siendo sustituido por otros
lenguajes más fáciles de aprender y utilizar, y que además reducen la
posibilidad de cometer errores.
La información que hace que el
hardware de la computadora realice una determinada actividad de llama
instrucción, por consiguiente una instrucción es un conjunto de unos y ceros,
las instrucciones así formadas equivalen a acciones elementales de la máquina,
por lo que al conjunto de dichas instrucciones que son interpretadas
directamente por la máquina se denomina lenguaje máquina.
El lenguaje máquina es el
único lenguaje que puede ejecutar una computadora, es específico en cada
arquitectura, es un código que es interpretado directamente por el microprocesador,
está compuesto por un conjunto de instrucciones ejecutadas en secuencia que
representan acciones que la máquina podrá tomar.
El lenguaje máquina es el
único que entiende directamente la computadora, utiliza el alfabeto binario que
consta de los dos únicos símbolos 0 y 1, denominados bits; físicamente, se
materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5
voltios, respectivamente. Para representar datos que contengan una información
se utilizan una serie de unos y ceros cuyo conjunto indica dicha información.
Todo código fuente en última
instancia debe llevarse a un lenguaje máquina mediante el proceso de
compilación o interpretación para que la computadora pueda ejecutarlo.
Las instrucciones preparadas
en cualquier lenguaje de máquina tienen por lo menos dos partes, el comando u
operación, que dice a la computadora cuál es la función que va a realizar y la
instrucción es el operando, que indica a la computadora donde hallar o
almacenar los datos y otras instrucciones que se van a manipular; el número de operando
de una instrucción varía en las distintas computadoras, una instrucción en
lenguaje máquina puede, por ejemplo, representarse de la siguiente forma:
011011001010010011110110
Esta secuencia es fácilmente
ejecutada por la computadora, pero es de difícil interpretación, siendo aún más
difícil la interpretación de un programa escrito de esta forma, esta dificultad
hace que los errores sean frecuentes y la corrección de los mismos costosa,
cuando no imposible, al igual que la verificación y modificación de los
programas.
Como se puede observar, estas
instrucciones serán fáciles de leer por la computadora y difíciles por un
programador, y viceversa, esta razón hace difícil escribir programas en código
o lenguaje a máquina y requiere buscar otro lenguaje para comunicarse con la
computadora, pero que sea más fácil de escribir y leer por el programador. Para
evitar la tediosa tarea de escribir programas en lenguaje máquina, se han diseñado
otros lenguajes de programación que facilitan la escritura y posterior
ejecución de los programas.
EJEMPLO
0011
0001
1010
0001
01 A1
1000
1001
1001
1010
FF 9A
0011
1010
1001
1100
3A 9C
0111
0100
0111
0011
74 F0
1110
1001
0010
1100
C8 30
Las ventajas de esto son
evidentes, ya que para el hombre resulta más fácil manipular grupos de
caracteres y la traducción se haría de manera automática. Por ejemplo, se
podría escribir:
ALMACENAR 11010110, 00011101
Esto indicaría que el
contenido de la posición 11010110 había que pasarlo a la posición 00011101 si
se sabe que al grupo alfabético ALMACENAR le corresponde la secuencia de bits
11110101.
La máquina traduciría la
anterior instrucción como:
11110101 11010110 00011101
A los programas que permiten
pasar del programa escrito de esta manera (programa fuente, en ensamblador) al
lenguaje máquina también se les denomina normalmente ensambladores. Estos
traductores, como ya se ha dicho, se fueron complicando cada vez más para que
la labor del programador fuera más fácil, incluyendo las denominadas directivas
del ensamblador, que son órdenes o información que el programador da al
traductor, no instrucciones de lenguaje máquina.
El código máquina, o lenguaje
de máquina, está formado por instrucciones sencillas, que dependiendo de la
estructura del procesador pueden especificar:
Registros específicos para
operaciones aritméticas, direccionamiento o control de funciones.
Posiciones de memoria
específicas (offset).
Modos de direccionamiento
usados para interpretar operando.
Las instrucciones de máquina o
instrucciones del computador son las que determinan el funcionamiento de la CPU
que las ejecuta, la CPU puede realizar una diversidad de funciones que son el
reflejo de la variedad de las instrucciones definidas para dicha CPU, el
programador tiene un repertorio de instrucciones como medio para controlar la
CPU.
Las operaciones más complejas
se realizan combinando estas instrucciones sencillas, que pueden ser ejecutadas
secuencialmente o mediante instrucciones de control de flujo.
Las operaciones disponibles en
la mayoría de los conjuntos de instrucciones incluyen:
Mover
Llenar un registro con un
valor constante
Mover datos de una posición de
memoria a un registro o viceversa
Escribir y leer datos de
dispositivos
Computar
Sumar, restar, multiplicar o
dividir los valores de dos registros, colocando el resultado en uno de ellos o
en otro registro
Realizar operaciones binarias,
incluyendo operaciones lógicas (AND/OR/XOR/NOT)
Comparar valores entre
registros (mayor, menor, igual)
Afectar el flujo del programa
Saltar a otra posición en el
programa y ejecutar instrucciones allí
Saltar si se cumplen ciertas
condiciones (IF)
Saltar a otra posición, pero
guardar el punto de salida para retornar (CALL, llamada a subrutinas)
Las instrucciones de un
lenguaje de programación se pueden clasificar en:
Instrucciones de
transferencias de datos: Son aquellas de entrada o lectura y de salida o
escritura. En el caso de las instrucciones de entrada o lectura, se lleva el
dato de entrada o lectura desde la unidad de entrada a la memoria. Si por el
contrario es una instrucción de salida o escritura, se lleva el dato de la
memoria a la unidad de salida.
Instrucciones de tratamiento:
Se trata de las instrucciones aritmético-lógicas y las de desplazamientos. Así
como suma de datos, comparaciones.
Instrucciones de flujo de
control o de bifurcación y salto: Las instrucciones de flujo de control son
aquellas instrucciones que alteran el orden secuencial de la ejecución de un
programa. También hay instrucciones que posibilitan la interrupción de la
ejecución o saltar a ejecutar otro programa. Cuando termina cualquiera de estas
instrucciones, el programa continúa ejecutándose desde el punto en el que se
interrumpió.
Direccionamiento de lenguaje
maquina: Es la forma en cómo se accede a la memoria, recordamos que un programa
no puede ejecutarse sino se encuentra en memoria principal, la forma de acceder
a la memoria depende del microprocesador, pero en general existen dos tipos de
direccionamiento: directo e indirecto.
El direccionamiento directo
también recibe el nombre de direccionamiento absoluto y el acceso a las
direcciones se hace de manera directa.
El direccionamiento indirecto
también recibe el nombre de direccionamiento relativo y se basa a partir de una
dirección genérica, generalmente el inicio del programa.
Para acceder a una dirección
relativa se suma a la dirección base el número de espacios de memorias
necesarias, e direccionamiento relativo hace a los programas relocalizarles e
independientes, si la dirección base es el inicio de la memoria fija el
direccionamiento pasa a ser un variante de direccionamiento absoluto.
Ventajas del Lenguaje Máquina
Posibilidad de cargar
(transferir un programa a la memoria) sin necesidad de traducción posterior, lo
que supone una velocidad de ejecución superior a cualquier otro lenguaje de
programación.
Desventajas del Lenguaje
Máquina
Dificultad y lentitud en la
codificación.
Poca fiabilidad.
Gran dificultad para verificar
y poner a punto los programas.
Los programas solo son
ejecutables en el mismo procesador (CPU)
LENGUAJE
DE ENSAMBLADOR
El lenguaje ensamblador es el
lenguaje de programación utilizado para escribir programas informáticos de bajo
nivel, y constituye la representación más directa del Código máquina específico
para cada arquitectura de computadoras legible por un programador. Aun hoy se
utiliza en la programación de handler o manipuladores de dispositivos de
hardware.
Características
El código escrito en lenguaje
ensamblador posee una cierta dificultad de ser entendido directamente por un
ser humano ya que su estructura se acerca más bien al lenguaje máquina, es
decir, lenguaje de bajo nivel.
El lenguaje ensamblador es
difícilmente portable, es decir, un código escrito para un Microprocesador,
suele necesitar ser modificado, muchas veces en su totalidad para poder ser
usado en otra máquina distinta, aun con el mismo Microprocesador, solo pueden
ser reutilizados secciones especiales del código programado.
Los programas hechos en
lenguaje ensamblador, al ser programado directamente sobre Hardware, son
generalmente más rápidos y consumen menos recursos del sistema (memoria RAM y
ROM). Al programar cuidadosamente en lenguaje ensamblador se pueden crear
programas que se ejecutan más rápidamente y ocupan menos espacio que con
lenguajes de alto nivel.
Con el lenguaje ensamblador se
tiene un control muy preciso de las tareas realizadas por un Microprocesador
por lo que se pueden crear segmentos de código difíciles de programar en un
lenguaje de alto nivel.
También se puede controlar el
tiempo en que tarda una Rutina en ejecutarse, e impedir que se interrumpa
durante su ejecución.
El lenguaje ensamblador es un
código estructurado y gravitatorio desarrollado sobre un archivo de
programación (.ASM), en el cual pueden existir varios programas, macros o
rutinas que pueden ser llamados entre sí.
Lenguaje
Un programa escrito en
lenguaje ensamblador consiste en una serie de Instrucciones que corresponden al
flujo de órdenes ejecutables que pueden ser cargadas en la Memoria de un
sistema basado en Microprocesador. Por ejemplo, un Procesador x86 puede
ejecutar la siguiente instrucción Binaria como se expresa en código de máquina:
Binario: 10110000 01100001
(Hexadecimal: 0xb061)
La representación equivalente
en lenguaje ensamblador es más fácil de recordar:
MOV al, 061h
Esta instrucción significa:
Asigna el valor Hexadecimal 61
(97 Decimal) al registro "al".
El mnemónico "mov"
es un código de operación u "opcode", elegido por los diseñadores de
la colección de instrucciones para abreviar "move" (mover, pero en el
sentido de copiar valores de un sitio a otro). El opcode es seguido por una
lista de argumentos o parámetros, completando una instrucción de ensamblador
típica. A diferencia de los lenguajes de alto nivel, aquí hay usualmente una
correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el
lenguaje de máquina. Sin embargo, en algunos casos, un ensamblador puede
proveer "pseudo instrucciones" que se expanden en un código de
máquina más extenso a fin de proveer la funcionalidad necesaria. Por ejemplo,
para un código máquina condicional como "si X mayor o igual que", un
ensamblador puede utilizar una pseudo instrucción al grupo "haga si menor
que", y "si = 0" sobre el resultado de la condición anterior.
Código máquina
El código máquina, o lenguaje
de máquina, está formado por instrucciones sencillas, que -dependiendo de la
estructura del procesador- pueden especificar:
Registros específicos para
operaciones aritméticas, direccionamiento o control de funciones.
Posiciones de memoria
específicas (offset).
Modos de direccionamiento
usados para interpretar operando.
Las operaciones más complejas
se realizan combinando estas instrucciones sencillas, que pueden ser ejecutadas
secuencialmente o mediante instrucciones de control de flujo. Casi todas las
instrucciones utilizan 2 operando específicos para realizar su función.
Ejemplo, cuando deseamos mover un valor constante hacia un registro de
almacenamiento debemos especificar ambos operando. Las operaciones disponibles
en la mayoría de los conjuntos de instrucciones incluyen:
Mover
Llenar un registro con un
valor constante (Ej.: mov al, `20`). O mover datos de una posición de memoria a
un registro o viceversa (Ej.: mov al, [si]) o escribir y leer datos de
dispositivos (Ej.: lea dx, offset cadena)
Computar
Sumar, restar, multiplicar o
dividir los valores de dos registros, colocando el resultado en uno de ellos o
en otro registro (Ej.: sum, mal, div, entre otras instrucciones). O realizar
operaciones binarias, incluyendo operaciones lógicas (AND/OR/XOR/NOT) o
comparar valores entre registros (mayor, menor, igual) (Ej.: cmp)
Afectar el flujo del programa
Saltar a otra posición en el
programa y ejecutar instrucciones allí (Ej.: jmp) o saltar si se cumplen
ciertas condiciones (IF) (Ej.: jnb, jnz, jb, jz, jne, je, entre otros) o saltar
a otra posición, pero guardar el punto de salida para retornar (Ej.: CALL,
llamada a subrutinas) Algunas computadoras incluyen instrucciones complejas
dentro de sus capacidades. Una sola instrucción compleja hace lo mismo que en otras
computadoras puede requerir una larga serie de instrucciones, por ejemplo:
Salvar varios registros en la
Pila de una sola vez
Mover grandes bloques de
memoria
Ejemplos de lenguaje
ensamblador
Ejemplo 1
El siguiente es un ejemplo del
programa clásico Hola mundo escrito para la arquitectura de procesador x86
(bajo el sistema operativo DOS) en modo texto (por defecto).
.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code
programa:
mov ax, @data
mov
ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
int 20h
end programa
COPILADOR
Un compilador es un programa
informático que traduce un programa escrito en un lenguaje de programación a
otro lenguaje de programación, generando un programa equivalente que la máquina
será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de
máquina, pero también puede ser un código intermedio (bytecode), o simplemente
texto. Este proceso de traducción se conoce como compilación.1
Un compilador es un programa
que permite traducir el código fuente de un programa en lenguaje de alto nivel,
a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta
manera un programador puede diseñar un programa en un lenguaje mucho más
cercano a cómo piensa un ser humano, para luego compilarlo a un programa más
manejable por una computadora.
Cómo funciona
El proceso de traducción se
compone internamente de varias etapas o fases, que realizan distintas
operaciones lógicas. Es útil pensar en estas fases como en piezas separadas dentro
del traductor, y pueden en realidad escribirse como operaciones codificadas
separadamente aunque en la práctica a menudo se integren juntas.
Fase de análisis
Análisis léxico
El análisis léxico constituye
la primera fase, aquí se lee el programa fuente de izquierda a derecha y se
agrupa en componentes léxicos (tokens), que son secuencias de caracteres que
tienen un significado. Además, todos los espacios en blanco, líneas en blanco,
comentarios y demás información innecesaria se elimina del programa fuente.
También se comprueba que los símbolos del lenguaje (palabras clave, operadores,
etc.) se han escrito correctamente.
Como la tarea que realiza el
analizador léxico es un caso especial de coincidencia de patrones, se necesitan
los métodos de especificación y reconocimiento de patrones, se usan
principalmente los autómatas finitos que acepten expresiones regulares. Sin
embargo, un analizador léxico también es la parte del traductor que maneja la
entrada del código fuente, y puesto que esta entrada a menudo involucra un
importante gasto de tiempo, el analizador léxico debe funcionar de manera tan
eficiente como sea posible.
Análisis sintáctico
En esta fase los caracteres o
componentes léxicos se agrupan jerárquicamente en frases gramaticales que el
compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la
fase anterior es sintácticamente correcto (obedece a la gramática del
lenguaje). Por lo general, las frases gramaticales del programa fuente se
representan mediante un árbol de análisis sintáctico.
La estructura jerárquica de un
programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se
pueden dar las siguientes reglas como parte de la definición de expresiones:
Cualquier identificador es una
expresión.
Cualquier número es una
expresión.
Si expresión1 y expresión2 son
expresiones, entonces también lo son:
expresión1 + expresión2
expresión1 * expresión2
(expresión1)
Las reglas 1 y 2 son reglas
básicas (no recursivas), en tanto que la regla 3 define expresiones en función
de operadores aplicados a otras expresiones.
La división entre análisis
léxico y análisis sintáctico es algo arbitraria. Un factor para determinar la
división es si una construcción del lenguaje fuente es inherentemente recursiva
o no. Las construcciones léxicas no requieren recursión, mientras que las
construcciones sintácticas suelen requerirla. No se requiere recursión para
reconocer los identificadores, que suelen ser cadenas de letras y dígitos que
comienzan con una letra. Normalmente, se reconocen los identificadores por el
simple examen del flujo de entrada, esperando hasta encontrar un carácter que
no sea ni letra ni dígito, y agrupando después todas las letras y dígitos
encontrados hasta ese punto en un componente léxico llamado identificador. Por
otra parte, esta clase de análisis no es suficientemente poderoso para analizar
expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera
apropiada los paréntesis de las expresiones, o las palabras Begin y end en
proposiciones sin imponer alguna clase de estructura jerárquica o de
anidamiento a la entrada.
Análisis semántico
La fase de análisis semántico
revisa el programa fuente para tratar de encontrar errores semánticos y reúne
la información sobre los tipos para la fase posterior de generación de código.
En ella se utiliza la estructura jerárquica determinada por la fase de análisis
sintáctico para identificar los operadores y operando de expresiones y
proposiciones.
Un componente importante del
análisis semántico es la verificación de tipos. Aquí, el compilador verifica si
cada operador tiene operandos permitidos por la especificación del lenguaje
fuente. Por ejemplo, las definiciones de muchos lenguajes de programación
requieren que el compilador indique un error cada vez que se use un número real
como índice de una matriz. Sin embargo, la especificación del lenguaje puede
imponer restricciones a los operandos, por ejemplo, cuando un operador
aritmético binario se aplica a un número entero y a un número real.2 Revisa que
los arreglos tengan definido el tamaño correcto.
Fase de síntesis
Consiste en generar el código
objeto equivalente al programa fuente. Sólo se genera código objeto cuando el
programa fuente está libre de errores de análisis, lo cual no quiere decir que
el programa se ejecute correctamente, ya que un programa puede tener errores de
concepto o expresiones mal calculadas. Por lo general el código objeto es
código de máquina relocalizarle o código ensamblador. Las posiciones de memoria
se seleccionan para cada una de las variables usadas por el programa. Después,
cada una de las instrucciones intermedias se traduce a una secuencia de
instrucciones de máquina que ejecuta la misma tarea. Un aspecto decisivo es la
asignación de variables a registros.
Generación de código
intermedio
Después de los análisis
sintáctico y semántico, algunos compiladores generan una representación
intermedia explícita del programa fuente. Se puede considerar esta
representación intermedia como un programa para una máquina abstracta. Esta
representación intermedia debe tener dos propiedades importantes; debe ser
fácil de producir y fácil de traducir al programa objeto.
La representación intermedia
puede tener diversas formas. Existe una forma intermedia llamada «código de
tres direcciones» que es como el lenguaje ensamblador de una máquina en la que
cada posición de memoria puede actuar como un registro. El código de tres
direcciones consiste en una secuencia de instrucciones, cada una de las cuales
tiene como máximo tres operandos. Esta representación intermedia tiene varias
propiedades:
Primera.- Cada instrucción de
tres direcciones tiene a lo sumo un operador, además de la asignación, por
tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el
orden en que deben efectuarse las operaciones.
Segunda.- El traductor debe
generar un nombre temporal para guardar los valores calculados por cada
instrucción.
Tercera.- Algunas instrucciones
de «tres direcciones» tienen menos de tres operandos, por ejemplo, la
asignación.
Optimización de código
La fase de optimización de
código consiste en mejorar el código intermedio, de modo que resulte un código
máquina más rápido de ejecutar. Esta fase de la etapa de síntesis es posible
sobre todo si el traductor es un compilador (difícilmente un intérprete puede
optimizar el código objeto). Hay mucha variación en la cantidad de optimización
de código que ejecutan los distintos compiladores. En los que hacen mucha
optimización, llamados «compiladores optimizadores», una parte significativa
del tiempo del compilador se ocupa en esta fase. Sin embargo, hay
optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecución del
programa objeto sin retardar demasiado la compilación.
INTERFACE
CONCEPTO DE INTERFAZ O
INTERFACE JAVA. AMPLIACIÓN.
Ya hemos dicho que interface
en Java es una palabra que puede tener diferentes significados. Vamos a repasar
algunos significados que ya hemos visto y a introducir otros nuevos. Es
habitual que entre las personas que estudian Java haya dificultades para entender
el concepto de interface. Esto es hasta cierto punto normal porque este término
tiene varios usos.
Ya hemos dicho que interface
en Java es una palabra que puede tener diferentes significados. Vamos a repasar
algunos significados que ya hemos visto y a introducir otros nuevos.
a) Interface: parte visible y
pública de una clase que describe qué hace y cómo usarla. La documentación de
una clase en el API de Java vendría siendo su interface.
b) Interface: parte visible y
pública de un método que describe qué hace y cómo usarlo (signatura del método
+ instrucciones de uso). La documentación de un método en el API de Java
vendría siendo su interface.
c) Interfaz Gráfica de
Usuario, interfaz de usuario o GUI (Graphical User Interface): es el entorno de
objetos gráficos disponibles para un usuario en el marco de una aplicación o
sistema operativo. El sistema operativo MS-Dos se basaba en intérpretes de
comando (escritura de instrucciones por consola) pero Windows se basa en una
interfaz gráfica de usuario (su entorno de escritorio), Linux en otra y
Macintosh en otra.
d) Herramientas para crear
Interfaces gráficas de usuario en Java. Hacemos referencia principalmente a los
paquetes (packages) del API de Java swing y awt (Abstract Windowing Toolkit).
Las clases de estos paquetes permiten crear interfaces gráficas de usuario
basadas en ventanas estilo “Windows” para nuestras aplicaciones.
e) Interfaces de Java: son
unas entidades abstractas conceptualmente por encima de las clases cuyo
concepto vamos a introducir a continuación.
Para explicar el concepto de
interface nos valdremos de un ejemplo. Supongamos que al crear un programa
creamos una ciudad. Para crear la ciudad no partimos de cero: disponemos de
edificios prefabricados (las clases del API de Java). Pero también disponemos
de algo más: de normas de urbanismo ya definidas (las interfaces del API de Java).
Cada norma vamos a decir que es una interface: nos dice qué debemos cumplir
para que al construir un edificio (clase) se pueda calificar con un nombre
determinado. Supongamos una norma denominada “Edificio a dos aguas”, cuyo
contenido incluye:
a) El edificio habrá de tener
cuatro paredes.
b) El edificio habrá de tener
un tejado formado por dos planos.
c) Otras especificaciones.
Si al construir un edificio se
cumplen las condiciones de las normas de urbanismo, el ayuntamiento nos permite
que en la publicidad y escrituras del edificio conste que se trata de un
edificio a dos aguas. Si no cumplimos las especificaciones, no podemos usar esa
denominación. Por ejemplo, estaría prohibido que un edificio con forma de
pentágono y cinco paredes se denominaran “Edificio a dos aguas”. Por el
contrario, sería posible denominar edificio a dos aguas a una capilla que
cumpla la norma, también a una vivienda unifamiliar que la cumpla, o a una
biblioteca que la cumpla. Trasladémoslo a Java. Consideremos la interface “List”
que equivale a nuestra norma, cuyo contenido incluye:
a) La clase habrá de tener un
método cuya signatura sea get(int index) que devuelva el objeto de la lista en
la posición especificada por el entero index.
b) La clase habrá de tener un
método cuya signatura sea isEmpty() que devuelva un valor booleano true si la
lista no contiene objetos o false en caso contrario.
c) Otras especificaciones.
Si una clase cumple y declara
que cumple las especificaciones de la interfaz, decimos que esa clase
implementa la interfaz. Si no cumple las especificaciones, no la implementa.
Para implementar la interfaz la clase ha de incluir todos los métodos que
defina la interfaz. Por ejemplo, una clase que no incluya el método get(int
index) no cumplirá la especificación y por tanto no podrá decirse que
implemente la interfaz List. Veamos ahora cómo empieza la documentación de esta
interface del API de Java:
Java. Útil
Interface List<E>
All Superinterfaces:
Collection<E>, Iterable<E>
All Known Implementing
Classes:
AbstractList,
AbstractSequentialList, ArrayList, AttributeList, LinkedList, RoleList, Stack,
Vector y otras
Una interface puede tener
“normas” superiores, a las que denominamos “Superinterfaces”, y “normas”
inferiores, a las que denominamos “Subinterfaces”, de acuerdo con una
jerarquía. A su vez, una interface puede tener clases que la implementan. Por
ejemplo en el caso de List, esta interface está implementada por las clases
ArrayList, LinkedList, Stack y otras. Todas las clases que implementan una
interface podemos decir que tienen algo en común. De esta manera, todas las
clases del API de Java están organizadas.
Fuente: http://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=644:concepto-o-definicion-de-interface-java-ique-es-una-interface-tipos-de-interfaz-ejemplo-practico-cu00677b&catid=68&Itemid=188
No hay comentarios:
Publicar un comentario