1 ¿Qué es el software? Es el conjunto de instrucciones detalladas que controlan la operación de un sistema de cómputo. Sus funciones son: 1. Administrar los recursos de cómputo de la institución 2. Proporcionar las herramientas a los seres humanos para que aprovechen estos recursos 3. Actuar como intermediario entre las instituciones y la información almacenada Programas de software Un programa de software es un conjunto de argumentos o instrucciones para la computadora. El proceso de escribir o codificar programas se denomina programación y a las personas que se especializan en esta tareas se las llama programadores. Concepto de programa almacenado: la idea de que el programa no puede ser ejecutado a menos que se almacene en la memoria primaria de la computadora junto con los datos requeridos. Principales tipos de software Existen diferentes tipos y clasificaciones de software a continuación se describe una de ellas: 1. Software del sistema: es un conjunto de programas generalizados que administran los recursos de la computadora, como la unidad central de proceso, los dispositivos, etc.. los programadores que escriben el software del sistema se llaman programadores de sistemas. Incluye traducción de lenguajes y utilitarios (o utilerías). 2. Software de aplicaciones: se refiere a los programas que son escritos para o por usuarios para aplicar la computadora a una tarea específica. Los programadores que escriben el software de aplicaciones son llamados programadores de aplicaciones. 3. Software de red: En el software de red se incluyen programas relacionados con la interconexión de equipos informáticos, es decir, programas necesarios para que las redes de computadoras funcionen. Entre otras cosas, los programas de red hacen posible la comunicación entre las computadoras, permiten compartir recursos (software y hardware) y ayudan a controlar la seguridad de dichos recursos. 4. Software del lenguaje: Es el software utilizado para escribir los programas en cualquiera de los diversos lenguajes de programación. Lenguaje de programación, en informática, es cualquier lenguaje artificial que puede utilizarse para definir una secuencia de instrucciones para su procesamiento por un ordenador o computadora. Es complicado definir qué es y qué no es un lenguaje de programación. Se asume generalmente que la traducción de las instrucciones a un código que comprende la computadora debe ser completamente sistemática. Normalmente es la computadora la que realiza la traducción. Vistos a muy bajo nivel, los microprocesadores procesan exclusivamente señales electrónicas binarias. Dar una instrucción a un microprocesador supone en realidad enviar series de 1 y 0 espaciadas en el tiempo de una forma determinada. Esta secuencia de señales se denomina código máquina. El código representa normalmente datos y números e instrucciones para manipularlos. Un modo más fácil de comprender el código máquina es dando a cada instrucción un mnemónico, como por ejemplo STORE, ADD o JUMP. Esta abstracción da como resultado el ensamblador, un lenguaje de muy bajo nivel que es específico de cada microprocesador. 2 Los lenguajes de bajo nivel permiten crear programas muy rápidos, pero que son a menudo difíciles de aprender. Más importante es el hecho de que los programas escritos en un bajo nivel son prácticamente específicos para cada procesador. Si se quiere ejecutar el programa en otra máquina con otra tecnología, será necesario reescribir el programa desde el principio. El software del sistema Coordina las distintas partes del sistema de cómputo y sirve como mediación entre el software de aplicación y el hardware de la computadora. El software del sistema que administra y controla las actividades y recursos de la computadora se llama el sistema operativo. Funciones del sistema operativo Una manera de ver al sistema operativo es como el administrador en jefe del sistema. El software del sistema operativo decide qué recursos de la computadora habrán de ser usados, cuáles programas se ejecutarán y el orden en el que las actividades han de ocurrir. Un sistema operativo realiza tres funciones: 1. define y asigna los recursos del sistema 2. programa el uso de recursos y trabajos de cómputo 3. hace el seguimiento de las actividades del sistema de cómputo 1. Asignación y designación: el SO asigna recursos a los trabajos de aplicaciones que se encuentran en la cola de ejecución. Proporciona ubicaciones en la memoria primaria para los datos y programas y controla los dispositivos de entrada y salida. 2. Programación: el SO decide cuándo programar los trabajos que se presentan y cuándo coordinar la programación en distintas áreas de la computadora, de manera que partes diferentes de los distintos trabajos puedan ser procesadas al mismo tiempo. Por ej: mientras que un programa está en ejecución, el SO está programando el uso de los dispositivos de entrada y salida.. No todos los trabajos son llevados a cabo en el orden en que se presentan; el SO debe programarlos de acuerdo con las prioridades de la institución. 3. Seguimiento: el SO da seguimiento de las actividades del sistema de cómputo. Da seguimiento de cada trabajo de cómputo y también puede dar seguimiento de quién usa el sistema, qué programas se han ejecutado y cualquier intento no autorizado para tener acceso al sistema. La mayor parte del SO se almacena en una copia sobre un disco, al cual la memoria primaria tiene muy rápido acceso. Cuando partes del sistema operativo se requieren para una determinada aplicación, son transferidas desde el disco y cargadas en la memoria primaria. El dispositivo en el que todo un SO completo se almacena se llama dispositivo de residencia del sistema. Multiprogramación, tiempo compartido, almacenamiento virtual y multiprocesamiento Las computadoras tienen una serie de capacidades especiales en el sistema operativo: Multiprogramación: es la capacidad más importante del SO para compartir los recursos de la computadora. Permite que programas múltiples compartan los recursos del sistema de cómputo mediante el uso concurrente de un CPU. Por uso concurrente se entiende que, en cualquier momento, sólo un programa emplea en realidad el CPU, pero las necesidades de entrada y salida de otro programas pueden ser atendidas al mismo tiempo. Dos o más programas están activos al mismo tiempo, pero no usan los mismos recursos de la computadora simultáneamente. Con la multiprogramación, un grupo de programas tomará su turno para el uso del procesador. 3 Multitareas: se refieren a la multiprogramación en los sistemas operativos individuales, como los que se usan en las microcomputadoras. Una persona puede ejecutar dos o más programas de manera concurrente en una sola computadora. En vez de terminar la sesión con el programa procesador de palabra, se regresa al sistema operativo y luego se inicia una sesión con el programa de base de datos. Las multitareas ayudan a desplegar ambos programas en la pantalla de la computadora y trabajar al mismo tiempo. Almacenamiento virtual: se desarrolló luego de que algunos problemas de multiprogramación se hicieron evidentes. El almacenamiento virtual maneja los programas más eficientemente porque la computadora los divide en pequeñas porciones de longitud fija o variable, almacenando sólo una pequeña porción del programa en la memoria primaria a la vez. Primero, aún cuando dos o tres programas grandes puedan ser leídos en la memoria, una cierta parte de la memoria principal permanece subutilizada porque los programas suman menos que el espacio de la memoria primaria disponible. Segundo, dado el tamaño limitado de la memoria primaria, sólo un número pequeño de programas puede requerir de hasta 200 kbytes de memoria, y la computadora puede tener solamente un megabyte de memoria primaria. Por lo tanto, sólo unos cuantos programas pueden residir en la memoria en un momento dado. El almacenamiento virtual rompe un programa en un número de porciones de longitud fija llamadas páginas, o en porciones de longitud variable llamadas segmentos. El punto de ruptura real entre segmentos puede ser determinado por el programador o por el SO . En el almacenamiento virtual, cada una de estas porciones es relativamente pequeña, esto permite que un gran número de programas resida en la memoria primaria, ya que sólo una página o segmento de cada programa se localiza en realidad en ella. El resto de las páginas de los programas se almacenan en una unidad periférica de disco hasta que están listas para ser procesadas. El almacenamiento virtual proporciona un gran número de ventajas: 1.-la memoria primaria se utiliza a mayor capacidad; 2.- los programadores ya no tienen que preocupares acerca del tamaño del área de la memoria primaria. Con el almacenamiento virtual no existe un límite para los requisitos de almacenamiento del programa. Tiempo compartido: es una capacidad de un SO que permite que muchos usuarios compartan simultáneamente los recursos de procesamiento de la computadora. Se diferencia de la multiprogramación en que el CPU emplea una cantidad fija de tiempo en un programa antes de moverse al siguiente. En un ambiente de tiempo compartido, miles de usuarios tienen asignado un período de tiempo de computadora muy pequeño (2 milisegundos), pero como el CPU opera al nivel de nanosegundos, un CPU puede llevar a cabo una gran cantidad de trabajo en 2 milisegundos. Multiproceso: es un SO capaz de unir 2 o más CPU para que trabajen en paralelo en un solo sistema de computación, el cual puede asignar múltiples CPU para ejecutar diferentes instrucciones a partir del mismo programa o de diferentes programas en forma simultánea, dividiendo el trabajo entre los CPU. Mientras que la multiprogramación utiliza un procesamiento concurrente con una CPU, el multiproceso utiliza procesamientos simultáneos con múltiples CPU. Traducción de lenguaje y software de utilerías Cuando las computadoras ejecutan programas escritos en lenguajes como COBOL, FORTRAN o C, deben convertir estas instrucciones ilegibles para los seres humanos en una forma que puedan entender. El software del sistema incluye programas especiales de traducción de lenguajes que traducen programas de lenguaje de más alto nivel, escritos en lenguajes de programación como BASIC, COBOL y FORTRAN, a un lenguaje de máquina que ésta puede ejecutar. Este tipo de software del sistema se llama compilador o intérprete. El programa en el lenguaje de alto nivel antes de su traducción en lenguaje de máquina se llama código fuente. Un compilador traduce el código fuente en un código de máquina llamado código objeto. Algunos lenguajes de programación, como BASIC, no usan un compilador sino un intérprete, que traduce cada instrucción en código fuente, una a la vez, en código de máquina y lo ejecuta; su ejecución es muy 4 lenta porque sólo se traduce una instrucción a la vez. Un ensamblador es semejante a un compilador, pero se usa para traducir sólo el lenguaje ensamblador al código de máquina. En el software de sistema se incluyen los programas de utilería para rutinas, tareas repetitivas como copiar, limpiar la memoria primaria, etc.. si se ha trabajado en una computadora y se han realizado funciones como establecer archivos nuevos, eliminar viejos o formateo de disquetes, se ha trabajado con programas de utilería. Los programas de utilería son programas para tareas repetitivas escritos previamente, que se almacenan para que puedan ser compartidos por todos los usuarios de un sistema de cómputo y puedan ser rápidamente usados en muchas aplicaciones diferentes de sistemas de información cuando se requiere. Sistemas operativos para microcomputadoras Todo software se basa en SO específicos y en el hardware de la computadora. Un paquete de software escrito para un SO de microcomputadora puede no correr en otra. Los SO de las microcomputadoras en sí tienen características distintivas (como soporte a las multitareas o al trabajo gráfico) que determinan los tipos de aplicaciones para las que son ideales. Sistemas Características operativos OS/2 (Sistema SO para la línea de estaciones de trabajo a base de microcomputadoras IBM personal Operativo/2) System/2. eComStation (eCS) es el sistema operativo para PC, desarrollado por Serenity Systems, que está basado en OS/2 Warp 4.5, incluyendo una nueva interfaz gráfica y varias mejoras, como el Journaling File System, un sistema de archivos que es mucho más tolerante a fallos y que es usado por otros sistemas como AIX. Windows Server SO para Servidores UNIX-(XENIX) Usado para poderosas microcomputadoras, estaciones de trabajo y minicomputadoras. Permite multitareas, procesamiento multiusuario y trabajo en redes; puede llevarse a diferentes modelos de hardware de computadoras. System 7 SO para la computadora Macintosh. Permita multitareas y tiene capacidades poderosas de gráficas y multimedia. Mac OS X Es una línea de sistemas operativos computacionales desarrollada, comercializada y vendida por Apple Inc.. Se basa en Unix y usa una interfaz gráfica desarrollada por Apple llamada Aqua, que se inspira libremente en la interfaz de Mac OS Classic. El gestor de ventanas X11, característico en la familia de sistemas Unix, y Java se usan sólo para compatibilidad con software no nativo de Mac. Solaris Es un sistema operativo de tipo Unix desarrollado por Sun Microsystems desde 1992 como sucesor de SunOS. Es un sistema certificado oficialmente como versión de Unix. Funciona en arquitecturas SPARC y x86 para servidores y estaciones de trabajo. MS-DOS Contiene características semejantes al PC-DOS, pero es el SO para los clones de IBMPC. Windows Vista Es una línea de sistemas operativos desarrollada por Microsoft para ser usada en ordenadores de sobremesa, ordenadores portátiles, Tablet PC y Centros multimedia. GNU/Linux El término empleado para referirse al sistema operativo similar a Unix que utiliza como base las herramientas de sistema de GNU y el núcleo Linux. Su desarrollo es uno de los ejemplos más prominentes de software libre; todo el código fuente puede ser utilizado, modificado y redistribuido libremente por cualquiera bajo los términos de la GPL de GNU (Licencia Pública General de GNU) y otras licencias libres.[ 5 Selección del SO para una microcomputadora Por empezar el SO seleccionado debe ser compatible con el software requerido por las aplicaciones a utilizar; debe ser fácil de instalar y operar, y las características de la interfase con el usuario del SO deben ser fáciles de aprender. Software de aplicaciones El software de aplicaciones está principalmente relacionado con el cumplimiento de las tareas de los usuarios finales. Muchos diferentes lenguajes de programación pueden usarse para desarrollar software de aplicaciones. Cada uno de ellos tiene fuerzas y debilidades. Generaciones de lenguajes de programación PRIMERA GENERACIÓN: Para comunicarse con la primera generación de computadoras, los programadores tenían que escribir los programas en lenguaje de máquina: los 0s y 1s del código binario, esto hacía de la programación primitiva un proceso lento y de intenso trabajo. A medida que mejoró el hardware de las computadoras y la velocidad de procesamiento y el tamaño de la memoria crecieron, los lenguajes de computadora cambiaron de lenguajes de máquina a lenguajes que fueran más fáciles de entender por las personas. SEGUNDA GENERACIÓN: ocurrió a principios de los ´50, con el desarrollo de lenguaje ensamblador. En vez de emplear 1s y 0s, los programadores podían sustituir acrónimos tipo lenguaje y palabras como add (suma), sub (resta) y load (carga) en oraciones de programación. Un traductor de lenguaje llamado compilador transformaba las frases en un lenguaje tipo inglés en lenguaje de máquina. TERCERA GENERACIÓN: desde mediados de los ´50 hasta los ´70, surgieron los primeros lenguajes de alto nivel. Estos lenguajes permitieron a los matemáticos trabajar por primera vez con las computadoras mediante el uso de lenguajes tales como el FORTRAN (FORmula TRANslator program). . COBOL (Common Business Oriented Language) permitió el uso de expresiones en inglés como print y sort por los programadores, que ya no tenían que pensar en términos de ceros y unos. Se llaman lenguajes de alto nivel porque cada expresión en COBOL o FORTRAN genera múltiples expresiones en el nivel de lenguaje de máquina. El uso de estos lenguajes requiere de compiladores mucho más rápidos y eficientes para traducir los lenguajes de alto nivel en códigos de máquina. CUARTA GENERACIÓN: estos lenguajes surgieron a finales de los ´70 y su desarrollo aún continúa. En estos lenguajes, se reduce dramáticamente el tiempo de programación y las tareas de software son muy fáciles. Cada nueva generación de software requiere más y más área de almacenamiento primario, compiladores más rápidos y mayor almacenamiento secundario. Lenguajes de programación populares LENGUAJE ENSAMBLADOR: lenguaje de programación desarrollado en los ´50 que se parece al lenguaje de máquina, pero sustituye los códigos numéricos por expresiones mnemotécnicas. da un gran control a los programadores, es costoso en términos de tiempo del programador, difícil de leer, rastrear y aprender. Se emplea hoy día principalmente en software de sistemas. 6 FORTRAN: fue desarrollado en 1956 para proporcionar una manera más fácil de escribir las aplicaciones científicas y de ingeniería. Es de especial utilidad en el procesamiento de datos numéricos; es relativamente fácil de aprender y las versiones actuales proporcionan estructuras sofisticadas para el control de la lógica del programa. COBOL: se empezó a utilizar a principios de los ´60. Fue diseñado para realizar tareas repetitivas como la de las nóminas. Sus estructuras principales de datos son registros, archivos, tablas y listas. Es fácilmente aprendido por los analistas de negocios. Es pobre en cuanto a operaciones matemáticas de cierta complejidad. BASIC (Beginners All-puspose Symbolic Instruction Code) fue desarrollado en 1964 para enseñar a los estudiantes cómo usar las computadoras. Hoy día es el más popular en las escuelas superiores y para las microcomputadoras. Puede hacer casi todas las tareas de procesamiento de la computadora desde operaciones de inventarios hasta cálculos matemáticos. Es fácil de usar; su debilidad es que hace pocas tareas bien, aunque las hace todas. LP/1 (Programming Language ): fue desarrollado por IBM en 1964. Es el lenguaje de programación de propósito general más poderoso, y es algo difícil de aprender. PASCAL: lamado en honor de Blas Pascal. ADA: C: fue desarrollado a principios de los ´70, y es el lenguaje en que mucho del SO UNIX ha sido escrito. En C se combinan algunas de las características de control rígido y eficiencia de ejecución del lenguaje ensamblador, con la flexibilidad de su uso en máquinas. En otras palabras, puede trabajar en una diversidad de computadoras en vez de una sola. LISIP Y PROLOG: Nuevas herramientas y enfoques de software Los lenguajes de cuarta generación consisten en una variedad de herramientas de software que permite a los usuarios finales desarrollar aplicaciones de software con una mínima (si no es ninguna) asistencia técnica o que estimulan la productividad de los programadores profesionales. Lenguajes de cuarta generación Existen siete categorías de cuarta generación: 1. LENGUAJE DE INTERROGACIÓN (SQL): es un lenguaje de computadora de alto nivel que se emplea para recuperar información específica de las bases de datos o archivos. 2. GENERADORES DE REPORTES: son programas que extraen datos de los archivos o de las bases de datos y crean reportes sobre diseño de acuerdo con muchos formatos que no son rutinariamente producidos por un sistema de información. 3. LENGUAJES DE GRÁFICAS: son lenguajes de cómputo que despliega datos de archivos o de bases de datos de forma gráfica. 4. GENERADORES DE APLICACIONES: es un software que contienen módulos preprogramados que pueden generar aplicaciones enteras, con un desarrollo a gran velocidad. Un usuario puede especificar lo que se requiere hacer y el generador de aplicación creará el código apropiado para la entrada, validación, actualización, procesamiento e informes. 5. LENGUAJES DE PROGRAMACIÓN DE MUY ALTO NIVEL: están diseñados para generar códigos de programas con menos instrucciones que los lenguajes convencionales como el COBOL o el FORTRAN. Se usan principalmente como herramienta de productividad por los programadores profesionales. 6. PAQUETES DE SOFTWARE DE APLICACIONES O ENTORNOS INTEGRADOS DE DESARROLLO: es un conjunto preescrito, precodificado y comercialmente disponible de programas que elimina la necesidad de escribir programas de software para ciertas funciones. 7 7. HERRAMIENTAS DE MICROCOMPUTADORA: algunas de las herramientas más populares y promotoras de la productividad de la cuarta generación son los paquetes de aplicaciones de propósito general, que han sido desarrollados para las microcomputadoras, en especial para los procesadores de palabra, las hojas de cálculo, administración de datos, gráficas y software de edición de escritorio. Programación orientada a objetos Un registro creciente de proyectos de software y la necesidad de los negocios de poner de moda sistemas que sean flexibles y rápidos de hacer, ha lanzado un nuevo enfoque para el desarrollo de software con las herramientas de programación “orientada a objetos”. Los métodos tradicionales de desarrollo de software han tratado a los datos y procedimientos como componentes independientes. Un procedimiento de programación por separado debe ser escrito cada vez que alguien desea actuar sobre un elemento de datos en particular. Los procedimientos actúan sobre los datos que el programa les envía. La programación orientada a objetos combina los datos y los procedimientos específicos que operan en aquellos datos en un “objeto”: en el objeto se combinan los datos y el código de programa. En vez de pasar datos a los procedimientos, los programas envían un mensaje a un objeto para que realice un procedimiento que ya tiene integrado a los procedimientos se les llama “métodos” en los lenguajes orientados a objetos). El mismo mensaje puede ser enviado a muchos objetos diferentes, pero cada uno de ellos implantará el mensaje de forma diferente. Ejemplo: una aplicación financiera orientada a objetos puede tener que los objetos Cliente envíen mensajes de debe y haber a los objetos Cuentas. Los objetos Cuentas, a su vez, pueden mantener a los objetos Efectivo, Cuentas por pagar y Cuentas por Cobrar. Los datos de un objeto están ocultos en otras partes del programa y sólo pueden ser manejados desde dentro del objeto. El método para manejar los datos del objeto puede ser cambiado internamente sin afectar a las otras partes del programa. Los programadores pueden enfocarse sobre lo que quieren que el objeto haga, y el objeto decide cómo hacerlo. Cómo seleccionar el software y los lenguajes de programación Si bien los administradores no necesitan ser especialistas en programación, deben conocer las diferencias entre los lenguajes de programación y ser capaces de emplear criterios claros para decidir qué lenguaje usar. Los criterios más importantes son: ADAPTABILIDAD: algunos lenguajes son de propósito general y pueden ser usados en una diversidad de problemas, mientras que otros son lenguajes de propósito específico adecuados sólo para tareas limitadas. La selección de lenguaje implica la identificación del uso y de los usuarios. SOFISTICACIÓN: los lenguajes de alto nivel deben tener estructuras de control y estructuras de datos sofisticadas. Las primeras definen la forma de los programas haciéndolos claros, lógicos y estructurados, fáciles de leer y mantener. Los lenguajes deben seleccionarse de manera que puedan soportar muchas estructuras de datos diferentes. CONSIDERACIONES DE TIPO ORGANIZACIONAL: con el objeto de ser eficaces, el lenguaje debe ser aprendido fácilmente por el personal de programación de la empresa, de ser fácil de mantener y cambiar y lo suficientemente flexible, de manera que pueda crecer dentro de la institución. Estas consideraciones organizacionales tienen implicaciones a largo plazo en los costos. SOPORTE: es importante adquirir software que sea de un uso extensivo en otras instituciones y que pueda recibir soporte muchas empresas y despachos de consultoría y servicios. A menudo es menos caro adquirir 8 software escrito en algún lado, o hacer que una empresa de servicios lo escriba, que desarrollar internamente el software. En estas situaciones resulta determinante tener software de amplio uso. Otra opción es si el software es reutilizable. Sólo una pequeña porción del software escrito es única, nueva y específica para las aplicaciones individuales. EFICIENCIA: la eficiencia con la cual un lenguaje compila y ejecuta permanece como consideración al adquirir software. Los lenguajes con compiladores o intérpretes lentos como el BASIC pueden ser caros en su operación y mantenimiento. En general los lenguajes de la 4° generación son muy lentos y caros en términos de tiempo de máquina Retos de administración 1. incremento de la complejidad y de los errores de software 2. el registro de aplicaciones pendientes.