CONTENIDO DE LA LECCIÓN 2 - azul2.bnct.ipn.mxazul2.bnct.ipn.mx/c/fundamentos/archivos...

49
MIGUEL Á. TOLEDO MARTÍNEZ FUNDAMENTOS – LECCIÓN 2 2-1 CONTENIDO DE LA LECCIÓN 2 TERMINOLOGÍA BASICA EN COMPUTACIÓN , SOFTWARE, INGENIERIA DE SOFTWARE 1. Introducción 2 2. Terminología básica en computación 4 2.1. Unidades de medida en computación. 4 2.2. Sistemas numéricos 5 2.2.1. Operaciones aritméticas 6 2.2.2. Examen breve 2-1 8 2.3. Organización de una computadora 8 2.4. Examen breve 2-2 13 3. Software 13 3.1. Software de aplicación 13 3.2. El software de sistema 14 3.2.1. Lenguaje de máquina 16 3.2.2. Lenguaje ensamblador 20 3.2.3. Lenguaje de alto nivel 21 3.2.4. Sistema operativos 22 3.2.5. Evolución de los sistemas operativos 22 3.2.6. Servicios que presta un sistema operativo 23 4. Computación personal, distribuida y cliente / servidor 29 5. ¿Por qué C++? 29 6. Biblioteca estándar de C++ 31 7. Java 31 8. Examen breve 2-3 31 9. Ingeniería de Software 32 9.1. Principios de Ingeniería de Software 34 10. Diseño orientado a objetos 37 11. Lo que necesita saber 40 12. Preguntas y problemas 43 12.1. Preguntas 43

Transcript of CONTENIDO DE LA LECCIÓN 2 - azul2.bnct.ipn.mxazul2.bnct.ipn.mx/c/fundamentos/archivos...

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-1

CONTENIDO DE LA LECCIÓN 2

TERMINOLOGÍA BASICA EN COMPUTACIÓN , SOFTWARE, INGENIERIA DE SOFTWARE 1. Introducción 2 2. Terminología básica en computación 4

2.1. Unidades de medida en computación. 4 2.2. Sistemas numéricos 5

2.2.1. Operaciones aritméticas 6 2.2.2. Examen breve 2-1 8

2.3. Organización de una computadora 8 2.4. Examen breve 2-2 13

3. Software 13 3.1. Software de aplicación 13 3.2. El software de sistema 14

3.2.1. Lenguaje de máquina 16 3.2.2. Lenguaje ensamblador 20 3.2.3. Lenguaje de alto nivel 21 3.2.4. Sistema operativos 22 3.2.5. Evolución de los sistemas operativos 22 3.2.6. Servicios que presta un sistema operativo 23

4. Computación personal, distribuida y cliente / servidor 29 5. ¿Por qué C++? 29 6. Biblioteca estándar de C++ 31 7. Java 31 8. Examen breve 2-3 31 9. Ingeniería de Software 32

9.1. Principios de Ingeniería de Software 34 10. Diseño orientado a objetos 37 11. Lo que necesita saber 40 12. Preguntas y problemas 43

12.1. Preguntas 43

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-2

LECCIÓN 2

TERMINOLOGÍA BASICA EN COMPUTACIÓN , SOFTWARE, INGENIERIA DE SOFTWARE

INTRODUCCION En la actualidad las computadoras son parte de la vida cotidiana. Casi todos hemos usado un procesador de texto. También se usan las computadoras en formas que no son tan obvias, por ejemplo, cada vez que usa un teléfono o viaja por avión. En el sistema telefóni-co, son los programas los que proporcionan características especiales tales como la llamada en espera, dos a la vez, buzón de texto o de voz, sígueme, etc. En el caso del avión, puede que aterrice gracias a la computadora más que al piloto. El término sistema computacio-nal se usa para enfatizar que existen dos componentes distintos: hardware y software. El hardware es la computadora en si misma. El software son los programas que dicen a la computadora qué hacer. Diseñar e implementar aplicaciones es un gran reto en nuestros días, una aplicación puede tener miles de líneas de código. En los últimos años ha surgido la téc-nica de diseño y programación orientada a objetos, que ha mostrado su utilidad para mane-jar y hacer frente a la complejidad de las aplicaciones.

Uno de los puntos cruciales asociados con el diseño de un sistema involucra el mane-jo de la complejidad del proceso de diseño. De forma habitual, los buenos diseñadores em-plean alguna forma de abstracción como herramienta para tratar esta complejidad. El térmi-no abstracción aquí se refiere a la capacidad intelectual de considerar una entidad ais-lándola de cualquier ejemplar específico de esa entidad. Por ejemplo, los diseñadores de hardware que pretenden diseñar una computadora, habitualmente se preocupan de la fun-cionalidad de los circuitos integrados que piensan usar – no del funcionamiento de los tran-sistores que se encuentran en esos circuitos integrados.

El desarrollo de un sistema informático se simplifica utilizando el concepto de abs-tracción en el proceso de diseño. En el diseño de software, supone especificar la funciona-lidad del sistema informático en términos generales de alto nivel. Una vez que puede ser demostrado que esta especificación abstracta del sistema es correcta, es posible añadir más detalle, para finalmente, conducir a una descripción detallada de bajo nivel del sistema in-formático en términos que son directamente implementables usando un lenguaje de progra-mación. En cada paso de este proceso, el diseñador verifica que el detalle adicional añadido al diseño del sistema es correcto. Permitiéndole concentrarse en el conjunto del diseño del sistema sin tener que perderse en los detalles de implementación. C++ es un lenguaje estructurado, así como orientado a objetos. La programación estructurada, algunas veces llamada programación procedimental (de procedimientos), se construye utilizando el concepto de función. Una función se diseña para realizar una tarea específica y después cuando se le requiere se le llama para que realice la tarea para la cual fue escrita. De esta manera, un programa consiste en una colección de funciones, cuya eje-cución combinada soluciona el problema propuesto. Los programas se resuelven usando un enfoque modular descendente o de arriba-abajo, utilizando la técnica de descomponer un problema en subproblemas cada vez menos complejo.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-3

Por otro lado, la programación orientada a objetos se construye utilizando los con-ceptos de clases y objetos, los cuales modelan entidades del mundo real en forma más na-tural. Por natural debe entenderse que la programación orientada a objetos permite cons-truir programas en la misma forma en que tendemos a pensar las cosas. Por ejemplo, ten-demos a clasificar las entidades del mundo real en vehículos, escuelas, materias, profesores, etc. Aprendemos acerca de esto estudiando sus características o atributos y su desempeño; considerando, por ejemplo, una clase de vehículos, éstos comparten ciertas características o atributos, tales como motores, neumáticos, transmisión, etc. Más aún, todos tienen un desempeño, como aceleración, desaceleración (frenado) y dirección. En otras palabras, te-nemos una impresión abstracta general de un vehículo por medio de sus atributos y su des-empeño más que en cuanto a sus tuercas y tornillos, aunque sin éstos, el vehículo en reali-dad no podría existir. ¿Cómo se relacionan los objetos con las clases? Bien, su automóvil es un ejemplo o instancia de la clase vehículo. Posee todos los atributos y desempeño de cualquier vehículo, pero es un ejemplo específico de un vehículo. De igual modo, en pro-gramación orientada a objetos, creamos una clase abstracta que describe los atributos generales y el desempeño de una entidad de programación, después creamos objetos de las clases que se manejarán dentro del programa, justo como su automóvil es la cosa que actualmente maneja, no su noción general abstracta de un vehículo. Si la programación estructurada o procedimental se construye alrededor de las funciones y la programación orientada a objetos se construye alrededor de las clases. ¿Existe alguna relación entra ambas? ¡Sí! Las clases son construidas usando elementos de programación estructurada, llamadas funciones. Esta es la razón por lo que necesitamos primero estudiar la programación estructurada y gradualmente movernos a la programa-ción orientada a objetos. Conforme avance en las lecciones irá aprend iendo como hacer programas estructurados. Además, empezará a pensar las cosas en función de clases y objetos. Cuando haya dominado estos conceptos fundamentales, estará listo para aprender, en cursos posteriores, acerca de la programación orientada a objetos. En esta lección, se introduce la terminología básica de los sistemas de computación y los conceptos que existen detrás del diseño orientado a objetos.

Objetivos de esta lección: • Conocer la terminología básica en computación. • Manejar los sistemas numéricos binario, octal y hexadecimal. • Realizar operaciones aritméticas en los sistemas numéricos binario, octal y hexadeci-

mal. • Definir lo que es Software y lo que es Hardware. • Saber como se encuentra organizada una computadora. • Clasificar el software en software de aplicación y software de sistema . • Definir y analizar las diferentes categorías de lenguajes de programación. • Distinguir entre lo que es un intérprete y lo que es un compilador. • Saber cual es el proceso que se requiere para obtener un programa ejecutable. • Definir los objetivos básicos de la Ingeniería de Software. • Definir los principios de la Ingeniería de Software. • Realizar diseños básicos de clases y objetos.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-4

TERMINOLOGÍA BÁSICA EN COMPUTACIÓN Uno de los aspectos importantes para aprender una nueva disciplina es conocer su terminología. En particular la terminología asociada con las computadoras se ha extend ido tanto que es difícil hablar de ellas si se desconoce la que se utiliza en este entorno. UNIDADES DE MEDIDA EN COMPUTACIÓN Gran parte de la terminología usada en computación involucra medidas para com-parar distintos aspectos de la computadora. Habitualmente, tienen que ver con la capacidad de algunos aspectos de la computadora o con la velocidad de la misma. Para medir la velo-cidad, es usual utilizar el tiempo que tarda en hacer alguna operación. En estos casos, las unidades de medida son milésimas, millonésimas, milmillonésimas y billonésima de se-gundo. La tabla 2.1 muestra las medidas usadas más frecuentemente. Las computadoras actuales hacen la mayoría de las operaciones aritméticas en nanosegundos, aunque se ha logrado que se realicen en picosegundos.

Tabla 2.1. Unidades utilizadas para medir la velocidad de una computadora

Prefijo Símbolo Fracción de segundo Picosegundos ps 10 -12 Nanosegundos ns 10 -9 Microsegundos µµs 10 -6 Milisegundos ms 10 -3

Otra unidad de medida que se usa a menudo es la que se conoce con el nombre de frecuencia del reloj. La frecuencia del reloj define el número de operaciones que la com-putadora puede realizar en un segundo y se expresa en ciclos por segundo o hertzios. Por ejemplo, una computadora con una frecuencia de reloj de 2,200,000,000 hertzios, hace algo cada 0.45 ns (es decir, cada 1/2,200,000,000). En la tabla 2.2, se muestran los prefijos utilizados, los cuales provienen del sistema métrico decimal. En el ejemplo anterior, se de-bería escribir 2.2 Ghz (2.2 Gigahertzios). Cuanto más rápido sea el reloj, más rápida será la computadora.

Tabla 2.2. Potencias de 10 usadas frecuentemente y sus abreviaturas

Prefijo Símbolo Significado Kilo K 10 +3

Mega M 10 +6 Giga G 10 +9 Tera T 10 +12

Para medir la capacidad de una computadora, se utilizan potencias de dos en vez de potencias de diez. Este sistema es el adecuado, porque las computadoras digitales usan el sistema numérico binario. La tabla 2.3 muestra las potencias de 2 que se usan de forma más frecuente. Como se ve en la tabla, la abreviatura para 210 es K, donde K viene de kilo. El prefijo kilo se usa porque 1,024 está cercano a 1000. De igual forma, se usa mega para 220, porque su valor es cercano a 1,000,000. Cuando estas unidades se usan para expresar capacidad de almacenamiento en una computadora, se refieren siempre a los valores poten-

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-5

cia de 2. Por ejemplo, una computadora que tiene 10 megabytes de memoria tiene 10 * 220 bytes, o 10,048,576 bytes, de memoria.

Tabla 2.3. Potencias de 2 usadas frecuentemente y sus abreviaturas

Prefijo Símbolo Significado Kilo K 2 +10 = 1,024

Mega M 2 +20 = 1,048,576 Giga G 2 +30 = 1,073,741,824 Tera T 2 +40 = 1.099.511,627,776

SISTEMAS NUMÉRICOS Los mismos principios del sistema decimal son válidos en el sistema binario. Am-bos son sistemas numéricos posicionales, es decir, sistemas en los que la posición de cada dígito indica su valor relativo. Por ejemplo, en el número decimal 7,537, el 7 está en el lu-gar de los millares e indica un valor de 7000. Leyendo el número desde la derecha, cada dígito representa un una potencia del 10, comenzando con 100, e incrementando el expo-nente de uno en uno. Así, el valor de 7,537 puede expresarse como: 7 * 103 + 5 * 102 + 3 * 101 + 7 * 100

,

En el sistema binario, las cosas se dan de igual manera, salvo que las potencias son del 2. Por ejemplo, el número binario 1010 representa el valor, 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 , decimal 10 (8 + 0 + 2 + 0). Para indicar que un número está en una base distinta a la deci-mal, es costumbre escribir la base como un subíndice al final de dicho número. Así, 1010102 es la representación binaria del valor decimal 42, mientras 1011 representa el valor decimal 1,011. A los dígitos de un número en binario se les llama bits (de dígito binario en inglés: binary digit). Escribir números binarios, aunque no sean muy grandes, suele ser tedioso, por lo que los bits de un número binario se agrupan haciéndolos corresponder con una raíz mayor (que, por supuesto, será potencia de 2). Agrupar los bits de tres en tres empezando por la derecha da una representación en base 8 u octal ( 23 = 8 ). Así el número 101010102 agrupado de tres en tres conduce a (10)(101)(010)2 que convirtiéndolos a dígitos octales nos da: 102 = 2 1012 = 5 0102 = 2

que es el número 2528. Este valor puede convertirse a decimal de la misma forma que se convierte un número a binario o un número decimal. La diferencia es que se usan potencia de 8. El número 2528 es: 2 * 82 + 5 * 81 + 2 * 80 que es el valor decimal 170. Para convertir un número decimal a su equivalente octal, se puede pensar en un nú-mero arbitrario en octal, digamos: s ... wxyz, que denota: s * 8n – 1+ ... w * 83 + x * 82 + y * 81 + z * 8 0 o s * 8n – 1 + ... w * 512 + x * 64 + y * 8 + z * 1

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-6

Ahora dividamos el número entre 8 para determinar el número de ochos que hay en él. El residuo es el valor de z. El valor de y se calcula dividiendo el cociente de la operación anterior entre 8, que da el número de 64s en el valor. El residuo es el valor de y. El proceso se continúa hasta que el número que se divide es menor que 8.

Para dar un ejemplo, calculemos las representaciones octal y binaria del número de-cimal 756. El cálculo se efectúa de la siguiente manera:

756 / 8 = 94 con residuo 4 94 / 8 = 11 con residuo 6 11 / 8 = 1 con residuo 3

Por lo tanto, la representación octal de 75610 es 13648. La representación binaria se obtiene expandiendo cada dígito octal a su equivalente binario, de la siguiente manera:

1 001 3 011 6 110 4 100

que nos da el número binario 0010111101002. La unidad estándar de almacenamiento en la mayoría de las computadoras es de 8 bits. Una agrupación de 8 bits se conoce con el nombre de byte. Debido a que el sistema octal junta los bits en grupos de 3, y 3 no divide de forma exacta a 8, se usa más frecuente-mente la base 16. El sistema numérico con base 16 se denomina sistema hexadecimal. En el sistema hexadecimal, los bits se agrupan en conjuntos de cuatro. Así, hay dos grupos hexadecimales por byte. Si se toma la representación binaria de 9810 y se dividen los bits en grupos de cuatro empezando por la derecha, se obtiene (110) (0010)2, que es 6216. Como prueba que se están convirtiendo los números correctamente, se puede volver a convertir el número decimal. Se usa el mismo proceso que se usó para convertir un número octal o bi-nario a decimal, excepto, por supuesto, que la base es 16. El número 6216 es: 6 × 161 + 2 × 160 = 96 + 2 = 98, valor correcto. Puesto que un dígito hexadecimal puede tener hasta 16 valores, se necesitan símbo-los extra para representar los dígitos mayores que 9. El convenio es usar las le tras de la A a la F para representar los dígitos del 10 al 15. Teniendo esto en cuenta, la representación hexadecimal de 756 es 2F416, que se ha obtenido escribiendo el equivalente binario de cada dígito octal y dividiendo los bits en grupos de cuatro, empezando por la derecha, según se muestra a cont inuación: 2 = 00102 15 = F 11112 4 = 01002 OPERACIONES ARITMÉTICAS

Realizar operaciones aritméticas con números positivos binarios es lo mismo que hacerlas con los números decimales. En la figura 2.1 se muestran ejemplos de sumas y multiplicaciones. Para la suma, los dígitos binarios se suman empezando por la derecha.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-7

Cuando la suma de dos dígitos es mayor que 1, se propaga un acarreo a la columna siguien-te. Para la multiplicación, el multiplicando se multiplica por los dígitos del multiplicador empezando por la derecha. En el sistema binario, la multiplicación es particularmente sen-cilla, porque se multiplica por cero o por uno. El último paso es sumar todos los productos parciales para obtener el producto final.

Suma binaria Suma decimal equivalente 00011 3 +01101 +13 10000 16 Multiplicación binaria Multiplicación decimal equivalente 0110 6 ×0111 ×7 0110 42 0110 0110 0000 0101010

Figura 2.1. Suma y multiplicación binarias Veremos a continuación como representar los números negativos. Todas las compu-tadoras usan un número fijo de dígitos binarios para representar un valor. Esta unidad bási-ca de almacenamiento se denomina habitualmente palabra. Para mantener las cosas senc i-llas, supondremos que se trabaja con una computadora con palabra de 8 bits. Basándonos en lo que ya sabemos, está claro que los números no negativos de 0 a 255 (28 – 1) se pueden representar en esta unidad de almacenamiento. Sin embargo, si se quiere representar números negativos y ser capaz de hacer substracciones, hay que sacrifi-car el dígito más significativo. La mayoría de las computadoras modernas usan un sistema de representación de enteros conocidos como complemento a dos. Con el sistema de complemento a dos, los números no negativos (es decir, números positivos y cero ) son representados como se dijo anteriormente. Sin embargo, los números negativos se representan de forma muy distinta. Para una máquina con una palabra de n bits, la representación en complemento a dos de –N es 2n – N expresado en binario. Para verlo de forma concreta, hagamos un ejemplo. De nuevo se asume que la lon-gitud de la palabra es de 8 bits. La representación en complemento a dos de 5 es 00000101. La representación en complemento a dos de -5 es la representación binaria de 28 - 5 o 251. La representación binaria de 251 es 11111011. Por lo tanto, la representación en comple-mento a dos de -5 es 11111011.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-8

Una forma sencilla de obtener la representación en complemento a dos de un núme-ro entero negativo es seguir los siguientes pasos:

Paso 1 . Escribir la representación en complemento a dos del entero positivo. Paso 2 . Complementar a 1 cada bit (cambiar cada 1 por 0 y cada 0 por 1). Paso 3 . Añadir 1 al número complementado. Para ver un ejemplo, elijamos el número -13210 Paso 1 . 10000100 (132 en ocho dígitos binarios). Paso 2 . 01111011 (su complemento a 1). Paso 3 . 01111100 (añadir 1 al complemento).

Por lo tanto, la representación en complemento a dos de -13210 es 01111100. La prueba se hace verificando que la suma de las representaciones binarias de 132 y -132 es 0. La suma es:

1000 0100 + 0111 1100

100000000

Fíjese en el bit de acarreo a partir del bit en la posición más significativa. Cuando se efectúan operaciones aritméticas en las que los números se representen en complemento a dos, el acarreo del bit más significativo se descarta. Así la suma es 0. De los ejemplos anteriores, se puede deducir que en el sistema de complemento a dos el bit más significativo de la palabra sirve como bit de signo. Un uno en la posición más significativa indica un valor negativo y un cero indica un valor positivo. El rango de valores que se puede representar con 8 bits es -128 a 127. En general, el rango de valores que puede ser representado en complemento a dos usando una palabra de n bits es -2n-1 a 2n-1- 1. El complemento a dos es importante porque proporciona a la computadora una for-ma de ejecutar restas sin necesidad de equipo especial. Para calcular la diferencia entre dos números binarios, x e y, se genera el complemento a dos de y y se suma a x. El resultado es la diferencia de x – y.

ORGANIZACIÓN DE UNA COMPUTADORA

Una computadora es un dispositivo capaz de efectuar cálculos y tomar decisiones lógicas a velocidades miles de millones de veces más rápidas que un ser humano. Por ejemplo, las computadoras personales actuales pueden llevar a cabo cien millones de sumas por segundo. Una persona con una calculadora de escritorio podría tardar décadas antes de terminar la misma cantidad de cálculos que una computadora personal puede hacer en un segundo.

EXAMEN BREVE 2-1

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-9

Las computadoras procesan datos que son controlados por conjuntos de instruccio-nes llamados programas de cómputo. Dichos programas guían a la computadora a través de conjuntos ordenados de acciones especificados por personas llamadas programadores de computadoras.

Los distintos dispositivos (como teclado, pantalla, ratón, discos, memoria, CD-

ROM y unidades de procesamiento) que forman un sistema de cómputo se dice que son el hardware del sistema. Los programas que se ejecutan en la computadora se llaman softwa-re. El costo del hardware ha caído de manera impresionante durante los últimos años, hasta el punto en que las computadoras personales se han vuelto un dispositivo común en los hogares. Por otro lado, los costos de desarrollo del software han aumentado de manera constante a medida que se desarrollan aplicaciones cada vez más poderosas y complejas, sin que haya sido posible mejorar, en la misma proporción que el hardware, la tecnología de desarrollo del software. En estas lecciones aprenderá métodos probados que pueden re-ducir los costos de desarrollo del software: programación estructurada, refinamiento des-cendente paso a paso, funcionalización y programación orientada a objetos.

Sin importar las diferencias físicas, prácticamente todas las computadoras pueden dividirse en seis unidades o secciones, que son:

1. Unidad de entrada. Esta es la sección receptora de la computadora. Obtiene informa-

ción (datos y programas) de varios dispositivos de entrada y la pone a disposición de las demás unidades para poder procesarla. Dos dispositivos de entrada de uso frecuente son el teclado y el ratón. A medida que se pulsan las teclas en el teclado, el sistema operativo lee las pulsaciones y las interpreta apropiadamente. El ratón es también un dispositivo de entrada muy útil. Un ratón típico tiene dos o tres botones y una pequeña bola en la parte de abajo que permite que el ratón se mueva. A medida que se mueve el ratón, el puntero de la pantalla se mueve de acuerdo con el ratón. El puntero de la pan-talla se denomina cursor . Moviendo el ratón de forma que el cursor apunte a una zona determinada de la pantalla (por ejemplo a un menú que ha sido pintado por la aplica-ción) y pulsando un botón del ratón, se puede enviar una señal a la comp utadora para realizar el mandato indicado en el elemento del menú seleccionado. Usar menús y bo-tones para dar órdenes a la computadora es mucho más sencillo que tener que teclear mandatos complicados que deben ser memorizados.

Otros dispositivos de entrada son los escáneres para imagen, entrada de voz y lápices

ópticos, CD-ROM. Tal vez en el futuro, la mayor parte de la información se introduzca hablándole a la computadora y explorando imágenes.

2. Unidad de salida. Esta es la sección de embarque de la computadora. Toma la informa-

ción que ha procesado la computadora y la pone en varios dispositivos de salida, deján-dola disponible para que sea utilizada fuera de ella. Actualmente, la mayor parte de la salida de información de las computadoras se presenta en pantalla, en las impresoras láser y de chorro o inyección de tinta (para información impresa) y trazadores (para imprimir información gráfica) y altavoces (para sonido).

Un dispositivo muy importante de salida en una computadora personal es la pantalla de

video o monitor. El monitor, a veces denominado CRT (por Cathodic Ray Tube) o tubo de rayos catódicos, opera de forma similar a un televisor. Es controlado por un disposi-tivo de salida, denominado tarjeta gráfica. La tarjeta gráfica envía los datos a mostrar al monitor en un formato que el monitor puede manejar. Características importantes del monitor y de la tarjeta gráfica son la frecuencia de refresco, la resolución y el número

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-10

de colores que soporta. La frecuencia de refresco indica lo rápido que la tarjeta gráfica actualiza las imágenes en la pantalla. Este proceso debe hacerse de forma periódica porque el fósforo usado en el tubo de imagen debe ser recargado con energía, de lo con-trario, se desvanece. Una tasa de refresco baja, como 60 Khz., puede causar fatiga vi-sual debido a fluctuaciones imperceptibles de la imagen. Se puede detectar estas fluc-tuaciones mirando a la pantalla con el rabillo del ojo. Muchas tarjetas gráficas pueden refrescar la pantalla con frecuencias de entre 70 y 100 Khz. Esta frecuencia elimina la fluctuación y la subsiguiente fatiga del ojo.

La resolución indica cuántos puntos por pulgada se pueden pintar a lo largo y ancho de

la pantalla. Un punto, en este contexto, se denomina a menudo píxel , que viene de pic-ture element . Una resolución estándar soportada por tarjetas gráficas que son compati-bles (VGA por Video Graphic Array) es 640 por 480; hay 600 píxeles a lo largo de la pantalla y 480 pixeles en vertical. La tarjeta gráfica almacena la información a pintar en cada píxel en su propia memoria. De esta forma, puede refrescar la pantalla de forma constante sin interrumpir las operaciones de la CPU. La CPU y la tarjeta gráfica sólo necesitan comunicarse cuando la información a pintar cambia. Las tarjetas gráficas que pueden trabajar en alta resolución necesitan más memoria. Por ejemplo, muchas tarjetas gráficas soportan resoluciones que van desde 800 por 600 hasta 1200 por 1024. Dichas tarjetas neces itan 1 M o 2 M de memoria.

Relacionado con la cantidad de memoria y la resolución está el número de colores que

pueden ser representados. La tarjeta gráfica debe almacenar información del color a pintar en cada pixel de la pantalla. Para mostrar 256 colores (es decir, 28) se necesita un byte por cada pixel. Para representar color real, que denomina a un conjunto de 16.7 millones de colores, se necesitan 24 bits por pixel. Por lo tanto, se puede ver que el nú-mero de colores que pueden representarse y la resolución está relacionados con la can-tidad de memoria de la tarjeta. Más memoria significa mayor resolución o más colores. En la mayoría de las tarjetas gráficas es posible intercambiar colores por resolución. Por ejemplo, con una resolución de 800 por 600 se puede usar colores reales, pero con una resolución mayor, digamos 1024 por 768, se pueden mostrar solo 65,536 colores.

3. Unidad de memoria. Esta es la sección de almacén de acceso directo y capacidad rela-

tivamente baja de la computadora. Retiene la información (datos y programas) que se ha introducido a través de la unidad de entrada, de modo que queda a disponibilidad inmediata para que se procese cuando sea necesario. La unidad de memoria también re-tiene la información procesada hasta que la unidad de salida la pueda colocar en los dispositivos de salida. La unidad de memoria se conoce comúnmente como memoria, memoria primaria, memoria central o memoria principal. En la mayoría de las com-putadoras construidas actualmente, la memoria principal está organizada en una serie de posiciones, cada una de las cuales contiene 8 bits, o un byte, de información. Una propiedad importante de la memoria principal es que se puede acceder a cualquier po-sición, o byte, en un tiempo máximo. Por esta razón, la memoria principal se conoce también como memoria de acceso directo o aleatorio, o RAM (por Random Access Memory). Esta propiedad contrasta con el acceso a una cinta magnética, donde para ac-ceder a la información en medio de la cinta hay que avanzar la cinta hasta el lugar ade-cuado. Por lo tanto, el tiempo de acceso a la información depende del lugar en que se encuentre. Este tipo de memoria se denomina memoria de acceso secuencial.

Dos características importantes de la memoria principal son su tamaño y su velocidad.

El tamaño de la memoria principal se mide en términos del número de bytes que con-tiene. En una computadora personal, la memoria principal varía desde 16 megatytes hasta 640 Mb. La velocidad de la memoria principal se mide en función del tiempo que se necesita para leer información de una posición en particular. Las velocidades tí-picas de una computadora personal varían entre 60 y 120 nanosegundos.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-11

En la mayoría de las memorias de acceso aleatorio, los contenidos se pierden cuando se apaga la computadora. Por esta razón se le llama memoria volátil. Se necesita algún tipo de memoria que no pierda sus contenidos cuando se apaga la computadora. Con-secuentemente, además de la RAM, la mayoría de las computadoras tienen memoria de sólo lectura, o ROM (por Read Only Memory). Este tipo de memoria no es volátil, por lo que la información almacenada en ella permanece aunque se apague la comp u-tadora. Los contenidos de la memoria ROM se configuran cuando se fabrica la comp u-tadora. Después del montaje, la ROM no puede ser escrita, sólo leída. De ahí el nom-bre de memoria de sólo lectura. Esta memoria, a veces denominada ROM BIOS (por Basic Input/Ouput Subroutines), contiene información que identifica el tipo de com-putadora y las instrucciones que arrancan la computadora cuando se acciona el inter-ruptor de corriente eléctrica. El proceso de encendido de la computadora y de ejecu-ción del programa de la BIOS se denomina carga de la máquina o carga del sistema .

4. ALU (Unidad aritmética y lógica), Esta es la sección de manufactura de la computa-

dora. Es la responsable de efectuar cálculos como sumar, restar, multiplicar y dividir. Contiene los mecanismos de la toma de decisiones que le permiten a la computadora, por ejemplo, comparar dos elementos de la unidad de memoria y determinar si son iguales.

5. CPU (Unidad central de procesamiento). Se trata de la sección administrativa . Es la

coordinadora de la computadora y la responsable de supervisar la operación de otras secciones. La CPU le indica a la unidad de entrada cuándo debe leer información y de-jarla en la unidad de memoria; a la ALU cuándo debe emplearse información de la uni-dad de memoria para efectuar cálculos; y a la unidad de salida cuándo enviar informa-ción de la unidad de memoria a ciertos dispositivos de salida. En las máquinas actuales los conmutadores se hacen con transistores ultra pequeños. Como consecuencia, una computadora completa cabe en un chip de silicio, que suele denominarse microproce-sador. El microprocesador Pentium Intel contiene cerca de 3,000,000 de transistores en un área poco mayor que una pulgada cuadrada. El sucesor del Pentium, el Pentium Pro, tiene casi 5,500,000 transistores.

6. Unidades de almacenamiento secundario. Esta es la sección de almacenamiento de

largo plazo y alta capacidad de la computadora. Los programas y datos que las demás unidades no están utilizando, normalmente se almacenan en dispositivos de almacena-miento secundario (como discos) hasta que se vuelven a necesitar, tal vez horas, días, meses o, incluso, años después. El acceso a la información en almacenamiento secunda-rio tarda mucho más que la que se encuentra en memoria primaria. Por lo que el costo por unidad de almacenamiento secundario es mucho menor que el costo por unidad de memoria primaria.

Algunos dispositivos pueden manejar entrada y salida de datos y se denominan

habitualmente dispositivos de entrada/salida. La mayor parte de los dispositivos de entra-da/salida se basan en algún tipo de tecnología de grabación magnética. Dispositivos típicos de entrada/salida son las unidades de disquete, discos duros o fijos y unidades de cinta magnética. Las unidades de disquete escriben y leen discos pequeños extraíbles. Las unida-des de disquetes actuales contienen 1.44 megabytes de datos. Muchas máquinas tienen ac-tualmente unidades de discos Zip. Estos discos extraíbles pueden almacenar hasta 256 me-gabytes de información. Los discos fijos tienen una capacidad mucho mayor que los discos extraíbles, tales como los disquetes o las unidades Zip. Un disco duro típico puede almace-nar entra 4 y 120 gigabytes de información. El disco de una unidad de disco duro no puede ser extraído, ya que está insertado en un contenedor cerrado al vacío para evitar que el pol-vo y otras partículas extrañas interfieran con la lectura y la escritura de información.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-12

Un disco debe formatearse antes de usarlo. La operación de formateo escribe in-formación en el disco para que los datos puedan ser escritos y leídos de forma eficiente. El proceso de formatear un disco es análogo al proceso de dibujar líneas en un estacionamien-to y numerar sus lugares. Permite que la información pueda ser almacenada (estacionada) y recuperada (encontrar su coche sin tener que dar vueltas por el estacionamiento) de forma eficiente. Esto explica por qué un disco tiene menos espacio libre dentro después de que ha sido formateado: las líneas y los números ocupan espacio (por su analogía con el estacio-namiento). Dos características importantes de la CPU son el tamaño de los números que mane-ja y la velocidad que tarda en ejecutar una operación aritmética.

El tamaño de los números que puede manejar una CPU se expresa habitualmente

como el número de bits del entero más grande que la CPU puede manipular. Hace unos pocos años, el entero más grande que podía manejar una máquina típica era de 32 bits. Ac-tualmente, hay CPU capaces de manejar enteros de 64 bits. Un entero de n bits puede re-presentar los valores decimales comprendidos entre 0 y 2n – 1. Por ejemplo, en una máqui-na con enteros de 8 bits, el mayor entero representable es 28 – 1 o 255.

La velocidad a la cual una CPU puede ejecutar una operación aritmética se especifi-

ca a menudo por el tiempo que lleva sumar dos enteros. Las computadoras construidas en la década de 1940 podían sumar números de 32 bits entre 150 y 200 microsegundos. Una computadora actual típica puede sumar números de 32 bits entre 2 y 4 nanosegundos.

Además de la ALU, una CPU contiene una unidad de control. La unidad de control es responsable de leer instrucciones de la memoria y ejecutar

la acción especificada por la instrucción (por ejemplo, una suma o una resta). Realizar la acción especificada por la instrucción se denomina ejecutar la instrucción, y las instruc-ciones en memoria se conocen como programa. La unidad de control repite los pasos de lectura y ejecución de instrucciones continuamente. Este proceso, denominado ciclo de lectura/ejecución, se ilustra en la figura 2.2.

Para seguir la pista de la instrucción a leer y ejecutar a continuación, la unidad de

control maneja un contador de programa. El contador de programa almacena la dirección de memoria de la próxima instrucción a leer y ejecutar. En la mayoría de los casos, el con-tador de programa recorre el programa secuencialmente. Es decir, las instrucciones son leídas y ejecutadas en el orden en que están almacenadas en memoria. Sin embargo, si sólo se pudiesen ejecutar instrucciones de forma secuencial, el uso de la computadora sería muy limitada. La unidad de control puede comprobar los datos leídos en la memoria y cambiar el contador de programa basándose en los resultados de la comprobación. Esta habilidad capacita a la CPU para decidir las acciones a tomar basándose en los datos que están siendo procesados. Esta toma de decisiones es fundamental para todos los dispositivos de compu-tación.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-13

Figura 2.2. Ciclo de lectura/ejecución de una computadora

SOFTWARE

Estableciendo una analogía entre el equipo de cómputo (hardware) y un automóvil, el software correspondería al conductor del automóvil. Sin el conductor, no pasa nada. En otras palabras, el equipo de cómputo por si mismo no puede hacer nada. El equipo requiere el software que proporcione instrucciones paso a paso para decirle al sistema qué hacer.

Resulta verdaderamente dramático el uso actual de las computadoras con respecto al

que se hacía tan solo hace quince años. Ciertamente, parte de la razón de este crecimiento es la dramática reducción del precio de una computadora. Otra razón ha sido el desarrollo de software útil y de gran calidad, que ha simplificado el uso de las computadoras. El soft-ware puede clasificarse en: software de aplicación y software de sistemas. La distinción entre ambos puede ser a veces difícil, pero generalmente, el software de aplicación sirve para resolver un problema o proporcionar un servicio, en un dominio de problema o área en particular. Obviamente, el abanico de aplicaciones es muy grande y crece rápidamente. Las computadoras personales han favorecido el desarrollo de nuevas áreas de aplicación:

•• Edición electrónica (DTP por DeskTop Publishing). •• Hojas de cálculo. •• Gestores de información personal (PIM por Personal Information Managers). •• Gestores de finanzas personales (PFM por Personal Financial Managers). •• Gestores de presentación (PM por Presentation Managers).

SOFTWARE DE APLICACIÓN Aunque es cierto que todo el mundo usa los servicios que proporciona el software de sistemas, son las aplicaciones las que hacen de la computadora una herramienta indis-

EXAMEN BREVE 2-2

Leer la instrucción a la que apunta el contador del programa

Actualizar el contador del programa para apuntar a la siguiente instrucción

Ejecutar la instrucción actual

Contador del programa

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-14

pensable para la mayoría de la gente. El software de aplicación puede clasificarse de acuer-do al tipo de aplicación:

1. Una categoría son los procesadores de texto, que son programas que ayudan a producir documentos. Algunos procesadores de texto populares son WordPerfect, Microsoft Word y AmiPro. Estos programas simplifican la edición y son capaces de imprimir los documentos en impresoras de alta resolución. Con los años, la potencia de estos proce-sadores de texto ha crecido tremendamente. Los primeros procesadores de texto tenían correctores de ortografía, pero eso era todo. Las versiones actuales incluyen correctores gramaticales, diccionarios, herramientas de dibujo y de creación de tablas, capacidad de crear documentos Web y cientos de otras características para facilitar la creación de do-cumentos.

2. Muy cercano a los procesadores de texto están los programas de autoedición (DTP por

Desktop Publishing Programas). Estos programas incluyen facilidades para diseñar do-cumentos. Por ejemplo, tienen herramientas para crear formatos para boletines e infor-mes de una compañía. Estos programas de aplicación permiten importar textos y foto-grafías de otras fuentes. Comparándolos con los procesadores de texto, los DTP tienen características más sofisticadas para manejar gráficos, colores y documentos grandes, como libros.

3. Otra clase de aplicaciones muy populares son las hojas de cálculo . Algunos piensan

que fue la invención de la hoja de cálculo electrónica la que ayudó a empezar la revolu-ción de la computación personal. Las hojas de cálculo proporcionan un medio sencillo y natural para tratar una amplia variedad de problemas. Las operaciones de contabilidad usan hojas de cálculo extensivamente porque proporcionan una forma sencilla de hacer previsiones. Por ejemplo, simplemente cambiando unos pocos números, la gente de ne-gocios puede conocer el efecto de una reducción de ventas sobre la ganancia total. La mayoría de las hojas de cálculo actuales tienen herramientas para hacer representación gráfica de los datos usando distintos tipos de diagramas de líneas, barras o de pastel. El usuario selecciona los datos que quiere ver gráficamente, y el tipo de gráfico a usar, y la hoja de cálculo produce de forma automática un gráfico usando los colores, claves y le-yendas adecuadas.

4. Otro tipo de programación de aplicación, los gestores de información personal (PIM

por Personal Information Manager), permiten a las personas organizar la información personal que es importante. Estos programas suelen incluir módulos de agenda, para almacenas las cosas a hacer, las citas y las direcciones de teléfono.

5. Por otra parte, los gestores de finanzas personales (PFM por Personal Financial Ma-

nager) permiten manejar información financiera personal. Los paquetes típicos inclu-yen módulos para mantener información de cuentas bancarias y cheques, presupuestos mensuales, estimación de impuestos, valor de las pertenencias personales y carteras de bonos y acciones. Una posibilidad nueva de estas aplicaciones es la de conectarse en tiempo real a servidores bancarios o de bolsa y obtener los cargos que han hecho sus tarjetas de crédito o los precios de sus acciones. Estas características eliminan la tarea de introducción manual de los valores al programa. A medida que se incrementa la po-tencia de las computadoras, se espera que aparezcan nuevos tipos de aplicaciones y me-joras en las características de las existentes.

EL SOFTWARE DEL SISTEMA

El software de sistema, por otro lado, sirve como base para el desarrollo y ejecución

de otros programas. En cierto sentido, el software de sistema sirve de puente entre el soft-

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-15

ware de aplicación y el hardware subyacente. Su objetivo es aislar al programador de los detalles de bajo nivel de la máquina y así incrementar la productividad. Esta visión de la organización de un sistema de computación se ilustra en la figura 2.3.

Figura 2.3. Visión de la organización de un sistema de computación Los diferentes pasos (acciones) de un algoritmo se expresan en los programas co-mo instrucciones, sentencias o proposiciones (normalmente el término instrucción se suele referir a los lenguajes de máquina y bajo nivel, reservando la sentencia o proposición para los lenguajes de alto nivel). Por consiguiente un programa consta de una secuencia de ins-trucciones, cada una de las cuales especifica ciertas operaciones que debe ejecutar la com-putadora.

Las instrucciones se escriben en un lenguaje que está específicamente diseñado para dar órdenes a una computadora. Estos lenguajes se denominan lenguajes de programación. En general, los lenguajes de computadora pueden ser agrupados dentro de tres categorías principales:

•• Lenguaje de máquina . •• Lenguaje ensamblador. •• Lenguaje de alto nivel.

La elaboración de un programa requerirá conocer el juego de instrucciones del len-guaje. Las instrucciones básicas y comunes a casi todos los lenguajes de programación se pueden resumir en cuatro grupos:

•• Instrucciones de entrada/ salida . Son instrucciones de transferencia de información y datos entre dispositivos periféricos (teclado, impresora, unidad de disco, etc.) y la me-moria principal.

Nivel de programa de aplicación

Nivel del software de sistema

Nivel del hardware

Excel Word

WordPerfect

Borland

Access

Usuario 1 Usuario 2

Usuario 3

Usuario 4

Usuario 6

Usuario 5

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-16

•• Instrucciones aritméticas y lógicas. Son instrucciones que ejecutan operaciones arit-méticas (suma, resta, multiplicación, división, potenciación), lógicas (operaciones and, or, not, etc.).

•• Instrucciones selectivas. Son instrucciones que permiten la selección de tareas alterna-tivas en función de los resultados de diferentes expresiones condicionales.

•• Instrucciones repetitivas. Son instrucciones que permiten la repetición de secuencias de instrucciones un número determinado de veces.

LENGUAJE DE MAQUINA Todos los componentes del equipo en un sistema de cómputo (hardware), incluyen-do la unidad central de procesamiento o CPU, por sus siglas en inglés, operan utilizando un lenguaje binario hecho de unos y ceros. La CPU no entiende ningún otro lenguaje. Cuando se diseña una computadora, la CPU se construye de tal manera que interprete un conjunto de instrucciones básicas determinadas por el fabricante. Cada una de éstas tiene un código binario único que puede ser traducido directamente por la CPU. Este código se denomina código de máquina, y al conjunto de las instrucciones del código de máquina se le conoce con el nombre de lenguaje de máquina. Un programa en lenguaje de máquina puede ser comprendido directamente por la computadora. Un lenguaje de máquina está formado por instrucciones que representan las operaciones fundamentales de la computado-ra. En consecuencia, distintos tipos de computadoras usan lenguajes de máquina diferentes. Por ejemplo, el lenguaje de máquina que entiende una Pentium de Intel es bastante distinto del lenguaje de máquina que comprende un procesador PowerPC de IBM. Parte del diseño de una computadora es determinar las operaciones fundamentales que puede llevar a cabo y la codificación binaria de esas instrucciones. La codificación binaria es el patrón de bits que representa una instrucción en particular. Las operaciones y su codificación binaria se denominan juego de instrucciones. En la figura 2.4(a) se muestra un programa típico en lenguaje de máquina. Para escribir tal programa, debe determinarse la operación que se va a realizar y después traducir la operación al código de máquina binario requerido, a partir de una lista de códigos de máquina de la serie de instrucciones proporcionados por el fabricante de la CPU. Como puede imaginar, esto es un proceso extremadamente ineficiente. Se consume tiempo, es tedioso y sujeto a una tremenda cantidad de errores. Además, operaciones simples como la multiplicación y división, a menudo requieren varias líneas en código de máquina. Por esta razón, la programación en lenguaje de máquina se usa en raras ocasiones. Sin embargo, aún los programas en lenguaje de alto nivel se traducen a lenguaje de máquina para permitirle a la CPU ejecutar las instrucciones del programa.

01001100 mov bx, valor copiado x = 2; 11101001 mov ax, [bx] if(x <= y) 10101010 add ax, 5 x = x + 1; 10001110 add bx, 2 else 00001111 add ax, [bx] x = x – 1; (a) (b) (c)

Figura 2.4 . (a) Lenguaje de máquina, (b) Lenguaje ensamblador y (c) Lenguaje de alto nivel.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-17

Incluso en las computadoras actuales, el lenguaje de máquina es bastante primitivo, y escribir un programa directamente en lenguaje de máquina es tedioso. Para empeorar las cosas, sin ningún tipo de asistencia se debe usar directamente la codificación binaria de las instrucciones.

Ventajas de programar en lenguaje de máquina: •• Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción

posterior, lo que supone una velocidad de ejecución superior a cualquier otro lenguaje de programación.

Desventajas de programar en lenguaje de máquina:

•• Dificultad y lentitud en la codificación. •• Poca fiabilidad. •• Dificultad grande de verificar y poner a punto los programas. •• Los programas solo son ejecutables en el mismo procesador.

Para tener una idea de las dificultades de escribir programas en lenguaje de máqui-

na, desarrollaremos a continuación un programa para una computadora hipotética que con-tiene tan solo 8 instrucciones (ver tabla 2.4). Esta computadora hipotética ha sido diseñada para su uso en máquinas despachado-ras de refrescos. Tiene un juego de instrucciones muy sencillo. Una instrucción para esta computadora tiene 7 bits. Los tres primeros indican la operación a realizar. Estos bits se denominan código de operación, o códigoop abreviado. Los cuatro bits restantes se usan únicamente en instrucciones de salto para especificar la posición de memoria en donde leer la siguiente instrucción. Observe que debido a que sólo hay 4 bits para la dirección, podrá especificar 16 direcciones de memoria como máximo.

Tabla 2.4 . Juego de instrucciones de una computadora hipotética despachadora de refrescos.

Descripción de la instrucción Codificación binaria Reiniciar la máquina 000 0000 Esperar por una moneda 001 0000 Saltar la siguiente instrucción si la moneda no es falsa 010 0000 Añadir moneda al total 011 0000 Saltar la siguiente instrucción si total es menor que el costo de una lata de refresco

100 0000

Tomar foto y llamar a la policía 101 0000 Saltar a la posición especificada 110 dddd Dar una lata de refresco y devolver el cambio si hay 111 0000 Consideremos la instrucción de salto. Su codificación es:

110 dddd

el espacio entre las dos partes de la instrucción binaria separa el código de operación de la dirección. Este convenio es sólo para nuestra conveniencia. El patrón de bits 110 se inter-pretará por la computadora como la orden de ejecución de una instrucción de salto. Se usa la notación dddd de los siguientes 4 bits para indicar que estos bits son una dirección.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-18

Cuando la computadora hipotética ejecuta una instrucción de salto, los 4 bits que especifi-can la dirección se mueven al contador de programa (véase la figura 2.2). Como conse-cuencia, se lee la siguiente instrucción de esa posición de memoria.

Dada la información anterior, se desea escribir un programa en lenguaje de má-quina de la computadora hipotética que dé una lata de refresco y el cambio cuando se haya depositado suficiente dinero. Puesto que ha habido muchos problemas con la gente que introduce monedas falsas en la máquina, si se detecta una, el programa debería or-denar a la computadora hipotética tomar una foto del delincuente y llamar a la policía. Entonces debería reiniciarse a sí misma.

DIAGRAMA DE FLUJO

Figura 2.5. Diagrama de flujo del despachador de refrescos

Inicio

Reiniciar la máquina

Esperar por una moneda

¿Moneda falsa?

total = total + depósito

¿Suficiente dinero?

C

D

A

B

D

Tomar foto y llamar policía

A

Dar refresco y cambio

B

C C

si no

no si

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-19

A continuación (tabla 2.5), se muestra el programa en lenguaje de máquina que eje-cuta las acciones especificadas. Las instrucciones se almacenan secuencialmente en memo-ria empezando en la posición 0. Lo primero que usted debería hacer es leer los comentarios de la derecha y examinar el programa. Es muy difícil determinar lo que hace el programa. Para cada instrucción hay que ir a la tabla que contiene el juego de instrucciones de la com-putadora hipotética y decodificar las instrucciones binarias. Debido a que se tienen que usar las instrucciones primitivas de la computadora hipotética, incluso entender la lógica del programa correctamente es difícil.

Tabla 2.5. Programa en lenguaje de máquina para despechar una lata de refresco

Posición de memoria

Instrucción Comentarios

0000 000 0000 Reiniciar la máquina 0001 001 0000 Esperar por una moneda 0010 010 0000 Saltar si la moneda no es falsa 0011 110 1000 Saltar a la posición 1000 0100 011 0000 Añadir la moneda al total 0101 100 0000 Saltar si no hay bastante dinero 0110 110 1010 Saltar a la posición 1010 0111 110 0001 Saltar a la posición 001 1000 101 0000 Tomar foto y llamar a la policía 1001 110 0000 Saltar a la posición 0000 1010 111 0000 Dar el refresco y devolver cambio 1011 110 0000 Saltar a la posición 0000

¿Cómo podemos saber si el programa hace lo que se supone? Una actividad que un programador hace a menudo cuando escribe, o intenta entender, un programa es hacer una prueba de escritorio del programa. Con este procedimiento, el programador actúa co-mo la computadora: lee y ejecuta las instrucciones del programa para determinar si el pro-grama actuará de forma apropiada cuando se ejecute en la máquina real. Para ver como funciona esta técnica, hagamos una prueba de escritorio de nuestro sencillo programa en lenguaje de máquina. Se asume que la ejecución empieza en la posición 0000 y que el costo de un refresco es de 5.50 pesos. La prueba de escritorio se muestra en la tabla 2.6

Tabla 2.6. Programa en lenguaje de máquina para despechar una lata de refresco

Paso Contador de programa

Acción Valor del total

1 0000 Reiniciar la máquina 0.00 2 0001 Esperar por una moneda. Recibe 2.50 0.00 3 0010 Saltar si la moneda no es falsa 0.00 4 0100 Añadir la moneda al total 2.50 5 0101 Saltar si no hay bastante dinero 2.50 6 0111 Saltar a la posición 0001 2.50 7 0001 Esperar por una moneda. Recibe 2.50 2.50 8 0010 Saltar si la moneda no es falsa 2.50 9 0100 Añadir la moneda al total 5.00

10 0101 Saltar si no hay bastante dinero 5.00 11 0111 Saltar a la posición 0001 5.00 12 0001 Esperar por una moneda. Recibe 1.00 5.00 13 0010 Saltar si la moneda no es falsa 5.00

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-20

14 0100 Añadir la moneda al total 6.00 15 0101 Saltar si no hay bastante dinero 6.00 16 0110 Saltar a la posición 1010 6.00 17 1010 Dar el refresco. Devolver cambio: 50 centavos 6.00 18 1011 Saltar a la posición 0000 6.00 19 0000 Reiniciar la máquina 0.00

El primer paso reinicia el estado de la máquina. Esta acción fija la cantidad total de

dinero recibido hasta ahora a cero. A continuación, se ejecuta la instrucción en la posición 0001. Esta instrucción espera a que se deposite una moneda. Para la simulación, se asume que se han depositado 2.50 pesos. Cuando se deposita la moneda, se continúa la ejecución en la posición 0010 (paso 3). Esta instrucción comprueba si la moneda es falsa. No lo es, por lo que se salta la instrucción en la posición 0011 y se continúa en la posición 0100. esta instrucción añade el valor de la moneda al total. Advierta que dicho total es ahora de 2.50 pesos. A continuación, el programa comprueba si hay suficiente dinero depositado para comprar un refresco. El total es menor que 5.50 pesos, por lo que se salta la siguiente ins-trucción y se ejecuta la de la posición 0111. Esta instrucción salta hacia atrás hasta la posi-ción 0001, que espera a que se deposite otra moneda. El programa continúa, siendo deposi-tados a continuación otros 2.50 pesos y luego 1.00 pesos (pasos 7 a 13).

Después de añadir el 1.00 peso al total, la ejecución continúa en el paso 14. Esta vez

si hay bastante dinero, y la instrucción siguiente a la de salto es ejecutada. Esta instrucción salta a la posición 1010. En el paso 17, se despacha un refresco y se devuelven 50 centavos. En el paso 18, se ejecuta la instrucción en la posición 1011, por lo que se salta hacia atrás del programa, a la posición 0000, y la máquina se reinicia para esperar otro cliente.

La prueba de escritorio es extremadamente útil para determinar lo que está hacien-

do el programa. A posteriori, lo que hemos hecho puede parecer bastante tedioso. Se ha entrado bastante en detalle en el programa para ver qué esta pasando. A medida que se desarrollen sus habilidades personales, encontrará que se pueden hacer ejecuciones manuales de secciones pequeñas de código de forma bastante sencilla. Podría necesitar un borrador en papel para registrar los valores a medida que cambian, pero, generalmente, no es necesario escribir todos los pasos ejecutados. LENGUAJE ENSAMBLADOR

Obviamente, escribir y comprobar un programa, aunque sea pequeño (500 o 1000 instrucciones) en lenguaje de máquina sería tedioso y proclive a cometer errores. Durante muchos años, los programadores han dedicado mucho esfuerzo a desarrollar lenguajes que permitan a la gente escribir programas de forma más natural. En un nivel ligeramente supe-rior al lenguaje de máquina esta el lenguaje ensamblador. Más que usar unos y ceros, el lenguaje ensamblador emplea abreviaturas alfabéticas llamadas mnemónicos que son fá-cilmente recordadas por el programador. Por ejemplo, la palabra mnemónica para la adición es ADD, para mover es MOV y así sucesivamente. Después, un programa denominado en-samblador traduce las instrucciones del lenguaje ensamblador a código binario. Un pro-grama en lenguaje ensamblador convencional se lista en la figura 2.4(b)

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-21

El uso de mnemónicos en lenguaje ensamblador le proporciona un medio más fácil para escribir e interpretar programas. Aunque los programas en lenguaje ensamblador son más fáciles de entender para los humanos, la CPU no puede interpretarlos directamente. Como resultado, los programas en lenguaje ensamblador deben traducirse a código de má-quina. Este es el trabajo de otro programa llamado ensamblador, el cual traduce los pro-gramas escritos en lenguaje ensamblador a código de máquina que puede ser ejecutado por la CPU.

Aunque programar en lenguaje ensamblador es más fácil que en lenguaje de má-quina, no es el medio de programación más eficiente. La programación en lenguaje en-samblador es también tediosa y propensa a errores, ya que hay una relación uno a uno entre los mnemónicos y el código de máquina correspondiente. La solución a estos problemas del lenguaje ensamblador son los lenguajes de alto nivel. Esto no significa que el lenguaje ensamblador no sea útil. Debido a su relación uno a uno con el lenguaje de máquina, los programas en lenguaje ensamblador son más efi-cientes con respecto a la velocidad de ejecución y utilización de memoria que los lenguajes de alto nivel. De hecho, muchos programas en lenguaje de alto nivel incluyen rutinas en lenguaje ensamblador, específicamente para tareas que requieren de un software de alta velocidad.

Ventajas de programar en lenguaje ensamblador: •• Mayor facilidad de codificación y en general, mayor velocidad de cálculo.

Desventajas de programar en lenguaje ensamblador:

•• Dependencia total de la máquina, lo que impide la transportabilidad de los pro-gramas.

•• La formación de los programas es mas compleja que la correspondiente a la programación de alto nivel, ya que exige no solo las técnicas de programación, sino también el conocimiento del interior de la computadora.

Hoy día los lenguajes ensambladores tienen sus aplicaciones muy reducidas en la

programación de aplicaciones y se centran en aplicaciones de tiempo real, control de pro-cesos y de dispositivos electrónicos, etc. LENGUAJE DE ALTO NIVEL

Una de las características del lenguaje de máquina y del lenguaje ensamblador es la necesidad de conocer los detalles de la máquina a programar. Como se mencionó, cada tipo de computadora tiene su propio y único lenguaje de máquina. El siguiente nivel de los lenguajes de programación está formado por los lenguajes de alto nivel. Una característica distintiva de un lenguaje de alto nivel es que no se requiere un conocimiento detallado de la computadora que está siendo programada. Otra característica es que un lenguaje de pro-gramación de alto nivel usa habitualmente un vocabulario y estructura que está cercana al tipo de problema a resolver. Por ejemplo, el lenguaje de programación FORTRAN, que se usa para resolver problemas científicos y de ingeniería, usa una notación como la matemá-tica. Por supuesto, el nombre FORTRAN deriva de la frase Formula Translation (traduc-

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-22

ción de fórmulas). Debido a este acoplamiento entre el lenguaje y el dominio de los pro-blemas, existen literalmente cientos de lenguajes de programación de alto nivel.

Un lenguaje de alto nivel consiste en una serie de instrucciones, que son similares

al inglés y a la notación matemática común. Una serie típica de instrucciones de alto nivel se muestra en la figura 2.4(c). Las instrucciones en lenguaje de alto nivel son muy podero-sas. Una instrucciones típica en un lenguaje de alto nivel equivale a muchas instrucciones de código de máquina.

Los lenguajes de alto nivel se desarrollaron a principios de los años cincuenta para

simplificar el proceso de programación. Cuando se programa en un lenguaje de alto nivel, no es necesario conocer la serie de instrucciones específicas de la CPU. Puede concentrar-se más en la solución del problema.

Ventajas de programar en lenguaje de alto nivel: •• El tiempo de formación de los programadores es relativamente corto comparado

con otros lenguajes. •• La escritura de programas se basa en reglas sintácticas similares a los lenguajes

humanos. •• Las modificaciones y puestas a punto de los programas son más fáciles . •• Reducción del costo de desarrollo de los programas . •• Transportabilidad.

Desventajas de programar en lenguaje de alto nivel:

•• Incremento del tiempo de puesta a punto, al necesitarse diferentes traducciones del programa fuente para conseguir el programa definitivo .

•• No se aprovechan los recursos internos de la computadora, que se explotan mucho mejor en lenguajes de máquina y lenguajes ensambladores .

•• El tiempo de ejecución de los programas es mucho mayor.

SISTEMAS OPERATIVOS

Una pieza muy importante del software del sistema es el sistema operativo. Un sistema operativo es el software que controla y gestiona los recursos de la computadora. Estos recursos incluyen memoria, dispositivos de entrada/salida (I/O por Input/Output) y la CPU. El sistema operativo proporciona servicios tales como la asignación de memoria a los programas y el manejo de los controladores de dispositivos, tales como la pantalla, el teclado y los discos duros. Sistemas operativos populares para computadoras personales son Windows XP, Windows NT, OS/2 y UNIX. EVOLUCION DE LOS SISTEMAS OPERATIVOS

Las primeras computadoras eran capaces de efectuar únicamente un trabajo o tarea

a la vez. Esta forma de operación de la computadora con frecuencia se llama procesamien-to por lotes monousuario. La computadora ejecuta un solo programa a la vez mientras pro-cesa los datos en grupos o lotes. En estos primeros sistemas, los usuarios normalmente re-mitían a un centro de cómputo sus tareas en pilas de tarjetas perforadas. Tenían que esperar horas o días antes de recibir la impresión de sus resultados.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-23

Para simplificar el uso de las computadoras, se desarrollaron sistemas de software llamados sistemas operativos. Los primeros sistemas operativos administraban la transición entre tareas, minimizando el tiempo que tomaba a los operadores hacer el cambio de tareas. Con esto aumentó el rendimiento (cantidad de trabajo), que podían efectuar las computa-doras.

A medida que las computadoras se volvieron más poderosas, resultó evidente que el

procesamiento por lotes monousuario pocas veces aprovechaba eficientemente los recursos de la computadora. Se pensó que se podrían hacer que muchos trabajos o tareas compar-tiendo los recursos de la computadora, logrando un mejor empleo. A esto se le llamó mul-tiprogramación. Esta comprende la operación consecutiva (dando la apariencia de simultaneidad) de muchas tareas en la computadora, la cual comparte sus recursos entre las tareas que compiten por su atención. En los primeros sistemas operativos de multiprogramación, los usuarios seguían enviando sus tareas en pilas de tarjetas perforadas y esperaban durante horas o días los resultados.

Durante la década de los 60, grupos de la industria y las universidades fueron pione-

ros de los sistemas operativos de tiempo compartido. El tiempo compartido es un caso es-pecial de la multiprogramación en el que los usuarios tienen acceso a la computadora a través de terminales (dispositivos con teclado y pantalla). En un sistema de cómputo de tiempo compartido típico, puede haber docenas o cientos de usuarios compartiendo simul-táneamente la computadora. En realidad, ésta no ejecuta todas las tareas de los usuarios simultáneamente. En cambio, ejecuta una parte pequeña de la tarea de un usuario y luego procede a darle servicio a cada uno de los usuarios varias veces por segundo. De ahí que los programas de los usuarios parecen ejecutarse de manera simultánea. Una ventaja del tiem-po compartido es que el usuario recibe respuestas casi inmediatas a sus solicitudes, en lugar de tener que esperar mucho tiempo por sus resultados, como sucedía en los modos previos de cómputo.

SERVICIOS QUE PRESTA UN SISTEMA OPERATIVO

Un sistema operativo presta los siguientes servicios:

•• Sistema de archivos . •• Comandos o mandatos . •• Operaciones de entrada y salida . •• Gestión de programas en ejecución •• Sistemas de traducción..

Un servicio importante que proporciona el sistema operativo es el sistema de ar-

chivos. El sistema de archivos controla la organización de la información en un disco de forma que pueda encontrarse y recuperarse rápidamente. El disco tiene áreas donde la in-formación relacionada se puede almacenar junta. Estas áreas son análogas a los cajones de un archivero. Un cajón podría contener todos los archivos que pertenecen a los estudiantes del primer año. En el caso de un sistema de archivos, tal área es denominada directorio. A diferencia de un archivero, un directorio puede contener otros directorios. Esa organiza-ción se denomina sistema jerárquico de directorios.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-24

La figura 2.6 contiene un diagrama de árbol con la organización de los archivos en un disco llamado C:\, la raíz del árbol. Debajo de la raíz hay archivos y directorios. Por ejemplo, compu1 es el directorio que contiene los archivos relacionados con un curso de-nominado compu1. El directorio compu1 contiene archivos y directorios. En la figura 2.6, compu1 contiene dos subdirectorios, tarea y labs, y un archivo leame.txt. Los nombres de directorio deberían hacer referencia al contenido del directorio. En este ejemplo, el nombre tarea indica que los archivos que contiene están relacionados con el trabajo para casa del curso compu1. De igual forma, el nombre labs indica que el directorio contiene informa-ción de los trabajos de laboratorio relacionados con el curso. De forma similar, el nombre de un archivo debería indicar el tipo de información contenido en dicho archivo. Un nombre de archivo tiene dos partes. La parte situada antes del punto se denomina base, y la parte situada después del punto se denomina extensión. La extensión indica el formato del archivo. Por ejemplo, en el directorio compu1, el archi-vo leame.txt tiene la extensión txt, que es muy frecuente. Esta extensión indica que el ar-chivo contiene texto que puede ser leído mediante su impresión o mediante el uso de un editor de texto. Otra extensión frecuente es exe. Esta extensión se usa para archivos que contienen un programa ejecutable. Este tipo de archivo no puede ser procesado por un pro-cesador de textos o un editor. El nombre base dice qué información contiene el archivo. Por ejemplo, el nombre base leame indica que cualquiera que quiera comprender lo que contiene el directorio compu1 debería leer el contenido de ese archivo. Otro ejemplo a considerar puede ser el archivo notas.xls. La extensión xls indica que este archivo ha sido producido por Excel, una aplicación de hoja de cálculo. El nombre base notas indica que el archivo contiene hojas de cálculo de notas. Si se organizan los archivos cuidadosamente en subdirectorios y se eligen nombres adecuados, un sistema de archivos jerárquico proporciona una forma efectiva de organizar la información para que pueda ser encontrada rápidamente.

C:\ Windows compu1 correo carta.wp cal.exe … notas.xls tarea labs leame.txt Ana … Alba Pepito tip.cpp cambio.dat burbuja.cpp … busqueda.cpp

Figura 2.6. Sistema jerárquico de archivos.

Otra parte importante del sistema operativo son los comandos o mandatos de ges-tión de archivos. Los nombres de los mandatos y cómo llamarlos cambia de un sistema operativo a otro, pero su funcionalidad es idéntica. La mayoría de sistemas tiene mandatos para borrar archivos, renombrar archivos, copiar archivos y crear directorios.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-25

El sistema operativo también proporciona servicios básicos para ejecutar operacio-nes de entrada y de salida sobre distintos tipos de dispositivos. Un programa necesita sa-ber exactamente cómo interactuar con un dispositivo de entrada/salida, los detalles de bajo nivel son manejados por el sistema operativo. Por ejemplo, si un programa quiere leer del disco un archivo en particular, en lugar de acceder directamente al disco, envía su petición al sistema operativo. El sistema operativo encuentra el archivo en el disco, lee las porcio-nes adecuadas y devuelve la información deseada por el programa que hizo la petición. Otro servicio del sistema operativo es la gestión de programas en ejecución. La mayoría de los sistemas operativos modernos permiten que múltiples programas compar-tan la CPU. Por ejemplo, con el sistema operativo Windows puede cargar un archivo en la computadora, ejecutar un programa en segundo plano y ejecutar un procesador de textos todo al mismo tiempo. El trabajo del sistema operativo es estar seguro de que cada pro-grama tiene suficiente memoria para trabajar y que se le permita ejecutarse en la CPU cuando lo necesita. Otra clase de software de sistema son los denominados sistemas de traducción. Un sistema de traducción es un conjunto de programas que se usa para desarrollar nuevo soft-ware. Un componente clave de estos sistemas es el traductor, un programa que lee un pro-grama escrito en un lenguaje de programación y genera un programa de salida, posible-mente en un lenguaje de programación distinto. La entrada al traductor se denomina pro-grama fuente, y la salida se denomina programa destino. El lenguaje usado para el pro-grama fuente se denomina lenguaje fuente, en correspondencia, el lenguaje usado para el programa destino se denomina lenguaje destino. En la figura 2.7 se ilustra el proceso de traducción.

Figura 2.7. El proceso de traducción Los traductores se dividen típicamente según sus lenguajes fuente y destino. Antes se dijo que un ensamblador traduce un lenguaje de máquina simbólico a un lenguaje de máquina binario. Un programa en lenguaje de máquina binario se denomina a menudo código objeto o archivo objeto. Esté consciente de que aun cuando programe en lenguaje de alto nivel, el sistema debe traducir sus instrucciones a código de máquina para que pueda ser entendido por la CPU. Hay dos tipos de programas del sistema que pueden emplearse para este propósito: un compilador y un intérprete. Un compilador es un programa que acepta un programa en lenguaje de alto nivel y traduce todo el programa a código de máquina al mismo tiempo, antes de que sea ejecutado por la CPU. Por otra parte, un intérprete traduce y ejecuta una instrucción de alto nivel a la vez. Una vez que se ejecuta una instrucción dada, el intérprete traduce y ejecuta la siguiente instrucción y así sucesivamente, hasta que el programa com-pleto ha sido ejecutado. Aunque los intérpretes tienen sus ventajas, especialmente durante la etapa de depuración, C++ emplea un compilador. Por esta razón veremos con mayor detalle la operación de un compilador. El proceso de usar un compilador para traducir un programa en lenguaje de alto nivel se denomina compilación.

Programa fuente Traductor Programa destino

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-26

Otro tipo de traductor es el denominado enlazador o vinculador. Un enlazador o vinculador combina archivos objetos y bibliotecas de forma que puedan ser ejecutados como una sola unidad. Una biblioteca contiene archivos de código objeto de rutinas que han sido desarrolladas para cumplir alguna tarea o función en particular. Las bibliotecas suelen ser proporcionadas por el fabricante del compilador o por una compañía especiali-zada en fabricar bibliotecas para un propósito específico. Por ejemplo, es frecuente que exista una biblioteca que proporcione operaciones de entrada y salida. Otra biblioteca típi-ca proporciona rutinas para desarrollar programas que usan interfaces gráficas de usuario (GUI por Graphical User Interfaces). Tal biblioteca contendrá rutinas para abrir y dibu-jar ventanas, crear menús y manejar entrada y salida desde el ratón.

La salida del enlazador es un archivo que puede ser ejecutado por la computadora. Este archivo se denomina a menudo ejecutable. Usando una herramienta del sistema ope-rativo denominada cargador, el archivo ejecutable puede cargarse en la memoria de la computadora y ejecutarse. Cuando desarrollan software, los programadores realizan las operaciones de editar un programa, compilarlo, enlazarlo con otros módulos ya compilados y con bibliotecas, y, por último, cargarlo y ejecutarlo repetidamente. Después de ver el comportamiento del programa, los programadores suelen hacer cambio al programa, posiblemente porque no se ejecutó bien o porque funcionó correctamente pero quiere seguir el desarrollo del progra-ma.

Este proceso, conocido como ciclo de edición/compilación/ejecución se muestra en la figura 2.8. La figura 2.8 muestra las funciones básicas de un compilador. El compi-lador actúa como una interfaz entre su programa y la máquina. Una vez que se ha ingresa-do un programa C++ en el sistema usando el editor C++, el compilador traducirá el pro-grama a código de máquina. Su programa C++ se conoce con el nombre de programa fuente y el programa en lenguaje de máquina que genera el compilador se llama programa objeto. Los programas fuente C++ generalmente tienen la extensión .cpp y el programa objeto correspondiente tiene la extensión .obj.

Conforme el programa se traduce, el compilador verifica los errores. Después de que el programa se compila, el compilador muestra una lista de mensajes de error y adver-tencia. Además, cualquier compilador C++ colocará el cursor en el punto en donde se de-tectó un error en el programa. Después de que corrija todos los errores, deberá ejecutar el compilador otra vez hasta que obtenga una compilación con éxito.

Una vez compilado, el programa deberá ser enlazado o vinculado. Como se men-cionó, el paso de vinculación integra su programa con cualquier rutina adicional que se requiera para su adecuada ejecución. Estas rutinas pueden ser rutinas de otros programas de alto nivel, de programas en lenguaje ensamblador o del sistema operativo. El paso de vinculación produce un archivo ejecutable con una extensión de nombre de archivo .exe. Los errores también pueden ocurrir durante el paso de vinculación, especialmente si no están disponibles o no se localizan las rutinas necesarias.

Un programa fuente es aquel que se escribe en lenguaje C++. Por lo general tiene una extensión de archivo .cpp. Un programa objeto es aquel generado por el compilador, que siempre tiene una extensión de archivo .obj.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-27

Por último, cuando el programa entero ha sido compilado y vinculado con éxito, puede ejecutar o correr su programa. Cuando corra su programa, la CPU ejecutará el pro-grama en el lenguaje de máquina generado por el compilador/vinculador.

Debido a que este ciclo se repite muchas veces durante el desarrollo del software,

los traductores han sido construidos para dar asistencia al usuario en este proceso. Estos sistemas se denominan a veces entorno de desarrollo integrado (IDE por Integrated Deve-lopmente Environment ). La idea es integrar juntos el editor, el compilador, el enlazador y el cargador y tener un único conjunto de mandatos para manejarlos.

Existen varios IDE que proporcionan soporte para desarrollar software con C++.

Aunque difieren en su apariencia, todos ofrecen esencialmente las mismas características. Las distintas selecciones de los menús permiten al programador editar código, compilarlo, enlazar los archivos objetos resultantes con otros objetos y con bibliotecas para crear un ejecutable y ejecutar el código resultante. Un IDE puede ser un elemento de ahorro de tiempo importante, porque automatiza mucho las rutinas de desarrollo de software.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-28

Falla

Exito

Figura 2.8. El compilador C++ y el vinculador o enlazador (linker) traducen el programa

fuente a código de máquina que puede ejecutarse en la CPU.

Introducción/Edición del programa

Archivo fuente (.cpp)

Guardado

Compilar Corregir errores

Archivo objeto (.obj)

Vincular/Cargar

Archivo ejecutable (.exe )

Archivos de encabezado

(.h)

Archivos de librería (.l ib)

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-29

COMPUTACIÓN PERSONAL, DISTRIBUIDA Y CLIENTE/SERVIDOR En 1977, Apple Computer popularizó el fenómeno de la computación personal. En

un principio, se trató del sueño de los aficionados. Las computadoras se volvieron lo bas-tante económicas como para que la gente las comprara para su uso personal y para sus ne-gocios. En 1981, IBM, el principal proveedor de computadoras, presentó la Computadora Personal IBM. Literalmente de un día para otro, la computación personal se volvió una realidad en los negocios, la industria y las organizaciones gubernamentales.

Pero estas computadoras eran unidades independientes –la gente efectuaba su traba-

jo en su máquina y luego llevaba y traía discos para compartir la información. Aunque las primeras computadoras personales no eran lo bastante poderosas para manejar tiempo com-partido con varios usuarios, podían enlazarse entre ellas, formando redes, a veces mediante líneas telefónicas y otras a través de LANS (redes de área local) dentro de una organiza-ción. Esto condujo al fenómeno de la computación distribuida, donde el cómputo, en lugar de efectuarse solamente en una instalación central de cómputo, se distribuye a través de redes hacia los sitios donde se realiza el trabajo real de la organización. Las computadoras personales eran lo bastante poderosas para manejar los requerimientos de cómputo de las personas y encargarse de las tareas básicas de comunicación, es decir, de la transferencia electrónica de información.

Actualmente las computadoras personales más poderosas tienen tanta capacidad

como las máquinas de millones de dólares de hace apenas una década. Las máquinas de escritorio más poderosas (llamadas estaciones de trabajo) les proporcionan enormes capa-cidades a los usuarios. La información se comparte con facilidad a través de redes de com-putadoras en las que algunas de ellas, llamadas servidores de archivos, ofrecen un almacén común de programas y datos que las computadoras clientes distribuidas a través de la red pueden utilizar, de ahí el término computación cliente/servidor. C y C++ se han vuelto los lenguajes de programación preferidos para escribir software de sistemas operativos, de re-des de computación y de aplicaciones distribuidas cliente/servidor. En la actualidad, los sistemas operativos más comunes como UNIX, los sistemas basados en Windows de Mi-crosoft y OS de IBM ofrecen los tipos de capacidades descritos en esta sección. ¿POR QUÉ C++?

Probablemente esté de acuerdo en que hay algunos lenguajes de alto nivel popula-res, incluyendo COBOL, Pascal, FORTRAN, BASIC, LISP, Ada y C++, entre otros. Cada uno se desarrolló para un tipo de aplicación en particular. Por ejemplo, COBOL, que signi-fica COmmon Business-Oriented Language, fue desarrollado para la programación de pro-blemas comerciales; FORTRAN que significa FORmula TRANslator, fue desarrollado para la programación científica. LISP se desarrolló para la programación de inteligencia artificial y Pascal fue desarrollado principalmente para la enseñanza de la programación estructurada. C++ fue desarrollado para una implementación eficiente de estructuras de alto nivel que se requieren en la solución de problemas complejos.

C++ fue una evolución de C, el cual surgió de dos lenguajes de programación pre-

vios, BCPL y B. BCPL fue desarrollado en 1976 por Martín R ichards como lenguaje para

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-30

escribir software de sistemas operativos y compiladores. Ken Thompson modeló muchas características en su lenguaje B según sus equivalentes en BCPL y se valió de B para crear las primeras versiones del sistema operativo UNIX en los Laboratorios Bell durante 1970 en una computadora DEC-PDP-7. Tanto BCPL como B eran lenguajes sin tipos de datos –cada elemento de información ocupaba una palabra en memoria y la tarea de tratar cada elemento de datos como un número entero o número real, por citar un ejemplo, recaía en el programador.

El lenguaje C fue una evolución del B llevada a cabo por Dennis R itchie en los La-

boratorios Bell, originalmente se implementó en una computadora DEC-PDP-11 en 1972. C se vale de muchos conceptos básicos de BCPL y de B, añadiendo tipos de datos y otras características. Al principio C se volvió ampliamente conocido como el lenguaje de desa-rrollo del sistema operativo UNIX. Actualmente, la mayoría de los sistemas operativos se escriben en C y/o C++. Durante las últimas dos décadas, C ha quedado disponible en casi todas las computadoras. C es independiente del hardware. Con un diseño cuidadoso, es posible escribir programas en C que pueden ser portables para utilizarse en la mayoría de las computadoras.

De hecho, muchas de las versiones de UNIX en la actualidad se escriben casi por

completo en C. El lenguaje C fue originalmente definido en la obra clásica The C Pro-gramming Language, escrito por Brian Kernigham y Dennis R itchie (1977). El lenguaje C se convirtió en un lenguaje comercial popular que el ANSI (American National Stan-dards Institute) liberó en 1989 como un estándar para C. Un estándar de un lenguaje de programación es un documento que describe los detalles del lenguaje para que los progra-mas se escriban con las especificaciones estándar y sean portátiles entre diversos sistemas.

El lenguaje C++ es una extensión del lenguaje C. Bjarne Stroustrup de Bell Labs

mejoró el lenguaje C a principio de los años ochenta adicionando la capacidad de la pro-gramación orientada a objetos(POO). La programación orientada a objetos le permite desarrollar programas complejos utilizando constructores más simples, llamados objetos, que pueden comunicarse mediante intercambio de mensajes. Los objetos son, en esencia, componentes de software reutilizables que simulan elementos reales.

El objetivo lógico del doctor Stroustrup fue mantener la eficiencia de C proporcio-

nando la fuerza de la POO al lenguaje. El lenguaje resultante ahora se conoce como C++. Podrá entender el origen del doble signo ++, cuando estudie el operador incremento de C++. Debido a que C++ es un mejoramiento de C, cualquier programa en C es también un programa C++, sin embargo, lo opuesto no es cierto.

Como C, C++ tomó por sorpresa a la industria de desarrollo de software debido a

que ambos lenguajes ofrecen todas las ventajas de un lenguaje de alto nivel, pero también proporciona acceso de bajo nivel al hardware y al software del sistema, de la misma manera que el lenguaje ensamblador. Por esta razón, C y C++ suelen mencionarse como lenguajes de nivel medio. De hecho, la mayoría del software comercial que se desarrolla en la actua-lidad se escribe usando C o C++. De hecho se ha liberado ya un estándar ANSI para C++.

La portabilidad es la característica de un lenguaje que permite que los programas escritos para un tipo de computadora puedan utilizarse en otro tipo con pocos o casi ningún cam-bio en el código fuente del programa.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-31

Se han desarrollado muchos otros lenguajes orientados a objetos, incluyendo princ i-palmente a Smalltalk, que fue desarrollado en el Centro de Investigación de Palo Alto (PARC) de Xerox. Smalltalk es un lenguaje orientado a objetos puro –literalmente todo es un objeto. C++ es un lenguaje híbrido –es posible programar en C++ tanto en estilo C como en estilo orientado a objetos o en ambos.

BIBLIOTECA ESTANDAR DE C++ Los programas en C++ constan de partes llamadas clases y funciones. Es posible programar cada parte que necesite para formar un programa C++. Pero la mayoría de los programadores de C++ aprovechan las vastas clases y funciones que existen en la bibliote-ca estándar de C++. Por lo tanto, en realidad hay dos partes en el aprendizaje del mundo de C++. La primera es aprender el lenguaje C++ mismo, y la segunda es conocer cómo se emplean las clases y funciones de la biblioteca estándar de C++. A lo largo de estas leccio-nes estudiaremos muchas de estas clases y funciones. JAVA En mayo de 1995, Sun Microsystems, proveedor líder de estaciones de trabajo UNIX de alta potencia y compañía que siempre ha subrayado la importancia de las redes de cómputo, anunció su nuevo lenguaje de programación: Java. Dicho lenguaje está basado en C y C++ e incorpora características de varios otros lenguajes orientados a objetos. Sun ofrece gratuitamente el software base de Java, la documentación, los tutoriales y las de-mostraciones en el sitio Web www.java-soft.com. Java incluye extensas bibliotecas de cla-ses con componentes para multimedia, conectividad de red, subprocesos múltiples, gráfi-cos, acceso a base de datos, computación distribuida y más. Uno de los atributos más atractivos de Java es su portabilidad. Es posible escribir programas Java en una computadora y ejecutarlos en cualquier otra que soporte Java (la mayoría de los sistemas de cómputo más comunes lo hacen). Esto resulta especialmente atractivo para los desarrolladores de software que previamente han elaborado y dado man-tenimiento a versiones diferentes de su software para cada tipo de sistema de cómputo. Lo anterior es muy costoso y lleva tiempo, lo que ha desalentado a los proveedores indepen-dientes de software para que produzcan software para sistemas distintos a las platafo rmas más comunes, como Microsoft Windows. En la actualidad, las aplicaciones de software en Java pueden ejecutarse en todas las versiones comunes de Windows, así como en muchas otras plataformas importantes, como las variedades más populares de UNIX, Macintosh de apple y OS/2 de IBM.

EXAMEN BREVE 2-3

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-32

INGENIERIA DE SOFTWARE A medida que las computadoras se han vuelto más rápidas, baratas y más potentes, se han convertido en herramientas indispensables para científicos e ingenieros. Quizá lo más importante es que se han vuelto parte de nuestra vida. Sin embargo, tener computado-ras rápidas y baratas es sólo la mitad de la ecuación. Aunque ha habido tremendos avances en el campo del hardware, no han existido avances de la misma magnitud en el diseño de software. Parte del problema es que las expectativas para el software han crecido conside-rablemente. La figura 2.9 muestra lo que se conoce como paradoja de la complejidad: la complejidad del sistema crece a medida que se intenta hacer más fácil su uso. Alta Complejidad total del software Complejidad Sencillez para el usuario Baja

Figura 2.9. A medida que el software es más fácil de usar, se incrementa su complejidad interna. Por ejemplo, los primeros sistemas gráficos necesitaban que los usuarios especifica-ran detalles de cómo debería verse el gráfico, dando información tan variada como los pun-tos finales del gráfico, la escala, cómo y dónde habría que colocar las etiquetas. Esencial-mente, el usuario tenía que hacer la mayoría del trabajo. Actualmente las nuevas herramien-tas para hojas de cálculo contienen sistemas expertos, que analizan los datos y producen un gráfico de forma automática. Tales sistemas de representación automática son mucho más fáciles de usar, pero esta facilidad tiene un precio, el incremento de la complejidad del software. Existen varios factores que contribuyen al aumento de la complejidad del software, entre ellos estan:

Factores que contribuyen al aumento de la complejidad del software •• El tamaño del software. •• La interacción entre componentes .

No es inusual que los programas de aplicación, tales como las hojas de cálculo,

procesadores de texto y programas de dibujo, consten de cientos de miles de líneas de có-digo.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-33

Otro factor que incrementa la complejidad es la interacción entre componentes. Por ejemplo, un procesador de texto puede contener un componente para corrección ortográfi-ca y otro que proporcione servicios de diccionario de sinónimos.

Consideremos el corrector ortográfico. Cuando se detecta un posible error de ortografía, el corrector debe notificarlo al usuario. Por lo tanto, el corrector ortográfico, debe relacionarse con el componente de la aplicación que crea una ventana o caja de diálogo, de forma que el posible error pueda mostrarse en pantalla y que se pueda preguntar al usuario acerca de la acción a ejecutar, si se debe hacer algo. Si el usuario está de acuerdo en que hay un error ortográfico, el corrector puede corregirlo. Para hacer la corrección, el corrector debe interaccionar con el componente del procesador de texto responsable de reemplazar texto en el documento. Obviamente, a medida que el número de componentes crece, el número de interacciones entre componentes crece rápidamente. La Ingeniería de Software es el área de la computación que tiene que ver con las técnicas de construcción de software de gran tamaño. El objetivo de un Ingeniero de Soft-ware es producir un software que sea:

• Fiable. • Comprensible. • Rentable. • Adaptable. • Reusable.

Examinemos cada una de estas propiedades. Un software debería ser fiable, es decir, debería funcionar correctamente y sin fa-llas. Imagine que ha pasado varias horas escribiendo un texto para un curso en un procesa-dor de textos y, cuando lo tiene casi terminado, el procesador de textos falla de forma ines-perada. Se pierde todo su trabajo. Sin duda, estaría muy enfadado y tendría todo el derecho a estarlo. Aunque la falla de un procesador de textos es molesta, la pérdida es insignificante comparada con la pérdida potencial cuando falla un sistema crítico: las vidas humanas. Un sistema de seguridad crítico es aquel en el que una falla podría significar la pérdida de una vida humana. Ejemplos de este tipo de sistemas son los aviones militares y civiles, las má-quinas de terapia radioactiva y los marcapasos. Una falla del software en cualquiera de estos sistemas podría tener consecuencias desastrosas. Una forma de conseguir que el software sea más fiable es hacerlo más fácil de com-prender o comprensible. Es decir, lograr que la operación y el diseño del sistema sean fá-cilmente entendibles por otros profesionales del software. La comprensibilidad es muy im-portante porque los software de gran tamaño son construidos por muchas personas agrupa-das en equipos de trabajo. La construcción del software irá mejor y con menos errores si todo el mundo que trabaja con la aplicación entiende la operatividad global del sistema y sus componentes.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-34

La comprensibilidad es también muy importante debido a la larga vida del software. Un producto de software suele evolucionar con el tiempo, y a menudo Ingenieros del Soft-ware, que no tienen nada que ver con el producto original, son los que se encargan de in-troducir mejoras y arreglar los errores del producto. Este proceso se llama mantenimiento del software. Si la próxima generación de Ingenieros del Software comprende cómo fun-ciona, las modificaciones de los sistemas complejos, aunque difíciles, se podrán llevar a cabo. Por el contrario, es extremadamente difícil hacer modificaciones o correcciones para un sistema pobremente diseñado. A menudo, es más económico reconstruir el sistema des-de el principio. Como medida de la dificultad del mantenimiento del software, los expertos estiman que el 67% del costo de desarrollo del software se dedica al mantenimiento. Este costo puede reducirse cuando el diseño y el funcionamiento del sistema son comprensibles. Por la discusión previa, se puede ver que un software debería ser rentable. Es decir, el costo de desarrollo y mantenimiento del software no debería exceder el beneficio espe-rado por la venta del producto. Muchas compañías de software han ido a la bancarrota por haber subestimado los costos de desarrollo de un sistema. Un componente muy relacionado con el costo es el tiempo que se necesita para diseñar y construir el software. Ser el primero en introducir un producto en el mercado da a una compañía una decidida ventaja sobre sus competidores. Reducir el tiempo para desarrollar un producto puede reducir costos y por lo tanto, incrementar los beneficios. Debido a la larga vida del software, el software debería ser adaptable. A menudo, es difícil predecir qué características y capacidades pueden querer los clientes del software. El mantenimiento adaptativo involucra cambios y añadiduras al software que mejoran la efectividad o competitividad del producto. Diseñando software al que puedan añadir fácil-mente en el futuro nuevas características y capacidades, el Ingeniero del Software puede reducir los costos de mantenimiento global. Por el alto costo de desarrollo, el software debería ser reutilizable. Si se ha de gas-tar muchos millones de dólares en un software, tiene sentido hacer sus componentes flexi-bles de forma que puedan ser reutilizados cuando se desarrolle un nuevo sistema. Esta es-trategia es ciertamente una práctica frecuente en otros negocios. La reutilización puede mejorar la fiabilidad, reducir los costos de desarrollo y mejorar el mantenimiento. PRINCIPIOS DE INGENIERIA DE SOFTWARE Los Ingenieros del Software han desarrollado un cierto número de principios de diseño que ayudan a llevar a cabo los objetivos marcados en la sección anterior gestionando la inevitable complejidad del software de sistemas grandes, estos principios son:

Principios de diseño en Ingeniería de Software

• Abstracción. • Encapsulación o ocultamiento de la información. • Modularidad.

La abstracción es el proceso de extraer las propiedades relevantes de un objeto al tiempo que se ignoran los detalles no esenciales. Las propiedades extraídas definen una

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-35

vista del objeto. Un vendedor de coches podría ver un coche desde el punto de vista de sus características de venta. Propiedades relevantes serían el precio, el color, el equipo opcio-nal y la duración de la garantía. Por otro lado, un mecánico vería el coche desde el punto de vista de los sistemas que necesitan mantenimiento. Para él, propiedades relevantes serían el motor, sistema electrónico de encendido, tipo de aceite, el tamaño del filtro de aceite y el número y tipo de bujías. Las propiedades relevantes de un objeto vienen definidas por la forma en que se usa o manipula el objeto.

Claramente las propiedades de un coche, importantes para un vendedor, son distin-tas de las de un mecánico. Enfocándose sobre las propiedades relevantes e ignorando los detalles irrelevantes, se puede reducir la complejidad de manejo de un objeto. La abstracción es fundamental para gestionar la complejidad del diseño y escritura del software. Por ejemplo, consideremos la tarea de encontrar un archivo en un disco y leer su contenido. Si tuviésemos que manejar todos los detalles de bajo nivel para saber cómo encontrar un archivo concreto en el disco y cómo leer sus contenidos, sería una tarea bas-tante difícil. Deberíamos comprender cómo se almacenan los datos en los discos y todos los mandatos de bajo nivel que controlan las operaciones del manejador de disco. Afortunada-mente, existe un sistema de archivos que proporciona una visión abstracta de la informa-ción en un disco, de forma que se pueden ignorar los detalles de bajo nivel. Se puede acce-der al archivo sin más que proporcionar su nombre. El sistema de archivos maneja los deta-lles de bajo nivel para leer los datos en el disco y devolverlos al programa. La encapsulación u ocultamiento de la información, es el proceso de separar los aspectos de un objeto en externos e internos. Los aspectos externos de un objeto deben ser visibles o conocidos, para otros objetos del sistema. Los aspectos internos son detalles que no deberían afectar a otras partes del sistema. Ocultar ciertos aspectos de un objeto permite modificarlos sin afectar a otras partes del sistema. Por ejemplo, los aspectos externos del radio de un coche son los controles y los tipos de conexiones necesarios para conectar el radio al sistema eléctrico, los altavoces y la antena. Los aspectos internos son los detalles del funcionamiento del radio. Para instalar y usar el radio en un coche, no se necesita cono-cer nada de ingeniería eléctrica. Esencialmente, el radio puede verse como una caja negra con botones y cables. Un gran beneficio del ocultamiento de información es que ayuda a hacer cambios en sistemas complejos. Se puede reemplazar la radio de un coche por un reproductor de CD sin afectar a otros componentes del vehículo. Debido a que el manejo de la radio ha sido en-capsulado y su vista externa está definida mediante controles y conectores, se puede quitar el radio viejo, insertar el nuevo y conectarlo. Cuando se aplica al diseño de sistemas de software, la encapsulación permite que se pueda cambiar el comportamiento interno de un componente software sin afectar a otros aspectos del sistema. Por ejemplo, si el principio de encapsulación ha sido aplicado correc-tamente a un sistema automático de correo de voz, debería ser capaz de cambiar el compo-nente que se encarga de almacenar los mensajes sin afectar a otras partes del sistema. Se podría incrementar el número de mensajes que un usuario puede almacenar. Si el sistema

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-36

de almacenamiento de mensajes ha sido debidamente ocultado y aislado, este cambio no debería afectar a la forma en que los usuarios acceden al sistema y dictan o leen mensajes. La modularidad se refiere al proceso de dividir un objeto en piezas más pequeñas, o módulos, para que algún objetivo sea más fácil de conseguir. Por ejemplo, se podría di-vidir un sistema complejo en componentes, de forma que cada componente pueda ser pro-bado de forma individual. Cuando se monta un automóvil, sus distintos componentes, tales como el motor, la transmisión y el radio, han sido ya probados individualmente. La modu-laridad reduce el tiempo para probar el coche y la probabilidad de que un coche sea monta-do con un defecto. De forma similar, se podría estructurar un objeto para que sea fácil re-utilizar sus componentes. La mayoría de los sistemas complejos son modulares. Están construidos combinan-do componentes o paquetes, de funcionamiento más sencillo. Una adecuada modulariza-ción de un sistema complejo también ayuda a manejar su complejidad. Dividir las cosas en piezas más pequeñas y más sencillas de entender hace que un sistema grande sea más sen-cillo de comprender. Por ejemplo, se puede dividir un automóvil en subsistemas. Los sub-sistemas de un automóvil incluyen el sistema de refrigeración (radiador, bomba de agua, termostato, etc.); el sistema de arranque (batería, arranque, bujías, etc.) y el sistema de expulsión de gases (catalizador, silenciador, etc.). Pensar en un automóvil en términos de grupos de abstracciones relacionadas permite comprender más rápidamente la estructura global del coche y su funcionamiento. Una clasificación de objetos basada en alguna relación entre ellos es una jerarquía. Las jerarquías también ayudan a comprender sistemas y organizaciones complejas. La fi-gura 2.10 incluye un diagrama de organización de una compañía típica. El diagrama mues-tra la jerarquía de empleados basándose en la relación de quién informa a quién. La jerar-quía de la compañía ayuda a los empleados a comprender la estructura de su compañía y su relación dentro de ella.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-37

Figura 2.10. Diagrama de la organización de una compañía

Una forma de ordenar abstracciones similares, en sistemas complejos compuestos de abstracciones, es ir del concepto más general al menos general. Los cient íficos han usado esta técnica desde hace mucho tiempo para identificar y clasificar especies del reino animal y vegetal. Un orden jerárquico basado en las relaciones de la naturaleza se denomi-na taxonomía. Tal jerarquía hace que las abstracciones sean más fáciles de entender por-que expone la relación entre características y comportamientos comunes. DISEÑO ORIENTADO A OBJETOS Para sustentar los principios descritos anteriormente, se han desarrollado distintas metodologías de diseño y programación. Recientemente, un enfoque : el diseño y la pro-gramación orientada a objetos, se ha mostrado particularmente prometedor para ayudar a los desarrolladores de software a lograr los objetivos de fiabilidad, rendimiento, adaptabi-lidad, comprensibilidad y reutilidad. El diseño de software orientado a objetos elabora el software como un modelo muy próximo a la forma en que pensamos e interactuamos en el mundo real. A temprana edad, aprendemos acerca de los objetos y de cómo se manipulan. Los bebés, por ejemplo, apren-den que si mueven un sonajero hará ruido. A medida que desarrollan sus capacidades cog-noscitivas, son conscientes de que los objetos tienen propiedades y empiezan a pensar en

Director General

Director de ven-tas

Tesorero Director de in-vestigación

Director de ope-raciones

Gerente de ven-tas zona Norte

Gerente de ven-tas zona Sur

Gerente de ven-tas zona Este

Gerente de ven-tas zona Oeste

Jefe científico Gerente de pa-tentes

Desarrollo de lenguajes de

programación

Desarrollo del sistema operativo

Desarrollo de aplicaciones

Investigación de patentes

Aplicación de patentes

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-38

ellos de forma abstracta. El bebé pronto se dará cuenta de que hacer ruido es una capacidad de todos los sonajeros. Para ilustrar como la visión del mundo, como un conjunto de objetos, facilita el ma-nejo de su complejidad, consideremos una actividad que muchos de nosotros hacemos: ver la televisión. Mirando la televis ión recuerda que su programa favorito empezará pronto en un canal distinto. Toma el control, oprime el botón y cambia al canal deseado. Analicemos esta actividad. Primero, tomó el control, que es un objeto físico. Dicho objeto tiene propiedades, tales como peso y tamaño, y además puede hacer algo: enviar mensajes a la televisión. No está claro de cómo lo hace o cómo están codificados los men-sajes, pero no es necesario saberlo. Sólo necesita saber cómo se oprimen los botones ade-cuados. Los botones son la interfaz del control. Si se conoce la interfaz de un objeto, se puede usar dicho objeto para hacer algo, aunque no se sepa cómo funciona. Cuando opri-mió los botones adecuados hizo que el control enviase algunos mensajes al televisor. El televisor es también un objeto físico con varias propiedades. Al recibir el mensaje del con-trol, el televisor cambió al canal deseado. Estas interacciones son tan rutinarias que es fácil no darse cuenta de lo sorprendente de esta actividad. Ha sido capaz de hacer que dos objetos interaccionen y ejecuten una acti-vidad compleja sin comprender el funcionamiento interno de ninguno de ellos. Fue capaz de hacerlo así porque disponía de las abstracciones apropiadas para ambos objetos. Ade-más, su abstracción mental del control implica que puede ir a casa de un amigo y ser capaz de usar su control y su televisor, incluso aunque tengan una marca de televisor distinta. Objetos similares muestran un comportamiento similar. Esta forma de afrontar nuestro mundo puede ser aplicada al diseño y a la programa-ción de software. Un paso clave en el desarrollo de un sistema complejo usando diseño orientado a objetos es determinar los objetos que constituyen el sistema. Creando cuidado-samente abstracciones de estos objetos y separando su implementación interna de su com-portamiento externo, se puede manejar la complejidad de un sistema de software de gran tamaño. Por lo tanto, ¿a qué nos referimos exactamente cuando decimos objeto? Ciertamen-te, las cosas físicas son objetos. Un balón, un archivero, una agenda, un árbol y una com-putadora son todos objetos. ¿Qué pasa con cosas como un número, una palabra, una cuen-ta bancaria o una nota musical? No son objetos físicos, pero son objetos porque tienen propiedades, o atributos, y podemos llevar a cabo acciones sobre ellos. Un número tiene un valor, y se pueden sumar dos números. Una palabra tiene longitud y, si estamos hablando de un procesador de textos, se puede borrar o insertar en un documento. Una nota musical tiene tono, duración y volumen. Casi siempre, algo es un objeto si tiene:

• Un nombre. • Propiedades asociadas al mismo. • Mensajes que puede entender.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-39

Cuando un objeto recibe un mensaje, se produce la ejecución de una acción o cam-bia una propiedad del objeto como consecuencia de dicho mensaje, En el ejemplo del con-trol, cuando el televisor recibe el mensaje cambio de canal desde el control, cambia de ca-nal. Si vamos a adoptar un enfoque orientado a objetos para desarrollar software, tiene sentido usar un lenguaje de programación que sustente esta forma de pensar y permita im-plementar soluciones en términos de objetos. Un lenguaje que tiene esas características es un lenguaje de programación orientada a objetos. Observe que se ha tenido cuidado de incluir la frase implementar un diseño orientado a objetos. Ya que se puede usar un len-guaje orientado a objetos, pero no pensar en términos de objetos.

Algunos lenguajes orientados a objetos populares actualmente son Smalltalk y C++. Las características que incluyen para manejar objetos son, en su mayor parte, idénti-cas. Difieren principalmente en la terminología usada para referirse a los objetos y en la sintaxis del lenguaje.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-40

LO QUE NECESITA SABER Antes de continuar con la siguiente lección, asegúrese de haber comprendido los siguientes conceptos : q Las computadoras son dispositivos capaces de efectuar cálculos y tomar decisiones lógicas a velocidades

millones y hasta miles de millones de veces más rápidas de lo que pueden hacerlo los seres humanos. q La velocidad de una computadora se define habitualmente en ciclos por segundo. Las computadoras más

frecuentes operan entre 700 Mhz a 2.2 Ghz. q Las computadoras usan el sistema numérico binario. A un dígito binario se le denomina bit. q La unidad básica de almacenamiento en una computadora es un byte u 8 bits. q Los números negativos se representan habitualmente en complemento a dos. Con esta representación, un

número de n bits puede representar valores desde –2n – 1 hasta 2n – 1- 1.

q Las computadoras procesan datos controlados por programas de cómputo.

q Los distintos dispositivos (como el teclado, la pantalla, los discos, la memoria y las unidades de proce-samiento) de que está compuesto un sistema de cómputo se conocen como hardware.

q Los programas que se ejecutan en una computadora se conocen como software.

q La unidad de entrada es la sección receptora de la computadora. Actualmente, la mayor parte de la in-formación se introduce a la computadora a través de teclados como los de las máquinas de escribir.

q La unidad de salida es la sección de embarques de la computadora. La mayor parte de la salida de infor-mación de las computadoras actuales se presenta en pantalla o se imprime en papel.

q La unidad de memoria es la sección de almacén de la computadora y con frecuencia se llama memoria primaria o, simplemente, memoria.

q El tamaño de la memoria de acceso aleatorio de una computadora, RAM, se mide en megabytes (MB). El rango de memoria de las PC actuales varía de 128 a 640 MB.

q La unidad central de proceso, o CPU, es el cerebro de la computadora. Es ahí donde se ejecutan las ope-raciones aritméticas y lógicas.

q La ALU (unidad aritmética y lógica) efectúa cálculos y toma decisiones.

q Los programas y datos que no están utilizando se colocan en dispositivos de almacenamiento secundario (como discos) hasta que vuelven a ser necesarios.

q La capacidad de los discos duros en las computadoras personales actuales varía desde 4 hasta 120 giga-bytes .

q En el procesamiento por lotes monousuario, la computadora ejecuta un solo programa todo el tiempo, mientras procesa la información en grupos o lotes.

q Los sistemas operativos son software que simplifican el uso de las computadoras y ayudan a obtener su mejor desempeño.

q Un sistema operativo es el software de sis tema que controla y gestiona los recursos de la comp utadora, tales como la memoria, los dispositivos de entrada y salida y la CPU.

q Los sistemas operativos de multiprogramación permiten la operación “simultánea” de muchas tareas en la computadora. La computadora comparte sus recursos entre dichas tareas.

q El tiempo compartido es un caso especial de multiprogramación en el que los usuarios accesan la compu-tadora a través de terminales. Los programas de los usuarios parecen estar ejecutándose simultáneamente.

q Con la computación distribuida, el cómputo de una organización se reparte a través de redes a los sitios donde se efectúa el trabajo real de la organización.

q Los servidores almacenan programas y datos que pueden compartirse con computadoras cliente distri-buidas a través de una red. De ahí el término cliente/servidor.

q Un lenguaje de programación es un lenguaje que da instrucciones u órdenes a una computadora.

q Las computadoras sólo pueden entender directamente su propio lenguaje de máquina particular.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-41

q Los lenguajes de máquina consisten de cadenas de números (unos y ceros) que ordenan a la computadora realizar sus operaciones más elementales, una a la vez. Los lenguajes de máquina son dependientes del equipo.

q Abreviaturas en el idioma inglés son la base de los lenguajes ensambladores. Los ensambladores tradu-cen los programas que están en lenguaje ensamblador a lenguaje de máquina.

q Un compilador traduce un lenguaje de programación a lenguaje de máquina. Un lenguaje de máquina esta formado por operaciones primitivas que un computador puede ejecutar directamente.

q Los compiladores traducen programas escritos en lenguaje de alto nivel a lenguaje de máquina. Los len-guajes de alto nivel contienen palabras en inglés y notaciones matemáticas convencionales.

q Los programas intérpretes ejecutan directamente programas en lenguaje de alto nivel, sin la necesidad de compilarlos en lenguaje de máquina.

q Aunque los programas compilados se ejecutan más rápido que los programas interpretados, los intérpre-tes son populares en los entornos de desarrollo de programas, donde con frecuencia se recompilan los programas, a medida que se añaden características nuevas y se corrigen errores. Una vez desarrollado un programa, puede producirse una versión compilada que se ejecutará con mayor eficiencia.

q Es posible escribir programas en C y C++ que sean portables a la mayoría de las computadoras.

q FORTRAN (Traductor de Fórmulas) sirve para aplicaciones matemáticas.

q COBOL (Lenguaje Común Orientado a Negocios) se emplea principalmente para aplicaciones comercia-les que requieren manipular grandes cantidades de datos de manera precisa y eficiente.

q La programación estructurada es un enfoque disciplinado para escribir programas más claros que los programas no estructurados, así como más fáciles de probar, depurar y modificar.

q Pascal se diseñó para enseñar programación estructurada en entornos académicos.

q Ada se desarrolló bajo el patrocinio del Departamento de Defensa de los Estados Unidos, tomando como base Pascal.

q El entorno multitareas permite que el programador especifique actividades paralelas. q Todos los sistemas C++ consisten de tres partes: el entorno, el lenguaje y las bibliotecas estándar. Las

funciones de biblioteca no son parte del lenguaje C++ mismo; estas funciones efectúan operaciones como los cálculos matemáticos más comunes.

q Los programas en C++ por lo general pasan por seis fases para poder ser ejecutados: edición, preproce-samiento, compilación, enlace, carga y ejecución.

q El programador escribe los programas en un editor y hace las correcciones necesarias. Los nombres de archivos de C++ en los sistemas Borland terminan con la extensión .CPP.

q El compilador traduce un programa C++ a código de lenguaje de máquina (o código objeto).

q El preprocesador obedece directivas que, generalmente, indican archivos que se incluirán en el archivo a compilar y símbolos especiales que deben ser remplazados con código de programa.

q El enlazador vincula el código objeto con el código de las funciones faltantes, produciendo una imagen ejecutable (sin partes faltantes). Si el programa se compila y enlaza correctamente, se genera un archivo que es la imagen ejecutable del programa.

q El cargador toma la imagen ejecutable del disco y la transfiere a la memoria.

q La computadora, controlada por su CPU, ejecuta el programa una instrucción a la vez.

q Los errores como la división entre cero suceden durante la ejecución del programa, por lo que se llaman errores en tiempo de ejecución.

q La división entre cero generalmente es un error fatal, es decir, un error que provoca la terminación inme-diata del programa, sin haber realizado correctamente su tarea. Los errores no fatales permiten que los programas se ejecuten hasta su terminación, produciendo con frecuencia resultados incorrectos.

q Hay muchas variaciones entre las distintas implementaciones de C++ y las distintas computadoras que hacen que la portabilidad sea una meta difícil de lograr.

q El software de aplicación es software que resuelve un problema particular o proporciona un servicio en particular.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-42

q El software de sistemas es software que sustenta el desarrollo y ejecución de otros programas.

q La información se almacena en los discos usando una jerarquía de archivos para poder ser encontrada y recuperada rápidamente.

q Un algoritmo es una descripción detallada, paso a paso, de cómo realizar alguna tarea.

q El objetivo de un ingeniero del software es producir software que sea fiable, comprensible, rentable, adaptable y reutilizable.

q La abstracción es el proceso de aislar los aspectos esenciales inherentes a un objeto al tiempo que se ignoran los detalles irrelevantes o no esenciales.

q La encapsulación u ocultamiento de la información es el proceso de separar los aspectos externos de un objeto, que pueden ser vistos o accedidos por otros objetos, de los detalles de implementación interna, que deberían estar ocultos para otros objetos.

q La modularización es el proceso de dividir un objeto en piezas más pequeñas de forma tal que cada obje-to más pequeño se pueda tratar de forma individual.

q Una herencia de jerarquía es una forma de organizar un conjunto de abstracciones desde lo más general a lo particular.

q El diseño y programación orientado a objetos es un paradigma de la programación según el cual un sis-tema software se modela como un conjunto de objetos que interaccionan entre sí.

q En C++, una abstracción se construye creando una clase. Una clase encapsula las propiedades y compor-tamiento de un objeto.

q Los miembros de datos de una clase son las propiedades o atributos de la clase.

q Los miembros de tipo función de una clase son el comportamiento de la clase.

q Una clase base, o superclase, es aquella de la que se pueden derivar otras clases más especializadas.

q Una clase derivada o subclase, hereda propiedades de una clase base.

q El polimorfismo es la capacidad de asumir diferentes formas. En un lenguaje orientado a objetos, se proporciona el polimorfismo permitiendo que un mensaje, o miembro de tipo función, signifique cosas distintas dependiendo del tipo de objeto que recibe el mensaje.

q La instanciación es el proceso de crear un objeto concreto a partir de la abstracción clase.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-43

PREGUNTAS Y PROBLEMAS PREGUNTAS 1. Suponga un microprocesador con una frecuencia de reloj de 120 Mhz. Si una suma se puede hacer en un

ciclo de reloj, ¿Cuántos nanosegundos son necesarios para hacer una suma? 2. Explique la diferencia entre RAM y ROM. 3. Suponga que un computador tiene una capacidad de memoria de 16 Megabytes . ¿cuántos bits se necesi-

tan para representar una dirección? 4. Una computadora tiene 640 Kbytes de memoria. ¿Cuántos bytes de memoria tiene exactamente? 5. ¿Cuántos bytes de información contiene un CD-ROM típico? 6. Averigüe todo lo que pueda de las computadoras que hay en el laboratorio de su escuela. Como mínimo

debería obtener la siguiente información:

a) Nombre de la compañía que manufacturó los microprocesadores de la máquina. b) La velocidad del reloj del procesador. c) La cantidad de RAM en la máquina. d) El tamaño del disco duro. e) La resolución del monitor gráfico. f) El nombre y la versión del sistema operativo.

7. Dé el valor decimal de los siguientes números:

a) 010012 b) 03748 c) 01101002 d) 40335 e) A32E16 f) 23458 g) 12114 h) 01111112 i ) 02F3D16 j) 010100100112 k) 17768 l ) ABBA16 m) 4ACDC16

8. Convierta los números siguientes a la base especificada:

a) 7778 a hexadecimal. b) AD1116 a binario. c) 010010112 a octal. d) 111116 a octal. e) 010011112 a hexadecimal. f) 010011112 a octal. g) 37718 a binario . h) 435616 a octal.

9. Dé el valor decimal de los números de 8 bits en complemento a dos siguientes:

a) 101011002 b) 100000012 c) 110000002 d) 101001012 e) 111111112 f) 100000002

10. Calcule las siguientes sumas y productos. Las respuestas deberían darse en binario.

a) 01000110 + 0001010 b) 00111011 + 0101100 c) 00000111 + 0000001 d) 00100111 + 0001111 e) 00010101 x 0001000

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-44

f) 00001000 x 0000011 g) 00001001 x 0000101 h) 00001011 x 0000100

11. Llene los siguientes espacios en blanco:

a. La compañía que popularizó la computación personal fue ___________________. b. La computadora que hizo que la computación personal entrara en los negocios y la industria fue la ________________. c. Las computadoras procesan información bajo el control de conjunto de instrucciones llamadas ______________ de cómputo. d. Las seis unidades clave de la computadora son ___________, _______________, ______________, ______________,

_______________, _________________. e. Las tres clases de lenguajes estudiados en esta lección son: _____________, _______________, _______________. f. Los programas que traducen programas de lenguaje de alto nivel a lenguaje de máquina se llaman ________________. g. C es ampliamente conocido por ser el lenguaje de desarrollo del sistema operativo ______________. h. Wirth desarrolló el lenguaje __________ para enseñar programación estructurada en las universidades. i . El Departamento de Defensa de Estados Unidos desarrolló el lenguaje Ada con una capacidad llamada ___________, la

cual permite que los programadores especifiquen que varias actividades suceden en paralelo.

12. Llene los espacios en blanco de las siguientes oraciones.

a. ¿Qué unidad lógica recibe la información de fuera de la computadora para emplearla dentro de ésta? __________. b. El proceso de indicarle a la computadora que resuelva problemas específicos se llama ____________. c. ¿Qué tipo de lenguaje de cómputo se vale de abreviaturas tipo inglés para indicar instrucciones de lenguaje de máquina?

_______________. d. ¿Qué unidad lógica envía a distintos dispositivos la información que ya ha sido procesada por la computadora, de modo que

puede utilizarse fuera de la máquina? __________________. e. ¿Qué unidad lógica de la computadora retiene información? ________________. f. ¿Qué unidad lógica de la computadora realiza cálculos? g. ¿Qué unidad lógica de la computadora toma decisiones lógicas? __________________. h. El nivel de lenguaje de cómputo más adecuado para que el programador escriba programas rápida y fácilmente es

________________. i . El único lenguaje que puede entender de manera directa la computadora se llama ____________ de la computadora. j. ¿Qué unidad lógica de la computadora coordina las actividades de las demás unidades lógicas?

13. Clasifique como hardware o software los siguientes elementos:

a. CPU b. Compilador de C++ c. ALU d. Preprocesador de C++ e. Unidad de entrada f. Programa editor

14. Mencione los tres niveles de software y describa las características generales de cada uno.

15. ¿Por qué necesitaría escribir un programa en un lenguaje independiente de la máquina, en vez de en uno dependiente de la máquina? ¿Por qué sería más adecuado un lenguaje dependiente de la máquina para es-cribir ciertos tipos de programas?

16. Explique la diferencia operacional entre un compilador y un intérprete.

17. Un compilador traduce un programa fuente a un programa _______________________.

18. Cierto o falso: un programa C también es un programa C++.

19. Llene los espacios en blanco de las siguientes oraciones referentes al entorno de C++.

a. Los programas C++ normalmente se introducen en la computador por medio de un programa ______________. b. En los sistemas C++, un programa ___________ se ejecuta antes de iniciar la fase de traducción del compilador. c. El programa ___________ combina la salida del compilador con varias funciones de biblioteca produciendo una imagen

ejecutable. d. El programa __________ transfiere la imagen ejecutable de un programa C++ desde el disco a la memoria.

20. Explique qué pasa y la acción que se realizará cuando su compilador C++ encuentre un error en su pro-grama

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-45

21. ¿Cuál es el propósito de un vinculador?

22. Explique por qué C y C++ se conocen como lenguajes de nivel medio.

23. ¿Cuál es la diferencia principal entre los lenguajes C y C++?

24. El archivo generado por su compilador C++ tiene una extensión de _______________.

25. El archivo que genera su vinculador C++ tiene una extensión de __________________.

27. Considere un cajero automático en un banco. ¿Cuáles son algunas de las propiedades relevantes del caje-ro para las siguientes persona?

a) Un usuario. b) Una persona de mantenimiento. c) Un empleado del banco. d) El presidente del banco.

28. Dé un ejemplo de encapsulación en el funcionamiento de un contestador automático telefónico.

29. La mayor parte de los sistemas son modulares. Nombre algunos de los componentes/módulos de los siguientes sistemas:

a) Equipo de música. b) Televisor. c) Lavadora . d) Video. e) Bicicleta.

30. La mayoría de las organizaciones tienen una estructura jerárquica. Elija una organización a la que perte-nezca y dibuje un diagrama que ilustre su jerarquía.

31. ¿Son los siguientes elementos objetos? Justifique su respuesta.

a) Belleza. b) Tiempo. c) Celos. d) Arbol. e) Bosque.

32. Casi todos los dispositivos electrónicos han sido diseñados siguiendo el principio de modularidad, que hace que los dispositivos sean más fáciles e fabricar y reparar. Nombre los principales componentes de los siguientes dispositivos:

a) Televisor. b) Video. c) Horno de microondas. d) Equipo de música. e) Radio. f) Teléfono .

33. ¿Por qué se presta tanta atención hoy día a la programación orientada a objetos en general y a C++ en particular?

34. Indique los términos correctos de lenguaje de objetos en los espacios en blanco de las siguientes oracio-nes:

a. Los seres humanos pueden ver la pantalla de televisión y observar puntos de color o pueden retroceder y ver a tres personas sentadas en una mesa de conferencias. Este es un ejemplo de cierta capacidad llamada______________________.

b. Si vemos un automóvil como objeto, el hecho de que sea un convertible es un atributo/comportamiento (seleccione uno) ___________ del automóvil.

c. El hecho de que un automóvil pueda acelerar y desacelerar, girar a la izquierda y a la derecha y avanzar y retroceder indica que se trata de un ejemplo de ___________ de un objeto automóvil.

d. Cuando un tipo de clase nuevo hereda características de otros tipos de clases existentes, se llama herencia _________________.

e. Los objetos se comunican enviando _____________entre ellos.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-46

f. Los objetos se comunican entre ellos a través de ___________ bien definidas. g. Generalmente a los objetos no se les permite saber cómo están implementados otros objetos; esta propiedad se llama

_________________. h. Los ______________ de la especificación de un sistema ayudan al programador de C++ a determinar las clases que se

necesitarán para implementar el sistema. i . Los componentes de datos de una clase se llaman __________ y los componentes de función de una clase se llaman

____________. j. A un caso de un tipo definido por el usuario se le llama __________________.

35. Dé una respuesta breve para cada una de las siguientes preguntas de pensando en objetos:

a. ¿Por qué decimos que primero debemos abarcar la programación estructurada a detalle antes de proceder con el estudio profundo de la programación orientada a objetos?

b. ¿Cuáles son los pasos típicos (mencionados en el texto) del proceso de diseño orientado a objetos? c. ¿Cómo presentan los seres humanos la herencia múltiple? d. ¿Qué clases de mensajes se envía la gente? e. Los objetos se envían mensajes a través de interfaces bien definidas. ¿Qué interfaces presenta un radio de automóvil (objeto)

a su usuario (un objeto personal)?

36. Posiblemente esté utilizando en su muñeca uno de los tipos más comunes de objetos que hay en el mu n-do: un reloj. Explique cómo se aplican los siguientes términos y conceptos a la noción de reloj: objeto, atributos, comportamientos, clase, herencia (considere, por ejemplo, un reloj con alarma), abstracción, simulación, mensajes, encapsulamiento, interfaz, ocultamiento de información, datos miembro y funcio-nes miembro.

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-47

EXAMEN BREVE 2-1 1. Dé el decimal de los siguientes números:

a. 010012 b. 03748 c. 40335 d. A32E16

2. Convierta los siguientes números a la base especificada

a. 7778 a hexadecimal b. AD1116 a binario c. 010010112 a octal

3. Dé el valor decimal de los números de 8 bits en complemento a dos siguientes:

a. 101011002 4. Calcule las siguientes sumas y productos . Las respuestas deberán darse en binario.

a. 010001102 + 00010102 b. 000101012 x 00010002

EXAMEN BREVE 2-2 1. Suponga un microprocesador con una frecuencia de reloj de 120 Mhz. Si una suma se pue-

de hacer en un ciclo de reloj ¿Cuántos nanosegundos son necesarios para hacer una suma?

2. Explique que es el hardware y que es el software. 3. Suponga que una computadora tiene una capacidad de memoria de 16 megabytes ¿Cuán-

tos bits se necesitan para representar una dirección? 4. Una computadora tiene 640 Kbytes de memoria ¿Cuántos bytes de memoria tiene exac-

tamente?.

EXAMEN BREVE 2-3 1. ¿Por qué se dice que C++ es un lenguaje de nivel medio? 2. Mencione los pasos que deben realizarse para traducir un programa de código fuente C++ a un

programa ejecutable.

3. ¿Qué tipo de archivo produce el paso de compilación? 4. ¿Qué tipo de archivo produce el paso de vinculación? 5. ¿Cuál es el propósito del paso de vinculación?

6. ¿ Cuál es la diferencia principal entre el lenguaje C y el lenguaje C++?

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-48

RESPUESTAS EXAMEN BREVE 2-1 1. 120 Mhz = 120 x 106 hz

1 ciclo del reloj = 1/120 x 10 -6 segundos = 8.33 x 10-3 x 10-6 segundos = 8.33 nanosegundos Por lo tanto el tiempo para hacer una operación de suma es = 8.33 nanosegundos.

2. Los dispositivos (consola, teclado, pantalla, ratón, discos , memoria y unidades de procesa-miento) que forman un sistema de cómputo se conocen con el nombre de hardware. Los programas que se ejecutan en la computadora se llaman software.

3. 16 Mbytes = 16 x 220 = 24

x 220 = 224bytes, por lo tanto, se requieren 24 bits. 4. 640 Kbytes = 640 x 1024 bytes = 655360 bytes.

RESPUESTAS EXAMEN BREVE 2-2 1. 010012 = 1 x 23 x 1 x 20 = 9

03748 = 3x 82+ 7 x 81+ 4 x 80 = 192 + 56 + 4 = 252 40335 = 4 x 53 + 3 x 51 + 3 x 50 = 500 + 15 + 3 = 518 A32E16 = A x 163 + 3 x 162 + 2 x 161 + E x 160 = 40960 + 768 + 32 + 14 = 41774

2. 7778 = 111 111 1112 = (1) (1111) (1111) 2 = 1FF16 AD1116 = 1010 1101 0001 00012 010010112 =(1) (001) (011) = 1138

3. 101011002 = 01010011 en complementos a 1 = 01010011 + 1 = 01010100 complemento a dos = -84

4. Calcule las siguientes sumas y productos. Las respuestas deberán darse en binario.

a. 010001102 + 00010102 = 10100002 b. 000101012 x 00010002 = 101010002

RESPUESTAS EXAMEN BREVE 2-3 1. C++ es conocido como un lenguaje de nivel medio porque proporciona un acceso de nivel

inferior al hardware y software del sistema, mientras que cuenta con las ventajas de un le n-guaje de alto nivel.

2. Los pasos que se deben seguir para traducir un programa de código fuente en C++ a un pro-grama ejecutable son los siguientes:

•• Escribir el código fuente.

•• Compilar el código fuente y los archivos de encabezado para obtener el código objeto .

•• Vincular o ligar el código objeto a otras rutinas necesarias para formar un programa ejecutable.

3. Mediante el paso de compilación se produce un archivo o programa objeto (.obj) 4. Mediante el paso de vinculación se produce un archivo o programa ejecutable (.exe)

MIGUEL Á. TOLEDO MARTÍNEZ

FUNDAMENTOS – LECCIÓN 2 2-49

5. El propósito del paso de vinculación es integrar al programa con alguna rutina adicional necesaria para la correcta ejecución del programa.

6. La primera diferencia entre el lenguaje C y el lenguaje C++ es que este último permite una programación orientada a objetos mientras que en C no es posible.