Lenguajes de programación y proceso de programación

Informática. Programación. Algoritmo computacional. Diagramas de flujos. Pseudocódigo. Compilador. Elaboración de programas

  • Enviado por: Flakosoft 07
  • Idioma: castellano
  • País: República Dominicana República Dominicana
  • 36 páginas
publicidad

CONTENIDO

LENGUAJES DE PROGRAMACION Y EL PROCESO DE PROGRAMACION. CREACION DE PROGRAMAS DE COMPUTACION

  • PROGRAMACION

  • Concepto de programación------------------------------------------------------

  • TIPOS DE PROGRAMACION

    • 2.1: Programación estructurada (PE)

      • 2.1.1 Estructura Secuencial

      • 2.1.2 Estructura Selectiva o de Selección

      • 2.1.3 Estructura Iterativa

    • 2.2: Programación orientada a objetos (POO)

      • 2.2.1 Características de la Programación Orientada a Objetos.

    • 2.3 Programación Orientada a Eventos

      • 2.3.1 Eventos

      • 2.3.2 Propiedades

      • 2.3.3 Métodos

  • LENGUAJES DE PROGRAMACION

    • 3.1: Concepto de lenguaje de programación

    • 3.2: Clasificación de los lenguajes de programación

      • 3.2.1 lenguajes de alto nivel

      • 3.2.2 lenguajes de bajo nivel

      • 3.2.2.1 Características Lenguajes de Bajo Nivel

    • 3.3Clasificación de los Lenguajes de alto nivel.

    • 3.4 Generaciones de Lenguajes

      • 3.4.1 Lenguajes de Maquina (1ra Generación)

      • 3.4.2 Lenguaje ensamblador (2da Generación)

      • 3.4.3 Lenguaje de Procedimientos (3ra Generación)

      • 3.4.4 Lenguajes Orientado a Problemas (4ta Generación)

      • 3.3.5 Lenguajes Naturales (5ta Generación)

      • ALGORITMO COMPUTACIONAL

        • 4.1 Generalidades

        • 4.2: Pasos para la elaboración de algoritmos

        • 4.3 Análisis de algoritmos

        • 4.4: Diseño de algoritmos

          • 4.4.1 Consideración y diseño para la elaboración de un algoritmo

        • 4.5 Características de Algoritmos

        5- DIAGRAMAS DE FLUJO DE DATOS (DFD)

        5.1 Definición de Diagramas de flujo de datos

        5.2 Algunos de los símbolos utilizados para hacer diagramas de flujo de datos

        5.3 Características de los diagramas de flujo de datos

        5.4 Tipos de Diagrama de Flujo de Datos.

        5.5 Desarrollo de Diagramas de Flujo de Datos

        5.6 Ventajas de Utilizar Diagramas de Flujo de Datos

        6- PSEUDOCODIGO

        • 6.1: Definición de Pseudocódigo

        • 6.2 Funciones y operaciones

        • 6.3: Definición de estructuras de control

          • 6.3.1 Secuencial

          • 6.3.2 Selectiva

          • 6.3.3 Selectiva Doble (Alternativa)

        • 6.4: Desarrollo de algoritmos

        • 6.5: Ventajas de utilizar un Pseudocódigo a un diagrama de flujo

      • COMPILADOR

        • 7.1 Compilador o traductor

          • 7.2 Clasificación de los Compiladores

          • 7.3 Función de un Compilador

          • 7.3 Ventajas de Compilar

        • ELABORACION DE PROGRAMAS

          • 8.1: Análisis de la necesidades

          • 8.2: Diseño del Programa

          • 8.3: Desarrollo

          • 8.4: Implementación

          • 8.5: Mantenimiento

          Introducción

          Primeramente le damos gracias a Dios por habernos permitido la creación del material que ya han empezado a leer. El presente material que lleva como títulos: “LENGUAJES DE PROGRAMACION Y EL PROCESO DE PROGRAMACION, CREACION DE PROGRAMAS DE COMPUTACION”, esta destinado a todo aquel que le interese conocer lo básico de la programación y elaboración de software.

          Este material contiene información sacada de varias fuentes Bibliograficas que le serán de gran utilidad a usted estimado lector. Incluyendo en este trabajo Informaciones de modo grafica, así como también varios ejemplos de temas que se desarrollan en este material y que lo ameritan los mismos. Esperando que al finalizar de esta breve reseña de “LENGUAJES DE PROGRAMACION Y EL PROCESO DE PROGRAMACION, CREACION DE PROGRAMAS DE COMPUTACION”, les sea de gran utilidad, les dan las gracias de ante lectura el grupo: “GRAPLEX”.

          1. Programación.

          1.1 Concepto de Programación

          Se conoce como programación al proceso para convertir especificaciones generales de un sistema en instrucciones utilizables por la maquina, que produzcan los resultados deseados. A esto también se le conoce como Desarrollo de Software.

          2. Tipos de programación

          2.1 Programación Estructurada (PE)

          La programación estructurada es una forma de escribir programas de ordenador (programación de computadora) de forma clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

          El teorema del programa estructurado, demostrado por Böhm-Jacopini, demuestra que todo programa puede escribirse utilizando únicamente las tres instrucciones de control siguientes:

          - Secuencia

          - Selección

          - Iteración (bucle de instrucciones) con condición al principio.

          Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control, éstas pueden ser construidas mediante las tres básicas.

          2.1.1 Estructura Secuencial

          Una estructura de programa es secuencial si se ejecutan una tras otra a modo de secuencia, es decir que una instrucción no se ejecuta hasta que finaliza la anterior.

          2.1.2 Estructura Selectiva o Selección

          La estructura selectiva permite la realización de una instrucción u otra según un criterio, solo una de estas instrucciones se ejecutara.

          Ejemplo:

          IF a > b THEN

          PRINT a ; "es mayor que" ; b

          ELSE

          PRINT a ; "no es mayor que" ; b

          END IF

          2.1.3 Estructura Iterativa.

          Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repitan mientras se cumpla una condición, en un principio el número de iteraciones no tiene porque estar determinado.

          Ejemplo:

          a= 0

          b= 7

          WHILE b > a DO

          PRINT a

          a= a + 1

          WEND

          Esta instrucción tiene tres palabras reservadas WHILE, DO y WEND.

          WHILE: señala el comienzo del bucle y después de esta palabra se espera la condición de repetición, si la condición es cierta se pasa al cuerpo del bucle, si no al final de la instrucción mientras.

          DO: señala el final de la condición, lo que esté después será el cuerpo del bucle.

          WEND: señala el final del cuerpo del bucle y de la instrucción WHILE.

          2.2 Programación Orientada a Objetos

          La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora.

          La programación orientada a objetos es una nueva forma de programar que trata de encontrar una solución a los problemas de la programación orientada a Eventos.

          2.2.1 Características de la Programación Orientada a Objetos

          Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.

          Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

          Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que específica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

          Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

          Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.

          2.3 Programación Orientada a Eventos

          La programación orientada a eventos es el tipo de programación en el que los programas dependerán de sucesos (eventos) para la realización de la tareas para las que fueron programados

          Los programas orientados a eventos son los programas típicos de Windows, tales como Netscape, Word, Excel, PowerPoint y otros. Cuando uno de estos programas ha arrancado, lo único que hace es quedarse a la espera de las acciones del usuario, que en este caso son llamadas eventos.

          El usuario dice si quiere abrir y modificar un fichero existente, o bien comenzar a crear un fichero desde el principio. Estos programas pasan la mayor parte de su tiempo esperando las acciones del usuario (eventos) y respondiendo a ellas. Las acciones que el usuario puede realizar en un momento determinado son variadísimas, y exigen un tipo especial de programación: la programación orientada a eventos. Este tipo de programación es sensiblemente más complicada que la secuencial y la interactiva, pero con los lenguajes visuales de hoy, se hace sencilla y agradable.

          2.3.1 Eventos

          Las acciones del usuario sobre el programa se llaman eventos. Son eventos típicos el clic sobre un botón, el hacer doble clic sobre el nombre de un fichero para abrirlo, el arrastrar un icono, el pulsar una tecla o combinación de teclas, el elegir una opción de un menú, el escribir en una caja de texto, o simplemente mover el ratón. Más adelante se verán los distintos tipos de eventos reconocidos por Windows 95 y por Visual Basic. Cada vez que se produce un evento sobre un determinado tipo de control, Visual Basic arranca una determinada función o procedimiento que realiza la acción programada por el usuario para ese evento concreto. Estos procedimientos se llaman con un nombre que se forma a partir del nombre del objeto y el nombre del evento, separados por el carácter (_), como por ejemplo txtBox_click, que es el nombre del procedimiento que se ocupará de responder al evento clic en el objeto txtBox..

          Además de los eventos, la mayor parte de los objetos, como los formularios y los controles, son suministrados con propiedades y métodos.

          2.3.2 Propiedades

          Una propiedad es una asignación que describe algo sobre un objeto como un formulario. Dependiendo de la propiedad, se la puede asignar en tiempo de diseño usando la ventana Propiedades y/o en tiempo de ejecución al programar.

          A continuación se describen dos ejemplos de las propiedades del formulario de Visual Basic:

          MinButton. Esta propiedad puede asignarse como TRUE (verdadero) o FALSE (falso). Dependiendo de la asignación, el formulario tendrá o no tendrá un botón minimizar.

          BackColor. Asignando esta propiedad a un valor expresado como hexadecimal RGB (Rojo Verde Azul) o como una constante se cambia el color del fondo del formulario. Se pueden consultar las constantes usando el examinador de objetos (Seleccione VER, EXAMINADOR DE OBJETOS) y en la Biblioteca VBRUN (Columna clase) bajo "ColorConstants" y "SystemColorConstants".

          2.3.3 Métodos

          Los métodos son funciones que también son llamadas desde programa, pero a diferencia de los procedimientos no son programadas por el usuario, sino que vienen ya pre-programadas con el lenguaje. Los métodos realizan tareas típicas, previsibles y comunes para todas las aplicaciones. de ahí que vengan con el lenguaje y que se libere al usuario de la tarea de programarlos. Cada tipo de objeto o de control tiene sus propios métodos.

          En general solo pueden ser ejecutados en tiempos de ejecución no en tiempo de diseño. Algunos ejemplos de métodos de formularios son el método MOVE, que mueve un formulario en un espacio de dos dimensiones en la pantalla, y el método ZORDER que sitúa el formulario delante o detrás de otras ventanas.

          Los métodos son invocados dando nombres al objeto y cuyo método se está llamando, listando el operador punto (.), y después listando el nombre del método.

          3. Lenguajes de Programación

          3.1Concepto de lenguaje de programación

          Es un conjunto de símbolos junto a un conjunto de reglas para combinar dichos símbolos que se usan para expresar programas. Constan de un léxico, una sintaxis y una semántica.

          Léxico: Conjunto de símbolos permitidos o vocabulario
          Sintaxis: Reglas que indican cómo realizar las construcciones del lenguaje
          Semántica: Reglas que permiten determinar el significado de cualquier construcción del lenguaje.

          3.2 Tipos de Lenguajes de Programación

          Atendiendo al número de instrucciones necesarias para realizar una tarea específica podemos clasificar los lenguajes informáticos en dos grandes bloques:

          · Bajo Nivel
          · Alto Nivel

          3.2.1 Lenguaje de Bajo Nivel

          Es el tipo de lenguaje que cualquier computadora es capaz de entender. Se dice que los programas escritos en forma de ceros y unos están en lenguaje de máquina, porque esa es la versión del programa que la computadora realmente lee y sigue.

          3.2.2 Lenguajes de alto Nivel

          Son lenguajes de programación que se asemejan a las lenguas humanas usando palabras y frases fáciles de entender.
          En un lenguaje de bajo nivel cada instrucción corresponde a una acción ejecutable por el ordenador, mientras que en los lenguajes de alto nivel una instrucción suele corresponder a varias acciones.

          3.2.2.1 Características del Lenguaje de Alto Nivel

          Son independientes de la arquitectura física de la computadora. Permiten usar los mismos programas en computadoras de diferentes arquitecturas (portabilidad), y no es necesario conocer el hardware específico de la máquina. La ejecución de un programa en lenguaje de alto nivel, requiere de una traducción del mismo al lenguaje de la computadora donde va a ser ejecutado. Una sentencia en un lenguaje de alto nivel da lugar, al ser traducida, a varias instrucciones en lenguaje entendible por el computador. Utilizan notaciones cercanas a las usadas por las personas en un determinado ámbito. Se suelen incluir instrucciones potentes de uso frecuente que son ofrecidas por el lenguaje de programación.

          3.3 Clasificación de los lenguajes de Alto Nivel


          Lenguajes de propósito general:

          3.4 Generaciones de los Lenguajes

          Al igual que las generaciones de la computadoras, los lenguajes de programación fueron evolucionando de la forma siguiente.

          3.4.1 Lenguajes de Maquina (1ra generación)

          Es el lenguaje que la computadora entiende, su estructura está totalmente adaptada a los circuitos de la máquina y la programación es tediosa porque los datos se representan por ceros y unos. Es de bajo nivel. Es un conjunto de instrucciones codificadas en binario que son capaces de relacionarse directamente con los registros y circuitería del microprocesador de la computadora y que resulta directamente ejecutable por éste, sin necesidad de otros programas intermediarios. Los datos se referencian por medio de las direcciones de memoria donde se encuentran y las instrucciones realizan operaciones simples. Estos lenguajes están íntimamente ligados a la CPU y por eso no son transferibles. (baja portabilidad). Para los programadores es posible escribir programas directamente en lenguaje de máquina, pero las instrucciones son difíciles de recordar y los programas resultan largos y laboriosos de escribir y también de corregir y depurar.

          3.4.2 Lenguaje Ensamblador (2da Generación)

          Es otro lenguaje de programación de bajo nivel, pero simbólico porque las instrucciones se construyen usando códigos de tipo mnemotécnico, lo cual facilita la escritura y depuración de los programas pero no los acorta puesto que para cada acción se necesita una instrucción. El programa ensamblador va traduciendo línea a línea a la vez que comprueba la existencia de errores. Si localiza alguno da un mensaje de error. Algunas características que lo diferencian del lenguaje de máquina son que permite el uso de comentarios entre las líneas de instrucciones; en lugar de direcciones binarias usa identificadores como total, x, y, etc. Y los códigos de operación se representan por mnemotécnica siempre tienen la desventaja de repertorio reducido de instrucciones, rígido formato para las instrucciones, baja portabilidad y fuerte dependencia del hardware. Tiene la ventaja del uso óptimo de los recursos hardware, permitiendo la obtención de un código muy eficiente. Ejemplo de algunos códigos mnemónicos son: STO para guardar un dato, LOA para cargar algo en el acumulador, ADD para adicionar un dato, INP para leer un dato, STO para guardar información, MOV para mover un dato y ponerlo en un registro, END para terminar el programa, etc. Con la tercera generación avanzamos a los lenguajes de alto nivel, muchos de los cuales se consideran exportables. Esto es, pueden correr en más de un tipo de computadoras, se les puede exportar de una máquina a otra.

          3.4.3 Lenguaje de Procedimientos (3ra Generación)

          Son lenguajes de alto nivel similares al habla humana pero requieren cierta capacitación para su uso.

          Ventajas:

          a. Independencia de la arquitectura física de la computadora (portabilidad), esto significa que un mismo lenguaje puede funcionar (al menos en teoría) en distintos computadores, por lo que tanto el lenguaje como los programas escritos con él serán transportables de un computador a otro. En la práctica, esta característica resulta limitada por la gran diversidad de versiones y dialectos que se constituyen para cada lenguaje.

          b. una sentencia en un lenguaje de alto nivel da lugar, al ser traducida, a varias instrucciones en lenguaje máquina. Se llaman de procedimientos porque están diseñados para expresar la lógica capaz de resolver problemas generales.

          Entre estos tenemos:

          Basic
          Pascal
          Cobol
          C
          Fortran

          Para que el lenguaje de procedimientos pueda funcionar debe traducirse a lenguaje de máquina a fin de que la computadora lo entienda. Para ello se han de usar programas traductores que realicen dicho proceso. Tienen la capacidad de soportar programación estructurada.

          3.4.4 Lenguajes orientados a problemas (4ta Generación)

          Resultan más eficaces para la resolución de un tipo de problemas a costa de una menor eficiencia para otros. Requieren poca capacitación especial de parte del usuario Son considerados de muy alto nivel Diseñados para resolver

          problemas específicos
          Incluye: lenguajes de consulta y generador de aplicaciones

          Lenguajes de consulta:

          Permiten a no programadores usar ciertos comandos de fácil comprensión para la búsqueda y generación de reportes a partir de una base de datos.

          Generador de aplicaciones:

          Quiere decir que cuando se diseña uno de estos lenguajes, se tiene en cuenta que su finalidad es la resolución de problemas, prescindiendo de la arquitectura del computador. Contiene varios módulos que han sido preprogramados para cumplir varias tareas.

          3.4.5 Lenguajes Naturales (5ta Generación)

          Lenguajes orientados a aplicaciones en inteligencia artificial, como lisp y prolog. Dentro de este campo destacan las aplicaciones en sistemas expertos, juegos, visión artificial (Jurasic Park) y robótica. Lisp es un lenguaje para procesamiento de listas y manipulación de símbolos. Prolog es un lenguaje basado en la lógica, para aplicaciones de bases de datos e Inteligencia Artificial.
          Podemos decir entonces, que los lenguajes de alto nivel, tienen las ventajas de mayor legibilidad de los programas, portabilidad, facilidad de aprendizaje y facilidad de modificación.

          4. Algoritmos

          4.1 Generalidades

          El programador de computadoras es ante que nada una persona que resuelve problemas, por lo que para llegar a ser un programador eficaz se necesita aprender a resolver problemas de un modo riguroso y sistemático( o sea en un orden establecido) . A la metodología necesaria para resolver problemas mediante programas se denomina Metodología de la Programación. El eje central de esta metodología es el concepto de algoritmo.
          Un algoritmo es un método para resolver un problema.

          4.2 Pasos que se deben seguir en la elaboración de algoritmos:

          Leer el enunciado del problema cuantas veces sea necesario asta entenderlo completamente.

          Determinar claramente con que datos de entrada se cuenta para la solucion del problema.

          Aclarar y determinar la información o resultados que se solicitan.

          a) información intermedia

          b) información final.

          Definir que calculo y comparaciones se necesitan para llegar al resultado final .

          Cálculos y comparaciones intermedia.

          Cálculos y comparación final.

          Generen cuenta toda clase de condiciones y restricciones para la solución del problema.

          La falta de análisis de algunos de estos términos causara problema en el trascurso del desarrollo del algoritmo.

          4.3 Análisis de Algoritmos

          Un algoritmo es mejor cuantos menos recursos consuma. Criterio empresarial: Maximizar la eficiencia; y se encarga de los siguientes análisis:

          Eficiencia: Relación entre los recursos consumidos y los productos conseguidos.
          Recursos consumidos:
          Tiempo de ejecución.
          Memoria principal:
          Entradas/salidas a disco.
          Comunicaciones, procesadores, etc.
          Lo que se consigue:
          Resolver un problema de forma exacta, forma aproximada o algunos casos.
          Recursos consumidos (Analizar los recursos de hardware que consumiria)

          4.4 Diseño de Algoritmos.

          En la etapa de diseño se determina como hace el programa la tarea solicitada. La resolución de un problema complejo se realiza dividiendo el problema en sub problemas y a continuación dividir estos sub problemas en otros de nivel mas bajo, hasta que pueda ser implementada una solución en la computadora. Este método se conoce técnicamente como diseño descendente o modular. El proceso de romper el problema en cada etapa y expresar cada paso en forma

          mas detallada se denomina refinamiento sucesivo.

          Cada sub programa es resuelto mediante un modulo que tiene un solo punto de

          entrada Y un punto de salida

          Cualquier programa bien diseñado consta de un programa principal (modulo de nivel mas alto) que llama a sub programas (módulos de nivel mas bajo) que a su vez pueden llamar a otros sub programas. Los programas estructurados de esta forma se dice que tienen un diseño modular y el método de romper el programa en módulos más pequeño se llama Programación Modular. Los módulos pueden ser planeados, codificados, comprobados y depurados independientemente (incluso por diferentes programadores) y a continuación combinarlos entre si. El proceso implica la ejecución de los siguientes pasos hasta que el programa se termina:

          Programar modulo.

          Comprobar el modulo.

          Si es necesario, depurar el modulo.

          Combinar el modulo con los módulos anteriores.

          El proceso que convierte los resultados del análisis del problema en un diseño modular con refinamiento sucesivo que permitan una posterior traducción al

          lenguaje se denomina diseño de algoritmo.

          El diseño del algoritmo es independiente del lenguaje de programación en el que se vaya a codificar posteriormente.

          El acto de diseñar un algoritmo puede considerarse como una tarea que

          difícilmente podrá ser del todo automatizada.

          Todo problema algorítmico es un reto para su diseñador, algunos resultan inmediatos de resolver, otros son bastante complejos. La investigación en esta área ha permitido descubrir un conjunto de métodos o esquemas de diseño hacia los cuales puede orientarse la realización de muchos algoritmos.
          No obstante, y a pesar de que resulta mas adecuado en bastantes casos utilizar alguno de estos esquemas que realizar un diseño desde cero, idear un algoritmo continua siendo una labor bastante creativa donde los conocimientos y la experiencia del propio diseñador tiene un papel fundamental.
          El diseño de un algoritmo que resuelva un problema es, en general, una tarea difícil. Una forma de facilitar esta labor consiste en recurrir a técnicas conocidas de diseño de algoritmos, se decir, a esquemas muy generales que pueden adaptarse a un problema particular al detallar las partes generales del esquema.
          Muchos problemas pueden resolverse buscando una solución fácil y directa pero, a la vez bastante ineficiente. Este método, llamado de fuerza bruta, puede ser muy directo, pero con un poco de análisis puede encontrarse algoritmos más eficientes. El esquema mas sencillo quizás sea el llamado divide y vencerás, basado en la descomposición de un problema en subproblemas. Otros esquemas requieren un análisis minucioso del problema de forma que la solución se vaya construyendo en etapas. Si puede preverse que decisión conviene en cada etapa para producir cierto tipo de mejor resultado, tenemos una solución voraz, si la decisión en una etapa, solo puede tomarse tras considerar varias soluciones de otras etapas mas simples, la solución es dinámica. Aun así, hay problemas cuya solución no puede hallarse sino mediante un proceso de búsqueda, a pesar de lo complejas que son las operaciones de búsqueda, su uso adecuado mediante el esquema de búsqueda con retroceso (o backtracking) permite ganar gran eficiencia respecto a soluciones de fuerza bruta. Por ultimo, conviene conocer otros métodos de diseño de algoritmos que también resultan de utilidad práctica.
          Nos estamos refiriendo a métodos basados en la mejora de la eficiencia (por ejemplo, el uso de parámetros de acumulación al resolver problemas utilizando divide y vencerás, y el empleo de tablas como estructura auxiliar para la resolución eficiente de problemas donde se aplica programación dinámica), y a métodos basados en transformaciones del dominio para encontrar una solución mas fácilmente a un problema en un dominio transformado, siendo dicha solución finalmente adaptada al dominio original.

          4.4.1 Consideraciones y Criterios para Diseñar Algoritmos

          Algunas consideraciones estilísticas pueden contribuir a mejor la calidad de los algoritmos (y programas) mediante la reducción del numero de errores que aparecen al desarrollar los. También influyen haciendo que nuestro algoritmo resulten más fáciles de leer y entender para otras personas.
          Los criterios de estilo pueden reflejarse en un conjunto de normas de estilo de codificación. Ello asegura que tanto algoritmos como programa resulten legibles y puedan modificarse fácilmente en caso de necesidad. Generalmente, estas normas de estilo se dirigen hacia aspectos como la forma de construir los nombres de variables o tipo de datos que aparezcan., la tipografía seguida ala hora de escribir nombres de variables, subprogramas, palabras claves, etc. El modo de encolumnar las distintas partes de un algoritmo para facilitar su lectura y comprensión, y la normas sobre como y donde deben de introducirse

          los comentarios.

          Estilo y calidad de los programas van fuertemente unidos. Ante la pregunta ¿Cuáles son las característica de un buen algoritmo?, las siguientes respuestas reflejan, cierta medida, los factores que identifican la calidad en ellos.

          Corrección, el algoritmo debe funcionar.

          Nunca se debe olvidar que la característica más simple e importante de un algoritmo es que funcione. Puede aparecer obvio, pero resulta difícil de asegurar en algoritmos complejos.

          Eficiencia, el algoritmo no debe desaprovechar recursos. La eficiencia de un algoritmo se mide por los recursos que este consume. En particular, se habla de la memoria y del tiempo de ejecución . A pesar de que con la reducción de los costes del hardware es posible diseñar computadores más rápidos y con más memoria, no hay que desperdiciar estos recursos y tratar de desarrollar algoritmos más eficientes.

          Claridad, el algoritmo debe estar bien documentación. La documentación ayuda a comprender el funcionamiento de los algoritmos. Ciertos detalles o algunas partes especiales de los mismos pueden olvidarse fácilmente o quedar oscura si no están adecuadamente comentadas.

          4.5 Características de los Algoritmos

          Las características fundamentales que debe cumplir todo algoritmo son:

          Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.

          Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.

          Un algoritmo debe ser finito. Si se sigue un algoritmo se debe terminar en algún momento; o sea, debe tener un numero finito de pasos.

          La definición de un algoritmo debe definir tres partes: Entrada, Proceso y Salida.

          En el algoritmo de receta de cocina se tendrá:
          Entrada: ingrediente y utensilios empleados.
          Proceso: elaboración de la receta en la cocina.
          Salida: terminación del plato.

          5. Diagramas de Flujo de Datos (DFD)

          5.1 Definición de diagramas de flujo de datos

          Es la representación gráfica de flujo de un algoritmo o de secuencia rutinarias. Se basan en la utilización de diversos símbolos para representar operaciones específicas. Se les llama diagramas de flujo porque los símbolos utilizados se conectan por medio de flechas para indicar la secuencia de la operación.

          5.2 Algunos de los símbolos utilizados para hacer diagramas de flujo de datos

          Los símbolos que se utilizan para diseño se someten a una normalización, es decir, se hicieron símbolos casi universales, ya que, en un principio cada usuario podría tener sus propios símbolos para representar sus procesos en forma de Diagrama de flujo. Esto trajo como consecuencia que sólo aquel que conocía sus símbolos, los podía interpretar. La simbología utilizada para la elaboración de diagramas de flujo es variable y debe ajustarse a las normas preestablecidas universalmente para dichos símbolos o datos.

          5.3 Características de los diagramas de flujo de datos

          En los diagramas de flujo se presuponen los siguientes aspectos:

          • Existe siempre un camino que permite llegar a una solución (finalización del algoritmo).

          • Existe un único inicio del proceso.

          • Existe un único punto de fin para el proceso de flujo (salvo del rombo que indica una comparación con dos caminos posibles).

          5.4 Tipos de Diagrama de Flujo de Datos.

          • Formato vertical: En él el flujo o la secuencia de las operaciones, va de arriba hacia abajo. Es una lista ordenada de las operaciones de un proceso con toda la información que se considere necesaria, según su propósito.

          • Formato horizontal: En él, el flujo o la secuencia de las operaciones, va de izquierda a derecha.

          • Formato panorámico: El proceso entero está representado en una sola carta y puede apreciarse de una sola mirada mucho más rápido que leyendo el texto, lo que facilita su comprensión, aun para personas no familiarizadas. Registra no solo en línea vertical, sino también horizontal, distintas acciones simultáneas y la participación de más de un puesto o departamento que el formato vertical no registra.

          • Formato Arquitectónico: Describe el itinerario de ruta de una forma o persona sobre el plano arquitectónico del área de trabajo. El primero de los flujogramas es eminentemente descriptivo, mientras que los utilizados son fundamentalmente representativos.

          5.5 Desarrollo de Diagramas de Flujo de Datos

          Las siguientes son acciones previas a la realización del diagrama de flujo:

          • Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben estar presentes el dueño o responsable del proceso, los dueños o responsables del proceso anterior y posterior y de otros procesos interrelacionados, otras partes interesadas.

          • Definir qué se espera obtener del diagrama de flujo.

          • Identificar quién lo empleará y cómo.

          • Establecer el nivel de detalle requerido.

          • Determinar los límites del proceso a describir. Los pasos a seguir para construir el diagrama de flujo son :

          • Establecer el alcance del proceso a describir. De esta manera quedará fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente.

          • Identificar y listar las principales actividades/subprocesos que están incluidos en el proceso a describir y su orden cronológico.

          • Si el nivel de detalle definido incluye actividades menores, listarlas también.

          • Identificar y listar los puntos de decisión.

          • Construir el diagrama respetando la secuencia cronológica y asignando los correspondientes símbolos.

          • Asignar un título al diagrama y verificar que esté completo y describa con exactitud el proceso elegido.

          5.6 Ventajas de Utilizar Diagramas de Flujo de Datos

          • Favorecen la comprensión del proceso a través de mostrarlo como un dibujo. El cerebro humano reconoce fácilmente los dibujos. Un buen diagrama de flujo reemplaza varias páginas de texto.

          • Permiten identificar los problemas y las oportunidades de mejora del proceso. Se identifican los pasos redundantes, los flujos de los re-procesos , los conflictos de autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisión.

          • Muestran las interfaces cliente-proveedor y las transacciones que en ellas se realizan, facilitando a los empleados el análisis de las mismas.

          • Son una excelente herramienta para capacitar a los nuevos empleados y también a los que desarrollan la tarea, cuando se realizan mejoras en el proceso.

          6. Pseudcodigos

          6.1 Definición de Pseudocódigo

          Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de programación pero con algunas convenciones del lenguaje natural. Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se requiere para representar instrucciones complejas. El pseudocódigo no está regido por ningún estándar. pseudo viene de falso y por ende es un código al que aunque es entendible no se aplica al proceso que debe realizar la maquina.

          6.2 Funciones y operaciones

          Cada autor usa su propio pseudocódigo con sus respectivas convenciones. Por ejemplo, considere la instrucción "Reemplace el valor de la variable x por el valor de la variable y":

          asigne a el valor de


          Las operaciones aritméticas se representan de la forma usual en matemáticas.


          y las operaciones complejas se representan del mismo modo:

          6.3: Definición de estructuras de control

          Se consideran tres estructuras de control para desarrollar los procedimientos que son:

          6.3.1 Secuencial

          Las instrucciones se siguen en una secuencia fija que normalmente viene dada por el número de renglón. Es decir que las instrucciones se ejecutan de arriba hacia abajo. Las instrucciones se ejecutan dependiendo de la condición dada dentro del algoritmo.

          6.3.2 Selectiva

          La instrucción selectiva determina si una determinada instrucción se ejecuta o no, según el cumplimiento de una condición P.

          Diagrama de flujo que muestra el funcionamiento de la instrucción condicional


          La condición P es una variable booleana o una función reducible a booleana (lógica, Verdadero/Falso). Si esta condición es cierta se ejecuta Instrucciones1, si no es así, ésta no se ejecuta.

          6.3.3 Selectiva doble (alternativa)

          La instrucción selectiva realiza una instrucción de dos posibles, según el cumplimiento de una condición P.

          Diagrama de flujo que muestra el funcionamiento de la instrucción condicional


          La condición P es una variable booleana o una función reducible a booleana (lógica, Verdadero/Falso). Si esta condición es cierta se ejecuta Instrucciones1, si no es así, entonces se ejecuta Instrucciones2.

          6.4: Desarrollo de algoritmos

          Con un buen pseudocódigo se puede desarrollar cualquier algoritmo que:

          • Tenga un único punto de inicio.

          • Tenga un número finito de posibles puntos de término.

          • Haya un número finito de caminos, entre el punto de inicio y los posibles puntos de término.

          6.5 Ventajas de utilizar un Pseudocódigo a un diagrama de flujo

          Ocupan mucho menos espacio en el desarrollo del problema.

          Permite representar de forma fácil operaciones repetitivas complejas.

          Es más sencilla la tarea de pasar de pseudocódigo a un lenguaje de programación formal.

          Si se siguen las reglas de indentación se puede observar claramente los niveles en la estructura del programa.

          En los procesos de aprendizaje de los alumnos de programación, estos están más cerca del paso siguiente (codificación en un lenguaje determinado, que los que se inician en esto con la modalidad Diagramas de Flujo).

          Mejora la claridad de la solución de un problema.

          7. Compilador

          7.1 Compilador o Traductor

          En el caso de que el lenguaje fuente sea un lenguaje de programación de alto nivel y el objeto sea un lenguaje de bajo nivel (ensamblador o código de máquina), a dicho traductor se le denomina compilador. Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador. Un intérprete no genera un programa equivalente, sino que toma una sentencia del programa fuente en un lenguaje de alto nivel y la traduce al código equivalente y al mismo tiempo lo ejecuta. Históricamente, con la escasez de memoria de los primeros ordenadores, se puso de moda el uso de intérpretes frente a los compiladores, pues el programa fuente sin traducir y el intérprete juntos daban una ocupación de memoria menor que la resultante de los compiladores. Por ello los primeros ordenadores personales iban siempre acompañados de un intérprete de BASIC (Spectrum, Commodore VIC-20, PC XT de IBM, etc.). La mejor información sobre los errores por parte del compilador así como una mayor velocidad de ejecución del código resultante hizo que poco a poco se impusieran los compiladores. Hoy en día, y con el problema de la memoria prácticamente resuelto, se puede hablar de un gran predominio de los compiladores frente a los intérpretes, aunque intérpretes como los incluidos en los navegadores de Internet para interpretar el código JVM de Java son la gran excepción.

          7.2 Clasificación de los compiladores:

          El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora puede interpretar y ejecutar. Para cada lenguaje de programación se requiere un compilador separado. El compilador traduce todo el programa antes de ejecutarlo. Los compiladores son, pues, programas de traducción insertados en la memoria por el sistema operativo para convertir programas de cómputo en pulsaciones electrónicas ejecutables (lenguaje de máquina). Los compiladores pueden ser de:

          • una sola pasada: examina el código fuente una vez, generando el código o programa objeto.

          • pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada final para producir y optimizar el código producido durante los pasos anteriores.

          • Optimación: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.

          • Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.

          • Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.

          • Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere código para MS-DOS y que el compilador funcione en Linux y se haya escrito en C++.

          • Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos.

          • Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado, etc.

          • Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. El desarrollo de los metacompiladores se encuentra con la dificultad de unir la generación de código con la parte de análisis. Lo que sí se han desarrollado son generadores de analizadores léxicos y sintácticos.

          Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación.

          7.3 Función de Un Compilador

          A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente.

          A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de lenguajes fuente, desde los lenguajes de programación tradicionales, como FORTRAN o Pascal, hasta los lenguajes especializados que han surgido virtualmente en todas las áreas de aplicación de la informática. Los lenguajes objeto son igualmente variados; un lenguaje objeto puede ser otro lenguaje de programación o el lenguaje de máquina de cualquier computador entre un microprocesador y un supercomputador. A pesar de existir una aparente complejidad por la clasificación de los compiladores, las tareas básicas que debe realizar cualquier compilador son esencialmente las mismas. Al comprender tales tareas, se pueden construir compiladores para una gran diversidad de lenguajes fuente y máquinas objeto utilizando las mismas técnicas básicas.

          Nuestro conocimiento sobre cómo organizar y escribir compiladores ha aumentado mucho desde que comenzaron a aparecer los primeros compiladores a principios de los años cincuenta. Es difícil dar una fecha exacta de la aparición del primer compilador, porque en un principio gran parte del trabajo de experimentación y aplicación se realizó de manera independiente por varios grupos. Gran parte de los primeros trabajos de compilación estaba relacionada con la traducción de fórmulas aritméticas a código de máquina.

          En la década de 1950, se consideró a los compiladores como programas notablemente difíciles de escribir. EL primer compilador de FORTRAN, por ejemplo, necesitó para su implantación de 18 años de trabajo en grupo (Backus y otros [1975]). Desde entonces, se han descubierto técnicas sistemáticas para manejar muchas de las importantes tareas que surgen en la compilación. También se han desarrollado buenos lenguajes de implantación, entornos de programación y herramientas de software. Con estos avances, puede hacerse un compilador real incluso como proyecto de estudio en un curso de un semestre sobre diseño sobre de compiladores.

          7.4 Ventajas de compilar frente a interpretar:

          Se compila una vez, se ejecutan varias veces.

          En bucles, la compilación genera código equivalente al bucle, pero interpretándolo se traduce tantas veces una línea como veces se repite el bucle.

          El compilador tiene una visión global del programa, por lo que la información de mensajes de error es más detallada.

          Ventajas del intérprete frente al compilador:

          Un intérprete necesita menos memoria que un compilador. En principio eran más abundantes dado que los ordenadores tenían poca memoria.

          Permiten una mayor interactividad con el código en tiempo de desarrollo.

          8. Elaboración de Programas.

          Los programas son los bloques de construcción de los sistemas de información. Cuando se hacen productos de software, los programadores siguen un proceso que se parece al ciclo de vida de los sistemas de información completos. El ciclo de vida de desarrollo de sistemas (SDLC). Ahora discutiremos el ciclo de vida del desarrollo de software que es parecido.

          8.1 Análisis de las necesidades.

          Este análisis es la etapa donde se identifica y entiende una necesidad o problema. En la primera etapa el programador revisa el diseño del programa para ver lo que el usuario necesita para hacer una interfaz y el punto de inicio, y además lo que el usuario necesita que el programa realice. Normalmente, el usuario final debe tener mucha información para la capa del análisis de las necesidades. Una ves que el programador a terminado el punto inicial y el punto final del programa, puede comenzar a diseñar el código.

          8.2 Diseño del programa.

          El diseño del programa es la fase done el programador comienza a aproximarse a la lógica que utilizaran cuando empiece la creación de código real. Se pueden usar muchas herramientas en el proceso de diseño de un programa, aunque a menudo los programadores usan pizarras y servilletas. Tres de estas herramientas del diseño son los diagramas IPO (para la programación estructurada) líneas con círculos y mensajes (programación orientada a objeto) y pseodocódigos.

          8.3 Desarrollo.

          El desarrollo o codificación se relaciona con la escritura y pruebas de código fuente. La fuente de desarrollo del software es parecida a la fase de desarrollo del ciclo de vida de los sistemas, pero en lugar de determinar el diseño general del sistema, el programador escribe el código que implementa los requerimientos del usuario. El programador puede escribir el código fuente en un editor de texto y luego compilar el código. O puede utilizar un editor visual y crear una imagen de la aplicación antes de compilar el código. La mayor parte del trabajo que se requiere para terminar un programa se ocupa en esta etapa utilizando los lenguajes de programación de los que ha aprendido anteriormente. A pesar de sus mejores esfuerzos, los programadores inevitablemente crean errores en sus programas. Existen dos tipos principales de errores: errores de sintaxis y errores lógicos. Los errores de sintaxis violan las reglas del lenguaje de programación. Encontrar errores de sintaxis es relevantemente sencillo debido a que el compilador o intérprete los señalara para el programador. Los errores lógicos, errores realizan el algoritmo, son más difíciles de encontrar y probablemente no aparecerán sino hasta semanas o meses después de que ha sido implementado. El proceso de identificar y eliminar estos errores que se conoce como depuración.

          8.4 La implementación.

          La implementación se relaciona con la instalación del software y con permitir que los usuarios lo prueben. Este paso normalmente incluye una gran cantidad de documentación, tanto dentro del código como en la forma de manuales para los usuarios. Muchos programadores también le dirán que realizan la mayor parte de la depuración en esta capa. Es realmente en la capa de implementación cuando cualquier error de concepción que haya tenido el programador en el código que se encuentra y repara.

          8.5 Mantenimiento.

          El mantenimiento comienza tan pronto como el programa ha sido instalado. El trabajo en los productos continúa por distintas razones. Es probable que algunos errores menores no se hayan reparado en el momento en que el programa fue terminado. También es probable que los programadores quieran añadir funciones nuevas importantes en respuesta a las demandas del mercado o las solicitudes de los usuarios. Ésta es la etapa más larga de ciclo de vida del desarrollo de programas, y algunas veces puede durar varios años.

          Conclusión

          La programación, Los lenguajes que figura la misma y el Desarrollo de software son elementos imprescindibles para el mundo de la computación hoy en día. También como ha vendido de generación en generación la evolución de La Programación y el desarrollo de software podemos calificarla como la protagonista de muchos de los adelantos tecnológicos que en la actualidad podemos dar uso.

          Al finalizar con este trabajo nutrimos de conocimientos nuestras mentes de los conocimientos básicos de la programación así como también del largo y delicado proceso que conlleva el Desarrollo de Software, de los elementos que en ella entran y de los pasos que son necesarios a la hora de la elaboración de Software.

          En resumen tratamos de aprender y sacar provecho de este trabajo al máximo como también esperamos que usted querido lector que acaba de concluir leyendo este valioso material le sea de mucho provecho y ayuda.

          BIBLIOGRAFIA:

        • Enciclopedia universal de los conocimientos (Grupo Océano), Modulo 6 “Computación” Pág. 43-49.

        • Desarrollo de algoritmos y sus aplicaciones. Guillermo Correa. Pág. 11-60.

        • Introducción a la computación y a la programación estructurada Pág. 213-241. y 241-269. Guillermo Levine. Grupo Micrologica, Universidad Micrologica de México.

        • Enciclopedia del lenguaje C. 1ª Edición.

        • Francisco Javier Ceballos. Edición Alfa omega rama 1999

        • http://www.wikipedia.com/programacion

        • http://www.mitecnologico.com/Main/ProgramacionEstructurada.

        • Glosario

          Anidamiento. En los lenguajes de programación estructurada, el anidamiento está relacionado a la inclusión de estructuras de control dentro de otras, usualmente indicado mediante la inclusión de distintos niveles de sangría (llamada indentation en inglés) dentro del código fuente.

          Booleanas: Es un tipo de datos (en computación) que puede representar valores de lógica binaria, esto es, valores que representen falso o verdadero. Se utiliza normalmente en la programación, estadística, electrónica, matemáticas (Álgebra booleana), etc...

          Bucle: en programación también llamado ciclo, es una sentencia que se realiza repetidas veces a un trozo aislado de código, hasta que la condición asignada a dicho bucle deje de cumplirse.

          Bug: (Error de software en español) es el resultado de un fallo o deficiencia durante el proceso de creación de programas de ordenador o computadora (software).

          Identacion: En los lenguajes de programación de computadoras, la indentación se utiliza para mejorar la legibilidad del código fuente por parte de los programadores, teniendo en cuenta que los compiladores o intérpretes raramente consideran los espacios en blanco entre las sentencias de un programa. Sin embargo, en ciertos lenguajes de programación como Haskell, Occam y Python, la indentación se utiliza para delimitar la estructura del programa permitiendo establecer bloques de código.

          Pseudo: Pseudo o seudo, es un prefijo proveniente del griego ψεῦδο-, significa falso.

          Sentencia: Es una o varias instrucciones especificadas en un lenguaje de programación que pueden ser ejecutables la computadora.

          PROGRAMASION

          THE GRAPLEX

          2009

          36