Notas de

Informática
 

Marta Sananes
IEAC/FACES/ULA Junio 1998
Contenido:
 
1. Introducción: Sistemas, Modelos, Modelos Computables
Usamos computadores -aislados o en redes- para hacer cálculos, dibujos, textos, diagnósticos. También para administrar, controlar aparatos, evaluar alternativas, pronosticar, simular, enseñar, aprender, diseñar, jugar...

En el camino hasta la invención y desarrollo del computador para tantos y tan diversos usos, la humanidad ha estado creando y aplicando diversas formas de expresión del pensamiento así como representaciones cada vez más complejas y precisas del Universo. Ha inventado y desarrollando herramientas y máquinas.

Universo: todo lo que existe -mundo real- y todo lo que se puede pensar -mundo conceptual.  

Un Sistema es una parte del Universo [3], que puede ser: 

  • Simple: un objeto real o conceptual del Universo y sus relaciones con el resto del mismo
  • Complejo: una colección de Sistemas junto con las relaciones entre ellos y con el resto del Universo. Cada sistema de la colección es un sub-sistema.
El enfoque de Sistemas conduce a analizar sistemáticamente, es decir, descomponiendo y/o recomponiendo una totalidad bajo estudio en agrupaciones de componentes que estén más relacionados entre sí que con el resto. Permite trabajar de  manera lógica y organizada, definiendo tareas relativamente independientes cuya realización puede asignarse a distintos participantes cooperando paralelamente.

El enfoque de Sistemas facilita el trabajo con sistemas complejos. El uso del computador y la generalizada aplicación del enfoque de Sistemas  sirven de apoyo a la creatividad humana para concebir, construír y aplicar sistemas complejos, entre ellos, los computadores y sus aplicaciones.

En Computación -ciencia del estudio y aplicación de Computadores- a esta estrategia se la describe como en las guerras de conquista: divide y vencerás. El enemigo es el problema al que hay que dividir en subproblemas -sin perder nunca de vista la totalidad- en busca de solución efectiva y eficiente.

Para plantear y resolver problemas usamos, explícita o implicitamente, Modelos: representaciones abstractas del conocimiento acerca del sistema que presenta el problema.

Un Modelo de un sistema -real o conceptual- es otro sistema que sirve de representación útil para comprender, analizar, modificar, diseñar o experimentar con el sistema modelado.
Para establecer un modelo se abstrae del conocimiento o experiencia con el sistema modelado sólo aquello que se considere esencial, se hace abstracción de detalles que se consideren irrelevantes para los objetivos del estudio. Note que quien modela usa su juicio para determinar la relevancia del conocimiento y experiencia disponible. Por lo tanto de un mismo sistema puede haber infinidad de modelos según quien o con que propósito se estudie. Diversos modelos pueden competir por la mejor representatividad, utilidad o cualquier otro criterio de calidad. Un mismo modelo puede expresarse también de diversas formas y con distintos grados de precisión, abarcando desde expresiones materiales como lo son las maquetas hasta modelos matemáticos expresados en notación algebraíca.

Modelares el arte y ciencia de hacer modelos. Los modelos son útiles tanto para ayudar en los procesos de diseño de nuevos sistemas como para el análisis de sistemas existentes.

Podemos imaginar que la primera forma de modelar haya sido con las palabras, el lenguaje, que permite nombrar todas las cosas y acciones. Con el lenguaje se fija el concepto de objeto o entidad, como todo aquello que puede ser distinguible en el Universo, descriptible por sus atributos o cualidades y también por su comportamiento o actividad.

Una segunda forma de modelar pudo ser con dibujos, apareciendo así una propiedad adicional: la persistencia, al poder ser plasmados sobre algún medio duradero. El uso de símbolos es otra manera de comunicarse en forma simplificada por diversos medios visuales o auditivos. La persistencia de dibujos y símbolos los hacen comunicables sin necesidad de contacto inmediato ni directo.

Una tercera forma de modelar aparecería con el concepto de número, que revela el surgimiento del concepto e importancia de la precisióny el comiezo del desarrollo del pensamiento matemático.

Siguieron en distintos momentos y culturas más invenciones fundamentales como la escritura, los alfabetos, los sistemas de representación numérica para registrar cantidades, el dinero como sistema de información para tratar los complejos procesos de intercambio de bienes y servicios.

El pensamiento científico se expresa en forma de teorías o modelos conceptuales, incluyendo los modelos matemáticos.

Modelo Matemático: modelo conceptual  abstracto -no material, esencial- expresado mediante variables  y relaciones precisas definidas entre ellas. Las variables representan conceptos u objetos del sistema modelado. La validez de las relaciones se establece aplicando propiedades y reglas del razonamiento lógico-matemático. El lenguaje de expresión es el simbolismo algebraíco. A cada variable se asocia un conjunto -no necesariamente finito- de valores posibles que corresponden a las alternativas de estado representadas en el modelo. Se aplican para tratar clases de problemas. 
Si un problema puede ser expresado en términos de un modelo matemático es posible que exista una secuencia de operaciones para obtener una respuesta. [3]
Ejemplo: La suma de pares de números naturales es un modelo simple basado en el concepto de número. Es aplicable a muchos problemas.  
Se define a partir del conjunto de los números naturales : {0,1, 2, 3, …} con la relación +, que asocia a cada par de números naturales, no necesariamente distintos, otro número natural. Los axiomas y propiedades de la suma aseguran la unicidad del valor asociado a cada par relacionado. 

En la aplicación cotidiana de la suma usamos otra gran invención matemática: el sistema de representación numérica posicional. La aplicación de un sistema de numeración como el decimal permite poder representar cualquier cantidad, porque sabemos siempre como escribir el siguiente de cualquier número natural. Utilizando la notación decimal podemos considerar valores para los sumandos y obtener el valor resultado. Decimos que los valores de los sumandos así como el del resultado son los datos del problema de suma. 

Definición y propiedades del sistema de numeración decimal. 

Ejemplo de aplicación: El modelo de la suma de pares de números se puede expresar algebraicamente como: 
s = a + b. Se aplica a la clase de problemas en las que existen dos objetos que tienen una propiedad medible y aditiva (Si S es A unido B, s=p(S) = p(A) + p(B) = a + b).  
Si los objetos considerados son dos segmentos de recta y la longitud de cada  segmento la propiedad medible, consideremos el segmento S formado por el segmento B puesto a continuación del A.  
Entonces,longitud de S=longitud de A + longitud de B. En este caso, los valores numéricos asignados a las variablesa, b y s son interpretados como longitudes de A, B y S respectivamente para efectuar un cálculo particular. Estos valores particulares son los datos del problema. 
La solución al problema:  ¿ Cuál es la longitud de S ? es el resultado de calcular aplicando la relación entre las variables: s=a+b, con los valores particulares consideraodos o datos del problema. 
Preguntas: ¿ Cuál es el sistema ?  ¿ Cuál es el modelo ?

Una computación o cálculo es la aplicación de un modelo matemático usando los datos de un problema para obtener valores de las variables de resultados. En la aplicación de modelos matemáticos tanto datos como resultados son numéricos. Un modelo matemático es computable cuando las relaciones entre las variables se pueden especificar precisamente por series finitas de operaciones  a efectuar con los datos para obtener los resultados. Los modelos Lógicos son modelos matemáticos basados en el Algebra de Boole,  definida sobre el par de valores: verdadero y falso que pueden ser tratados numéricamente como 1 y 0.
Algoritmo es una especificación de una secuencia finita de operaciones que deben efectuarse sobre un conjunto de datos para obtener una resultado deseado. 
La palabra Algoritmo viene de Al-Kuaritzmi, matemático árabe del siglo IX autor del libro donde por primera vez se exponen los algoritmos de las operaciones
aritméticas elementales.[5]
Ejemplo: Modelo computable para sumar números de una lista de números
Variables del problema: 
n: número -natural- de sumandos en la lista 
a: un sumando tomado de la lista 
s: valor resultado de la suma 
i: indicador para llevar posición de toma de elementos de la lista de números
Algoritmo: 
Paso Instrucción de operación
1 Inicializar el resultado s en valor 0
2 Obtener dato: valor para  n
3 Es el valor de n > 0 ?
4 Si el valor de n no es > 0 (n=0), seguir con el paso 11
5 Inicializar el indicador i en valor 1 (señala al comienzo de la lista)
6 Asignar como valor de a el valor del número en la posición indicada por el valor actual de i
7 Asignar como nuevo valor de s el resultado de sumar su valor actual con el de a (s:=s + a)
8 Avanzar el valor de i en una unidad (i:=i + 1) (señala al siguiente elemento de la lista)
9 Es el valor actual de i > n ?
10 Si no es i > n (la lista no se ha agotado), seguir con el paso 6
11 El resultado de la suma es el valor de s
 
Observaciones:
Una lista es una sucesión de elementos
n, a, s, i son los nombres de las variables del problema -en lenguaje algebraíco- o dicho de otra manera, los  nombres simbólicos de los datos. Cuando el algoritmo se ejecuta, se sustituyen por los valores o datos particulares de cada aplicación. 
 := simboliza la operación de asignar valor a una variable
 
Un mismo problema puede admitir muchos algoritmos. La expresión de los algoritmos es también variada. El tipo de expresión anterior como lista de instrucciones en lenguaje natural es sólo una posible. Otras formas de expresión son:
  • Diagramas de flujo
  • Diagramas Nassi-Schniederman
  • Psudo-codigo de lenguaje de programación (pseudo-code)
  • Especificación de precondiciones y postcondiciones
  • Algoritmo del Cálculo del Máximo Común Divisor de pares de número naturales
    Ejercicio: Describa en forma narrada de algoritmo los pasos que sigue para sumar dos cantidades enteras positivas de hasta n cifras en la representación numérica decimal, asumiendo como operación elemental la de suma de dos dígitos que da como resultado dos dígitos: unidades y acarreo.
    Es posible modelar en términos de conceptos no numéricos, como con palabras o con símbolos en general. Es posible también efectuar operaciones con datos en forma de símbolos que resulten en una solucioón a problemas expresados en forma no mumérica. Entonces, en general:
    Modelo computable: modelo conceptual aplicado a una clase de problemas, formulado con definiciones de variables y relaciones expresadas con precisión en algún lenguaje simbólico por medio de  algoritmos.

     
    Ejemplo de modelo computable no numérico: Comparación de palabras. (Especificación de Pre y Pos condiciones) 
    Precondiciones: 
      <palabra>:: <letra> | <letra><palabra
      longitud(<palabra>): número de letras en <palabra
      <palabra>[i]: <letra> en posición de orden [i], i: 1,2,...longitud(<palabra>) 
      Variables: x, y son <palabras
      longitud(x), longitud(y):  > 0 
    Postcondiciones:  
      Estados finales posibles: 
      x = y :    longitud(x) = longitud(y) y x[i] = y[i], i=1..longitud(x)  

      x < y :    x[1] < y[1]  
                    ó 
                   x[i] = y[i], i=1..k-1 y  x[k] < y[k] y  k<=min(longitud(x),longitud(y))  
      x > y :    otro caso 



    2. Procesamiento de Información
    Para la aplicación de un modelo computable a la resolución de un problema particular se requiere tener la información específica del problema que se corresponde con los conceptos u objetos representados en el modelo. La solución que es deducida o producida por la aplicación del modelo es nueva información . La aplicación de modelos computables es así  tratamiento o procesamiento de Información. Las Computadoras son sistemas automatizados para el Procesamiento de Información. Computación es la ciencia del estudio y aplicación de computadoras para realizar Procesamiento de Información. En Francia [1] se originón el término sinónimo de Informática, como contracción de Información y Automática.

    Las aplicaciones actuales de la Computación son de muy diversos tipos:

  • Estadísticas: de muy variada aplicación a otros campos
  • Científicas y Médicas: como modelación de procesos, telemedicina
  • Ingenieriles: como diseño asistido por computadores
  • Organizacionales: operación, administración, control, planificación
  • Cultura y Entretenimiento: enciclopedias, juegos, video, música
  • Arte: Literatura, Artes Gráficas, Música
  • El término Informática se asocia principlamente con la gestión de Información en las Organizaciones: Empresas, organismos e instituciones gubernamentales y no gubernamentales, en las que generalmente se manejan altos volúmes de datos. Un dato es cada elemento identificado de la información, por lo que se ha venido usando la expresión Procesamiento de Datos  para designar a  la actividad básica de la Informática.

    La Información puede presentarse de muchas maneras a las personas: como lenguaje escrito o hablado, como sonido, como gráficos, olores, texturas, sensaciones en general.

    Un primer problema en computación fué como comunicar información a una computadora. Es un problema abierto, pues una de los aspectos de desarrollo de la computación es precisamente el de abarcar más y más formas de representación -tanto de entrada como de salida a los procesamientos- logrando además cada vez más rapidez y fidelidad. Este es un desarrollo que comenzó con el uso de tarjetas perforadas inspiradas en los telares del siglo pasado para comunicar cantidades y ha llegado hasta el uso de los recursos actuales para presentaciones en realidad virtual.

    Información es una palabra de sentido muy amplio. En un sentido más preciso Información es incremento de conocimiento [9] o recíprocamente, Conocimiento es información acumulada.

    Para acercarnos a la precisión requerida en Computación consideremos como dato cada respuesta precisa a una interrogación de tipo: qué, donde, cuándo, cuánto, cuál, cómo, es verdadero o falso...?
    Generalmente los términos información y dato se utilizan como sinónimos, aunque el término dato o su plural en latín, data como conjunto de toda la información asociada al modelo computable, son de uso más frecuente en el contexto de la Informática.
    Langefors hace la siguiente distinción:  Dato es información representada en forma digital o codificada, mediante el uso de símbolos. [6]
    Note que el término dato se aplica tanto a información previa a la resolución del problema como a información que se genera del proceso de resolución. Por lo tanto, los datos -la data-  incluye tanto conjuntos de datos iniciales o de Entrada (input) como conjuntos de datos de resultado o de Salida (output).

    El uso de computadoras en la aplicación de modelos computables proporciona rapidez y estricto cumplimiento a las especificaciones de los algoritmos, a diferencia de la aplicación humana en general lenta y susceptible a errores de interpretación o de ejecución.

    Breve Resumen del desarrollo de la Computación:

  • De la palabra al computador
  • La Computación hasta los años 70

  • Desde los 70 hasta ahora


    3. Organización de Computadoras
     
    Computadora: Sistema con componentes electrónicos, eléctricos y mecánicos, capaz de almacenar datos y de ejecutar operaciones especificadas por programas
    La organización típica actual de los computadores se basa en la idea de programa almacenado de John von Neumann [27], reclamada también por J. Prosper Eckert y John W. Mauchly, de la Universidad de Pennsylvania. Este principio establece una separación conceptual y física del computador como sistema en dos subsistemas:
    Hardware 
      Subsistema físico constituído por los componentes que conforman la máquina como objeto físico. 
    Software:   
      Subsistema lógico constitudo por representaciones simbólicas de datos y programas transferibles entre los distintos tipos de componentes del hardware. Los programas contienen la expresión de algoritmos en forma de secuencias de instrucciones u órdenes de operación interpretables por un componente activo -unidad central de procesamiento- del hardware. 
    La presencia del software y de data dentro del hardware se revela por cambios de estado en ciertos componentes. El principio implica que el software -para efectos de su localización dentro de un computador- es visto por el hardware simplemente como datos.

    La relación de integración entre ambos subsistemas se establece mediante la implantación dentro del hardware de componentes mínimos de software fijo:

    Repertorio de instrucciones (Instruction Set):

    Conjunto de operaciones elementales interpretables por el componente activo para ser aplicadas sobre datos representables en el hardware según diversas formas o tipos.    .
    Programación básica:
    Programas mínimos para arranque del sistema y la comunicación inicial con equipos periféricos, que permiten la comunicación de datos con los usuarios.
    La estrategia de desarrollo de software de computadores -basada en el principio de divide y vencerás- ha sido por superposición de niveles o capas de funcionalidad, partiendo desde el nivel fundamental en el hardware. Cada nivel se sirve del o de los niveles anteriores y agrega más funcionalidad al usuario final.

    Arquitectura de Computadores:  Notas de Arquitectura de Computadores

    Componentes del Hardware: la Maquinaria
    • CPU: Unidad Central de Procesamiento (Central Processor Unit).
      Es el componente que contiene los circuitos lógicos que implementan el repertorio de instrucciones así como la capacidad de reconocer y ejecutar instrucciones provenientes de un programa sobre la data indicada.

      Dentro del CPU también existen en la escala reducida elementos homólogos a algunos de los otros tipos de componentes que integran el hardware.

         
    • MEMORIA:
      Es un componente con capacidad de retener conjuntos de datos, incluyendo la clase especial de datos que es el software. Los programas se almacenan en memoria en el momento de su ejecución. La memoria se organiza como una secuencia numerada de celdas de tamaño fijo. Cada celda es accesible independientemente para almacenar un dato o tomar una copia del dato almacenado.
      La memoria de los computadores es un recurso fijo que tiene que ser compartido tanto en el tiempo como en espacio por muchos programas y datos. Las memorias de tipo RAM (Random Access Memory o memoria de acceso aleatorio) son además volátiles: se pierde su contenido cuando se apaga la fuente de poder del equipo. Por ello no puede usarse como un medio persistente para almacenamiento. Hay tipos de memorias más costosas (ROM: Read Only Memory) que si tienen capacidad de persistencia . Los fabricantes las utilizan para colocar programas y datos residentes, como el programa inicial de arranque.
       
    • BUS: Es el componente que transporta y distribuye data entre los distintos componentes.

    •  
    • PUERTOS, INTERFACES de E/S:

    • Son los puntos de entrada y salida de data desde y hacia equipos periféricos. Las Interfaces -también canales o controladores- tienen su propia capacidad de procesamiento sobre el equipo periférico atendido.
       

    • MEDIOS DE COMUNICACION: Dispositivos de comunicación con los usuarios (teclados, pantallas, impresoras,..)
    • MEDIOS DE ALMACENAMIENTO SECUNDARIO:
      Dispositivos para almacenamiento externo de data en Volúmenes fijos o removibles (Discos y Cintas magnéticas). También llamados Dispositivos o memorias de almacenamiento externo o secundario. Pueden retener data por tiempo indefinido, a diferencia de la memoria principal que es temporal.
    • Otros componentes
        • Memorias de sólo lectura (ROM): Memoria de tipo fijo que retienen programas y datos permanentes, como el programa inicial de arranque. No pueden ser alteradas por ejecución de programas en el computador.
        • Memorias auxiliares u ocultas (Caché): Para acelerar la transferencia de datos con dispositivos de almacenamiento.
    Componentes de Software: la Funcionalidad
     
    La funcionalidad de un computador -el trabajo útil que puede hacer- se logra con Programas. Los sistemas programados (programas, software) hacen que un computador realice tareas de procesamiento de datos de acuerdo a los algoritmos previstos por los usuarios o por proveedores, incluyendo las tareas de comunicación de información con usuarios.

    Básicamente existen tres tipos de sistemas programados:

  • Los Sistemas Operativos:
    • Sistemas programados para gestionar en forma continua y eficiente la operación del computador incluyendo el uso de todos sus recursos tanto internos como externos, facilitando el uso por parte de los usuarios.
       
    • Las Aplicaciones o Ambientes de Trabajo
      • Públicas o comerciales
      • Privadas o de propietario
    • Los Lenguajes de Programación
      Son las herramientas para la construcción de software. Con lenguajes de programación se construyen Sistemas Operativos, nuevos lenguajes de programación y Aplicaciones. Las descripciones de datos y los algoritmos se expresan mediante lenguajes de programación, cuyas sentencias pueden ser reconocidas e interpretadas dentro de un computador.

      Según el concepto de diseño por niveles, los lenguajes de programación se clasifican en lenguajes de bajo y alto nivel.

      El lenguaje de programación de nivel más bajo es el llamado lenguaje de máquina. Es el lenguaje que sólo admite sentencias formadas con las instrucciones del repertorio del procesador. Hay por tanto tantos lenguajes de máquina como tipos de procesadores distintos. Los lenguajes de programación de alto nivel son los que se aproximan a formas de expresión humanas, usualmente más bien al lenguaje matemático.

      Un lenguaje de programación posee una sintaxis o conjunto de reglas para la correcta escritura de sentencias y una semántica o conjunto de reglas de interpretación de las sentencias dentro del computador en términos de las operaciones internas. La implementación de lenguajes de alto nivel se apoya -siguiendo la estrategia de desarrollo por niveles- en el uso de lenguajes de niveles anteriores.
       

       Organización Multinivel de Sistemas de Computación



    4. Programación de Computadoras
     
     
    Niklaus Wirth -profesor suizo creador del lenguaje Pascal- [9] define: 
    Estructuras de Datos + Algoritmos = Programas
     
    Un Programa es una secuencia estructurada de sentencias o instrucciones escritas según las reglas de sintaxis de un Lenguaje de Programación. En un programa se definen nombres (identificadores) y especificaciones para los siguientes tipos de elementos:
    • Tipos de datos:
      • simples o elementales
      • agregados o estructuras de datos
      • Variables definidas según los  tipos de datos disponibles. Las variables  son elementos de almacenamiento de datos. Pueden tomar o contener distintos valores durante la ejecución del programa.
      • Constantes definidas según los  tipos de datos disponibles. Las constantes  son elementos de almacenamiento de datos. Mantienen valores fijos, que no cambian durante la ejecución del programa.
      • Procedimientos: especificaciones de algoritmos de procesamiento de datos. Las operaciones especificadas en los procedimientos se ejecutan según la semántica del lenguaje.


      En la fórmula de Wirth, la parte de Estructuras de Datos abarca las definiciones de tipos, variables y constantes mientras que la de Algoritmos se corresponde con procedimientos.

      La comprensión y la resolución de problemas complejos generalmente se facilita si se adopta una estrategia de descomposición del problema reiteradamente en subproblemas, aplicando la estrategia divide y vencerás.

      Esta estrategia aplicada al desarrollo de productos de computación tanto de hardware como de software, ha llevado a la organización por componentes y arquitectura por niveles.

      La estrategia aplicada al diseño y elaboración de programas significa también la descomposición de algoritmos según criterios de complejidad y reusabilidad.

      Para permitir la reusabilidad de componentes de programación en forma eficiente, los lenguajes de programación más evolucionados soportan la construcción de Bibliotecas o Módulos para almacenar en general definiciones de tipos, variables, constantes y procedimientos . Los módulos pueden luego ser incorporados en la construcción de nuevos programas.

    Especificación y Almacenamiento de Datos
     
    Un Tipo de Datos determina un conjunto de valores para el cual está existe una forma de representación interna y un conjunto de operaciones disponibles.
      Por ejemplo, todo procesador tiene al menos una forma de representación para un subconjunto de los números enteros y como mínimo provee las operaciones de suma, resta y transferencia de un lugar a otro dentro del hardware.

      Todo procesador posee capacidad de representación y operaciones en su repertorio de instruciones para uno o más tipos básicos. Todo lenguaje de programación también provee implícita o explícitamente un repertorio de tipos básicos. Un tipo básico puede estar soportado por algún tipo básico del procesador -es decir, por hardware- o por componentes de software propios del lenguaje que permiten extender la capacidad de procesamiento de datos presente originalmente en el hardware.

      Los lenguajes de muy alto nivel proveen además reglas de composición para que los usuarios-programadores puedan a su vez redefinir tipos o especificar tipos complejos a partir de otros tipos. Los tipos de datos del usuario se definen en los programas o en módulos mediante sentencias de tipo declarativas incluidas en la sintaxis del lenguaje. Los tipos de datos sirven como patrones para guiar la asignación del espacio de memoria necesario para ubicar las variables utilizadas en los programas. En las variables se mantiene en cada momento el último valor asignado en el proceso de ejecución del programa. Los datos pueden ser tanto de Entrada (Input) -introducidos externamente durante la ejecución del programa- o de Salida (Output) -resultantes del procesamiento.

    Un Tipo Abstracto de Datos (TAD) es un modelo abstracto de datos, que comprende especificaciones de datos y algoritmos de procesamiento. Es un modelo computable que encapsula una definición de datos y de procesos aplicables a distintos contextos particulares de procesamiento de datos.

    El concepto de TAD es el análogo en el análisis computacional al de modelo o estructura matemática en Algebra.

      El calificativo de abstracto enfatiza que para efectos de su uso o aplicación, se hace abstracción de los detalles de implantación particular tales como la representación interna de sus elementos y la programación de las operaciones.
    Ejemplo: Definamos el TAD de nombre natural definido por:  {x | x eN} con las operaciones: 
                                                                                            ¬ (asignar); +, - y mcd (máximo común divisor)
      Un TAD implementado puede ser distribuido para uso en diversas aplicaciones, siendo los programadores de ellas usuarios del TAD que sólo deberían preocuparse por lo qué hace y no por cómo lo hace. También el concepto de abstracción protege la representación interna de datos de accesos destructivos. Los TAD se describen utilizando las formas declarativas del lenguaje escogido de programación. Se implementan con la resolución de detalles utilizando los recursos de programación disponibles en el lenguaje. Mediante procedimientos o funciones se implementan las operaciones que completan el modelo aplicando el principio de encapsulamiento para proteger la integridad del tipo. Se guardan en Bibliotecas o módulos compilados que se pueden distribuir haciéndolas de uso público en una comunidad. Se aplican al crear variables o instancias del TAD en programas con acceso al módulo contenedor del TAD.

      Alimentación y Persistencia de Data

      Los lenguajes de programación proveen instrucciones y/o procedimientos para lograr la comunicación de datos entre los programas y los usuarios externos, através de medios de Comunicación disponibles en el equipo de procesmiento con los cuales se alimentan datos a los programas.

      Para lograr la persistencia de datos se necesitan. medios de almacenamiento,capaces idealmente de retener su contenido indefinidamente, y dispositivos con la capacidad de grabar y recuperar data en el medio y transmitirla desde y hacia el computador. Las soluciones más efectivas son las que soportan medios de gran capacidad de almacenamiento y alta velocidad de acceso, como lo son los discos magnéticos y sus unidades conducturas (drivers). A esta forma de almacenamiento de datos se la llama Almacenamiento Secundario. Los lenguajes de Programación proveen instrucciones y/o procedimientos para guardar y recuperar datos en medios de almacenamiento secuandario.

      Organización del Almacenamiento Secundario
      Una de las funciones de los Sistemas Operativos es organizar y administrar el uso del Almacenamiento Secundario en los medios en que residen permanentemente o en los removibles que se montan en las unidades conductores disponibles en el computador. El Sistema Operativo -aparte del manejo a nivel físico- organiza el almacenamiento en los medios o volúmenes mediante un Sistema de Archivos que incluye una estructura jerárquica de directorios para facilitar tanto la localización rápida de archivos como el mantenimiento por parte de los usuario de una organización lógica de su información. Los lenguajes de programación proporcionan a los programadores facilidades para el aprovechamiento del almacenamiento secundario con la intermediación del Sistema Operativo.
    Archivo: Conjunto organizado y nominado de datos que se mantiene en un medio de almacenamiento secundario bajo la organización del Sistema de Archivos de un Sistema Operativo. Esta organización establece -entre otras cosas- las reglas de denominación. Los archivos pueden contener tanto programas ejecutables como data propiamente dicha.
    Por ej., el MSDOS permite nombres de máximo 8 caracteres más una calificación opcional o extensión de hasta 3 caracteres. 


    Lenguajes de Programación
    Ejemplos de Programación: Máximo Común Divisor
    (Versión 1 Programa MCD en TurboPascal)

    La comunicación de los usuarios con los computadores se logra mediante lenguajes especialmente diseñados para esta comunicación persona-máquina. Cualquier sistema programado que se ejecuta en un computador contiene alguna forma de lenguaje o protocolo de comunicación.

    Lenguajes de Programación:  Lenguajes diseñados para poder desarrollar nuevos sistemas programados. 
     
    A los lenguajes o protocolos particulares para la comunicación con otros sistemas programados se les llama en general Interfaces de Usuario. La tendencia actual es que tengan expresión gráfica.

    Entre los lenguajes de programación se considera una primera distinción entre:

  • Lenguajes de propósito general: Para desarrollar cualquier tipo de aplicación. El programador debe diseñar y construír procedimientos a más alto nivel para resolver casos especiales. A esta clase pertenecen entre otros C, Pascal y todos los Ensambladores -Assembler- de lenguajes de máquina..
  • Lenguajes orientados al problema: Para desarrollar aplicaciones de tipos especiales. Por ejemplo, lenguajes para Simulación de Sistemas como Simula, GLIDER; lenguajes para construír páginas en WWW, como HTML.
  • Otra distinción se basa en la noción de distancia de un lenguaje en relación al lenguaje básico que todos en última instancia utilizan, que es el lenguaje propio de cada tipo de procesador (CPU) dentro de un computador, su lenguaje de máquina.
    Según este criterio se habla de:
  • Lenguajes de bajo nivel: su repertorio de instrucciones no difiere demasiado de un repertorio básico
  • Lenguajes de alto nivel: implementan un repertorio de instrucciones complejas para facilitar la escritura y comprensión de los programas a la comunidad de programadores y usuarios
  • Los lenguajes de máquina están constituídos por el repertorio básico de instrucciones u operaciones sobre datos con los que el procesador fué diseñado. Programar a ese nivel implica desglosar los algoritmos hasta el detalle de esas operaciones elementales. Hacer esto, además de largo y tedioso, se presta a muchas errores y omisiones.

    Con la estrategia de desarrollo por niveles (aplicación del enfoque sistémico) lo que se ha logrado es que a ese nivel básico se construyan procedimientos con operaciones que conforman un nivel superior de lenguaje, el del Sistema Operativo. Operaciones de ambos niveles pasan a ser a su vez las operaciones fundamentales para un siguiente nivel y así se pueden ir agregando tantos niveles como sea conveniente. Se puede decir que cada nivel luce para el nivel siguiente como una máquina virtual.

    Los lenguajes de alto nivel sirven para que los usuarios puedan instruír al computador con los TADs y los algoritmos para la resolución de sus problemas utilizando lenguajes que se aspira sean lo más parecido posible a los lenguajes o formas de expresión humanas que se utilizan habitualmente en el dominio de la aplicación.

    Los lenguajes de programación estructurados son en general lenguajes de alto nivel diseñados con el criterio de que los programas producidos con ellos sean  documentos que muestren claramente el diseño lógico del orden de procesamiento basado en los principios de diseño estructurado de programas. (Otra aplicación del enfoque sistémico).

    La importancia de este enfoque se debe al caracter dual de los programas. Para el computador, son la especificación de tareas  y para las personas programadores de un equipo de desarrollo, son documentos de trabajo. Tal como una publicación se beneficia de un estilo apropiado de escritura y presentación para facilitar su lectura y comprensión, vale lo mismo  para los programas, que pueden contener algoritmos muy complejos.

    Los principios de estructuración de programas son:

  • Especificación del orden de procesamiento utilizando bloques ensamblados de estructuras fundamentales de procesamiento:
        • Secuencias: secuencias de operaciones
        • Repetición Mientras: repeticiones de operaciones o bloques de operaciones mientras se esté cumpliendo una condición
        • Repetición Hasta: repeticiones de operaciones o bloques de operaciones hasta que se cumpla una condición
        • Decisión: selección de operaciones o bloques de operaciones entre dos o más alternativas según condiciones
      • Facilidad para el aislamiento de algoritmos en forma de unidades de procesamiento de tipo función o procedimiento, que sean identificables y reusables sobre distintos conjuntos de datos.
      • Facilidad para definir e implementar Tipos Abstractos de Datos (TAD’s)
      • Facilidad para la construcción de Bibliotecas o Módulos contentivos de: funciones, procedimientos, definiciones de Tipos, implementaciones de TAD’s, variables

      Ejemplo de Programa TurboPascal con una implementación del TAD natural
      (Versión 2 MCD)

      Los Lenguajes de Programación Orientada a Objetos (LPOO) extienden y mejoran las cualidades estructurales al soportar en forma muy consistente el concepto de TAD. Los LPOO permiten integrar en unidades identificadas las implementaciones de algoritmos con las descripciones de estructuras de datos a los que se aplican. Estas unidades declarativas son clases de objetos y los objetos creados según la especificación de una clase son instancias  o variables-objeto de la clase.

      Una declaración de clase contiene declaraciones de dos tipos de elementos: atributos (data, conjuntos de datos) y métodos (algoritmos).

      El diseño y programación orientada a objetos tienen como objetivos:

      • Favorecer la representatividad en los programas del universo o dominio de la aplicación, al facilitar el establecimiento de correspondencias entre objetos distinguibles del dominio y objetos de programación.
      • Favorecer la sistematización de los procesos de diseño y programación con el concepto de clases de objetos como componentes reusables y ensamblables, tal como ocurre con las industrias altamente integradas, en particular la misma industria de desarrollo de hardware de computadores.
      • Favorecer la estrategia de desarrollo por niveles mediante las facilidades de herencia entre clases (de atributos y métodos), redefinición de métodos y polimorfismo (uso del método apropiado según contexto).


      Ejemplo de Programa TurboPascal con una implementación del TAD natural como clase (objeto)
      (Versión 3 MCD)

    Ejercicio: Hacer una Versión 4 del Programa MCD en el ambiente RAD Delphi (Lenguaje ObjectPascal)


    5. Sistemas de Información 
     
    Un Sistema de Información integra recursos humanos y de computación -hardware y software- para almacenar, mantener y usar información relevante  sobre el desarrollo de actividades dentro de una organización. 
    Un Sistema de Información Gerencial integra diversos Sistemas de Información de una organización incluyendo además recursos de planificación y control de las actividades dentro de la organización. Otro sentido de la expresión es para designar los sistemas de información diseñados para entregar información de gerencia en contraste con los sistemas ordinarios de control de operaciones o Sistemas de Operaciones.

    Una Organización es un sistema de personas y recursos dedicados al cumplimiento de funciones establecidas. Se entiende que el objetivo de los Sistemas de Información es el de facilitar la eficiencia de la Organización en el desempeño de sus funciones.

    La Base de Datos de una organización es el componente que centraliza el almacenamiento, mantenimiento, integridad y administración de su información para uso compartido por todos sus Sistemas de Información. Físicamente la BD puede estar concentrada en un sistema de computación -equipo central y almacenamiento- o distribuída o parcialmente distribuída en diversos sistemas no necesariamente homogéneos ni en plataforma ni en capacidades. 
    Para establecer el diseño de la BD y de los SI de una Organización es necesario empezar por modelar la Organización. Un Modelo de Datos es el modelo más abstracto de la Organización. El MD representa en forma estática las Entidades o Clases de Objetos identificables dentro de la Organización así como sus relaciones. El MD de Organizaciones complejas puede estructurarse en submodelos para facilitar tanto el proceso de deducción del modelo como su presentación. El modelaje de la Organización se complementa con la modelación de la dinámica de su actividad. La modelación dinámica puede adoptar diversas formas de representación como son:
  • Diagramas de Flujo de Datos: documentan Fuentes y Sumideros de Datos, Procesos, Almacenes de Datos y los Flujos de Datos entre los distintos elementos
  • Diagramas de Actividad: documentan secuencias de Actividades dentro de un Sistema, permitiendo explicitar concurrenias o paralelismos
  • Diagramas de Estado: documentan los Eventos de ocurrencia prevista en un Sistema y los cambios de Estado que provocan
  • Especificaciones de procesamiento: documentan a distintos niveles de detalle las secuencias de operaciones que conforman los Procesos. Pueden usarse Diagramas de Flujos, Tablas y/o Arboles de Decisión, Pseudocode.
  • Modelos de Simulación de Sistemas pueden desarrollarse para asistir tanto en el diseño de los SI como en su evaluación. El UML (Unified Modeling Language o Lenguaje Unificado de Modelación) [4] es una proposición con bastante aceptación  para standarizar la presentación de la modelación organizacional.
    Un Sistema de Gestión de Bases de Datos SGBD (Database Managment System DBMS) es un Sistema de Software de muy alto nivel diseñado para soportar Bases de Datos en plataformas de computación incluyendo capacidad de modelar organizaciones, representación y gestión de estructuras complejas de datos en forma concurrente por distintos usuarios, controles de seguridad de acceso a la información, controles de integridad de datos, lenguajes de comunicación con usuarios, controles de respaldo y recuperación en caso de fallas.
    Características de los DBMS

    Generalizando la igualdad de Wirth se puede proponer que:

    Database + Programas = Sistemas de Información
     
    Actualmente hay la tendencia a extender el concepto de Objetos al ambiente de Sistemas de Información, con la aparición de los Sistemas de Gestión de Bases de Datos Orientados a Objetos y los Lenguajes de Programación Orientada a Objetos. Como en los lenguajes de programación, los SGBDOO buscan integrar el almacenamiento de data y procesamientos.

    Entre los LPOO para uso en el desarrollo de Sistemas de Información se destacan los que se integran dentro de ambientes llamados RAD, por Rapid Application Development o Desarrollo Rápido de Aplicaciones. Lo más populares en esta categoría son Microsoft VisualBasic -parcialmente OO- y Borland Delphi -contenedor de ObjectPascal, ambos para plataformas Wintel.

    Problemas de diseño y elaboración de Software

    Diseñar y desarrollar software en general y buen software en particular no es tarea fácil. Se requiere:

  • Comprensión del dominio de la aplicación y establecimiento de un modelo conceptual apropiado y correcto
  • Selección de tecnología (equipo+sistema operativo+lenguaje/equipo+sistema operativo+DBMS+lenguaje)
  • Dominio de la tecnología (teórico y práctico) (comprensión del paradigma teórico y destreza en uso de los recursos técnicos)
  • Las dificultades en el diseño y elaboración de productos de Software -cuyo reconocimiento se conoce como crisis del software- han llevado a la evolución del desarrollo del Software desde la práctica informal hasta el establecimiento de disciplinas profesionalizadas que constituyen la llamada Ingeniería de Software. Es convieniente distinguir dos disciplinas en desarrollo para la producción de Software:
  • Arquitectura de Software

  • Es el diseño abstracto de programas y sistemas, analizando e integrando sus dos aspectos esenciales: estructura de datos y algoritmos. Debe partir del modelado de la Organización o del problema, seguido del levantamiento de requerimientos de los usuarios, tanto funcionales como de presentación y operatividad continuando con la especificación de un diseño que los satizfaga. El producto del diseño son las Especificaciones de realización.

    Así como el arquitecto de edificaciones utiliza maquetas para probar aspectos del diseño, hay también una generalizada tendencia en la arquitectura de software a utilizar un recurso equivalente, los prototipos principalmente para probar la calidad de la comunicación con los usuarios, de las estructuras de datos y de algortimos críticos
     

  • Ingeniería de Software

  • Es la elaboración de programas y sistemas, cumpliendo con las Especificaciones de diseño y aplicando correcta y eficientemente los recursos y metodologías de la tecnología seleccionada.
    Principios de Calidad para los productos de Software

    Aspectos de Calidad de Software

    La siguiente lista ha sido tomada pricipalmente del libro Object-Oriented Software Construction [8]  incluyendo también criterios tomados de Código sin errores [7]. Los principios que se exponen a veces son contradictorios. Cada programador debe aplicar su juicio para balancear la importancia de los aspectos en conflicto y tomar sus decisiones de diseño.

  • Corrección (Cabalidad, exactitud): Debe hacer exactamente lo que fué especificado en el diseño.
      • Confiabilidad (Robustez): Debe minimizar intervenciones de operadores o usuarios, validar exhaustivamente las intervenciones requeridas
      • Precisión: no permitir ambiguedades en las escogencias de opciones a cargo de los usuarios  Contradicción: siempre hay la posibilidad de caer en errores del programador, pero se puede suponer que es más fácil controlar la competencia del programador que la variabilidad del comportamiento de los usuarios.
      • Extensibilidad y perfectibilidad: El sistema debe estar concebido de manera que se facilite la continuación de su desarrollo. Un sistema puede crecer por extensión de su aplicación a nuevos requerimientos, puede alterarse por adaptación a variaciones en los requerimientos, puede hacerse más robusto -más resistente a fallas- perfeccionando sus controles, puede hacerse más eficiente perfeccionando sus algoritmos y estructuras de datos, puede hacerse más cómodo perfeccionando su interfaz de comunicación con los usuarios, puede reproducirse generando nuevas versiones para diferentes ambientes de hardware/software según demandas de los usuarios. Por lo tanto, para facilitar el crecimiento un sistema debe complir con las siguientes propiedades:
        • Configurabilidad (cambios de escala, adaptabilidad a variedad de recursos y de usuarios)
        • Adaptabilidad: El diseño debería tomar en cuenta cambios previsibles en los requerimientos.
        • Intelegibilidad: Tanto en el diseño como la construcción del sistema hay que tener en cuenta que los programas no sólo son interpretados por el computador que los ejecuta sino también por humanos miembros de equipos de desarrollo y/o de mantenimiento. Por eso no basta que el sistema sea intelegible para sus diseñadores y constructores originales, sino que debe estar escrito y documentado de tal manera que también lo sea para cualquier otro profesional que pueda modificarlo o continuar su desarrollo.
      • Reusabilidad: Facilidad para ser parcial o totalmente aprovechable en la construcción de nuevas aplicaciones relacionadas.
      • Compatibilidad: Con otros sistemas relacionados y con los standares del dominio de la aplicación.
      • Eficiencia (Rapidez): Para aprovechamiento verdadero de la capacidad del hardware. (Influye la magnitud del problema. Por ej., no es lo mismo implementar un algoritmo de búsqueda en una tabla en la que se preveen no más de 10 entradas que en una en la que se preveen más de 50000)
      • Portabilidad: Facilidad para adaptarse a cambios de plataformas tanto de hardware como de software.
      • Comprobabilidad (Capaz de ser verificado)
      • Integridad: Resistencia a ser vulnerado
      • Facilidad de Uso
      

    Referencias
     
    1. Alcalde E., García M., Peñuelas S. Informática Básica. Serie Informática de Gestión. McGraw-Hill/Interamerica de España, 1988.
    2. Brookshear, J. Glenn. Introducción a las Ciencias de la Computación (Computer Science. An Overview), 4a. edición. Addison-Wesley Iberoamericana. 1995.
    3. Domingo, Carlos. Modelos Matemáticos de Simulación, Publicación 17-77. Instituto de Estadística Aplicada y Computación (IEAC), Facultad de Economía, ULA, Mérida, 1977.
    4. Fowler, M., Scott, K. UML Destilled. Applying the Standard Object Modeling Language. The Addison-Wesley Object Technology Series. 1997.
    5. Guilera Aguera, L.  Introducción a la Informática. Editorial Universitaria de Barcelona, 1983.
    6. Langefors, Borje. Sistemas de Información
    7. Maguirre, Steve. Código sin errores. McGraw-Hill, Microsoft Press, 1993.
    8. Meyer, B. Object-Oriented Software Construction.
    9. Montilva, Jonas. Desarrollo de Sistemas de Información. Burroughs de Venezuela y Consejo de Pubicaciones ULA, 1984.
    10. Paez Monzón, Gerard. Arquitectura y Organización del Computador.  Editorial Senda Sol, 1993.
    11. Tanenbaum, . Arquitectura de Computadores.
    12. Wirth, Niklaus. Estructuras de Datos + Algoritmos = Programas.