Conceptos de Programación

 

Para programar una computadora primero es necesario saber el objetivo de la programación, es decir, es el poder responder a la pregunta ¿Para qué se va a programar tal o cuál computadora? La respuesta a esta pregunta es, claramente, para resolver algún problema específico. El caso es, que para resolver tal problema se debe de incluir paso a paso como lo resolverá la computadora; esto incluye entonces hablar, además de la programación y los lenguajes, de los algoritmos, que son los pasos a seguir que sirven, usando los lenguajes, para programar las computadoras. Este capítulo consiste en identificar algunos términos y aspectos fundamentales del trabajo que se desarrolla al programar computadoras. La programación de las mismas, para qué sirve y en qué consiste, el lenguaje de alto nivel c, que se utiliza para llevar a cabo la Programación.

 

Computadora

Por estar más asociada a una máquina, se le considera a la palabra computadora con género femenino. Originalmente, esta máquina fue llamado computador, debido al proyecto donde se diseño el prototipo del primer computador electrónico por John von Newmann ( no es John Bon Jovi ), mismo que fue un subproyecto durante el desarrollo del proyecto Los Alamos, que consistía en desarrollar la primera bomba atómica. Dicho subproyecto recibía el nombre de MANIAC ( Mathematical, Analyzer, Numerical, Integrator and Computer ). Actualmente llamado computadora. Ésta es una herramienta automática, diseñada y pensada para realizar trabajo útil para las personas. Sus principales bondades son que puede sumar a gran velocidad y que puede tomar cierto tipo de decisiones, consideradas como decisiones lógicas, ( es cuando se involucra la estructura if ( ) { } else { }; ). Para hacer que ella trabaje hay que decirle que hacer y como hacerlo, y se limita únicamente a seguir instrucciones, por lo que se le debe decir paso a paso todo lo que tiene que hacer. A través de un lenguaje de programación. Las instrucciones constituyen un programa de computadora.

 

Hardware

Originalmente esta palabra hacía y sigue haciendo alusión, en Estados Unidos, al lugar donde se venden tornillos, cables, tubos, focos, cacharros y que corresponde a lo que en México sería una ferretería. Al mismo tiempo, tales tornillos, cables, tubos, y focos son llamados, ellos mismos, hardware. Las primeras computadoras electrónicas fueron conjuntos de tornillos, cables, focos, bulbos, tubos y demás armatostes, del tamaño de un edificio de dos pisos de alto, por esta razón histórica, se le llama hardware al conjunto de partes que son tangibles en una computadora, es decir, que se pueden tocar.

 

Software

Al conjunto de partes que no son tangibles en una computadora se le conoce como software. Aunque traducido este término en español significa que es la parte blanda, en realidad, si fuese una parte blanda, por lo menos sería tangible. No obstante, la parte intangible se refiere a que son los programas y datos que pueden estar almacenados en la memoria de la máquina, pero una vez apagada esta, los datos y los programas se volatilizan, recuperándolos solamente de los medios donde esta memoria se pueda conservar para usos posteriores, y estos medios físicos también son hardware. Por tanto el software no se percibe con nuestros sentidos, sabemos que está dentro de la máquina por que se ven trabajar los programas procesando datos.

 

Programa

Un programa es todo software que pueda activar quién usa directamente una computadora. La principal tarea de una computadora es la de resolver problemas, para describir la solución de alguno de estos, debemos enfocarlo en varios niveles. Primero se concibe una idea preliminar de los pasos básicos; seguidamente se va elaborando esta idea preliminar con pasos más detallados. Poco a poco se va profundizando hasta describir todo con suficiente detalle. Éste es también el método plenamente aceptado para escribir un ensayo: después de generar la estructura detallada se convierte en un trabajo completamente terminado.

 

Lenguajes

Las computadoras necesitan que se les diga que hacer, y sobretodo, como hacerlo, pero de forma que en ningún momento se genere alguna ambigüedad. Desgraciadamente el lenguaje en el que nos comunicamos, es decir, el habla, como lenguaje natural, causa vaguedad, aún en ciertos idiomas como el español, de modo que, esta es una razón importante para no utilizar este idioma como lenguaje de programación. Como ejemplo, observemos la frase siguiente:

"La señora hizo el robot rápido".

Ésta puede contener, al menos, los siguientes tres significados:

 

- La señora construyó el robot rápidamente.

- La señora construyó el robot para que funcionase rápidamente.

- La señora convirtió el robot lento en rápido.

 

En vez de utilizar el lenguaje natural para programar se han desarrollado lenguajes especiales, lenguajes de programación o lenguajes de computación. Estos lenguajes son muy precisos y permiten a la computadora interpretar un programa de forma no ambigua. De igual forma que, al escribir un ensayo, hay una etapa que convierte un esbozo en lenguaje natural, existe el paso al escribir un programa que traduce una idea general a un lenguaje de programación.

 

Ejecutar o Correr un Programa

El trabajo no se termina al escribir un programa, un ensayo una vez escrito, debe pulirse. La prueba final para un programa de una computadora consiste en introducirlo a la computadora misma. Ésta asimila el programa y sigue las instrucciones contenidas en él. A éste proceso se le denomina correr o ejecutar el programa. Puede ocurrir que la computadora tenga alguna dificultad en seguir las instrucciones, por ejemplo, el programa puede tener un error gramatical. Como la computadora leerá lo que se le dice antes de intentar hacer algo, los errores gramaticales son los primeros que se detectan. Una vez resueltos todos los errores gramaticales, la computadora intentará ejecutar el programa; y éste puede pedir a la computadora algo que no pueda hacer, por ejemplo, que divida algún número entre cero. Éste tipo de errores es, generalmente, más difícil de detectar y corregir.

 

Algoritmos

Un algoritmo es una forma de describir la solución a un problema. Incluye las instrucciones para hacer punto por punto el ensamble de un equipo o para escribir programas de computadora. Un algoritmo es el medio por el cual podemos explicar como puede resolverse un problema, utilizando una aproximación paso a paso. Puede formularse de muchas maneras, siempre y cuando no se realice de forma que provoque alguna ambigüedad en las instrucciones. Cada área de conocimiento desarrolla su propio lenguaje como medio de comunicación. Se han diseñado lenguajes especiales para describir algoritmos como el Ensamblador, el Pascal, el c o el c++, un algoritmo debe ser preciso y debe indicar el orden en que se realiza cada paso. Al ensamblar un equipo se debe saber si hay que meter una varilla A en la rendija B antes de meter la D en la rendija D, no basta con una lista de ingredientes, pues tenemos que conocer cuando añadir algo y cuando continuar haciendo algo más, una receta que dice únicamente meter el pastel en el horno hasta que esté hecho no es tan útil como una que indique también un criterio para saber cuando está hecho el pastel.

Un algoritmo debe estar bien definido, si seguimos un algoritmo dos veces debemos obtener el mismo resultado cada vez. Dos personas siguiendo una misma receta de pastel debe resultar en pasteles igual de sabrosos. Si no es así es porque utilizaron marcas diferentes variando la receta. Técnicamente buscamos que un algoritmo sea determinístico. Un algoritmo debe de ser finito, pues si lo seguimos este debe terminar en algún momento. Suponiendo que otra persona esté pensando en un entero y deseamos adivinarlo, consideremos éste algoritmo. Probamos con el 0, luego el 1, luego con el 2, y todos los número positivos. Luego el –1, luego con el –2 y así sucesivamente. Éste proceso se supone que nos llevará al número que queremos adivinar. Si la otra persona piensa en un número negativo nunca lo adivinaremos pues siempre tendremos números positivos para adivinar. Un mejor algoritmo sería: ensayar con el cero, luego el 1, luego el menos 1, luego el 2 y luego el menos 2, ensayando números positivos y negativos hasta hallar el correcto. El número de pasos que necesitamos aproximadamente es dos veces la magnitud del número correcto, así vemos que el segundo algoritmo es finito mientras que el primero ni siquiera es muy claro que llegue a dar con el resultado y además de que tampoco es finito.

La definición de un algoritmo debe describir tres partes entrada, proceso y salida. Un algoritmo implica generalmente una entrada, es decir, algo que existe previamente y es utilizado por el algoritmo. Un algoritmo también produce resultados llamados salidas. Como ya hemos indicado un algoritmo describe como se transforma la entrada en salida.

 

Bugs.

Al traducir éste término se llega a interpretar como "bicho", la razón de ser de éste termino se debe a que, según una anécdota atribuida a John von Newmann durante el proyecto Los Álamos, mismo que consistía en desarrollar una computadora electrónica para hacer los cálculos para las difíciles operaciones matemáticas en la elaboración de la bomba atómica, Al probar un programa que se había alimentado en la computadora y que aparentemente estaba bien diseñado, éste no funcionaba, se revisó durante tres días y no aparecía por ningún lado el error, ni por la programación ni por la lógica con la que estaba construido, entonces al hacer una revisión de los cables se encontró que una mariposa estaba atrapada en una conexión de un bulbo, ésta ya estaba quemada y no permitía el buen funcionamiento del bulbo. Al quitar la mariposa quemada y después de limpiar el bulbo el programa, dentro de la computadora funcionó perfectamente. Desde entonces a los comportamientos erróneos de un programa se le conocen como bugs. Pueden tener los siguientes orígenes (entre muchos otros):

 

Los métodos de construcción.

Lo sofisticado que sea el programa: hacer un programa fácil de usar requiere una elaboración más complicada. Este punto es de los más importantes.

Las herramientas de construcción: pueden ayudar a detectar errores o incluso, evitar que se cometan.

La necesidad de hacer programas para resolver problemas en un corto lapso y una gran cantidad de tareas que éste mismo desarrolle.

Si continuamos buscando motivos para la presencia de errores, también nos encontramos la labor intelectual requerida para construir los programas, que es bastante especial, pues requiere una gran cantidad de imaginación, entender la lógica con la cual funcionan las herramientas empleadas y las computadoras en la cual se empleará, así como un profundo conocimiento de las condiciones en las cuales operará. Durante esta labor, uno mismo realiza sus propios algoritmos en el tiempo para imaginar todas las circunstancias a las cuales se enfrentará el programa y las soluciones que les dará. Capacitar a una persona para realizar esta labor hasta un grado aceptable no es tarea fácil. Para ello se debe contar con las herramientas adecuadas. Comenzando desde la enseñanza de la programación, a esto se debe la realización de este trabajo.

 

Ingeniería de Software

Para abatir la presencia de bugs en los programas y así elevar la calidad de éstos, se abarca todo un proceso en la producción de tales programas, conocido como Ingeniería de Software.

 

Ciclo de Vida de un Programa

Solo una pequeña parte del tiempo necesario para el desarrollo de un programa se emplea realmente en escribirlo. Existen otras etapas importantes. La primera etapa al escribir un programa es la definición del problema. Si no se sabe donde ir no se puede saber cuando se llegará. A menudo el problema puede no estar claramente establecido. Considérese el encargo de enviar a los mejores clientes una oferta para probar un nuevo producto. Surgen varias cuestiones importantes. ¿Dónde está la lista de clientes? ¿Cómo sabemos que clientes son los mejores? ¿Cómo debería presentarse la oferta y qué debería decir? Estas preguntas deben contestarse antes de empezar a escribir el programa. Una vez definido el problema podemos esbozar la solución. Consideremos para resolver el problema varios enfoques alternativos; nuestra primera solución puede que no sea la mejor manera de resolverlo, pero en esta etapa no estamos muy interesados en una forma particular de resolver el problema. Si ahora diseñamos una solución mejor, ahorraremos más tiempo que si lo tenemos que adaptar posteriormente. Consideremos el problema de encontrar un número telefónico; supongamos que decidimos buscar en la guía telefónica. Podríamos buscarlo sucesivamente pero tendríamos que hacer una revisión de todos los nombres, en caso de que éste, esté al último. Éste algoritmo sería muy fácil de describir, pero resultaría muy lento. Podríamos aprovechar las entradas del índice en la parte superior de cada página, pasando a través de la guía hasta encontrar la página correcta. Luego podríamos buscar de forma secuencial dentro de la página. Éste algoritmo es más difícil de describir pero tardaría mucho menos tiempo. Desde luego este caso es claro aunque con otro tipo de problemas, la elección puede no ser tan obvia. El esbozo general elegido es desarrollado posteriormente en forma de algoritmo.

 

Método de Descomposición Top-Down

Para desarrollar un algoritmo se utiliza el método de descomposición Top-Down esto significa que se parte de una idea general y se va definiendo cada paso con más detalle. Se desarrolló empíricamente este método por los primeros programadores del M.I.T. Después de comenzar con la idea general, el proceso continua hasta que se pueda saber exactamente como resolver el problema. En algunas etapas se puede emplear algoritmos preexistentes, por ejemplo, cuando una etapa del esbozo general consiste en hacer algo que ya se ha hecho anteriormente o que está en un libro, se puede hacerlo aquí de la misma forma. Al ir desarrollando programas más complejos se va construyendo un repertorio de técnicas que podemos asociar para resolver los problemas. O, en otras palabras, se mejora la técnica de hacer programas precisamente cuando se ha programado considerablemente un buen número de programas. El consejo está dictado con una pregunta con su respectiva respuesta ¿Cómo se aprende a Programar?. La respuesta es programando. Del mismo modo como se aprende cualquier cosa que requiera que su técnica se mejore cada vez más. ¿Cómo se aprende a Jugar Futbol?. La respuesta es jugando futbol. ¿Cómo se aprende a Viajar en Metro?. La respuesta es viajando en Metro. Así que no basta decir que se sabe programar hasta que se pueda mostrar una técnica avanzada para poder aplicarla en la solución de problemas que deban resolverse por medio de computadoras y de manera independiente del lenguaje de programación.

 

Codificación

Después de elegir el algoritmo para resolver un problema. Pasaremos a escribirlo en un lenguaje de programación. Ésta etapa traduce el algoritmo abstracto a lenguaje Pascal, c o c++, que son lenguajes de alto nivel. El proceso de escribir las sentencias reales de un lenguaje de programación se llama codificación, puesto que una secuencia de tales sentencias se denomina código. Es importante no realizar ninguna codificación hasta que el algoritmo esté casi perfectamente definido para que no lleguemos a estar constreñidos a un código y no sea necesario cambiar nuestras mentes. La programación no debería confundirse con la codificación. La codificación es solo una de las etapas de la programación. Una vez que las partes de un programa se han codificado pueden comprobarse, esto implica tener la computadora preparada para comprender el programa y ejecutarlo. Es mejor comprobar los componentes de un programa por separado antes de ensamblarlo, específicamente si el programa es lo suficientemente grande; en caso contrario sería difícil encontrar la fuente de los errores. Los errores de un programa se llaman defectos y la operación de detectarlos y corregirlos es depuración. El proceso de depuración implica comprobar los distintos casos en los que el programa va a trabajar; Si encontramos errores, por ejemplo, una salida incorrecta, debemos buscar la causa de cada error. Para cada uno de ellos se realiza el oportuno cambio en el programa que elimine el error o bug. Tales modificaciones a menudo eliminan errores pero ocasionalmente aparecen otros nuevos por lo que es necesario volver a comprobar el programa con el fin de asegurarnos que todavía funciona para los casos anteriores y que los nuevos los trata adecuadamente. Continuamos comprobando el programa y corrigiendo errores hasta que hallamos comprobado todos los casos y no existan más errores. La fase de prueba solo muestra la presencia de errores pero no su ausencia. Pueden existir otros que no se hallan encontrado probablemente porque no hallamos probado todos los casos posibles.

 

Documentación de un programa

Hasta este momento solo hemos considerado el programa pero no la aplicación del programa a los demás. Como veremos un programa puede ser bastante complicado y confuso por lo que es importante que incluya explicaciones de lo que pretende hacer y cómo lo hace. Estas explicaciones se denominan documentación. Para hacer los programas más legibles a los demás se emplean a menudo diversas técnicas. Para reflejar la estructura es conveniente dar un formato al programa de la misma forma que se sangra un escrito para reflejar los niveles del ensayo preliminar. Pequeños comentarios se dispersan a través del código con el fin de explicar como funciona el programa. Estos son elementos de documentación interna. Se escribe así mismo un documento formal ( describiendo entrada, salida y función del programa, así como el funcionamiento de éste ), con el fin de permitir un uso efectivo del mismo. La documentación también permite modificar más fácilmente el programa. Aunque existe una cierta tendencia en retrasar la confección de la documentación hasta que el programa esté totalmente depurado, es mejor escribirlas durante el desarrollo del mismo; según va avanzando el diseño se pueden incorporar en la documentación las decisiones en el mismo momento en que se tomen. Se debe dejar muy poca documentación para la fase de codificación y después de las depuraciones puesto que una vez que el programa esté funcionando habremos olvidado probablemente la mayor parte de las decisiones de diseño. Lo único que deberíamos dejar para el final es refinar la documentación no el escribirla.

 

Mantenimiento de un Programa

Los problemas académicos finalizan aquí, pero los programas reales mantienen su periodo de vigencia. Un programa real se escribe porque existe un problema real que hay que resolver, y una vez que el programa esté disponible se puede pensar en que realice otras funciones útiles o en casos que no estaban especificados claramente y que no resuelven el problema adecuadamente. Todo esto conduce a la fase de mantenimiento de un programa. Para que el programa satisfaga nuevos requerimientos. Tendrán que efectuarse algunas modificaciones, algunas veces revisadas por el programador original, otras veces por otra persona. Si no se entrega un programa para modificar primero debemos averiguar como funciona y luego determinar como debería modificarse. En muchos programas este proceso es más costos que el desarrollo original. El mantenimiento de los programas puede simplificarse con el uso de buenos hábitos de programación tales como escribir un buen código comprensible y generar una buena documentación interna y externa.

 

Organización de la Computadora

El conocimiento de la organización nos ayudará a entender como funciona y como utilizarlo. La topología de una computadora tiene forma de estrella. El centro de la computadora hace el trabajo y toma las decisiones de forma análoga a la función del cerebro. Rodeando este se encuentran los dispositivos para comunicarse con el mundo exterior, entre estos están los dispositivos de entrada como órganos sensores, y los dispositivos de salida como cuerdas vocales. Algunos lo son tanto dispositivos de entrada como de salida, como una terminal de computadora. Las manos y la boca son también dispositivos de entrada y salida. La parte central del sistema es denominada unidad central de proceso, C.P.U. Esta parte ejecuta las instrucciones de un programa y controla los dispositivos de entrada y salida. Posee una memoria interna que contiene entre otras cosas las partes del programa que se está ejecutando y la información manipulada por éste. Esta memoria también se denomina memoria de núcleos porque primitivamente estaba compuesta de minúsculos núcleos de cobre, actualmente se sigue utilizando el mismo nombre para indicar la memoria central de la computadora. Existen muchos tipos de dispositivos de entrada y salida. Un dispositivo común de salida, es una impresora. La velocidad de una impresora va desde 300 o menos líneas por minuto hasta 2000 líneas por minuto. La mayoría imprime solo caracteres de anchura fija y algunos no pueden imprimir letras minúsculas. Algunas más modernas pueden imprimir gráficos y diagramas. Actualmente las computadoras poseen dispositivos para leer y escribir sobre discos con tecnología laser, estando la computadora interesada únicamente en los escrito en estos discos llamados compac disc, y no en como funcionan. El familiar aviso de que es peligroso maltratar la superficie es para que estos puedan introducirse en un lector de discos compactos.

Un dispositivo de entrada y salida es una terminal, conocido como crt, (cathod ray tube), ya que la pantalla es a menudo un tubo de rayos catódicos, similar a un monitor de un televisor. Dispositivos de salida menos habituales contienen sintetizadores de voz y brazos de robot. Las computadoras ahora son capaces de avisar audiblemente a un conductor que el coche tiene bajo nivel de gasolina, o exclamar que acaba de ganar una partida de ajedrez. Dispositivos de entrada actualmente más comunes, son cámaras y sensores de instrumentos de laboratorio.

 

Lenguaje de Máquina

Una computadora convencional no entiende el lenguaje de programación directamente; esto es parecido al problema de una persona nativa de España que también habla francés pero no perfectamente, esta persona piensa en español y traduce todo lo que oye o lee del francés al español y todo lo que dice o escribe del español al francés. El lenguaje nativo de una computadora se denomina lenguaje máquina y consiste en un código binario, conteniendo solo ceros y unos. Las primeras computadoras se programaban exclusivamente en lenguaje máquina pero muy pronto se desarrolló un lenguaje simbólico que puede traducirse fácilmente a lenguaje máquina; fue denominado lenguaje ensamblador, porque las instrucciones máquina eran ensambladas directamente a partir de las instrucciones del editor utilizando un ensamblador. Posteriormente, se inventaron los lenguajes de alto nivel, el primero fue el FORTRAN, muy bueno al principio, pero con él se llegó a un atraso en el aprendizaje de la programación, y que aún persiste debido al no poder aún romper el paradigma de programación que el FORTRAN trajo desde la primera mitad de los 50s; Para traducir las instrucciones al lenguaje máquina se construyeron compiladores. Estos lenguajes se denominaban lenguajes de alto nivel porque la traducción de programas escritos en estos lenguajes a lenguaje máquina es complicada y cada sentencia esta en lenguaje de alto nivel. Puede compilarse en varias sentencias de lenguaje máquina.

 

Compilador

Un compilador es un programa que toma como entrada otro programa y produce como salida un programa en lenguaje máquina y una serie de mensajes. El programa de entrada se denomina un programa fuente, y el de salida se llama programa objeto. Después de ejecutarse el compilador, se ejecuta el programa objeto resultante. Este programa hace lo mismo que se pedía en el programa original escrito en el lenguaje de alto nivel poseyendo, así mismo, sus propias entradas y salidas.

El compilador tiene dos tareas importantes, la primera es la de hacer una revisión sintáctica del programa escrito en lenguaje de alto nivel, llamada también revisión de la edición; la segunda tarea es que, una vez hecha la revisión sintáctica y al no encontrar ningún error de sintaxis, se traduce el programa fuente en el programa objeto. Los compiladores modernos son mucho muy rápidos pueden revisar diez mil líneas de programación en menos de tres segundos. Y marcar los errores o bugs de programación también en menos de 5 segundos.

 

Programación

La buena programación se ha convertido en una técnica bastante avanzada y existen varias opiniones sobre cuál es la mejor forma de escribir un programa; no obstante, los tres criterios más importantes para determinar si un programa es bueno son: corrección, claridad y eficiencia. Un programa correcto hace lo que se supone que debe hacer de acuerdo con su especificación, en el sentido de que su salida es correcta para cualquier entrada válida. El problema es que el programa tiene que funcionar para cualquier entrada aceptable y no es posible comprobar cada caso para poder decir si un programa maneja todas las entradas adecuadamente. Una buena regla general es comprobar casos representativos que comprueben todos los caminos posibles a través del programa. Así como las condiciones límite. Una condición límite se detecta utilizando un valor de entrada extremo para que si fuese ligeramente mayor o menor el programa escogería un camino diferente. Por ejemplo. Un programa que imprima todos los números primos menores que un valor dado. Debería probarse para el 0, 1, 2 y 3 además de para unos pocos números primos y unos pocos números compuestos ( es decir, no primos ). Dependiendo del algoritmo utilizado puede ser importante probar otros casos específicos. Un programa claro es aquel que sea fácil de entender. Como mínimo el 90% del costo de un programa grande reside en las faces dedicadas a documentarlo y mantenerlo. Un programa claro es fácil de escribir, depurar y mantener y por tanto más barato a lo largo de su vida que un programa escrito en su forma oscura. El desarrollo de un buen estilo de programación es útil para escribir programas claros. Para tener una idea de estos estilos diferentes es conveniente leer programas de otras personas. El estilo es a menudo algo subjetivo y personal, pero algunas organizaciones han intentado obtener un estilo uniforme promulgando estándares de programación. Aunque tales estándares de programación pueden molestar a los programadores experimentados, facilitan la modificación de los programas y ayudan a educar a los programadores principiantes.

Una consideración importante para un programa es conocer los recursos que consume cuando se está ejecutando. Un programa eficiente consume pocos recursos en relación con el trabajo que realiza. Los recursos más comunes que se consideran son espacio (cuánto ocupa el programa y cuanta información se necesita para seguirlo), tiempo (cuanto tiempo tarda en ejecutarse) y operaciones de entrada–salida (cuantas veces tiene que pedir la misma información). A menudo existen relaciones entre ellos; por ejemplo, las operaciones de entrada–salida pueden reducirse aumentando la cantidad de información mantenida o los requisitos de espacio del programa.

 

1 1
Hosted by www.Geocities.ws