"AVA"

temarioanacleto2

FundaPrograma

FUNDAMENTOS DE PROGRAMACION


INTRODUCCION.

Los fundamentos de programación son las bases comunes a todos los programas. Es lo primero que tendrás que aprender incluso antes de elegir el programa con el que quieres programar.

Lo primero que tienes que saber es que el ordenador es una máquina eléctrica y solo entiende el llamado código binario (1 y 0).

1 = hay corriente

0 = No hay corriente




Este es su lenguaje. Entendernos con él mediante este código es muy difícil, por eso los lenguajes de programación se dividen en dos tipos diferentes dependiendo de su cercanía al lenguaje del ordenador.

El código del ordenador se basa en asignar a cada caracter (letra, signo, número, etc) una combinación de 8 ceros y unos ( 8 bits = byte) mediante un código que se llama ASCII. Por ejemplo la letra A se representa con lo combinación siguiente: 01100001.

Los lenguajes más cercanos al idioma del ordenador, llamados de bajo nivel, son muy complicados (casi como el código del ordenador) y poco usados. El más conocido es el código o lenguaje máquina, un código que el ordenador puede interpretar directamente. Aquí tienes un ejemplo:

8B542408 83FA0077 06B80000 0000C383

De este tipo de lenguajes, que solo suelen utilizar los que programan los ordenadores para su uso, no vamos hablar aquí. Hablaremos de los conocimientos comunes a los lenguajes de alto nivel.

Los lenguajes de programación de alto nivel permiten dar órdenes al ordenador con un lenguaje parecido al nuestro (Visual Basic, Pascal, Logo, C++, JavaScript, etc.) y siempre o casi siempre en ingles.
Hay programas de alto nivel como el GML o el Java que son programas interpretados, es decir, se analizan y ejecutan las instrucciones por el propio programa directamente. Otros necesitan un compilador, pero eso no es un problema, solo es un programa (software) que se encarga de traducir el programa hecho en lenguaje de programación al código del ordenador para que lo entienda.



Con un tipo u otro es igual, lo importante es que los lenguajes, como todo, hay que aprendérselos, pero tienen una ventaja, y es que tienen muchos puntos en común. Estos puntos son lo que vamos a estudiar aquí, los fundamentos de programación común a cualquier lenguaje de alto nivel.

Una vez aprendidos los fundamentos, tendrás que elegir el lenguaje que quieras usar, pero con estos conocimientos, todos te resultarán muy fáciles de aprender, solo tendrás que aprender unas cuantas instrucciones en ingles.

Programas y Algoritmos

Los lenguajes de programación, cuentan todos en su haber con un juego de "instrucciones". Una instrucción no es más que una orden que nosotros le damos a la máquina.

Y es que, al fin y al cabo, un programa no es más que una secuencia de instrucciones (escritas en algún lenguaje de programación) pensado para resolver algún tipo de problema. Hay que tener claro que si no sabemos resolver este problema, no podremos escribir el programa. Si no sabemos que es una suma, sería casi imposible hacer un programa para que nos sume dos números, a no ser que alguien nos ayudara.

A ti se te puede ocurrir una manera de resolverlo, a tu compañero, otra, lo importante es que las dos formas de resolverlo lleven al mismo resultado, la suma.

La forma con el que resuelves el problema, es lo que se llama algoritmo.

Significado de programación

¿Qué es programación? Al hablar de programación se hace referencia al efecto de programar, es decir, de organizar una secuencia de pasos ordenados a seguir para hacer cierta cosa. Este término puede utilizarse en muchos contextos, por ejemplo: “Vamos a programar una salida para este fin de semana largo” o “La programación de ese canal de televisión está bien lograda”.

Es común hablar de programación de por ejemplo: una salida, de las vacaciones o de un recorrido por una ciudad cuando queremos referirnos a armar itinerarios de lugares para recorrer, conocer o gente con la que encontrarnos; así también se utiliza mucho el término para referirse a la lista de programas con sus días y horarios de emisión de los canales de televisión, la lista de películas de un cine o las obras de un teatro.

Programación en Informática

Sin embargo, uno de los usos más amplios y complejos de la palabra programación se da en el ámbito de la informática, para hablar de la acción de crear programas o aplicaciones, a través del desarrollo de un código fuente, el cual se basa en el conjunto de instrucciones que sigue el ordenador para ejecutar un programa. Estas instrucciones se encuentran escritas en lenguaje de programación que luego son traducidas a un lenguaje de máquina, que puede ser interpretado y ejecutado por el hardware del equipo (parte física del equipo). Dicho código fuente es creado, diseñado, codificado, mantenido y depurado a través de la programación, donde el principal objetivo a lograr es el desarrollo de sistemas que sean eficaces, accesibles y agradables o amigables para el usuario.

Los programas informáticos suelen seguir algoritmos, que son el conjunto de instrucciones que se encuentran organizadas y relacionadas entre sí de cierta manera y que permiten llegar a la solución de un problema, y que a su vez contienen módulos más pequeños que le aportan detalles más finos. Todo esto a escala de gran complejidad forma parte de la programación informática que permite trabajar a los softwares de los equipos de computación y la cual suele ser llevada a cabo por técnicos o ingenieros en sistemas.

En los comienzos del desarrollo de la programación informática, se utilizaban lenguajes máquina muy básicos y limitados como el sistema binario (uso de los números 0 y 1 en distintas combinaciones); más tarde comenzaron a surgir lenguajes que hacían uso de códigos de palabras, y luego, conjuntos de algoritmos mucho más complejos que se denominaron lenguajes de alto nivel.

lenguajes de programación.




Breve historia de los lenguajes de programación

Inicios de la programación

Charles Babbage definió a mediados del siglo XIX lo que él llamó la máquina analítica. Se considera a esta máquina el diseño del primer ordenador. La realidad es que no se pudo construir hasta el siglo siguiente. El caso es que su colaboradora Ada Lovelace escribió en tarjetas perforadas una serie de instrucciones que la máquina iba a ser capaz de ejecutar. Se dice que eso significó el inicio de la ciencia de la programación de ordenadores.

En la segunda guerra mundial debido a las necesidades militares, la ciencia de la computación prospera y con ella aparece el famoso ENIAC (Electronic Numerical Integrator And Calculator), que se programaba cambiando su circuitería. Esa es la primera forma de programar (que aún se usa en numerosas máquinas) que sólo vale para máquinas de único propósito.
Si se cambia el propósito, hay que modificar la máquina. 

Código máquina.
Primera generación de lenguajes (1GL)

No mucho más tarde apareció la idea de que las máquinas fueran capaces de realizar más de una aplicación. Para lo cual se ideó el hecho de que hubiera una memoria donde se almacenaban esas instrucciones. Esa memoria se podía rellenar con datos procedentes del exterior. Inicialmente se utilizaron tarjetas perforadas para introducir las instrucciones.
Durante mucho tiempo esa fue la forma de programar, que teniendo en cuenta que las máquinas ya entendían sólo código binario, consistía en introducir la programación de la máquina mediante unos y ceros. El llamado código máquina.

Todavía los ordenadores es el único código que entienden, por lo que cualquier forma de programar debe de ser convertida a código máquina.

Sólo se ha utilizado por los programadores en los inicios de la informática. Su incomodidad de trabajo hace que sea impensable para ser utilizado hoy en día. Pero cualquier programa de ordenador debe, finalmente, ser convertido a este
código para que un ordenador puede ejecutar las instrucciones de dicho programa.

Un detalle a tener en cuenta es que el código máquina es distinto para cada tipo de procesador. Lo que hace que los programas en código máquina no sean portables entre distintas máquinas. 

Lenguaje ensamblado.
Segunda generación de lenguajes (2GL)

En los años 40 se intentó concebir un lenguaje más simbólico que permitiera no tener que programar utilizando código máquina. Poco más tarde se ideó el lenguaje ensamblador, que es la traducción del código máquina a una forma más textual. Cada tipo de instrucción se asocia a una palabra mnemotécnica (como SUM para sumar por ejemplo), de forma que cada palabra tiene traducción directa en el código máquina. Tras escribir el programa en código ensamblador, un programa (llamado también ensamblador) se encargará de traducir el código ensamblador a código máquina. Esta traducción es rápida puesto que cada línea en ensamblador tiene equivalente directo en código máquina (en los lenguajes modernos no ocurre esto).

La idea es la siguiente: si en el código máquina, el número binario 0000 significa sumar, y el número 0001 significa restar. Una instrucción máquina que sumara el número 8 (00001000 en binario) al número 16 (00010000 en binario) sería:

0000 00001000 00010000

Realmente no habría espacios en blanco, el ordenador entendería que los primeros cuatro BITS representan la instrucción y los 8 siguientes el primer número y los ocho siguientes el segundo número (suponiendo que los números ocupan 8 bits).

Lógicamente trabajar de esta forma es muy complicado. Por eso se podría utilizar la siguiente traducción en ensamblador:

SUM 8 16

Que ya se entiende mucho mejor.

Ejemplo2(programa que saca el texto “Hola mundo” por pantalla):

DATOS SEGMENT
saludo db "Hola mundo!!!","$"
DATOS ENDS
CODE SEGMENT
assume cs:code,ds:datos
START PROC
mov ax,datos
mov ds,ax
mov dx,offset saludo
mov ah,9
int 21h
mov ax,4C00h
int 21h
START ENDP
CODE ENDS
END START



Puesto que el ensamblador es una representación textual pero exacta del código máquina; cada programa sólo funcionará para la máquina en la que fue concebido el programa; es decir, no es portable. La ventaja de este lenguaje es que se puede controlar absolutamente el funcionamiento de la máquina, lo que permite crear programas muy eficientes. Lo malo es precisamente que hay que conocer muy bien el funcionamiento de la computadora para crear programas con esta técnica. Además las líneas requeridas para realizar una tarea se disparan ya que las instrucciones de la máquina son excesivamente simples.

Evolución de algunos lenguajes de programación






 

Lenguajes de alto nivel.
Lenguajes de tercera generación (3GL)



Aunque el ensamblador significó una notable mejora sobre el código máquina, seguía siendo excesivamente críptico. De hecho para hacer un programa sencillo requiere miles y miles de líneas de código. Para evitar los problemas del ensamblador apareció la tercera generación de lenguajes de programación, la de los lenguajes de alto nivel. En este caso el código vale para cualquier máquina pero deberá ser traducido mediante software especial que adaptará el código de alto nivel al código máquina correspondiente. Esta traducción es necesaria ya que el código en un lenguaje de alto nivel no se parece en absoluto al código máquina. 

Tras varios intentos de representar lenguajes, en 1957 aparece el que se considera el primer lenguaje de alto nivel, el FORTRAN (FORmula TRANslation), lenguaje orientado a resolver fórmulas matemáticos. Por ejemplo la forma en FORTRAN de escribir el texto Hola mundo por pantalla es: 

PROGRAM HOLA
PRINT *, '¡Hola, mundo!'
END

Poco a poco fueron evolucionando los lenguajes formando lenguajes cada vez mejores (ver ). Así en 1958 se crea LISP como lenguaje declarativo para expresiones matemáticas. Programa que escribe Hola mundo en lenguaje LISP: 

(format t "¡Hola, mundo!")

En 1960 la conferencia CODASYL se creo el COBOL como lenguaje de gestión en 1960. En 1963 se creo PL/I el primer lenguaje que admitía la multitarea y la programación modular. En COBOL el programa Hola mundo sería éste (como se ve es un lenguaje más declarativo):

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN SECTION.
DISPLAY "Hola mundo"
STOP RUN.

BASIC se creo en el año 1964 como lenguaje de programación sencillo de aprender en 1964 y ha sido, y es, uno de los lenguajes más populares. En 1968 se crea LOGO para enseñar a programar a los niños. Pascal se creo con la misma idea académica pero siendo ejemplo de lenguaje estructurado para Fundamentos de programación

Metodología de la programación
Programadores avanzados.

El creador del Pascal (Niklaus Wirdth) creo Modula en 1977 siendo un lenguaje estructurado para la programación de sistemas (intentando sustituir al C). Programa que escribe por pantalla Hola mundo en lenguaje Pascal):

PROGRAM HolaMundo;
BEGIN
Writeln('¡Hola, mundo!');
END.



Lenguajes de cuarta generación (4GL)



En los años 70 se empezó a utilizar éste término para hablar de lenguajes en los que apenas hay código y en su lugar aparecen indicaciones sobre qué es lo que el programa debe de obtener. Se consideraba que el lenguaje SQL (muy utilizado en las bases de datos) y sus derivados eran de cuarta generación. Los lenguajes de consulta de datos, creación de formularios, informes,... son lenguajes de cuarto nivel. Aparecieron con los sistemas de base de datos Actualmente se consideran lenguajes de éste tipo a aquellos lenguajes que se programan sin escribir casi código (lenguajes visuales), mientras que también se propone que éste nombre se reserve a los lenguajes orientados a objetos.

Lenguajes orientados a objetos



En los 80 llegan los lenguajes preparados para la programación orientada a objetos todos procedentes de Simula (1964) considerado el primer lenguaje con facilidades de uso de objetos. De estos destacó inmediatamente C++. A partir de C++ aparecieron numerosos lenguajes que convirtieron los lenguajes clásicos en lenguajes orientados a objetos (y además con mejoras en el entorno de programación, son los llamados lenguajes visuales): Visual Basic, Delphi (versión orientada a objetos de Pascal), Visual C++,... En 1995 aparece Java como lenguaje totalmente orientado a objetos y en el año 2000 aparece C# un lenguaje que toma la forma de trabajar de C++ y del propio Java. El programa Hola mundo en C# sería:

using System;
class MainClass
{
public static void Main()
{
Console.WriteLine("¡Hola, mundo!");
}
}


Lenguajes para la web



La popularidad de Internet ha producido lenguajes híbridos que se mezclan con el  código HTML con el que se crean las páginas web. HTML no es un lenguaje en sí sino un formato de texto pensado para crear páginas web. Éstos lenguajes se usan para poder realizar páginas web más potentes. Son lenguajes interpretados como JavaScript o VB Script, o lenguajes especiales para uso en servidores como ASP, JSP o PHP. Todos ellos permiten crear páginas web usando código mezcla de página web y lenguajes de programación sencillos. Ejemplo, página web escrita en lenguaje HTML y JavaScript que escribe en pantalla “Hola mundo” (en negitas aparece el código en JavaScript):

<html>
<head>
<title>Hola Mundo</title>
</head>
<body>
<script type="text/javascript">
document.write("¡Hola mundo!");
</script>

</body>
</html>


Tipos de lenguajes

Según el estilo de programación se puede hacer esta división: 

Lenguajes imperativos. Son lenguajes donde las instrucciones se ejecutan secuencialmente y van modificando la memoria del ordenador para producir las salidas requeridas. La mayoría de lenguajes (C, Pascal, Basic, Cobol, ...son de este tipo. Dentro de estos lenguajes están también los lenguajes orientados a objetos (C++, Java, C#,...)

Lenguajes declarativos. Son lenguajes que se concentran más en el qué, que en el cómo (cómo resolver el problema es la pregunta a realizarse cuando se usan lenguajes imperativos). Los lenguajes que se programan usando la pregunta  ¿qué queremos? son los declarativos. El más conocido de ellos es el lenguaje de consulta de Bases de datos, SQL. 

Lenguajes funcionales. Definen funciones, expresiones que nos responden a través de una serie de argumentos. Son lenguajes que usan expresiones matemáticas, absolutamente diferentes del lenguaje usado por las máquinas. El más conocido de ellos es el LISP. 

Lenguajes lógicos. Lenguajes utilizados para resolver expresiones lógicas. Utilizan la lógica para producir resultados. El más conocido es el PROLOG. 

Intérpretes



A la hora de convertir un programa en código máquina, se pueden utilizar dos tipos de software: intérpretes y compiladores. En el caso de los intérpretes se convierte cada línea a código máquina y se ejecuta ese código máquina antes de convertir la siguiente línea. De esa forma si las dos primeras líneas son correctas y la tercera tiene un fallo de sintaxis, veríamos el resultado de las dos primeras líneas y al llegar a la tercera se nos notificaría el fallo y finalizaría la ejecución. 

El intérprete hace una simulación de modo que parece que la máquina entiende directamente las instrucciones del lenguaje, pareciendo que ejecuta cada instrucción (como si fuese código máquina directo). El BASIC era un lenguaje interpretado, se traducía línea a línea. Hoy en día la mayoría de los lenguajes integrados en páginas web son interpretados, la razón es que como la descarga de Internet es lenta, es mejor que las instrucciones se vayan traduciendo según van llegando en lugar de cargar todas en el ordenador. Por eso lenguajes como JavaScript (o incluso, en parte, Java) son interpretados. proceso Un programa que se convierte a código máquina mediante un intérprete sigue estos pasos: 

(1) Lee la primera instrucción
(2) Comprueba si es correcta
(3) Convierte esa instrucción al código máquina equivalente
(4) Lee la siguiente instrucción
(5) Vuelve al paso 2 hasta terminar con todas las instrucciones



VENTAJAS
♦ Se tarda menos en crear el primer código máquina. El programa se ejecuta antes.
♦ No hace falta cargar todas las líneas para empezar a ver resultados (lo que hace que sea una técnica idónea para programas que se cargan desde Internet)

DESVENTAJAS
♦ El código máquina producido es peor ya que no se optimiza al valorar una sola línea cada vez. El código optimizado permite estudiar varias líneas a la vez para producir el mejor código máquina posible, por ello no es posible mediante el uso de intérpretes. 
♦ Todos los errores son errores en tiempo de ejecución, no se pueden detectar antes de lanzar el programa. Esto hace  que la depuración de los errores sea más compleja.
♦ El código máquina resultante gasta más espacio.
♦ Hay errores difícilmente detectables, ya que para que los errores se produzcan, las líneas de errores hay que ejecutarlas. Si la línea es condicional hasta que no probemos todas las posibilidades del programa, no sabremos todos los errores de sintaxis cometidos.

Compiladores

Se trata de software que traduce las instrucciones de un lenguaje de programación de alto nivel a código máquina. La diferencia con los intérpretes reside en que se analizan todas las líneas antes de empezar la traducción. Durante muchos años, los lenguajes potentes han sido compilados. El uso masivo de Internet ha propiciado que esta técnica a veces no sea adecuada y haya lenguajes modernos interpretados o semi interpretados, mitad se compila hacia un código intermedio y luego se interpreta línea a línea (esta técnica la siguen Java y los lenguajes de la plataforma .NET de Microsoft). 



Ventajas
♦ Se detectan errores antes de ejecutar el programa (errores de compilación)
♦ El código máquina generado es más rápido (ya que se optimiza)
♦ Es más fácil hacer procesos de depuración de código
Desventajas
♦ El proceso de compilación del código es lento.
♦ No es útil para ejecutar programas desde Internet ya que hay que descargar todo el programa antes de traducirle, lo que ralentiza mucho su uso.

Clasificación del software de sistemas y aplicación

Definición de software: Es un conjunto de instrucciones de programa detalladas que controlan y coordinan los componentes hardware de una computadora y controlan las operaciones de un sistema informático. Las operaciones que debe realizar el hardware son especificadas por una lista de instrucciones, llamadas programas, o software.

El proceso de escritura o codificación de un programa se denomina programación y las personas que se especializan en esta actividad se denominan programadores.

Clasificación del software:

** Software de sistemas
** Software de aplicación


Software de sistemas:


Es un conjunto de programas que gestionan los recursos de una computadora, tal como el procesador central, enlaces de comunicaciones y dispositivos periféricos.
Se encarga de coordinar las diferentes partes de una computadora y que conecta e interactúa entre el software de aplicación y el hardware de la computadora.
Se puede definir como el conjunto de programas necesarios para que la máquina funcione y a estos también se le conoce programas del sistema.

Ejemplo de software de sistemas:

-- El sistema operativo.
-- Los editores de texto.
-- Los compiladores o interpretes (lenguajes de programación).
-- Programas de utilerias.

Software de aplicación


Son un conjunto de programas desarrollados por empresas o usuarios individuales o en equipo, que ejecutan alguna tarea especifica.
Tiene como función principal asistir y ayudar a un usuario de una computadora para ejecutar tareas especificas.
Los programas de aplicación se pueden desarrollar con diferentes lenguajes y herramientas de software.
Ejemplos de Software de aplicación:

-- Aplicaciones de procesamiento de texto, que nos ayuda a crear documentos: OpenOffice, Microsoft Word, Google docs, ZohoWriter, etc.
-- Hojas de cálculo, que nos ayudan a automatizar calculos matematicos o estadisticos: Excel Presentaciones visiuales: PowerPoint.
-- Crear base de datos, que nos ayudan a crear archivos y registros de datos: Acces, Oracle, DB2, MySql.
-- Programas de contabilidad, nominas, recursos humanos, puntos de ventas.
-- Entre otros.

HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS



Todo empenzó en la década de los 40.

AÑOS 40

A finales de los años 1940, con lo que podríamos llamar la aparición de la primera generación de computadoras, se accedía directamente a la consola de la computadora desde la cual se actuaba sobre una serie de micro interruptores que permitían introducir directamente el programa en la memoria de la computadora (en realidad al existir tan pocas computadoras todos podrían considerarse prototipos y cada constructor lo hacía sin seguir ningún criterio predeterminado). Por aquel entonces no existían los sistemas operativos, y los programadores debían interactuar con el hardware del computador sin ayuda externa. Esto hacía que el tiempo de preparación para realizar una tarea fuera considerable. Además para poder utilizar la computadora debía hacerse por turnos. Para ello, en muchas instalaciones, se rellenaba un formulario de reserva en el que se indicaba el tiempo que el programador necesitaba para realizar su trabajo. En aquel entonces las computadoras eran máquinas muy costosas lo que hacía que estuvieran muy solicitadas y que sólo pudieran utilizarse en periodos breves de tiempo. Todo se hacia en lenguaje de máquina.

AÑOS 50

A principios de los años 50 con el objeto de facilitar la interacción entre persona y computador, los sistemas operativos hacen una aparición discreta y bastante simple, con conceptos tales como el monitor residente, el proceso por lotes y el almacenamiento temporal.

Monitor residente

Su funcionamiento era bastante simple, se limitaba a cargar los programas a memoria, leyéndolos de una cinta o de tarjetas perforadas, y ejecutarlos. El problema era encontrar una forma de optimizar el tiempo entre la retirada de un trabajo y el montaje del siguiente.

Procesamiento por lotes

Como solución para optimizar el tiempo de montaje surgió la idea de agrupar los trabajos en lotes, en una misma cinta o conjunto de tarjetas, de forma que se ejecutaran uno a continuación de otro sin perder apenas tiempo en la transición.

Almacenamiento temporal

Su objetivo era disminuir el tiempo de carga de los programas, haciendo simultánea la carga del programa o la salida de datos con la ejecución de la siguiente tarea. Para ello se utilizaban dos técnicas, el buffering y el spooling.

AÑOS 60

En los años 1960 se produjeron cambios notorios en varios campos de la informática,con la aparicion de el circuito cerrado la mayoría orientados a seguir incrementando el potencial de los computadores. Para ello se utilizaban técnicas de lo más diversas:

Multiprogramación

En un sistema multiprogramado la memoria principal alberga a más de un programa de usuario. La CPU ejecuta instrucciones de un programa, cuando el que se encuentra en ejecución realiza una operación de E/S; en lugar de esperar a que termine la operación de E/S, se pasa a ejecutar otro programa. Si éste realiza, a su vez, otra operación de E/S, se mandan las órdenes oportunas al controlador, y pasa a ejecutarse otro. De esta forma es posible, teniendo almacenado un conjunto adecuado de tareas en cada momento, utilizar de manera óptima los recursos disponibles.

Tiempo compartido

En este punto tenemos un sistema que hace buen uso de la electrónica disponible, pero adolece de falta de interactividad; para conseguirla debe convertirse en un sistema multiusuario, en el cual existen varios usuarios con un terminal en línea, utilizando el modo de operación de tiempo compartido. En estos sistemas los programas de los distintos usuarios residen en memoria. Al realizar una operación de E/S los programas ceden la CPU a otro programa, al igual que en la multiprogramación. Pero, a diferencia de ésta, cuando un programa lleva cierto tiempo ejecutándose el sistema operativo lo detiene para que se ejecute otro aplicación. Con esto se consigue repartir la CPU por igual entre los programas de los distintos usuarios, y los programas de los usuarios no se sienten demasiado lentos por el hecho de que los recursos sean compartidos y aparentemente se ejecutan de manera concurrente.

Tiempo real

Estos sistemas se usan en entornos donde se deben aceptar y procesar en tiempos muy breves un gran número de sucesos, en su mayoría externos al ordenador. Si el sistema no respeta las restricciones de tiempo en las que las operaciones deben entregar su resultado se dice que ha fallado. El tiempo de respuesta a su vez debe servir para resolver el problema o hecho planteado. El procesamiento de archivos se hace de una forma continua, pues se procesa el archivo antes de que entre el siguiente, sus primeros usos fueron y siguen siendo en telecomunicaciones.

Multiprocesador

Permite trabajar con máquinas que poseen más de un microprocesador. En un multiprocesador los procesadores comparten memoria y reloj.

Sistemas operativos desarrollados

Además del Atlas Supervisor y el OS/360, los sesenta marcaron el inicio de UNIX, a mediados de los 60 aparece Multics, sistema operativo multiusuario – multitarea desarrollado por los laboratorios Bell de AT&T y programado en PL/1 uno de los pocos SO desarrollados en un lenguaje de alto nivel en aquel tiempo, luego del fracaso del proyecto UNIX comienza a desarrollarse a partir de este a finales de la década.

AÑOS 70

Debido al avance de la electrónica, pudieron empezar a crearse circuitos con miles de transistores en un centímetro cuadrado de silicio, lo que llevaría, pocos años después, a producirse los primeros sistemas integrados. Ésta década se podría definir como la de los sistemas de propósito general y en ella se desarrollan tecnologías que se siguen utilizando en la actualidad. Es en los años 1970 cuando se produce el boom de los miniordenadores y la informática se acerca al nivel de usuario. En lo relativo a lenguajes de programación, es de señalar la aparición de Pascal y C, el último de los cuales se creó específicamente para reescribir por completo el código del sistema operativo Unix, convirtiéndolo en uno de los pocos SO escritos en un lenguaje de alto nivel. En el campo de la programación lógica se dio a luz la primera implementación de Prolog, y en la revolucionaria orientación a objetos, Smalltalk.

Inconvenientes de los sistemas existentes

Se trataba de sistemas grandes y costosos, pues antes no se había construido nada similar y muchos de los proyectos desarrollados terminaron con costos muy por encima del presupuesto y mucho después de lo que se marcaba como fecha de finalización. Además, aunque formaban una capa entre el hardware y el usuario, éste debía conocer un complejo lenguaje de control para realizar sus trabajos. Otro de los inconvenientes es el gran consumo de recursos que ocasionaban, debido a los grandes espacios de memoria principal y secundaria ocupados, así como el tiempo de procesador consumido. Es por esto que se intentó hacer hincapié en mejorar las técnicas ya existentes de multiprogramación y tiempo compartido.

Características de los nuevos sistemas

Para solventar los problemas antes comentados, se realizó un costosísimo trabajo para interponer una amplia capa de software entre el usuario y la máquina, de forma que el primero no tuviese que conocer ningún detalle de la circuitería.

Sistemas operativos desarrollados

* MULTICS (Multiplexed Information and Computing Service): Originalmente era un proyecto cooperativo liderado por Fernando Corbató del MIT, con General Electric y los laboratorios Bell, que comenzó en los 60, pero los laboratorios Bell abandonaron en 1969 para comenzar a crear el sistema UNIX. Se desarrolló inicialmente para el mainframe GE-645, un sistema de 36 bits; después fue soportado por la serie de máquinas Honeywell 6180.

Fue uno de los primeros sistemas operativos de tiempo compartido, que implementó un solo nivel de almacenamiento para el acceso a los datos, desechando la clara distinción entre los ficheros y los procesos en memoria, y uno de los primeros sistemas multiprocesador.

* MVS (Multiple Virtual Storage): Fue el sistema operativo más usado en los modelos de mainframes -ordenadores grandes, potentes y caros usados principalmente por grandes compañías para el procesamiento de grandes cantidades de datos- System/370 y System/390 de IBM, desarrollado también por IBM y lanzado al mercado por primera vez en 1974. Como características destacables, permitía la ejecución de múltiples tareas, además de que introdujo el concepto de memoria virtual y finalmente añadió la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de ahí su nombre.
* CP/M (Control Program/Monitor): Desarrollado por Gary Kildall para el microprocesador 8080/85 de Intel y el Zilog Z80, salió al mercado en 1976, distribuyéndose en disquetes de ocho pulgadas. Fue el SO más usado en las computadoras personales de esta década. Su éxito se debió a que era portátil, permitiendo que diferentes programas interactuasen con el hardware de una manera estandarizada. Estaba compuesto de dos subsistemas:
o CCP (Comand Control Processor): Intérprete de comandos que permitía introducir los mandatos con sus parámetros separados por espacios. Además, los traducía a instrucciones de alto nivel destinadas a BDOS.
o BDOS (Basic Disk Operating System): Traductor de las instrucciones en llamadas a la BIOS.

El hecho de que, años después, IBM eligiera para sus PCs a MS-DOS supuso su mayor fracaso, por lo que acabó desapareciendo.

AÑOS 80

Con la creación de los circuitos LSI -integración a gran escala-, chips que contenían miles de transistores en un centímetro cuadrado de silicio, empezó el auge de los ordenadores personales. En éstos se dejó un poco de lado el rendimiento y se buscó más que el sistema operativo fuera amigable, surgiendo menús, e interfaces gráficas. Esto reducía la rapidez de las aplicaciones, pero se volvían más prácticos y simples para los usuarios. En esta época, siguieron utilizándose lenguajes ya existentes, como Smalltalk o C, y nacieron otros nuevos, de los cuales se podrían destacar: C++ y Eiffel dentro del paradigma de la orientación a objetos, y Haskell y Miranda en el campo de la programación declarativa. Un avance importante que se estableció a mediados de la década de 1980 fue el desarrollo de redes de computadoras personales que corrían sistemas operativos en red y sistemas operativos distribuidos. En esta escena, dos sistemas operativos eran los mayoritarios: MS-DOS, escrito por Microsoft para IBM PC y otras computadoras que utilizaban la CPU Intel 8088 y sus sucesores, y UNIX, que dominaba en los ordenadores personales que hacían uso del Motorola 68000.

Apple Macintosh

El lanzamiento oficial se produjo en enero de 1984, al precio de 2495 dólares. Muchos usuarios, al ver que estaba completamente diseñado para funcionar a través de una GUI (Graphic User Interface), acostumbrados a la línea de comandos, lo tacharon de juguete. A pesar de todo, el Mac se situó a la cabeza en el mundo de la edición a nivel gráfico.

MS-DOS

En 1981 Microsoft compró un sistema operativo llamado QDOS que, tras realizar unas pocas modificaciones, se convirtió en la primera versión de MS-DOS (MicroSoft Disk Operating System). A partir de aquí se sucedieron una serie de cambios hasta llegar a la versión 7.1, a partir de la cual MS-DOS dejó de existir como tal y se convirtió en una parte integrada del sistema operativo Windows.

Microsoft Windows

Familia de sistemas operativos propietarios desarrollados por la empresa de software Microsoft Corporation, fundada por Bill Gates y Paul Allen. Todos ellos tienen en común el estar basados en una interfaz gráfica de usuario basada en el paradigma de ventanas, de ahí su nombre en inglés. Las versiones de Windows que han aparecido hasta el momento se basan en dos líneas separadas de desarrollo que finalmente convergen en una sola con la llegada de Windows XP. La primera de ellas conformaba la apariencia de un sistema operativo, aunque realmente se ejecutaba sobre MS-DOS.

Actualmente existe Windows Vista.

AÑOS 90

GNU/LinuxEn 1991 aparece la primer versión del núcleo de Linux. Creado por Linus Torvalds y un sinfín de colaboradores a través de Internet. Este sistema se basa en Unix, un sistema que en principio trabajaba en modo comandos, estilo MS-DOS. Hoy en día dispone de Ventanas, gracias a un servidor grafico y a gestores de ventanas como KDE, GNOME entre muchos. Recientemente GNU/Linux dispone de un aplicativo que convierte las ventanas en un entorno 3D como por ejemplo Beryl. Lo que permite utilizar linux de una forma muy visual y atractiva.




Noción de algoritmo


Según la RAE: conjunto ordenado y finito de operaciones que permite hallar la solución de un problema. Los algoritmos, como indica su definición oficial, son una serie de pasos que permiten obtener la solución a un problema. La palabra algoritmo procede del matemático Árabe Mohamed Ibn Al Kow Rizmi, el cual escribió sobre los años 800 y 825 su obra Quitad Al Mugabala, donde se recogía el sistema de numeración hindú y el concepto del cero. Fibonacci, tradujo la obra al latín y la llamó: Algoritmi Dicit.

El lenguaje algorítmico es aquel que implementa una solución teórica a un problema indicando las operaciones a realizar y el orden en el que se deben efectuarse. Por ejemplo en el caso de que nos encontremos en casa con una bombilla fundida en una lámpara, un posible algoritmo sería: 

(1) Comprobar si hay bombillas de repuesto
(2) En el caso de que las haya, sustituir la bombilla anterior por la nueva
(3) Si no hay bombillas de repuesto, bajar a comprar una nueva a la tienda y sustituir la vieja por la nueva

Los algoritmos son la base de la programación de ordenadores, ya que los programas de ordenador se puede entender que son algoritmos escritos en un código especial entendible por un ordenador. Lo malo del diseño de algoritmos está en que no podemos escribir lo que deseemos, el lenguaje ha utilizar no debe dejar posibilidad de duda, debe recoger todas las posibilidades. 

Por lo que los tres pasos anteriores pueden ser mucho más largos:

[1] Comprobar si hay bombillas de repuesto
       (1.1) Abrir el cajón de las bombillas
       (1.2) Observar si hay bombillas
[2] Si hay bombillas:
      (2.1) Coger la bombilla
      (2.2) Coger una silla
      (2.3) Subirse a la silla
      (2.4) Poner la bombilla en la lámpara
[3] Si no hay bombillas
      (3.1) Abrir la puerta
      (3.2) Bajar las escaleras....

Cómo se observa en un algoritmo las instrucciones pueden ser más largas de lo que parecen, por lo que hay que determinar qué instrucciones se pueden utilizar y qué instrucciones no se pueden utilizar. En el caso de los algoritmos preparados para el ordenador, se pueden utilizar sólo instrucciones muy concretas. 

Características de los algoritmos
características que deben de cumplir los algoritmos obligatoriamente:

♦ Un algoritmo debe resolver el problema para el que fue formulado. Lógicamente no sirve un algoritmo que no resuelve ese problema. En el caso de los programadores, a veces crean algoritmos que resuelven problemas diferentes al planteado. 
♦ Los algoritmos son independientes del ordenador. Los algoritmos se escriben para poder ser utilizados en cualquier máquina. 
♦ Los algoritmos deben de ser precisos. Los resultados de los cálculos deben de ser exactos, de manera rigurosa. No es válido un algoritmo que sólo aproxime la solución.
♦ Los algoritmos deben de ser finitos. Deben de finalizar en algún momento. No es un algoritmo válido aquel que produce situaciones en las que el algoritmo no termina.
♦ Los algoritmos deben de ser definidos: Si se sigue el algoritmo varias veces proporcionandole los mismos datos, se deben obtener siempre los mismos resultados.
♦ Los algoritmos deben de poder repetirse. Deben de permitir su ejecución las veces que haga falta. No son válidos los que tras ejecutarse una vez ya no pueden volver a hacerlo por la razón que sea. 

Características aconsejables para los algoritmos
♦ Validez. Un algoritmo es válido si carece de errores. Un algoritmo puede resolver el problema para el que se planteó y sin embargo no ser válido debido a que posee errores 
♦ Eficiencia. Un algoritmo es eficiente si obtiene la solución al problema en poco tiempo. No lo es si es lento en obtener el resultado. 
♦ Óptimo. Un algoritmo es óptimo si es el más eficiente posible y no contiene errores. La búsqueda de este algoritmo es el objetivo prioritario del programador. No siempre podemos garantizar que el algoritmo hallado es el óptimo, a veces sí.

Elementos que conforman un algoritmo
♦ Entrada. Los datos iniciales que posee el algoritmo antes de ejecutarse.
♦ Proceso. Acciones que lleva a cabo el algoritmo.
♦ Salida. Datos que obtiene finalmente el algoritmo.

5 FASES para resolver un problema en la programacion.

Cuando nos proponemos resolver problemas en programación siempre pasamos directamente al computador y empezamos a escribir código sin antes haber analizado en lo más mínimo el problema, o bueno lo vamos analizando y directamente vamos escribiendo el código y pues en algunos casos esta práctica funciona, claro está, cuando los problemas son sencillos o cuando eres un programador experimentado, no así con problemas más complejos y más aún cuando estas empezando a programar.

A veces pensamos que con hacer las cosas directamente vamos a ganar más tiempo, pero en realidad no es así, muchas de las veces el tiempo que se lleva programando un problema directamente sin haber hecho un análisis previo, es el doble o triple que si hubiésemos hecho previamente un análisis, por lo general se cometen muchos errores, que a la larga perdemos tiempo.

Un buen hábito y como buenos programadores es la de llevar una metodología para solucionar un problema por más mínimo que este sea. Es por eso que esta vez vamos a ver algunos pasos que debemos seguir para resolver un problema en programación y básicamente la idea es convertirlo en un hábito cada vez que vayamos a programar.

1. ANÁLISIS PREVIO DEL PROBLEMA


entender-el-problema

En esta etapa se debe definir y tener claro lo que el programa tiene que hacer junto con las tareas que debe realizar para llevar a cabo la solución, qué datos necesito para realizar la tareas, que formato deben tener los datos de entrada, de donde provienen los datos de entrada, como se obtienen esos datos, cómo interactúan los datos entre sí para obtener el resultado, muy importante tener claro cuál será el resultado que se desea obtener, tampoco dejar de lado las restricciones que puede haber al momento de procesar los datos..

De igual forma se debe analizar todos los escenarios que pueden darse ya que un cambio de escenario puede variar el resultado final del programa, siempre vale la pena cuestionarse y hacer la pregunta: y si pasa esto o aquello? qué comportamiento tomaría el programa.

Para clarificar dudas se debe pedir formatos (formas de presentación de los datos o de donde se obtienen los datos cuando se hacen de forma manual), fórmulas, realizar ejemplos y verificar los resultados.

Básicamente en este punto o fase se debe recoger todos los requerimientos y especificaciones del problema.

Este punto debe ser uno de los más importantes y críticos de la resolución de problemas ya que un mal análisis lleva a un mal diseño y posterior a un mal resultado.

En lo personal no importa el tiempo que demores en esta etapa, la idea es que quede bien claro todo, la primera vez puede que te demores un montón pero a medida que lo practicas vas cogiendo experiencia y si lo tomas como hábito en las próximas veces lo harás aún más rápido.

2. DISEÑO DEL ALGORITMO


diseno-algoritmo

Una vez que tenemos claro el problema, después de haber definido todas la entradas y salidas que va tener el programa, también las tareas a realizar, es hora de diseñar el algoritmo y que irá de acuerdo a todas las especificaciones anteriores y posteriormente será implementado en un lenguaje de programación para ser ejecutado por la computadora.

El algoritmo se lo puede hacer de cualquier forma: Pseudocódigo o Diagrama de Flujo, la idea principal es que sea entendible, y no solo por el que lo diseñó si no por cualquier persona.

En conclusión en la etapa anterior se define qué es lo que hará el programa, en esta fase, se define como lo hará.

Algo importante de este diseño es que sea entendible para el programador que lo va implementar.

3. CONFIGURACIÓN DEL ENTORNO DE DESARROLLO Y CODIFICACIÓN


codificacion

Esta etapa consiste en transcribir o adaptar el algoritmo a un lenguaje de programación, se tendrá que adaptar todos los pasos diseñados en el algoritmo con sentencias y sintaxis propias del lenguaje.

Verificar errores, organizar el código y comentarlo, son buenas prácticas que hacen programas más legibles y facilitan la depuración.

Previamente a la codificación se debe tener configurado el entorno de trabajo: IDEs, librerías, Frameworks (aunque este último no lo recomiendo si estas empezando a programar, es mejor aprender las cosas más básicas los fundamentos, todo a mano primero y luego los frameworks) y luego pasar el algoritmo al lenguaje de programación.

4. COMPILACIÓN Y PRUEBAS


compilar-probar

La fase de compilación permitirá detectar errores en tiempo de compilación, ejecución y lógicos, y en el caso de Java se generará uno o varios archivos bytecode que serán ejecutados por la computadora.
En esta fase también es necesario realizar pruebas con una gran cantidad de datos para encontrar posibles errores y corregirlos.

5. DOCUMENTACIÓN Y MANTENIMIENTO

         
documentacion

Por últimos se debe tener una documentación de todos los pasos hasta llegar a la solución del problema, a veces es un poco tedioso esta fase pero también es muy importante ya que muchas veces suceden modificaciones con el pasar del tiempo y estas se hace en algunos casos por otros programadores diferentes a los que lo crearon (que incluso cuando uno mismo va ha modificar no se acuerda que rayos hacia ese código, me ha pasado), y cuando un programa es pobre en documentación este proceso de modificación es totalmente complejo.

Herramientas para el diseño de algoritmos

Diagramas de flujo

Es el esquema más viejo de la informática. Se trata de una notación que pretende facilitar la escritura o la comprensión de  algoritmos. Gracias a ella se esquematiza el flujo del algoritmo. Fue muy útil al principio y todavía se usa como apoyo para explicar ciertos algoritmos. Si los algoritmos son complejos, este tipo de esquemas no son adecuados. No obstante cuando el problema se complica, resulta muy complejo de realizar y de entender. De ahí que actualmente, sólo se use con  fines educativos y no en la práctica. Pero sigue siendo interesante en el aprendizaje de la creación de algoritmos. Los diagramas utilizan símbolos especiales que ya están normalizados por organismos de estandarización como ANSI e ISO. símbolos principales 
La lista de símbolos que generalmente se utiliza en los diagramas de flujo es:


Plantilla para diagramas de flujo:



Ejemplo de un diagrama de flujo






Desventajas de los diagramas de flujo.

Los diagramas de flujo son interesantes como primer acercamiento a la programación ya que son fáciles de entender. De hecho se utilizan fuera de la programación como esquema para ilustrar el funcionamiento de algoritmos sencillos. Sin embargo cuando el algoritmo se complica, el diagrama de flujo se convierte en ininteligible. Además los diagramas de flujo no facilitan el aprendizaje de la programación estructurada, con lo que no se aconseja su uso a los programadores para diseñar algoritmos.

Pseudocódigo
Las bases de la programación estructurada fueron enunciadas por Niklaus Wirdth. Según este científico cualquier problema algorítmico podía resolverse con el uso de estos tres tipos de instrucciones:
♦ Secuenciales. Instrucciones que se ejecutan en orden normal. El flujo del programa ejecuta la instrucción y pasa a ejecutar la siguiente.
♦ Alternativas. Instrucciones en las que se evalúa una condición y dependiendo si el resultado es verdadero o no, el flujo del programa se dirigirá a una instrucción o a otra.
♦ Iterativas. Instrucciones que se repiten continuamente hasta que se cumple una determinada condición.

El tiempo le ha dado la razón y ha generado una programación que insta a todo programador a utilizar sólo instrucciones de esos tres tipos. Es lo que se conoce como programación estructurada. El propio Niklaus Wirdth diseñó el lenguaje Pascal como el primer lenguaje estructurado. Lo malo es que el Pascal al ser lenguaje completo incluye instrucciones excesivamente orientadas al ordenador. 
Por ello se aconseja para el diseño de algoritmos estructurados el uso de un lenguaje especial llamado pseudocódigo, que además se puede traducir a cualquier idioma (Pascal está basado en el inglés).  El pseudocódigo además permite el diseño modular de programas y el diseño descendente gracias a esta posibilidad Hay que tener en cuenta que existen multitud de pseudocódigos, es decir no hay un pseudocódigo 100% estándar. Pero sí hay gran cantidad de detalles aceptados por todos los que escriben pseudocódigos. Aquí se comenta el pseudocódigo que parece más aceptad. Hay que tener en cuenta que el pseudocódigo se basa en Pascal, por lo que la traducción a Pascal es casi directa.
El pseudocódigo son instrucciones escritas en un lenguaje orientado a ser entendido por un ordenador. Por ello en pseudocódigo sólo se pueden utilizar ciertas instrucciones. La escritura de las instrucciones debe cumplir reglas muy estrictas. Las únicas permitidas son: 
♦ De Entrada /Salida. Para leer o escribir datos desde el programa hacia el usuario.
♦ De proceso. Operaciones que realiza el algoritmo (suma, resta, cambio de valor,...)
♦ De control de flujo. Instrucciones alternativas o iterativas (bucles y condiciones).
♦ De declaración. Mediante las que se crean variables y subprogramas.
♦ Llamadas a subprogramas.
♦ Comentarios. Notas que se escriben junto al pseudocódigo para explicar mejor su funcionamiento.

Escritura en pseudocódigo

Las instrucciones que resuelven el algoritmo en pseudocódigo deben de estar encabezadas por la palabra inicio (en inglés begin) y cerradas por la palabra fin (en inglés end). Entre medias de estas palabras se sitúan el resto de instrucciones. Opcionalmente se puede poner delante del inicio la palabra programa seguida del nombre que queramos dar al algoritmo.  En definitiva la estructura de un algoritmo en pseudocódigo es:

programa nombreDelPrograma
inicio
instrucciones
....
fin


Hay que tener en cuenta estos detalles:
♦ Aunque no importan las mayúsculas y minúsculas en pseudocódigo, se aconsejan las minúsculas porque su lectura es  más clara y además porque hay muchos lenguajes en los que sí importa el hecho de hecho escribir en mayúsculas o minúsculas (C, Java, ...)
♦ Se aconseja que las instrucciones dejen un espacio (sangría) a la izquierda para que se vea más claro que están entre el inicio y el fin. Esta forma de escribir algoritmos permite leerlos mucho mejor.

Comentarios
En pseudocódigo los comentarios que se deseen poner (y esto es una práctica muy aconsejable) se ponen con los símbolos // al principio de la línea de comentario (en algunas notaciones se escribe **). Cada línea de comentario debe comenzar con esos símbolos: 

inicio
instrucciones
//comentario
//comentario
instrucciones
fin

Ejemplos de Pseudocódigo

1. Pseudocódigo para un programa que nos sume dos número introducidos por el teclado:

Inicio

Escribir "Introduce el primer número";
Lee numero1;
Escribir "Introduce el segundo número";
Leer numero2;
resultado= numero1 + numero2;
Escribir resultado;
Fin


Recuerda: cuando queremos escribir en pantalla una variable, como en este caso la variable resultado, no se pone entre comillas.

Importante: cuando acabamos una instrucción siempre se pone ; antes de empezar la siguiente.

2. Pseudocódigo para un programa que nos diga la tabla de multiplicar del número que le digamos (introducido por el teclado).

Programa: TablaMultiplicar

numericas: t, num , total;
Inicio
Escribir "Introduce un número"
Leer num
InicioDesde
Desde t=1 hasta t=10 repetir
hacer total = num*t
Escribir: total
finDesde
Fin


Diagramas estructurados (Nassi - Schneiderman)


El diagrama estructurado N-S es una técnica hibrida (una mezcla) entre Diagramas de Flujo y Pseudocódigo.

Esta técnica, también conocida como Diagrama de Chapín, utiliza una serie de cajas, similar a los diagramas de flujos, pero no requiere la utilización de flechas, debido a que su flujo siempre es descendente.

Diagramas Nassi-Schneiderman

Características de un buen diagrama Nassi-Schneiderman:

• En la primera caja debe ir el nombre o título del algoritmo, en el recuadro siguiente debe ir la palabra Inicio.
• La última instrucción de un Diagrama NS debe ser el recuadro Fin.
• Todas las declaraciones de variables, funciones deben estar especificadas bajo el recuadro que contiene la palabra Inicio.
• Las estructuras de selección y cíclicas deben estar lo más clara posible
• El diseño debe caer en una hoja, a excepción de la utilización de funciones, las cuales pueden estar en otra hoja, debido a que se consideran un algoritmo diferente.

Desventajas de los diagramas NS:

• En algoritmos extensos su diseño es muy difícil de comprender.
• La mantención ó modificación de este tipo de diagramas es tediosa.
• Requiere de hojas muy extensas para ser escrito, debido a que carece de conectores que permitan su conexión con otras hojas.

Simbología utilizada en Técnica Nassi-Schneiderman





Comparacion: Diagrama Nissa vs Diagrama Flujo




Tipos de programacion


Existen varias clases de programación, dependiendo de los métodos utilizados y las técnicas empleadas.
Los tipos o técnicas de programación son bastante variados, aunque puede que muchos de los lectores sólo conozcan una metodología para realizar programas. En la mayoría de los casos, las técnicas se centran en programación modular y programación estructurada, pero existen otros tipos de programación. Los explicaremos a lo largo del artículo.

Programación estructurada (PE)

La programación estructurada esta compuesta por un conjunto de técnicas que han ido evolucionando aumentando considerablemente la productividad del programa reduciendo el tiempo de depuración y mantenimiento del mismo.

Esta programación estructurada utiliza un número limitado de estructuras de control, reduciendo así considerablemente los errores.

Esta técnica incorpora:

1.-Diseño descendente (top-dow): el problema se descompone en etapas o estructuras jerárquicas.
2.-Recursos abstractos (simplicidad): consiste en descompones las acciones complejas en otras más simples capaces de ser resueltas con mayor facilidad.
3.-Estructuras básicas: existen tres tipos de estructuras básicas:
4.-Estructuras secuénciales: cada acción sigue a otra acción secuencialmente. La salida de una acción es la entrada de otra.
5.-Estructuras selectivas: en estas estructuras se evalúan las condiciones y en función del resultado de las mismas se realizan unas acciones u otras. Se utilizan expresiones lógicas.
6.-Estructuras repetitivas: son secuencias de instrucciones que se repiten un número determinado de veces.

Las principales ventajas de la programación estructurada son:

*--Los programas son mas fáciles de entender
*--Se reduce la complejidad de las pruebas
*--Aumenta la productividad del programador
*--Los programas queden mejor documentados internamente.

Un programa esta estructurado si posee un único punto de entrada y sólo uno de salida, existen de "1 a n" caminos desde el principio hasta el fin del programa y por último, que todas las instrucciones son ejecutables sin que aparezcan bucles infinitos.

Programación modular

En la programación modular consta de varias secciones dividas de forma que interactúan a través de llamadas a procedimientos, que integran el programa en su totalidad.

En la programación modular, el programa principal coordina las llamadas a los módulos secundarios y pasa los datos necesarios en forma de parámetros.

A su vez cada modulo puede contener sus propios datos y llamar a otros módulos o funciones.

Programación orientada a objetos (POO)

Se trata de una técnica que aumenta considerablemente la velocidad de desarrollo de los programas gracias a la reutilización de los objetos.

El elemento principal de la programación orientada a objetos es el objeto.
El objeto es un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización.
Un objeto contiene varios datos bien estructurados y pueden ser visibles o no dependiendo del programador y las acciones del programa en ese momento.

El polimorfismo y la herencia son unas de sus principales características y por ello dedicaremos más adelante un artículo exclusivamente a tratar estos dos términos.

Programación concurrente

Este tipo de programación se utiliza cuando tenemos que realizar varias acciones a la vez.

Se suele utilizar para controlar los accesos de usuarios y programas a un recurso de forma simultanea.

Se trata de una programación más lenta y laboriosa, obteniendo unos resultados lentos en las acciones.

Programación funcional

Se caracteriza principalmente por permitir declarar y llamar a funciones dentro de otras funciones.

Programación lógica

Se suele utilizar en la inteligencia artificial y pequeños programas infantiles. Se trata de una programación basada en el cálculo de predicados (una teoría matemática que permite lograr que un ordenador basándose en hecho y reglas lógicas, pueda dar soluciones inteligentes).

Estructuras de control

Concepto: Permiten modificar el flujo de ejecución de las instrucciones de un programa informático.
En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.

Con las estructuras de control se puede:

** De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else)
** De acuerdo al valor de una variable, ejecutar un grupo u otro de sentencias (Select-Case)
** Ejecutar un grupo de sentencias mientras se cumpla una condición (Do-While)
** Ejecutar un grupo de sentencias hasta que se cumpla una condición (Do-Until)
** Ejecutar un grupo de sentencias un número determinado de veces (For-Next)
** Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programación se rija por los principios de la programación estructurada.

Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura.

Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos guardados.

 
Tipos de estructura de control
Algunas estructuras de control en el lenguaje Java


El término "estructuras de control", viene del campo de la ciencia computacional. Cuando se presentan implementaciones de Java para las estructuras de control, nos referimos a ellas con la terminología de la Especificación del lenguaje Java, que se refiera a ella como instrucciones.

Ejecución secuencial

Pero por lo general las instrucciones se ejecutan una después de la otra, en el orden en que están escritas, es decir, en secuencia. Este proceso se conoce como ejecución secuencial.

Transferencia de control

En Java, como en otros lenguajes de programación por excelencia como C y C++, el programador puede especificar que las siguientes instrucciones a ejecutarse tal vez no sea la siguiente en secuencia. Esto se conoce como transferencia de control. Hay que tener en cuenta que la instrucción goto es una palabra reservada pero no se utiliza ni se recomienda. Un programa bien estructurado no necesita de esta instrucción

De selección

Las estructuras de control de selección, ejecutan un bloque de instrucciones u otro, o saltan a un subprograma o subrutina según se cumpla o no una condición.

Estructura de control

Las estructuras de control, denominadas también sentencias de control, permiten tomar decisiones y realizar un proceso repetidas veces. Se trata de estructuras muy importantes, ya que son las encargadas de controlar el flujo de un programa, según los requerimientos del mismo.

Selección if simple

Se trata de una estructura de control que permite redirigir un curso de acción según la evaluación de una condición simple, sea falsa o verdadera.

Si la condición es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario, se ejecuta el bloque de sentencias 2.

IF (Condición) THEN
(Bloque de sentencias 1)
ELSE
(Bloque de sentencias 2)
END IF

Se pueden plantear múltiples concisiones simultáneamente, si se cumple la (Condición 1), se ejecuta (Bloque de sentencias 1) en caso contrario se comprueba la (Condición 2), si es cierta se ejecuta (Bloque de sentencias 2), y así sucesivamente hasta n condiciones, si ninguna de ellas es cumple se ejecuta (Bloque de sentencias else).

IF (Condición 1) THEN
(Bloque de sentencias 1)
ELSEIF (Condición 2) THEN
(Bloque de sentencias 2)

.....

ELSEIF (Condición n) THEN
(Bloque de sentencias n)
ELSE
(Bloque de sentencias ELSE)
END IF
Select-Case


Esta sentencia permite ejecutar una de entre varias acciones en función del valor de una expresión. Es una alternativa a if then else cuando se compara la misma expresión con diferentes valores.

Se evalúa la expresión, dando como resultado un número.
Luego, se recorren los "Case" dentro de la estructura buscando que el número coincida con uno de los valores.
Es necesario que coincidan todos sus valores.
Cuando se encuentra la primera coincidencia, se ejecuta el bloque de sentencias correspondiente y se sale de la estructura Select-Case.
Si no se encuentra ninguna coincidencia con ningún valor, se ejecuta el bloque de sentencias de la sección "Case Else".
SELECT (Expresión)
CASE Valor1
(Bloque de sentencias 1)
CASE Valor2
(Bloque de sentencias 2)
CASE Valor n
(Bloque de sentencias n)
CASE ELSE
(Bloque de sentencias "Else")
END SELECT

Estructuras de control iterativas

Las estructuras de control iterativas o de repetición, inician o repiten un bloque de instrucciones si se cumple una condición o mientras se cumple una condición.

Do-While

Mientras la condición sea verdadera, se ejecutarán las sentencias del bloque.

DO WHILE (Condición)
(Bloque de sentencias)
LOOP

que también puede expresarse:

WHILE (Condición)
(Bloque de sentencias)
WEND
Do-Until


Se ejecuta el bloque de sentencias, hasta que la condición sea verdadera

DO
(Bloque de sentencias)
LOOP UNTIL (Condición)
For-Next


La sentencia For da lugar a un lazo o bucle, y permite ejecutar un conjunto de sentencias cierto número de veces.

Primero, se evalúan las expresiones 1 y 2, dando como resultado dos números.
La variable del bucle recorrerá los valores desde el número dado por la expresión 1 hasta el número dado por la expresión 2.
El bloque de sentencias se ejecutará en cada uno de los valores que tome la variable del bucle.
FOR (Variable) = (Expresión1) TO (Expresión2) STEP (Salto)
(Bloque de sentencias)
NEXT

Estructuras anidadas
Las estructuras de control básicas pueden anidarse, es decir pueden ponerse una dentro de otra.

Estructura For-Next dentro de una estructura If-Then-Else

IF A > B THEN
FOR X = 1 TO 5
(Bloque de sentencias 1)
NEXT
ELSE
(Bloque de instrucciones 2)
END IF

Estructura If-Then-Else dentro de estructura For-Next

FOR x = 10 TO 20 STEP 2
IF A == C THEN
(Bloque de instrucciones)
ELSE
(Bloque de instrucciones)
END IF
NEXT

Estructura For-Next que está dentro de estructura Do-While

DO WHILE A > 0
FOR X = 1 TO 10
(Bloque de instrucciones)
NEXT
A = A - 1
LOOP


Estructura general de un programa
 Un programa puede considerarse como una secuencia de acciones (instrucciones) que manipulan un conjunto de objetos (datos).

Bloques de un programa

Bloque de declaraciones: en él se especifican todos los objetos que utiliza el programa (constantes, variables, tablas, registros, archivos, etc.).
Bloque de instrucciones: constituido por el conjunto de operaciones que se han de realizar para la obtención de los resultados deseados.

Partes principales de un programa.

Dentro del bloque de instrucciones de un programa se pueden diferenciar tres partes fundamentales. En algunos casos, estas tres partes están perfectamente delimitadas, pero en la mayoría sus instrucciones quedan entremezcladas a lo largo del programa, si bien mantienen una cierta localización geométrica impuesta por la propia naturaleza de las mismas.

1.-Entrada de datos: la constituyen todas aquellas instrucciones que toman datos de un dispositivo externo, almacenándolos en la memoria central para que puedan ser procesados.
2.-Proceso o algoritmo: está formado por las instrucciones que modifican los objetos a partir de su estado inicial hasta el estado final, dejando éstos disponibles en la memoria central.
3.-Salida de resultados: conjunto de instrucciones que toman los datos finales de la memoria central y los envían a los dispositivos externos.

Clasificación de las Instrucciones.
Una instrucción se caracteriza por un estado inicial y final del entorno. El estado final de una instrucción coincide con el inicial de la siguiente. No siempre una instrucción modifica el entorno, pues su cometido puede limitarse a una mera observación del mismo o a un cambio en el orden de ejecución de otras. Las instrucciones pueden ser:

** Instrucciones de declaración: Se utilizan en aquellos lenguajes de programación que no tienen declaración explícita de los objetos. Su misión consiste en indicar al procesador que reserve espacio en la memoria para un objeto del programa, indicando asimismo su nombre, tipo y características.
**Instrucciones primitivas: Son aquellas que ejecuta el procesador de modo inmediato. Las principales son asignación, entrada y salida.
**Instrucción de asignación: Consiste en calcular el valor de una expresión y almacenarlo en una variable. En algún lenguaje es preciso calcular previamente el resultado de la expresión, pues la instrucción de asignación sólo permite el movimiento de un valor simple.
**Instrucción de entrada: Toma un dato de un dispositivo de entrada y lo almacena en un objeto. En algún lenguaje, los datos de entrada no provienen de un dispositivo externo, sino que han sido colocados previamente en el mismo programa.
Instrucción de salida: Toma el valor de una expresión u objeto y lo lleva a un dispositivo externo.
**Instrucciones compuestas: Son aquellas que el procesador no puede ejecutar directamente, sino que realiza una llamada a un subprograma, subrutina o párrafo.
**Instrucciones de control: Son aquellas de controlar la ejecución de otras instrucciones.
Instrucción alternativa: Controla la ejecución de unas u otras instrucciones según una condición. Puede ser simple o doble (SI y SINO).
**Instrucción de salto incondicional: Altera la secuencia normal de ejecución de un programa, continuando la misma en la línea indicada en la propia instrucción (IR A).
**Instrucción de salto condicional: Altera la secuencia normal de ejecución de un programa únicamente en el caso de cumplimiento de una condición asociada a la propia instrucción (SI ... IR A).
**Instrucción repetitiva: Hace que se repitan una o varias instrucciones un número determinado o indeterminado de veces (PARA, MIENTRAS, HASTA e ITERAR).

Elementos auxiliares de un programa

Son variables que realizan funciones específicas dentro de un programa, y por su gran utilidad, frecuencia de uso y peculiaridades, conviene hacer un estudio separado de las mismas. Las más importantes son:

Contadores: Un contador es un campo de memoria cuyo valor se incrementa en una cantidad fija, positiva o negativa, generalmente asociado a un bucle. Toma un valor inicial antes de comenzar su función, y cada vez que se realiza el suceso, incrementa su valor. Se utiliza en los siguientes casos:
--- Para contabilizar el número de veces que es necesario repetir una acción (variable de control de un bucle).
--- Para contar un suceso particular solicitado por el enunciado del problema (asociado a un bucle o independientemente).

Acumuladores: Un acumulador es un campo de memoria cuyo valor se incrementa sucesivas veces en cantidades variables. Se utiliza en aquellos casos en que se desea obtener el total acumulado de un conjunto de cantidades, siendo preciso inicializarlo con el valor 0. También en las situaciones en que hay que obtener un total como producto de distintas cantidades se utiliza un acumulador, debiéndose inicializar con el valor 1.

Interruptores (switches): Un interruptor es un campo de memoria que puede tomar dos valores exclusivos (0 y 1, -1 y 1, FALSO y CIERTO, etc.). Se utiliza para:
--- Recordar en un determinado punto de un programa la ocurrencia o no de un suceso anterior, para salir de un bucle o para decidir en una instrucción alternativa qué acción realizar.
--- Para hacer que dos acciones diferentes se ejecuten alternativamente dentro de un bucle.

Tipos de programas
Un programa, por lo general, estará compuesto por una secuencia de acciones, algunas de las cuales serán alternativas o repetitivas. En determinados programas sencillos, no se da esta mezcla de acciones, en cuyo caso se pueden clasificar como sigue:

Programas lineales: consisten en una secuencia de acciones primitivas (su ejecución es lineal en el orden en que han sido escritas).
Programas alternativos: consisten en el anidamiento de acciones alternativas (las tablas de decisión se realizan mediante programas alternativos).
Programas cíclicos: son aquellos en los que un conjunto de acciones se repiten un número determinado o indeterminado de veces (un programa de este tipo se denomina bucle).

Otra clasificación relativa a la aplicación desarrollada por el programa es:

Programas de gestión: se caracterizan por el manejo de gran cantidad de datos con pocos cálculos (resuelven problemas de gestión).
Programas técnicos-científicos: al contrario que los anteriores, realizan gran cantidad de cálculos con pocos datos (revuelven problemas matemáticos, físicos, etc.).
Programas de diseño (CAD): se caracterizan por la utilización de técnicas gráficas para resolver problemas de diseño.
Programas de simulación: intentan reflejar una situación real, para facilitar su estudio.
Programas educativos (EAO): utilizan las ventajas del ordenador para la docencia.
Programas de inteligencia artificial: se utilizan para simular el razonamiento humano.

Identificadores, Constantes, Variables.
Identificador.

Un identificador es un conjunto de caracteres alfanuméricos de cualquier longitud que sirve para identificar las entidades del programa (clases, funciones, variables, tipos compuestos) Los identificadores pueden ser combinaciones de letras y números. Cada lenguaje tiene sus propias reglas que definen como pueden estar construidos. Cuando un identificador se asocia a una entidad concreta, entonces es el “nombre” de dicha entidad, y en adelante la representa en el programa. Nombrar las entidades hace posible referirse a las mismas, lo cual es esencial para cualquier tipo de procesamiento simbólico.

Constantes:

Una constante es un dato numérico o alfanumérico que no cambia durante todo el desarrollo del algoritmo o durante la ejecución del programa. Es un objeto de valor invariable. Para expresar una constante se escribe explícitamente su valor.

Tipos de Constantes:

Constantes Numéricas (Enteras y Reales)
Constantes Alfanuméricas
Constantes Lógicas (Boolenas)
Las constantes pueden ser:

Constantes sin nombre: Es una expresión numérica donde se puede utilizar directamente el valor.

Constantes con nombre: Se hace una reserva de memoria en la cual se guarda el valor que será utilizado como constante.

Ejemplo:

a) PI = 3.1416

b) E = 2.718228

c) Iva = 0.15



Variables:

Son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información.

Tipos de variables:

Variables Numéricas (Enteras y Reales)
Variables Alfanuméricas

a) Caracteres alfabéticos

b) Dígitos

c) Caracteres especiales

Variables Lógicas (Boolenas)
Son las que únicamente pueden contener dos valores, los cuales son:

Valor Verdadero ó 1
Valor Falso ó 0
Estos tipos de variables pueden tomar únicamente valores del mismo tipo, es decir si la variable es entera solamente puede almacenar datos enteros.

Ejemplo:

Una variable declarada como cadena solo puede tomar valores correspondientes a ese tipo.

Nombre = "Anacleto Moore Stone"







 
Hoy habia 4 visitantes (7 clics a subpáginas) ¡Aqui en esta página!
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis