lunes, 27 de mayo de 2013

CONCEPTOS BASICOS DE LOGICA DE PROGRAMACION

1. PROCESO
Puede informalmente entenderse como un programa en ejecución. Formalmente un proceso es "Una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistema asociados".
Para entender lo que es un proceso y la diferencia entre un programa y un proceso, A. S. Tanenbaum propone la analogía "Un científico computacional con mente culinaria hornea un pastel de cumpleaños para su hija; tiene la receta para un pastel de cumpleaños y una cocina bien equipada con todos los ingredientes necesarios, harina, huevo, azúcar, leche, etcétera." Situando cada parte de la analogía se puede decir que la receta representa el programa (el algoritmo), el científico computacional es el procesador y los ingredientes son las entradas del programa. El proceso es la actividad que consiste en que el científico computacional vaya leyendo la receta, obteniendo los ingredientes y horneando el pastel.
Cada proceso tiene su contador de programa, registros y variables, aislados de otros procesos, incluso siendo el mismo programa en ejecución 2 veces. Cuándo este último caso sucede, el sistema operativo usa la misma región de memoria de código, debido a que dicho código no cambiará, a menos que se ejecute una versión distinta del programa.
Los procesos son gestionados por el sistema operativo y están formados por:
Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador.
Su estado de ejecución en un momento dado, esto es, los valores de los registros de la unidad central de procesamiento para dicho programa.
Su memoria de trabajo (memoria crítica), es decir, la memoria que ha reservado y sus contenidos.
Otra información que permite al sistema operativo su planificación.
Un proceso se rige en pequeñas porciones, conocidas como páginas, y cada proceso tiene su propia tabla de paginación, fungiendo como una optimización del sistema operativo ante los fallo de página.

2. ENTRADAS A UN PROCESO
Entrada de Información: Es el proceso mediante el cual el Sistema de Información toma los datos que requiere para procesar la información. Las entradas pueden ser manuales o automáticas. Las manuales son aquellas que se proporcionan en forma directa por el usuario, mientras que las automáticas son datos o información que provienen o son tomados de otros sistemas o módulos. Esto último se denomina interfases automáticas. Las unidades típicas de entrada de datos a las computadoras son las terminales, las cintas magnéticas, las unidades de diskette, CD-ROM, Pendriver, los códigos de barras, los escáners, la voz, los monitores sensibles al tacto, el teclado y el mouse, entre otras. Procesamiento de Información: Es la capacidad del Sistema de Información para efectuar cálculos de acuerdo con una secuencia de operaciones preestablecida. Estos cálculos pueden efectuarse con datos introducidos recientemente en el sistema o bien con datos que están almacenados. Esta característica de los sistemas permite la transformación de datos fuente en información que puede ser utilizada para la toma de decisiones, lo que hace posible, entre otras cosas, que un tomador de decisiones genere una proyección financiera a partir de los datos que contiene un estado de resultados o un balance general de un año base.

3.SALIDAS DE UN PROCESO
Salida de Información: La salida es la capacidad de un Sistema de Información para sacar la información procesada o bien datos de entrada al exterior. Las unidades típicas de salida son las impresoras, terminales, diskettes, cintas magnéticas, la voz, los graficadores y los plotters, entre otros. Es importante aclarar que la salida de un Sistema de Información puede constituir la entrada a otro Sistema de Información o módulo. En este caso, también existe una interfase automática de salida. Por ejemplo, el Sistema de Control de Clientes tiene una interfase automática de salida con el Sistema de Contabilidad, ya que genera las pólizas contables de los movimientos procesales de los clientes.

4. ALGORITMO
Es una formula para resolver un problema. Es un conjunto de acciones o secuencia de operaciones que ejecutadas en un determinado orden resuelven el problema. Existen n algoritmos, hay que coger el más efectivo.
Características:
•         Tiene que ser preciso.
•         Tiene que estar bien definido.
•         Tiene que ser finito.
La programación es adaptar el algoritmo al ordenador.
El algoritmo es independiente según donde lo implemente.

5.ESTRUCTURA DE UN ALGORITMO
En esencia un algoritmo está constituido por los siguientes tres elementos:
Datos Instrucciones Estructuras de control
Lo que el algoritmo recibe, procesa y entrega como resultado. Las acciones o procesos que el algoritmo realiza sobre los datos. Las que determinan el orden en que se ejecutarán las instrucciones del algoritmo.
En el capítulo siguiente se presenta de manera completa los conceptos de dato e instrucciones sobre datos y en el capítulo cuatro se describe el concepto de estructura de control.

6.INSTRUCCIÓN
Se denomina instrucción en informática al conjunto de datos insertados en una secuencia estructurada o específica que el procesador interpreta y ejecuta.
Los tipos de instrucción permitidos están definidos y determinados dentro de cada plataforma en el conjunto de instrucciones (en inglés ISA, instruction set architecture), que también determina los registros de origen y destino de la CPU, y en ocasiones un dato inmediato (aquellos que son especificados explícitamente en la instrucción).
Estas 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.

7.PSEUDOCÓDIGO

En programación, lenguaje artificial e informal útil para programadores para el desarrollo de algoritmos. No es un lenguaje de programación verdadero y, por lo tanto, no puede ser compilado y ejecutado.

En pseudocódigo se describen los algoritmos utilizando una mezcla de lenguaje común, con instrucciones de programación, palabras claves, etc. El objetivo es que el programador se centre en la solución lógica del algoritmo y no en la implementación en un lenguaje de programación concreto (con las posibles complicaciones en las reglas sintácticas), o en otras palabras, sólo ayudan a "pensar" un programa antes de escribirlo en un lenguaje de programación formal.

8.DATO
En programación, un dato es la expresión general que describe las características de las entidades sobre las cuales opera un algoritmo.

9.VARIABLE
Una variable es un contenedor de bits que representan a un valor. Se emplean para almacenar datos que pueden cambiar durante la ejecución de un programa. En función de los datos que almacenan se clasifican en:
Variables primitivas: almacenan datos numéricos, valores lógicos o caracteres.
Variables referenciadas: asociadas a objetos o instancias de una clase. Por ejemplo, para almacenar cadenas de caracteres se empleará una variable referenciada asociada a la clase String, para almacenar información sobre la fecha actual, otra asociada a la clase Date, etc. Se estudiarán más adelante.
Además de estos dos tipos de variables se estudiarán los arrays de variables primitivas y de variables referenciadas. Un array, como se verá en el tema correspondiente, es una variable referenciada asociada a la clase Object (clase madre de todos los objetos Java).
Se va a profundizar un poco más en el concepto de variable: como se ha comentado anteriormente, no es nada más que un contenedor de bits que representan a un valor. Ocurre lo siguiente:
En el caso de variables primitivas, los bits representan un número entero que coincide con el valor de la variable, con lo que se va a trabajar a lo largo del programa. Por ejemplo, se tienen variables de tipo byte (utilizan 8 bits en memoria) que pueden almacenar números enteros comprendidos entre -128 y 127, de tipo int (utilizan 32 bits en memoria) para almacenar enteros entre, aproximadamente, -2150 millones y 2150 millones, de tipo float para números decimales, etc.

En el caso de variables referenciadas o asociadas a objetos, los bits representan un numerajo que permite acceder al valor de la variable, es decir, al objeto, pero no es el valor u objeto en sí.

Todos los nombres empleados para hacer referencia a variables deben cumplir lo siguiente:
Su primer carácter debe ser una letra, el símbolo del subrayado o el carácter dólar $.
No son válidos las palabras reservadas de Java.
No se admiten espacios en blanco.
Son case-sensitive (sensibles a mayúsculas).
Aparte de estas normas conviene que los nombres de las variables indiquen qué dato almacenan con el fin de facilitar la lectura del programa y, por otra parte, si un nombre tiene más de dos palabras la primera letra de la primera palabra irá en minúscula, la primera letra de la segunda palabra en mayúscula, ídem con la tercera y así sucesivamente.
Ejemplo:
int miVariableEntera=100;

10.TIPOS DE VARIABLES
int: O Entero(En inglés Integrer). Almacena un número entero de -32768 a +32767. Ocupa 16 bits en memoria. Los números que almacena no pueden contener decimales
float: O Flotante. Almacena un número con decimales con 7 dígitos de precisión. Ocupa 32 bits en memoria.
double: Un número décimal de doble precisión, hasta 13 dígitos. Ocupa 64 bits en memoria. Puede almacenar decimales.

char: O Caracter. Almácena un sólo caracter. O un número entero. Ocupa 8 bits en memoria. No puede almacenar decimales. Para declararla: char nombrevariable = "letra";
void: Tipo personalizado. Es una funcion como main. Se explica a continuación.
Con todos estos tipos de variables se pueden hacer sumas, restas, multiplicaciones, divisiones, comparaciones, etc.
Las variables del tipo void albergan unas acciones definidas por el usuario. Puede contener tantas acciones como se desee.
Aunque todas las variables de JavaScript se crean de la misma forma (mediante la palabra reservada var), la forma en la que se les asigna un valor depende del tipo de valor que se quiere almacenar (números, textos, etc.)
3.2.1. Numéricas
Se utilizan para almacenar valores numéricos enteros (llamados integer en inglés) o decimales (llamados float en inglés). En este caso, el valor se asigna indicando directamente el número entero o decimal. Los números decimales utilizan el carácter . (punto) en vez de , (coma) para separar la parte entera y la parte decimal:
var iva = 16;        // variable tipo entero
var total = 234.65;  // variable tipo decimal
3.2.2. Cadenas de texto
Se utilizan para almacenar caracteres, palabras y/o frases de texto. Para asignar el valor a la variable, se encierra el valor entre comillas dobles o simples, para delimitar su comienzo y su final:
var mensaje = "Bienvenido a nuestro sitio web";
var nombreProducto = 'Producto ABC';
var letraSeleccionada = 'c';
En ocasiones, el texto que se almacena en las variables no es tan sencillo. Si por ejemplo el propio texto contiene comillas simples o dobles, la estrategia que se sigue es la de encerrar el texto con las comillas (simples o dobles) que no utilice el texto:
/* El contenido de texto1 tiene comillas simples, por lo que
    se encierra con comillas dobles */
var texto1 = "Una frase con 'comillas simples' dentro";

/* El contenido de texto2 tiene comillas dobles, por lo que
    se encierra con comillas simples */
var texto2 = 'Una frase con "comillas dobles" dentro';
No obstante, a veces las cadenas de texto contienen tanto comillas simples como dobles. Además, existen otros caracteres que son difíciles de incluir en una variable de texto (tabulador, ENTER, etc.) Para resolver estos problemas, JavaScript define un mecanismo para incluir de forma sencilla caracteres especiales y problemáticos dentro de una cadena de texto.
El mecanismo consiste en sustituir el carácter problemático por una combinación simple de caracteres. A continuación se muestra la tabla de conversión que se debe utilizar:
Si se quiere incluir... Se debe incluir...
Una nueva línea \n
Un tabulador \t
Una comilla simple \'
Una comilla doble \"
Una barra inclinada \\
De esta forma, el ejemplo anterior que contenía comillas simples y dobles dentro del texto se puede rehacer de la siguiente forma:
var texto1 = 'Una frase con \'comillas simples\' dentro';

var texto2 = "Una frase con \"comillas dobles\" dentro";

11.QUE ES Y CÓMO SE DEFINE UNA VARIABLE EN PSEUDOCÓDIGO

12.QUE ES Y COMO SE INICIA UNA VARIABLE EN PSEUDOCÓDIGO
El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se utilizara para la codificación del mismo.
Las principales características de este lenguaje son:
* Se puede ejecutar en un ordenador
* Es una forma de representación sencilla de utilizar y de manipular.
* Facilita el paso del programa al lenguaje de programación.
* Es independiente del lenguaje de programación que se vaya a utilizar.
* Es un método que facilita la programación y solución al algoritmo del programa.
Todo documento en pseudocódigo debe permitir la descripción de:
* Instrucciones primitivas
* Instrucciones de proceso
* Instrucciones de control
* Instrucciones compuestas
* Instrucciones de descripción
Estructura a seguir en su realización:
Cabecera:
* Programa:
* Modulo:
* Tipos de datos:
* Constantes:
* Variables:
Cuerpo:
* Inicio
* Instrucciones
* Fin

13.CONSTANTE
Una constante es un dato cuyo valor no puede cambiar durante la ejecución del programa. Recibe un valor en el momento de la compilación y este permanece inalterado durante todo el programa.
Como ya se ha comentado en el tema sobre las partes de un programa, las constantes se declaran en una sección que comienza con la palabra reservada const. Después de declarar una constante ya puedes usarla en el cuerpo principal del programa. Tienen varios usos: ser miembro en una expresion, en una comparación, asignar su valor a una variable, etc.

En el siguiente ejemplo se contemplan varios casos:

  const
    Min = 0;
    Max = 100;
    Sep = 10;
  var
    i : integer;

  begin
    i := Min;
    while i < Max do begin
      writeln(i);
      i := i + Sep
    end
  end.
   
En este ejemplo se declaran tres constantes (Min, Max y Sep). En la primera línea del cuerpo del programa se asigna una constante a una variable. En la siguiente, se usa una constante en una comparación. Y en la cuarta, la constante Sep interviene en una expresión que se asigna a una variable. El resultado de ejecutar este programa sería una impresión en pantalla de los números: 0, 10, 20, 30, 40, 50, 60, 70, 80 y 90.

Se puede hacer una división de las constantes en tres clases:
constantes literales (sin nombre)
constantes declaradas (con nombre)
constantes expresión
Constantes literales
Son valores de cualquier tipo que se utilizan directamente, no se declaran ya que no tienen nombre. En el siguiente ejemplo tienes un par de constantes literales (el 3, el 4, y el 3.1416):
VolumenEsfera := 4/3 * 3.1416 * Radio * Radio * Radio;
Constantes declaradas
También llamadas constantes con nombre, son las que se declaran en la sección const asignándoles un valor directamente. Por ejemplo:
const
Pi = 3.141592; (* valor real *)
Min = 0; (* entero *)
Max = 99; (* entero *)
Saludo = 'Hola'; (* cadena caract. *)
Constantes expresión
También se declaran en la sección const, pero a estas no se les asigna un valor directamente, sino que se les asigna una expresión. Esta expresión se evalúa en tiempo de compilación y el resultado se le asigna a la constante. Ejemplo:
const
Min = 0;
Max = 100;
Intervalo = 10;
N = (Max - Min) div Intervalo;
Centro = (Max - Min) div 2;

14.CONVENCIÓN
hacen uso de las mayúsculas y minúsculas en sus identificadores.

Entre ellas tenemos:
1. Estilo Pascal (PascalCase)
La primera letra del identificador y la primera letra de las siguientes palabras concatenadas están en mayúsculas. El estilo de mayúsculas y minúsculas Pascal se puede utilizar en identificadores de tres o más caracteres, por ejemplo:
ImageSprite
2. Estilo camelCase
La primera letra del identificador está en minúscula y la primera letra de las siguientes palabras concatenadas en mayúscula, por ejemplo:
imageSprite
3. Estilo Mayúsculas (ALL_CAPS)
Todas las letras del identificador se encuentran en mayúsculas ejemplo
IO
4. Estilo minúsculas (small_caps)
Todas las letras del identificador se encuentran en minúsculas ejemplo
system
Esta designación de la convención se utiliza muy poco
Cada lenguaje de programación hace uso de estos estilos según el identificador que use y de acuerdo a su convención.

15.LENGUAJE DE PROGRAMACIÓN
Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el comportamiento de una máquina, particularmente una computadora. Consiste en un conjunto de reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos, respectivamente. Aunque muchas veces se usa lenguaje de programación y lenguaje informático como si fuesen sinónimos, no tiene por qué ser así, ya que los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como, por ejemplo, el HTML.
Según la forma de ejecución
Lenguajes compilados
Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se requiere una corrida de compilación antes de procesar los datos de un problema.
Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con código binario).
Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el código.
Lenguajes interpretados
Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.
La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de producción.

16.LENGUAJE DE BAJO NIVEL
Se llaman de bajo nivel porque están muy cercanos al hardware del ordenador. Es necesario conocer a fondo la arquitectura de la máquina para la que se va a programar.
El primer lenguaje de este tipo que se utilizó fue el lenguaje máquina, que consiste en un conjunto de instrucciones en binario, es decir, con ceros y unos, con los cuales se indica al ordenador qué hacer. Este lenguaje es muy complicado y la posibilidad de cometer errores es muy alta, por lo que ya no se utiliza.
Para solventar estas dificultades apareció el lenguaje ensamblador, que consiste en asignar una abreviatura a cada instrucción en binario, de forma que sea más fácil recordarla y más difícil equivocarse. Sin embargo, con este lenguaje sigue siendo necesario conocer muy bien el hardware del ordenador.
Son comprensibles directamente por la máquina (aunque el ensamblador necesita una pequeña traducción)
Los programas se ejecutan muy rápidamente (si están bien escritos, claro)
Ocupan menos espacio en memoria
Permiten controlar directamente el hardware, por lo que son apropiados para la programación de sistemas

17.LENGUAJE DE ALTO NIVEL
un Lenguaje de Programación de Alto Nivel es el encargado de mostrar distintos Algoritmos de modo tal de que un usuario pueda leerlo, reorganizarlo e interpretarlo, distanciándose del que es propio de los ordenadores, que está solamente ligado a su mera ejecución siguiendo las órdenes que de allí derivan.
La creación entonces de un Lenguaje de Alto Nivel está orientada a que un usuario pueda organizar, ordenar y modificar un procesamiento de datos en forma sencilla y rápida, teniendo los conocimientos previos para sus distintas normativas y organizaciones, y una elaboración de un Código de Programación viable.

18.LENGUAJE DE NIVEL MEDIO
Lenguaje de medio nivel es un lenguaje de programación informática como el lenguaje C, que se encuentran entre los lenguajes de alto nivel y los lenguajes de bajo nivel.
Suelen ser clasificados muchas veces de alto nivel, pero permiten ciertos manejos de bajo nivel. Son precisos para ciertas aplicaciones como la creación de sistemas operativos, ya que permiten un manejo abstracto (independiente de la máquina, a diferencia del ensamblador), pero sin perder mucho del poder y eficiencia que tienen los lenguajes de bajo nivel.
Una característica distintiva, por ejemplo, que convierte a C en un lenguaje de medio nivel y al Pascal en un lenguaje de alto nivel es que en el primero es posible manejar las letras como si fueran números (en Pascal no), y por el contrario en Pascal es posible concatenar las cadenas de caracteres con el operador suma y copiarlas con la asignación (en C es el usuario el responsable de llamar a las funciones correspondientes).

19.GENERACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN
Algo parecido ha ocurrido con la programación de los ordenadores (el software), que se realiza en lenguajes que suelen clasificarse en cinco generaciones, de las que las tres primeras son evidentes, mientras no todo el mundo está de acuerdo en las otras dos. Estas generaciones no coincidieron exactamente en el tiempo con las de hardware, pero sí de forma aproximada, y son las siguientes:
Primera generación: Los primeros ordenadores se programaban directamente en código binario, que puede representarse mediante secuencias de ceros y unos sistema binario. Cada modelo de ordenador tiene su propio código, por esa razón se llama lenguaje de máquina.
Segunda generación: Los lenguajes simbólicos, asimismo propios de la máquina, simplifican la escritura de las instrucciones y las hacen más legibles.
Tercera generación: Los lenguajes de alto nivel sustituyen las instrucciones simbólicas por códigos independientes de la máquina, parecidas al lenguaje humano o al de las Matemáticas.
Cuarta generación: se ha dado este nombre a ciertas herramientas que permiten construir aplicaciones sencillas combinando piezas prefabricadas. Hoy se piensa que estas herramientas no son, propiamente hablando, lenguajes. Algunos proponen reservar el nombre de cuarta generación para la programación orientada a objetos.
Quinta generación: se llama así a veces a los lenguajes de la inteligencia artificial, aunque con el fracaso del proyecto japonés de la quinta generación el nombre ha caído en desuso.

20.CÓDIGO FUENTE
Texto escrito en un lenguaje de programación específico y que puede ser leído por un programador. Debe traducirse a lenguaje máquina para que pueda ser ejecutado por la computadora o a bytecode para que pueda ser ejecutado por un intérprete. Este proceso se denomina compilación.

Acceder al código fuente de un programa significa acceder a los algoritmos desarrollados por sus creadores. Es la única manera de modificar eficaz y eficientemente un programa.

Liberar un código fuente significa compartir ese texto con cualquier persona que lo desee, esto implica que cualquiera puede analizarlo, copiarlo o modificarlo. Las aplicaciones que liberan sus códigos suelen ser gratuitas bajo licencia GNU. La liberación de un código de un programa implica ciertos riesgos en cuando a la seguridad del mismo, pues su funcionamiento exacto queda expuesto. El código fuente no suele liberarse para las aplicaciones comerciales y no puede obtenerse el código fuente original a través de los programas ya compilados.

21.CÓDIGO MÁQUINA
se define como el Código Máquina a aquel que es el proveniente de la tarea de compilación efectuada directamente sobre el Código Fuente, con el que se obtiene posteriormente el Código de Bytes (en inglés, Bytecode) que es la conglomeración de distintos archivos que forman parte de ejecutables para que el ordenador pueda hacer uso del código anteriormente programado.
De este modo, tenemos que tener en cuenta que con un programa Editor se realiza el primer paso, la elaboración del Código Fuente, que continúa con la Compilación del mismo mediante un Programa Objeto que se encarga de traducir el mismo hacia el paso previo al Código Binario (es decir, la transmisión o no-transmisión de energía eléctrica) que aprovechan los dispositivos pertenecientes al ordenador.
Para que el Código Objeto pueda ser ejecutado finalmente, es necesario utilizar una aplicación llamada Enlazador (también conocido por su equivalente en inglés, Linker) que se encarga de crear todos los archivos necesarios para su ejecución, incluyendo además las Bibliotecas que permiten asignar las funciones a los distintos dispositivos del sistema, solicitar distintos Servicios al sistema operativo o básicamente hacer uso de todo el Hardware que sea necesario para la ejecución de dicho Programa o Aplicación que hemos creado.

22.COMPILADOR
Los compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (código fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (código objeto).

Básicamente, existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intérprete para ejecutarse en tiempo real).

Características de un compilador

Generalmente un compilador se divide en dos partes:

* Front End: parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionará.

* Back End: parte en donde se genera el código máquina exclusivo para una plataforma a partir de lo analizado en el front end.

Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker).

Existen varios tipos de compiladores: Compiladores cruzados, Compiladores optimizadores, Compiladores de una sola pasada, Compiladores de varias pasadas, Compiladores JIT (Just In Time).



23.INTÉRPRETE
En ciencias de la computación, intérprete o interpretador es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.
Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).
Para mejorar el desempeño, algunas implementaciones de programación de lenguajes de programación pueden interpretar o compilar el código fuente original en una más compacta forma intermedia y después traducir eso al código de máquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej. Python, UCSD Pascal y Java).
Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.
En la actualidad, uno de los entornos más comunes de uso de los intérpretes informáticos es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

24.SINTAXIS
A la forma visible de un lenguaje de programación se le conoce como sintaxis. La mayoría de los lenguajes de programación son puramente textuales, es decir, utilizan secuencias de texto que incluyen palabras, números y puntuación, de manera similar a los lenguajes naturales escritos. Por otra parte, hay algunos lenguajes de programación que son más gráficos en su naturaleza, utilizando relaciones visuales entre símbolos para especificar un programa.
La sintaxis de un lenguaje de programación describe las combinaciones posibles de los símbolos que forman un programa sintácticamente correcto. El significado que se le da a una combinación de símbolos es manejado por su semántica (ya sea formal o como parte del código duro de la referencia de implementación). Dado que la mayoría de los lenguajes son textuales, este artículo trata de la sintaxis textual.
La sintaxis de los lenguajes de programación es definida generalmente utilizando una combinación de expresiones regulares (para la estructura léxica) y la Notación de Backus-Naur (para la estructura gramática). Este es un ejemplo de una gramática simple, tomada de Lisp:

25.OPERADORES ARITMÉTICOS
Estos son los símbolos aritméticos básicos: suma (+), resta (-), multiplicación (*), división (/) y potenciación (^).
Este es un ejemplo de cómo usar los operadores aritméticos en TurtleScript:
$sumar = 1 + 1
$restar = 20 - 5
$multiplicar = 15 * 2
$dividir = 30 / 30
$potencia = 2 ^ 2
Los valores resultantes de estas operaciones aritméticos son asignados a variables. Puedes ver los valores resultantes en el inspector.
Si lo que quieres es realizar un cálculo simple, puedes hacer algo como esto:
escribir 2010-12
Ahora veamos un ejemplo con paréntesis:
escribir ( ( 20 - 5 ) * 2 / 30 ) + 1
Primero se calculan las operaciones que están dentro de los paréntesis. En este ejemplo, primero se calcula 20 - 5; el resultado se multiplica por 2, luego se divide por 30 y, por último, se le suma 1. El resultado final es 2. Los paréntesis pueden también usarse en otros casos.
KTurtle también tiene otras funciones aritméticas en forma de órdenes. Echa un vistazo a las siguientes órdenes, eso sí, teniendo en cuenta que se trata de operaciones avanzadas: redondear, aleatorio, raíz, pi, sen, cos, tan, arcsen, arccos, arctan.


26.OPERADORES RELACIONALES
Los operadores relacionales, también denominados operadores binarios lógicos y de comparación, se utilizan para comprobar la veracidad o falsedad de determinadas propuestas de relación (en realidad se trata respuestas a preguntas). Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto/falso, es decir, producen un resultado booleano (  3.2.1b)
Si la propuesta es cierta, el resultado es true (un valor distinto de cero), si es falsa false (cero). C++ dispone de los siguientes:
<      Menor que
>      Mayor que
<=    Menor o igual que
>=    Mayor o igual que
==    Igual que  (identidad)
!=     Desigual que (desigualdad)

27.Operadores lógicos
(verdadero/falso)
Mientras que los operadores aritméticos se usan principalmente con números, los operadores lógicos están pensados para usarse con valores lógicos (verdadero y falso). Hay solo tres operadores lógicos: y, o y no. El siguiente código de TurtleScript muestra cómo usarlos:
$y_1_1 = verdadero y verdadero  # -> verdadero
$y_1_0 = verdadero y falso  # -> falso
$y_0_1 = falso y verdadero  # -> falso
$y_0_0 = falso y falso  # -> falso

$o_1_1 = verdadero o verdadero # -> verdadero
$o_1_0 = verdadero o falso  # -> verdadero
$o_0_1 = falso o verdadero  # -> verdadero
$o_0_0 = falso o falso  # -> falso

$no_1 = no verdadero  # -> falso
$no_0 = no falso  # -> verdadero
Puedes ver los valores resultantes en el inspector, aunque también se proporcionan pequeños comentarios al final de las líneas. Y resulta en verdadero solo si ambas partes son verdaderos. O resulta en verdadero si una de las dos partes es verdadero. Y no transforma verdadero en falso yfalso en verdadero.
Los operadores lógicos aparecen resaltados en rosa.
Unos ejemplos más complejos:
Considera el siguiente ejemplo con and:
$a = 1
$b = 5
si (($a < 10) y ($b == 5)) y ($a < $b) {
  escribir "hola"
}
En este código de TurtleScript, el resultado de los tres operadores de comparación están agrupados mediante los operadores y. Esto significa que los tres resultados tienen que ser iguales a «verdadero» para que se escriba la palabra «hola».
Un ejemplo con o:
$n = 1
si ($n < 10) o ($n == 2) {
  escribir "hola"
}
En este código de TurtleScript, la parte izquierda del operador o es «verdadera», mientras que la derecha es «falsa». Ya que una de las dos partes del operador o es «verdadera», el resultado del operador o también lo es. Esto quiere decir que se escribe la palabra «hola».
Finalmente, un ejemplo con no, que transforma «verdadero» en «falso» y «falso» en verdadero». Fíjate:
$n = 1
si no ($n == 3) {
  escribir "hola"
} sino {
  escribir "no hola ;-)"
}

28.ESTRUCTURAS DE CONTROL
En programación, una estructura de control permite controlar el flujo de la ejecución de instrucciones. Con estas estructuras, el programador puede determinar el orden en que se ejecutarán las instrucciones que están dentro de estas estructuras.

Originalmente las líneas de código de programación (instrucciones) eran ejecutadas secuencialmente, o sea, una después de la otra. Para alterar el orden de ejecución se utilizaba el enunciado goto, llamado "transferencia de control". Dos investigadores, Bohm y Jacopini, demostraron que el goto traía grandes problemas en el desarrollo de programas. También demostraron que los programas podían ser escritos sin ningún enunciado goto utilizando tres estructuras de control: estructura de secuencia, estructura de selección, y estructura de repetición.

29.PROGRAMACIÓN ESTRUCTURADA
La programación estructurada permite la escritura de programas fáciles de leer y modificar. En un programa estructurado el flujo lógico se gobierna por tres estructuras de control básicas: secuenciales, repetitivas y selectivas.

Programación Estructurada.
Se refiere a un conjunto de técnicas que han ido evolucionando. Estas técnicas aumentan considerablemente la productividad del programa reduciendo el tiempo requerido para escribir, verificar, depurar y mantener los programas. La programación estructurada utiliza un número limitado de estructuras de control que minimizan la complejidad de los problemas y que reducen los errores. Ésta incorpora entre otros elementos: el diseño descendente, recursos abstractos y estructuras básicas.

30.PROGRAMACIÓN ORIENTADA A OBJETOS
La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.

No hay comentarios.:

Publicar un comentario