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.
-
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) |
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
Referencias
-
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.
-
Brookshear,
J. Glenn. Introducción a las Ciencias de la Computación
(Computer Science. An Overview), 4a. edición. Addison-Wesley
Iberoamericana. 1995.
-
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.
-
Fowler,
M., Scott, K. UML Destilled. Applying the Standard Object Modeling Language.
The Addison-Wesley Object Technology Series. 1997.
-
Guilera
Aguera, L. Introducción a la Informática. Editorial
Universitaria de Barcelona, 1983.
-
Langefors,
Borje. Sistemas de Información
-
Maguirre,
Steve. Código sin errores. McGraw-Hill, Microsoft Press,
1993.
-
Meyer,
B. Object-Oriented Software Construction.
-
Montilva,
Jonas. Desarrollo de Sistemas de Información. Burroughs de
Venezuela y Consejo de Pubicaciones ULA, 1984.
-
Paez Monzón,
Gerard. Arquitectura y Organización del Computador.
Editorial Senda Sol, 1993.
-
Tanenbaum,
. Arquitectura de Computadores.
-
Wirth,
Niklaus. Estructuras de Datos + Algoritmos = Programas.
|