OGO_SEP.jpg" width="110" />












  • .
    .

    9.-HISTORIA DE LA PROGRAMACION

    HISTORIA DE LA PROGRAMACION



    Sobre los últimos 50 años, los idiomas que programan han evolucionado del código binario de máquina a herramientas poderosas que crean las abstracciones complejas. Es importante entender por qué los idiomas han evolucionado, y qué capacidades que los idiomas más nuevos nos dan.

    "Tan largo como no había máquinas, programar era ningún problema; cuando tuvimos unos pocas computadoras débiles, programar llegó a ser un problema templado y ahora que tenemos las computadoras gigantescas, programar ha llegado a ser un problema igualmente gigantesco. En este sentido que la industria electrónica no ha resuelto un solo problema, tiene sólo los creó - ha creado el problema de usar su producto". [Edsger. W. Dijkstra. "El Programista Humilde" (la Conferencia del Premio de Turing), Comunicaciones del ACM, Vol 15, No. 10 (el octubre 1972).]

    E. W. Dijkstra habló estas palabras proféticas casi hace 28 años en su es la conferencia del Premio de Turing. En aquel momento, el 'las computadoras gigantescas él radio de probablemente tenido entre 64 y 128 kilobytes de la memoria verdadera, y a lo más unos pocos mega octetos de artefactos de almacenamiento de acceso directo. Si él pensó que el problema era gigantesco entonces...

    Uno de las llaves a programar exitoso son el concepto de la abstracción. La abstracción es la llave a la construcción sistemas complejos de software. Como el tamaño de nuestros problemas crece, la necesidad para la abstracción dramáticamente aumentos. En sistemas sencillos, característica de idiomas usados en el 1950s y '60s, un solo programista podría entender el problema entero, y por lo tanto manipula todas estructuras del programa y datos. Los programistas son hoy incapaces de entender todos los programas y los datos - es apenas demasiado grande. La abstracción se requiere a permitir que el programista para agarrar los conceptos necesarios.

    La mayoría de los libros y el reglamento en la historia de programar los idiomas tienden a discutir los idiomas en términos de generaciones. Esto es un arreglo útil para clasificar los idiomas por la edad.

    Primera Generación
    Al desarrollarse las primeras computadoras electrónicas, se vio la necesidad de programarlas, es decir, de almacenar en memoria la información sobre la tarea que iban a ejecutar. Las primeras se usaban como calculadoras simples; se les indicaban los pasos de cálculo, uno por uno.

    John Von Neumann desarrolló el modelo que lleva su nombre, para describir este concepto de "programa almacenado". En este modelo, se tiene una abstracción de la memoria como un conjunto de celdas, que almacenan simplemente números. Estos números pueden representar dos cosas: los datos, sobre los que va a trabajar el programa; o bien, el programa en sí.

    ¿Cómo es que describimos un programa como números? Se tenía el problema de representar las acciones que iba a realizar la computadora, y que la memoria, al estar compuesta por switches correspondientes al concepto de bit, solamente nos permitía almacenar números binarios.

    Los lenguajes más primitivos fueron los lenguajes de máquina. Esto, ya que el hardware se desarrolló antes del software, y además cualquier software finalmente tiene que expresarse en el lenguaje que maneja el hardware.

    La programación en esos momentos era sumamente tediosa, pues el programador tenía que "bajarse" al nivel de la máquina y decirle, paso a pasito, cada punto de la tarea que tenía que realizar. Además, debía expresarlo en forma numérica; y por supuesto, este proceso era propenso a errores, con lo que la productividad del programador era muy limitada. Sin embargo, hay que recordar que en estos momentos, simplemente aún no existía alternativa.

    Segunada Generación
    El primer gran avance que se dio, como ya se comentó, fue la abstracción dada por el Lenguaje Ensamblador, y con él, el nacimiento de las primeras herramientas automáticas para generar el código máquina. Esto redujo los errores triviales, como podía ser el número que correspondía a una operación, que son sumamente engorrosos y difíciles de detectar, pero fáciles de cometer. Sin embargo, aún aquí es fácil para el programador perderse y cometer errores de lógica, pues debe bajar al nivel de la forma en que trabaja el CPU, y entender bien todo lo que sucede dentro de él.

    Tercera Generación
    Con el desarrollo en los 50s y 60s de algoritmos de más elevado nivel, y el aumento de poder del hardware, empezaron a entrar al uso de computadoras científicos de otras ramas; ellos conocían mucho de Física, Química y otras ramas similares, pero no de Computación, y por supuesto, les era sumamente complicado trabajar con lenguaje Ensamblador en vez de fórmulas. Así, nació el concepto de Lenguaje de Alto Nivel, con el primer compilador de FORTRAN (FORmula TRANslation), que, como su nombre indica, inició como un "simple" esfuerzo de traducir un lenguaje de fórmulas, al lenguaje ensamblador y por consiguiente al lenguaje de máquina. A partir de FORTRAN, se han desarrollado innumerables lenguajes, que siguen el mismo concepto: buscar la mayor abstracción posible, y facilitar la vida al programador, aumentando la productividad, encargándose los compiladores o intérpretes de traducir el lenguaje de alto nivel, al lenguaje de computadora.

    Cuarta Generación
    Los idiomas de la cuarta generación parecen según las instrucciones a las de la tercera generación. Lo nuevo de estas lenguajes son conceptos como clases, objetos y eventos que permiten soluciones más fáciles y lógicos. Lenguajes como C++, java y C# se llaman lenguajes orientadas al objeto.

    Los idiomas modernos, tal como C++ y Java, no sólo permite las abstracciones, pero permite la implementación impuesta de restricciones en abstracciones. La mayoría de los idiomas modernos son objetivas orientado, que permite que mí modele el mundo verdadero que usa mi idioma. Además, puedo limitar el acceso para modelar las restricciones de mundo verdadero en datos. La llave es que usé el término "mundo verdadero." Por la primera vez, yo modelo mi solución en términos del problema. Quiero que mi solución sea orientado de problema, para que la solución refleje el mundo verdadero en términos de estructuras de datos y acceso a los datos. Yo también puedo aplicar directamente y para poder modelar objetos de mundo verdadero usando las clases (en C + + o Java).


    Quinta Generación
    Como la quinta generación están conocidos los Lenguajes de inteligencia artificial. Han sido muy valorados al principio de las noventa - mientras ahora el desarrollo de software toma otras caminos.

    Lo que veremos en el futuro es menos dependencia en el idioma, y más en el modelando herramientas, tal como el Unificado Modelando el Idioma (UML). La salida del modelando herramienta producirá mucho de nuestro código para nosotros; en el muy menos, producirá arquitectónico y los modelos del diseño y la estructura de nuestro código. Esto producirá un diseño (y posiblemente código) eso puede ser validado por el cliente antes de completar la implementación y probar. Cuando los problemas diarios que resolvemos llegan a ser más grande, nosotros tenemos cada vez menos tiempo "volver a hacer" el código. Los días de decir, "acabamos de escribir una versión de Beta y el cliente entonces pueden decir nosotros lo que ellos quieren realmente," son pasados. Las organizaciones que fallan de obtener completa y corrige los requisitos de cliente antes de escribir el código saldrá del negocio. ¿Por qué? Porque toma demasiado largo, y cuesta también mucho, para escribir código dos o más vez. Las organizaciones que tienen un compromiso a la comprobación y la validación antes de producir código prosperarán - los otros fallarán.


    Pasos importantes de las lenguajes de programación


    Historia de las lenguajes de programación


     

    8. PSEUDOCODIGO

    PSEUDOCODIGO
    Es un lenguaje que se asemeja a los lenguajes de programación en los que se crean software de programación para la PC pero sin el rigor y exactitud que estos tienen a nivel sintáctico; es una forma clara de escribir programas en un lenguaje común o cotidiano.

    7.- TIPOS DE DATOS

    TIPOS DE DATOS
    El tipo de un dato es el conjunto de valores que puede tomar durante el programa. Si se le intenta dar un valor fuera del conjunto se producirá un error.
    La asignación de tipos a los datos tiene dos objetivos principales:
    • Por un lado, detectar errores en las operaciones
    • Por el otro, determinar cómo ejecutar estas operaciones
    Tipos estáticos
    Casi todos los tipos de datos son estáticos, la excepción son los punteros y no se tratarán debido a su complejidad.
    Que un tipo de datos sea estático quiere decir que el tamaño que ocupa en memoria no puede variar durante la ejecución del programa. Es decir, una vez declarada una variable de un tipo determinado, a ésta se le asigna un trozo de memoria fijo, y este trozo no se podrá aumentar ni disminuir.

     Tipos dinámicos
    Dentro de esta categoría entra solamente el tipo puntero. Este tipo te permite tener un mayor control sobre la gestión de memoria en tus programas. Con ellos puedes manejar el tamaño de tus variables en tiempo de ejecución, o sea, cuando el programa se está ejecutando.
    Los punteros quizás sean el concepto más complejo a la hora de aprender un lenguaje de programación, sobre todo si es el primero que aprendes. Debido a esto, no lo trataremos. Además, lenguajes que están muy de moda (por ejemplo Java) no permiten al programador trabajar con punteros.
     Tipos simples
    Como su nombre indica son los tipos básicos en Pascal. Son los más sencillos y los más fáciles de aprender. Por todo esto, serán en los que nos centremos.
    Los tipos simples más básicos son: entero, lógico, carácter y real. Y la mayoría de los lenguajes de programación los soportan, no como ocurre con los estructurados que pueden variar de un lenguaje a otro.
     El tipo integer (entero)

    Como ya habrás leído el tipo de datos entero es un tipo simple, y dentro de estos, es ordinal. Al
    declarar una variable de tipo entero, estás creando una variable numérica que puede tomar valores positivos o negativos, y sin parte decimal.
    Este tipo de variables, puedes utilizarlas en asignaciones, comparaciones, expresiones aritméticas, etc. Algunos de los papeles más comunes que desarrollan son:
    • Controlar un bucle
    • Usarlas como contador, incrementando su valor cuando sucede algo
    • Realizar operaciones enteras, es decir, sin parte decimal
    • Y muchas más...
    A continuación tienes un ejemplo en el que aparecen dos variables enteras. Como puedes ver, en el ejemplo se muestran las dos maneras de declarar una variable de tipo entero:


     El tipo boolean (lógico)

    El tipo de datos lógico es el que te permite usar variables que disponen sólo de dos posibles valores: cierto o falso. Debido a esto, su utilidad salta a la vista, y no es otra que variables de chequeo. Nos sirven para mantener el estado de un objeto mediante dos valores:
    • si/no
    • cierto/falso
    • funciona/no funciona
    • on/off
    • etc.
    Para aclararlo, veamos un ejemplo:

    El tipo real (real)
    Como ya has visto, Pascal soporta el conjunto entero de números. Pero no es el único, también te permite trabajar con números pertenecientes al conjunto real.
    El tipo de datos real es el que se corresponde con los números reales. Este es un tipo importante para los cálculos. Por ejemplo en los estadísticos, ya que se caracterizan por tratar fundamentalmente con valores decimales.
    nota: Aunque pueda que estés acostumbrado a escribir con coma los decimales, te advierto que en Pascal y en todos los lenguajes de programación se escribe con un punto. Por ejemplo: 3.1416
    A continuación tienes un ejemplo en el que se utiliza el tipo real. En el puedes ver las dos formas de declarar una variable real, y tambíen el uso de una constante real. Por si tienes curiosidad, el resultado de ejecutar el programa compilado es:
    El área para un radio de 3.14 es 63.6174




    Los tipos char y string (carácter y cadena)

    Con el tipo carácter puedes tener objetos que representen una letra, un número, etc. Es decir, puedes usar variables o constantes que representen un valor alfanumérico. Pero ojo, cada variable sólo podrá almacenar un carácter.
    Sin embargo, con las cadenas de caracteres (strings) puedes contener en una sóla variable más de un carácter. Por ejemplo, puedes tener en una variable tu nombre.
    Veamos cómo se usan ambos tipos en el siguiente ejemplo


    Tipos estructurados
    Mientras que una variable de un tipo simple sólo referencia a un elemento, los estructurados se refieren a colecciones de elementos.
    Las colecciones de elementos que aparecen al hablar de tipos estructurados son muy variadas: tenemos colecciones ordenadas que se representan mediante el tipo array, colecciones sin orden mediante el tipo conjunto, e incluso colecciones que contienen otros tipos, son los llamados registros.
     Tipos ordinales
    Dentro de los tipos simples, los ordinales son los más abundantes. De un tipo se dice que es ordinal porque el conjunto de valores que representa se puede contar, es decir, podemos establecer una relación uno a uno entre sus elementos y el conjunto de los números naturales.
    Dentro de los tipos simples ordinales, los más importantes son:
    • El tipo entero (integer)
    • El tipo lógico (boolean)
    • El tipo carácter (char)
     Tipos no-ordinales
    Simplificando, podríamos reducir los tipos simples no-ordinales al tipo real. Este tipo nos sirve para declarar variables que pueden tomar valores dentro del conjunto de los números reales.
    A diferencia de los tipos ordinales, los no-ordinales no se pueden contar. No se puede establecer una relación uno a uno entre ellos y los número naturales. Dicho de otra forma, para que un conjunto se considere ordinal se tiene que poder calcular la posición, el anterior elemento y el siguiente de un elemento cualquiera del conjunto. ¿Cuál es el sucesor de 5.12? Será 5.13, o 5.120, o 5.121,...

    6.- TIPOS DE DISEÑO

    TIPOS DE DISEÑO
    Hay tres tipos de técnicas, estas son:
    TOP DOWN (Diseño descendente): Consiste en tomar el problema inicial y descomponerlo en problemas más pequeños, de solución sencilla.
    BOTTON UP: Consiste en partir de los detalles más precisos del algoritmo completando módulos de mayor complejidad – es inverso al anterior - .
    WARNIER ORR: Utiliza una representación semejante a cuadros sinópticos para Mostar el funcionamiento y organización del algoritmo.

    5.- VARIABLES Y CONSTANTES

    VARIABLES Y CONSTANTES

    Variables: Son todos aquellos valores que pueden o no cambiar en el transcurso de un algoritmo. Usualmente son introducidas como datos. Existen variables simples y variables suscritas (arreglos). Todas las variables se componen de dos partes esenciales: Nombre y Valor.
    El nombre es quien identifica la variable en todo el transcurso del algoritmo, y son un conjunto de caracteres, letras y números. Dicho nombre debe ser mnemotécnico, es decir, que con solo leer el nombre de la variable se pueda entender o determinar con facilidad lo que ella significa o contiene. Como ejemplo podemos decir la Variable VrHr significa a simple vista Valor de la Hora; pero si fuese X o HH, estos nombres pueden significar muchas cosas o, a la vez, no significar nada.
    El valor es la cantidad que una variable representa o tiene asociada en un momento determinado. Se debe tener en cuenta que una variable también puede tener asociado un valor lógico como falso o verdadero.

    Constantes: Son todos aquellos valores que no cambian en el transcurso de un algoritmo y son introducidos en el momento de utilizarse.
    En determinados casos se puede presentar que el valor de una variable no cambie en el transcurso de un algoritmo; pero por este hecho no se considera constante, sigue siendo una variable, porque su valor puede cambiar y las constantes no lo pueden hacer.

    4.-DIAGRAMAS DE FLUJO

    DIAGRAMAS DE FLUJO
    Un diagrama de flujo es la representación grafica del flujo o secuencia de rutinas simples. Tiene la ventaja de indicar la secuencia del proceso en cuestión, las unidades involucradas y los responsables de su ejecución; en pocas palabras es la representación simbólica o pictórica de un procedimiento administrativo.

    Son de gran importancia ya que ayudan a designar cualquier representación grafica de un procedimiento o parte de este; el diagrama de flujo como su nombre lo dice representa el flujo de información de un procedimiento.

    Ejemplo de un diagrama de flujo:


    3.-ALGORITMO

    ALGORITMO
    Un algoritmo es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.
     Un algoritmo se puede describir en 3 partes; entrada  proceso y salida.

    En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, en matemáticas son el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones.

    Características principales de un algoritmo:

    Finito: las instrucciones o pasos deberán tener término o fin (un número determinado de instrucciones o  pasos).
    Preciso: dichas instrucciones o pasos deberán ser de forma concreta y las más claras posibles; de tal forma que al realizar el algoritmo más de una vez el resultado deberá ser el mismo.
    Conciso: deberá tener o ser lo más simplificado posible pero que de el resultado adecuando y/o  correcto.

    Existen dos clases de algoritmos, las cuales son:

      Algoritmos Cualitativos: Son todos aquellos pasos o instrucciones descritos por medio de palabras que sirven para llegar a la obtención de una respuesta o solución de un problema cualquiera.
    Como ejemplo podemos decir que la utilización de un directorio (Búsqueda de un teléfono). Para poder buscar un teléfono en un directorio, se debe conocer el algoritmo que se va a utilizar, es decir la forma en que están codificados los nombres de las personas, para así lograr encontrarlos y localizar el número telefónico correspondiente.
      Algoritmos Cuantitativos: Son aquellos pasos o instrucciones que involucran cálculos numéricos para llegar a un resultado satisfactorio.

    Ejemplo de un algoritmo:

    ALGORITMO:

    1.- inicio

    2.- pedir nombre (N)

    3.-Pedir calificaciones( c1,c2,c3,c4)

    4.- sacar promedio prom=(c1+c2+c3+c4)/4

    5.- si el promedio es >=7 entonces mostrar como resultados “aprobado” si el promedio es menor a 7 mostrar como resultado “reprobado.

    6.- fin








    2.- METODOLOGIA PARA LA SOLUCION DE PROBLEMAS

    METODOLOGIA PARA LA SOLUCION DE PROBLEMAS
    La solución de un problema por computadora, requiere de siete pasos, dispuestos de tal forma que cada uno es dependiente de los anteriores, lo cual indica que se trata de un proceso complementario y por lo tanto cada paso exige el mismo cuidado en su elaboración. Los siete pasos de la metodología son los siguientes:
    1. Definición del problema
    2. Análisis de la solución
    3. Diseño de la solución
    4. Codificación
    5. Prueba y Depuración
    6. Documentación
    7. Mantenimiento
    2.1. Definición del problema
    Es el enunciado del problema, el cual debe ser claro y completo. Es fundamental conocer y delimitar por completo el problema, saber que es lo se desea realice la computadora, mientras esto no se conozca del todo, no tiene caso continuar con el siguiente paso.
    2.2. Análisis de la solución
    Consiste en establecer una serie de preguntas acerca de lo que establece el problema, para poder determinar si se cuenta con los elementos suficientes para llevar a cabo la solución del mismo, algunas preguntas son:
    ¿Con qué cuento?
    Cuáles son los datos con los que se va a iniciar el proceso, qué tenemos que proporcionarle a la computadora y si los datos con los que cuento son suficientes para dar solución al problema.
    ¿Qué hago con esos datos?
    Una vez que tenemos todos los datos que necesitamos, debemos determinar que hacer con ellos, es decir que fórmula, cálculos, que proceso o transformación deben seguir los datos para convertirse en resultados.
    ¿Qué se espera obtener?
    Que información deseamos obtener con el proceso de datos y de que forma presentarla; en caso de la información obtenida no sea la deseada replantear nuevamente un análisis en los puntos anteriores.
    Es recomendable que nos pongamos en el lugar de la computadora y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados.
    2.3. Diseño de la solución
    UNa vez definido y analizado el problema, se procede a la creación del algoritmo (Diagrama de flujo ó pseudocódigo), en el cual se da la serie de pasos ordenados que nos proporcione un método explícito para la solución del problema.
    Es recomendable la realización de pruebas de escritorio al algoritmo diseñado, para determinar su confiabilidad y detectar los errores que se pueden presentar en ciertas situaciones. éstas pruebas consisten en dar valores a la variable e ir probando el algoritmo paso a paso para obtener una solución y si ésta es satisfactoria continuar con el siguiente paso de la metodología; de no ser así y de existir errores deben corregirse y volver a hacer las pruebas de escritorio al algoritmo.
    2.4. Codificación
    Consiste en escribir la solución del problema (de acuerdo al pseudocódigo); en una serie de instrucciones detalladas en un código reconocible por la computadora; es decir en un lenguaje de programación (ya sea de bajo o alto nivel), a esta serie de instrucciones se le conoce como PROGRAMA.
    2.5. Prueba y Depuración
    Prueba es el proceso de identificar los errores que se presenten durante la ejecución del programa; es conveniente que cuando se pruebe un programa se tomen en cuenta los siguientes puntos:
    1. - Tratar de iniciar la prueba con una mentalidad saboteadora, casi disfrutando la tarea de encontrar un error.
    2. - Sospechar de todos los resultados que arroje la solución, con lo cual se deberán verificar todos.
    3. - Considerar todas las situaciones posibles, normales y aún las anormales.
    La Depuración consiste en eliminar los errores que se hayan detectado durante la prueba, para dar paso a una solución adecuada y sin errores.
    2.6. Documentación
    Es la guía o comunicación escrita que sirve como ayuda para usar un programa, o facilitar futuras modificaciones.
    A menudo un programa escrito por una persona es usado por muchas otras, por ello la documentación es muy importante; ésta debe presentarse en tres formas: EXTERNA, INTERNA y AL USUARIO FINAL.
    Documentación Interna
    Consiste en los comentarios o mensajes que se agregan al código del programa, que explican las funciones que realizan ciertos procesos, cálculos o fórmulas para el entendimiento del mismo.
    Documentación Externa
    También conocida como Manual Técnico, está integrada por los siguientes elementos: Descripción del Problema, Nombre del Autor, Diagrama del Flujo y/o Pseudocódigo, Lista de variables y constantes, y Codificación del Programa, esto con la finalidad de permitir su posterior adecuación a los cambios.
    Manual del Usuario
    Es la documentación que se le proporciona al usuario final, es una guía que indica el usuario como navegar en el programa, presentando todas las pantallas y menús que se va a encontrar y una explicación de los mismos, no contiene información de tipo técnico.
    2.7. Mantenimiento
    Se lleva a cabo después de determinado el programa, cuando se ha estado trabajando un tiempo, y se detecta que es necesario hacer un cambio, ajuste y/o complementación al programa para que siga trabajando de manera correcta. Para realizar esta función, el programa debe estar debida mente documentado, lo cual facilitará la tarea.

    1.-DEFINICION DE PROBLEMA

    DEFINICION DE PROBLEMA
    Un problema es una determinada cuestión o asunto que obstaculiza el logro de algún fin y por lo tanto se hace necesaria de una solución.
    

    Volver al inicio Volver arriba DYKHEM. Theme ligneous by pure-essence.net. Bloggerized by Chica Blogger.