Академический Документы
Профессиональный Документы
Культура Документы
1. Era de la informacin. Evolucin de las computadoras (1/2) 2. Era de la informacin. Evolucin de las computadoras (2/2) 3. Primera generacin de computadoras 4. Nuevas generaciones de computadoras 5. Computador (ordenador). Caractersticas y funciones bsicas 6. Computador(ordenador). Software y hardware 7. Ordenador. Supercomputadoras. Mainframe 8. Computador personal. Servidores 9. PDAs. Computadoras vestibles 10. CPU. Organizacin o estructura. Memoria 11. Computadora. Interfaz y dispositivos de entrada y salida 12. Sistemas de numeracin. Binario a decimal 13. Sistemas de numeracin. Decimal a binario 14. Programacin. Principios. Programacin clsica (1/2) 15. Programacin. Principios. Programacin clsica (2/2) 16. Programacin. Tendencias. Programacin estructurada (1/2) 17. Programacin. Tendencias. Programacin estructurada (2/2) 18. Programacin orientada a objetos - OOP 19. Principios de una buena programacin 20. Software. Ciclo de vida 21. Software. Desarrollo 22. Programas. Desarrollo. Codificar un programa 23. Desarrollo de programas. Editores 24. Compiladores e intrpretes de programas 25. Depuradores de programas. Errores de cdigo y comentarios 26. Algoritmo. Instrucciones precisas 27. Diseo Top-Down 28. Algoritmo. Pseudocdigo 29. Algoritmo. Trabajando con las entradas 30. Igualdad y asignacin de algoritmo 31. Algoritmo. Construccin. La orden de GOTO (1/2) 32. Algoritmo. Construccin. La orden de GOTO (2/2) 33. Teorema de la estructura. Construccin (1/2) 34. Teorema de la estructura. Construccin (2/2) 35. Algoritmo. Construccin. Definir un problema 36. Algoritmo. Construccin. Escribir algoritmos 37. Variables y constantes (1/2) 38. Variables y constantes (2/2) 39. Datos. Tipos de datos (1/2) 40. Datos. Tipos de datos (2/2) 41. Expresiones y rdenes
1|Pgina
Captulo 1:
Regla de clculo (1625 D.C.): Inventada por John Napier, fue una herramienta de clculo sumamente til, pues se utiliz hasta fines de 1960. Utilizaba las distancias fsicas para multiplicar y restar.
Figura. 3. Pascalina, construida en 1642 Charles Babbage (1822): Ch. Babbage dise una mquina que funcionaba con vapor y que llam motor de diferencias, esta mquina era del tamao de un cuarto y era capaz de calcular las tablas de multiplicar y las tablas de logaritmos.
La ABC (1937): En 1847 George Bool desarroll el lgebra bivalente, ahora conocida como algebra booleana, y es la base matemtica en la que residen todos los clculos que hacen las computadoras modernas, la primer computadora que utiliz este sistema se construy en 1937, se llam ABC, que son las iniciales de Atanasoff Berry Computer.
Figura. 5. Computadora ABC, hecha por Vincent Atanasoff y Clifford Berry en 1937. Las primeras computadoras electrnicas se construyeron entre las dcadas de 1920 y 1930, lo que marc la era de las computadoras electrnicas. Las computadoras que se construyeron con componentes electrnicos han cambiado de acuerdo a la tecnologa electrnica de sus componentes, esta es la primera clasificacin de los tipos de computadoras, cada clase se le conoce como generacin.
Captulo 3:
4|Pgina
Consumo de energa: Esta clase de computadoras gastaba muchsima energa elctrica, alrededor de 200 KW/h, de modo que cuando la ENIAC funcionaba, toda la ciudad de Philadelphia se enteraba, porque bajaba la corriente elctrica. Poca confiabilidad: Esto se debi principalmente a que los componentes electrnicos con los que estaban construidas estas computadoras, fallaban en promedio cada 7 minutos y medio, lo que obligaba a reiniciar los clculos en cada evento de esta naturaleza. En ocasiones la computadora arrojaba resultados diferentes en cada corrida, dependiendo de qu bulbo (o componente) estaba daado.
Figura. 6. John von Neumann a un lado de la computadora ENIAC En 1946, John von Neumann, quien fue pionero en las ciencias computacionales, estudi e hizo significativos aportes al desarrollo del software, de hecho, fue von Neumann quien invent los diagramas de flujo. Las principales lneas de investigacin en la teora de la programacin fueron: Las instrucciones y los datos se almacenan en un lugar especfico en la computadora, la memoria de lectura y escritura. El espacio en memoria era perfectamente distinguible por localidades nicas, nombradas por medio de una direccin. Los programas se ejecutaban en forma secuencial, y a su vez, las instrucciones de los programas tambin se hacan en forma secuencial.
Captulo 4:
Con la invencin del circuito integrado se termin la segunda generacin de computadoras, dando paso a la tercera generacin de computadoras. Los circuitos integrados (CIs) agrupaban todos los componentes esenciales de la computadora dentro de una unidad encapsulada. Esto hizo que se eliminaran las conexiones por cableado entre los componentes, lo que a su vez deriv en menos consumo de energa y redund en mayor confiabilidad. La memoria de la computadora fue de los componentes que se vieron ms beneficiados, porque ahora es posible disponer de mayor capacidad de almacenamiento que nunca antes La cuarta generacin de computadoras empez a mediados de la dcada de 1970, cuando las primeras microcomputadoras ya estaban disponibles en el mercado. Notemos que hasta la tercera generacin, las clases de computadoras estaban diferenciadas principalmente por la tecnologa de sus componentes, a partir de la cuarta generacin, la clasificacin se volvi ms ambigua, debido a que ahora un aspecto importante era la funcionalidad y el desempeo.
Figura. 7. La computadora Apple 1, de 1976, se vendi como un kit de "hgalo usted mismo" en unos $600.0 El precio de las computadoras personales (PCs), que son miles de veces ms poderosas que la ENIAC, es mucho menor. Los avances tecnolgicos, como el desarrollo de los CIs y tecnologa de superconductores hicieron posible que el costo de produccin disminuyera significativamente, y con esto, el costo de venta para los usuarios finales. Ahora ya hemos alcanzado la quinta generacin de computadoras con la caracterstica de cmputo empotrado, cmputo vestible, cmputo molecular y la inteligencia artificial. En la actualidad hay computadoras hechas de molculas de ADN, aunque su funcionalidad an no es de propsito general, se estn logrando significativos avances en este aspecto. Ejercicios: 1) Elabore un ensayo sobre la historia de los lenguajes de programacin, considerando de manera particular las fechas de los eventos ms importantes y los personajes ms representativos. 2) Elabore una lnea de tiempo sobre la historia de las computadoras y la historia de los lenguajes de programacin. 3) Agregue a la lnea del tiempo del ejercicio anterior, algunos de los eventos ms sobresalientes en la historia universal.
6|Pgina
Captulo 5:
Figura. 8. Alan M. Turing propuso lo que conocemos como la "prueba de Turing", en la cual se
7|Pgina
determinaba si la computadora era capaz de confundirse con un ser humano. La prueba de Turing se trataba de hacer un dialogo entre una computadora y una persona, pero la persona no debera saber con quin estaba dialogando. Si la persona era capaz de reconocer que su interlocutor no era una persona, entonces la computadora no pasara la prueba; al contrario, si la persona no poda reconocer que se trataba de algo (no de alguien), entonces la computadora tendra el reconocimiento de tener inteligencia como la humana. Hasta ahora, ninguna computadora ha sido capaz de vencer en la prueba de Turing, aunque los avances en este sentido han sido asombrosos. Por ejemplo, se ha dado el caso de que una computadora ha vencido en el juego del ajedrez a campeones mundiales de la especialidad, hay computadoras que hacen diagnsticos mdicos, cirugas, evaluaciones y tomas de decisiones. Pero aunque estas tareas resulten asombrosas para las computadoras, hay an cosas humanas que no pueden hacer, como desarrollar tareas impredecibles, como responder a preguntas que jams antes haban conocido.
Captulo 6:
8|Pgina
Conocemos como hardware a lo que es tangible en la computadora, como el monitor, todos los circuitos electrnicos, mecnicos o elctricos; los componentes de plstico o cualquier otro material. En general, el hardware de la computadora se puede dividir en tres partes: I) El hardware de entrada: Son aquellos dispositivos que sirven para meter datos a la computadora. II) El hardware de procesamiento central: Son aquellos componentes que sirven para procesar los datos, ya sean numricos, alfanumricos, visuales, textuales o de cualquier otra clase. III) El hardware de salida: Son los elementos constituyentes de la computadora que sirven para recibir informacin de ella.
Captulo 7:
9|Pgina
Figura. 9. Supercomputadora BlueGene L, la mejor del mundo hasta ahora (sep/2007). Es una mquina de 360 TeraFLOPS (360 1012, o 360.000.000.000.000) Mainframe. (Figura 10). El significado del trmino mainframe dentro de la computacin, ha cambiado varias veces. Al principio, mainframe era un trmino con el que se designaba a las computadoras que se alojaban en cuartos enormes, luego se utiliz para distinguir las mquinas que compartan los recursos con muchas computadoras de menos poder de cmputo. Ahora, el trmino se refiere usualmente a las computadoras compatibles con el sistema IBM 360. Otras computadoras con las mismas capacidades se suelen llamar servidores. En general, nosotros entenderemos como mainframe, una computadora que es capaz de compartir los recursos con muchas otras computadoras de menor capacidad. Los mainframes se utilizan en universidades, bancos, etc. Una computadora mainframe acepta entradas de otras terminales, u otros mainframes. Una terminal es una computadora con muy poco poder de cmputo que requiere de los servicios que presta un mainframe, usualmente se les conoce como terminales tontas.
10 | P g i n a
Captulo 8:
Figura. 11. Computadoras personales. Actualmente ya tienen mucho poder de cmputo, son relativamente baratas y corren una amplia gama de aplicaciones. Las computadoras personales pueden ejecutar una amplia gama de aplicaciones de propsito general, como procesadores de texto, hojas de clculo, presentadores de transparencias, manejadores de bases de datos, entre otros. Tambin se conocen como terminales, o estaciones de trabajo. Pueden caber perfectamente en un escritorio, en conjunto con un monitor, un ratn y un teclado. La mayora de los negocios hacen redes interconectando varias estaciones de trabajo. (Figura 12). Servidores de redes. (Figura 12). Son similares a las PCs pero mucho ms poderosas. Los servidores manejan la seguridad de la red, archivos compartidos e impresoras compartidas. Un servidor es una computadora optimizada para proporcionar servicios a otras computadoras en una red de computadoras. Los servidores generalmente tienen procesadores poderosos y mucha memoria y discos duros de enorme capacidad.
11 | P g i n a
Figura. 12. Computadoras personales. Frecuentemente se utilizan computadoras personales para conectarlas y hacer una red de computadoras.
Captulo 9:
12 | P g i n a
PDAs. (Figura 14). Los PDAs (Asistentes digitales personales) Son equipos de cmputo con generalmente poco poder de cmputo, pero esto mejora a pasos agigantados. Frecuentemente son utilizados como asistentes personales, y las aplicaciones que corren son telfono mvil, agendas, editores de planes, listas de cosas por hacer, juegos, etc. Caben en la palma de una mano, generalmente tienen una pantalla sensible al tacto para evitar el teclado. Utilizan una tecnologa de reconocimiento de patrones que les permite saber qu smbolo se dibuja con el lpiz sobre la pantalla.
Figura. 14. Computadoras personales. PDAs. Computadoras vestibles. (Figura 15). La computacin vestible an se encuentra en desarrollo, pero se pretende crear computadoras tan pequeas que se puedan incorporar en la vestimenta del usuario. Esto significara una mejor conexin con el entorno. Por ejemplo, se podra detectar la identidad de un empleado y habilitar su entrada o negar el acceso sin tener que portar una credencial o detenerse a firmar; y muchas otras aplicaciones ms.
Figura. 15. Las computadoras vestibles estn en pleno desarrollo. En un futuro cercano se podrn utilizar como ahora se utilizan los telfonos celulares.
Captulo 10:
cmo se devuelve la informacin, es til considerar la organizacin de la computadora. Las computadoras personales actuales, tienen en comn (al menos hasta hace poco tiempo), que tienen un procesador, memoria, una interfaz y dispositivos de entrada y salida (figura 16). Sin embargo, las computadoras multiprocesadores se estn volviendo ms comunes cada vez. Aunque su organizacin es una generalizacin de la organizacin de las computadoras monoprocesador. La unidad central de proceso (conocida como el procesador), la memoria y la interfaz de entrada y salida, componen la unidad computacional.
Figura. 16. Organizacin bsica de las computadoras. Una computadora opera fundamentalmente en pasos de tiempo discreto. Las computadoras son dispositivos regidos por el tiempo, en donde los pasos del tiempo los proporciona de manera peridica un reloj central de acuerdo a su frecuencia de operacin. Cuando decimos: "... tengo una computadora de 1GHz...", significa que la computadora requiere 1 nanosegundo para realizar un tick. Una operacin puede tomar varios ticks en realizarse. La velocidad de la computadora se expresa en unidades de millones de instrucciones por segundo (MIPS). Nuestra computadora de 1GHz (la velocidad del reloj) puede tener una velocidad computacional de 200 MIPS. 1) Memoria: La memoria de la computadora es un arreglo de circuitos electrnicos capaces de mantener la polaridad de sus elementos por el tiempo que se encuentre encendida la computadora. Usualmente se le conoce como RAM (Memoria de acceso aleatorio). En la memoria se alojan los programas que se estn ejecutando y generalmente los datos que deben utilizar esos programas. Dentro de los programas que debe ejecutar la computadora, el principal de ellos es el sistema operativo. El sistema operativo es un programa de computadora que se encarga de administrar los recursos del sistema de cmputo. Otros programas son los compiladores, traductores, demonios (programas que se ejecutan sin que se entere el usuario y que constantemente estn revisando una tarea especfica), etctera. 2) CPU: La Unidad Central de Procesos (CPU), se encarga de calcular y distribuir las tareas que se deben ejecutar. Entre sus funciones est la de hacer solicitudes a la memoria para obtener todos
14 | P g i n a
los datos necesarios para realizar su computacin; tambin est la de hacer gestiones a la interfaz de entrada y salida para permitir la lectura de los caracteres del teclado, los clicks del ratn, mostrar las ventanas en el monitor, etc. Frecuentemente, en las computadoras de un solo CPU, la velocidad de proceso se ve frenada por la capacidad de transmitir datos de un lado al otro, entre el CPU, la memoria y la interfaz de E/S. Antiguamente, las computadoras podan transmitir datos en conjuntos de 8 bits, ahora las computadoras pueden transmitir hasta 64 bits en cada tick del reloj (aunque a la fecha hay equipos de cmputo de 128 bits, pero son dedicados a consolas de juegos).
Captulo 11:
Figura. 17. interfaz de entrada/salida de una computadora. Contiene circuitos integrados que controlan los dispositivos de entrada y salida y establece una comunicacin con la unidad central de proceso. Existen estndares para la transmisin de datos, tanto de entrada como de salida. Es el medio por el cual se envan o se reciben seales desde un sistema hacia otros. Los datos viajan por un bus de datos. Si el bus de datos es de poca capacidad y el procesador es de mucha capacidad, por ejemplo, si el bus de datos puede transmitir hasta 16 bits en un tick, y el procesador trabaja con 32 bits en cada tick, es claro que el procesador puede esperar hasta 2 ticks para trabajar; si el bus fuera de 64 bits y el procesador de 32 bits, entonces tambin hay un tiempo de espera. 4) Dispositivos de E/S: Los dispositivos de entrada y de salida son aquellos que se conectan a la unidad de computacin por medio de la interfaz de entrada/salida.
15 | P g i n a
Hay dispositivos de entrada, como los teclados, los ratones, las tabletas digitalizadoras, los micrfonos, etc.; y hay dispositivos de salida como los monitores, las bocinas, y cualquier otro actuador. Los dispositivos de E/S se conectan utilizando los puertos de la computadora. Antiguamente haba dos puertos, el puerto serial y el puerto paralelo. Actualmente est en desuso el puerto paralelo y en su lugar hay otros puertos seriales de alta velocidad, el USB (Bus Serial Universal) que se utiliza para casi cualquier dispositivo y el FireWire que se prefiere para transmitir altas cantidades de datos o de informacin, como los videos.
Captulo 12:
Los dgitos 7, 6, 3, 2, han sido ordenados de arriba hacia abajo en orden decreciente de acuerdo a su posicin en el nmero 7632. De manera similar, el nmero binario (en base 2) del ejemplo 1, el nmero 10011 es representado por los dgitos de la siguiente tabla:
16 | P g i n a
Esto nos sirve para poder convertir cualquier nmero en binario a su expresin numrica en base decimal. Por ejemplo, el mismo nmero del ejemplo 1, el 10011 se expresa en decimal como el resultado de:
As, 100112 es equivalente al nmero 1910. El nmero en subndice a la derecha, indica la base que rige la expresin numrica. Esta misma idea la podemos aplicar a expresiones numricas de cualquier otra base. Por ejemplo, el nmero 2013:
de modo que las expresiones numricas 100112, 2013 y 1910 son equivalentes, cada una en su propio sistema numrico. Ejercicios: 1) Encuentre las expresiones numricas en sistema decimal equivalentes de los siguientes nmeros: a) 3368 b) 3367 c) 3369 2) El nmero decimal 845 es equivalente a qu numero binario? a) 11010011012 b) 11010111012 c) 11010011002
Captulo 13:
De modo que el nmero binario buscado es 101100100. Una vez terminadas las divisiones, el resultado se obtiene escribiendo los residuos de izquierda a derecha en orden decreciente respecto a su significancia, es decir, primero el ms significativo, hasta el bit menos significativo que se escribe en el extremo derecho. Para convertir un nmero decimal a una expresin en otra base diferente que 2 se debe considerar dividir entre la base deseada hasta que la parte entera de la divisin sea 0, y escribir los residuos de izquierda a derecha en el orden de significancia. Ejercicios: 1) Convierta los siguientes nmeros en base 10 a base 2: a) 11010 b) 79010 c) 1001110
Captulo 14:
entienden el lenguaje de 1s y 0s. Este lenguaje se llama lenguaje mquina. Una instruccin tpica en lenguaje mquina es 0000100000101111. Como las computadoras utilizan millones de circuitos electrnicos, utilizan el 1 para representar cuando tienen corriente y 0 para representar cuando no tienen corriente. Al principio, cuando se utilizaban las tarjetas perforadas, utilizaban el mismo principio. Un orificio se representaba con 1 y un no-orificio (no hay hueco) se representaba por un 0. Los estados prendido y apagado de los circuitos electrnicos de la computadora, posibilitan el uso del lgebra booleana, que fue inventada por el matemtico ingls George Boole. Los sistemas binarios operan de acuerdo con las reglas de la lgica booleana. Estas reglas se utilizan para hacer clculos con los datos. Como las personas no se sentan cmodas con el lenguaje mquina, inventaron el lenguaje ensamblador en la dcada de 1950. El lenguaje ensamblador involucra la traduccin de muchas combinaciones de nmeros en lenguaje mquina a instrucciones escritas con letras. Una instruccin tpica en lenguaje ensamblador se parece a Add A, B, que significa sumar el contenido de la variable A, con el contenido de la variable B. Cada tipo computadora tiene su propio tipo de lenguaje ensamblador. En la mayora de los casos, el tipo lo determina la marca de la computadora, aunque diferentes computadoras de la misma marca pueden tener diferentes lenguajes ensambladores. La cantidad de comandos que se utilizan en lenguaje ensamblador es la misma que en lenguaje mquina. Las computadoras suelen tener un programa especial que se llama ensamblador, que traduce un programa en lenguaje ensamblador a un lenguaje mquina, de modo que la computadora pueda entenderlo y ejecutarlo. Tanto el lenguaje ensamblador como el lenguaje mquina son lenguajes de bajo nivel, y son dependientes del procesador. Ya que cada procesador tiene su propia arquitectura, un programa en lenguaje ensamblador escrito para un procesador puede no funcionar en una computadora con un procesador diferente.
Captulo 15:
19 | P g i n a
COBOL. COBOL tambin es un acrnimo que significa COmmon Business Oriented Language. Se cre en 1960, y poda procesar clculos simples de grandes cantidades de datos. Los programas escritos en COBOL eran ms largos que aquellos que se escriban en otros lenguajes, pero a la vez, eran ms fciles de seguir. COBOL fue un lenguaje popular para las aplicaciones orientadas a los negocios que corran en computadoras grandes como los mainframes, aunque ahora ya no es tan comn, aunque an existe el compilador para este lenguaje. BASIC. Tambin es un acrnimo, significa Beginners All/purpose Symbolic Instruction Code. Se desarroll en 1964 y como su nombre lo sugiere, es un lenguaje fcil de aprender para los estudiantes y principiantes. Hasta hace algn tiempo, las computadoras tenan incluido un intrprete de BASIC en su software de fbrica. C. C se cre en 1972 como un lenguaje para hacer aplicaciones en el sistema operativo UNIX. A partir de C, se han desarrollado otros lenguajes como C++, C#, C-objetivo, incluso Java, que son lenguajes actuales y ampliamente difundidos y utilizados. Ejercicios: 1) Escribe una descripcin corta de los siguientes lenguajes: LISP, PROLOG, ADA, OBERON, RUBY y SMALLTALK. 2) Elabora una tabla comparativa, que describa los nombres de las personas que crearon el lenguaje y las fechas de creacin de todos los lenguajes que se mencionaron en el texto, incluyendo los del punto anterior. 3) Menciona, para cada lenguaje de los anteriores, qu tipo de aplicacin es aconsejable hacer con cada lenguaje de computadora. Los lenguajes de alto nivel se parecen ms al lenguaje natural que los lenguajes ensambladores, porque utilizan palabras como el lenguaje cotidiano (usualmente en ingls) como BEGIN, END o IF. Los compiladores y los intrpretes se utilizan para convertir programas de alto nivel a bajo nivel. Cada instruccin de alto nivel se traduce varias instrucciones de bajo nivel. Los lenguajes de cuarta generacin (4GLs) tienen comandos que se parecen mucho ms a los lenguajes humanos. SQL (Structured Query Language) es un lenguaje de cuarta generacin. La mayora de los lenguajes de cuarta generacin se utilizan para manipular bases de datos. Por ejemplo, un comando en SQL como el siguiente...
... se puede utilizar (junto con otros comandos) para obtener informacin de los empleados en una base de datos. Los lenguajes de cuarta generacin son ms fciles de aprender y de manipular, pero son ms difciles de interpretar por la computadora. La computadora requiere de ms recursos para traducir una instruccin en lenguaje de cuarta generacin.
20 | P g i n a
Cada lenguaje de programacin tiene sus ventajas y desventajas. Por ejemplo, FORTRAN es muy bueno para hacer clculos numricos, pero es muy malo para hacer formatos de texto en la pantalla; mientras que COBOL es muy bueno para dar formatos de texto en la pantalla, pero muy malo para hacer cmputo numrico. Si queremos ser programadores profesionales, probablemente deberemos aprender varios lenguajes de programacin, porque actualmente los entornos de programacin permiten mezclar cdigo de diferentes lenguajes.
Captulo 16:
Por ejemplo. Un clculo de inters general podra ocupar un mdulo en un programa; cualquier otra parte del programa puede utilizar ese mdulo, as que se puede llamar en varias ocasiones por otros mdulos. El diseo modular de un programa se complementa con el desarrollo top-down porque los subpasos en el proceso del desarrollo en realidad es hacer ms mdulos en el programa (Figura 18).
Figura. 18. Diseo modular con filosofa Top-Down para el desarrollo del Software.
Captulo 17:
22 | P g i n a
Figura. 19. Sistema de Base de Datos La mayora de los lenguajes de cuarta generacin se utilizan para acceder a las bases de datos, quienes utilizan los siguientes componentes (figura 19): Sistema manejador de Bases de Datos. (DBMS) El manejador de la base de datos se asegura que se pueda leer de la base de datos y escribir en la base de datos de manera adecuada y sin confusiones. Lenguaje de consulta de la Bases de Datos. El lenguaje de consulta de la base de datos permite los usuarios especificar precisamente qu informacin desean de la base de datos. Generador de pantallas. El generador de pantallas proporciona una interfaz grfica que rpidamente genera tanto las entradas del usuario como las salidas para el usuario. Generador de reportes. El generador de reportes crea reportes personalizados en segundos. Los reportes se deben mostrar haciendo nfasis en la informacin necesaria y solicitada por el usuario. Los lenguajes de cuarta generacin son orientados al usuario final, en otras palabras, tienen una interfaz con el usuario muy amigable, de modo que las personas con pocos o nulos conocimientos en lenguajes de programacin pueda aprenderlos fcilmente. Como la principal aplicacin de los lenguajes de cuarta generacin es la interaccin con las bases de datos, son buenos para extraer datos y presentarlos en un formato especfico; sin embargo, tienen compiladores que son muy grandes y lentos, comparados con los compiladores de los lenguajes de tercera generacin. Como ejemplos de los sistemas manejadores de bases de datos (DBMSs) que utilizan lenguajes de cuarta generacin incluyen: Informix. Proporciona sistemas manejadores de bases de datos relacionales que corren en diversas plataformas UNix. Las bases de datos relacionales almacenan los datos en forma de tablas relacionadas. Son muy poderosas, porque los datos se pueden ver de diversas maneras, siempre atendiendo las necesidades especficas de cada clase de usuario.
23 | P g i n a
Oracle. Las bases de datos Oracle incluyeron el primer sistema manejador de bases de datos que incorporaron el lenguaje SQL y que se utilizaron en una amplia gama de plataformas. El lenguaje SQL (Structured Query Language) es el lenguaje de programacin estndar de la industria, y se utiliza para extraer informacin de las bases de datos que son alojadas en el sistema. Oracle ofrece una variedad de herramientas de desarrollo de aplicaciones que incluyen aplicaciones para ser ejecutadas en redes de computadoras.
Captulo 18:
Figura. 20. Esquema de un objeto. Tiene al interior las propiedades (atributos) y para acceder a ellos se hace por medio de las operaciones (mtodos). Cada objeto tiene un conjunto de propiedades y operaciones - o mtodos - asociados con l (figura 20. Por ejemplo, el objeto reloj puede tener las propiedades: horas, minutos, segundos y los mtodos poneTiempo, tiempoActual. Las propiedades horas, minutos y segundos se pueden manipular solo por medio de los mtodos. Los programas orientados a objetos son modulares. Los programas modulares son fciles de corregir. La tendencia actual es la programacin orientada a objetos, considerando algunas extensiones a esta filosofa de programacin. Como ejemplos de lenguajes orientados a objetos, incluyen: Smaltalk. Smaltalk fue el primer lenguaje de programacin orientado a objetos, ofrece muchas libertades a los programadores, de modo que los programadores deben tener mucho cuidado al manejar la memoria del sistema. Java. Fue creado por la compaa Sun Microsystems, Java es un lenguaje orientado a objetos similar a C++ pero han mejorado el lenguaje con caractersticas que evitan errores de programacin comunes, como el manejo de la memoria, donde la responsabilidad recae en un subsistema que se llama recolector de basura.
24 | P g i n a
C++. C++ es un superconjunto del lenguaje C. Generalmente es considerado uno de los mejores lenguajes para hacer aplicaciones a gran escala. C#. Fue desarrollado por Microsoft. C# (que se pronuncia C-sharp) es un hbrido de C y C++ que fue desarrollado para competir con Java y con el objetivo de mejorar la productividad en el desarrollo de aplicaciones WEB, manteniendo la flexibilidad y el poder de C y C++. Los lenguajes de alto nivel tienen algunas ventajas sobre los lenguajes de bajo nivel [4]: 1) Son ms legibles: Un buen lenguaje de alto nivel, permitir que los programas se escriban de manera que recuerden descripciones tipo-idioma-comn, muy parecidos a los pseudocdigos. Si se programa cuidadosamente, se puede generar una documentacin autocontenida, que es una propiedad deseable cuando se considera que los programas se documentan para que otras personas lean y comprendan lo que se ha escrito. 2) Son ms portables: Actualmente, los lenguajes de programacin de alto nivel se estn volviendo ms capaces de ser utilizados en arquitecturas de computadoras diferentes, con ningn cambio; o bien al proporcionar el cdigo fuente y ser recompilado sin modificaciones. 3) Tienen estructura y orientacin de objetos: Este es un acuerdo general que empez con la programacin estructurada desde la dcada de 1960 y posteriormente con el movimiento a la programacin orientada a objetos en la dcada de 1990, de lo que result una gran mejora en la calidad y confiabilidad del cdigo. Los lenguajes de alto nivel se pueden disear para reforzar esos paradigmas. 4) Tienen mayor generalidad: La mayora de los lenguajes de alto nivel permiten la escritura de una amplia variedad de programas, para permitir al programador mezclar cdigo de diversos lenguajes para que su aplicacin sea mejor. 5) Brevedad: Los programas expresados en lenguajes de alto nivel usualmente son considerablemente ms cortos (en trminos del nmero de lneas de cdigo fuente) que los hechos en lenguajes de programacin de bajo nivel. 6) Verificacin de tipos: Siendo humano, un programador probablemente cometa muchos errores en el desarrollo de un programa de computadora. Muchos lenguajes de alto nivel - o al menos sus implementaciones - pueden, y deben, verificar los errores tanto en tiempo de compilacin como en tiempo de ejecucin.
Captulo 19:
mantenible. Robusto. Decimos que un programa es robusto cuando es tolerante a las fallas. Podemos probar nuestro programa extensivamente para indicar las fallas que pudieran encontrar los usuarios. Sin embargo, debe haber un balance entre el costo de probar y la necesidad de manipular los errores. Generalmente no es posible probar un sistema para encontrar todas las fallas y hacer un programa que reaccione a cada una de estas fallas. Eficiente. Los programas deben usar de manera correcta los recursos del sistema en el cual se estn ejecutando. En un avin, por ejemplo, el tamao y el peso de una computadora es limitado. De modo que el software utilizado en esos sistemas debe estar restringido a la capacidad de memoria y a la velocidad del procesador utilizado. Los programas que desperdician memora y recursos del sistema, usualmente no sirven, porque cuando aumenta el volumen de datos, esos programas pueden ocasionar errores fatales. Un error fatal es aquel que hace detener la normal ejecucin de un programa, ocasionando en ciertos casos que se deba reiniciar el sistema completo. Utilizable. Los programas utilizables son aquellos que el usuario final encuentra fciles de operar. La utilizabilidad depende de algunos factores, como las formas para introducir los datos a la computadora, el diseo de los mens de opciones y la presentacin de la informacin. Los mensajes informativos y los archivos de ayuda mejoran la utilizabilidad. La documentacin del usuario offline como los manuales impresos, deben ser fciles de leer y de seguir en la operacin del sistema; asimismo, la ayuda en-lnea se debe distribuir y buscar ms fcilmente. Mantenible. Un programa mantenible involucra hacer cambios a un programa despus de haber sido implementado. Es posible que despus de un tiempo, el usuario ya no est completamente satisfecho con el sistema, entonces se debe modificar. La facilidad con que se puedan hacer esos cambios es lo que hace a un sistema mantenible. Un programador debe, entonces, estar familiarizado con la sintaxis del lenguaje de programacin en que fue creado el sistema. Una excelente recomendacin que es muy simple de aplicar para que nuestros programas seas claros y fciles de seguir, es utilizar identacin en la escritura del cdigo. Como ejemplo, notemos la diferencia entre estos dos segmentos de cdigo.
Cuando los programas tienen cientos o miles de lneas de cdigo, la identacin - o la falta de ella afectarn significativamente la legibilidad del programa. Tambin los comentarios incrementan la legibilidad de un programa. Todos los lenguajes de programacin tienen un modo de insertar texto que no se ejecuta como parte del programa, por ejemplo, C trata cualquier texto entre /* */ como
26 | P g i n a
un comentario.
Un esfuerzo que deberamos practicar, es escribir variables con un significado que nos haga recordar fcilmente el porqu existe tal variable. Los nombres para las variables, generalmente empiezan con una letra y pueden continuar con ms letras o con nmeros, y a veces tambin se permiten los guiones y muy pocos smbolos especiales. Estas reglas son muy generales y se permiten nombres como a23 para el nombre de una variable. Comparemos los siguientes dos fragmentos de cdigo en Pascal y notemos la legibilidad en cada uno de ellos.
Cualquier persona que lea este ltimo fragmento de cdigo, no sabra lo que significan los smbolos m, n s y e. Pero los ejemplos del cdigo con las variables con significado dan una mejor idea de lo que queremos expresar en el cdigo. A pesar de la recomendacin de elegir nombres con significado para las variables, se prefieren nombres cortos para las variables, veamos; el nombre de la variable salarioDeEmpleadosMensual es menos preferible que salarioMensual.
Captulo 20:
21).
Figura. 21. Fases del desarrollo del software. Una vez que se concluye, prcticamente se inicia nuevamente al entender las modificaciones que deben hacerse. 1) Introduccin al ciclo de vida del software: Regularmente hay cinco pasos en el ciclo de vida del software: a) Entender el problema. En la primera fase del ciclo de vida del software, se enlistan las tareas que el software debe desarrollar, los problemas a ser resueltos, y en esta fase se estudian sus causas y efectos. La tarea especfica que se requiere del programa se deriva del establecimiento del problema, que es una descripcin concisa del problema en cuestin. El software debe proporcionar una solucin utilizable a este problema. b) Disear el programa. En la fase de diseo, el objetivo es conocer las relaciones entre los mdulos del programa, y garantizar que se cumplen cabalmente los requerimientos solicitados de una manera eficiente, lgica y completa. Los diseadores de software consideran los recursos de hardware y software disponibles para poder alcanzar su objetivo. Si se llega a la conclusin de que no es posible utilizar algn hardware o software, se planea utilizar una estrategia diferente. Primero se disea la estructura general del programa. Entonces el problema se divide en subproblemas en tareas ms y ms pequeas hasta que tengan un tamao manejable. c) Codificar el programa. Durante la fase de codificacin, el programa se escribe en un lenguaje de programacin. Hay muchos lenguajes de programacin, cada uno de ellos es especialista en algn tipo de problemas. Por ejemplo, FORTRAN es especialista en clculos numricos, mientras que LISP es especialista en problemas de inteligencia artificial y procesamiento simblico. El cdigo del programa debe desarrollar la tarea solicitada, y debe ser legible de modo que otros programadores lo puedan mantener. Los programas se escriben usualmente en mdulos separados, cada mdulo desarrolla alguna tarea especfica y debe funcionar independientemente y en relacin con el resto del programa. d) Probar el programa. Durante la fase de pruebas, el programa se ejecuta y se revisa. Las tareas deben ejecutarse sin errores en los resultados y tambin sin errores fatales. Los defectos en los programas se llaman bugs.
28 | P g i n a
Se examinan primero los mdulos de manera individual, en forma independientemente, luego, se prueba todo el programa para encontrar bugs que puedan ocurrir en la interaccin de los mdulos. Cuando se encuentra un bug, se asla la causa y se resuelve. Este proceso se llama depuracin. El programador se debe asegurar de al resolver un bug, no se crean otros ms en alguna otra parte del programa. e) Mantener el programa. Durante la fase de mantenimiento, de determina cualquier error y deficiencia en el programa, y se realizan cualquier accin para resolverla, mientras se preserva la integridad del programa. El uso de notas de diseo, cdigo bien documentado y variables entendibles, pueden ayudar al mantenimiento futuro del programa.
Captulo 21:
Software. Desarrollo
2) Roles en el desarrollo del software: Una persona por s sola puede llevar o desarrollar los programas en cada etapa del desarrollo del software, pero usualmente esto es una excepcin, la mayora de los programas son grandes y complejos.
Figura. 22. Roles de las personas que trabajan en el desarrollo del software. Una compaa de software emplea, frecuentemente, diversos equipos, cada uno de ellos es responsable de una fase diferente en el desarrollo del software (figura 22). Un equipo de desarrollo de software, tpicamente est compuesto por varios programadores, al menos un programador analista y al menos un analista de sistemas. Los programadores asistentes usualmente son programadores con poca experiencia. Estos no escriben nuevos programas, en lugar de esto, se dedican a desarrollar trabajos de mantenimiento acerca de otros programas. Cuando los programadores han adquirido ms experiencia, pueden hacer nuevos programas. Las especificaciones de esos programas ya deben estar analizadas y autorizadas. Los programadores experimentados Senior programmer dan las especificaciones del programa y escriben nuevos programas. Ellos no hacen tareas de mantenimiento, solo se dedican a generar nuevo cdigo. Un programador analista trabaja muy de cerca con los diseadores del programa. Adems de
29 | P g i n a
programar nuevo cdigo, los programadores analistas empiezan a aprender las tcnicas y los lineamientos del diseo de software. Un analista de sistemas es un intermediario entre el cliente y los programadores. Los clientes comunican sus necesidades a los analistas de sistemas (figura 23). Los analistas traducen esos requerimientos en diseos de programas y se lo comunican a los programadores, quienes hacen de hecho, la programacin.
Figura. 23. En la fase de anlisis de requerimientos, los clientes y los analistas definen el propsito y capacidades del software.
Captulo 22:
Al escribir un programa, el programador debe completar satisfactoriamente cada uno de estos pasos:
30 | P g i n a
1) Entender las especificaciones del programa. El programador debe entender cules son las entradas y cules son las salidas que se requieren del programa, adems del proceso lgico de los datos. 2) Disear el programa. Los diseadores de programas, utilizan herramientas de diseo, como el pseudocdigo o un diagrama de flujos estructurados. Estas herramientas detallan las tareas lgicas que el programa debe realizar. El programador debe analizar rigurosamente el diseo, para asegurarse de que ha entendido bien el resultado correcto esperado. 3) Codificar el programa. Un programador codifica el programa escribiendo en un lenguaje de programacin en particular. El cdigo se puede escribir primero en papel - como una recomendacin para los programadores principiantes - o se puede escribir en la computadora utilizando un editor. El programador revisa la lgica del cdigo y la sintaxis, para asegurarse de que todo est correcto. Esto lo pueden hacer manualmente, en lo que se conoce como prueba de escritorio. Una prueba de escritorio hace que se descubran algunos errores que se pueden corregir antes de que el cdigo sea compilado. Algunas veces, los programadores revisan el cdigo de otros programadores. Esto es una buena prctica de programacin y ocasiona que se revise el cdigo al menos dos veces en busca de posibles errores. 4) Compilar el programa. Las computadoras pueden ejecutar programas en cdigo mquina nicamente. El proceso de traducir un cdigo hecho en un lenguaje de alto nivel en cdigo en lenguaje mquina se llama compilar, o interpretar el programa. Los programas que se encargan de compilar o de interpretar programas se llaman compiladores o intrpretes. Los compiladores se utilizan ms frecuentemente que los intrpretes. El cdigo que tiene errores no se puede compilar. El compilador genera un mensaje que nos indica que existe un error en el cdigo, y el programador debe arreglar ese error antes de tratar compilar el programa de nuevo. 5) Ejecutar el programa. Una vez que el programa no tiene errores puede ser ejecutado. Un programa que es interpretado, se ejecuta lnea por lnea hasta llegar al final del programa o hasta que se encuentre un error. 6) Depurar el programa. El programador revisa las salidas del programa para asegurarse de que son correctas. Puede ocurrir, sin embargo, que an cuando no existan errores de sintaxis, si existan errores en la lgica del programa, lo que podra ocasionar errores en la salida del programa, o errores que se encuentran al momento de estarse ejecutando el programa. Hay diferentes tipos de errores que se pueden cometer al escribir programas, desde los ms simples que se comenten al escribir mal algunas palabras, hasta los ms difciles de encontrar, que son aquellos en que tiene que ver un mal diseo del programa o errores en tiempo de ejecucin.
31 | P g i n a
Captulo 23:
Texto autocompletado. Es una caracterstica que permite al programador empezar a escribir un comando, y el editor "se da cuenta" de qu comando se pretende escribir, entonces completa el comando y lo muestra marcado. Por ejemplo, si el programador escribe be, el editor puede completarlo con begin. Si la palabra no es el comando requerido, el programador sigue escribiendo sobre la zona marcada. Ejercicio: 1) Cul de los siguientes formatos crees que debes utilizar para grabar el cdigo de un programa, que se ha escrito en un procesador de palabras? a) Word97 b) RTF (Rich Text Format) c) Text only (ASCII) d) PDF (Portable Document File)
Captulo 24:
utilizar un valor booleano como una funcin apuntador. Generacin de cdigo intermedio. El programa se traduce a un lenguaje simple independiente de la mquina. Ubicacin de registros. Los nombres simblicos de las variables utilizadas en el cdigo intermedio se traducen a nmeros, cada uno de ellos corresponde a un registro en el cdigo mquina objetivo (de la mquina que va a ejecutar finalmente el programa). Generacin de cdigo mquina. El lenguaje intermedio se traduce al lenguaje ensamblador (una representacin textual de cdigo mquina) para una arquitectura de mquina especfica. Ensamblado y Enlazado. El cdigo en lenguaje ensamblador se traduce a una representacin binaria y se determina la direccin real de las variables, funciones, etc.
Figura. 24. Historia de la compilacin de un programa, desde el cdigo fuente hasta el cdigo ejecutable. Un programa linker (enlazador), combina todos los mdulos en el archivo objeto para formar un archivo ejecutable (figura 24). Un archivo ejecutable s es un programa completo en s mismo, es decir, no requiere hacer referencia al cdigo fuente original. Esto significa que correr ms rpidamente, comparado con la ejecucin del mismo programa cuando an no es ejecutable.
compiladores, donde las fases de anlisis y ejecucin son independientes, por lo que solo se compila una vez y se ejecuta cuantas veces se quiera. Comparando su actuacin con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intrprete corresponde al intrprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito. As, mientras un intrprete toma las instrucciones del programa fuente y las traduce y ejecuta a lenguaje mquina una a una, un compilador realiza la traduccin completa del programa fuente a codigo mquina, sin ejecutarlo, siendo posteriormente cuando se ejecute el programa una vez compilado. Ventajas del intrprete frente al compilador:
El programa se puede ejecutar de inmediato, sin esperar a ser compilado. Puede ser interrumpido con facilidad. puede ser rpidamente modificado y ejecutado nuevamente. Resultan muy apropiados durante la fase de desarrollo de un programa, ya que la compilacin no permite la ejecucin paso a paso del programa y con ello impide la edicin seguimiento y depuracin del programa.
La ejecucin es ms lenta, pues cada intruccin debe ser traducida a cdigo mquina tantas veces como sea ejecutada. No son adecuados en la fase de explotacin del programa ya que el proceso de interpretacin se ha de repetir cada vez que se ejecuta el programa, mientras que con la compilacin, una vez obtenido el programa en leguaje mquina ste puede ser ejecutado sin necesidad de compilarlo de nuevo.
Captulo 25:
se diga que se ha terminado de hacer un programa. Los dos tipos principales de errores son sintcticos y lgicos. Errores de sintaxis. Los errores de sintaxis, o sintcticos, ocurren cuando el programador escribe cdigo que no va de acuerdo a las reglas de escritura del lenguaje de programacin. Son como los errores gramaticales en el lenguaje comn. Hasta que un cdigo fuente no tenga errores de sintaxis, no se puede traducir en cdigo mquina. Errores lgicos. Los errores lgicos ocurren a causa de un mal diseo del programa. Puede ocurrir que una lnea de cdigo observe todas las reglas sintcticas del lenguaje, pero el cdigo tenga una lgica equivocada. Los errores lgicos son menos obvios que los errores sintcticos, de modo que los programas pueden ser compilados o interpretados sin reportar este tipo de error. Los errores se descubren usualmente cuando el programa est siendo ejecutado y se estudia la salida. Un debugger ejecuta un programa lnea por lnea para que el programador pueda examinar paso a paso, la ejecucin de su programa, con el fin de encontrar los errores lgicos (figura 25).
Figura. 25. Un debugger auxilia al programador para encontrar errores lgicos en el cdigo fuente. El cdigo debe ser legible y entendible, para que pueda ser mantenido. Los comentarios se pueden escribir en el cdigo para asegurarse que cumple estos requisitos. Los comentarios se usan para proporcionar notas explicatorias para el programador acerca de lo que hace alguna funcin en particular, o bien para especificar la utilidad de alguna parte del cdigo, o especificar el tipo y funcin de las variables utilizadas. Cada lenguaje de programacin codifica los comentarios de un modo en particular, hay bsicamente dos clases de comentarios: Los comentarios de una sola lnea. Esta clase de comentarios requieren una marca especial para que el compilador o el intrprete sepa que lo que sigue despus de la marca y hasta el final de la lnea no debe tomarse en cuenta para efectos de compilacin. En el lenguaje FORTRAN, los comentarios de una sola lnea empiezan con una letra C, solamente si se escribe en la primera
36 | P g i n a
columna del texto, en otras versiones la marca es un !. En C, podemos escribir un comentario de una sola lnea con \\. Los comentarios de bloque. Permiten escribir ms de una lnea en forma de comentario, esto es til cuando deseamos dar una breve explicacin del uso de alguna parte del cdigo sin tener que comentar cada lnea. En C, es posible crear un bloque de cdigo empezando con la marca \* y terminando el bloque con la marca *\
Captulo 26:
Figura. 26. Muhammad ibn Ms al-Khwrizm. 780 D.C. - 850 D.C. aprox. A. Los algoritmos deben contener instrucciones precisas En ocasiones se suele mostrar cmo funciona un algoritmo con la idea del proceso para crear un pastel, en trminos generales si es correcto, pero en trminos especficos no lo es porque generalmente, una receta involucra pasos que no son bien determinados. Una receta para crear un pastel puede considerarse un algoritmo porque es un conjunto de pasos (aunque no necesariamente son bien determinados), donde hay algunos elementos de entrada, que son los ingredientes, un procedimiento que es la manera de hacerlo segn la receta y un producto de salida, que es el pastel mismo. El problema define la salida deseada, que a su vez, determina las entradas y las instrucciones. Por ejemplo, al decidir qu tipo de pastel queremos, debemos determinar qu ingredientes necesitamos y las instrucciones a seguir. Supongamos que decidimos escribir un algoritmo para hervir agua. La
37 | P g i n a
entrada es la cantidad de agua a cualquier temperatura por debajo del punto de ebullicin y la salida es el agua hirviendo. Un algoritmo debe proporcionar la salida correcta para cualquier condicin de los datos de entrada.
Ejercicio: Ordene los siguientes pasos en orden de prioridad para resolver el problema de hervir agua.
Sin duda, podemos escribir los algoritmos en espaol. Para producir resultados consistentes, el lenguaje que usemos debe estar libre de ambigedades. Si decimos algo como: Verificar que la olla tenga suficiente agua, es una frase ambigua, porque para diferentes personas puede significar cosas diferentes la frase suficiente agua. Es preferible decir algo como: Verificar que la olla tenga al menos un cuarto de su capacidad de agua, porque se define qu es lo que significa suficiente. En este siguiente ejemplo debemos incluir un paso para llenar la olla con agua bajo condiciones especficas. -Verificar que la olla tenga al menos 1 cuarto de su capacidad de agua. -Si la olla tiene menos de 1 cuarto de su capacidad de agua, Y agregamos las instrucciones para poner la olla en la estufa y para encender la estufa. -Poner la olla en la hornilla de la estufa -Encender la hornilla de la estufa Un algoritmo debe tener bien claro un punto final, de modo que cuando la entrada sea procesada y la salida deseada se alcance, el proceso termine. Agregaremos entonces la instruccin final para terminar el algoritmo -Cuando el agua este hirviendo, apagar la estufa.
Captulo 27:
38 | P g i n a
Diseo Top-Down
B. Diseo Top-Down El diseo Top-Down fue promovido en la dcada de 1970 por el investigador de IBM Harlan Mills y Nickaus Wirth. Mills desarroll conceptos de programacin estructurada para utilizarlos y probarlos en un proyecto de 1969 que tena como objetivo automatizar algunos procedimientos del peridico New York Times. El desarrollo de este proyecto hizo que se dispersara y se ampliara la idea de hacer los programas con esta filosofa de trabajo al resto de los desarrolladores de IBM, as como al resto de la industria del software. Por su parte, Nicklaus Wirth, desarroll entre otros lenguajes, el lenguaje de programacin Pascal, escribi un artculo muy importante acerca del Desarrollo de programas por medio de refinamiento de pasos. Esta idea de disear programas permaneci como principal corriente de desarrollo hasta fines de la dcada de 1980, cuando fue desplazada por la programacin orientada a objetos, sin embargo contina siendo una muy importante ayuda para el desarrollo de los mtodos en los la programacin orientada a objetos [7].
Figura. 27. Niclaus Wirth (izq.) y Harlan D. Mills (der.) fueron los primeros promotores del diseo Top-Down en la dcada de 1970. La solucin a los problemas computacionales puede llegar a se muy complicada y compleja. Cuando los programas son de miles de lneas, o componerse de diversos archivos de cdigo, es imposible mantener todos los detalles del programa en mente cuando se desarrolla un algoritmo. El diseo top-down es una herramienta que presenta en primer lugar una solucin a un problema general utilizando tres o cuatro pasos solamente. Cada uno de esos pasos en la primera solucin se dividen en otros subpasos. Este proceso se repite varias veces, en cada iteracin se produce una solucin ms detallada al problema original. Cuando los pasos ya no se pueden subdividir, el algoritmo ha terminado. El diseo top-down tambin se conoce como descomposicin funcional o refinamiento de pasos. Ejercicio: De la siguiente lista de actividades, cul crees que est orientada al diseo Top-down? 1) Empezar con los detalles 2) Empezar con el problema en general 3) Considerar el problema general y los detalles al mismo tiempo El diseo top-down automticamente produce mdulos en un algoritmo. Recordemos que los mdulos son grupos de instrucciones que desarrollan funciones especficas. Supongamos que queremos escribir un algoritmo que imprima facturas, en primer lugar vamos a identificar esa tarea en la primera iteracin den diseo top-down. El paso calcular el monto total de la factura lo
39 | P g i n a
Lo que nos ayuda a definir los mdulos de nuestro algoritmo en: Mdulo 1. Obtener detalles del cliente Mdulo 2. Obtener detalles de todas las ordenes de ese cliente Mdulo 3. Calcular el monto total de las facturas del cliente Mdulo 4. Agregar el 5% de inters a las facturas de hace 1 mes Mdulo 5. Agregar el 10% de inters a las facturas anteriores a 1 mes Mdulo 6. Sumar el monto de las facturas con el total de los intereses Mdulo 7. Imprimir el monto total Cada mdulo debe ser tratado en la misma manera que el problema general, el diseo top-down, hace que el problema general se convierta en problemas ms especficos y en general ms fciles de resolver.
Captulo 28:
Algoritmo. Pseudocdigo
C. Pseudocdigo Ejercicio: El pseudocdigo es til cuando queremos escribir algoritmos de una manera definida y consistente. Cul de las siguientes aseveraciones crees que es verdadera para los pseudocdigos? 1) Pueden correr como un programa por s mismos 2) Se deben sujetar a estndares predefinidos 3) No existe un estndar absoluto para los pseudocdigos En realidad no existe un estndar para los pseudocdigos, pero podemos seguir las siguientes recomendaciones. Utilizar espaol simple. Escribir cada instruccin en una lnea separada. Utilizar identacin donde sea apropiado. Proporcionar solamente un punto de entrada y un punto de salida para un algoritmo. Agrupar las instrucciones en mdulos.
40 | P g i n a
Podemos hacer que nuestros pseudocdigos sean claros y concisos utilizando palabras comunes en espaol. La sentencia Encontrar la diferencia entre los nmeros A y B, se puede expresar de manera ms clara como Diferencia:= A - B. Cuando tengamos mltiples instrucciones en una sola lnea, ocasiona que nuestro algoritmo sea ms difcil de seguir.
Si la secuencia que llevan las instrucciones se desarrolla dentro de una estructura de control como el estatuto SI-ENTONCES, debemos identarlo para tener mayor claridad. Cuando la ejecucin de la secuencia de instrucciones dentro del bloque de la estructura de control termina, la identacin tambin termina, y vuelve a tener el nivel anterior.
En algunas ocasiones, un bloque de instrucciones se debe ejecutar varias veces en diferentes puntos en el algoritmo, en este caso, las instrucciones se deben agrupar en un mdulo con su propio nombre. Si deseamos reutilizar el cdigo que hemos escrito, para poder ejecutar las instrucciones que estn en ese segmento de cdigo tantas veces como sea necesario, debemos poner esas instrucciones en un mdulo por separado y llamarlo cuando se requiera. El pseudocdigo no es un lenguaje de programacin - no puede se ejecutado. Solamente es una herramienta de diseo de programas que es muy til para planear nuestro cdigo.
Captulo 29:
Ejercicio: Las computadoras pueden recibir los datos de entrada de diferentes fuentes tales como un archivo o un mdem. Cules de las siguientes sentencias piensas que se deberan utilizar para codificar la entrada de datos? 1) obtener 2) enviar 3) leer 4) formatear Las palabras obtener y leer son sentencias que indican la entrada de datos. Podemos utilizar la sentencia obtener para adquirir un dato mediante el teclado, mientras que leer lo preferimos utilizar para leer datos de cualquier otra fuente, como un archivo almacenado en el disco duro. De manera similar, las computadoras pueden devolver la informacin y desplegarla en el monitor, o escribirla en un archivo o hacia cualquier otro dispositivo de salida de datos. Para indicar que un dato se debe desplegar en la pantalla del monitor, podemos utilizar sentencias como poner, desplegar o salida, pero preferimos desplegar. Y utilizaremos la sentencia escribir para almacenar datos en un archivo que se va a grabar en el disco duro. En las sentencias de los pseudocdigos, un sustantivo se utiliza para establecer un dato de entrada o de salida. Para asignar valores, podemos utilizar palabras como inicializar, guardar o almacenar, pero vamos a utilizar SEA Por ejemplo, el comando SEA total EN 10, que nos indica que debemos considerar que el identificador total debe tener el valor inicial de 10. Podemos utilizar una variable para almacenar un dato de entrada. Para hacer esto, usualmente utilizamos una orden como obtener total, que asignar el valor que el usuario teclee en su teclado y lo debe asignar a la variable total. Una vez procesado el dato, podemos conocer el resultado en la salida del pseudocdigo, con una orden como imprimir total, que mostrar el valor de salida que ha sido almacenado en la variable total , y lo mandar a la impresora, al monitor o hacia algn dispositivo de salida para su impresin. Una convencin muy til es encerrar texto entre comillas simples, lo que nos indicar que la secuencia de smbolos que estn entre comillas simples, se debe considerar como una palabra y no como una variable o palabra reservada. Por ejemplo, con el cdigo imprimir total debemos entender que la impresora debe imprimir la palabra total, y no algn valor asignado a alguna variable total. Las operaciones aritmticas son muy importantes en las operaciones de la computadora. En pseudocdigo, podemos utilizar los smbolos convencionales para describir las operaciones
42 | P g i n a
aritmticas.
Captulo 30:
En la lnea 2, el valor asignado a la variable a es 1, de modo que en adelante, se puede sustituir la ocurrencia de la variable a por la constante 1, a menos que exista otra orden que seale lo contrario. El problema se presenta de inmediato, porque en la lnea 3 hay una pregunta, que solicita el valor de a, pero como hemos utilizado el smbolo = para asignar valores a variables, en realidad, lo que debemos pensar es que en la lnea 3 del pseudocdigo, estamos asignando el nuevo valor 5 a la variable a, lo que ocasionar errores lgicos en la ejecucin del programa. Es por esta razn que utilizaremos diferentes smbolos para describir las diferentes situaciones respecto a la igualdad. Si se trata de una igualdad de tipo asignacin de valores, utilizaremos :=, como en variable := nuevoValor.
43 | P g i n a
Si se trata de una igualdad lgica, en la que se puede obtener un valor que sea verdadero o falso, entonces debemos escribirlo como =, como en variable = valorComparado. As, el pseudocdigo anterior puede ser reescrito como:
Es importante aclarar que lo expuesto anteriormente acerca del pseudocdigo, son convencionalismos que no se deben tomar como un estndar ni mucho menos, simplemente es una manera un poco ms organizada de plasmar las ideas, con el fin de causar menos confusiones al desarrollar programas de computadora.
Captulo 31:
44 | P g i n a
La figura 28 muestra de manera esquemtica el flujo del control del programa. Vemos que en la lnea 103 ocasiona que el control se transfiera a la lnea 107, ocasionando un posible error lgico.
Figura. 28. Esquema del flujo de instrucciones utilizando GOTO, basado en el ejemplo del listado 1 El problema con la orden GOTO, es que puede ocasionar que el programa transfiera el control a direcciones ms adelante y ms hacia atrs sin ninguna restriccin, y como frecuentemente sucede, la lectura y entendimiento del programa se complica a medida que el cdigo crece. Esta caracterstica del flujo del control se conoce como cdigo espagueti.
Captulo 32:
45 | P g i n a
Ahora, veamos el siguiente cdigo. Se trata del mismo problema, pero desde un punto de vista estructurado, sin la orden GOTO.
Figura. 29. Esquema del flujo de instrucciones utilizando GOTO, basado en el ejemplo del listado 3. Los esquemas (a) y (b) describen el mismo flujo de rdenes, es claro que la forma (b) es ms entendible que (a). Listing 3. Ejemplo de la orden si-entonces-enOtroCaso desde un punto de vista estructurado.
Aunque el cdigo 3 tiene ms lneas que el cdigo 2, es ms legible y se entiende mejor. La lgica y el resultado de ambos programas es el mismo (figura 29), pero en el punto de vista estructurado es ms fcil seguir la lgica del programa.
Captulo 33:
El Teorema de la Estructura muestra cmo cualquier programa se puede escribir utilizando tres estructuras de control: Secuencias. Un programa de computadora ejecuta una lista de instrucciones una sola vez. Las instrucciones se ejecutan en la secuencia en la que aparecen, y el programa no salta a ningn lado ni se repite ninguna de las instrucciones. Seleccin. La seleccin implica que es posible elegir entre algunas opciones, que dependen del valor de una condicin especificada por el programador. Repeticin. La repeticin ejecuta por varias veces una seccin de cdigo mientras que cierta condicin permanece siendo verdadera. Posteriormente, los mismos autores, mencionan que es posible utilizar solamente dos tipos de estructuras para hacer cualquier otro programa, y es que una combinacin de secuencias y seleccin, puede crear una repeticin. En muchos lenguajes de programacin hay estructuras de seleccin, en particular la estructura SIENTONCES-ENOTROCASO, que corresponde a la estructura if-then-else en el lenguaje Pascal, o IFELSE en lenguaje de NetLogo, o alguna similar en otros lenguajes. Tambin, en la mayora de los lenguajes estructurados, el mbito de las estructuras de control est restringido por smbolos o palabras clave, por ejemplo el uso de llaves en lenguajes como C { y }, o palabras reservadas como Begin y END. En el lenguaje de pseudocdigo que estamos utilizando vamos a emplear varios pares de palabras, como ENTONCES-FINENTONCES, ENOTROCASO-FINENOTROCASO o EMPIEZA-TERMINA. Ejercicio: En este ejemplo, la seleccin se hace en trminos del valor que pueda tener la variable edad. De acuerdo al siguiente cdigo, qu mensaje de texto piensas que se debe imprimir si el valor de la variable edad es igual a 18?
1) Se van a imprimir ambos mensajes 2) Ninguno de los mensajes 3) El primer mensaje 4) El segundo mensaje En una orden de opcin con la estructura SI-ENTONCES-ENOTROCASO, cuando la condicin de decisin adquiere un valor falso, se ejecuta la segunda parte de la condicin, es decir, la parte ENOTROCASO.
47 | P g i n a
Captulo 34:
Listing 4. Ejemplo de la orden mientras, se ejecuta un segmento de cdigo mientras una condicin sea verdadera.
Figura. 30. Diagrama que muestra el flujo del control del programa con una estructura IENTRAS...FINMIENTRAS. El listado 4 muestra un ejemplo de una repeticin que (entre otras cosas) imprime el nmero de boleto que se ha vendido, pensando en que el programa puede ser utilizado en cualquier clase de taquilla que venda boletos y tenga un tope de 100 boletos para vender. Es importante mencionar que para entrar a un ciclo como el del ejemplo del listado 4, es necesario tener el control de cundo se descumplir la condicin. En este ejemplo, se inicializa una variable tope-vendidos en 100, antes de entrar al ciclo. Si omitimos esta orden, dependiendo del lenguaje de implementacin pueden suceder dos cosas:
48 | P g i n a
1) El sistema inicializa automticamente la variable en 0, de modo que el ciclo nunca va a terminar, pues siempre la variable b-vendido ser igual o mayor que 0, pero nunca menor que 0. 2) El sistema trata de interpretar el contenido actual de la memoria alojado en esa variable en ese momento. Esto puede ocasionar resultados inesperados, ocasionando errores lgicos. Tambin es importante que en alguna parte del segmento que ser repetido, actualicemos alguna variable, de modo que eventualmente la condicin evaluada en cada ciclo resulte en un valor falso. En el caso del listado 4, la variable que se actualiza en cada ciclo se encuentra en la lnea 207.
Captulo 35:
49 | P g i n a
Y los elementos de entrada y salida se convierten en los argumentos de las rdenes. En el listado 4 de la pgina 22, la lnea 204, el verbo es obtener y el objeto es datos-de-cliente. Ejercicio: Deseamos hacer un programa para calcular la velocidad a la cual debe manejar un piloto de rally para cubrir cierta distancia dada en un tiempo requerido. Identifica los elementos de entrada del problema. 1) [ ] El sustantivo tiempo. 2) [ ] El sustantivo velocidad. 3) [ ] El sustantivo distancia. 4) [ ] El verbo calcular. Los sustantivos distancia y tiempo son los elementos de entrada del problema, el sustantivo velocidad es el elemento de salida del problema, y el verbo calcular es el proceso del problema que calcula el valor de la velocidad en base a la distancia y al tiempo solicitados. Para cualquier elemento de entrada en el problema, debe haber una orden como obtener o leer, por ejemplo en leer distancia. El elemento final de salida se debe presentar al usuario utilizando una orden que enve el dato al dispositivo de salida adecuado, puede ser entonces imprimir, desplegar o escribir, como en imprimir velocidad.
Captulo 36:
De cada paso de procesamiento en la tabla de definiciones, resulta una o ms instrucciones de pseudocdigo. Los elementos en las columnas de entradas y salidas son los argumentos de las
50 | P g i n a
instrucciones. Ejercicio: Supongamos que queremos escribir un programa que convierta una distancia en kilmetros a una distancia en millas. En cada kilmetro hay 0.625 millas. Coloca cada opcin en su lugar correcto en la tabla de definiciones. 1) kilmetros 2) millas
Claro! los kilmetros van en la columna de entrada y las millas van en la columna de salida. Para transformar los kilmetros en millas necesitamos un proceso. El verbo convertir en el enunciado del problema indica el proceso que necesitamos. As que tenemos que calcular el nmero de millas que es equivalente al nmero de kilmetros dado. Y necesitamos un proceso que muestre las millas calculadas.
Podemos utilizar nuestra tabla para escribir nuestro algoritmo en pseudocdigo. Listing 5. ALGORITMO para convertir kilmetros en millas.
Cuando se ejecute el programa, lo que el usuario debe ver en pantalla, ser algo como lo siguiente.
51 | P g i n a
Captulo 37:
52 | P g i n a
Algunos lenguajes de programacin no permiten el uso de ciertos caracteres en los nombres de las variables y las constantes. Es posible que los nombres no empiecen con dgitos y no deben tener el mismo nombre que las palabras reservadas en el lenguaje de programacin. Ciertos lenguajes no permiten el uso de caracteres especficos, como BASIC por ejemplo, no permite el uso de * (asterisco), + (signo mas) y () (parntesis). Otra restriccin comn, aunque no es general, es que los nombres de las variables y constantes no deben empezar con un dgito; as que las variables 2enero o 12meses posiblemente no sean aceptadas como nombres vlidos, pero enero2 y meses12 si lo sern.
Captulo 38:
En este ejemplo (listado 6) en la lnea 7 es evidente que habr un problema, pues en cada ocasin que se ejecute esta lnea, el lmite superior del ciclo se va a modificar y se generar un error de tipo lgico. Para corregir el error, seguramente el programador deber modificar alguna de las ys de la lnea 8. Listing 7. Colisin de nombres 2
Captulo 39:
incluyendo enteros cortos y enteros largos. Por ejemplo, en Java, los enteros cortos se alojan en 8 bits, mientras que los enteros de tipo largo, ocupan hasta 64 bits de longitud. Los nmeros enteros son positivos y negativos, por ejemplo -2 y 11390. Notemos que no tienen punto decimal. Real. Los nmeros reales son nmeros con parte decimal, por ejemplo -2.0, 11390.0 y 12.45. Sin embrago, hay lenguajes de programacin como NetLogo, que no hacen diferencia entre nmeros enteros y reales cuando son exactos, como el caso de 1 y 1.0. Booleano. Los valores booleanos son valores lgicos y pueden ser falso o verdadero. En estos valores se indica el verdadero con el nmero 1 y el falso con el 0. Algunos lenguajes de programacin, como C, prefieren poner un 0 cuando es falso y cualquier otra cosa cuando es verdadero. En el lenguaje de programacin Scheme, los valores lgicos son #\t y #\f y no tienen significado numrico. El nombre que utilizan los lenguajes de programacin puede ser diferente, an cuando se trate del mismo conjunto de datos, por ejemplo, los nmeros reales, en Pascal se llaman real y en C de llaman float. Ejercicio: En general, las variables que se utilizan en una pieza de cdigo se deben declarar al inicio de ese cdigo, antes de que se utilicen en las expresiones. Cul de las siguientes informaciones crees que se debe proporcionar en las sentencias de declaracin de variables? 1) Su mbito 2) Su nombre 3) Su tipo 4) El nmero de veces que se debe utilizar 5) El espacio en memoria que van a ocupar Cuando se establecen las variables y las constantes, se debe proporcionar el nombre y el tipo de datos que van a contener. Cada lenguaje de programacin utiliza una sintaxis diferente para estas declaraciones. Por ejemplo, en Pascal, se utiliza la palabra reservada VAR para empezar el bloque de declaraciones de variables. Pascal utiliza el cdigo Para mostrar que la variable numeroEmpleado es de tipo Enteros. Y utiliza el cdigo Para indicar que la variable salarioEmpleado es de tipo Reales. La palabra reservada VAR (que puede estar en maysculas o minsculas), es una marca que indica el inicio del bloque de declaracin de variables, y no se requiere anteponer a la declaracin de cada variable. En el siguiente ejemplo, las variables numPersonas y temperatura se declararon al inicio del programa.
55 | P g i n a
Captulo 40:
De modo que el compilador tena toda la informacin necesaria. Los compiladores actuales ofrecen muchas otras capacidades, como declarar variables en tiempo de ejecucin. Ejercicio: Qu tipo de dato se utiliza para almacenar letras individuales? 1) Entero 2) Caracter 3) Real 4) Cadena 5) Booleano En un lenguaje de pseudocdigo, podemos decir que el tipo adecuado para almacenar letras individuales es el tipo Caracter, con lo que podemos almacenar letras como a y Z. La opcin Entero es incorrecto, a pesar de que los caracteres tienen asociado un nmero entero que los identifica, porque la cantidad de nmeros enteros dedicados a los caracteres es menor que la cantidad de nmeros enteros. El tipo Real, tambin es incorrecto, pues el formato y el espacio dedicado para almacenar tales
56 | P g i n a
nmeros es diferente en los de tipo Caracter. El tipo Booleano almacena falso y verdadero, as que tambin es una respuesta incorrecta. El tipo Cadena, es un tipo de dato compuesto, que se crea a partir de muchos elementos de tipo Caracter. 1) Convenciones en el lenguaje de pseudocdigo: En el lenguaje de pseudocdigo que estamos utilizando, adoptaremos una propuesta similar a la del lenguaje Pascal para nombrar las variables y las constantes. Utilizaremos las palabras especiales VARIABLES y CONSTANTES al inicio, para establecer el tipo y valor de las variables y constantes. Por ejemplo, el listado 7 se debe reescribir como: Listing 9. Colisin de nombres 2, con variables y constantes.
57 | P g i n a
Captulo 41:
Expresiones y rdenes
VII. EXPRESIONES Y RDENES En esta seccin estudiaremos y aprenderemos a describir las expresiones y rdenes en la programacin, de modo que no exista confusin entre los operandos y operadores ni en la jerarqua de las operaciones. A. Principios bsicos Un operador es un smbolo que representa una accin especfica que se debe realizar en los datos. Ejercicio: Los operadores trabajan con los operandos. Cul crees que es la mejor definicin de operando? 1) Es cualquier cosa que no es un operador. 2) Es el valor que resulta despus de que se ha desarrollado una accin. 3) Son los valores con los que se efecta una accin especfica. 4) Es la direccin de memoria en donde se alojan los datos para que el operador funcione. Los valores con los que se efecta una accin especfica se conocen como operandos. Por ejemplo, en la expresin 3 + 5, los operandos son 3 y 5, mientras que el operador es el smbolo +. Cada operador se representa con un smbolo en particular, aunque el smbolo puede ser diferente en diferentes lenguajes de programacin. Por ejemplo, el smbolo utilizado para la operacin elevar a alguna potencia, en unos lenguajes se utiliza el ^ y en otros se utiliza **. Los operadores aritmticos ms frecuentes y que utilizaremos (ya hemos utilizado algunos) en nuestros algoritmos en pseudocdigo son:
58 | P g i n a