You are on page 1of 429

APLICACIONES INFORMATICAS PRIMERO DE Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que

BACHILLERATO han de seguirse para resolver un problema. Un programa normalmente implementa


(traduce a un lenguaje de programación concreto) un algoritmo. Nótese que es la
secuencia de instrucciones en sí la que debe ser finita, no el número de pasos
realizados como la ejecución de ellas.
PROGRAMACIÓN
Los programas suelen subdividirse en partes menores (módulos), de modo que la
Se conoce como programación de computadores a la implementación de un complejidad algorítmica de cada una de las partes sea menor que la del programa
algoritmo en un determinado lenguaje de programación, conformando un programa. completo, lo cual ayuda al desarrollo del programa.
Mientras que un algoritmo se ejecuta en una máquina abstracta que no tiene
limitaciones de memoria o tiempo, un programa se ejecuta en una máquina real, Según Niklaus Wirth un programa está formado por algoritmos y estructura de
que sí tiene esas limitaciones. El lenguaje de programación puede ser de alto nivel, datos.
medio nivel o bajo nivel, en función del grado de abstracción. Se han propuesto diversas técnicas de programación, cuyo objetivo es mejorar
Tabla de contenidos: tanto el proceso de creación de software como su mantenimiento. Entre ellas se
pueden mencionar las programaciones lineales, estructurada, modular y orientada
1 Programas y algoritmos a objetos.

2 Compilación Compilación

3 Programación e ingeniería del software El programa escrito en un lenguaje de programación (comprensible por el ser
humano, aunque se suelen corresponder con lenguajes formales descritos por
4 Objetivos de la programación
gramáticas independientes del contexto) no es inmediatamente ejecutado en una
computadora. La opción más común es compilar el programa, aunque también
puede ser ejecutado mediante un intérprete informático.
Programas y algoritmos
El código fuente del programa se debe someter a un proceso de transformación pequeños para uso personal, y que dista de la realidad cuando se trata de grandes
para convertirse en lenguaje máquina, interpretable por el procesador. A este proyectos.
proceso se le llama compilación.
El proceso de creación de software desde el punto de vista de la Ingeniería tiene los
Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft siguientes pasos:
Windows) conlleva dos pasos. El primer paso se llama compilación (propiamente
 Reconocer la necesidad de un programa para solucionar un problema ó
dicho) y traduce el código fuente escrito en un lenguaje de programación
identificar la posibilidad de automatización de una tarea.
almacenado en un archivo a código en bajo nivel, (normalmente en código objeto no
directamente al lenguaje máquina). El segundo paso se llama enlazado (del inglés  Recoger los requisitos del programa. Debe quedar claro qué es lo que
link o linker) se junta el código de bajo nivel generado de todos los ficheros que se debe hacer el programa y para qué se necesita.
han mandado compilar y se añade el código de las funciones que hay en las  Realizar el análisis de los requisitos del programa. Debe quedar claro
bibliotecas del compilador para que el ejecutable pueda comunicarse con el cómo debe realizar el programa las cosas que debe hacer. Las pruebas
sistemas operativo y traduce el código objeto a código máquina. que comprueben la validez del programa se pueden especificar en esta
fase.
Estos dos pasos se pueden mandar hacer por separado, almacenando el resultado  Diseñar la arquitectura del programa. Se debe descomponer el programa
de la fase de compilación en archivos objetos (un típico.obj para Microsoft Windows, en partes de complejidad abordable.
O para Unix), para enlazarlos posteriormente, o crear directamente el ejecutable  Implementar el programa. Consiste en realizar un diseño detallado,
con lo que la fase de compilación se almacena sólo temporalmente. Un programa especificando completamente todo el funcionamiento del programa, tras
podría tener partes escritas en varios lenguajes (generalmente C, C++ y Asm), que lo cual la codificación debería resultar inmediata.
se podrían compilar de forma independiente y enlazar juntas para formar un único  Implantar (instalar) el programa. Consiste en poner el programa en
ejecutable. funcionamiento junto con los componentes que pueda necesitar (bases de
datos, redes de comunicaciones, etc.).
Programación e ingeniería del software
La Ingeniería del Software se centra en los pasos de planificación y diseño del
Existe una tendencia a identificar el proceso de creación de un programa
programa, mientras que antiguamente (programación artesanal) la realización de
informático con la programación, que es cierta cuando se trata de programas
un programa consistía únicamente en escribir el código.
Objetivos de la programación La programación es el arte de hacer que una computadora realice lo que nosotros
necesitemos. Para esto es necesario conozcamos su lenguaje, y como es que este
La programación de ordenadores debe perseguir tres objetivos fundamentales:
funciona, pero no solo esto debemos de crear mensajes claros y sencillos, es decir,
Corrección: Un programa es correcto si hace lo que debe hacer. Para tenemos que estructurar las órdenes que damos para que no puedan interpretarse
determinar si un programa hace lo que debe es muy importante especificar de otra manera.
claramente qué debe hacer el programa antes de desarrollarlo y una vez acabado
Para evitar este tipo de cosas tenemos la lógica, para poder darle orden a nuestras
compararlo con lo que realmente hace.
ideas y que estas funcionen de manera correcta.
Claridad: Es muy importante que el programa sea lo más claro y legible posible
para mejorar el mantenimiento del software. Cuando se acaba de escribir el código Definimos lógica como la ciencia que expone las leyes y formas del conocimiento
del programa, se deben buscar errores y corregirlos. Más concretamente, cuando científico. Se trata de una ciencia formal que no tiene contenido, sino se dedica al
el programa está concluido, es necesario hacerle ampliaciones o modificaciones, estudio de las formas válidas de interferencia. Es decir, se trata de los métodos y
según la demanda de los usuarios, esta labor puede ser llevada a cabo por el mismo los principios utilizados para distinguir el razonamiento correcto del incorrecto
programador que implementó el programa o por otros.
Pero ¿Cómo usaremos la lógica para programar? La respuesta es sencilla, antes de
Eficiencia: Debe consumir la menor cantidad de recursos posible. Normalmente programar, abrir nuestro IDE y “empezar a tirar código” sobre la marcha,
al hablar de eficiencia se suele hacer referencia al consumo de tiempo y/o desarrollaremos un diagrama de lo que será nuestro programa, este nos llevara a
memoria. darnos una idea del mensaje que le queremos da r a nuestra computadora para que
realice una tarea. (Este principio de diagramar antes de programar es equivalente
La eficiencia y la claridad de un programa pueden ser objetivos contrapuestos: se
a pensar antes de hablar).
puede conseguir mayor claridad sacrificando parte de la eficiencia o viceversa.
Pero hay que tener en cuenta que el tiempo del programador es caro, y que hoy en Para diagramar tenemos muchas y muy buenas herramientas en línea, para este
día el precio de los ordenadores es razonable y cada vez son más baratos. proceso cualquiera es buena, tal vez seas de la “vieja escuela” y te guste hacer
pseudo-código en una hoja. De esta manera aunque tengamos maneras distintas de
LÓGICA DE PROGRAMACIÓN
darle solución a un problema nos será sencillo explicarlas a otros, programarlas e
incluso comparar cual método es más óptimo.
Por poner un ejemplo, tal vez quieras hacer un programa que Calcular el factorial
de un número, mediante subprogramas.
Este sería el Pseudo-código, del programa, como vemos no hay necesidad de
respetar la sintaxis de ningún lenguaje, solo es necesario que entendamos lo que
vamos a programar y como lo vamos a programar.

Podemos ver otro ejemplo que no necesariamente tiene que ver con la
programación, pero servirá para tener una mejor idea de lo que es diagramar, esta
vez lo haremos con un diagrama de flujo.
veces eluden su responsabilidad. Y estudiar desde luego que no es algo opcional
como nos lo pintan, ¡ni mucho menos! La explicación que nos dan sobre la
Este sería un pequeño diagrama de lo que tendríamos que hacer si una lámpara no optatividad de la enseñanza sintetizada es algo así como "o estudias o fracasas", y
funciona. lo peor de todo esto es que es cierto.

En conclusión; utilizar la lógica ayudara a que tengamos programas sencillos y bien Esto, como he dicho antes, suponiendo que nuestra sociedad evoluciona hacia la
definidos, para hacer esto utilizaremos algún tipo de diagrama que nos permitirá dirección correcta. Desde luego lo no hace. Mirando al ser humano desde un punto
ver y probar que mensaje le daremos a nuestras máquinas. de vista biológico, todo esto simplemente lo hacemos por supervivencia. Ahora
hagamos un flashback hasta donde dije lo de “estudias o fracasas”. En el punto en el
Lógica educativa que dije eso alguien pudo pensar cosas como “si no quiero no estudio”. Nos
adaptamos para sobrevivir, y siempre sobreviviremos mejor con estudios. Nos
Sabemos perfectamente cómo es la educación hoy en día. Independientemente de
preparamos simplemente para una sociedad que nos reprime con leyes. El ser
nuestra edad todos sabemos perfectamente cómo funciona. Lleva años sin avanzar:
humano no está hecho para esto, solamente lo hacemos por nuestro instinto de
te levantas, vas a clase, sales ocasionalmente para un breve descanso, vuelves a
supervivencia y para eso, sinceramente, creo que viviríamos mejor cazando y
clase y te vas. Bien, pues esto es la mejor parte de nuestras vidas así que a
criándonos en la naturaleza, como en nuestros inicios. Nada de "¡Ay qué asco los
prepararse para lo que va a venir…
bichos!", estaríamos perfectamente acostumbrados a su presencia. Pero bueno,
Suponiendo que el hecho de ser educados sea algo correcto, parece que estemos nosotros a callar y a seguir los fallos pasos de nuestras anteriores generaciones.
criados en granjas en régimen de semi-estabulación (o en todo caso estabulación
libre), precisamente en las edades en las que más libertades necesitamos y encima PROGRAMACIÓN DE SOFTWARE
debemos dar gracias porque es la mejor etapa de nuestras vidas. En lo único que se
discierne la educación de lo que viene siendo la crianza de animales es en el pastor,
cuyo equivalente sería el profesor en la educación. Nuestro pastor profesor se
dedica en muchos casos a ignorarnos, mientras que al menos el pastor cuida a sus
animalitos. No os equivoquéis, no quiero decir que todos los maestros lo hagan,
pero seguro que los pastores sin excepción hacen a la perfección su trabajo. El
profesor no debe jugarse tanto al trabajar con personas entonces (¿no?) ya que a
accede directamente a los elementos físicos de la máquina como por ejemplo los
registros.

Por ejemplo son del tipo: Copia lo que hay en una posición concreta de la memoria a
un registro concreto o suma lo que hay en dos registros o copia lo que hay en un
registro a otra posición de memoria. La unidad de control (a la unidad central de
proceso o CPU) es quien es capaz de entender estas instrucciones sencillas y
controlar su ejecución. Como ya sabes, cada máquina tiene una configuración física
diferente, y también un lenguaje ensamblador diferente. Por ejemplo, es diferente el
En cualquier ordenador podemos distinguir dos elementos esenciales: el hardware ensamblador de un PC que el de un Mac.
y el software. El hardware es la parte física, los chips y los cables (la máquina)
mientras que el software son los programas que se ejecutan sobre esta pieza de
ingeniería física.

En este post nos dedicamos a dar unas pinceladas de este segundo elemento, el
software, y más en concreto en cómo se confeccionan los programas.

PROGRAMACIÓN DE SOFTWARE

Un programa informático es el resultado final de un proceso que empieza con el


planteamiento de un problema. Un programa es un conjunto de instrucciones
escritas con un lenguaje de programación y que serán ejecutadas en un ordenador.

Cada PC reconoce un lenguaje propio, denominado lenguaje máquina o


ensamblador, que consta de unas instrucciones muy a bajo nivel, en las cuales se
Etapas de la programación
En la primera etapa de la informática todos los programas se hacían utilizando el a código máquina. Lo que posteriormente se ejecuta es el código máquina que se ha
código máquina, pero aparte de que es muy complicado de programar y muy difícil generado.
de leer, una vez tenemos el programa sólo lo podemos ejecutar en un tipo de
máquina concreto. Si cambiamos de máquina perdemos todos nuestros programas. - Interpretación: El código se va ejecutando instrucción a instrucción, y una a una
se van traduciendo a código máquina. Quien lo hace es el intérprete (también otro
programa).

Es por estos factores que aparecen los lenguajes de programación de alto nivel,
donde se busca por una parte un lenguaje más fácil de escribir y leer, y por la otra
la portabilidad, es decir que podamos traer los programas de una máquina a otra.
Realmente lo que la máquina ejecuta continúa siendo código máquina, pero el
Hay un tercer mecanismo que es el de Java, que utiliza una solución mixta, primero
programador escribe en otro lenguaje. Hace falta, por lo tanto, una etapa de
con un compilador que no genera código máquina para la máquina física sino para
traducción intermedia. Esta traducción puede ser por dos mecanismos diferentes:
lo que se llama una máquina virtual (la famosa máquina virtual de Java). A este
la compilación y la interpretación:
código de máquina virtual se le llama byte-code. La máquina virtual en realidad es
un intérprete que después va ejecutando (traduciendo a código máquina real) el
- Compilación: Antes de ejecutar nuestro programa, lo compilamos. Lo que
byte-code instrucción a instrucción.
denominamos compilador (que es otro programa) primero reconoce si nuestro
código está escrito siguiendo las reglas del lenguaje y, si no hay errores, lo traduce
Fases intermedias de la programación
Pero entre el planteamiento del problema y el programa es necesaria otra fase, la ¿Por qué pasamos por esta fase intermedia? Porque así la persona que resuelve el
de concepción de un algoritmo. Un algoritmo es también la resolución del problema problema no tiene por qué saber nada sobre el lenguaje que se utilizará después
como una secuencia de acciones, pero no destinado a ser ejecutado en un para hacer la codificación al programa, y quizás ni siquiera sepa cuál será este
ordenador sino en lo que podríamos denominar máquina abstracta o ideal. lenguaje.

Un algoritmo está escrito en lenguaje humano, como el castellano (a diferencia Los algoritmos deben representar dos cosas: Las acciones que hace falta hacer y
del programa que está escrito en un lenguaje de programación) y está destinado a los objetos sobre los cuales se hacen estas acciones, es decir los objetos que el
que lo entienda el programador que después lo traducirá a cualquier lenguaje de algoritmo manipula. Para hacer esto de una manera que lo pueda entender
programación concreto como Java, C++, Python, Visual Basic. cualquier programador se hace utilizando lo que se llama pseudo-código, que no es
más que, en nuestro caso, castellano con unas reglas sintácticas concretas para
De esta forma, el algoritmo será la lista de las acciones necesarias porque se representar las acciones y los objetos.
resuelva el problema inicial, en nuestro caso escrito en castellano. La elección del
lenguaje en que codificamos el algoritmo dependerá de factores muy variados (y no
siempre técnicos), como pueden ser la facilidad por aprenderlo, facilidad por leerlo,
eficiencia, disponibilidad para la plataforma donde se ha de ejecutar, el precio y
más.

Resumiendo, los programas están escritos en un lenguaje de programación


concreto y los algoritmos en pseudo-código, un castellano modificado con ciertas
reglas sintácticas.

Ejemplo de programación

Problema: Calcular la media de dos números con una calculadora tradicional.


Objetos: Una calculadora (no científica).

Solución: LA DOCUMENTACIÓN DE PROGRAMAS

En la ejecución de un proyecto informático o un programa software se deben de


1. Poner en marcha la calculadora pulsando el botón ON
seguir una serie de pasos desde que se plantea el problema hasta que se dispone
2. Introducir el primer número
del programa o del a aplicación funcionando en el ordenador.
3. Pulsar la tecla "+"
4. Introducir el segundo número Los pasos son los siguientes:
5. Pulsar la tecla "/"
6. Teclear el número "2"  Análisis de factibilidad
7. Pulsar la tecla "="  Análisis de requerimientos
 Diseño del sistema
Esta secuencia de siete acciones nos describe como debemos hacer para resolver  Implementación
un determinado problema. Como podemos ver es muy similar a una receta de  Validación y pruebas
cocina. A un algoritmo debemos decirle los ingredientes y enseres que necesitamos  Explotación
(los objetos de qué hablábamos) y como se preparan (las acciones).  Mantenimiento

Cada uno de estos pasos debe de llevar asociado un documento. Estos documentos
son muy importantes ya que van a regir las fases del ciclo de vida del software y se
recogen los pasos seguidos en cada fase para su ejecución.

No es viable la solución mostrada por algunos programadores de ir directamente a


la implementación sin antes pararse en las fases 1, 2 y 3. Un trabajo deficiente en
estas fases supone una mala definición del problema y por tanto el sistema no
cumplirá seguramente con todos los requisitos. El diseño del sistema no será
Espero que esta explicación haya sido útil y te haya enseñado a entender un poco efectivo y los errores serán de difícil solución. Por lo tanto en la realización de las
más sobre cómo funciona un programa y los pasos necesarios para programar.
prácticas será obligado cumplimentar un formulario que guiará al alumno en la fase Descripción de la información (Descripción detallada del problema, incluyendo el
de análisis de requisitos y de diseño. HW y SW necesario)

 Representación del flujo de la información.


 Flujo de datos
EL DOCUMENTO DE ESPECIFICACIONES
 Flujo de control
Este documento tiene como objeto asegurar que tanto el desarrollador como el  Representación del contenido de la información.
cliente tienen la misma idea sobre las funcionalidades del sistema. Es muy  Descripción de la interfaz del sistema.
importante que esto quede claro ya que si no el desarrollo software no será
Descripción funcional (Descripción de cada función requerida, incluyendo
aceptable.
diagramas)
En el caso de este curso, es importante que el alumno y el profesor tengan la
 Partición funcional
misma idea de que hay que desarrollar en la práctica, si un alumno no desarrolla lo
que el profesor espera no obtendrá una nota adecuada con su expectativa. Por lo Descripción funcional
tanto es muy importante que las especificaciones del problema estén claras por
ambos.  Narrativa de procesamiento
 Restricciones/Limitaciones.
Existe una normativa referente a este tipo de documento, en Ingeniería del  Requisitos de rendimiento.
Software I se os dará con más detalle, aquí sólo se intenta que se entienda el  Restricciones de diseño
alcance e importancia de este documento.  Diagramas de soporte
Según la norma IEEE 830, un ERS debe contener los siguientes puntos: Descripción del control
 Introducción (Se definen los fines y los objetivos del software)  Especificación del control
 Referencia del sistema  Restricciones de diseño
 Descripción general
 Restricciones del proyecto Descripción del comportamiento (comportamiento del SW ante sucesos externos
y controles internos)
 Estados del sistema Durante la fase de implementación, cuando se está programando, es necesario
 Sucesos y acciones comentar convenientemente cada una de las partes que tiene el programa. Estos
comentarios se incluyen en el código fuente con el objeto de clarificar y explicar
Criterios de validación. cada elemento del programa, se deben de comentar las clases, las variables, los
 Límites de rendimiento módulos y en definitiva todo elemento que se considere importante.
 Clases de pruebas Esta documentación tiene como objeto hacer más comprensible el código fuente a
 Respuesta esperada del SW otros programadores que tengan que trabajar con él, ya sea porque forman parte
 Consideraciones especiales del grupo de desarrollo, el programa va a ser mantenido o modificado por otra
Bibliografía persona distinta al programador inicial. También resulta muy útil durante la
depuración y el mantenimiento del programa por el propio programador, al paso del
Apéndice. tiempo las decisiones se olvidan y surgen dudas hasta en el propio programador de
porqué se hicieron las cosas de una determinada manera y no de otra.
EL DOCUMENTO DE DISEÑO

En la fase de diseño se toman aquellas decisiones relativas a la futura OBJETO (PROGRAMACIÓN)


implementación, se decide la estructura de datos a utilizar, la forma en que se van
En el paradigma de programación orientada a objetos (POO, o bien OOP en inglés),
a implementar las distintas estructuras, el contenido de las clases (sus métodos,
un objeto es una unidad dentro de un programa de computadora que consta de un
los atributos,...), los objetos. También se definen las funciones, sus datos de entrada
estado y de un comportamiento, que a su vez constan respectivamente de datos
y salida, que tarea realizan, para alguna de especial interés el algoritmo que
almacenados y de tareas realizables durante el tiempo de ejecución. Un objeto
soluciona el problema.
puede ser creado instanciando una clase, como ocurre en la programación
El flujo del programa se define mediante una serie de gráficos que permiten orientada a objetos, o mediante escritura directa de código y la replicación otros
visualizar cual es la evolución del sistema software, en caso de orientación de objetos, como ocurre en la programación basada en prototipos.
objetos existen el diagrama de clases, el diagrama de importante tenerlo claro para
ello existen una serie de diagramas que permitan clarificar este asunto. Estos objetos interactúan unos con otros, en contraposición a la visión tradicional
en la cual un programa es una colección de subrutinas (funciones o
LA DOCUMENTACIÓN DELCÓDIGO FUENTE
procedimientos), o simplemente una lista de instrucciones para el computador. puede decir que para hacer operaciones aritméticas, de nada sirve por sí solo el
Cada objeto es capaz de recibir mensajes, procesar datos y enviar mensajes a tipo entero (int); para ello necesitamos variables (o constantes) con las que
otros objetos de manera similar a un servicio. operar.

En el mundo de la programación orientada a objetos (POO), un objeto es el Definición de objeto


resultado de la instanciación de una clase. Una clase es el anteproyecto que ofrece
la funcionalidad en ella definida, pero ésta queda implementada sólo al crear una En filosofía un objeto es aquello que puede ser observado, estudiado y aprendido, en
instancia de la clase, en la forma de un objeto. Por ejemplo: dado un plano para contraposición a la representación abstracta de ese objeto que se crea en la mente
construir sillas (una clase de nombre clase silla), entonces una silla concreta, en la a través del proceso de generalización. Un objeto en POO representa alguna entidad
que podemos sentarnos, construida a partir de este plano, sería un objeto de clase de la vida real, es decir, alguno de los objetos que pertenecen al negocio con que
silla. Es posible crear (construir) múltiples objetos (sillas) utilizando la definición de estamos trabajando o al problema con el que nos estamos enfrentando, y con los
la clase (plano) anterior. Los conceptos de clase y objetos son análogos a los de que podemos interactuar. A través del estudio de ellos se adquiere el conocimiento
tipo de datos y variable; es decir, definida una clase podemos crear objetos de necesario para, mediante la abstracción y la generalización, agruparlos según sus
esa clase, igual que disponiendo de un determinado tipo de dato (por ejemplo el tipo características en conjuntos. Estos conjuntos determinan las clases de objetos con
entero), podemos definir variables de dicho tipo: las que estamos trabajando. Primero existen los objetos; luego aparecen las clases
en función de la solución que estemos buscando. Ésta es la forma más común de
int a,b; adquirir conocimiento aunque no es la única. En ocasiones, cuando el observador es
un experto del negocio (o del problema), el proceso puede ser a la inversa y
(‘int’ es un tipo de dato y 'a' y 'b' son variables de tipo entero con las comenzar el análisis en una base teórica abstracta, sustentada por el conocimiento
que podemos operar) previo que da lugar primeramente a clases de objetos que satisfagan las
necesidades de la solución.
Para utilizar la funcionalidad definida en una clase en particular (salvo en las clases
abstractas), primeramente es necesario crear un objeto de esa clase. De la misma Estos conceptos son parte de la base teórica de la idea de objeto y clase utilizados
manera, para una persona que desea sentarse, las especificaciones para construir en la POO. Los objetos tienen características fundamentales que nos permiten
una silla serán de poca utilidad; lo que se necesita es una silla real construida a conocerlos mediante la observación, identificación y el estudio posterior de su
partir de esas especificaciones. Siguiendo con la analogía anterior, también se comportamiento; estas características son:
 Identidad Comportamiento
 Comportamiento
 Estado El comportamiento de un objeto está directamente relacionado con su funcionalidad
y determina las operaciones que este puede realizar o a las que puede responder
En las ramas de las ciencias de la computación más estrictamente matemáticas, el ante mensajes enviados por otros objetos. La funcionalidad de un objeto está
término objeto es usado en sentido puramente matemático para referirse a determinada, primariamente, por su responsabilidad. Una de las ventajas
cualquier "cosa". Esta interpretación resulta útil para discutir sobre teorías fundamentales de la POO es la reusabilidad del código; un objeto es más fácil de
abstractas, pero no es suficientemente concreta para servir como definición de un reutilizarse en tanto su responsabilidad sea mejor definida y más concreta.
tipo primitivo en discusiones de ramas más específicas, como en la programación,
que está más cerca de cálculos reales y el procesamiento de información. Una tarea fundamental a la hora de diseñar una aplicación informática es definir el
comportamiento que tendrán los objetos de las clases involucradas en la aplicación,
Identidad asociando la funcionalidad requerida por la aplicación a las clases adecuadas.

La identidad es la propiedad que permite diferenciar a un objeto y distinguirse de Estado


otros. Generalmente esta propiedad es tal, que da nombre al objeto. Tomemos por
ejemplo el "verde" como un objeto concreto de una clase color; la propiedad que da El estado de un objeto se refiere al conjunto de atributos y sus valores en un
identidad única a este objeto es precisamente su "color" verde. Tanto es así que instante de tiempo dado. El comportamiento de un objeto puede modificar el estado
para nosotros no tiene sentido usar otro nombre para el objeto que no sea el valor de este. Cuando una operación de un objeto modifica su estado se dice que esta
de la propiedad que lo identifica. tiene "efecto colateral".

En programación la identidad de los objetos sirve para comparar si dos objetos son Esto tiene especial importancia en aplicaciones que crean varios hilos de ejecución.
iguales o no. No es raro encontrar que en muchos lenguajes de programación la Si un objeto es compartido por varios hilos y en el transcurso de sus operaciones
identidad de un objeto esté determinada por la dirección de memoria de la estas modifican el estado del objeto, es posible que se deriven errores del hecho de
computadora en la que se encuentra el objeto, pero este comportamiento puede ser que alguno de los hilos asuma que el estado del objeto no cambiará (Véase
variado redefiniendo la identidad del objeto a otra propiedad. Condición de carrera).
Representación en las computadoras En otras palabras, los conceptos abstractos que no ocupen espacio de memoria en
tiempo de ejecución, no son, de acuerdo con esta definición, objetos. Ejemplos de
Los objetos, aunque son entidades conceptuales, dado el diseño de las estos conceptos son: patrones de diseño exhibidos por un conjunto de clases y
computadoras, se corresponde directamente con bloques de memoria de tamaño y tipos de datos en lenguajes de programación que utilizan tipos estáticos.
localización específicos. Esto ocurre porque los cálculos y el procesamiento de la
información en última instancia requieren de una representación en la memoria de Se llama objeto fantasma a un objeto que no es referenciado en un programa, y que
la computadora. En este sentido, los objetos son primitivas fundamentales por tanto no sirve a ningún propósito. En un lenguaje que posea un recolector de
necesarias para definir de forma precisa conceptos como referencias, variables y basura, este marcará la memoria ocupada por el objeto como libre, aunque ésta
vinculación de nombres. En ciencias de la computación se utiliza cotidianamente la todavía contendrá los datos del objeto hasta el momento en que sea reescrita.
interpretación más concreta de objeto en lugar de las más abstractas sin que esto
sea considerado un error. Objetos en la programación orientada a objetos

Es preciso hacer notar que aunque un bloque de memoria puede aparecer contiguo En programación orientada a objetos (POO), una instancia de programa (por
en un nivel de abstracción y no contiguo en otro, lo importante es que este aparece ejemplo un programa ejecutándose en una computadora) es tratada como un
contiguo para el programa, quien lo trata como un objeto. Por este motivo, los conjunto dinámico de objetos interactuando entre sí. Los objetos en la POO
detalles de implementación privados de un modelo de objetos no deben ser extienden la noción más general descrita en secciones anteriores para modelar un
expuestos al cliente del objeto, y estos pueden ser cambiados sin que se requieran tipo muy específico que está definido fundamentalmente por:
cambios al código cliente.
1. Atributos, que representan los datos asociados al objeto, o, lo que es lo
Los objetos en la computadora existen entonces, sólo dentro de contextos capaces mismo, sus propiedades o características. Los atributos y sus valores en
de reconocerlos; un espacio de memoria sólo contiene un objeto si un programa lo un momento dado, determinan el estado de un objeto.
trata como tal (por ejemplo, reservándolo para uso exclusivo de un procedimiento 2. Métodos, que acceden a los atributos de una manera predefinida e
específico y/o asociándole un tipo de dato). Así, el tiempo de vida de un objeto es el implementan el comportamiento del objeto.
tiempo durante el cual este es tratado como un objeto. Es por esto que los objetos
son entidades conceptuales, a pesar de su presencia física en la memoria de la Los atributos y métodos de un objeto están definidos por su clase, aunque (en un
computadora. lenguaje dinámico como Python o Ruby) una instancia puede poseer atributos que
no fueron definidos en su clase. Algo similar ocurre con los métodos: una instancia En las secciones a continuación se muestra cómo hacer esto utilizando dos
puede contener métodos que no estén definidos en su clase de la misma manera lenguajes de programación: C++ y Python.
que una clase puede declarar ciertos métodos como "métodos de clase", y estos
(en dependencia del lenguaje) podrán estar o no presentes en la instancia. LENGUAJES DE PROGRAMACION

En el caso de la mayoría de los objetos, los atributos solo pueden ser accedidos a  HISTORIA
través de los métodos; de esta manera es más fácil garantizar que los datos
permanecerán siempre en un estado bien definido (invariante de clase). Los primeros lenguajes de programación surgieron de la idea de Charles Babbage,
la cual se le ocurrió a este hombre a mediados del siglo XIX. Era un profesor
En un lenguaje en el que cada objeto es creado a partir de una clase, un objeto es matemático de la universidad de Cambridge e inventor inglés, que al principio del
llamado una instancia de esa clase. Cada objeto pertenece a un tipo y dos objetos siglo XIX predijo muchas de las teorías en que se basan los actuales ordenadores.
que pertenezcan a la misma clase tendrán el mismo tipo de dato. Crear una Consistía en lo que él denominaba la maquina analítica, pero que por motivos
instancia de una clase es entonces referido como instanciar la clase. técnicos no pudo construirse hasta mediados del siglo XX. Con él colaboro Ada
Lovedby, la cual es considerada como la primera programadora de la historia, pues
En casi todos los lenguajes de programación orientados a objeto, el operador realizo programas para aquélla supuesta máquina de Babagge, en tarjetas
"punto" (.) es usado para referirse o "llamar" a un método particular de un objeto. perforadas. Como la maquina no llego nunca a construirse, los programas de Ada,
Un ejemplo de lenguaje que no siempre usa este operador es C++, ya que para lógicamente, tampoco llegaron a ejecutarse, pero si suponen un punto de partida de
referirse a los métodos de un objeto a través de un puntero al objeto se utiliza el la programación, sobre todo si observamos que en cuanto se empezó a programar,
operador (->). los programadores utilizaron las técnicas diseñadas por Charles Babagge, y Ada,
que consistían entre otras, en la programación mediante tarjetas perforadas. A
Considérese como ejemplo una clase aritmética llamada Aritmética. Esta clase pesar de ello, Ada ha permanecido como la primera programadora de la historia. Se
contiene métodos como "sumar", "restar", "multiplicar", "dividir", etc. que calculan dice por tanto que estos dos genios de antaño, se adelantaron un siglo a su época,
el resultado de realizar estas operaciones sobre dos números. lo cual describe la inteligencia de la que se hallaban dotados.

Un objeto de esta clase puede ser utilizado para calcular el producto de dos En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de
números, pero primeramente sería necesario definir dicha clase y crear un objeto. diferencias, un dispositivo mecánico para efectuar sumas repetidas. Pero Babagge
se dedicó al proyecto de la máquina analítica, abandonando la máquina de Cuando surgió el primer ordenador, el famoso ENIAC (Electronic Numerical
diferencias, que se pudiera programar con tarjetas perforadas, gracias a la Integrator And Calculator), su programación se basaba en componentes físicos, o
creación de Charles Jacquard (francés). Este hombre era un fabricante de tejidos y sea, que se programaba, cambiando directamente el Hardware de la máquina,
había creado un telar que podía reproducir automáticamente patrones de tejidos, exactamente lo que sé hacia era cambiar cables de sitio para conseguir así la
leyendo la información codificada en patrones de agujeros perforados en tarjetas programación de la máquina. La entrada y salida de datos se realizaba mediante
de papel rígido. Entonces Babagge intento crear la máquina que se pudiera tarjetas perforadas.
programar con tarjetas perforadas para efectuar cualquier cálculo con una
precisión de 20 dígitos. Pero la tecnología de la época no bastaba para hacer  DEFINICIÓN
realidad sus ideas. Si bien las ideas de Babagge no llegaron a materializarse de
forma definitiva, su contribución es decisiva, ya que los ordenadores actuales Un Lenguaje de Programación es un conjunto de reglas, notaciones, símbolos y/o
responden a un esquema análogo al de la máquina analítica. En su diseño, la caracteres que permiten a un programador poder expresar el procesamiento de
máquina constaba de cinco unidades básicas: datos y sus estructuras en la computadora. Cada lenguaje posee sus propias
sintaxis. También se puede decir que un programa es un conjunto de órdenes o
 Unidad de entrada, para introducir datos e instrucciones. instrucciones que resuelven un problema específico basado en un Lenguaje de
 Memoria, donde se almacenaban datos y resultados intermedios. Programación.
 Unidad de control, para regular la secuencia de ejecución de las
operaciones.  CARACTERISTICAS
 Unidad Aritmético-Lógica, que efectúa las operaciones.
 Legibilidad: Consiste en si el lenguaje tiene una sintaxis sencilla, fáciles de
 Unidad de salida, encargada de comunicar al exterior los resultados.
leer y fáciles de compilar
Charles Babbage, conocido como el "padre de la informática" no pudo completar  Ortogonalidad: Permite combinar en una sola instrucción diversas
en aquella época la construcción del computador que había soñado, dado que características del lenguaje, de esta manera se consiguen programas
faltaba algo fundamental: la electrónica. El camino señalado de Babbage, no fue más cortos y más compactos.
nunca abandonado y siguiéndolo, se construyeron los primeros computadores.  Naturalidad para la aplicación: Consiste en el lenguaje proporcione
herramientas adecuadas para el fin para el que está pensado.
 Soporte a la abstracción: Solucionar tipos de problemas y no problemas problema de ingeniería complejo, o del programador que desarrolla un sistema
concretos. Debe permitir que el programador pueda crear funciones y operativo multiprocesador en ADA.
procedimientos.
 Entorno de programación: Los lenguajes han de ir acompañados de un En este trabajo, intentare clarificar estas distinciones tratando diferentes lenguajes
entorno donde programar. de programación en el contexto de cada área de aplicación diferente. El "diseñador
 Portabilidad de los programas: Es un lenguaje que permite crear del lenguaje" es también un término algo nebuloso. Algunos lenguajes (como APL y
programas que funcionen en cualquier maquina pertenezca a la LISP) fueron diseñados por una sola persona con un concepto único, mientras que
plataforma que quiera, distinto fabricante, etc. otros (FORTRAN y COBOL) son el producto de desarrollo de varios años realizados
por comités de diseño de lenguajes.

Los lenguajes de " Alto Nivel" son los más utilizados como lenguaje de
TENDENCIAS DE LOS LENGUAJES DE PROGRAMACIÓN programación. Aunque no son fundamentalmente declarativos, estos lenguajes
permiten que los algoritmos se expresen en un nivel y estilo de escritura fácilmente
El estudio de los lenguajes de programación agrupa tres intereses diferentes; el del legible y comprensible por otros programadores. Además, los lenguajes de alto
programador profesional, el del diseñador del lenguaje y del Implementador del nivel tienen normalmente las características de " Transportabilidad". Es decir,
lenguaje. están implementadas sobre varias máquinas de forma que un programa puede ser
fácilmente " Transportado " (Transferido) de una máquina a otra sin una revisión
Además, estos tres trabajos han de realizarse dentro de las ligaduras y sustancial. En ese sentido se llama "Independientes de la maquina". Ejemplos de
capacidades de la organización de una computadora y de las limitaciones estos lenguajes de alto nivel son PASCAL, APL y FORTRAN (para aplicaciones
fundamentales de la propia "calculabilidad". El término "el programador" es un científicas), COBOL (para aplicaciones de procesamiento de datos), SNOBOL (para
tanto amorfo, en el sentido de que camufla importantes diferencias entre distintos aplicaciones de procesamiento de textos), LISP y PROLOG (para aplicaciones de
niveles y aplicaciones de la programación. Claramente el programador que ha inteligencia artificial), C y ADA (para aplicaciones de programación de sistemas) y
realizado un curso de doce semanas en COBOL y luego entra en el campo del PL/I (para aplicaciones de propósitos generales).
procesamiento de datos es diferente del programador que escribe un compilador
en Pascal, o del programador que diseña un experimento de inteligencia artificial en Los "Lenguajes Ensambladores" y los "Lenguajes Maquina" son dependientes de la
LISP, o del programador que combina sus rutinas de FORTRAN para resolver un máquina. Cada tipo de máquina, tal como VAX de digital, tiene su propio lenguaje
maquina distinto y su lenguaje ensamblador asociado. El lenguaje Ensamblador es  Aumentar el soporte para la programación funcional en lenguajes
simplemente una representación simbólica del lenguaje maquina asociado, lo cual importantes utilizados comercialmente, incluida la programación funcional
permite una programación menos tediosa que con el anterior. Sin embargo, es pura para hacer el código más fácil de razonar y de paralelizar (tanto en
necesario un conocimiento de la arquitectura mecánica subyacente para realizar macro como en micro-niveles).
una programación efectiva en cualquiera de estos niveles lenguajes.  Construir lenguajes para apoyar la programación concurrente y
distribuida.
PARADIGMAS EN LENGUAJES DE PROGRAMACIÓN  Mecanismos para añadir al lenguaje verificación en cuanto a seguridad y
confiabilidad: chequeo sintáctico extendido, control de flujo de
Existen diversos lenguajes y paradigmas de programación para facilitar la tarea de información, seguridad de hilos.
programación en diferentes ámbitos. Por ejemplo, la programación orientada a  Mecanismos alternativos de modularidad: mixins, delegados, aspectos.
objetos es un paradigma dirigido al mejoramiento en la calidad del software por  Desarrollo de software orientado a componentes.
medio de la observación de aspectos tales como la corrección, robustez,
extensibilidad, compatibilidad y sobre todo la reusabilidad del software. Mayor énfasis en cuanto a distribución y movilidad.

La programación lógica, por su parte, es un paradigma orientado a la expresión de  Integración con bases de datos, incluyendo XML y bases de datos
los problemas en términos lógicos para su posterior solución por métodos de relacionales.
inferencia y técnicas lógicas.  Programación Orientada a Aspectos (AOP).
 Lenguajes que soporten programar sobre los procesadores de la GPU en
En la práctica, cada paradigma de programación es implementado a través de paralelo, como OpenCL.
diversos lenguajes. Solo como un ejemplo, la programación orientada a objetos
encuentra recipientes en lenguajes JAVA, C++, Eiffel, Objetive c, etc. CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN
TENDENCIAS ACTUALES Los lenguajes de programación son clasificados de muchas formas, dentro de estas
se encuentran:
La evolución de los lenguajes de programación continúa, tanto en la industria como
en investigación. Algunas de las tendencias actuales incluyen: CLASIFICACIÓN SEGÚN NIVEL DE ABSTRACCIÓN
 Los lenguajes de bajo nivel:

Son lenguajes de programación que se acercan al funcionamiento de una


computadora. El lenguaje de más bajo nivel es, por excelencia, el código máquina. A
éste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se
trabajan con los registros de memoria de la computadora de forma directa.

 Los lenguajes de medio nivel:

Hay lenguajes de programación que son considerados por algunos expertos como
lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas
características que los acercan a los lenguajes de bajo nivel pero teniendo, al
mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano
y, por tanto, de alto nivel.

 Los lenguajes de alto nivel:

Los lenguajes de alto nivel son normalmente fáciles de aprender porque están
formados por elementos de lenguajes naturales, como el inglés.

En BASIC, el lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR
= 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si
CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de
trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen
comprender un lenguaje natural, lo hacen en realidad de una forma rígida y
sistemática.
CLASIFICACIÓN SEGÚN PARADIGMA

 Paradigma imperativo:

Describe la programación como una secuencia instrucciones o comandos que


cambian el estado de un programa. El código máquina en general está basado en el
paradigma imperativo. Su contrario es el paradigma declarativo. En este paradigma
se incluye el paradigma procedimental (procedural) entre otros.

 Paradigma declarativo:

No se basa en el cómo se hace algo (cómo se logra un objetivo paso a paso), sino
que describe (declara) cómo es algo. En otras palabras, se enfoca en describir las  Paradigma orientado a objetos:
propiedades de la solución buscada, dejando indeterminado el algoritmo (conjunto
de instrucciones) usado para encontrar esa solución. Es más complicado de La programación orientada a objetos, intenta simular el mundo real a través del
implementar que el paradigma imperativo, tiene desventajas en la eficiencia, pero significado de objetos que contiene características y funciones. Los lenguajes
ventajas en la solución de determinados problemas. orientados a objetos se clasifican como lenguajes de quinta generación.

 Paradigma estructurado:

La programación estructurada se basa en una metodología de desarrollo de


programas llamada refinamientos sucesivos: Se plantea una operación como un
todo y se divide en segmentos más sencillos o de menor complejidad. Una vez
terminado todos los segmentos del programa, se procede a unificar las
aplicaciones realizadas por el pool de programadores.  Paradigma funcional:
Este paradigma concibe a la computación como la evaluación de funciones CLASIFICACIÓN SEGÚN LA FORMA DE EJECUCIÓN
matemáticas y evita declarar y cambiar datos. En otras palabras, hace hincapié en
la aplicación de las funciones y composición entre ellas, más que en los cambios de  Lenguaje compilados:
estados y la ejecución secuencial de comandos (como lo hace el paradigma
procedimental). Permite resolver ciertos problemas de forma elegante y los Los compiladores son aquellos cuya función es traducir un programa escrito en un
lenguajes puramente funcionales evitan los efectos secundarios comunes en otro determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina
tipo de programaciones. con código binario).

Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio
de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores,
sino hasta que luego de haber compilado el programa, ya no aparecen errores en el
código.

 Paradigma lógico:  Lenguaje interpretados:

Se basa en la definición de reglas lógicas para luego, a través de un motor de Se puede también utilizar una alternativa diferente de los compiladores para
inferencias lógicas, responder preguntas planteadas al sistema y así resolver los traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en
problemas. forma permanente el código objeto que se produce durante la corrida de
compilación para utilizarlo en una corrida de producción futura, el programador
LOGICA sólo carga el programa fuente en la computadora junto con los datos que se van a
procesar. A continuación, un programa intérprete, almacenado en el sistema
La programación lógica los programas se operativo del disco, o incluido de manera permanente dentro de la máquina,
consideran como una serie de aserciones  PROLOG convierte cada proposición del programa fuente en lenguaje de máquina conforme
lógicas. De esta forma, el conocimiento se vaya siendo necesario durante el proceso de los datos. No se graba el código objeto
representa mediante reglas, tratándose de para utilizarlo posteriormente.
sistemas declarativos.
 SIMULA

LENGUAJES DE PROGRAMACIÓN Definición: Es un lenguaje de programación orientada a objetos (OOP). Fue el


primero de los lenguajes orientado a objetos. Varios años después de su desarrollo,
 FORTRAN casi todos los lenguajes modernos comenzaron a utilizar sus principios de
orientación a objetos. Así fue como se popularizaron términos como clases, objetos,
Definición: Es un lenguaje de programación para el desarrollo de aplicaciones instancias, herencia, polimorfismo, etc.
matemáticas y científicas, fue el primer lenguaje de programación de alto nivel.
Estos lenguajes de alto nivel tienen entre otras las ventajas que pueden utilizarse Historia: Simula fue desarrollado por los noruegos Ole Johan Dahl y Kristen
en cualquier computadora y son más afines al lenguaje humano Nygaard en mayo de 1967, buscaban un lenguaje adecuado para la simulación de
eventos discretos (su nombre es una contracción de Simularían Languaje).
Historia: Su nombre proviene del inglés de: FORmula TRANslator.

Nace en los años 50, se utiliza principalmente para aplicaciones científicas y el


análisis numérico. Durante toda su vida ha pasado por varias versiones. Fue
diseñado por IBM en 1950. El idioma se hizo tan popular en los 60´s que otros
desarrolladores empezaron a producir sus propias versiones y esto llevó a una
gran cantidad de dialectos (en 1963 había 40 compiladores de FORTRAN diferentes).
En 1972 se creó FORTRAN66, como una forma de estandarizar la estructura del
lenguaje. Luego, en 1980, se estableció una norma oficial para el lenguaje avalada
por la Organización de Normas Internacionales (ISO). Tal versión es normalmente
conocida como FORTRAN 77 (dado que el proyecto final se completó en 1977). En
1991 surge FORTRAN90, un desarrollo mayor del idioma pero que incluye todos los
elementos de FORTRAN77 para facilitar la compatibilidad. Finalmente, en 1997, surge
FORTRAN95 o High Performance Fortran (HPF).
Definición: Logo es un lenguaje derivado de Lisp. Su característica más conocida es
el uso de los llamados «gráficos de tortuga», un sistema muy intuitivo de realizar
gráficos.

El Logo es uno de los pocos lenguajes de programación que utiliza el código en


español. Es un lenguaje de alto nivel, funcional y estructurado, muy fácil de
aprender, por ello se utiliza mucho en el aprendizaje de niños y jóvenes.

Historia: El Logo es un lenguaje de programación que nace en los años 60. Su


creador fue el matemático Seymour Papert, que creo la primera versión de este
lenguaje en el año 1967.

El Logo se creó con el fin de ser accesible a principiantes, pero a la vez ser capaz
de conseguir elaborar programas sofisticados y complejos hechos por expertos
programadores.

 MODULA

Su primer compilador estuvo disponible en 1964, para la serie 1100 de UNIVAC, si Definición: Es un descendente del lenguaje de programación pascal
bien hasta 1967 no adquirió una amplia funcionalidad. En la actualidad hay
disponibles diversas versiones freeware de su compilador. Historia: Se desarrolló en suiza a finales de 1970 por Niklauswirth, la misma
persona que diseño pascal. La principal innovación de modula más de pascal es un
Hoy en día, los creadores de Simula han desarrollado un nuevo lenguaje de sistema de módulos, que se utiliza para agrupar conjuntos de las declaraciones
programación, llamado Beta, que generaliza todas las construcciones del lenguaje respectivas en las unidades de programa, de ahí el nombre de modula.
en una única idea denominada patrón.
 C
 LOGO
Definición: Más conocido para desarrollar software de sistemas y aplicaciones. Es Definición: Es un sistema de desarrollo de software que incluye un compilador y un
un lenguaje muy eficiente en este campo. El lenguaje de programación C está entorno de desarrollo integrado (IDE) para el lenguaje de programación Pascal,
disponible multitud de plataformas diferentes, mucho más que cualquier otro desarrollado por Borland y liderado por Philippe Kahn.
lenguaje. Además, en principio, el lenguaje de programación C fue creado para
fomentar la programación independientemente de la máquina. Fue lanzado en 1983 para MS-DOS, CP/M, CP/M-86 y, posteriormente, para
Microsoft Windows, fue durante mucho tiempo la versión más extendida del lenguaje
Característica: Es un lenguaje simple, flexible porque permite programar con Pascal. También hubo una versión de corta vida para Apple Macintosh.
multitud de estilos, el lenguaje de programación C te impide programar
operaciones sin sentido, un reducido conjunto de palabras clave, tiene acceso a Historia: Desarrollado a principios de los años 70 por Nyklaus Wirth, en la
memoria de bajo nivel, permite que los datos relacionados se combinen y se Universidad Técnica de Zurich, Suiza; para enseñar programación estructurada.
manipulen como un todo, etc. Hay muchas originadas a partir de este primer desarrollo. Ejemplo: Turbo Pascal
7.0 de la compañía Borland.
Historia: Fue inventado por Ken Thompson y Dennis M. Ritchie. El lenguaje de
programación C fue una evolución del anterior lenguaje, el lenguaje B, que estaba El nombre fue elegido en honor de Blaise Pascal (1623-1662), un brillante científico
basado en el BCPL (Basic Combines Programming Language o Lenguaje de y matemático francés entre cuyos logros se encuentra la primera máquina
Programación Básica Combinada) que luego cambió su nombre por C. Su diseño calculadora mecánica en el mundo.
incluyó una sintaxis simplificada, la aritmética de direcciones de memoria (permite
al programador manipular bits, bytes y direcciones de memoria) y el concepto de
apuntador. Además, al ser diseñado para mejorar software de sistemas, se buscó
 BASIC
que generase códigos eficientes y uno portabilidad total, es decir el que pudiese
correr en cualquier máquina. Logrados los objetivos anteriores, C se convirtió en el
Definición: Es un lenguaje de programación que se creó con fines pedagógicos, era
lenguaje preferido de los programadores profesionales.
el lenguaje que utilizan las microcomputadoras de los años 80. Actualmente sigue
siendo muy conocido y tienen muchísimos dialectos muy diferentes al original.
 TURBO PASCAL
El BASIC es un lenguaje de programación muy amplio, con una sintaxis fácil,
estructura sencilla y un buen conjunto de operadores. No es un lenguaje específico,
es polivalente, potente, se aprende rápidamente, en poco tiempo cualquier usuario Definición: En informática, acrónimo de List Processing. Un lenguaje de
es capaz de utilizar casi la totalidad de su código. programación para ordenadores o computadora orientada a la generación de listas.
El LISP es un lenguaje interpretado, en el que cada expresión es una lista de
Historia: Los creadores del BASIC fueron John Goerge Kemeny y Thomas Eugene llamadas a funciones. Este lenguaje se sigue utilizando con frecuencia en
Kurtz en el año 1964. Fue inventado para permitir a los estudiantes escribir investigación y en círculos académicos, y fue considerado durante mucho tiempo el
programas usando terminales de computador de tiempo compartido. Con el BASIC lenguaje modelo para la investigación de la inteligencia artificial (IA), aunque el
se quiso hacer un lenguaje de programación mucho más sencillo que los que Prolog ha ganado terreno durante los últimos años.
existían por aquel entonces.
Historia: Desarrollado en 1959-1960 por John McCarthy y usado principalmente
Los principios que originaron la creación del BASIC eran: que fuese fácil de usar para manipular listas de datos o de símbolos. El lenguaje LISP constituyó un cambio
por todos, crear un lenguaje de programación de propósito general, que se le radical con respecto a los lenguajes procedurales (FORTRAN, ALGOL) que se
pudiese incorporar características avanzadas y siguiese siendo de fácil uso para desarrollaban por entonces.
los principiantes, ser interactivo, que los mensajes de error fuesen claros, que
respondiese rápidamente a los programas pequeños, que no fuese necesario tener  COBOL
conocimiento del hardware de la computadora, y que protegiese al usuario del
sistema operativo. Definición: (Common Business Oriented Languaje = lenguaje orientado a negocios
comunes). Se ha usado mucho desde los años 60 en aplicaciones de computadoras
El BASIC se basó otros dos lenguajes de programación el FORTRAN II y el Algol 60, aplicadas a la administración.
haciéndolo apropiado para el uso del computador a tiempo compartido y para la
aritmética de matrices. Su nombre proviene de la expresión inglesa Beginner"s All- Es considerado un lenguaje de fácil aprendizaje. Los programas deben contener
purpose Symbolic Instruction Code (BASIC), que significa en español código de cuatro secciones: identificación, entorno, datos y procedimientos. Una herencia de
instrucciones simbólicas de propósito general para principiantes. sus lejanos orígenes es el uso de una convención basada en las columnas (por
ejemplo, las sentencias deben estar entre las columnas 12 y 72), aunque versiones
 LISP modernas pueden usarse de otra forma.
Historia: Se inventó en los años 60. Nació con el objetivo de ser un lenguaje de Definición: Es el lenguaje más sencillo que posibilita el acceso a la informática
programación versátil, que pudiese ser usado en cualquier computador. teórica: descomposición modular, recursividad, punteros, etc.

En los años 60 era muy difícil que el software creado para una máquina concreta Historia: El lenguaje Pascal aparece por primera vez en 1971, diseñado por el
sirviese para otra diferente. Porque la mayoría de estas computadoras eran profesor Niklaus Wirth con el objetivo de facilitar el aprendizaje de la programación
incompatibles entre sí. Con el Cobol se quería conseguir este lenguaje de a sus alumnos. Pascal fue muy utilizado en la década de los 80 y los 90, y es el
programación que fue compatible con los principales modelos de computadoras. precursor de lenguajes como Delphi.

Se quería además conseguir con este nuevo lenguaje de programación que  CPL
estuviese destinado a los negocios, concretamente a lo que conocemos como
informática de gestión. Así nació el Cobol, como un lenguaje de programación Definición: Combined Programming Language(CPL) fue un lenguaje de
compatible con la mayoría de las computadoras y destinado principalmente a la programación desarrollado conjuntamente entre el Laboratorio de Matemática en la
gestión. Universidad de Cambridge y la Unidad Computación de la Universidad de Londres
durante la década de 1960. El esfuerzo colaborativo fue el responsable por el
 ALGOL "combinado" en el nombre del lenguaje (anteriormente el nombre era Cambridge
Programming Languaje). En 1963 estaba siendo implementado en la computadora
Definición: (ALGOritmic Language) Fue el primer lenguaje de programación de Titan, en Cambridge, y en la computadora Atlas, en Londres.
proceso estructurado de alto nivel. Fue orientado al uso de quienes participan en
proyectos científicos y matemáticos. Este lenguaje estuvo fuertemente influenciado por ALGOL 60 pero, en vez de ser
extremadamente pequeño, elegante y simple, CPL era grande, moderadamente
Historia: Fue presentado en 1958. Un grupo internacional de matemáticos europeos elegante y complejo. Fue intencional por el bien de la programación científica (en la
y americanos, pretendían crear un lenguaje común normalizado que les permitiera manera de FORTRAN y ALGOL) y también para la programación comercial (en la
el intercambio de algoritmos, aunque está en desuso, fue el primero que incorporo manera de COBOL). De hecho, puede ser visto como un esfuerzo similar a PL/I en
conceptos claves para la programación actual. esta manera, o esfuerzos posteriores como Ada.

 PASCAL
CPL resultó mucho para las pequeñas computadoras y las inmaduras tecnologías de El nombre fue propuesto por Rick Masciatti, al utilizarse C++ fuera de los
compilación de la época. Compiladores propiamente funcionales fueron escritos laboratorios donde se creó. Con el nombre de C++ que quiso dar a entender que el
probablemente alrededor de la década del 70, pero el lenguaje nunca fue muy C++ es una extensión del lenguaje C.
popular y pareció haber desaparecido sin rastros en la misma década.
 AWK
Un lenguaje posterior basado en CPL, llamado BCPL (por Basic CPL, aunque
originalmente Bootstrap CPL) fue un lenguaje mucho más simple diseñado Definición: Es un lenguaje de programación diseñado para el análisis y
principalmente como un lenguaje para programación de sistemas, particularmente procesamiento ya sean ficheros o flujo de datos.
para escribir compiladores. BCPL influenció, vía el lenguaje B, al lenguaje de
programación C, uno de los más importantes lenguajes hasta la fecha AWK es ejemplo de un lenguaje de programación que usa ampliamente el tipo de
datos de listas asociativas (es decir, listas indexadas por cadenas clave),
 C++ y expresiones regulares.

Definición: El C++ es un lenguaje orientado a objetos al que se le añadieron Historia: El nombre AWK deriva de las iniciales de los apellidos de sus autores:
características y cualidades de las que carecía el lenguaje C. Alfred Aho, Peter Weinberger, y Brian Kernighan. awk, cuando está escrito todo en
minúsculas, hace referencia al programa de Unix que interpreta programas
Historia: Fue creado en los años 80 por Bjarne Stroustrup basando en el lenguaje escritos en el lenguaje de programación AWK.
C. Para 1983 dicha denominación cambió a la de C++.
AWK fue una de las primeras herramientas en aparecer en Unix y ganó popularidad
De esta forma nació el C++ y como sucedía con el C depende mucho del hardware, como una manera de añadir funcionalidad a las tuberías de Unix. La implementación
tiene una gran potencia en la programación a bajo nivel, y se le añadieron de alguna versión del lenguaje AWK es estándar en casi todo sistema operativo tipo
elementos que nos permiten programar a alto nivel. El C++ es uno de los lenguajes Unix moderno. AWK es mencionado en las Single UNIX Specification
más potentes porque nos permite programar a alto y a bajo nivel, pero a su vez es (especificaciones básicas de UNIX) como una de las utilidades necesarias de todo
difícil de aprender porque es necesario hacerlo casi todo manualmente. sistema operativo Unix. Se pueden instalar implementaciones de AWK en casi todos
los demás sistemas operativos.
 PERL El desarrollo de Perl 5 continuó en 1994. La lista de correo perl5-porters se
estableció en mayo de 1994 para coordinar el trabajo de adaptación de Perl 5 a
Definición: Un lenguaje de programación diseñado por Larry Wall en 1987. Perl diferentes plataformas. Es el primer foro para desarrollo, mantenimiento y
toma características del lenguaje C, del lenguaje interpretado bourne shell, AWK, adaptación de Perl 5.
sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.
Perl 5 fue publicado el 17 de octubre de 1994. Fue casi una completa reescritura del
Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y intérprete y añadió muchas nuevas características al lenguaje, incluyendo objetos,
fue ampliamente adoptado por su destreza en el procesado de texto y no tener referencias, paquetes y módulos. A destacar, los módulos proveen de un
ninguna de las limitaciones de los otros lenguajes de script. mecanismo para extender el lenguaje sin modificar el intérprete. Esto permitió
estabilizar su núcleo principal, además de permitir a los programadores de Perl
Historia: Larry Wall comenzó a trabajar en Perl en 1987 mientras trabajaba como añadirle nuevas características.
programador en Unisys. El lenguaje se expandió rápidamente en los siguientes años.
Perl 2, publicado en 1988, aportó un mejor motor de expresiones regulares. Perl 3, El 26 de octubre de 1995, se creó el Comprehensive Perl Archive Network (CPAN).
publicado en 1989, añadió soporte para datos binarios CPAN es una colección de sitios web que almacenan y distribuyen fuentes en Perl,
binarios, documentación, scripts y módulos.
Hasta 1991 la única documentación de Perl era una simple (y cada vez más larga)
página de manual Unix. En 1991 se publicó Programming Perl (el libro del camello) y En 2008, Perl 5 continua siendo mantenido. Características importantes y algunas
se convirtió en la referencia de facto del lenguaje. Al mismo tiempo, el número de construcciones esenciales han sido añadidas, incluyendo soporte Unicode, Hilos
versión de Perl saltó a 4, no por marcar un gran cambio en el lenguaje, sino por (threads), un soporte importante para la programación orientada a objetos y otras
identificar a la versión que estaba documentada en el libro. mejoras.

Perl 4 trajo consigo una serie de lanzamientos de mantenimiento, culminando en  VISUAL BASIC
Perl 4.036 en 1993. En este punto, Larry Wall abandonó Perl 4 para comenzar a
trabajar en Perl 5. Perl 4 se quedaría en esa versión hasta hoy. Definición: Es uno de los lenguajes de programación que utiliza una interfaz visual
es decir que nos permite programar en un entorno gráfico, nos permite realizar un
gran número de tareas sin escribir código, simplemente realizando operaciones Definición: Es un lenguaje interpretado por el Windows Scripting Host de Microsoft.
con el ratón sobre la pantalla de la computadora. Su sintaxis refleja su origen como variación del lenguaje de programación Visual
Basic. Ha logrado un apoyo significativo por parte de los administradores de
Este lenguaje de programación es uno de los que más interés despiertan entre los Windows como herramienta de automatización, ya que, conjunta y paralelamente a
programadores. Porque este lenguaje de programación, el Visual Basic, le facilita la las mejoras introducidas en los sistemas operativos Windows donde opera
realización de tareas complejas en poco tiempo y a los que están comenzado a fundamentalmente, permite más margen de actuación y flexibilidad que el lenguaje
programar con Visual Basic ven como son capaces de realizar pequeños programas batch (o de proceso por lotes).
al poco tiempo de haber comenzado a estudiar este lenguaje de programación.
Historia: Desarrollado a finales de los años 1970 para el MS-DOS
Historia: El Visual Basic es un lenguaje de programación que proviene del BASIC. La
primera versión de este lenguaje de programación Visual Basic fue presentada en  PYTHON
el año 1991. La intención de este primer programa era simplificar la programación
utilizando un entorno de trabajo claro que permitiera crear interfaces gráficas Definición: Es un lenguaje de programación moderno, está orientado a objetos, es
facilitando así la programación. muy sencillo de usar a la vez potente y de código abierto.

Las sintaxis que utiliza este lenguaje de programación proviene del conocido BASIC, El Python nos permite separar el programa en módulos, este lenguaje tiene una
pero completada con comandos y códigos de otros lenguajes más modernos. Este gran variedad de módulos estándar que se pueden utilizar para programar, o
lenguaje de programación Visual Basic tiene un apartado dedicado a la incluso como una base para aprender a programar en Python.
Programación Orientada a Objetos.
El Python es un lenguaje interpretado lo que ahorra muchísimo tiempo en la
Es un lenguaje muy apropiado para el manejo de bases de datos. Muchas empresas creación de programas puesto que no es preciso compilar su código. El intérprete
lo utilizan para la gestión de sus bases de datos porque su utilización es sencilla y que usa el Python se puede utilizar de modo interactivo lo que nos permite
abundan los programadores de este lenguaje. experimentar con este lenguaje mientras programamos.

 VISUAL BASIC SCRIPT Este lenguaje es un lenguaje de programación que permite que podamos programar
en varios estilos: Programación orientada a objetos, programación estructurada,
programación funcional y programación orientada a aspectos. A esto se le conoce Con el Delphi podemos programar tanto controladores como servidores de
como lenguaje de programación multiparadigma. automatización. También podemos utilizar en el Delphi componentes visuales de
otros lenguajes de programación.
Historia: El Python es un lenguaje de programación que se le suele comparar con
otros lenguajes como el TLC, Perl, Scheme, Java o Ruby. Este lenguaje fue creado Este lenguaje produce aplicaciones en código máquina, por lo que la computadora
por Guido van Rossum basándose en otro lenguaje de programación, el ABC. El las interpreta inmediatamente y no precisa de un lenguaje interprete como es
nombre de este lenguaje proviene de los humoristas británicos Monty Python que necesario en otros lenguajes de programación.
tanto le gustaban a Guido van Rossum.
Historia: Es producido comercialmente por la empresa estadounidense aberform,
El Python es un lenguaje de programación de scripting. Los lenguajes scripting son adquirida en Mayo de 2008 por Embarcadero Technologies, una empresa del grupo
aquellos lenguajes que usan un intérprete en vez de ser compilados. Es opuesto al Thoma Cressey Bravo, en una suma que ronda los 30 millones de dólares. En sus
Perl, lenguaje con el que rivaliza amistosamente. La mayoría de usuarios del Python diferentes variantes, permite producir archivos ejecutables para Windows, Linux y
le consideran como un lenguaje más limpio y elegante a la hora de programar. la plataforma .NET.

 DELPHI CodeGear ha sido escindida de la empresa Borland, donde Delphi se creó


originalmente, tras un proceso que pretendía en principio la venta del
Definición: Es un lenguaje de programación que se creó con el propósito de agilizar departamento de herramientas para desarrollo.
la creación de software basándolo en una programación visual. En el Delphi se
utiliza una versión más actual del Pascal conocida como Object Pascal como Un uso habitual de Delphi (aunque no el único) es el desarrollo de aplicaciones
lenguaje de programación. visuales y de bases de datos cliente-servidor y multicapas. Debido a que es una
herramienta de propósito múltiple, se usa también para proyectos de casi cualquier
El Delphi es un lenguaje muy versátil se usa para casi cualquier proyecto como por tipo, incluyendo aplicaciones de consola, aplicaciones de web, servicios COM y
ejemplo servicios del sistema operativo, establecer comunicación entre un servidor DCOM, y servicios del sistema operativo.
web y un programa, aplicaciones de consola, conectividad con bases de datos, para
realizar aplicaciones visuales, etc. Delphi inicialmente sólo producía ejecutables binarios para Windows: Delphi 1 para
Win16 y con Delphi 2 se introdujo Win32. En la actualidad da más posibilidades.
 JAVA SCRIPT

Definición: Es un lenguaje de programación interpretado, lo que significa que no


El JavaScript es un lenguaje que diferencia entre mayúsculas y minúsculas, los
necesita ser compilado. Proviene del Java y se utiliza principalmente para la
espacios en blanco los tiene en cuenta.
creación de páginas web. El JavaScript es una mezcla entre el Java y el HTML.
 JAVA
Historia: Su creador fue Brendan Eich. Al principio se le llamo Mocha, más tarde
LiveScript, hasta que en el año 1995 se le llamo JavaScript. Definición: Es el lenguaje más usado del mundo. Este lenguaje está orientado a
objetos por lo que se caracteriza por permitir la reutilización de código. Este
Pero debemos saber que el JavaScript es un lenguaje muy diferente del Java. El
lenguaje se utiliza para el desarrollo de aplicaciones web y de escritorio, y también
JavaScript aunque es un lenguaje de programación orientado a objetos no tiene
java ha tenido un aumento muy significativo al llegar android ya que java es el
herencia, al contrario del Java que si la tiene, sino que el JavaScript es más bien un
lenguaje que más se usa para crear aplicaciones en este sistema operativo.
lenguaje orientado a eventos.
Java es famoso por las applets, pequeñas aplicaciones gráficas que se insertan
Otra diferencia entre ambos lenguajes es que mientras con el Java podemos crear
dentro de una página web. Uno de sus puntos fuertes es su capacidad
aplicaciones autónomas como son los applets (programas que podemos incluir en
multiplataforma, que permite que el mismo código seudo compilado se ejecute en
las páginas web), el JavaScript es un lenguaje que se incorpora dentro de la página
cualquier sistema (cualquier sistema con soporte Java, claro).
web, formando parte del código HTML sin el que no puede existir.
Historia: Creado por James Gosling en el año 1990. Su código es muy similar al del
Estos dos lenguajes tienen en común gran parte de su sintaxis, su estructura,
lenguaje C y C++ con un modelo de objetos mucho más sencillo. La diferencia entre
establecen jerarquía de objetos para poder definir sus propiedades, etc. Tienen
el Java y los lenguajes C y C++ es que el Java es un lenguaje de programación
muchos elementos comunes con los lenguajes C y C++.
plenamente orientado a objetos.
Podemos incluir el código del JavaScript en cualquier página web o documento
El Java supuso un gran avance en los lenguajes de programación, tiene una enorme
HTML, desde el punto de vista cliente como servidor en documentos PHP, Asp, etc.
potencia para el diseño orientado a objetos con un código sencillo en un entorno
Este código va incluido dentro de las etiquetas de HTML, de esta manera:
muy estable y agradable. El Java nos permite realizar aplicaciones que podemos Una ventaja importante de interpretar el código es que toda la memoria usada por
incluir directamente en páginas web. tu código es manejada por PHP, y el lenguaje automáticamente vacía esta memoria
cuando el script finaliza. Esto significa que las conexiones a la base de datos las
Estas aplicaciones se conocen con el nombre de applets. Estos son unos programas hará PHP por ti.
que se transfieren dinámicamente a través de Internet. Los applets tienen un
comportamiento inteligente, pueden reaccionar cuando un visitante entra en una Historia: El sistema fue desarrollado originalmente en el año 1994 por Rasmus
página web y cambian de forma. Todo esto ha posibilitado que el Java sea un Lerdorf como un CGI escrito en C que permitía la interpretación de un número
lenguaje interactivo entre el usuario y la aplicación. limitado de comandos.

La mayoría de los lenguajes de programación están compilados en código fuente, El sistema fue denominado Personal Home Page Tools y adquirió relativo éxito
mientras que el Java es compilado en un bytecode (código binario que contiene un gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus
programa ejecutable) que es ejecutado por una máquina virtual de Java. Esta programas en sus propias páginas. Dada la aceptación del primerPHP y de manera
máquina es la encargada de ejecutar todo el código de un programa hecho con adicional, su creador diseñó un sistema para procesar formularios al que le
Java. atribuyó el nombre de FI (Form Interpreter) y el conjunto de estas dos
herramientas, sería la primera versión compacta del lenguaje: PHP/FI.
 PHP
 ASP
Definición: Es un lenguaje que une interpretación y compilación para intentar
ofrecer a los programadores la unión entre rendimiento y flexibilidad. Definición: (Active Server Pages), es un lenguaje de programación de servidores
para generar páginas Web dinámicamente. Se conocen cuatro versiones de este
PHP compila una serie de instrucciones (llamadas opcodes) para tu código siempre lenguaje las 1.0, 2.0, 3.0 y la ASP.NET que se la conoce como la ASP Clásica.
que estas son accedidas. Estas instrucciones son entonces ejecutadas una por una
hasta que el script termina. Esto es diferente a la compilación de lenguajes como El lenguaje de programación ASP, nos ofrece las siguientes ventajas: separar el
C++ donde el código es compilado a un código ejecutable que es después ejecutado. código html del ASP, mayor facilidad para realizar cambios, fácil instalación y
Php es re compilado cada vez que se solicita un script. funcionamiento, mayor protección del código.
Historia: El lenguaje de programación ASP nace aproximadamente en el año 1996, español "C sostenido"), Con este nuevo lenguaje se quiso mejorar con respecto de
lo que ofrecía de nuevo este lenguaje era que se podía crear una página web en la los dos lenguajes anteriores de los que deriva el C, y el C++.
que se pudiese programar para que nos ofreciera unos determinados datos. Esto
era una gran ventaja porque en aquella época solo se podía dibujar una tabla e Con el C# se pretendió que incorporase las ventajas o mejoras que tiene el lenguaje
incluir unos pocos datos. JAVA. Así se consiguió que tuviese las ventajas del C, del C++, pero además la
productividad que posee el lenguaje JAVA y se le denomino C#.
Posteriormente se crea el lenguaje ASP.Net que es un lenguaje mucho más
complejo que el original ASP. Este lenguaje nos permite separar en las páginas Características: Algunas de las características del lenguaje de programación C#
webs la parte de diseño que contiene la página, no interviniendo para nada el código son: Su código se puede tratar íntegramente como un objeto. Su sintaxis es muy
HTML. Así el trabajo de los diseñadores y programadores es mucho más sencillo. similar a la del JAVA. Es un lenguaje orientado a objetos y a componentes. Armoniza
Cada cual se ocupa de su parte del trabajo dentro de la página web sin interferir en la productividad del Visual Basi
la parte de otro.

El ASP es un lenguaje de programación para servidores es adecuado para acceso a


bases de datos, lectura de ficheros, etc. Se vale de dos lenguajes de Script, como COMPILADORES, INTÉRPRETES Y MÁQUINAS VIRTUALES
son el VBScript y el JavaScript para que lo que programemos con el ASP sea
Cuando aprendemos a programar, normalmente escogemos o nos imponen un
visible.
determinado lenguaje de programación. Una de las primeras distinciones que es
 C# interesante conocer acerca de nuestro lenguaje es si el lenguaje se compila o se
interpreta.
Definición: También llamado C Sharp es un lenguaje que se caracteriza por su gran
sencillez a la vez que eficacia, creado a partir de C y C++, fue diseñado para crear En este artículo intentaremos explicar las diferencias entre ambas formas de
programas para la plataforma .NET. trabajar. Además, desde la aparición del lenguaje Java hace ya algunos años, ha
tomado fuerza otro planteamiento muy interesante: el de las llamadas máquinas
Historia: Fue creado por el danés Anders Hejlsberg que diseño también los virtuales.
lenguajes Turbo Pascal y Delphi. El C# (pronunciado en inglés "C Sharp" o en
NOTA: El término máquina virtual se utiliza en distintos contextos, por ejemplo, confeccionar programas, por lo general, el programa siempre se reduce a una
productos como VmWare o VirtualBox son software que permiten emular un serie de instrucciones en un fichero de texto.
ordenador, con su sistema operativo y sus aplicaciones dentro de otro. A este tipo
de aplicaciones se le suele llamar máquinas virtuales de sistema. En éste artículo A estos ficheros de texto les llamamos fuente. (Del inglés source. A menudo se
nos referimos a las máquinas virtuales de proceso, en las que se simula una utilizan expresiones como código fuente, ficheros fuente, etc.).
máquina imaginaria para ejecutar un único proceso
Sin embargo, sabemos que la CPU sólo entiende su propio lenguaje, que
En este sistema de máquinas virtuales (de proceso) se realiza una compilación y normalmente es extraordinariamente sencillo comparado el lenguaje de
posteriormente una interpretación. No es un concepto nuevo, pero sin duda, no ha programación que estamos aprendiendo. El lenguaje de la CPU es el código
tenido una aplicación práctica masiva hasta la llegada de la plataforma Java de Sun máquina (del inglés machine code). El código máquina son secuencias binarias que
Microsystems a principios de los 90 (hoy en día de Oracle), y algo después con la la CPU ejecuta como instrucciones sencillas. Por supuesto, cada modelo de CPU
plataforma .NET de Microsoft y su equivalente Mono para entornos unix/Linux. tiene su propio código máquina, aunque a veces, varios modelos de CPU tienen
También el sistema operativo Android utiliza este enfoque para la ejecución de sus lenguajes máquina compatibles.
aplicaciones en terminales con hardware muy distinto.
Los humanos expresamos la dinámica de un programa mediante un lenguaje de los
Antes de comentar cada técnica, hagamos hincapié de una manera muy básica en llamados de "alto nivel". Estos son lenguajes como C#, Java, Visual Basic, Delphi,
una serie de conceptos. Python, etc... casi cualquiera de los nombres que conoces. Decimos que un lenguaje
tiene un nivel más bajo cuanto más parecido es en su expresión al código máquina y
La confección de un programa se realiza escribiendo una serie de órdenes o al funcionamiento de la CPU, y de un nivel más alto cuanto más ajeno es al
instrucciones que siguen las normas de un lenguaje de programación. Estas funcionamiento de la CPU y más se acerca a la forma de razonar humana.
órdenes las escribimos en ficheros de texto plano, utilizando algún editor de textos
más o menos sencillo, o bien alguno de los editores especializados para Pues bien... si realizamos un programa escribiendo su fuente en un lenguaje de alto
programación. Incluso, algunos entornos de programación proporcionan sus nivel y la CPU sólo es capaz de ejecutar órdenes en el lenguaje de más bajo nivel
propias herramientas específicas para escribir programas, con muchas ventajas que existe (el código máquina), es obvio que es necesario realizar un proceso de
para el programador... pero por muy compleja que sea la herramienta para traducción desde el lenguaje de alto nivel al código máquina.
Es necesario tener en cuenta que cada orden de un lenguaje de alto nivel (por fichero que contiene una estructura interna que un determinado sistema operativo
ejemplo, una orden para imprimir "hola mundo" por la pantalla) se traduce en es capaces de entender, obtenemos un fichero binario ejecutable, o simplemente,
largas secuencias de instrucciones en código máquina (incluso varios miles). Lo "un ejecutable".
que para nosotros es una sola orden, para la CPU supone muchos pequeños pasos
extremadamente simples. El encargado de realizar esta traducción es un tipo de programa llamado
compilador. En su funcionamiento más básico, un compilador acepta uno o más
Tampoco podemos olvidarnos del sistema operativo. Los programas de aplicación ficheros fuente y si no contienen errores sintácticos produce un fichero binario
se apoyan no sólo en la CPU, sino que necesitan de la participación del sistema ejecutable, que un sistema operativo será capaz de cargar en memoria principal y
operativo para realizar muchas de sus labores. Así pues, muchas veces los pedir a la CPU que lo ejecute.
programas se hacen pensando que su destino va a ser una determinada CPU más
un determinado sistema operativo. A menudo, incluso hay que incluir en esta lista A menudo se compara a un compilador con un traductor de idiomas. Imagina un
otros programas como servidores de aplicaciones, sistemas gestores de bases de libro escrito en inglés. Para publicar su versión en español, una persona que
datos, librerías de código, etc. A este conjunto de requisitos necesarios para la conoce las reglas de los dos idiomas y dispone de la técnica para expresarse en
ejecución de un programa se le suele llamar a menudo plataforma. ambos va leyendo el libro en inglés frase a frase y va escribiendo su equivalente en
español.
COMPILAR

(NOTA: Aquí hablamos de la compilación tradicional, no a la compilación en un Compilación nativa y compilación cruzada
entorno de máquina virtual)
Es habitual que un desarrollador utilice para programar una determinada
La compilación consiste en tomar los ficheros fuente que conforman un programa plataforma... por ejemplo, el lenguaje C++ sobre una máquina con Windows.
y, línea por línea, traducir cada instrucción de alto nivel por varias instrucciones en Normalmente, el compilador generará código compilado que la CPU puede entender,
código máquina que realicen lo que la instrucción de alto nivel expresa. y que se puede ejecutar en la misma máquina con la participación de un sistema
operativo Windows.
Si se repite esa traducción para todas las líneas del código fuente, obtendremos un
conjunto de instrucciones máquina. Grabando esas instrucciones máquina en un No obstante, a veces, se desarrolla en una plataforma y se compila para que los
programas sean ejecutados en otra. A esto se le llama "compilación cruzada".
Interpretar traducirlo todo de golpe, sino que cada vez que este traductor ha entendido un
concepto, lo traduce al español y lo expresa.
El proceso de interpretación es bastante diferente al de compilación, pero su
resultado debería ser similar: la ejecución de un programa. Diferencias entre compilar e interpretar

El encargado de hacer esto es un programa llamado intérprete. A diferencia del La opción de compilar o interpretar no está siempre disponible. Algunos lenguajes
compilador, el intérprete de un lenguaje no produce una traducción a código típicamente se compilan y otros típicamente se interpretan. En muy pocas
máquina. El intérprete intenta realizar "al vuelo" lo que se expresa en los ficheros ocasiones podemos optar por una u otra indistintamente.
fuente. El intérprete contiene en su interior miles de porciones de código máquina,
que combinándolas adecuadamente pueden realizar las mismas tareas que expresa Por ejemplo, programas escritos en lenguajes como C o Pascal prácticamente
una orden escrita en el lenguaje de alto nivel. siempre se compilan, y otros como PHP o Python prácticamente siempre se
interpretan.
Cuando un programa es interpretado, el proceso que se sigue es el siguiente: el
intérprete obtiene una instrucción del fichero fuente y la realiza inmediatamente. En el siguiente cuadro se esquematizan algunas de las diferencias entre compilar e
Para ello, ejecuta en secuencia varias de esas porciones de código máquina que interpretar.
comentábamos antes, y que residen en el interior del intérprete. Cuando la CPU
termina la ejecución de esa secuencia, el resultado es que la CPU habrá hecho lo COMPILAR INTERPRETAR
que la línea de código fuente expresaba. -Genera un ejecutable -No genera un ejecutable
-El proceso de traducción se realiza una -El proceso de traducción se realiza en
Repitiendo esta secuencia para todas las líneas, el intérprete realiza lo que los
sola vez cada ejecución
ficheros fuente expresan... es decir, ejecuta el programa.
-La ejecución es muy rápida debido a -La ejecución es más lenta, ya que para
A menudo, se compara al intérprete con un traductor simultáneo de idiomas. Por que el programa ya ha sido traducido a cada línea del programa es necesario
ejemplo, cuando vemos en la tele a alguna personalidad expresándose en otro código máquina realizar la traducción
idioma y un traductor simultáneo nos traduce lo que esta persona dice "al vuelo". -El ejecutable va dirigido a una -No hay ejecutable, así que si existe un
Esta persona no espera a que el discurso de la personalidad concluya para plataforma concreta (una CPU, un intérprete para una plataforma concreta,
COMPILAR INTERPRETAR COMPILAR INTERPRETAR
sistema operativo, y quizá alguna otra el programa se podrá ejecutar en ambas. compilador no producirá un ejecutable. simultáneamente. Algún error sintáctico
consideración), siendo prácticamente Típicamente, los programas interpretados podría quedar enmascarado, si para una
imposible portarlo a otra. En ocasiones, son mucho más portables que los ejecución concreta no es necesario
si existe un compilador para otra compilados, ya que suelen existir traducir la línea que lo contiene. (Algunos
plataforma, se puede recompilar el intérpretes del mismo lenguaje en intérpretes son capaces de evitar esto)
programa, aunque normalmente esto distintas plataformas. Los programas que -Un programa compilado puede, por
plantea serias dificultades. Los se van a interpretar no suelen ser muy error, afectar seriamente a la
programas que se van a compilar suelen dependientes de su plataforma de -Un programa interpretado con un
estabilidad de la plataforma,
estar muy ligados a la plataforma de destino, siendo más portables. comportamiento torpe normalmente
comprometiendo la ejecución de los
destino. puede ser interrumpido sin dificultad, ya
otros procesos, por ejemplo,
que su ejecución está bajo el control del
-Los lenguajes interpretados no suelen acaparando la CPU, la memoria o algún
-Los lenguajes compilados suelen intérprete, y no sólo del sistema
ser muy dependientes de la plataforma de otro recurso, siendo a veces complicado
proporcionar al programador operativo.
destino, pero en contrapartida suelen ser para el sistema operativo interrumpir su
mecanismos más potentes y flexibles, a
menos flexibles y potentes que los ejecución.
costa de una mayor ligazón a la
compilados.
plataforma.
EL ENFOQUE DE MÁQUINA VIRTUAL
-Una vez compilado el programa, el
-El código fuente es necesario en cada Hemos visto que los programas interpretados o compilados tienen distintas
código fuente no es necesario para
ejecución, así que no puede permanecer ventajas e inconvenientes. En un intento de combinar lo mejor de ambos mundos,
ejecutarlo, así que puede permanecer en
en secreto durante la década de los 90 surge con fuerza el enfoque de máquina virtual. Los
secreto si se desea.
principales lenguajes abanderados de esta tecnología son, por un lado, el lenguaje
-Los errores sintácticos se detectan -Los errores sintácticos se detectan
Java de Oracle, y por otro, los lenguajes de la plataforma .NET de Microsoft: Visual
durante la compilación. Si el fuente durante la ejecución, ya que traducción y
Basic.NET y C# principalmente. También los sistemas Android se basan en este
contiene errores sintácticos, el ejecución se van haciendo
enfoque.
La filosofía de la máquina virtual es la siguiente: el código fuente se compila,  Estabilidad: El código intermedio no es ejecutado por una CPU real
detectando los errores sintácticos, y se genera una especie de ejecutable, con un directamente, sino por una CPU virtual: realmente, por el intérprete de la
código máquina dirigido a una máquina imaginaria, con una CPU imaginaria. A esta máquina virtual, que es un programa y no un chip real. Esto permite un
especie de código máquina se le denomina código intermedio, o a veces también mayor control sobre este código, facilitando la labor de impedir que un
lenguaje intermedio, p-code, o byte-code (según quién nos lo cuente). código descontrolado afecte a la estabilidad de la plataforma real.

Como esa máquina imaginaria no existe, para poder ejecutar ese ejecutable, se Para entender algo mejor este concepto, podemos fijarnos, por ejemplo, en el
construye un intérprete. Este intérprete es capaz de leer cada una de las lenguaje JAVA. Imaginemos que disponemos de dos ordenadores: uno con un
instrucciones de código máquina imaginario y ejecutarlas en la plataforma real. A sistema operativo Windows y un procesador intel de 64 bits y el otro con un
este intérprete se le denomina el intérprete de la máquina virtual. sistema operativo Linux y un procesador AMD de 32 bits.

¿Y para qué todo este montaje?  En el primer ordenador instalamos un compilador de Java y una máquina
virtual de Java específicos para Windows 64 bits.
Pues esta pregunta puede responderse desde varios puntos de vista, pero se puede  En el segundo hacemos lo mismo, pero con un compilador y máquina
afirmar que este esquema aporta muchas de las ventajas de la compilación y la virtual específicos para Linux 32 bits.
interpretación, deshaciéndose de algunos inconvenientes.  Confeccionamos un programa sencillo (por ejemplo, que escriba "Hola
Mundo" por la pantalla) escrito en Java en el primer ordenador y lo
Principalmente se pueden recalcar: compilamos, generando un ejecutable intermedio. Si utilizamos la máquina
virtual del primer ordenador para ejecutar ese código intermedio,
 Portabilidad y rapidez: El código intermedio ya está libre de errores
comprobaremos que el programa escribe, en efecto "Hola Mundo" por la
sintácticos, y es un código muy sencillo (al estilo del código máquina). Si
pantalla.
existe un intérprete para este código en distintas plataformas, el mismo
 Si cogemos ese ejecutable intermedio lo llevamos tal cual a la segunda
código se puede ejecutar en cada una de ellas. Además, la construcción de
máquina, podremos utilizar la máquina virtual instalada allí para
este intérprete será relativamente sencilla y su ejecución más rápida, ya
ejecutarlo, y comprobaremos que el resultado es exactamente el mismo:
que no ha de comprobar la sintaxis.
"Hola Mundo".
Este sistema fue también utilizado por los juegos Java de los
teléfonos móviles o las PDA de hace unos años. Distintas marcas de
teléfonos móviles eran capaces de ejecutar el mismo juego, aun
cuando cada teléfono tuviera una CPU y un sistema operativo distinto
[Si, los teléfonos móviles, incluso los antiguos, tienen CPU y un
rudimentario sistema operativo. Multitud de cacharros de hoy en día
los tienen: reproductores de DVD, de MP3, cajeros automáticos, GPS,
incluso algunos electrodomésticos].
Los smartphones y las tablets se parecen más a un ordenador que a
un teléfono. El sistema Android, por ejemplo, permite que una misma
aplicación programada en Java se ejecute sobre multitud de
dispositivos con hardware muy distinto. Eso es porque el proceso de
compilación se realiza generando un ejecutable para una imaginaria
máquina virtual llamada Dalvik (o ART, en las últimas versiones), y
cada dispositivo trae de fábrica un intérprete que ejecuta el
programa compilado para Dalvik sobre el hardware real.

Veamos las ventajas que tiene este enfoque de máquina virtual de proceso
comparado con la compilación o la interpretación. Vamos a retomar la tabla
anterior, pero añadiendo la máquina virtual.
Compilar Interpretar Máquina virtual
otra compilados, ya que suelen
Compilar Interpretar Máquina virtual consideración), existir intérpretes del mismo
-Genera una especie de ejecutable, siendo lenguaje en distintas
-Genera un
-No genera un ejecutable pero portable entre plataformas, prácticamente plataformas. Los programas
ejecutable
dirigido a una CPU imaginaria. imposible que se van a interpretar no
-Se realiza una sola traducción a portarlo a otra. suelen ser muy dependientes
-El proceso de
código intermedio, y una En ocasiones, si de su plataforma de destino,
traducción se -El proceso de traducción se
interpretación muy rápida del existe un siendo más portables.
realiza una sola realiza en cada ejecución
código intermedio en cada compilador para
vez
ejecución. otra plataforma,
-La ejecución es se puede
muy rápida -La ejecución es más lenta, Ya -La ejecución no es tan Rápida recompilar el
Debido a que el que para cada línea del como en la Compilación tradicional programa,
programa Ya ha Programa es necesario ni tan lenta como en la aunque
sido traducido a realizar la traducción. interpretación. normalmente
código máquina. esto plantea
serias
-El ejecutable va -No hay ejecutable, así que si
-El ejecutable va dirigido a una dificultades. Los
dirigido a una existe un intérprete para una
CPU imaginaria. Se puede programas que
plataforma plataforma concreta, el
transportar a una plataforma para se van a
concreta (una programa se podrá ejecutar
la cual exista una "máquina compilar suelen
CPU, un sistema en ambas. Típicamente, los
virtual" (el intérprete de código estar muy
operativo, y programas interpretados son
intermedio). ligados a la
quizá alguna mucho más portables que los
plataforma de
Compilar Interpretar Máquina virtual Compilar Interpretar Máquina virtual
destino. sintácticos se detectan durante la ejecución, detectan durante la compilación.
-Los lenguajes detectan ya que traducción y ejecución
compilados durante la se van haciendo
suelen -Los lenguajes interpretados compilación. Si simultáneamente. Algún Error
-La plataforma de destino es el fuente sintáctico podría quedar
proporcionar al no suelen ser muy
virtual. Así pues, los programas contiene enmascarado, si para una
programador dependientes de la plataforma
son dependientes de esta errores ejecución concreta no es
mecanismos de destino, pero en
plataforma virtual, que es emulada sintácticos, el necesario traducir la línea
más potentes y contrapartida suelen ser
luego sobre plataformas reales compilador no que lo contiene. (Algunos
flexibles, a costa menos flexibles y potentes
por la "máquina virtual". producirá un intérpretes son capaces de
de una mayor que los compilados.
ligazón a la ejecutable. evitar esto)
plataforma. -Un programa -Un programa interpretado
-Una vez compilado con un comportamiento torpe
compilado el puede, por normalmente puede ser
programa, el error, afectar interrumpido sin dificultad, ya -Un programa con un
código fuente no -El código fuente es necesario seriamente a la que su ejecución está bajo el comportamiento torpe es
-El código fuente no es necesario estabilidad de la control del intérprete, y no ejecutado sobre la máquina
es necesario en cada ejecución, así que no
para la ejecución, sólo el código plataforma, sólo del sistema operativo. virtual, que tiene un control
para ejecutarlo, puede permanecer en
intermedio. comprometiendo absoluto sobre él, con lo que no se
así que puede secreto.
permanecer en la ejecución de suele comprometer la estabilidad
secreto si se los otros de la plataforma real.
desea. procesos, por
ejemplo,
-Los errores -Los errores sintácticos se -Los errores sintácticos se
acaparando la
Compilar Interpretar Máquina virtual 1. La plataforma Java, originalmente desarrollada por Sun Microsystems, y
hoy propiedad de Oracle dispone de versiones para sistemas operativos
CPU, la memoria
Linux, Windows, Mac y Solaris, y para varias CPU. Cabe mencionar que
o algún otro
existen otras implementaciones de Java que no han sido desarrolladas
recurso, siendo
por Oracle, aunque en su mayor parte muy minoritarias y experimentales,
a veces
con la excepción de la máquina virtual de Android.
complicado para
el sistema
operativo
interrumpir su 2. La plataforma Android utiliza Java como lenguaje de referencia, y también
ejecución. el enfoque de máquina virtual, pero esa máquina virtual imaginaria no es
la misma que la de Oracle. La de oracle se llama JVM (Java Virtual
Machine) enfocada principalmente a ordenadores. La de Android se llama
Dalvik (o ART, una máquina nueva y compatible, en las últimas versiones -
En definitiva, compilación e interpretación son las opciones típicas para los
4.4 en adelante), y tiene una estructura distinta. Es decir, el compilador
lenguajes de programación más tradicionales, presentando cada una de ellas sus
Java de Oracle compila para JVM, y su código es portable entre las
ventajas e inconvenientes. El enfoque más moderno es el de máquina virtual, en el
plataformas con JVM: Windows, Linux, Solaris y Mac. Los programas de
que se realiza una compilación cuya plataforma de destino es una máquina
Android, escritos también en Java compilan para Dalvik, y se ejecutan en
imaginaria o virtual, y el ejecutable intermedio es posteriormente interpretado en
los dispositivos con un intérprete de Dalvik: los móviles y tablets Android.
cada ejecución. El mundo de la programación va poco a poco pero sin pausa
adoptando cada vez más este enfoque, ya que presenta un buen compromiso entre Por otro lado, y aunque no es muy frecuente, también es posible hacer
portabilidad y estabilidad. Este enfoque es el adoptado por los lenguajes más programas compilados en android para la la plataforma nativa, es decir,
modernos, como Java, Visual Basic, C#, J#, y cada día surgen versiones de otros para el hardware original, sin pasar por el intérprete, y en ese caso se
lenguajes que funcionan según este esquema, como Scala, F# o IronPython. suelen utilizar los lenguajes C o C++.

NOTAS:
3. La plataforma .NET, originalmente desarrollada por Microsoft dispone de  Cualitativos: Son aquellos en los que se describen los pasos utilizando
versiones que en principio van orientadas sólo a sistemas operativos palabras.
Windows. Es necesario mencionar que existen otras implementaciones de  Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos
.NET que no han sido desarrolladas por Microsoft y que permiten el para definir los pasos del proceso.
desarrollo y la ejecución en otros sistemas operativos. Es muy de
destacar la plataforma Mono, que permite la ejecución y el desarrollo de
proyectos .NET en otros sistemas operativos distintos de Windows. Con la Lenguajes Algorítmicos
participación de los productos de la empresa Xamarin, puede
desarrollarse con el enfoque de la plataforma .net también para iOS y
Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para
Android.
describir de manera explícita un proceso.
METODOLOGIA DE LA PROGRAMACIÓN
Tipos de Lenguajes Algorítmicos

 Gráficos: Es la representación gráfica de las operaciones que realiza un


ALGORITMOS algoritmo (diagrama de flujo).

DEFINICIÓN: La palabra algoritmo se deriva de la traducción al latín de la palabra


árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un
tratado sobre manipulación de números y ecuaciones en el siglo IX.

Un algoritmo es una serie de pasos organizados que describe el proceso que se


debe seguir, para dar solución a un problema específico.

¿TIPOS DE ALGORITMOS…?

Existen dos tipos y son llamados así por su naturaleza:


 No Gráficos: Representa en forma descriptiva las operaciones que debe en un determinado lenguaje de programación y por último ejecutar el programa en
realizar un algoritmo (pseudocodigo). el computador el cual refleja una solución al problema inicial. Esto es a grandes
rasgos lo que hace el programador de computadores.
INICIO
Edad: Entero La parte que corresponde a este manual es la de: “Dado un determinado problema
ESCRIBA “cuál es tu edad?” debemos idear una solución y expresarla usando un ALGORITMO”.
Lea Edad
METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS POR MEDIO DE
SI Edad >=18 entonces
COMPUTADORA
ESCRIBA “Eres mayor de Edad”
FINSI  DEFINICIÓN DEL PROBLEMA
ESCRIBA “fin del algoritmo”
FIN Esta fase está dada por el enunciado del problema, el cual requiere una
definición clara y precisa. Es importante que se conozca lo que se desea
Metodología para la creación de algoritmos
que realice la computadora; mientras esto no se conozca del todo no tiene
mucho caso continuar con la siguiente etapa.
Ahora que ya sabemos qué es un algoritmo, vamos a estudiar la metodología para la
solución de un problema mediante un ordenador. La creación de un algoritmo y su  ANÁLISIS DEL PROBLEMA
programación es una etapa, pero como programador debes realizar varios pasos
antes y después.
Una vez que se ha comprendido lo que se desea de la computadora, es
necesario definir:
El computador es una máquina que por sí sola no puede hacer nada, necesita ser
o Los datos de entrada.
programada, es decir, introducirle instrucciones u órdenes que le digan lo que tiene
o Cuál es la información que se desea producir (salida)
que hacer. Un programa es la solución a un problema inicial, así que todo comienza
o Los métodos y fórmulas que se necesitan para procesar los
allí: en el Problema. El proceso de programación es el siguiente: Dado un
datos.
determinado problema el programador debe idear una solución y expresarla
usando un algoritmo (aquí es donde entra a jugar); luego de esto, debe codificarlo
Una recomendación muy práctica es el de colocarse en el lugar de la Empecemos por conocer las reglas para cambiar fórmulas matemáticas a
computadora y analizar qué es lo que se necesita que se ordene y en qué expresiones válidas para la computadora, además de diferenciar constantes e
secuencia para producir los resultados esperados. identificadores y tipos de datos simples.

 DISEÑO DEL ALGORITMO Tipos De Datos

Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple
Las características de un buen algoritmo son:
carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la
o Debe tener un punto particular de inicio.
naturaleza del conjunto de valores que puede tomar una variable.
o Debe ser definido, no debe permitir dobles interpretaciones.
o Debe ser general, es decir, soportar la mayoría de las variantes
que se puedan presentar en la definición del problema.
o Debe ser finito en tamaño y tiempo de ejecución.
o Diseño del Algoritmo.
o Prueba de escritorio o Depuración

Se denomina prueba de escritorio a la comprobación que se hace de un algoritmo


Tipos de Datos Simples
para saber si está bien hecho. Esta prueba consiste en tomar datos específicos
como entrada y seguir la secuencia indicada en el algoritmo hasta obtener un
Datos Numéricos: Permiten representar valores escalares de forma numérica,
resultado, el análisis de estos resultados indicará si el algoritmo está correcto o si
esto incluye a los números enteros y los reales. Este tipo de datos permiten
por el contrario hay necesidad de corregirlo o hacerle ajustes.
realizar operaciones aritméticas comunes.
PARA EL PROCESO DE ALGORITMOS ES NECESARIO APRENDER A DESARROLLAR
UN CONJUNTO DE ELEMENTOS.
Datos lógicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya
que representan el resultado de una comparación entre otros datos (numéricos o
Todos estos elementos con los cuales se construyen dichos algoritmos se basan en alfanuméricos).
una disciplina llamada: Programación Estructurada.
LAS CONSTANTES, LAS VARIABLES Y LAS EXPRESIONES EN LA PROGRAMACIÓN
Datos alfanuméricos (string): Es una secuencia de caracteres alfanuméricos que ASÍ COMO SU CLASIFICACIÓN.
permiten representar valores identificables de forma descriptiva, esto incluye
nombres de personas, direcciones, etc. Es posible representar números como
alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible CONSTANTES
hacer operaciones con ellos. Este tipo de datos se representan encerrados entre
comillas. Una constante es un dato numérico o alfanumérico que no cambia durante la
ejecución del programa.
Identificadores: Los identificadores representan los datos de un programa
Ejemplo:
(constantes, variables, tipos de datos). Un identificador es una secuencia de
caracteres que sirve para identificar una posición en la memoria de la pi = 3.1416
computadora, que permite acceder a su contenido.
Ejemplo: VARIABLE
» Nombre
» Num_hrs Es un espacio en la memoria de la computadora que permite almacenar
» Calif2 temporalmente un dato durante la ejecución de un proceso, su contenido puede
Reglas para formar un identificador cambiar durante la ejecución del programa.

 Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no deben Para poder reconocer una variable en la memoria de la computadora, es necesario
contener espacios en blanco. darle un nombre con el cual podamos identificarla dentro de un algoritmo.
 Letras, dígitos y caracteres como la subraya ( _ ) están permitidos
Ejemplo:
después del primer carácter.
 La longitud de identificadores puede ser de varios caracteres. Pero es área = pi * radio ^ 2
recomendable una longitud promedio de 8 caracteres.
 El nombre del identificador debe dar una idea del valor que contiene. Las variables son: el radio, el área y la constate es pi.
Clasificación de las Variables  Variables de Trabajo: Variables que reciben el resultado de una
operación matemática completa y que se usan normalmente dentro de un
programa.
Ejemplo:
Suma = a + b /c
 Contadores: Se utilizan para llevar el control del número de ocasiones en
Por su contenido que se realiza una operación o se cumple una condición. Con los
incrementos generalmente de uno en uno.
 Variables Numéricas: Son aquellas en las cuales se almacenan valores  Acumuladores: Forma que toma una variable y que sirve para llevar la
numéricos, positivos o negativos, es decir almacenan números del 0 al 9, suma acumulativa de una serie de valores que se van leyendo o
signos (+ y -) y el punto decimal. calculando progresivamente.

Ejemplo: Expresiones
IVA = 0.12, pi = 3.1416, costo = 2500
Las expresiones son combinaciones de constantes, variables, símbolos de
 Variables Lógicas: Son aquellas que solo pueden tener dos valores operación, paréntesis y nombres de funciones especiales.
(cierto o falso) estos representan el resultado de una comparación entre
otros datos. Por ejemplo:
 Variables Alfanuméricas: Está formada por caracteres alfanuméricos a + (b + 3) / c
(letras, números y caracteres especiales).
Cada expresión toma un valor que se determina tomando los valores de las
Ejemplo: variables y constantes implicadas y la ejecución de las operaciones indicadas.

letra = ’a’ apellido = ’López’ dirección = ’Av. Libertad #190’ Una expresión consta de operadores y operandos. Según sea el tipo de datos que
manipulan, se clasifican las expresiones en:
Por su uso
 Aritméticas Operadores Aritméticos
 Relacionales
 Lógicas + Suma
- Resta
Operadores * Multiplicación
/ División
Son elementos que relacionan de forma diferente, los valores de una o más mod Modulo (residuo de la división entera)
variables y/o constantes. Es decir, los operadores nos permiten manipular valores.
Ejemplos:

Expresión Resultado
7/2 3.5
Operadores Aritméticos 12 mod 7 5
4+2*5 14
Los operadores aritméticos permiten la realización de operaciones matemáticas
con los valores (variables y constantes).
Prioridad de los Operadores Aritméticos
Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o
reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con
resultado es real. paréntesis anidados se evalúan de dentro a fuera, el paréntesis más interno se
evalúa primero.
Dentro de una misma expresión los operadores se evalúan en el siguiente orden:

1. ^ Exponenciación
2. *, /, mod Multiplicación, división, modulo.
3. +, - Suma y resta.
Los operadores en una misma expresión con igual nivel de prioridad se evalúan de  < > Diferente
izquierda a derecha.  = Igual

Ejemplos: Ejemplos: Si a = 10, b = 20, c = 30


4 + 2 * 5 = 14 23 * 2 / 5 = 9.2 a+b>c Falso
a-b<c Verdadero
2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98
3 + 5 * (10 - (2 + 4)) = 23 a-b=c Falso
a*b<>c Verdadero
Operadores Relacionales Ejemplos no lógicos:
a<b<c
Se utilizan para establecer una relación entre dos valores. Luego compara estos 10 < 20 < 30
valores entre si y esta comparación produce un resultado de certeza o falsedad T > 5 < 30
(verdadero o falso). (no es lógico porque tiene diferentes operandos)

Los operadores relacionales comparan valores del mismo tipo (numéricos o Operadores Lógicos
cadenas). Estos tienen el mismo nivel de prioridad en su evaluación.
Estos operadores se utilizan para establecer relaciones entre valores lógicos.
Los operadores relaciónales tiene menor prioridad que los aritméticos. Estos valores pueden ser resultado de una expresión relacional.

Tipos de operadores Relacionales Tipos de operadores Lógicos

 > Mayor que


 < Menor que And Y
 > = Mayor o igual que Or O
 < = Menor o igual que Not Negación
F F F
Ejemplo:
Operador Or Operador Or
Para los siguientes ejemplos T significa verdadero y F falso.
Operando1 Operador Operando2 Resultado
T Or T T
T F T
F T T
F F F

Operador Not Operador Not Prioridad de los Operadores Lógicos


Operando Resultado
1. Not
T F
2. And
F T 3. Or

Prioridad de los Operadores en General


Operador And Operador And
1. ()
Operando1 Operador Operando2 Resultado 2. ^
3. *, /, Mod, Not
T AND T T
4. +, -, And
T F F
5. >, <, > =, < =, < >, =, Or
F T F
Ejemplos:
Sea: a = 10 b = 12 c = 13 d =10 que una etapa jerárquica y su inmediato inferior se relacionen mediante entradas y
salidas de información. Este diseño consiste en una serie de descomposiciones
sucesivas del problema inicial, que recibe el refinamiento progresivo del repertorio
de instrucciones que van a formar parte del programa.

La utilización de la técnica de diseño Top-Down tiene los siguientes objetivos


básicos:

 Simplificación del problema y de los subprogramas de cada


descomposición.
 Las diferentes partes del problema pueden ser programadas de modo
independiente e incluso por diferentes personas.
 El programa final queda estructurado en forma de bloque o módulos lo
que hace más sencilla su lectura y mantenimiento.

Bottom Up
TECNICAS DE DISEÑO

Existen dos principales técnicas de diseño de algoritmos de programación, el El diseño ascendente se refiere a la identificación de aquellos procesos que
Top Down y el Bottom Up. necesitan computarizarse con forme vayan apareciendo, su análisis como sistema
y su codificación, o bien, la adquisición de paquetes de software para satisfacer el
problema inmediato.
Top Down
Cuando la programación se realiza internamente y haciendo un enfoque
También conocida como de arriba-abajo y consiste en establecer una serie de ascendente, es difícil llegar a integrar los subsistemas al grado tal de que el
niveles de mayor a menor complejidad (arriba-abajo) que den solución al problema. desempeño global, sea fluido. Los problemas de integración entre los subsistemas
Consiste en efectuar una relación entre las etapas de la estructuración de forma son sumamente costosos y muchos de ellos no se solucionan hasta que la
programación alcanza la fecha límite para la integración total del sistema. En esta Como no hubo un previo análisis, diseño de una solución a nivel global en todos sus
fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, departamentos, centralización de información, que son características propias de
como para corregir aquellas delicadas interfaces, que en un principio, se ignoran. un diseño Descendente (Top Down) y características fundamentales de los
Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistemas; la empresa no pudo satisfacer su necesidad a nivel global.
sistema como una entidad global, adolece de ciertas limitaciones por haber tomado
un enfoque ascendente. La creación de algoritmos es basado sobre la técnica descendente, la cual brinda el
diseño ideal para la solución de un problema.
Uno de ellos es la duplicación de esfuerzos para acceder el software y más aún al
introducir los datos.
Diagrama de Flujo
Otro es, que se introducen al sistema muchos datos carentes de valor.
Un tercero y tal vez el más serio inconveniente del enfoque ascendente, es que los Un diagrama de flujo es la representación gráfica de un algoritmo. También se
objetivos globales de la organización no fueron considerados y en consecuencia no puede decir que es la representación detallada en forma gráfica de cómo deben
se satisfacen. realizarse los pasos en la computadora para producir resultados.

Entonces… Esta representación gráfica se da cuando varios símbolos (que indican diferentes
procesos en la computadora), se relacionan entre sí mediante líneas que indican el
La diferencia entre estas dos técnicas de programación se fundamenta en el orden en que se deben ejecutar los procesos. Los símbolos utilizados han sido
resultado que presentan frente a un problema dado. normalizados por el instituto norteamericano de normalización (ANSI):
Imagine una empresa, la cual se compone de varios departamentos (contabilidad,
mercadeo, …), en cada uno de ellos se fueron presentando problemas a los cuales
se le dieron una solución basados en un enfoque ascendente (Bottom Up): creando
programas que satisfacían sólo el problema que se presentaba.
Cuando la empresa decidió integrar un sistema global para suplir todas las
necesidades de todos los departamentos se dio cuenta que cada una de las
soluciones presentadas no era compatible la una con la otra, no representaba una
globalidad, característica principal de los sistemas.
Indica la
DESCRIPCIÓ
SÍMBOLO salida de
N
información
Indica el por
inicio y el impresora.
final de Conector
nuestro dentro de
diagrama de página.
Representa la
flujo.
continuidad
del diagrama
Indica la dentro de la
entrada y misma página.
salida de
datos.
Conector
Símbolo de fuera de
proceso y nos página.
Representa la
indica la
continuidad
asignación de un
del diagrama
valor en la en otra
memoria y/o la página.
ejecución de una
operación
aritmética.
Indica la
salida de
información
en la pantalla
o monitor. Símbolo de
Selección
Símbolo de Múltiple.
decisión. Dada una
Indica la expresión
realización permite
de una escoger una
comparación opción de
de valores. muchas.

Símbolo del
Mientras.
Dada una
expresión al
principio de
la iteración
esta es
evaluada; Si
la condición
es verdadera
realizará el Símbolo
ciclo, si es Repita Hasta.
falsa la Funciona
repetición igual que la
cesará. estructura
Símbolo del Mientras,
Para. Esta con la
estructura diferencia
de control que al menos
repetitiva se una vez hará
usa el grupo de
generalment instruccione
e cuando se s y luego
conoce de evaluará una
antemano el condición. Si
número de la condición
iteraciones. evaluada es
falsa
continua
dentro del
ciclo y si es
verdadera
termina la
iteración.
Líneas de un programa. En esencial, el Pseudocódigo se puede definir como un lenguaje de
flujo o especificaciones de algoritmos.
dirección.
Indican la
secuencia en En esencial, el Pseudocódigo se puede definir como un lenguaje de especificaciones
que se de algoritmos.
realizan las
Es la representación narrativa de los pasos que debe seguir un algoritmo para dar
operaciones.
solución a un problema determinado. El Pseudocódigo utiliza palabras que indican el
proceso a realizar.

Recomendaciones para el diseño de Diagramas de Flujo

 Se deben usar solamente líneas de flujos horizontales y/o verticales. Ventajas de utilizar un Pseudocódigo a un Diagrama de Flujo
 Se debe evitar el cruce de líneas utilizando los conectores.
 Se deben usar conectores sólo cuando sea necesario.  Ocupa menos espacio en una hoja de papel.
 No deben quedar líneas de flujo sin conectar.  Permite representar en forma fácil operaciones repetitivas complejas.
 Se deben trazar los símbolos de manera que se puedan leer de arriba  Es muy fácil pasar de Pseudocódigo a un programa en algún lenguaje de
hacia abajo y de izquierda a derecha. programación.
 Todo texto escrito dentro de un símbolo deberá ser escrito claramente,  Si se siguen las reglas se puede observar claramente los niveles que tiene
evitando el uso de muchas palabras. cada operación.

PSEUDOCÓDIGO

Mezcla de lenguaje de programación y español (o inglés o cualquier otro idioma) Diagramas estructurados (Nassi-Schneiderman)
que se emplea, dentro de la programación estructurada, para realizar el diseño de
El diagrama estructurado N-S también conocido como diagrama de chapin es como
un diagrama de flujo en el que se omiten las flechas de unión y las cajas son
contiguas. Las acciones sucesivas se pueden escribir en cajas sucesivas y como en
los diagramas de flujo, se pueden escribir diferentes acciones en una caja. Un
algoritmo se represente en la siguiente forma:

ESTRUCTURAS SECUENCIALES

La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra


en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada
de la siguiente y así sucesivamente hasta el fin del proceso.

En Pseudocódigo una Estructura Secuencial se representa de la siguiente forma:


Estructuras Algorítmicas

Las estructuras de operación de programas son un grupo de formas de trabajo,


que permiten, mediante la manipulación de variables, realizar ciertos procesos
específicos que nos lleven a la solución de problemas. Estas estructuras se
clasifican de acuerdo con su complejidad en:
El anterior ejemplo es un sencillo algoritmo de un problema cotidiano dado como
muestra de una estructura secuencial. Ahora veremos los componentes que
pertenecen a ella:

Asignación
Observe el siguiente problema de tipo cotidiano y sus respectivos algoritmos
representados en Pseudocódigo y en diagramas de flujos: La asignación consiste, en el paso de valores o resultados a una zona de la
memoria. Dicha zona será reconocida con el nombre de la variable que recibe el
• Tengo un teléfono y necesito llamar a alguien pero no sé cómo hacerlo.
valor. La asignación se puede clasificar de la siguiente forma:

 Simples: Consiste en pasar un valor constante a una variable (a 15).


 Contador: Consiste en usarla como un verificador del número de veces
que se realiza un proceso (a a + 1).
 Acumulador: Consiste en usarla como un sumador en un proceso (a
a + b).
 De trabajo: Donde puede recibir el resultado de una operación
matemática que involucre muchas variables (a c + b*2/4).

En general el formato a utilizar es el siguiente:

< Variable > <valor o expresión >

El símbolo debe leerse “asigne”.

Escritura o salida de datos

Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un


resultado o mensaje. Esta instrucción presenta en pantalla el mensaje escrito entre
comillas o el contenido de la variable. Este proceso se representa así como sigue:
Lectura o entrada de datos En el momento de declarar constantes debe indicarse que lo es y colocarse su
respectivo valor.
La lectura o entrada de datos consiste en recibir desde un dispositivo de entrada
(p.ej. el teclado) un valor o dato. Este dato va a ser almacenado en la variable que CONSTANTE Pi 3.14159
aparece a continuación de la instrucción. Esta operación se representa así: CONSTANTE Msg “Presione una tecla y continue”
CONSTANTE ALTURA 40
DECLARACION DE VARIABLES Y CONSTANTES
Cuando se trabaja con algoritmos por lo general no se
acostumbra a declarar las variables ni tampoco constantes
debido a razones de simplicidad, es decir, no es camisa de
fuerza declarar las variables. Sin embargo en este curso lo
haremos para todos los algoritmos que realicemos, con esto
La declaración de variables es un proceso que consiste en listar al principio del logramos hacerlos más entendibles y organizados y de paso permite
algoritmo todas las variables que se usarán, además de colocar el nombre de la acostumbrarnos a declararlas ya que la mayoría de los lenguajes de programación
variable se debe decir qué tipo de variable es. (entre ellos el C++) requieren que necesariamente se declaren las variables que se
van a usar en los programas.
Contador: ENTERO
Edad, I: ENTERO
Dirección: CADENA_DE_CARACTERES Veamos algunos ejemplos donde se aplique todo lo que hemos visto hasta el
Salario_Basico: REAL momento sobre algoritmos:
Opción: CARACTER
Ejemplo 1: Escriba un algoritmo que pregunte por dos números y muestre como
En la anterior declaración de variables Contador, Edad son declaradas de tipo resultado la suma de estos. Use Pseudocódigo y diagrama de flujos.
entero; Salario_Basico es una variable de tipo real, Opción es de tipo carácter y la
variable Dirección está declarada como una variable alfanumérica de cadena de
caracteres.
Ejemplo 2: Escriba un algoritmo que permita conocer el área de un triángulo a
partir de la base y la altura. Exprese el algoritmo usando Pseudocódigo y diagrama
de flujos.
ESTRUCTURAS CONDICIONALES Las estructuras condicionales dobles permiten elegir entre dos opciones o
alternativas posibles en función del cumplimiento o no de una determinada
Las estructuras condicionales comparan una variable contra otro(s) valor (es), condición. Se representa de la siguiente forma:
para que en base al resultado de esta comparación, se siga un curso de acción
dentro del programa. Cabe mencionar que la comparación se puede hacer contra Pseudocódigo: Diagrama de flujo:
otra variable o contra una constante, según se necesite. Existen tres tipos básicos,
las simples, las dobles y las múltiples.

Simples:

Las estructuras condicionales simples se les conoce como “Tomas de decisión”.


Estas tomas de decisión tienen la siguiente forma:

Pseudocódigo: Diagrama de flujo:

Dónde:

Si: Indica el comando de comparación.


Condición: Indica la condición a evaluar.
Entonces: Precede a las acciones a realizar cuando se cumple la condición.
Instrucción(es): Son las acciones a realizar cuando se cumple o no la condición
si no: Precede a las acciones a realizar cuando no se cumple la condición.
Dependiendo de si la comparación es cierta o falsa, se pueden realizar una o más
Dobles:
acciones.
Múltiples:

Las estructuras de comparación múltiples, son tomas de decisiones especializadas


que permiten comparar unas variables contras distintas posibles resultadas,
ejecutando para cada caso una serie de instrucciones específicas. La forma común
es la siguiente:

Pseudocódigo: Diagrama de flujo:


Múltiples (En caso de):

Las estructuras de comparación múltiples, es una toma de decisión especializada


que permiten evaluar una variable con distintos posibles resultados, ejecutando
para cada caso una serie de instrucciones específicas.

La forma es la siguiente:

Pseudocódigo: Diagrama de flujo:

Veamos algunos ejemplos donde se aplique todo lo anterior:


Realizar un algoritmo en donde se pide la edad del usuario; si es mayor de edad Se pide leer tres notas del alumno, calcular su definitiva en un rango de 0-5 y
debe aparecer un mensaje indicándolo. Expresarlo en Pseudocódigo y enviar un mensaje donde diga si el alumno aprobó o reprobó el curso. Exprese el
algoritmo usando Pseudocódigo y diagrama de flujos.
Diagrama de flujos.

Pseudocódigo:

Pseudocódigo: Diagrama de flujo:


INICIO
Not1, Not2, Not 3 :REAL
Def: REAL
LEA Nota1, Nota2, Nota3
Def ß (Not1 + Not2 + Not3) /3
Si Def < 3 entonces
Escriba “Reprobó el curso”
Sino
Escriba “Aprobó el curso”
Fin-Si
FIN

Diagrama de flujo:
mayor al 171 escriba el mensaje: “Persona alta”. Exprese el algoritmo usando
Pseudocódigo y diagrama de flujos.

Pseudocódigo:

INICIO
Altura: ENTERO
ESCRIBA “Cuál es tu altura? ”
LEA Altura
Si Altura <=150 entonces
ESCRIBA “persona de altura baja”
Sino
Si Altura <=170 entonces
ESCRIBA “persona de altura media”
Sino
Si Altura>170 ENTONCES
ESCRIBA “persona alta”
Fin-Si
Fin-Si
Fin-Si
FIN
¡Es importante ser ordenado en el código que se escribe!

Se desea escribir un algoritmo que pida la altura de una persona, si la altura es


menor o igual a 150 cm envíe el mensaje: “Persona de altura baja”; si la altura está
entre 151 y 170 escriba el mensaje: “Persona de altura media” y si la altura es Diagrama de flujo:
Dado un número entre 1 y 7 escriba su correspondiente día de la semana así:
1- Lunes 2- Martes 3- Miércoles 4- Jueves 5- Viernes 6- Sábado 7- Domingo
Exprese el algoritmo usando Pseudocódigo y diagrama de flujos.
Pseudocódigo: Pseudocódigo:

INICIO

Dia: ENTERO
ESCRIBA “Diga un número para escribir su día”
LEA Dia
En-caso-de Dia haga
Caso 1: ESCRIBA “Lunes”
Caso 2: ESCRIBA “Martes”
Caso 3: ESCRIBA “Miércoles”
Caso 4: ESCRIBA “Jueves”
Caso 5: ESCRIBA “Viernes”
Caso 6: ESCRIBA “Sábado”
Caso 7: ESCRIBA “Domingo”
SINO: ESCRIBA “Escribió un numero fuera del rango 1-7”
Fin-Caso
FIN

Diagrama de flujo:
programador) o puede ser variable (estar en función de algún dato dentro del
programa). Los ciclos se clasifican en:

Ciclos con un Número Determinado de Iteraciones

 (Para): Son aquellos en que el número de iteraciones se conoce antes de


ejecutarse el ciclo. La forma de esta estructura es la siguiente:

Pseudocódigo Diagrama de Flujos

ESTRUCTURAS CÍCLICAS

Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es necesario


utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad  Dado un valor inicial exp1 asignado a la variable esta se irá aumentando o
específica de veces. Esta cantidad puede ser fija (previamente determinada por el disminuyendo de acuerdo a la exp3 hasta llegar a la exp2; si se omite el
paso, significa que la variable aumentará de uno en uno.
 Repita-Hasta: Esta es una estructura similar en algunas
características, a la anterior. Repite un proceso una cantidad de veces,
Ciclos con un Número Indeterminado de Iteraciones pero a diferencia del Mientras Que, el Repita-Hasta lo hace hasta que la
condición se cumple y no mientras, como en el Mientras Que. Por otra
Son aquellos en que el número de iteraciones no se conoce con exactitud, ya que
parte, esta estructura permite realizar el proceso cuando menos una vez,
esta dado en función de un dato dentro del programa.
ya que la condición se evalúa al final del proceso, mientras que en el
 Mientras Que: Esta es una estructura que repetirá un proceso durante “N” Mientras Que puede ser que nunca llegue a entrar si la condición no se
veces, donde “N” puede ser fijo o variable. Para esto, la instrucción se cumple desde un principio. La forma de esta estructura es la siguiente:
vale de una condición que es la que debe cumplirse para que se siga
ejecutando. Cuando la condición ya no se cumple, entonces ya no se
ejecuta el proceso. La forma de esta estructura es la siguiente:
Pseudocódigo Diagrama de Flujos

Pseudocódigo Diagrama de Flujos


Ejemplo 1: Pseudocódigo Diagrama de Flujos

Realizar un algoritmo que muestre los números de uno en uno hasta diez usando
una estructura Para. Exprese el algoritmo usando Pseudocódigo y diagrama de
flujos.
Pseudocódigo Diagrama de Flujos

Ejemplo 3:

Realizar un algoritmo que pregunte al usuario un número comprendido en el rango


de 1 a 5. El algoritmo deberá validar el número, de manera que no continúe la
ejecución del programa mientras no se escriba un número correcto.
Ejemplo 2:
Pseudocódigo Diagrama de Flujos
Usando una estructura Mientras, realizar un algoritmo que escriba los números de
uno en uno hasta 20.
bien, sino una forma de funcionar en armonía con su medio (trabajo, ocio, forma de
vida en general). No solamente significa verse libre de dolores o enfermedades sino
también la libertad de desarrollar y mantener sus capacidades funcionales. La
salud se mantiene por una acción recíproca entre el genotipo y el medio total. Como
el medio ambiente de trabajo constituye una parte importante del medio total en
que vive el hombre, la salud depende de las condiciones de trabajo".

Existen muchas otras definiciones pero más que hacer una enumeración de ellas
nos parece más interesante reflexionar sobre las características fundamentales de
la salud

La salud no es sólo la ausencia de enfermedad. Cuando una persona se encuentra


cansada al final de la jornada, cuando una persona no soporta la organización del
trabajo, cuando una persona no tiene tiempo para ella y no puede más... no estamos
hablando de enfermedades, pero está claro que tampoco hablamos de salud. Es por
ello que cada vez más para expresar el estado de salud nos referimos a la
sensación, al sentimiento de bienestar.

En positivo podemos expresar que la salud es la capacidad y posibilidad de


satisfacer las necesidades vitales del ser humano, entre las cuales incluimos la
alegría. Cuando hacemos referencia a la salud, nos referimos a aspectos físicos,
psíquicos y sociales.
SALUD LABORAL
La salud es un derecho social y un derecho individual. No todas las personas nos
Sin duda la definición más conocida de la salud es la que ha realizado la
situamos de igual manera frente al derecho a la salud. Los indicadores de salud en
Organización Mundial de la Salud (OMS): "salud es el estado completo de bienestar
los estudios de poblaciones señalan que existen diferencias de salud entre
físico, mental y social y no solamente la ausencia de enfermedades". La misma OMS
diferentes colectivas. Entre las diferencias más importantes cabe señalar las
en uno de sus informes anuales señala "La salud no es algo que se posea como un
siguientes: las socioeconómicas, las de género (hombres y mujeres) y las de edad. señalan que la salud es el resultado del equilibrio entre la exposición a factores de
Entre los trabajadores de la enseñanza también se manifiesta esta diversidad. P.e. riesgo y la susceptibilidad del individuo.
los docentes con contrato temporal, sustituciones e interinos tienen una tasa de
¿Es correcto hablar de salud laboral?
accidentabilidad superior a la de los trabajadores y trabajadoras con contrato fijo;
las mujeres tienen más alteraciones del sistema osteomuscular que los hombres... Debemos tener en cuenta de la salud del individuo es una. No podemos afirmar que
y, estas diferencias no son debidas a las características propias de cada una de las existe una salud laboral y una extralaboral. Cuando utilizamos el término de salud
personas que pierden su salud, sino a los riesgos para la salud que aparecen por el laboral nos referimos a aquellos estudios o acciones que tienen como finalidad
hecho de vivir en unas condiciones determinadas. conocer la importancia del trabajo en las alteraciones de la salud en una población,
así como las medidas preventivas que se pueden realizar en el marco laboral. No
La salud y la enfermedad no es un proceso estático, ya que su concreción está
podemos olvidarnos de la gran importancia que tienen los factores de riesgo
relacionada con las características de la sociedad en la que se desenvuelve. Si en
laborales para la salud, ya que en el trabajo pasamos muchas horas de nuestra
las sociedades llamadas del primer mundo comparamos las causas de mortalidad a
vida, y, además pueden existir riesgos que normalmente no están presentes en el
lo largo de la era de la industrialización observamos que ha existido un cambio
ambiente extralaboral.
radical. Las enfermedades infecciosas han disminuido de forma muy importante,
mientras que las enfermedades de carácter crónico, como las enfermedades AUTOESTIMA LABORAL
cardio-vasculares y el cáncer se han incrementado. Por el contrario, en las
sociedades de los países del sur las enfermedades infecciosas y la desnutrición Muchas personas se preguntan si la autoestima es la consecuencia de nuestros
continúan siendo las principales causa de mortalidad. buenos resultados o si nuestros buenos resultados se producen (en parte) por
nuestra autoestima. En otras palabras, qué es primero, quererse a sí mismo para
La pérdida de salud no responde a una única causa. Hoy sabemos que la mayoría de obtener la autoconfianza que nos conduce a buenos resultados, o buscar buenos
alteraciones de la salud tienen en su génesis un modelo multicausal, es decir, que resultados para mejorar nuestra evaluación que hacemos de nosotros mismos y
son varias las causas que las pueden producir, y que no se explican por una única con ello, querernos más.
causa. La bronquitis crónica puede estar producida por el tabaco, por la exposición
a algunas sustancias químicas en el trabajo, por la contaminación ambiental de las En el mundo laboral actual el ser humano está expuesto a condiciones cambiantes,
ciudades,... y puede, además, influir la susceptibilidad individual. Algunos autores presiones, retos, conflictos y muchas otras situaciones que encierran un factor
bastante influyente sobre la autoestima del mismo y donde a su vez el carácter y la
personalidad del individuo condicionan los logros y fallas que inciden en los
resultados esperados en cualquier empresa o negocio, de allí la importancia de Si alguien es constantemente avergonzado en su puesto de trabajo, sobre todo
estudiar este componente de la personalidad del individuo. frente a todos sus demás compañeros, sin reconocer nunca los logros alcanzados
se desarrollará una actitud negativa hacia el trabajo y la empresa, que hacen que
Para favorecer el desarrollo de una buena autoestima se puede contribuir al
en lugar de sentirse parte de la razón de ser de la misma se sienta excluida de ella
facilitar alternativas con objetivos acordes a las capacidades y nivel de desempeño
con lo que cada día se sienta con menor valor por estar en un lugar donde no puede
de los trabajadores. Esto significa que para contribuir positivamente en la
desarrollar su potencial y esto afectará su rendimiento negativamente.
autoestima de los trabajadores es necesario ver que las exigencias y metas que se
les demandan sean acordes a sus aptitudes y capacidades para no someterlos a En lugares como plantas de producción los trabajadores además de estar
trabajos donde su rendimiento sea negativo por falta de preparación y no de influenciados por factores del ambiente que los hacen adaptarse o no más
capacidad, en todo caso si la persona se siente apta para aprender algo nuevo la fácilmente a sus tareas, están sometidos a presiones de llegar a producir una meta
empresa puede fortalecer esa actitud mediante capacitaciones que mejoren su determinada y condicionados a no cometer errores; cuando uno de estos ocurre y
rendimiento. el supervisor lo descubre debe guiar al trabajador para hacerle ver que él es capaz
de corregirlo y de hacer una producción con cero defectos, pero si se le reprende
Cuando una persona obtiene su empleo se siente motivada por el hecho de haber
a gritos y con ofensas se sentirá con falta de confianza en sí mismo que le
sido elegida como apta para desarrollar la tarea que requiere el puesto al que
ocasionará inconscientemente seguir cometiendo los mismos errores y que lo
aspiró y ha sido asignado; sin embargo este sentido puede cambiar de acuerdo a
harán perder confianza en sus capacidades, actuando por temor u obligación y
los estímulos que del entorno laboral reciba el trabajador y de qué tan sólidas son
disminuyendo su autoestima. Esto se traduce no sólo en áreas de producción de
las bases de la autoestima que posee.
bienes sino también para áreas administrativas donde se planea mucho el futuro de
las organizaciones.

Enfocado al trabajo, se nota que una persona que está en un ambiente laboral
armonioso y con condiciones adecuadas para su trabajo se le ve más dispuesto,
conforme con su trabajo y lo hace sentirse valorado; mientras quien debe trabajar
en un ambiente descuidado, en malas condiciones y con un régimen represivo se
observa insatisfecho, tiene problemas para concentrarse y aumenta los errores, su
autoestima es disminuida por no sentirse valorado ni tomado en cuenta.
EL TRABAJO Y LA SALUD Peligro: aquella fuente o situación con capacidad de producir daño en términos de
lesiones, daños a la propiedad, daños al medio ambiente o una combinación de ellos.
Riesgos profesionales y Factores de riesgo
Este concepto existe en el ámbito laboral porque actividad laboral lleva implícito un
El “Trabajo” puede definirse como toda actividad de transformación de la
cierto nivel de riesgo, al igual que cualquier actividad, esfuerzo, movimiento, etc.
naturaleza, para satisfacer las necesidades humanas.
está sujeto a la posibilidad de que se desencadenen una serie de circunstancias
Dos aspectos fundamentales a considerar en el trabajo son la “Tecnificación” y la adversas que den como resultado un daño tanto para las personas como a los
“Organización” bienes.

De las condiciones en que se realiza el trabajo dependerá que éste sea beneficioso Asimismo define “Daños derivados del trabajo” las enfermedades, patologías o
o perjudicial para la salud. Se entiende por “Condiciones de Trabajo” el conjunto de lesiones sufridas con motivo u ocasión del trabajo.
variables que definen la realización de una tarea concreta y el entorno en que ésta
Prevención de riesgo: Se puede deducir, que la prevención de riesgos es la
se realiza y que determina la salud del trabajador
actividad dirigida a prevenir, evitar o anticiparse a la producción de un daño
El trabajo y la salud están íntimamente relacionados por lo que conviene integrar en previamente identificado, adoptando para ello las medidas correspondientes,
la propia definición de salud aquellos aspectos que se van a ver influenciados por evitando que este riesgo se materialice y, en su defecto, que las consecuencias o
las condiciones de trabajo, y para ello, la más precisa es la enunciada por la daños sean las menores.
Organización Mundial de la Salud en 1948: “Salud” es un estado de bienestar físico,
La Seguridad y Salud Laboral pretende la mejora de las condiciones de trabajo a
mental y social completo y no meramente la ausencia de daño y enfermedad.
través de la aplicación de técnicas denominadas preventivas dirigidas a los
En el contexto de la propia definición aparecen dos aspectos de suma importancia y distintos factores de riesgo.
fundamentales a la hora de establecer estrategias preventivas que conviene
A las distintas variables que puedan influir sobre la salud del trabajador
recalcar, uno de ellos es considerar la salud no solamente como mera ausencia de
(condiciones de trabajo), se las denomina también “factores de riesgo”. Para
enfermedad, y otro el de conferirle carácter integral: físico, mental y social.
favorecer el análisis sistemático de los mismos, se clasifican en cinco grupos:

1. Condiciones de Seguridad.
Conceptos y términos utilizados en salud laboral.
Condiciones materiales como: elementos móviles, cortantes situados en máquinas,  Otros daños a la salud
combustibles, herramientas, vehículos, instalaciones…
Los cuáles serán tratados en otro apartado distinto de éste módulo.
2. Entorno físico del trabajo
Técnicas preventivas.
Se refiere a los componentes físicos del medioambiente del trabajo: ruido,
Existen una serie de disciplinas preventivas que aplicadas a los distintos factores
iluminación, vibraciones, condiciones termohigrométricas y radiaciones.
de riesgo sirven para identificar, prevenir y controlar aquellos riesgos que podrían
3. Contaminantes químicos y biológico. llegar a provocar daños profesionales.

Sus riesgos y medidas preventivas son tratadas en el módulo 3: Riesgos específicos 1. Seguridad en el Trabajo
y su prevención.
Disciplina que estudia las condiciones materiales que ponen en peligro la integridad
4. Carga de trabajo física de los trabajadores provocando accidentes.

Exigencias que la tarea impone al individuo: esfuerzos físicos, niveles de atención, 2. Higiene Industrial
posturas, manipulación…
Estudia las situaciones que pueden producir una enfermedad a través de la
5. Organización del trabajo identificación, evaluación y control de las concentraciones de los diferentes
contaminantes físicos, químicos y biológicos presentes en los puestos de trabajo.
Distribución de tareas, reparto de funciones, responsabilidad, horarios, situaciones
personales… 3. Medicina del Trabajo

El trabajo, dependiendo de las condiciones en que se realice, puede ser beneficioso Analiza las consecuencias de los factores de riesgo sobre las personas, alerta
o perjudicial para la salud. Cuando el trabajo produce daños, éstos se tipifican de la cuando se producen situaciones que no han sido controladas.
siguiente forma:
4. Ergonomía
 Accidentes de Trabajo.
Estudia la manera de planificar y diseñar los puestos de trabajo de manera que
 Enfermedades Profesionales
exista una adaptación entre éstos y el individuo.
5. Psicosociología · Centros de educación

Estudia aspectos psíquicos y sociales existentes en los trabajos capaces de En su trabajo el hombre realiza diversas actividades y dependiendo de qué hace,
ocasionar la pérdida de la salud a los trabajadores, así como su interdependencia cómo, donde, con qué, cuándo, con quién, para qué, durante cuánto tiempo y el nivel
con los accidentes y enfermedades laborales. tecnológico utilizado, se determina la clase y grado de riesgo que enfrenta. En
Colombia para valorar el nivel de riesgo que tiene una actividad económica
La actuación sobre los factores de riesgo para la mejora de las condiciones de
(empresa), se aplica el Art. 26 del Decreto 1295 de 1994 sobre Administración y
trabajo conlleva además la incorporación de otras disciplinas como la psicología, la
Organización del Sistema General de Riesgos Profesionales, según el cual se dan las
ingeniería, la física, la química, la arquitectura, la biológica, el derecho, la
siguientes clases de riesgo:
económica, etc… ya que el tratamiento de las condiciones de trabajo debe ser
multidisciplinar.
 Clase V Riesgo máximo
El objetivo de todo lo anterior es el de mejorar la calidad de vida laboral del
 Clase IV Riesgo alto
trabajador, que como protagonista debe integrarse e involucrarse plenamente con
 Clase III Riesgo medio
la prevención de riesgos laborales, por lo tanto deberá tener los conocimientos y
 Clase II Riesgo bajo
actitudes necesarias para el desempeño de sus funciones, por lo que la información
 Clase I Riesgo mínimo
y formación son también consideradas como técnicas preventivas fundamentales.
Ejemplo:
CLASES DE RIESGOS PROFESIONALES
 CLASE V Fundiciones
Los siguientes son ejemplos de algunas actividades económicas, en las cuales los
 CLASE IV Formulación de sustancias químicas
trabajadores se ven expuestos a diferentes factores de riesgo. De igual manera
 CLASE III Hospitales generales
todas presentan diversos grados de riesgo.
 CLASE II Zootecnia, cría de animales domésticos y veterinaria
· Fundiciones  CLASE I Centro de educación
· Envasado de sustancias químicas
Las clases de riesgo a su vez, están definidas por una escala de grado de riesgo en
· Hospitales generales
la que se estipula, mediante porcentajes, los valores mínimo, inicial y máximo.
· Cría y manejo de animales
PELIGRO… Es la inminencia de sufrir un accidente o enfermedad. Por lo tanto, cuanto mejor estudiada esté una tarea, más fácil será evitar que se
produzcan “fallos” (accidentes) durante la misma.
RIESGO… Es la posibilidad de que ocurra un accidente o enfermedad.
La legislación actual se basa en el derecho de los trabajadores a un trabajo en
De la tabla de clases de riesgo vista anteriormente, se concluye que en la medida condiciones de seguridad y salud, lo que implica a su vez un deber del empresario
que se incrementa el grado (y por tanto la clase), los riesgos se convierten en para conseguir esa protección.
peligro. Ante el peligro la aparición del accidente o la enfermedad, es sin duda, casi
inevitable.

LA PREVENCIÓN DE RIESGOS LABORALES Herramientas de la Prevención de Riesgos Laborales

La Prevención de Riesgos Laborales consiste en un conjunto de actividades que se Para prevenir los riesgos en el trabajo, la herramienta fundamental de los técnicos
realizan en la empresa con la finalidad de descubrir anticipadamente los riesgos especialistas en PRL es la evaluación de riesgos.
que se producen en cualquier trabajo.
La Evaluación de Riesgos es un estudio técnico en el que:
Esta anticipación permite que se puedan planificar y adoptar una serie de medidas
 Se estudian las condiciones de un puesto de trabajo: lugar, maquinaria,
preventivas que evitarán que se produzca un accidente laboral.
productos empleados, etc.
La PRL se basa en estas ideas:  Se identifican los peligros a los que se expone el trabajador por trabajar
en esas condiciones. Puede que haya peligros que puedan ser eliminados
Un accidente laboral no es un suceso inevitable, algo que suceda
fácilmente en esta fase; el resto, tendrán que ser evaluados.
irremediablemente, por casualidad o “porque tenía que pasar”. Un accidente laboral
 Según el tiempo a que esté expuesto a cada uno de esos peligros y la
es la manifestación de que algo no ha ido bien en el desarrollo de una tarea, de que
gravedad de los daños que puedan causar, se intenta medir el riesgo a
ha habido un fallo.
que está sometido el trabajador.
Si la tarea está bien estudiada de antemano, sabiendo cómo hay que hacerla y
Con esto, se obtiene una lista de riesgos que puede ordenarse por su mayor o
qué medios hay que emplear, también se podrán prever los riesgos que puedan
menor gravedad.
aparecer.
Finalmente, se propondrán unas medidas preventivas para eliminar o reducir los La rama del derecho que se encarga de regular las relaciones que se establecen a
riesgos de ese puesto de trabajo. raíz del trabajo humano se conoce como derecho laboral. Se trata del conjunto de
reglas jurídicas que garantizan el cumplimiento de las obligaciones de las partes
Tras esta primera fase en la que se detectan y miden los riesgos, la empresa
que intervienen en una relación de trabajo.
deberá planificar cómo ir adoptando progresivamente las medidas que los técnicos
especialistas en PRL han propuesto. Derecho laboral

Organización de la Prevención de Riesgos Laborales en la empresa El derecho laboral entiende al trabajo como aquella actividad que un individuo
desarrolla con el objetivo de transformar el mundo exterior, y mediante la cual
La legislación de PRL permite que las empresas organicen la PRL de diversas
obtiene los medios materiales o bienes económicos para su subsistencia.
formas (llamadas “modalidades de organización preventiva”).
Es importante determinar que varias son las fuentes de las que bebe el citado
En empresas muy pequeñas y de escasos riesgos, el propio empresario puede
derecho laboral para desarrollarse y establecer la justicia que se estima
llevar a cabo las actividades de PRL. Sin embargo, esto no es lo habitual: lo más
pertinente. En concreto, se establece que entre aquellas destacan la Constitución,
frecuente es que estas actividades tengan que ser encargadas a técnicos
los contratos de trabajo, los tratados internacionales existentes, la ley o los
especialistas en PRL, con la debida formación.
reglamentos.
Estos técnicos especialistas pueden ser trabajadores de la propia empresa a los
Como hecho social, el trabajo contempla el establecimiento de relaciones que no
cuales el empresario les ha proporcionado la formación necesaria y les ha
son simétricas. El empleador (es decir, quien contrata a un trabajador) cuenta con
designado (“trabajadores designados”) para que se encarguen de las actividades
una mayor fuerza y responsabilidad que el empleado. Por eso, el derecho laboral
preventivas, o bien el empresario puede contratar esas actividades con un Servicio
tiende a limitar la libertad de cada compañía a fin de proteger al involucrado más
de Prevención Ajeno (SPA).
débil de esta estructura.
Los SPA son las entidades especializadas, privadas, que han recibido una
Esto supone que el derecho laboral se basa en un principio protector, a diferencia
acreditación del Departamento de Empleo para poder actuar como tales.
del derecho privado que se sustenta en un principio de igualdad jurídica. El derecho
DERECHO LABORAL laboral, por lo tanto, debe aplicar, frente a la multiplicidad de normas, las reglas
que resulten más beneficiosas para cada trabajador.
Este principio protector es uno de los más importantes que existen dentro de este sindicales o los comités de empresa, y los convenios de rango superior donde son
citado ámbito, sin embargo, no podemos pasar por alto el hecho de que el derecho los sindicatos los encargados de tener la representatividad.
laboral también se basa en otros tales como es el caso del principio de
razonabilidad. Este es aplicable tanto al propio empleador como al trabajador y
viene a establecer que ambas figuras desarrollan sus derechos y sus deberes sin
caer en conductas abusivas, lo harán en base al sentido común.

De igual manera también es importante subrayar el valor del principio de


irrenunciabilidad de derechos. Esta máxima deja claro que ningún trabajador puede
llevar a cabo la renuncia de los derechos que se le establecen como tal por parte
de la legislación laboral. Eso supone, por ejemplo, que no pueda ni trabajar más
horas de las que están establecidas ni que tampoco renuncie a cobrar menos de los
que está estipulado.

Cabe resaltar que las relaciones laborales están regidas por una ley de contrato de
trabajo y diversas normas complementarias. De todas formas, cada sector
productivo cuenta con sus propias normas para regular las relaciones o ciertos
aspectos de ellas, sin que estas normas impliquen una violación a la mencionada ley
de contrato de trabajo.

Por otra parte, existen convenios colectivos de trabajo que se aplican a distintos
grupos profesionales. Estos convenios colectivos son acuerdos que se negocian
entre los empleadores y los empleados y que deben ser aprobados por el Estado.

Convenios estos que se deben caracterizar porque tienen que respetar en todo
momento la legislación laboral existente. En concreto, se pueden establecer dos
tipos: los convenios de empresa, en los que ejercen de interlocutores los delegados
EL SISTEMA NACIONAL DE CONTRATACIÓN PÚBLICA EN EL ECUADOR

Para analizar de manera pormenorizada el Sistema Nacional de Contratación


Pública en el Ecuador, es menester que conozcamos tanto su definición, sus
objetivos, así como los órganos competentes, extraídos de la Ley Orgánica del
Sistema Nacional de Contratación Pública del Ecuador, a través de los artículos que
transcribo a continuación:

"Art. 7.- Sistema Nacional de Contratación Pública SNCP.- El Sistema Nacional de


Contratación Pública (SNCP) es el conjunto de principios, normas, procedimientos,
mecanismos y relaciones organizadas orientadas al planeamiento, programación,
presupuestos, control, administración y ejecución de las contrataciones realizadas por las
Entidades Contratantes. Forman parte del SNCP las entidades sujetas al ámbito de esta Ley.

Art. 8.- Órganos competentes.- El Instituto Nacional de Contratación Pública junto con las
demás instituciones y organismos públicos que ejerzan funciones en materia de
presupuestos, planificación, control y contratación pública, forman parte del Sistema
Nacional de Contratación Pública, en el ámbito de sus competencias.

Art. 9.- Objetivos del sistema.- Son objetivos prioritarios del Estado, en materia de
contratación pública, los siguientes:

1. Garantizar la calidad del gasto público y su ejecución en concordancia con


el Plan Nacional de Desarrollo;

2. Garantizar la ejecución plena de los contratos y la aplicación efectiva de


las normas contractuales;
3. Garantizar la transparencia y evitar la discrecionalidad en la contratación De las disposiciones legales transcritas, podemos colegir entonces que el Sistema
pública; Nacional de Contratación Pública se constituye en todo ese conjunto de principios,
normas, procedimientos y mecanismos que íntimamente relacionados de manera
4. Convertir la contratación pública en un elemento dinamizador de la organizada permitirán orientar de manera eficaz la planificación, programación,
producción nacional; control, presupuestos, administración y ejecución de todas las contrataciones
5. Promover la participación de artesanos, profesionales, micro, pequeñas y realizadas por las entidades contratantes sujetas a la presente Ley, determinadas
medianas empresas con ofertas competitivas, en el marco de esta Ley; en su ámbito de aplicación. (Art. 1 LOSNCP)

6. Agilitar, simplificar y adecuar los procesos de adquisición a las distintas Por otro lado es necesario manifestar que el Instituto Nacional de Contratación
necesidades de las políticas públicas y a su ejecución oportuna; Pública (INCOP) es el organismo rector de la contratación pública en el Ecuador,
creado por la Ley con amplias atribuciones determinadas a través de la misma,
7. Impulsar la participación social a través de procesos de veeduría órgano que junto con otras instituciones del sector público forman parte del
ciudadana que se desarrollen a nivel nacional, de conformidad con el Sistema Nacional de Contratación Pública en el Ecuador dentro del ámbito de sus
Reglamento; competencias.

8. Mantener una sujeción efectiva y permanente de la contratación pública Finalmente es preciso destacar que el estado ecuatoriano a través del Sistema
con los sistemas de planificación y presupuestos del Gobierno central y de Nacional de Contratación Pública se ha planteado entre otros objetivos
los organismos seccionales; primordiales garantizar la calidad en el gasto público a través de la plena ejecución
de los contratos, garantizando la transparencia en el proceso de contratación,
9. Modernizar los procesos de contratación pública para que sean una
promoviendo la participación de artesanos, profesionales, micro, pequeñas y
herramienta de eficiencia en la gestión económica de los recursos del Estado; medianas empresas de nuestro país mediante ofertas competitivas, todo esto
10. Garantizar la permanencia y efectividad de los sistemas de control de modernizando los procesos de manera continua, para llegar de ésta manera a
gestión y transparencia del gasto público; y, convertir a la contratación pública en nuestro país en un elemento dinamizador de
la producción nacional.
11. Incentivar y garantizar la participación de proveedores confiables y
competitivos en el SNCP." CONTRATO LABORAL
Siempre que hablamos de trabajo en blanco, oficial o legal, debemos hacer Por otro lado, el contrato de trabajo también establece situaciones o
referencia a un documento que es sin dudas la prueba de que ese trabajo o labor es circunstancias que puedan significar una ruptura del mismo y que den derecho al
correctamente llevada a cabo por ambas partes (el empleado y el empleador). Este perjudicado la posibilidad de reclamar por los daños obtenidos. En este sentido,
documento no es otro que el contrato laboral o contrato de trabajo, uno de los tanto el trabajador como el empleador se aseguran de tener que cumplir con
documentos más importantes que una persona debe poseer a lo largo de su vida si determinadas condiciones so pena de que al no hacerlo la otra parte pueda
quiere obtener los beneficios y seguros correspondientes a la actividad que reclamar legal y judicialmente por lo que le corresponde.
desempeña. El contrato laboral sirve básicamente, como toda forma de contrato,
La Contratación Laboral en Ecuador
para establecer tanto los derechos como las obligaciones de las partes que toman
lugar en su firmado. Así, el contrato sirve como prueba de que el trabajo es legal y Jurídicamente, La contratación laboral difiere de la contratación civil, pero en los
que además cualquiera de las dos partes puede exigir el correcto cumplimiento del últimos tiempos, se ha visto con pena que muchos empleadores utilizan la figura del
mismo si por alguna circunstancia esto no sucede. contrato civil de prestación de servicios, sean estos personales o profesionales,
con el afán de evadir algunas responsabilidades que vienen conexas con la
A diferencia de lo que pasa con los trabajos en negro, ilegales o no estables, el
contratación laboral, entre otras el pago de afiliación al Seguro Social, el pago de
contrato de trabajo siempre debe estar presente cuando hablamos de trabajo legal.
décimo tercero y cuarto sueldos, entre otros.
Es sin dudas el primer paso que las partes interesadas deben dar antes de
comenzar la actividad, y es sumamente importante que tanto el empleador como el En Ecuador, existen básicamente dos formas de contratación laboral; la primera y
empleado estén conscientes y al tanto de la información que es vertida en el sobre la cual versa el presente curso es la de tipo Privado es decir entre personas,
documento. sean naturales o jurídicas, que no pertenezcan al estado, que está regulada por el
Código del Trabajo; y, la segunda de tipo Pública que involucra a los estamentos
Una de las primeras cosas que marca el contrato de trabajo son las características
estatales y que están reguladas por la Ley Orgánica de Servicio Civil y Carrera
y condiciones en las que se llevará a cabo la tarea, por ejemplo, cuántas horas
Administrativa.
durará, en qué espacio se realizará, en qué consistirá la actividad o tarea en sí, qué
remuneración se recibirá por la misma, etc. Además, se deben detallar también CLASIFICACIÓN DE LOS CONTRATOS
todas las cargas sociales que le corresponden al trabajador tales como obra social,
seguro del trabajador, cantidad de días de descanso, vacaciones, aguinaldos y Expreso y Tácito. Art. 12
asignaciones familiares, etc.
-El contrato es expreso cuando el empleador y el trabajador acuerden A destajo Art. 16
las condiciones, sea de palabra o reduciéndolas a escrito. A falta de
Cuando el trabajo se realiza por piezas, trozos, medidas de superficie y, en general,
estipulación expresa, se considera tácita toda relación de trabajo entre empleador
por unidades de obra, y la remuneración se pacta para cada una de ellas, sin
y trabajador.
tomar en cuenta el tiempo invertido en la labor.
A prueba Art. 15
Eventuales Art. 17
En todo contrato de aquellos a los que se refiere el Art. 14, cuando se celebre por
Aquellos que se realizan para satisfacer exigencias circunstanciales del
primera vez, podrá señalarse un tiempo de prueba, de duración máxima de
empleador, tales como reemplazo de personal que se encuentra ausente por
noventa días. Vencido este plazo, automáticamente se entenderá que
vacaciones, licencia, enfermedad, maternidad y situaciones similares; en
continúa en vigencia por el tiempo que faltare para completar el año. Tal
cuyo caso, en el contrato deberá puntualizarse las exigencias
contrato no podrá celebrarse sino una sola vez entre las mismas partes.
circunstanciales que motivan la contratación, el nombre o nombres de los
Durante el plazo de prueba, cualquiera de las partes lo puede dar por
reemplazados y el plazo de duración de la misma.
terminado libremente
También se podrán celebrar contratos eventuales para atender una mayor
Por obra cierta Art. 16
demanda de producción o servicios en actividades habituales del empleador, en
Cuando el trabajador toma a su cargo la ejecución de una labor determinada cuyo caso el contrato no podrá tener una duración mayor de ciento
por una remuneración que comprende la totalidad de la misma, sin tomar en ochenta días continuos o discontinuos dentro de un lapso de trescientos
consideración el tiempo que se invierta en ejecutarla. sesenta y cinco días. Si la circunstancia o requerimiento de los servicios
del trabajador se repite por más de dos períodos anuales, el contrato se
Por tarea Art. 16
convertirá en contrato de temporada. El sueldo o salario que se pague en los
El trabajador se compromete a ejecutar una determinada cantidad de obra o contratos eventuales, tendrá un incremento del 35% del valor hora del
trabajo en la jornada o en un período de tiempo previamente salario básico del sector al que corresponda el trabajador.
establecido. Se entiende concluida la jornada o período de tiempo, por el hecho de
Ocasionales Art. 17
cumplirse la tarea
Aquellos cuyo objeto es la atención de necesidades emergentes o Hay quienes elevan a la categoría de elemento de esencial de los contratos del
extraordinarias, no vinculadas con la actividad habitual del empleador, trabajo a la manera de fijar la remuneración, tesis incorporada incluso por alguna
y cuya duración no excederá de treinta días en un año. de las Salas de lo Laboral y Social de la Corte Suprema de Justicia del Ecuador.

El sueldo o salario que se pague en los contratos ocasionales, tendrá un incremento * SERVICIOS LICITOS Y PERSONALES
del 35% del valor hora del salario básico del sector al que corresponda el
Está bien definido este elemento y parte de señalarse que es el trabajador quien
trabajador.
debe prestar en forma personal sus servicios. No existe manera de establecer una
De temporada Art. 17 relación jurídica sometida a las normas laborales cuando el trabajador no ejecuta
por si mismo los actos que configuran sus funciones o responsabilidades y percibe
Aquellos que en razón de la costumbre o de la contratación colectiva,
igualmente en forma directa y personal los beneficios y ejerce los derechos que a
se han venido celebrando entre una empresa o empleador y un trabajador o grupo
ella corresponden.
de trabajadores, para que realicen trabajos cíclicos o periódicos, en razón de la
naturaleza discontinua de sus labores, gozando estos contratos de estabilidad, Lícito, por definición de la Real Academia de la Lengua Española es lo justo,
entendida, como el derecho de los trabajadores a ser llamados a prestar sus permitido, según justicia y razón.
servicios en cada temporada que se requieran. Se configurará el despido
Los trabajos no permitidos, no necesariamente son ilícitos, por ejemplo aquellos
intempestivo si no lo fueren.
que por razones de salud están vedados para mujeres embarazadas o menores de
ELEMENTOS ESENCIALES EN LOS CONTRATOS DE TRABAJO edad, no desnaturalizan la relación laboral ya creada y no proveen causa de excusa
para el empleador que a sabiendas y de manera fraudulenta incluso, ha hecho uso
El Código del Trabajo de manera taxativa y sin permitir interpretación impone
de personas a quienes les está vetadas ciertas tareas, para usarlas precisamente
varios elementos esenciales a los contratos de trabajo y son:
en ellas. No es raro encontrarse con empleadores o colegas que haciendo gala de
a) Prestación de servicios lícitos y personales cinismo o ignorancia de la ley, pretenden beneficiarse de su propio dolo para negar
la existencia de relación laboral alegando que los servicios no son lícitos, por no
b) Dependencia estar permitidos para aquellas personas a quienes ellos han usado para
ejecutarlos.
c) Remuneración
Debe ser claro, en este momento para quien analice la cuestión con mayor o menor por la vía de la empresa y que difícilmente o a muy altos costos podrían acceder los
profundidad, que diferente es aquella circunstancia donde la aparente materia de trabajadores individualmente.
prestación de los servicios no solo no es permitida sino francamente ilícita, tales
Se ha hecho hincapié y se ha puesto en lugar preeminente a la dependencia jurídica
como la asociación para delinquir a través de la formación de bandas o pandillas
a la que se ha definido como la posibilidad de ordenar del empleador y la obligación
nacionales o internacionales, prostitución, mendicidad, maneras que de alguna
del trabajador; sin embargo cabe preguntarse por qué esta es más importante que
forma deben revisarse a la luz de nuevas formas sociales de asumirlas. Es cada vez
las otras y su respuesta no deja de ser simple, porque es precisamente el conjunto
más frecuente encontrarse con ¨empresas¨ de mendicidad, prostitución directa o
de normas legales que rodean a las relaciones laborales, que frente a un acto de
de terceras personas.
desobediencia del trabajador, que la relación laboral termina legalmente.
La licitud entonces no es solo moral sino legal, y ese apartado debe ser explorado
Deben los trabajadores obedecer indiscriminadamente a sus empleadores, en
en este momento de manera más rigurosa para legislar laboralmente sobre ciertas
particular en el sector privado, porque al fin en el sector público las normas legales
conductas sociales que merecen protección no para quienes se aprovechan de
permiten a los servidores excusarse por escrito de acatar órdenes que consideren
ellos o ellas, sino precisamente de sus víctimas, como se ha hecho con el tráfico de
inconvenientes y de insistirse por escrito, la responsabilidad será de quien ordena.
personas o Coyoterismo.
Los trabajadores en el sector privado pueden negarse a acatar una orden del dueño
* DEPENDENCIA.
de la empresa, que no les perjudique a ellos, sino los intereses de quien ordena; y
La sujeción a las normas, procedimientos, instrucciones y maneras de ejecutar el ese desacato, viabiliza una terminación legal de las relaciones laboral al imperio de
trabajo de parte de los trabajadores es quizá la más importante característica de la dependencia jurídica, reducida a la máxima de YO MANDO TU OBEDECES, que
la dependencia. utilizan algunos jefes y empresarios privados.

En la doctrina se ha abundado en las dependencias económica, manifestada en la La discusión puede ser larga pero un empleador, en el imperio de la dependencia
necesidad de la remuneración que percibe el trabajador de su empleador para jurídica, es casi omnipotente cuando reúne en si las calidades de jefe y dueño del
subsistir dignamente él y su familia; en la técnica que a simple vista se expresa en negocio. La negativa es una opción que se vuelve viable si la confusión de jefatura y
la tecnificación que cada vez más adquieren todas las ramas, no solamente la propiedad no existe, ya que los niveles de jefaturas en empresas ajenas, siempre
industrial sino la comercial y de servicios, con métodos y sistemas más modernos tendrán un superior y un contralor o auditor, que avalará la negativa si es
de capacitación y entrenamiento de los trabajadores, que se logran exclusivamente justificada.
Todo esto para preguntar la dependencia jurídica es omnímodo, parece que con b) El convenio.- Es el acuerdo de las partes fijado individual o colectivamente; y
simple sentido común la respuesta es no, pero la práctica de negocios
unipersonales y familiares muy usuales en países como los nuestros demuestran lo c) La costumbre, es decir los usos frecuentes de la plaza donde se pacta.
contrario, donde la simple discrepancia es argumento suficiente para liquidar Ni la convención de las partes ni la costumbre puede desoír los salarios mínimos
empleados. unificados o sectoriales anuales, salvo que sean superiores, de ser inferiores no
tienen valor legal alguno y los empleadores deben pagar conforme la autoridad
* REMUNERACION
administrativa competente haya fallado.
Es otro de los elementos esenciales de los contratos laborales, pero lo esencial es
que se pacte la remuneración, no necesariamente que se pague, visto que en la ELEMENTOS NATURALES DE LOS CONTRATOS DE TRABAJO
práctica el ejercicio de la acción en la gran mayoría de las causas laborales tiene (Nueva concepción elemental del contrato individual de trabajo)
como causa precisamente el cumplimiento de este elemento, no pocas veces
soslayado. El Código Civil preceptúa dos cosas importante; la primera, que los elementos
naturales son aquellos que sin constar mediante cláusula especial se entienden
Las maneras de pactarse la remuneración son varias, a saber: parte del contrato; y la segunda, que por aquella disposición se entienden entonces
a) La ley, o propiamente, la resolución de autoridad administrativa competente para incorporados a los contratos de trabajo, todas y cada una de las normas legales
hacerlo, como es el Consejo Nacional de Salarios para el sector privado -CONADES- y el vigentes a la fecha de su celebración, en todos los órdenes: laboral, de seguridad
Consejo Nacional de Remuneraciones para el sector público -CONAREM- y en ausencia de social, de seguridad industrial e higiene del trabajo, etc. etc.
acuerdo mediante decisión del Ministro del Trabajo, expresada en el Acuerdo Ministerial
Por ello algunos juristas consideran a la remuneración como un elemento más bien
respectivo.
natural del contrato individual de trabajo por las razones siguientes:
Las comisiones sectoriales de salario mínimo, ente tripartito se enmarcan en esta
categoría, visto que acuerdo debe ser ratificado o modificado por el Ministro del Ramo en a) Porque no puede haber remuneraciones inferiores a las legalmente establecidas,
el Acuerdo Ministerial que anualmente se expide. sea por autoridad administrativa competente, sea por resolución judicial, como en
ocasiones suele ocurrir en nuestro país cuando los jueces constitucionales hacen y
Era pertinente hablar de la ley en las épocas en que los sueldos y salarios se fijaban por
deshacen sobre lo actuado por el Ministro de Trabajo o cualquier otra autoridad por
parte del Congreso Nacional o antes por la Cámara Nacional de Representantes.
las famosas demandas de inconstitucionalidad, que deben atender
b) Porque aunque no se pactare las remuneraciones para iniciar las relaciones Personalmente dudo mucho de la validez de las mismas, pero a pesar de buscar no
laborales entre empleador y trabajador, el simple transcurso del tiempo y el he encontrado aún jurisprudencia que despeje mis dudas de cuan constitucional es
mantenimiento de esa relación laboral, modifica el contrato sin la autonomía de someter las disputas laborales individuales a la jurisdicción por ejemplo de los
voluntad de sus contratantes, se reforma sin necesidad de cláusula especial, centros de mediación y arbitraje de las entidades de derecho privado como
adendum, contrato modificatorio o ampliatorio alguno. Cámaras de la producción, universidades o estudios jurídicos, fundaciones o aún de
la propias entidades del sector público, pero sirva de ejemplo esta cláusula como
Que ocurre entonces si las partes no pactan remuneración. Es claro que ese
una de aquellas que demuestra cuales son elementos accidentales de un contrato
silencio se suple por la ley. Puede alguien sostener con acierto, que por aquella
laboral.
omisión no nació relación jurídica o deja acaso de existir una relación laboral
antigua, en la que las partes de consuno no hayan estipulado cuanto van a pagar- Justifico mi desconfianza, no tanto en la probidad de quienes allí actúen, que deben
cobrar. Yo personalmente creo que esa omisión de las partes ni desnaturaliza el defenderse por sí mismos y por sus fallos, tampoco lo hago basado en desconocer
contrato ni lo hace degenerar en otro diferente, por lo que me parece más la norma constitucional que permite la transacción en temas laborales, lo hago más
prudente adherir a la tesis de que la remuneración y todas las cuestiones de ella bien fundado en que esa transacción no puede significar renuncia de derechos y la
derivadas, tales como la forma de pagarla, la periodicidad de su pago, las jurisdicción y competencia en estricto sentido son derechos de los trabajadores y
prohibiciones de hacerlo en especie o de cancelarlas en estancos o pulperías, por su renuncia, como la de domicilio está expresamente prohibida por el Código
decir algo, son elementos naturales del contrato de trabajo. Laboral.

ELEMENTOS ACCIDENTALES DE LOS CONTRATOS DE TRABAJO En tanto no se dilucide jurisprudencialmente la duda, sigo pensando que cláusulas
de la naturaleza del ejemplo, en tanto impliquen renuncia de derechos, no son
Las partes en la autonomía de su voluntad pueden pactar, dentro del derecho social constitucionales.
-tutelar- y privado, que coexiste en materia laboral, cuantas cosas les parezca, a
condición de que no vulnere la esencia de esa tutela jurídica, que son los derechos No ha de faltar quien me diga, linealmente, que como en la Constitución Política del
de los trabajadores. Estado se acepta la transacción en materia laboral, no hay nada de inconstitucional
proponer medios alternativos de solución de controversias y de entre ellos la
Ejemplo de esa autonomía de voluntad se ha convertido en, por ejemplo el negociación, la mediación y el arbitraje. Es verdad, así de simple, de lineal el
establecimiento de cláusulas arbítrales, como método de solución de controversias. razonamiento parece válido, pero no deben dejarle de lado los argumentos
expuestos en los párrafos anteriores para determinar en cada caso, si esa
transacción implica una renuncia de derechos del trabajador que está concurriendo Conseguir la satisfacción en tu trabajo es
a transar, pues en tanto ese trabajador no esté debidamente informado de los fundamental para sentirte bien y para rendir
mismos, puede estar por ignorancia de la ley, la que no puede tener irónicamente en las tareas. Sin embargo, en muchos
tiene por expresa norma legal, dejando de reclamar algo que le corresponde o casos vamos a trabajar sin ganas, no nos
cediendo algo que no debe. gusta nuestra tarea, nos sentimos
infravalorados o simplemente nos
Otra razón de preocupación es aquella que atiende a los arbitrajes en equidad, en
conformamos con hacer lo que nos toca y
donde los árbitros no son abogados y fallan en razón de la justicia. Couture decía en
salir del paso.
su decálogo a los abogados que cuando haya conflicto entre la ley y la justicia,
luchemos por la justicia. Hasta aquí todo bien, el duro despertar es el de la realidad
cotidiana.
Los principales factores que vamos a
Conceptualmente, los arbitrajes en equidad podrían dejar de aplicar normas del
considerar en la satisfacción laboral son:
código del trabajo, porque a la luz de los hechos ocurridos en una determinada
relación laboral, la justicia impone que se inclinen a favor de un empleador o pese a 1. La relación entre satisfacción, motivación y desempeño.
ser en equidad y de ser justo, las normas laborales son de indefectible aplicación? 2. La influencia de las expectativas y las compensaciones en la satisfacción
Mi posición en la cuestión es que no caben arbitrajes en equidad en materia laboral, laboral.
no porque la justicia no informe a los árbitros para fallar, sino porque corren el 3. El clima laboral y otros aspectos influyentes en la satisfacción del
grave riesgo de dejar de aplicar normas que son insoslayables. trabajador.
4. Los efectos de la satisfacción laboral.
Es recomendable, entonces para las partes suscribir un convenio arbitral como
cláusula accidental en un contrato de trabajo, sometiéndose al arbitraje en equidad
de un centro administrado o no de mediación y arbitraje, sinceramente creo que no.
SATISFACCIÓN, MOTIVACIÓN Y DESEMPEÑO
FACTORES DE LA MOTIVACIÓN EN EL TRABAJO
La motivación activa y dirige el comportamiento del trabajador para alcanzar una
determinada meta. En cambio, la satisfacción es aquella sensación que el individuo
experimenta al lograr el restablecimiento del equilibrio entre una necesidad o extrínsecos.
grupo de necesidades y el objetivo o las metas que la reducen.

Podemos decir, por tanto, que la motivación es anterior al resultado, puesto que
ésta implica un impulso para conseguirlo. La satisfacción es posterior, al referirse
al resultado experimentado.

Lo más lógico y deseable es que un trabajador que desarrolle una actividad por
motivos internos (motivación intrínseca) logre los resultados esperados y
experimente un alto grado de satisfacción. Seguramente, esta satisfacción se
reflejará en un aumento de su desempeño, es decir, en un mayor rendimiento.

Pero no siempre existe una relación directa entre motivación y satisfacción. Puede
ocurrir que una persona esté muy insatisfecha con su trabajo, no recibir ninguna
gratificación psicológica, no conseguir disfrutar en su desempeño laboral y, aun así, EXPECTATIVAS Y SATISFACCIONES
estar muy motivado para realizarlo (motivación extrínseca), es decir, pueden
existir muchos elementos extrínsecos que favorezcan que el desempeño en el
trabajo sea muy elevado. Factores como la necesidad económica, supervisión
La satisfacción laboral es la valoración que la persona hace a partir de los
estricta, amenazas de castigos reales, presión psicológica, altos incentivos, pueden
acontecimientos que observa en su entorno laboral, permitiéndole así valorar si lo
constituir elementos motivadores
que obtiene a cambio de su comportamiento y esfuerzo es válido o no, es decir, es
un proceso por el que se establece una comparación subjetiva entre lo que ellos
consideran que dan a la Organización y lo que reciben como consecuencia de esta
aportación, no sólo teniendo en cuenta las compensaciones económicas.

EXPECTATIVAS: Las expectativas son lo que el trabajador percibe como


recompensa “justa” a su trabajo y esfuerzo. Normalmente establecemos esta
percepción en función del puesto o trabajo en sí, de las habilidades personales que
aportamos al trabajo y de un proceso de comparación social. Tipo de motivación: Tipo de satisfacción: Tipo de desempeño:

COMPENSACIONES: La percepción de las compensaciones o recompensas es la -M. Intrínseca y Extrínseca - Satisfacción - Desempeño alto
opinión que el empleado mantiene sobre lo que recibe a cambio de su desempeño o
comportamiento determinado. Son los resultados objetivos recibidos y los que -Desmotivación - Insatisfacción - Desempeño bajo
considera que recibe en comparación con otras personas dentro de su empresa.

COMPENSACIONES/EXPECTATIVAS: Si el trabajador percibe que el resultado es ASPECTOS INFLUYENTES: EL CLIMA LABORAL


excesivamente favorable y que no se corresponde con sus expectativas, puede que
El proceso de valoración o percepción que hace el trabajador no es azaroso. En él
experimente algún malestar inicial. No obstante, con el tiempo, probablemente,
median toda una serie de aspectos que constituyen particularidades de la persona
pasará a pensar que efectivamente merece lo que obtiene, y la satisfacción se verá
que se derivan de su experiencia vital (aspectos personales), así como otras
reforzada.
circunstancias que rodean su contexto de trabajo (aspectos del contexto laboral),
entre las cuales incluimos el clima laboral.
GRADO DE CONCORDANCIA: EQUILIBRIO: Si existe una situación de concordancia y
equilibrio justo entre las expectativas del trabajador y la percepción de las
Todos estos aspectos, condicionan en gran medida las expectativas que los
compensaciones, éste experimentará una satisfacción por los resultados obtenidos
empleados se crean y la percepción de sus compensaciones.
y por la confirmación de sus expectativas.
Y tú, ¿Te sientes motivado en tu trabajo?

COMPENSACIONES/EXPECTATIVAS

Si el trabajador percibe que los resultados son desfavorables, sentirá una


insatisfacción. A partir de aquí, podrá poner en marcha una serie de
comportamientos inadecuados, como p.e. la agresividad o la depresión, al intentar
obtener el refuerzo que merece y no saber cómo alcanzarlo.
insatisfacción del cliente y una mala reputación.

¿Estás satisfecho con los resultados? Interacción social

La tecnología de la información a menudo aísla los trabajadores. En consecuencia,


los trabajadores se sienten más alejados y no tienen oportunidades para la
interacción social. Además, algunos trabajadores tienen miedo de perder sus
puestos de trabajo conforme la empresa se vuelve más eficiente y se necesitan
menos trabajadores. Esto crea tensión y ansiedad. Con menos trabajadores y con
mayor número de trabajadores que van y vienen, hay menos oportunidades para las
¿Qué aspectos crees que están influyendo en ello?
relaciones dentro de la empresa.
FACTOR HUMANO EN LAS ORGANIZACIONES
Resistencia
Descontar las preocupaciones de los trabajadores puede dañar una empresa a
Algunas decisiones empresariales tienen sentido desde un
largo plazo.
punto de vista pragmático y económico, pero estas decisiones
no tienen en cuenta siempre el factor humano. Con la
El factor humano es el aspecto de la organización en
tecnología de la información, los trabajadores pueden resistir
referencia a las emociones de los empleados, las
la incorporación de la tecnología, no sólo porque son
preferencias de las personas y otros problemas
escépticos de la tecnología, sino porque no quieren tomar el
ergonómicos. Las prácticas empresariales modernas ponen
tiempo para aprenderlo.
una fuerte énfasis en la tecnología sin embargo las
personas siguen siendo un factor importante en la ecuación.
Preocupaciones de ascenso
Cualquier empresa que ignora a sus empleados afecta el
negocio, y es probable que eventualmente se vean Algunos trabajadores se resisten al cambio, porque temen que
resultados negativos como los altos índices de rotación, el cambio ponga en peligro su ascenso en la empresa mediante
la reducción del valor que añaden al negocio. Incluso si las personas no están Parte de la ergonomía tiene que ver con el diseño de los productos utilizados por
calificadas, las empresas deben involucrar a las personas en el proceso de toma de los empleados, mientras que otra parte tiene que ver con la formación de los
decisiones, ya que van a tener un sentido de propiedad sobre las decisiones que la empleados. Los empleados deben aprender a realizar acciones de una manera que
empresa tome. reduzca al mínimo las lesiones y molestias.

Interfaz de usuario TÉCNICAS Y PROCESOS DE NEGOCIACIÓN

En el diseño de la tecnología, la empresa debe tener en cuenta cómo la gente usa la Negociar es un proceso muy parecido a vender, aunque con algunas diferencias. Ya
tecnología. Algunas tecnologías parecen útiles al principio, pero no funcionan bien hemos dicho que vender es persuadir, convencer al posible cliente para que piense
con el usuario y no será beneficioso al final para la organización. Algunas y actúe como el vendedor quiere que este actúe y, siempre, en beneficio de ambas
configuraciones no son muy divertidas y los trabajadores no están tan partes.
comprometidos debido a que algunos aspectos de la organización no son fáciles de
usar. Algunas herramientas no son fáciles de usar, o se necesita mucho En la negociación, también una parte intenta persuadir a la otra. Se ha dicho que
entrenamiento, pérdida de tiempo y recursos de la empresa. negociar es un proceso de resolución de un conflicto entre dos o más partes, pues
hay siempre, bajo la negociación, un conflicto de intereses. Puede ser un
Ergonomía intercambio social que implique una relación de fuerza, una lucha sutil por el
dominio. Esa fuerza se va desplazando de un lado a otro durante las diversas
Si un dispositivo o proceso de trabajo no es ergonómico, pueden ocurrir lesiones. etapas, no es conveniente en una negociación que una de las partes se beneficie de
Las personas pueden desarrollar lesiones por esfuerzo repetitivo y tendrá menor una relación de fuerza desequilibrada que imponga sus condiciones a la otra parte.
satisfacción en el trabajo. También serán menos eficientes. La ergonomía es un Es mejor que exista un cierto equilibrio de fuerzas y que se intercambien las
problema en casi todas las situaciones. Por ejemplo, en un restaurante, un presiones, finalmente las partes llegarán a un acuerdo cuando las fuerzas estén
lavaplatos puede tener una distensión de levantar objetos pesados. Incluso las igualadas.
lesiones de configuración de una oficina ocurren, así como la fatiga visual causada
por mirar la computadora por un largo tiempo. Esto es así porque, si frecuentemente una parte gana a costa de que la otra pierda,
se acaba produciendo la rotura de las relaciones comerciales. En la negociación, al
Entrenamiento igual que en la venta, deben beneficiarse ambas partes.
Generalmente, en la negociación no resulta afectada la relación total entre los mensaje que ha de ser interpretado por el que lo recibe; frecuentemente las
participantes, se difiere en una parte, no en el todo. Las fases de la negociación son afirmaciones que se hacen en las primeras fases de la negociación son de
muy parecidas a las de la venta; del conocimiento y dominio de estas fases va a naturaleza absoluta, del tipo de: «no concederemos nunca el descuento que nos
depender en gran medida el éxito o fracaso en la negociación. pide», «es absolutamente imposible aceptar esa forma de pago», «no podemos
considerar esa propuesta».
La preparación
Las propuestas
En la fase de preparación hay que definir lo que se pretende conseguir y cómo
conseguirlo, estableciendo los objetivos propios, qué tipos de descuentos pueden Las propuestas son aquello sobre lo que se negocia, no se negocian las discusiones,
ofrecerse en caso de necesidad y hasta dónde es posible ceder; es muy importante aunque las propuestas puedan ser objeto de discusión. Se sale de la discusión por
tratar de descubrir los objetivos del contrario. una señal que conduce a una propuesta, es decir, a una oferta o petición diferente
de la posición inicial; deben evitarse en las primeras propuestas las ofertas
La discusión arriesgadas, debiendo ser estas cautelosas y exploratorias pues, en todo caso, se
desarrollarán más adelante y es probable que sean aceptadas.
Como se ha dicho, las personas negocian porque tienen o creen tener un conflicto
de derechos o intereses. En esta fase que normalmente se llama de conversación, El intercambio
intercambio o presentación, tratando de quitar agresividad al vocablo discusión, se
exploran los temas que separan a las partes para conocer sus actitudes e Esta fase es la más intensa de todo el proceso de negociación y exige una gran
intereses. Es muy parecida a la etapa de determinación de necesidades que se atención por ambas partes, ya que en ella se trata de obtener algo a cambio de
practica en la venta. renunciar a otra cosa. Cualquier propuesta o concesión debe ser condicional, es
decir, por todo lo que se concede debe obtenerse algo a cambio.
Las señales
El cierre y el acuerdo
Como se ha dicho, en la negociación las posiciones van moviéndose, unas veces
acercándose y otras, por el contrario, distanciándose. La señal es un medio que Como es lógico, la finalidad del cierre es llegar a un acuerdo. Al igual que cuando
utilizan los negociadores para indicar su disposición a negociar sobre algo, es un hablábamos del cierre en la venta, también en la negociación debe hacerse en
forma segura y con firmeza, y para que sea aceptado debe satisfacer un número Pero la realidad nos demuestra que el cliente compara el valor del producto con el
suficiente de las necesidades de la otra parte. En cualquier caso y al igual que en la precio que se le pide y como es más fácil entender el precio que el valor, pues se
venta, existen dos tipos de cierre: entra en conflicto de intereses. Además es un hecho probado que a nadie le gusta
pagar más por algo, de lo que pensamos que ese algo vale. Por ello, el vendedor
 Cierre por concesión. Es la forma más frecuente en las negociaciones; tiene que hacer ver al cliente el auténtico valor de su producto.
equivale a terminar la fase de intercambio ofreciendo una concesión para
conseguir un acuerdo. El precio tiene una referencia: es más alto o más bajo que otro. El precio se
 Cierre con resumen. Después del cierre con concesión, es el tipo de satisface en el acto o a corto plazo, el valor se disfruta o constata a lo largo del
cierre de negociación más utilizado. Al terminar la fase de intercambio se tiempo, ya que el valor está en función de la calidad, el concepto calidad no se
hace un resumen de todos los acuerdos alcanzados hasta el momento, expresa en un solo parámetro, el concepto calidad no es mensurable, las cifras que
destacando las concesiones que hemos hecho por nuestra parte y se emplean en calidad no tienen sentido propio; por ejemplo: ¿cómo se mide la
subrayando lo ventajoso de llegar a un acuerdo sobre los puntos comodidad? ¿Y la seguridad? ¿Y la marca?
pendientes.
Los clientes suelen decir: «es muy caro...», cuando en realidad deberían decir: «no
En la negociación adquieren una gran importancia los movimientos estratégicos, la veo el valor...» o «es un precio muy elevado».
forma en que hagamos estos y respondamos a los de nuestro opositor determinará
nuestro éxito o fracaso. Tengamos en cuenta que el objetivo en una negociación no La objeción «es demasiado caro» puede ser de naturaleza objetiva o táctica. Hay
es únicamente llegar a un acuerdo satisfactorio, sino conseguir el mejor de los razones objetivas cuando el cliente compara el precio con el valor orientativo, el
acuerdos posibles. cual hace que el precio parezca excesivamente elevado, o cuando el cliente no
puede pagar el precio.
Negociación del precio
Hay razones tácticas cuando el cliente ataca el precio por principio o persiguiendo
Es la objeción típica. Ya dijo Valle-Inclán: «... es de necios confundir valor y otros objetivos.
precio...».
La tarea del vendedor consistirá en averiguar si la razón, aparentemente objetiva,
que el comprador dará es verídica o si solo es una tapadera. Deberá hacer
preguntas detalladas y de control y prestar atención para ver si la respuesta es Preguntar para averiguar qué cantidad nos separa es una información muy
convincente y bien pensada o rebuscada y esquiva, así averiguará cuáles de los importante para proseguir con el proceso de negociación. Dividir el precio en
mencionados son los verdaderos motivos del cliente. pequeñas fracciones.

El principio fundamental en la negociación es: si no tenemos que negociar, no Ejemplo: Le entregamos este iPad y tan solo incrementaremos en su factura
negociemos; por tanto, el vendedor haría muy bien en situarse en una posición en la mensual 14 euros.
que no tuviera que negociar, exponiendo sus condiciones con firmeza y seguridad,
como si este fuera inamovible sin emplear términos como «alrededor», «sobre», ¿Cómo presentar el precio?
«más o menos». No debe, tampoco, dejar que una contracción nerviosa o un
tartamudeo le delate que está dispuesto a regatear. Es conveniente que el vendedor presente el precio cuando ya haya argumentado
sobre los beneficios que su producto va a proporcionar al cliente y este haya
El vendedor que representa un producto altamente diferenciado, único en el aceptado algunos. Debe mencionarlo sin brusquedad, con toda naturalidad, al decir
mercado, será fuerte y, o no tendrá que negociar, o podrá negociar mejor. el precio no debe bajarse el tono de la voz o decirlo con timidez, ni mirar a otro
lado.
Estrategias para las objeciones al precio
El precio conviene presentarlo entre dos beneficios, según la técnica del
Al hablar de precio no se debe decir precio barato ni precio caro, en su lugar se «bocadillo» o del «sandwich» de la forma siguiente:
debe decir precio bajo o, mejor aún, precio adecuado y precio elevado. Barato se
asimila en la mente del cliente como de poca calidad y caro puede ser una barrera  Presentar uno o varios beneficios del producto.
para el presupuesto del cliente.  Dar el precio sin vacilación.
 Presentar la utilidad que esos beneficios tienen para el cliente.
El servicio al cliente, la calidad y la marca, como hemos visto, son las armas más
eficaces de todo el arsenal del vendedor. Siempre que le sea posible debe hacer ¿Cómo vender un producto de precio elevado?
referencia a estos factores.
Resaltando la calidad del producto, el servicio y la marca, despertando en el cliente
la conciencia de calidad, incitando el amor propio del cliente y halagando el buen
gusto del comprador, estimulando en ellos el móvil del orgullo, vanidad y prestigio.
Presentando ventajas y beneficios del producto, buscando la utilidad para el cliente, Por último, permitidme hacer dos reflexiones sobre los precios haciendo alusión a
hasta que este vea que lo que paga es menor de lo que recibe, hablarle de inversión una cita de John Ruskin: «Mucho después de haber olvidado las mieles de un precio
y no de gasto y dividir el precio en pequeñas fracciones, como ya vimos con bajo, uno sigue recordando el amargor de la mala calidad y del mal servicio».
anterioridad
O esta otra de Heinz Beck: «Con los productos muy baratos se suelen necesitar
Estratagemas de los compradores pocos argumentos para venderlos, pero muchos para atender las reclamaciones».

Los compradores también utilizan ciertos métodos y trucos para sacar provecho TÉCNICAS DE MOTIVACIÓN LABORAL
de los vendedores. Algunos de estos son:
Son muy diversas y variadas las técnicas que se pueden aplicar en una
 Apelar a la vanidad del vendedor para conseguir que haga concesiones, organización para generar un clima de trabajo que estimule a los trabajadores y los
con frases como: « ¡Usted tiene una gran influencia!». motive.
 Iniciar las negociaciones con una queja para despertar en el vendedor un
sentimiento de culpa. 1. Adecuación persona-puesto de trabajo:
 Subrayar la importancia del poder adquisitivo propio, y crear
perspectivas de futuro favorables. Los procesos de selección de personal tienen especial importancia a la
 Ablandar al vendedor con negociaciones duras. hora de seleccionar a la persona idónea para el puesto de trabajo, esto
 Empezar con puntos de los que es posible alcanzar rápidamente un es, con los conocimientos, capacidades o habilidades y la experiencia
acuerdo. De esta forma se animará y estará dispuesto a hacer necesarias para desempeñar el trabajo en cuestión.
concesiones.
2. Manual de acogida de nuevos empleados:
 Hacer concesiones en puntos sin importancia para pedirlas a la recíproca
en los aspectos importantes.
Su finalidad es conseguir la incorporación eficaz de los nuevos
 Mencionar continuamente las propias concesiones y hacer resaltar que se
contratados, informándoles de la política de empresa, su funcionamiento,
espera lo mismo del vendedor.
composición, relaciones interpersonales, etc., de manera que se logre una
 Dar la aprobación con reservas, para retener en la mano un medio de
rápida integración en la empresa.
coacción.
3. Establecimiento de Objetivos: mayor autonomía haciendo sentir al trabajador responsable de su propio
trabajo.
Consiste en fijar las metas que la empresa debe conseguir en un período
de tiempo concreto, que se debe indicar para poder comprobar el grado 7. Participación en la empresa:
de consecución de los mismos. Dichos objetivos, deben ser posibles,
desafiantes (que supongan un esfuerzo y un reto para el trabajador) y Permite lograr un mayor grado de compromiso e identificación con la
medibles (para comprobar su consecución o no). empresa, estimulando y canalizando la capacidad creativa e innovadora de
los individuos, incrementando la calidad y la productividad en el trabajo.
4. Reconocimiento del trabajo:
8. Formación y desarrollo profesional:
Reconocer el comportamiento y desempeño de los empleados se traduce
en tangibles y positivos efectos, al ampliar los niveles de satisfacción así Son herramientas que permiten a los trabajadores una adquisición o
como al mejorar la rentabilidad y productividad de la organización a todos actualización de conocimientos, mejora de las habilidades para un mejor
los niveles y a un bajo coste. Se trata de ofrecer un sincero y efectivo desempeño. Esto supone un enriquecimiento laboral y personal del
reconocimiento que podrá ser mediante palabras o hechos que refuercen trabajador.
la actuación del trabajador o mediante un incentivo económico.
9. Evaluación del desempeño:
5. La mejora de las condiciones de trabajo:
Se trata de evaluar el rendimiento del trabajador y el logro de los
Nos referimos a una mejora del entorno de trabajo, favoreciendo la objetivos. Es conveniente realizarlo de forma periódica, facilitando en todo
confortabilidad en el trabajo. caso la información acerca de los resultados de dicha evaluación.

6. Enriquecimiento del trabajo: ESTILOS DE LIDERAZGO

En el caso de trabajos monótonos, consistentes en realizar una actividad Se pueden liderar de muchas formas ya que existen muchas formas de conseguir
rutinaria, se podrá favorecer la motivación aumentando el número de que otros actúen. Tras numerosos estudios sobre el liderazgo en grupos a lo largo
tareas de cada puesto, o bien haciendo el trabajo más desafiante, con de la historia, se han conseguido definir varios estilos de liderazgo.
En general todos se diferencian en función de la aproximación a la tarea por parte En 1964, Blake y Mouton proponen un modelo de matriz de estilos de liderazgo
del líder y a su gestión de las relaciones con los miembros del equipo. Lo que no se (“Management Grid”) basado en esos mismos conceptos:
ha podido determinar cuál es el mejor de todos ellos, y esto es así porque en
realidad, cada uno tiene su sentido en función del contexto y del entorno en el que a) Estilo empobrecido o Líder pobre: Baja preocupación por la personas y por la tarea.
nos encontremos: los estilos de liderazgo deben pues adaptarse a las situaciones y
a los seguidores. b) Estilo Administrador o Autoritario: Baja preocupación por las personas y alta por
las tareas.
Un estilo puede ser más eficaz que otro según las circunstancias, no hay fórmulas
c) Estilo Paternalista: Alta preocupación por las personas y baja por las tareas.
mágicas que funcionen siempre. Esta conclusión abre la posibilidad de que el líder
pueda gestionar su propio estilo de liderazgo, sin estar definitivamente vinculado a d) Estilo Líder de Equipo: Alta preocupación por la tarea y por las personas. Estilo
uno, utilizando un estilo diferente o varios de ellos en función de su lectura de la óptimo.
situación en cada momento.
La mayoría de los estudios actuales coinciden en que es importante tantos las
A. LIDERAZGO SEGÚN ORIENTACIÓN DEL LÍDER A LA TAREA O A LAS PERSONAS: conductas orientadas a las personas como a las relaciones. La orientación a las
personas puede incrementar la satisfacción de los miembros del equipo y el
* Conducta orientada a las relaciones: El líder demuestra interés prioritario por
compromiso de los mismos. La orientación a la tarea repercute en un mejor
la situación de las personas que integran el grupo y su relación con ellas. Cobran
conocimiento de las expectativas y resultados esperados en la función así como en
importancia aspectos como: la escucha, el apoyo emocional, la comunicación, el
una mejor coordinación y optimización de los recursos empleados.
feed-back, etc...
Actividades y comportamientos orientados a la tarea:
* Conducta orientada a las tareas: El líder se muestra más interesado en las
tareas y objetivos de la organización y en el papel que las personas juegan en su  Planificación operativa
realización. Son importantes entonces la fijación de objetivos, la organización,  Clarificación de roles y resultados esperados
planificación, control, etc…  Marcación de objetivos
 Monitorización de desempeño
 Resolución de problemas
Actividades y comportamientos orientados a las personas: mejor aceptada pues al ser considerada su opinión la tomarán como propia, mayor
motivación del equipo al ser considerados como elementos importantes en la toma
 Ayuda, confianza y consideración personal de los miembros del de decisiones.
equipo
 Desarrollo profesional de las personas El liderazgo participativo es especialmente útil en aquellas situaciones en las que
 Reconocimiento de los logros obtenidos las consecuencias de las decisiones son importantes y el líder carece de toda la
 Consulta de decisiones al equipo información necesaria ante una cuestión compleja. Para que este estilo sea eficaz
 Mantener informados de asuntos que les influirán es fundamental la cooperación de los participantes que en algunas situaciones
pueden preferir no participar (por intereses contrapuestos por ejemplo).

B. LIDERAZGO SEGÚN PARTICIPACIÓN EN LA TOMA DE DECISIONES: Una de las principales actitudes del líder participativo es la delegación de
responsabilidades, que supone una delegación de poder para que el subordinado
Existen tres estilos de dirección según el grado en el que el líder toma las tome una serie de decisiones de manera individual. La delegación tiene también
decisiones: unas claras ventajas que se resumen a continuación:

* Autocrático o autoritario: el líder toma las decisiones independientemente del  Aumenta la motivación y el compromiso de los subordinados
grupo.  Libera tiempo del director
 Fomenta el desarrollo de la persona
* Democrático o participativo: el líder busca y promueve la participación del
grupo antes de tomar una decisión importante. C. LIDERAZGO SEGÚN ORIENTACIÓN DEL LÍDER A LA TRANSFORMACIÓN Y CAMBIO:

* Delegación o “Laissez-faire”: el líder permanece alejado de los centros de a) Teoría del Líder Transformador
decisión y sólo interviene excepcionalmente.
El líder transformador consigue obtener el compromiso de los demás y se
Las ventajas de obtener la participación de los miembros de un equipo en las convierte en el impulsor del cambio organizativo. El líder transformador busca el
decisiones son las siguientes: la calidad de la decisión será mayor pues contará con apego ético y emocional de los seguidores con los objetivos y valores a conseguir
los conocimientos y experiencia de mayor número de participantes, la decisión será para intentar movilizar al grupo. La plasmación de su influencia se produce a través
de la identificación personal de los miembros del equipo con el propio líder, lo que b) Estilo Administrador o Autoritario: Baja preocupación por las personas y
les llevara intentar agradarle e imitarle, y les lleva a ir más allá de un puro interés alta por las tareas.
individual por la función. En ocasiones se asocia este tipo de liderazgo a un líder
carismático por las cualidades personales del líder, pero en realidad se puede c) Estilo Paternalista: Alta preocupación por las personas y baja por las tareas.
conseguir si se ejercitan una serie de conductas determinadas.
d) Estilo Líder de Equipo: Alta preocupación por la tarea y por las personas.
La teoría identifica una serie de comportamientos que ayudan a tener éxito en la Estilo óptimo.
transformación a los líderes:
LAS TICS E INTERNET
 Creadores de una visión atractiva, innovadora y creíble capaz de llamar la
atención del grupo. Que son las TIC?: Se denominan Tecnologías de la Información y las comunicaciones
 Alta capacidad de comunicación para conseguir la compresión y la colaboración (TIC) al conjunto de tecnologías que permiten la adquisición, producción,
del equipo. almacenamiento, tratamiento, comunicación, registro y presentación de
 Generan confianza a través de su ejemplo personal, integridad y coherencia. información. (Datos, Voz e imágenes)
 Optimismo: Mantienen una actitud positiva a sí mismos y se enfocan en los éxitos
más que en los fracasos. Las TICs aparecen como proceso de convergencia tecnológica de las siguientes
 Despliegan altas expectativas en los miembros del equipo y muestran confianza áreas de conocimiento y aplicación: Electrónica, Informática y Telecomunicaciones.
en su capacidad de conseguirlas.
El carácter de "Tecnología" para este campo del conocimiento y actividad
b) Teoría del liderazgo emocional o líder resonante profesional está dado en forma integrada y de la manera siguiente:

Según Goleman: Orientativo (“Ven Conmigo”), Capacitador (“Inténtalo”),  Un conjunto de conocimientos científicos procedentes de la Física,
Participativo (“¿Qué opinas?”), Afiliativo (“Las personas primero”), Imitativo (“Haz
Matemática, Electrónica, teoría de las señales que hoy tienen una base
como yo”) , Coercitivo (“Haz lo que te digo”).
teórica propia.
 Un conjunto de técnicas y métodos que permiten diseñar, construir,
a) Estilo empobrecido o Líder pobre: Baja preocupación por la personas y por
fabricar, operar y evaluar sistemas complejos.
la tarea.
 Un campo de aplicación de profundo impacto socio-económico cultural.
Internet surge a fines de los años 60 pero logra su desarrollo hasta mediados de la comunicaciones convencionales como son la Televisión y la Radio, que por otra
década de los 90 con el desarrollo de los navegadores WEB y la aparición de parte también se imbrican hoy día a la Internet.
contenidos atractivos, fáciles de interactuar e interesantes que provocaron la
explosión desde círculos académicos hasta un universo mucho más amplio de ¿QUÉ BRINDAN LAS TIC?
personas interesadas en acceder a este inagotable fuente de información y
conocimientos. El acceso a la información, el intercambio y la creación de conocimientos así como
consecuencia de ello contribuyen de manera significativa al fortalecimiento del
Se reafirma la decisión de proseguir la búsqueda para garantizar que todos se desarrollo económico, social y cultural lo que ayuda a todos los países a alcanzar
beneficien de las oportunidades que puedan brindar las TICs, recordando que los los logros y objetivos de desarrollo acordados internacionalmente, especialmente
gobiernos y también el sector privado, la sociedad civil, las Naciones Unidas y otras los de la Declaración del Milenio de las Naciones Unidas, por ello es posible hacer
organizaciones internacionales deben colaborar para acrecentar el acceso a la más eficaz este proceso si se eliminan las barreras que impiden el acceso
infraestructura y las tecnologías de la información y la comunicación, así como a la universal, ubicuo, equitativo y asequible a la información, subrayamos la
información y al conocimiento capacidades, propiciar la confianza y la seguridad en importancia de eliminar estas barreras con el fin de superar la brecha digital,
cuanto a la utilización de las TICs creando un entorno habilitador a todos los especialmente las que impiden alcanzar el pleno desarrollo económico, social y
niveles, desarrollar y ampliar las aplicaciones TICs, promover y respetar la cultural de los países, así como el bienestar de sus ciudadanos en particular de los
diversidad cultural, reconocer la función de los medios de comunicación, abordar países en vías de desarrollo.
los aspectos éticos de la sociedad de la información y alentar la cooperación
internacional y regional. Son éstos los principios fundamentales de la construcción Las TICs están haciendo posible que una población sumamente más numerosa que
de una sociedad de la información para todos cuya elaboración ha sido enunciada en cualquier otro momento del pasado participe en la ampliación y en el
en la Declaración de Principios de Ginebra. intercambio de las bases del conocimiento humano, contribuyendo a su crecimiento
en todos los ámbitos de la actividad humana así como a su aplicación a la
La cantidad de datos que difunde la sociedad de la información es abrumadora y educación, la salud y la ciencia, las mismas poseen enormes posibilidades para
paralelamente se abrió un espacio de comunicaciones interhumanas que supera lo acrecentar el acceso a una educación de calidad, favorecer la alfabetización y la
habido y realizado por las generaciones anteriores, las distancias ya no son un educación primaria universal así como para facilitar el proceso mismo de
problema para el intercambio de mensajes, el E-mail o el correo electrónico y la aprendizaje, que sentará de esa forma las bases para la creación de una sociedad
telefonía móvil a la que se le incorporó la tecnología digital permiten superar las
de la información abierta a todos y orientada al desarrollo de una economía del  Interactiva.
conocimiento que respete la diversidad cultural y lingüística.  Tiempo real o diferido.
 Difusión de conocimientos.
FUNCIONALIDADES DE LAS TICS E INTERNET
Entorno Social.
Internet pone a su disposición funcionalidades básicas que abren infinitas y nuevas
posibilidades de desarrollo personal y de gestión de actividades cotidianas:  Comercio.
Familiares, laborales y lúdicas, a continuación mostraremos a modo de resumen las  Ocio.
funciones de Internet.  Aprendizaje.

INTERNET: Procedamos a definir cada una de las funciones antes mencionada:

Funciones. Información: Internet integra la mayor base de datos jamás imaginada, con
información multimedia de todo tipo y sobre cualquier temática, además puede
 Información. integrar los medios de comunicación convencionales como son: canales de Radio,
 Amplio. televisión, Prensa, Cine, entre otros….
 Actualidad.
 De todo tipo. Comunicación: Internet constituye un canal de comunicación (Escrita, visual,
 Multimedia. Sonora,…) a escala mundial, cómodo, versátil y barato (muchos países disponen de
 Interactiva. una tarifa telefónica cada vez más plana que permite muchas horas de conexión
 A la carta. (Tema, tiempo, Lugar) por muy poco dinero). La Red facilita la comunicación y la relación interpersonal
(Inmediata o Diferida), la cual permite compartir y debatir ideas facilitando el
Comunicación. trabajo cooperativo y la difusión de las creaciones personales.

 Universal. (Cualquier persona y lugar) Entorno Social: Cada vez son más las empresas que utilizan Internet como
 Multimedia. escaparate publicitario para sus productos y servicios (Asesoramiento, Mediación,
Banca), además de que cada vez son más las personas que realizan su trabajo, total Integrar esta nueva cultura en la educación, contemplándola en todos los niveles
o parcialmente, lejos de las dependencias de su empresa, por ello los sistemas de de la enseñanza, involucrando a maestros y alumnos en las nuevas metodologías
Telecomunicaciones permiten si es necesario, estar en permanente contacto y que ofrece hoy en día las TIC.
acceder a la información y a las personas de todos los departamentos de la
entidad. Ese conocimiento se traduzca en un uso generalizado de las TIC para lograr,
libre, espontánea y permanentemente, una formación a lo largo de toda la vida.
Para poder acceder a Internet debe ser necesario adquirir habilidades para
aprovechar sus posibilidades educativas (Herramientas, Navegadores, Correos El segundo aspecto, aunque también muy estrechamente relacionado con el
electrónicos, Grupos de noticias, Charlas, entre otras), que evitan la divagación al primero es más técnico, se deben usar las TIC para aprender y para enseñar, es
navegar y ahorra tiempo en la búsqueda. decir, el aprendizaje de cualquier materia o habilidad se puede facilitar mediante
las TIC y en particular mediante Internet, aplicando las técnicas adecuadas, lo cual
Las TICs e Internet en los procesos de Enseñanza-Aprendizaje tiene que ver muy ajustadamente con la Informática Educativa, en donde se da
énfasis a los criterios que tiene que tener el docente en la selectividad y evaluación
Las TIC han llegado a ser uno de los pilares básicos de la sociedad y hoy es de software educativo como los simuladores, tutores, EAO, fomentando el uso de
necesario proporcionar al ciudadano una educación que tenga en cuenta esta software libres en nuevos enfoques y metodologías que permitan analizar la
realidad, las posibilidades educativas de las TIC han de ser consideradas en tres importancia en lograr en nuestros alumnos la comprensión de conceptos, a través
aspectos: Conocimiento, Aplicación y los Valores éticos y moral en el uso de las TIC. de los problemas éticos y morales y los impactos de las áreas de interacción hoy
en día.
El primer aspecto es consecuencia directa de la cultura de la sociedad actual, no se
puede entender el mundo de hoy sin un mínimo de cultura informática, ya que es El tercer aspecto es importante, ya que fomenta a los agentes involucrados en la
preciso entender cómo se genera, cómo se almacena, cómo se transforma, cómo educación a lograr valores éticos y morales en el uso de las TIC, partiendo desde el
se transmite y cómo se accede a la información en sus múltiples manifestaciones ejemplo que debe dar el maestro en el aula de clase, el verdadero significado del
(textos, imágenes, sonidos, hipertextos, hipermedias, etc.) si no se quiere estar al respeto a los derechos de autor, el control, confiabilidad que estén acordes a las
margen de las corrientes culturales, hay que intentar participar en la generación políticas y normas establecidas por la sociedad.
de esa cultura, es ésa la gran oportunidad que presenta dos facetas:
Es fundamental para introducir la informática en la escuela, la sensibilización e terreno; es Dentro de los campos que brindan las TICs e Internet como medios de
iniciación de los profesores a la informática, sobre todo cuando se quiere apoyo al proceso Enseñanza-Aprendizaje se cuentan:
introducir por áreas (Como contenido curricular y como medio didáctico), por lo
tanto, los programas dirigidos a la formación de los profesores en el uso educativo Consultorías y Tutorías Telemáticas: Cada vez más habitual en las
de las nuevas TICs deben proponerse como objetivos: Universidades a distancias, a través del correo electrónico los profesores
contestan las dudas de sus estudiantes y se intercambian trabajos.
Contribuir a la actualización del Sistema Educativo que una sociedad fuertemente
influida por las nuevas tecnologías demanda. Clases a distancia: Mediante sistemas de video comunicación a través de
Internet, se permite el seguimiento de clases magistrales impartidas por un
Facilitar a los profesores la adquisición de bases teóricas y destrezas operativas experto y posteriormente un turno de preguntas al respecto si quien lo recibe,
que les permitan integrar, en su práctica docente, los medios didácticos en general desea.
y los basados en nuevas tecnologías en particular.
Centros Educativos Virtuales: Se puede crear este tipo de centros
Adquirir una visión global sobre la integración de las nuevas tecnologías en el estudiantiles para la capacitación de los estudiantes y de los mismos profesores.
currículum, analizando las modificaciones que sufren sus diferentes elementos:
Página de la asignatura: Los profesores en conjunto elaboran una página WEB
 Contenidos, que permiten poner a disposición de todos los interesados informaciones de interés
 Metodología, como son: Programas metodológicos, Sistemas de evaluación, Esquemas, Apuntes,
 Evaluación, etc. Enlaces a sitios de interés, Bibliografía y artículos afines (Algunos accesibles en
línea), estas iniciativas constituyen un centro de recursos temáticos sobre la
Capacitar a los profesores para reflexionar sobre su propia práctica, evaluando materia, ya que entre todos los profesores reducen esfuerzos y enriquecen la
el papel y la contribución de estos medios al proceso de enseñanza-aprendizaje. página desde diferentes perspectivas.

Finalmente, considero que hay que buscar las oportunidades de ayuda o de Acceso a materiales didácticos en línea y otras páginas WEB de interés: Como
mejora en la Educación explorando las posibilidades educativas de las TIC sobre el parte del intercambio entre profesores de diferentes partes del mundo existen
portales WEB muy interesantes que permiten buscar materiales educativos y
recursos para profesores de todas las áreas del conocimiento, talleres virtuales, Han sido muchos los que recibieron su propia experiencia sobre el desarrollo de
buscadores de contenidos educativos, entre otros sitios de interés. Sistemas de Educación basados en la WEB, se ofrecen las herramientas básicas
avanzadas y los procedimientos necesarios para introducirse en el medio en
Tele bibliotecas: Se pueden consultar los fondos de las bibliotecas alcanzar objetivos concretos: Contactar con Comunidades Educativas en la Red,
convencionales, reseñas de los libros y acceder a textos completos de libros ya Organizar Material audiovisual, realizar seguimiento del estudio curricular a
informatizados. distancia, prácticas, organización de grupos de trabajo, interacción entre alumnos,
evaluación automática del alumnado, acción tutorial y guía de estudio virtual.
Ludotecas Virtuales: Permiten el acceso a juegos didácticos que consolidan las
clases de ejercitación haciendo más fácil la comprensión de estás, con un entorno Dado que se está comenzando una etapa de cambios profundos en el modelo
amigable y dinámico para los estudiantes. educativo de la enseñanza a distancia, y después de haber analizado los diversos
fundamentos y recursos disponibles en Internet, en el presente estudio se propone,
Como bien plantea Berrios, G: ¨La tecnología Multimedia lleva a la computación a un la utilización de recursos para satisfacer objetivos de carácter general, entre los
nuevo nivel, pues mediante esta se puede llegar a cambiar la forma en que piensa, que destacan: Facilitar el aprendizaje significativo y activo, ofertar nuevas técnicas
se comunica, trabaja y aprende la gente, debido a que el aprendizaje ha de organización docente y sobre todo, incrementar el flujo de información entre
evolucionado de un proceso de aplicaciones fragmentadas, parciales y de corte todos los agentes que participan en el proceso educativo a distancia.
conductista del conocimiento hasta convertirse en un abordaje ¨constructivista¨,
bien estructurado del tipo ¨Arquitectura de Hipermedios¨, el cual favorece la Para alcanzar éstos y otros objetivos relacionados se propone para el periodo
estimulación de los procesos mentales superiores y la definición con la redefinición 2007-2008, una propuesta en la implementación de una plataforma e-learning para
de sus mapas mentales, mediante la adquisición de nuevos aprendizajes enlazados la modalidad a distancia, este estudio abarca tres etapas:
o asociados a otros previamente obtenidos, haciéndolos realmente significativos,
esto se debe a su alto poder de estimular todos los sentidos del educando mientras  Primera Etapa: Implementar los diversos cursos a distancia de la
aprende y de ampliar los horizontes comunicacionales y facilidades de exploración facultad de Educación en Lima.
de información, las TICs, la Multimedia y la Internet.¨ (5)  Segunda Etapa: Implementar los cursos a distancia en las diversas
facultades que dispone actualmente nuestra casa de estudios.
Las TICs en la Educación a Distancia  Tercera Etapa: Implementar a nivel nacional el sistema virtual en los
diversos centros de capacitación regional.
Por tal motivo se debe analizar diversas pautas en la elaboración del nuevo trabajo y la opinión de otros, son las causas principales de la incierta comunicación
material docente, cuyo proceso de digitalización se debe de contar con los medios, entre las personas formando así una problemática conflictiva.
recursos y personal especializado, en la elaboración de materiales audio-visuales, El tema que trataremos es la relación entre una comunicación eficaz y
concretando los nuevos servicios que podrían establecerse para realizar la organizacional con el correcto funcionamiento de una institución.
enseñanza a distancia, a través del Internet.

Se presentan la propuesta de validar el estudio del CHAEA, en la facultad de


Educación, para el periodo 2007, que permita identificar los estilos de aprender y
los estilos de enseñar de nuestros alumnos y de nuevas metodologías de parte de
nuestros maestros para analizar los estilos de enseñar, que permiten contar con
propuestas concretas a mediano plazo, esto se propone la implementación del
producto Claroline – Linux.

Para alcanzar estos objetivos es necesario revisar los papeles de los agentes que
participan directamente en la docencia como son: los Profesores Coordinadores,
los Profesores-Tutores y los Alumnos, realizar un estudio sobre la elaboración del
nuevo material didáctico y como en la organización de los nuevos servicios
sugeridos, por nuestra facultad.

LA COMUNICACIÓN EN EL AMBITO LABORAL EDUCATIVO.

Gran parte de la problemática que afronta el mundo actual, dentro de las


instituciones, como en la misma familia y en la vida personal, es el momento de
relacionarse entre sí. El no escuchar, la inadecuada emisión y recepción del
mensaje al momento de comunicarnos y el conflicto para reconocer y respetar el
CONCEPTO DE COMUNICACIÓN ORGANIZACIONAL Y EFECTIVA. proceso comunicativo, con la finalidad de que el mensaje aterrice en el
logro de su propósito.
“La comunicación es el acto por el cual un individuo establece con otro un
contacto que le permite transmitir una información”. Es decir, que la función de la Mientras que “La Comunicación Eficaz entre dos personas se produce
comunicación no es sólo trasladar el mensaje sino cumplir el propósito cuando el receptor interpreta el mensaje en el sentido que pretende el emisor”,
comunicativo con el cual se está interactuando. Como podemos darnos cuenta, la manera en que nos comunicamos dentro de
cualquier ámbito, influye de manera importante en el contexto laboral, el cual se
“La comunicación organizacional es el conjunto de técnicas y actividades abordará a continuación.
encaminadas a facilitar y agilizar el flujo de mensajes que se dan dentro de la
organización para con sus miembros y la sociedad, con la finalidad de influir en las COMUNICACIÓN DENTRO DEL AMBITO LABORAL
opiniones, actitudes, relaciones y conductas de éstos, para respaldar así el logro de
sus objetivos acrecentando de una u otra forma la productividad. Toda buena o mala comunicación conlleva a actitudes, actividades o
mensajes comunicativos que influyen en el ámbito laboral. Por otra parte las
Según Guillermina Izquierdo (2010) la comunicación efectiva reúne relaciones a nivel laborar nos llevan a aumentar el nivel de comunicación efectiva,
características tales como: aminorando los conflictos, las diferencias y puntos de vistas de los otros así como
reduciendo las discrepancias y conflictos. La correcta Comunicación organizacional
a) El mensaje que se quiere comunicar. Llega a la persona o grupos y efectiva, crean un ambiente armónico entre el personal, generando relaciones
apropiados. agradables que permiten de manera individual la satisfacción de sus necesidades y
alcanzar la realización laboral y personal en lo posible. De acuerdo a los resultados
b) La consecuencia de la comunicación. Es el cambio de conducta en el esperados en el Test de Comunicación Organizacional, se proponen las siguientes
receptor. medidas de acción.

c) Coherencia entre el lenguaje verbal y el corporal. En caso de ser Director, que él como guía de la institución, tome en cuenta
las siguientes sugerencias:
e) Cuando se ha escogido el momento, las palabras y la actitud apropiada
no es más que el uso adecuado de los signos lingüístico a través de un
Mantener informado al personal acerca de su No darle demasiada importancia a comentarios que no
desempeño. las tienen.
Reconocer méritos de su personal y hacérselos saber. No culpar a nadie, la verdad siempre aparecerá.
Procurar no felicitar o llamar la atención a su personal
delante del resto de sus compañeros. Tratar de no dejarse influenciar por los compañeros, a
Avisar con tiempo, cualquier cambio que pueda afectar veces resulta contraproducente.
el desempeño del personal y/o la institución.
Al momento de dirigirse a alguno de los compañeros, Ante un problema en lo posible buscar la forma de
tener presente sus características personales. comunicarse con el compañero hablando sin sobresaltos, de manera clara
y buscando una solución.
En el caso de observar alguna problemática, no admitir
que se haga más grande y establecer una reunión entre los implicados
No perder el piso, a veces nos dejamos llevar por
con la finalidad de aclarar el problema.
nuestros sentimientos.
Si es posible realizar alguna actividad con la finalidad de
convivir donde puedan participar todos, ya sea un juego, una comida o Respetar a las autoridades escolares y compañeros.
una reunión.
Aprender a escuchar.
Respetar al personal docente.
CUESTIONARIO DE COMUNICACIÓN ORGANIZACIONAL
Aprender a escuchar
Instrucciones: El presente cuestionario tiene una lista de preguntas, lea
En caso de ser personal docente.
cuidadosamente cada una de ellas y elija la respuesta que mejor convenga. Por
Tratar de ponerse en el lugar del compañero o favor solo dé una respuesta a cada pregunta y no deje ninguna en blanco.
compañera, con la finalidad de entenderlos. Esto es empatía. Toda la información que se obtenga será manejada confidencialmente.
Ser solidario o colaborador según se requiera.
1.- ¿Se le brinda atención cuando va a comunicarse con su DIRECTOR?
SIEMPRE SIEMPRE
FRECUENTEMENTE FRECUENTEMENTE
ALGUNAS VECES ALGUNAS VECES
OCASIONALMENTE OCASIONALMENTE
NUNCA NUNCA

2.- ¿Cree que los comentarios o sugerencias que le hace a su superior son 5.- ¿Tiene confianza con su director para poder hablar sobre problemas
tomados en cuenta? personales?

SIEMPRE SIEMPRE
FRECUENTEMENTE FRECUENTEMENTE
ALGUNAS VECES ALGUNAS VECES
OCASIONALMENTE OCASIONALMENTE
NUNCA NUNCA

3.- ¿Su director le hace sentir la suficiente confianza y libertad para discutir 6.- ¿Recibe retroalimentación de su director sobre su desempeño?
problemas sobre el trabajo?
SIEMPRE
SIEMPRE FRECUENTEMENTE
FRECUENTEMENTE ALGUNAS VECES
ALGUNAS VECES OCASIONALMENTE
OCASIONALMENTE NUNCA
NUNCA

7.- ¿Recibe toda la información que necesita para poder realizar eficientemente su
4.- ¿Se les permite hacer retroalimentación acerca de la información que
trabajo?
recibieron?
SIEMPRE
FRECUENTEMENTE
ALGUNAS VECES 11.- ¿Existe una atmósfera de confianza entre compañeros?
OCASIONALMENTE
NUNCA
SIEMPRE
FRECUENTEMENTE
8.- ¿Cree que su director utiliza un lenguaje entendido cuando se dirige a usted? ALGUNAS VECES
OCASIONALMENTE
SIEMPRE NUNCA
FRECUENTEMENTE
ALGUNAS VECES 12.- ¿Cree que hay integración y coordinación entre sus compañeros del mismo
OCASIONALMENTE nivel para la solución de tareas y problemas?
NUNCA

SIEMPRE
9.- ¿Las instrucciones que recibe de su director son claras? FRECUENTEMENTE
ALGUNAS VECES
SIEMPRE OCASIONALMENTE
FRECUENTEMENTE NUNCA
ALGUNAS VECES
OCASIONALMENTE 13.- ¿Cree que la comunicación entre sus compañeros del mismo nivel es de
NUNCA manera abierta?

SIEMPRE
10.- ¿Su director le da de manera oportuna la información? FRECUENTEMENTE
ALGUNAS VECES
SIEMPRE OCASIONALMENTE
FRECUENTEMENTE NUNCA
ALGUNAS VECES
OCASIONALMENTE 14.- ¿Cree que se oculta cierta información entre compañeros del mismo nivel?
NUNCA
SIEMPRE
FRECUENTEMENTE
ALGUNAS VECES
OCASIONALMENTE
NUNCA
APLICACIONES INFORMATICAS SEGUNDO AÑO DE software y de Recurso Humano. Un sistema informático normal emplea un sistema
BACHILLERATO que usa dispositivos que se usan para programar y almacenar programas y datos.

SISTEMA INFORMATICO Si además de la información, es capaz de almacenar y difundir los conocimientos


que se generan sobre cierta temática, tanto dentro, como en el entorno de la
Concepto.- Es el conjunto de partes interrelacionadas, hardware, software y entidad, entonces está en presencia de un sistema de gestión de información y
conocimientos. Como utilizador final emplea esa información en dos actividades
de recurso humano que permite almacenar y procesar información.
fundamentales: la toma de decisiones y el control.

Inicios de un sistema informático


La actividad de un sistema comienza cuando en la entidad donde se
utiliza, se efectúa un determinado hecho económico (compra, venta,
pago, cobro), administrativo (orden o directiva, actividad de
control), productivo o de otra naturaleza, que genera datos
primarios que deben ser captados, en un formulario o directamente
en una computadora, pueden ser datos adquiridos, si vienen del
entorno ya sea Internet u otra entidad, en ambos casos la
participación humana es imprescindible por lo que de debe
organizar mediante procedimientos racionales y estructurales a fin
de evitar errores.

Estos datos primarios que ya pueden llamarse información primaria


Un sistema informático.- Puede ser definido como un sistema de información que por cuanto han sido objeto de operaciones que los han modificado
basa la parte fundamental de su procesamiento, en el empleo de la computación, físicamente, son transmitidos por diferentes canales para su inclusión en el
como cualquier sistema, es un conjunto de funciones interrelacionadas, hardware, sistema de información de la entidad, donde son modificados, almacenados en
bases de datos, asociados con otros datos y utilizados en cálculos de variado tipo.  Información técnica de apoyo al sistema: Manuales técnicos sobre el
Estas actividades son realizadas por la parte informática del sistema. trabajo de las computadoras y los equipos de apoyo, manuales técnicos
sobre los sistemas operativos y programas generales.
Después de estas actividades las informaciones ya están en condiciones de ser  Manuales de usuario para orientar a los usuarios-operadores sobre su
consultadas, pueden definirse como informaciones de resultado o salida y de esta trabajo con el sistema de información. Incluyen la definición de los
consulta, el ser humano tomará decisiones o controlará determinada actividad de procedimientos manuales que deben realizar los usuarios-operadores, la
la entidad. descripción de los formularios para captar la información primaria, la
descripción de los reportes de salida y la descripción de las acciones
Componentes de un sistema informático interactivas con el sistema informático: captación de la información,
operación del mismo, acciones ante errores y situaciones anormales,
Componentes del sistema informático seguridad y protección de los recursos informativos y consulta de
información de resultados.
 Personas en los dos extremos de la cadena de procesamiento físico de la  Informaciones variado tipo, soportados sobre formularios de papel, CDs,
información: En la realización de los hechos que generan los datos DVDs, reportes de papel de impresora, bases de datos en línea
primarios y su captación y adquisición y en la consulta y utilización de almacenadas en discos duros.
ellos. Por supuesto también intervienen en ciertas acciones de operación
del sistema. Tipos de sistemas informáticos
 Equipos de procesamiento de información, fundamentalmente
computadoras. Esta clasificación de sistemas informáticos se limita a las aplicaciones de gestión
 Equipos de apoyo a las transmisiones (HUB, gateways), equipos de apoyo y económica, financiera y contable, con un grupo de sistemas, no necesariamente
de seguridad (back-ups, acondicionadores de aire, deshumificadores, excluyentes, por lo que puede ser posible que más de un sistema concreto pueda
entre otros) ser clasificado en más de un grupo.
 Programas de computadoras, sistemas operativos, programas de servicio
de comunicaciones, y sobre todo, programas de aplicación). Sistemas de procesamiento básico de la información.- Son aquellos en que las
computadoras se limitan a realizar las operaciones de procesamiento físico de la
información. Las personas que integran el sistema, asumen todas las labores de subsistemas y relaciones informativas. Se orientan, sobre todo, a
generación de la información primaria y de análisis de información de resultados. proporcionar información para la toma de decisiones y el control, por lo
que puede asegurarse que el rol de la computadora en estos sistemas es
 Sistemas de procesamiento de transacciones (TPS).- Estos se dedican al relativamente pasivo.
proceso físico de los datos relacionados con ciertas transacciones
rutinarias y aisladas en el trabajo habitual de las entidades Los MIS actuales abarcan una gran cantidad de funciones y tareas, tiene enormes y
socioeconómicas, tales como el control de inventarios, control de activos complejos sistemas de bases de datos. Logran con una simple entrada de
fijos o la nómina de sueldos o salarios, explotan poco las posibilidades de información primaria que se desencadenen todas las operaciones que esa entrada
las máquinas y el software actual. genera, sin que los usuarios-operadores tengan que intervenir en nada más que la
entrada inicial. Ejemplo de este son los software “Mónica” , el “Visual conta” y
 Sistemas de automatización de oficinas (OAS).- Incluye el empleo de Versat Sarasola y Atenas para la contabilidad.
procesadores de texto, hojas electrónicas de datos, preparadores de
exposiciones, calendarización, comunicación mediante correos Sistemas de apoyo a la toma de decisiones.- Se apoyan en los MIS, los que crean
electrónicos, videoconferencias, implican la búsqueda y captación de y actualizan las bases de datos, que los primeros utilizan. Los DSS se destinan a la
operaciones y en muchos casos, la preparación de decisiones para toma de decisiones, están hechos para apoyar el trabajo individual o para las
ejecutivos y directivos. Pueden solucionar tareas típicas de las oficinas, decisiones en grupo, apoyan mucho en la llamada investigación de operaciones o
como la programación y control de actividades mediante agendas los métodos cuantitativo de la toma de decisiones, técnicas matemáticas para
electrónicas individuales y colectivas, registro y control de acuerdos y apoyar el trabajo del ser humano en las llamadas decisiones bien estructuradas,
directrices, escritura y conformación de textos en informes, folletos, débilmente estructuradas y no estructuradas, las cuales por su complejidad pueden
creación, actualización y consulta de bases de datos relacionadas con tener errores al ser analizadas por el ser humano con métodos tradicionales
clientes y vendedores. (intuición, experiencia). Ejemplo de estas decisiones son el empleo de técnicas de
ruta crítica para dirigir proyectos de construcciones. La utilización de la
 Sistemas de información para la dirección (MIS).- Estos sistemas han programación lineal para dirigir la alimentación óptima en nutrientes, pero al costo
abarcado los TPS, integrando las mismas mediante sistemas de bases de más bajo posible de ganando. Un tipo muy importante de DSS son los sistemas
datos, y almacenes de datos, de forma tal que el sistema puede reflejar la empresariales de planeación de recursos (ERP).
realidad compleja de una entidad socioeconómica, con todos sus
 Sistema de apoyo a las decisiones individuales  Sistemas de expertos o basados en las reglas de conocimientos. Se basan
 Sistema de apoyo a las decisiones en grupo en disponer del conocimiento de uno o más expertos humanos, por lo
general en forma de reglas de producción, expresadas en forma de IF
Los DSS como ya se explicó pueden ser para el trabajo individual o grupal.- Hay (condición), THEN(acción), ELSE (acción alternativa), SI (condición),
ocasiones en que varias personas más o menos distantes requieren usar e entonces ejecutar a (acción) y en caso contrario ejecutar la (acción
interactuar con la misma información a través del sistema informático (grupal), alternativa), para la solución de un problema concreto determinado.
este tipo de sistema está dirigido virtualmente a un grupo de personas, las cuales
deben resolver un problema complejo, el cual incluirá votaciones, llenado de Los sistemas de expertos, como comúnmente se les conoce, tiene una base de
cuestionarios, creación de escenarios y simulaciones, que después serán conocidos datos especial donde se almacenan los conocimientos de los expertos humanos.
por todos. Esta se llama base de conocimientos, su confección y llenado se apoya en una
tecnología llamada ingeniería del conocimiento, a medio camino entre la informática
Y otra como el sistema Scheduling en que es típico el trabajo individual (en sentido y la tecnología. Además estos sistemas cuentan con programas especializados en
relativo: Puede ser información que se utilice por un grupo de personas pero que la inteligencia artificial conocidos como motores de inferencia, mediante los cuales
reciben y pueden utilizarla en una terminal de una red de computación) revisan las bases de conocimientos y ejecutan las operaciones “inteligentes” para
solucionar los problemas que se les plantea.
Sistemas basados en la inteligencia artificial.- La inteligencia artificial, es una
rama de la ciencia de la computación que busca emular las capacidades Estos sistemas son criticados por: las bases de conocimientos son difícil de
intelectuales del ser humano, mediante el empleo de software especializado y las cumplimentar. En la medida en que la base de datos se llena de conocimientos lejos
computadoras. Abarca muchos campos, entre los que se encuentra la robótica, la de ser más rápido se ralentiza.
solución general de problemas, identificación y reconocimiento de patrones
visuales, auditivos y digitales, la simulación del movimiento, el análisis y la síntesis  Sistemas de razonamiento basado en casos (RBC).- Se basan en la
del lenguaje natural y la potenciación del conocimiento humano. Representan un analogía como forma de representación del conocimiento, se fundamentan
paso adelante en relación con los anteriores MIS y DDS, pueden asumir actividades en la aparente forma humana de razonar, usan las experiencias pasadas
más “humanas”, más activas en los procesos de dirección, pues tiene incorporados para afrontar problemas nuevos, consecuentemente aplican técnicas de
muchos elementos que los hacen actuar similarmente como lo haría un humano. intuición y permiten el aprendizaje. Su base teórica se apoya en el campo
del razonamiento aproximado. Su filosofía implica aprender de los errores
y los éxitos anteriores. Pueden utilizarse con éxito en problemas de  Sistemas basados en algoritmos genéticos (GA).- Conjunto de métodos
interpretación, justificación, clasificación, proyección y previsión. Ejemplo: que se apoyan, como su nombre lo indica, en la emulación de la forma de
JULIA: Diseño de grupos de comidas. desarrollo genético de los animales y las plantas, estos son entre sí
mismos una técnica de aprendizaje automático, aspiran a permitir que las
Funcionamiento: Parten del concepto de caso: este es una porción de conocimiento computadoras “aprendan” por sí mismas, para algunos especialistas son
que representa una experiencia concreta y el contexto en que sucedió, se guarda solo una familia de métodos de búsqueda adaptativa de soluciones.
en una librería de casos (archivos) en los cuales se guardan las experiencias
relevantes o memorables, a los efectos de emplearla en la solución de casos Comienzan con una colección de datos o patrones generados aleatoriamente y
futuros. evolucionan posteriormente hacia una solución óptima o al menos satisfactoria,
mediante la adaptación de los datos iniciales o los patrones, con el empleo de
Inconveniente: En la informática como en otros dominios de la actividad humana no operaciones equivalentes.
hay soluciones perfectas y puede generar soluciones no buenas. No obstante, son
soluciones prácticas que incluyen una metodología de razonamiento con muchas La solución que proporcionan no es necesariamente óptima, pero puede estar muy
expectativas para el futuro. cerca de ese criterio. Estos algoritmos se utilizan cada día más en aplicaciones de
gestión económica, financiera, contable y de auditoría
 Sistemas de redes neuronales artificiales (RNA).- Busca simular la forma
en que supuestamente trabajan las neuronas naturales en el cerebro Sistemas basados en técnicas WEB.- El auge en el mundo de uno de los servicios
humano. Cada sistema está compuesto de muchas neuronas artificiales, de la Internet, el World Wide Web (W.W.W) ha hecho que surgiera una nueva
las cuales al asociarse entre si, mediante determinadas arquitecturas modalidad de sistemas a partir de la tecnología WEB, y en el concepto de hipertexto
pueden realizar trabajos complejos con asombrosa calidad. Su mayor e hipermedia.
virtud es que logran trabajar adecuadamente aunque la información de
entrada que reciban tenga cierto grado de errores o sea hasta cierto  Intranets
punto incompleto. Pero la asociación de esas neuronas artificiales hace  Sitios WEBs de orientación externa
que trabajos simples se conviertan en actividades muy complejas que se
realizan con éxito. Ejemplo: diseño de un RNA para realizar evaluaciones La Intranets surge de la utilización de la WEB en la gestión interna de la entidad. Una
del sistema de control interno en determinadas entidades. intranets es una red particular, basada en redes de comunicación de área local o
en redes de área amplia, que utiliza tecnología estándar y servicios o productos perspectiva de la ciencia de la dirección, la capacidad de solucionar problemas, el
que se pueden encontrar o han sido desarrollados para Internet. Una Intranet saber qué hacer, cómo hacerlo, dónde hacerlo, y para qué hacerlo.
puede tener o no conexión con Internet y en caso de tenerla puede filtrar los
accesos no deseados con los llamados cortafuegos. La Intranets deberá estar Este conocimiento da una ventaja competitiva a las entidades que lo poseen, por lo
entrelazada con los sistemas empresariales, como los MIS, los DDS y los ERP, en tanto debe ser protegido, pero también debe ser conservado y difundido entre los
estos casos los usuarios-operadores de sus recursos serán los mismos miembros de una entidad, para que la pericia de un pase a ser patrimonio de otros.
funcionarios y especialistas que utilizan los sistemas de gestión empresarial En esto consiste la gestión del conocimiento.
mencionados. De esta forma el flujo de nformación se simplificará notablemente
realizándose a través de la red y reduciendo al mínimo la cantidad de documentos Los sistemas que se encargan de esa gestión, o sea, detección, adquisición,
soportados sobre el papel que se muevan dentro de la entidad. conservación y difusión del conocimiento son los sistemas de gestión del
conocimiento.Dos tipos de sistemas que utilizan las entidades socioeconómicas son:
Los sistemas basados en la WEB, pueden ser también de uso externo, o sea, para
comunicar información al entorno de la entidad (clientes, suministradores, niveles  Sistemas de información de marketing (SIM)
superiores, agencias gubernamentales, público en general y otras entidades  Sistemas de gestión de relaciones (e-CRM).
políticas o administrativas de control). En estos casos la información que
Los sistemas de información de marketing se destinan a gestionar toda la
aparecerá en el sitio WEB estará acorde con la misión y los objetivos de la entidad.
información con el mercado, la gestión de clientes potenciales y reales, los estudios
Ejemplo: Un sitio de una universidad dará información sobre la instrucción, los de mercado, el análisis del impacto de las políticas de promoción, el monitoreo y
cursos que imparten, las facultades, las escuelas y centros de investigación que la análisis de los competidores, el análisis de los precios, el estudio de las tendencias
componen, sobre el claustro de profesores que la integran. En estos casos el de consumo, los estudios macroeconómicos de tendencias demográficas, etc. Están
receptor-objeto del sitio WEB es alguien situado fuera de las fronteras del sistema muy vinculados a Internet.
socioeconómico, o sea, la entidad.
Los sistemas de gestión de relaciones son sistemas muy asociados a los SIM y a la
Sistemas de gestión del conocimiento.- Es conocido que el conocimiento está gestión comercial, pues se utilizan para propiciar una adecuada relación con los
asociado a la información, pero es mucho más, el conocimiento es, desde la clientes de la entidad. Se utilizan prácticamente en todo el ciclo de relaciones con el
cliente. Pueden emplearse para definir: provisiones de ventas, registros de visitas
de gestión al cliente, contactos realizados en ferias y congresos, volúmenes de  La necesidad de informatizar para hacer que la entidad cumpla con su
compras anteriores, intenciones de compra anterior o satisfechas, misión y pueda alcanzar la visión de sí misma que se plantea. Sin la
comportamiento de pago, bancos con los que trabaja, oportunidades de negocio, necesidad del desarrollo no habrá resultado.
acciones directas de marketing que ha recibido.  El grado de madurez que alcance en su gestión y el nivel técnico de su
equipo directivo y de su capital humano en general. Si ese capital humano
No debe dejar de mencionarse a los sistemas de fabricación integrados CIM, los no logra asimilar el conocimiento necesario, nunca se pasará del empleo
cuales representan un nivel superior de integración de los sistemas informáticos, elemental de los recursos informáticos.
requieren de alta tecnología informática, pero también de una cultura proclive a  El desarrollo de una cultura proclive al cambio y a la introducción de esa
esas soluciones evolucionadas y una organización madura y preparada para tecnología. Sin la disposición a evolucionar, a modificar los hábitos y las
asimilar esos sistemas. rutinas de trabajo, para lograr mejores formas y métodos de hacer, no
habrá asimilación de tecnología compleja.
Prácticamente todas las funciones de una empresa industrial, comercial, de
servicios, agrícola, etc., pueden ser cubiertas por aplicaciones informáticas Teniendo en cuenta las variables declaradas, las etapas por las que transita el
especializadas, pero entre sí puede haber un intercambio de información que desarrollo informático de las entidades son las siguientes:
justifique y convierta en realidad el concepto de sistema y el de la organización
como sistema. 1. Introducción elemental de las tecnologías informáticas.- Aplicaciones
aisladas TPS a la nómina de salarios y sueldos, a los inventarios, el control
Etapas en el desarrollo informático de las entidades de activos fijos y la contabilidad financiera.
2. Profundización de la gestión económica, financiera y contable con apoyo
La utilización de las Nuevas tecnologías de la Información y las comunicaciones de la informática. Tránsito de los TPS al MIS.
demuestran que la misma no es solo un problema técnico y económico sino que 3. Comprensión del MIS y sus posibilidades. Relativa madurez del capital
introducir la informática y las comunicaciones y avanzar en su desarrollo, es, ante humano en la gestión: Introducción de DSS y ERP. Intranet.
todo, un problema que está en función de tres variables altamente relacionadas 4. Paralelamente a la etapa 3, se produce la etapa 4, en la cual se
entre sí: informatiza la gestión de marketing: SIM.
5. Solucionada la gestión interna, se asume la externa: Sitios WEBs y
asimilación del comercio electrónico.
6. Etapa superior de madurez del capital humano: Empleo de sistemas de
inteligencia artificial.
7. Integración de las soluciones informáticas.- Enfoque CIM en las empresas
industriales.

Sobre la base de estas tres variantes, el desarrollo de cada etapa se sucede en lo


que ha dado en denominarse como el Ciclo de vida de los sistemas de información y
conocimientos.

¿Qué es un Sistema Operativo?


Un Sistema Operativo (SO) es el software básico de una computadora que

provee una interfaz entre el resto de programas del ordenador, los
Definición de Sistema Operativo
dispositivos hardware y el usuario.
El sistema operativo es el programa (o software) más importante de un
 Las funciones básicas del Sistema Operativo son: Administrar los
recursos de la máquina, coordinar el hardware y organizar archivos y ordenador. Para que funcionen los otros programas, cada ordenador de uso
directorios en dispositivos de almacenamiento. general debe tener un sistema operativo. Los sistemas operativos realizan tareas
 Los Sistemas Operativos más utilizados son: Dos, Windows, Linux y Mac. básicas, tales como reconocimiento de la conexión del teclado, enviar la
Algunos SO ya vienen con un navegador integrado, como Windows que trae información a la pantalla, no perder de vista archivos y directorios en el disco, y
el navegador Internet Explorer. controlar los dispositivos periféricos tales como impresoras, escáner, etc.

En sistemas grandes, el sistema operativo tiene incluso mayor responsabilidad y


poder, es como un policía de tráfico, se asegura de que los programas y usuarios
que están funcionando al mismo tiempo no interfieran entre ellos. El sistema
operativo también es responsable de la seguridad, asegurándose de que los
usuarios no autorizados no tengan acceso al sistema.
Clasificación de los Sistemas Operativos Cómo se utiliza un Sistema Operativo
Los sistemas operativos pueden ser clasificados de la siguiente forma: Un usuario normalmente interactúa con el sistema operativo a través de un
sistema de comandos, por ejemplo, el sistema operativo DOS contiene comandos
 Multiusuario: Permite que dos o más usuarios utilicen sus programas al como copiar y pegar para copiar y pegar archivos respectivamente. Los comandos
mismo tiempo. Algunos sistemas operativos permiten a centenares o son aceptados y ejecutados por una parte del sistema operativo llamada
millares de usuarios al mismo tiempo. procesador de comandos o intérprete de la línea de comandos. Las interfaces
 Multiprocesador: soporta el abrir un mismo programa en más de una gráficas permiten que utilices los comandos señalando y pinchando en objetos que
CPU. aparecen en la pantalla.
 Multitarea: Permite que varios programas se ejecuten al mismo tiempo.
 Multitramo: Permite que diversas partes de un solo programa funcionen
al mismo tiempo.
 Tiempo Real: Responde a las entradas inmediatamente. Los sistemas
operativos como DOS y UNIX, no funcionan en tiempo real.

Cómo funciona un Sistema Operativo


Los sistemas operativos proporcionan una plataforma de software encima de la
cual otros programas, llamados aplicaciones, puedan funcionar. Las aplicaciones se
programan para que funcionen encima de un sistema operativo particular, por
tanto, la elección del sistema operativo determina en gran medida las aplicaciones
que puedes utilizar.
Ejemplos de Sistema Operativo
A continuación detallamos algunos ejemplos de sistemas operativos:
Los sistemas operativos más utilizados en los PC son DOS, OS/2, y Windows,
pero hay otros que también se utilizan, como por ejemplo Linux.
Familia Windows
 Windows 95  HP-UX
 Windows 98  Irix
 Windows ME  Minix
 Windows NT  System V
 Windows 2000  Solaris
 Windows 2000 server  UnixWare
 Windows XP
 Windows Server 2003
 Windows CE
 Windows Mobile OPERACIÓN CON DOS.
 Windows XP 64 bits
Es el conjunto de programas que administran los recursos de la computadora y que
 Windows Vista (Longhorn)
ayuda en el desarrollo y ejecución de los programas o software.
Familia Macintosh
MS-DOS (Micro Soft Disk Operating System - Sistema Operativo en Disco) es un
sistema patentado por Microsoft Corporation para computadoras personales PC's.
 Mac OS 7
 Mac OS 8
El MS-DOS es un sistema operativo monousuario y monotarea.
 Mac OS 9
 Mac OS X Al cumplir las dos condiciones antes mencionadas el procesador está en cada
momento dedicado en exclusividad a la ejecución de un proceso, por lo que la
Familia UNIX planificación del procesador es simple y se dedica al único proceso activo que
pueda existir en un momento dado.
 AIX
 AMIX MS-DOS es el que inicia la computadora y controla las actividades de la misma.
 GNU/Linux Maneja la secuencia de las operaciones (flujo de datos), la entrada de datos,
 GNU / Hurd
presentación en pantalla de programas e información desde y hacia varios El segundo método es el llamada multitarea con asignación de prioridades. Con este
componentes del hardware. esquema el Sistema Operativo mantiene una lista de procesos (programas) que
están corriendo. Cuando se inicia cada proceso en la lista el Sistema Operativo le
En general puede efectuar las siguientes tareas: asigna una prioridad. En cualquier momento el Sistema Operativo puede intervenir y
modificar la prioridad de un proceso organizando en forma efectiva la lista de
 Manejo de archivos y directorios. prioridad, el Sistema Operativo también mantiene el control de la cantidad de
 Mantenimiento de discos flexibles. tiempo que utiliza con cualquier proceso antes de ir al siguiente.
 Configuración del equipo.
 Optimización del uso de la memoria Con multitarea de asignación de prioridades el Sistema Operativo puede sustituir
 Aumento de la velocidad de los programas en cualquier momento el proceso que esta corriendo y reasignar el tiempo a una
tarea de más prioridad. Unix OS-2 y Windows NT emplean este tipo de multitarea.
Categorías de Sistemas Operativos
Multiusuario
Multitarea
Un Sistema Operativo multiusuario permite a mas de un solo usuario accesar una
El término multitarea se refiere a la capacidad del Sistema Operativo para correr computadora. Claro que, para llevarse esto a cabo, el Sistema Operativo también
más de un programa al mismo tiempo. Existen dos esquemas que los programas de debe ser capaz de efectuar multitareas.
sistemas operativos utilizan para desarrollar Sistema Operativo multitarea, el
primero requiere de la cooperación entre el Sistema Operativo y los programas de Unix es el Sistema Operativo Multiusuario más utilizado. Debido a que Unix fue
aplicación. originalmente diseñado para correr en una minicomputadora, era multiusuario y
multitarea desde su concepción.
Los programas son escritos de tal manera que periódicamente inspeccionan con el
Sistema Operativo para ver si cualquier otro programa necesita a la CPU, si este es Actualmente se producen versiones de Unix para PC tales como The Santa Cruz
el caso, entonces dejan el control del CPU al siguiente programa, a este método se Corporation Microport, Esix, IBM,y Sunsoft. Apple también produce una versión de
le llama multitarea cooperativa y es el método utilizado por el Sistema Operativo de Unix para la Machintosh llamada: A/UX.Unix
las computadoras de Machintosh y DOS corriendo Windows de Microsoft.
Unix proporciona tres maneras de permitir a múltiples personas utilizar la misma  Multiproceso simétrico: En un sistema multiproceso simétrico, no existe
PC al mismo tiempo: una CPU controladora única. La barrera a vencer al implementar el
multiproceso simétrico es que los Sistema Operativo tienen que ser
 Mediante Módems. rediseñados o diseñados desde el principio para trabajar en u n ambiente
 Mediante conexión de terminales a través de puertos seriales multiproceso.
 Mediante Redes.
Las extensiones de Unix, que soportan multiproceso asimétrico
Multiproceso ya están disponibles y las extensiones simétricas se están
haciendo disponibles.
Las computadoras que tienen mas de un CPU son llamadas multiproceso. Un
sistema operativo multiproceso coordina las operaciones de las computadoras Windows NT de Microsoft soporta multiproceso simétrico.
multiprocesadoras. Ya que cada CPU en una computadora de multiproceso puede
estar ejecutando una instrucción, el otro procesador queda liberado para procesar Sistemas Operativos más comunes.
otras instrucciones simultáneamente.
MS-DOS
Al usar una computadora con capacidades de multiproceso incrementamos su
velocidad de respuesta y procesos. Casi todas las computadoras que tienen Es el más común y popular de todos los Sistemas Operativos para PC.
capacidad de multiproceso ofrecen una gran ventaja.
La razón de su continua popularidad se debe al aplastante volumen de software
Los primeros Sistemas Operativos Multiproceso realizaban lo que se conoce como: disponible y a la base instalada de computadoras con procesador Intel.

 Multiproceso asimétrico: Una CPU principal retiene el control global de la Cuando Intel liberó el 80286, DOS se hizo tan popular y firme en el mercado que
computadora, así como el de los otros procesadores. DOS y las aplicaciones DOS representaron la mayoría del mercado de software
para PC.
Esto fue un primer paso hacia el multiproceso pero no fue la
dirección ideal a seguir ya que la CPU principal podía
convertirse en un cuello de botella.
En aquel tiempo, la compatibilidad IBM, fue una necesidad para que los productos Es un sistema operativo que fue creado a principios de los setentas por los
tuvieran éxito, y la "compatibilidad IBM" significaba computadoras que corrieran científicos en los laboratorios Bell. Fue específicamente diseñado para proveer una
DOS tan bien como las computadoras IBM lo hacían. manera de manejar científica y especializadamente las aplicaciones
computacionales. Este Sistema Operativo se adapto a los sistemas de cómputo
OS/2 personales así que esta aceptación reciente lo convierte en un sistema popular.

Después de la introducción del procesador Intel 80286, IBM y Microsoft Unix es más antiguo que todos los demás Sistema Operativo de PC y de muchas
reconocieron la necesidad de tomar ventaja de las capacidades multitarea de esta maneras sirvieron como modelo para éstos.
CPU. Se unieron para desarrollar el OS/2, un moderno Sistema Operativo
multitarea para los microprocesadores Intel. Sin embargo, la sociedad no duró Sistema Operativo de MACINTOSH
mucho.
La Macintosh es una máquina netamente gráfica. De hecho, no existe una interfaz de
IBM continuó el desarrollo y promoción del OS/2. línea de comando equivalente para ésta. Su estrecha integración de Sistema
Operativo, Interfaz Gráfica con el usuario (GUI) y área de trabajo la hacen la
Los vendedores de software se muestran renuentes a destinar recursos a la favorita de la gente que no quiere saber nada de interfaces de línea de comando.
creación de un software con base en el OS/2 para un mercado dominado por el MS-
DOS. Los usuarios rehusan cambiar al OS/2 debido a la falta de software que Las capacidades gráficas de la Macintosh hicieron de esa máquina la primera
funcione en la plataforma del OS/2 ya que muchos tendrían que mejorar la precursora en los campos gráficos computarizados como la autoedición por
configuración de su PC para que opere con el OS/2. computadora.

UNIX La familia de microcomputadoras de Apple Macintosh y su sistema operativo define


otra plataforma importante. Las PC de Macintosh, que se basan en la familia de
Unix es un Sistema Operativo multiusuario y multitarea, que corre en diferentes microprocesadores de Motorola, usan la arquitectura de Bus de 32 bits. La
computadoras, desde supercomputadoras, Mainframes, Minicomputadoras, plataforma para Macintosh incluye muchas capacidades sofisticadas que
computadoras personales y estaciones de trabajo. comprende la multitarea, una GUI, la memoria virtual y la capacidad para emular la
plataforma MS-DOS.
Las PC de Macintosh también tiene la capacidad integrada de compartir archivos y ¿QUE ES UN COMANDO?
comunicarse con o tras PC de Macintosh en una red.
Es un archivo ejecutable que se usa para especificar a la computadora que acción
WINDOWS NT de Microsoft debe realizar. Se emplean para realizar diversas tareas como copiar, imprimir,
borrar y mostrar archivos, entre otras.
Con Windows NT, Microsoft ha expresado su dedicación a escribir software no sólo
para PC de escritorio sino también para poderosas estaciones de trabajo y Tipos de comandos
servidores de red y bases de datos. Microsoft Windows NT no es necesariamente un
sustituto de DOS ni una nueva versión de éste; es, en conjunto, un nuevo Sistema Existen dos tipos de comandos: internos y externos.
Operativo diseñado desde sus bases para las máquinas más modernas y capaces
disponibles. Los comandos internos son parte de un gran archivo llamado COMMAND.COM.

Windows NT de Microsoft ofrece características interconstruidas que ningún otro Los comandos externos residen en el disco, estos comandos sólo pueden tener tres
Sistema Operativo para PC ofrece, con excepción de Unix. tipos de extensión: COM, EXE ó BAT.

Además de las características tradicionales de estricta seguridad de sistema, red Nota: Cuando utiliza un comando externo, no necesita escribir la extensión del
interconstruida, servicios de comunicación y correo electrónico interconstruidos, nombre del archivo.
herramientas de administración y desarrollo de sistema y una GUI, Windows NT
Línea de comando
puede correr directamente aplicaciones de Windows de Microsoft y de Unix.

La ejecución de un comando puede solicitarse al MS-DOS en la línea de comandos;


Windows NT, al igual que el OS/2 ver 2.0 y algunas versiones de Unix, es un Sistema
esta se indica mediante el prompt o símbolo del sistema. El prompt que por
Operativo de 32 bits, que puede hacer completo uso de los procesadores de estas
características. omisión presenta MS-DOS consiste en la letra de la unidad actual seguida dos
puntos, una diagonal invertida y el signo mayor que (>).
Además de ser multitarea, está diseñado para tomar ventaja del multiproceso
Si la unidad en la que se encuentra es C, el prompt del MS-DOS es:
simétrico.
C:\> MARCAS.TXT

USO DE LOS COMODINES MARCUS.TXT

Si esta utilizando directorios de niveles múltiples, usted encontrara más fácil El comodín " * "
buscar archivos en sus discos utilizando dos caracteres especiales, llamados
comodines. Los caracteres comodines son el asterisco (*) y el signo de Un asterisco ( * ) incluido en un nombre de archivo o en una extensión al nombre de
interrogación (?). archivo, significa que cualquier carácter puede ocupar esa posición o cualquiera de
las posiciones restantes en el nombre de archivo o extensión.
El comodín "?"
Ejemplo:
El signo de interrogación (?) en un nombre de archivo o en una extensión del
nombre de archivo significa que cualquier carácter puede ocupar esa posición. dir msb*.ovl

Ejemplo: Muestra todos los archivos que su nombre inicia con msb y que tienen una
extensión .ovl.
dir marc?s.txt
A continuación se muestran algunos de los archivos que podrían ser listados por el
Muestra todos los archivos que su nombre inicia con marc, que tienen cualquier comando anterior:
carácter en la siguiente posición, que terminan con los caracteres s y que tienen la
extensión .txt. MSBACKDB.OVL

A continuación se muestran algunos de los archivos que podrían ser listados por el MSBACKDR.OVL
comando anterior:
MSBCONFG.OVL
MARCOS.TXT
Nota: Equivale a un carácter y * equivale a un grupo de caracteres.
Los caracteres *.* se refieren a todos los archivos con todas las extensiones que ningún sitio, usaremos el dispositivo NULL. Se trata de simular el
se encuentren en el directorio. envío/recepción de información.
 Reloj CLOCK$: MS-DOS lo reconoce al arrancar el sistema. Puede ser un
Dispositivos en MS-DOS reloj en tiempo real cargado en la CMOS del equipo o un reloj de intervalos
que se cargará en memoria al encender el equipo.
Los dispositivos que MS-DOS es capaz de manejar son cinco:
9. Configuración de los dispositivos de MS-DOS
 Teclado y monitor (Dispositivos CON): son unidireccionales (solo
transmiten en una dirección, entrada o salida) y se denominan En MS-DOS disponemos de la orden MODE para configurar los dispositivos de
dispositivos estándares de entrada y salida. En MS-DOS se les asigna el sistema CON, COM, LPT, etc. Aún así, como hoy en día el propio sistema está ya en
nombre de CON, que viene de CONsola. desuso, esta orden ha dejado de ser fundamental. De todas formas, como nosotros
 Puertos paralelos (Dispositivos LPTn): son bidireccionales (permiten usaremos en nuestra máquina virtual la versión 6.22 del propio sistema, no está de
enviar y recibir datos). Su nombre proviene de Line PrinTer, dado que el más conocer las opciones del comando MODE.
principal periférico de este modo es la impresa. Se denominan paralelos
porque tienen la capacidad de transmitir simultáneamente los 8 bits que  Puerto de impresión: MODE LPTn[:][COLS=C][LINES=L][RETRY=R]
forman un byte. También se les conoce como Centronics. Como al puerto  Puerto serie: MODE
LPT1 se suele conectar la impresora, también recibe el nombre de PRN COMn[:][BAUD=b][PARITY=p][DATA=d][STOP=s][RETRY=r]
(PRiNter).  Estado del dispositivo: MODE [dispositivo] [/STATUS]
 Puertos serie (Dispositivos COMn): También son bidireccionales, pero  Redirigir impresión: MODE LPTn[:]=COMn[:]
transmiten bit a bit. A estos puertos se suele conectar la mayoría de  Preparar página de códigos: MODE dispositivo CP
dispositivos de E/S. El puesto serie estándar que suelen traer los equipos PREPARE=((yyy[…])[unidad:][ruta] archivo)
es el RS-232-C, que físicamente pueden presentar dos formatos: los de 25  Seleccionar página de códigos: MODE dispositivo CP SELECT=yyy
pines (utilizados en los XT) y los de 9 (usados en los AT).  Actualizar página de códigos: MODE dispositivo CP REFRESH
 Dispositivo nulo (NULL): Se puede considerar como un dispositivo  Estado de la página de códigos: MODE dispositivo CP [/STATUS]
ficticio. Así, cuando queramos realizar una transmisión de información a  Modo de presentación: MODE [adaptador de video][,n] MODE
CON[:][COLS=c][LINES=n]
 Velocidad del teclado: MODE CON[:][RATE=r DELAY=d] 10. Ficheros de configuración de MS-DOS

Veamos ahora, a modo de ejemplo, como se configuraría el teclado y como se Para poder configurar correctamente los dispositivos en el arranque del sistema,
configura la página de códigos para que nuestro teclado funcione a la perfección. MS-DOS utiliza dos ficheros especiales: el AUTOEXEC.BAT (archivo de proceso por
Las opciones serían: lotes) y el CONFIG.SYS (archivo del sistema). El proceso de arranque es el
siguiente: cuando arrancamos el ordenador, lo primero que se hace, una vez leída
MODE CON CP PREPARE=((850) C:\WINDOWS\COMMAND\ega.cpi) > nul la BIOS, es cargar en memoria el núcleo del sistema operativo, el IO.SYS y el MS-
MODE CON CP SELECT=850 > nul DOS.SYS. A continuación, se carga el intérprete de comandos –COMMAND.COM- y es
KEYB SP,, C:\WINDOWS\keyboard.sys en ese instante cuando nuestro sistema ya está preparado para aceptar órdenes.
No obstante, no tenemos configurado el teclado, no hemos definido trayectorias de
* Ya que antes de realizar este paso, nuestro teclado está en inglés, cabe recordar búsqueda para localizar archivos en nuestra estructura de directorios, no hemos
que: la letra “y” se corresponde al pulsar la “z”; de igual modo, para escribir el cargado los controladores de los periféricos, etc. Este tipo de configuración la
carácter “\”, hay que pulsar Alt+92. realizamos gracias a los dos archivos mencionados más arriba.

Dónde: 10.1 Autoexec.bat

 CON: Hace referencia al teclado. Este fichero se usa para ejecutar las órdenes que queramos en el arranque del
 850: Es la página de códigos que va a cargar (cada país tiene la suya, sistema. Si no existe en el raíz, se ejecutan directamente las órdenes TIME, DATE y
siendo este número para España). VER, las cuales nos permitirán visualizar la hora, fecha y versión del SO instalado,
 C:\WINDOWS\COMMAND\ega.cpi es la ruta y nombre del fichero donde mientras que si existe, se ejecutará, es decir, se realizarán las órdenes que en él
se carga la table de códigos. hayamos escrito. Cada línea del fichero corresponde a una orden específica.
 > nul es el redireccionamiento al dispositivo nulo, para que no se muestre
nada en pantalla. Veamos un ejemplo del AUTOEXEC.BAT en el que mostremos la fecha, hora y versión
 SELECT=850 indica que, una vez cargada la página de códigos, se del sistema, definamos los directorios DOS y PROGRAMS de C:\ como rutas de
seleccione la de nuestro país. búsqueda para ficheros ejecutables, configuremos el teclado, carguemos los
drivers del CD-ROM y, finalmente, borremos la pantalla:
DATE y son las siguientes:
TIME
VER BREAK
PATH=C:\DOS;C:\PROGRAMS
MODE CON CP PREPARE=((850) C:\WINDOWS\COMMAND\ega.cpi) > nul En MS-DOS existen una serie de combinaciones de teclas que nos permiten realizar
MODE CON CEP SELECT=850 > nul determinadas acciones, como Ctrl+Alt+Supr, que sirve para reiniciar el equipo.
KEYB SP,, C:\WINDOWS\COMMAND\keyboard.sys Además, tenemos Ctrl+C o Ctrl+Pausa, con las que conseguimos que, cuando el SO
C:\DOS\MSCDEX /D:btc001.sys /L:d está realizando operaciones con y sobre los dispositivos de pantalla, impresora o
CLS teclado, podamos cancelar dicha operación.

La orden MSCDEX es utilizada por MS-DOS exclusivamente para que pueda Si tenemos activada esta opción, con la pulsación de esta combinación de teclas
reconocer una unidad de CD-ROM, lo cual hace como una unidad lógica más. En este podemos cancelar, además, operaciones que se están realizando sobre el disco,
caso, con esta orden cargamos el controlador de nuestra unidad (btc001.sys) y le tanto de lectura como escritura, mientras que si no está activa, las operaciones de
asignamos la unidad lógica D:. disco se realizarán hasta que concluyan, sin posibilidad de abortar. Es la única que
puede incluirse en el config.sys Su sintaxis es:
10.2 Config.sys
BREAK = ON | OFF
Es un fichero de configuración del sistema que se ejecuta tras el COMMAND.COM y
antes que el AUTOEXEC.BAT, conteniendo una serie de órdenes escritas línea a BUFFERS (no está presente en WinXP)
línea. Es un fichero no obligatorio e imprescindible si vamos a trabajar solo con MS-
Un buffer es una zona de memoria (convencional en MS-DOS) que se utiliza para
DOS.
almacenar temporalmente los datos. Esta orden define el número de buffers de
Las órdenes que reflejamos en este fichero tienen la misma sintaxis: disco (cada buffer es capaz de almacenar un sector (512 bytes) del disco) que el
Sistema puede utilizar. Es necesario crear estos buffers pues, cuando el usuario
orden = valor trabaja con un programa, tendrá que realizar accesos al disco, tanto para cargar el
programa en memoria como para leer o grabar los datos que precise dicho  El orden en que están situados los caracteres dentro
programa. de la página de códigos de cada país.

Como sabemos, la memoria es un dispositivo mucho más rápido que el disco. Así, si Su sintaxis es:
utilizamos la orden BUFFERS, podemos tener en memoria los últimos datos escritos
o leídos del disco, por lo que si son necesarios de nuevo, no hace falta volver a COUNTRY=código _país, [página-códigos], [fichero_CONFIG.SYS]
acceder al mismo, actuando así como una especie de caché. Su sintaxis es:
El código del país es el único parámetro obligatorio, siendo el 34 el de España. El
valor por defecto es el 1, código de EEUU.

BUFFERS = nº de buffers [buffers de lectura anticipada] Página-códigos es la página de códigos de cada país (850 para España).

El nº de buffers será un valor entre 1 y 99, siendo el valor por defecto 15. Los En el COUNTRY.SYS está la información. Si se encuentra en una ubicación distinta al
buffers de lectura anticipada sirven para que, al realizar una operación de lectura directorio raíz, habrá que especificarla. Para poder configurar perfectamente el
de un disco, no solamente se almacene en el buffer el sector leído, sino también los teclado es necesario incluir en el CONFIG.SYS la orden:
sucesivos, en función del valor indicado. Así, si por ejemplo, hemos indicado buffers
de lectura anticipada 3, al acceder al sector 78 del disco, se almacenarán los COUNTRY=034,850,C:\WINDOWS\COMMAND\country.sys
sectores 78, 79 y 80.
Además, tenemos que incluir también la siguiente orden para la configuración del
COUNTRY (no está presente en WinXP) monitor:

Con esta orden podemos definir las características específicas del funcionamiento DEVICE=C:\WINDOWS\COMMAND\display.sys CON=(ega,,1)
del ordenador en cada país. Sirve para:
Introduciendo estas dos líneas en el CONFIG.SYS, cuando se ejecute el
 Definir el formato de la fecha y la hora AUTOEXEC.BAT la orden MODE se ejecutará sin ningún problema.
 Definir el separador de millares y decimales
DEVICE (no presente en WinXP)
 Definir el carácter asignado a la moneda
Se usa para cargar en memoria convencional los controladores de los diferentes FILES (no presente en WinXP)
dispositivos que podemos instalar en nuestro ordenador. MS-DOS incluye algunos
controladores para gestionar dispositivos instalables: ANSI.SYS, DISPLAY.SYS, Sirve para indicar al MS-DOS el nº de ficheros que podemos tener abiertos
HIMEM.SYS, EGA.SYS, etc. No obstante, para otros dispositivos habrá que recurrir al simultáneamente. Cada uno de los archivos definidos consume memoria
controlador del fabricante. La sintaxis de este comando es: convencional (aproximadamente 50 bytes) por lo que es necesario indicar un valor
suficiente, pero no excesivo. Su sintaxis:
DEVICE=fichero-controlador [parámetros-controlador]
FILES=número
DEVICEHIGH (no presente en WinXP)
Siendo número un valor entre 8 a 255; el valor 8 es por defecto.
Al igual que el anterior, sirve para cargar los controladores de los distintos
dispositivos, pero esta vez en memoria extendida. Si por cualquier razón, al usar LASTDRIVE (no presente en WinXP)
esta orden, el ordenador no dispone de memoria superior, los controladores se
cargarán en memoria convencional. Su sintaxis es como el comando anterior. Establece el nº máximo de unidades lógicas que el MS-DOS puede gestionar. Las
unidades lógicas van de la A: a la Z:. Con esta orden le indicamos alfabéticamente
DOS (no presente en WinXP) cual es la última unidad lógica que queremos que reconozca MS-DOS. En caso de no
escribir esta orden, la última letra será E:. Su sintaxis es:
Este comando se usa para gestionar eficientemente la carga de programas en
memoria. La sintaxis que usa es: LASTDRIVE=letra

DOS=HIGH (para cargar el núcleo del SO en memoria alta) REM

DOS=UMB (para activar la zona libre de memoria superior, de forma que los Se usa para introducir comentarios dentro de los ficheros por lotes, o el
controladores de los dispositivos se puedan almacenar en dicha zona) CONFIG.SYS o AUTOEXEC.BAT. Sintaxis:

DOS=HIGH,UMB (para ambas cosas) REM [comentario]


11. Conclusiones finales OPERACIÓN CON UNIX

Con esto llegamos al final de la parte de teoría e introducción del MS-DOS. Hemos En 1984 comenzó el desarrollo de un sistema operativo similar a UNIX de libre
aprendido las características generales del mismo, como gestiona la memoria, distribución dentro de lo que se dio en llamar el Proyecto GNU. En la actualidad se
como organiza el disco, como se particiona y formatea, como se instala, su emplean ampliamente variaciones del sistema de GNU con el kernel de Linux,
documentación, los dispositivos y como se configuran, así como la configuración de llamándose sistema Linux/GNU (http://www.gnu.org). El MIT (Instituto
los ficheros AUTOEXEC.BAT y CONFIG.SYS. Tecnológico de Massachusetts) distribuye desde 1984, y de forma gratuita, una
interfaz gráfica basada en este sistema operativo que se denomina X-Window.
En la próxima entrega empezaremos ya con los comandos. Una vez finalizado el
temario de órdenes, procederé a entregar una serie de ejercicios para su FUNCIONAMIENTO INICIAL
realización.
UNIX es un sistema operativo multiusuario, es decir, permite que más de un usuario
La primera versión de UNIX fue desarrollada por Ken Thompson en los Laboratorios utilice simultáneamente el sistema. Para hacer esto de forma coherente cada
Bell (AT&T) en 1969. Se empleó por primera vez sobre una máquina PDP-7 de DEC. usuario debe identificarse al utilizar el sistema, es decir, se necesita una cuenta en
Se programó en ensamblador, y cuando Dennis Ritchie desarrolló el lenguaje C, se el sistema. La cuenta está formada básicamente por un nombre de usuario y una
reescribió en C. clave de acceso o password. El usuario deberá introducir su nombre de usuario y
su clave. A partir de ahí el sistema lanza un primer programa (generalmente lo que
Versiones se conoce como una Shell) que se ejecuta con el identificador de ese usuario. Para
iniciar la sesión, cada usuario debe introducir por teclado su nombre de usuario
Actualmente se emplean principalmente cuatro versiones diferentes de este ante el mensaje por pantalla: "login:" La password debe tener al menos 8
sistema operativo, que son: caracteres y al menos un carácter debe ser numérico. Es obvio decir que cada
password debe ser celosamenteguardada por su dueño para evitar que un intruso
UNIX System V distribuido por AT&T.
entre en el sistema identificándose como él.
BSD v. 4.3 distribuido por la Universidad de California en Berkeley.
SunOS/Solaris distribuido por la empresa SUN. Cada usuario tiene asignado un directorio en el sistema de ficheros. Ese directorio
Linux consta como propiedad de ese usuario y en él éste tiene permiso para
crear/borrar/modificar ficheros o cambiar permisos. Una vez iniciada la sesión de Un fichero ordinario contiene datos arbitrarios en cero o más bloques de datos
trabajo se recomienda ejecutar el comando startx para iniciar una sesión del almacenados en un sistema de ficheros. Estos ficheros pueden contener texto ASCII
entorno de ventanas X-Window. Para concluir la sesión de trabajo hay que salir del o datos binarios. No existe ninguna estructura impuesta por el sistema operativo
entorno de ventanas, y luego, salir de la cuenta mediante el comando exit. Debe sobre cómo se debe organizar un fichero. UNIX no hace ninguna distinción entra
aparecer de nuevo la petición: login: ficheros que contienen diferentes tipos de datos.

EL SISTEMA DE FICHEROS Directorios


Los directorios son un tipo especial de ficheros que proporcionan la relación entre
Un sistema de ficheros proporciona un método conveniente para organizar y nombres de ficheros y los ficheros propiamente dichos. Como resultado de esto, la
almacenar ficheros. Todos los ficheros en UNIX residen en un sistema de ficheros, estructura de los directorios define la estructura del sistema de ficheros completo.
si importar el tipo de los mismos. El sistema de ficheros en UNIX es una
organización de directorios y ficheros estructurada en forma de árbol. La raíz de Un directorio consiste en una tabla cuyas entradas, una para cada fichero,
un sistema de ficheros de UNIX se representa con el carácter /. contienen: un número de i-nodo y un nombre de fichero empleado para hacer
referencia, de forma simbólica, a ese i-nodo. Cada entrada en la tabla del directorio
Un fichero puede ser identificado de forma única especificando la ruta desde la raíz se emplea para convertir el nombre de un fichero en su correspondiente inodo.
hasta él en el árbol de directorios, en tal caso la ruta empieza en /. Si la ruta no
comienza por / se entiende que empieza en el directorio de trabajo del proceso que Cada proceso (programa en ejecución) se encuentra siempre en un directorio, es lo
intenta hacer referencia a ese fichero. Un fichero consiste en una sucesión de que se llama su directorio de trabajo (working directory), que el proceso puede
bytes terminada por una marca de fin de fichero. Físicamente un fichero puede cambiar a voluntad.
contener una serie de bloques de disco o cinta. Los bloques de datos que
pertenecen a un fichero pueden estar dispuestos de forma aleatoria en el sistema FICHEROS ESPECIALES
de almacenamiento.
Los ficheros especiales no contienen datos. En vez de eso proporcionan un
Ficheros ordinarios mecanismo para relacionar dispositivos físicos con nombres de fichero en el
sistema de ficheros. Cada dispositivo soportado por el sistema está asociado con al
menos un fichero especial. Cuando se realiza una petición de lectura o escritura
sobre un fichero especial resulta en la activación del controlador asociado con ese rmdir <nombre> Elimina un directorio. Es necesario que no contenga ningún
dispositivo, este controlador es la parte del código del sistema encargada de fichero.
controlar las operaciones relacionadas con el dispositivo físico. Pwd Muestra el directorio de trabajo actual.
cd <nombre> Permite cambiar el directorio de trabajo del Shell.
Manejo de ficheros chmod <permisos> <fichero> Permite cambiar el conjunto de permisos de un fichero.

Mencionamos a continuación utilidades importantes relacionadas con el manejo de Permisos de los ficheros
ficheros:
En UNIX todos los ficheros tienen un propietario y un grupo. El propietario es quien
ls Lista ficheros.- Si no se especifica el directorio se toma el directorio de
lo creo y el grupo, generalmente, es el grupo al que pertenece el propietario.
trabajo del proceso que lo ejecuta (algunas opciones útiles: -al).
cat Muestra por pantalla el contenido de un fichero.- Todos los ficheros Todos los ficheros tienen unos permisos que permiten a unos usuarios u otros
ordinarios en UNIX son similares, es decir, son simplemente un conjunto de bytes. realizar ciertas operaciones con ellos. Los permisos están en tres categorías:
No hay diferencia entre lo que en otros sistemas se conoce como ficheros de texto
y ficheros binarios. Sin embargo, ficheros que no contengan texto simple Permisos de propietario: Son los que se aplican al propietario del fichero.
generalmente contendrán bytes con valores que no hagan referencia a caracteres Permisos de grupo: Se aplican a todos los miembros de ese grupo que no son el
imprimibles. Por lo tanto no es aconsejable utilizar cat (o cualquier otra utilidad propietario.
para mostrar el contenido de ficheros) sobre ficheros que no sean texto simple. Permisos para el resto: Se aplican a todos los que no entran en ninguna de las
cp <origen> <destino> Hace una copia de un fichero. dos categorías anteriores. En cada una de estas categorías hay tres permisos:
mv <origen> <destino> Mueve un fichero de un lugar a otro.- En realidad
elimina del directorio la entrada que hace referencia a ese fichero y añade una Permiso de lectura: Permite leer el fichero.
nueva en el directorio especificado en el destino. Sirve también para cambiar el Permiso de escritura: Permite modificar el fichero.
nombre que tiene un fichero en un directorio. Permiso de ejecución: Permite ejecutarlo.
rm <fichero> Elimina la entrada en un directorio referente a un fichero. Con la
opción -r elimina también directorios, aunque estos no estén vacíos. En el caso en que el fichero es un directorio el permiso de lectura permite listar su
mkdir <nombre> Crea un nuevo directorio. contenido y el de ejecución permite mover el directorio de trabajo de un proceso a
ese directorio. Para eliminar un fichero hace falta permiso de escritura en el
directorio que lo contiene (se debe modificar la tabla de ese directorio). No es Como ya se ha mencionado, la utilidad chmod sirve para cambiar los permisos de
necesario tener permiso de escritura en el fichero. un fichero. Tiene fundamentalmente dos modos de empleo:

Estos permisos se organizan de la siguiente forma: Ejemplo 1:

Ejemplo: -rwx-w---- % chmod 754 fichero

El primer caracter es el tipo de fichero: Entiende una sintaxis numérica, a cada categoría le asigna un dígito octal, de tal
Tipos: modo que 1 permite el acceso, y 0 no lo permite. El primer dígito representa los
permisos del propietario. 7 en binario es 111, lo cual corresponde a los tres
- normal permisos activos (lectura, escritura, ejecución). El segundo dígito representa los
d directorio permisos del grupo. 5 en binario es 101, lo cual corresponde a lectura y ejecución
activado, escritura desactivado. El tercer dígito son los permisos para el resto del
c dispositivo
mundo. 4 en binario es 100, solo permiso de lectura.
s fichero para comunicación entre procesos (socket)
l enlace simbólico Ejemplo 2:

Los siguientes 3 caracteres representan los permisos del propietario, luego vienen
% chmod o+r fichero
los del grupo y finalmente los del resto de usuarios.
En este caso se especifica mediante una letra qué permisos se desea modificar:
Los símbolos son los siguientes:

Clase:
r leer
w escribir
u : propietario
x ejecutar
g : grupo
o : resto el C-shell y el Bash. Las cuentas del laboratorio cuentan con el Bash por defecto,
a : todos pero es posible cambiarlo.

Después se especifica la operación que se desea realizar sobre el permiso: C-SHELL

Operación: El Shell que vamos a comentar es el C-Shell (csh). Este intérprete de mandatos fue
+ : añade acceso programado en lenguaje C en la Universidad de California (Berkeley, EEUU). Otro
- : elimina acceso Shell que está bastante difundido es el Bourne Shell (sh), que tiene su origen en los
= : pone permiso Laboratorios Bell y que distribuye AT&T. El C-Shell es más sofisticado que el Bourne
Shell, pero este último es más rápido. Estas características hacen que el C-Shell
Y a continuación sobre qué permiso se desea actuar: sea óptimo para un uso interactivo, y que el segundo se emplee para escribir
rutinas de mandatos (scripts). El Bash es una versión moderna del Bourne Shell.
Permiso: Todo lo que se describe a continuación hace referencia al C-Shell. En un mandato el
r : lectura orden es el siguiente:
w : escritura
x : ejecución % comando opción(es) argumento(s) [redireccionamiento(s)]
El ejemplo añadiría permiso de lectura al resto de usuarios.
Cuando el Shell ejecuta un mandato le asigna una entrada estándar, una salida
SHELL estándar y una salida de error estándar. Normalmente la entrada es el teclado y las
salidas se ofrecen en pantalla. Cuando un programa lee de la entrada estándar y
Cuando nos autentificamos ante el sistema, éste lanza un proceso que ejecuta un escribe en la salida estándar se dice que dicho programa es un filtro. El C-Shell
primer programa para nosotros. Generalmente este programa es lo que se conoce permite redirigir los tres canales estándar (entrada, salida y error) a ficheros. La
como una Shell o intérprete de comandos. Es un programa que se dedica a recoger expresión utilizada para redirigir la salida estándar es la siguiente:
del teclado instrucciones respecto a comandos que deseamos ejecutar y a
ejecutarlos. Puede añadir muchas otras facilidades. Se van a comentar dos shells: comando > fichero
Ejemplo: Ejemplo:

% ls -alF > listado ls | wc –l


ls lista los ficheros de un directorio y envía mediante la pipe esa salida a la utilidad
Crea el fichero; lo vacía antes si ya existía. Si lo que se desea es que la salida del wc que con la opción -l cuenta el número de líneas.
comando se añada al contenido de un fichero basta con formar el comando de la
siguiente manera: Comandos incluidos en el Shell

comando >> fichero cd Permite cambiar el directorio de trabajo del Shell.


Ejemplo: echo args Muestra sus argumentos por la salida estándar.
% echo Fin del listado >> listado
Variables
Se puede hacer que la entrada del comando sea el contenido de un fichero:
Los Shells soportan dos tipos de variables: variables locales y variables de entorno.
comando < fichero Ambos tipos de variables almacenan datos en forma de una cadena. La diferencia principal entre
ambos es que cuando el Shell crea otro Shell (ejecutando /bin/csh), el hijo tiene
una copia de las variables de entorno del padre, pero no de las locales. Cada Shell
Ejemplo: tiene un conjunto de variables de entorno predefinidas, generalmente en ficheros
de inicialización, así como variables locales. Para acceder al contenido de las
% cat < listado variables del Shell hay que colocar $ delante del nombre de las mismas.

También permite conectar la salida estándar de un comando con la entrada Comandos del C-Shell relacionados con las variables:
estándar de otro; esto es lo que se denomina una pipe. Se pueden especificar varias
pipelines en una sola línea. Para indicar al Shell que se desea hacer esta conexión set Lista las variables definidas.
se emplea el carácter |.
set var = cont Permite crear la variable var y darle por valor cont. ~usuario Directorio inicial del usuario especificado. Si no se especifica el usuario,
unset var Destruye la variable var. sino solo el ~ (Altgr+ñ), se entiende que hace referencia al directorio del usuario
echo $var Muestra el contenido de la variable var. propietario del proceso Shell.
printenv Lista las variables de entorno definidas
setenv var cont Permite crear la variable var y darle por valor cont. Historia de comandos
unsetenv var Destruye la variable var. Podemos mantener una historia de eventos que nos permita emplearlos sin tener
que teclearlos de nuevo. Para ello hay que crear una variable de entorno del Shell y
Variables de entorno comunes: darle como valor el número de eventos (comandos) que queremos que recuerde
(que serán los últimos). Esta variable se llama history. Existe un comando de igual
Nombre Significado nombre (history) que lista todos los eventos almacenados. Si deseamos repetir uno
de esos eventos tenemos varias posibilidades; algunas de las más típicas se listan a
HOME El directorio del usuario, el camino completo. continuación:
PATH Lista de directorios donde el Shell buscará los comandos que se le pida
ejecutar. Si no los encuentra ahí devuelve error. history Presenta el listado de eventos.
set history = nº_de_eventos Establece el número máximo de eventos que serán
USER Identificador del usuario. conservados.
SHELL Shell en uso, el camino completo. !! Evento previo.
TERM Tipo de terminal en uso. !n Evento n-ésimo.
!cad Evento más reciente que comience con la cadena cad.
Se puede emplear símbolos para expandir nombres de ficheros, de modo que se Ficheros del Shell
simplifique el manejo de éstos. Algunos son: El Shell puede ser personalizado por el usuario. Se configura por medio de tres
ficheros:
* Cualquier carácter
? Un único carácter .cshrc
[car1...carn] Cualquier carácter de la lista o rangos incluidos entre los corchetes. .login
{cadena,...} Cada una de las cadenas de la lista.
.logout Algunos caracteres son interpretados de forma especial al ser tecleados en un
terminal. Suelen llamarse metacaracteres y se pueden listar con la utilidad stty
Como se puede observar los tres ficheros comienzan con un punto, por lo tanto si (stty -a).
queremos listarlos deberemos emplear la opción -a en el comando ls. El Shell lee al
comienzo el fichero .cshrc y lo ejecuta, luego hace lo mismo con el fichero .login. Al Ejemplo de parte del resultado:
finalizar la sesión lee y ejecuta .logout. Tanto .login como .logout sólo se ejecutan
una vez, aunque después se activen otros shells estos ficheros no se vuelven a intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =
ejecutar. <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W;
BASH
El ^ ante una letra significa que se ha de pulsar la tecla Ctrl al mismo tiempo que
Si se está en otro shell y se quiere pasar al BASH vale con escribir 'bash'. El esa letra. El significado de algunos de estos caracteres es:
funcionamiento es similar al del C-Shell pero posee algunas diferencias que se
listan a continuación: intr Termina la ejecución de un proceso.
eof Su significado es Fin de Fichero , en los casos en que se emplea la entrada
Dispone de historial y además con la flecha hacia arriba de los cursores es estándar para dar información a un comando sirve para enviar este carácter que
posible buscar los últimos comandos. da por finalizada la información.
Las variables locales definidas con 'set' se pueden convertir en variables de erase Corresponde al carácter que provoca el borrado de la letra enterior a la
entorno usando export <nombre_variable>'. posición del punto de inserción.
Incluye ayuda sobre los comandos. Vale con escribir 'help' para listar los
comandos disponibles. UTILIDADES GENERALES DE UNIX

CARACTÉRES ESPECIALES El número de utilidades existentes para UNIX nos obliga a hacer un resumen muy
básico.
grep Busca una cadena en uno o más ficheros (o en la entrada estándar)
Ej. grep <cadena> <fichero>
head Permite ver las primeras líneas de un fichero (o de la entrada estándar). Buscaría desde el directorio raíz ficheros con el nombre mifichero y sacaría los
Sin opciones muestra las 10 primeras. resultados por pantalla.
tail Permite ver las últimas líneas de un fichero (o de la entrada estándar).
Editor vi
Sin opciones muestra las 10 últimas.
Es un programa editor de ficheros de pantalla que no necesita el entorno de
more Permite la observación pausada de un fichero (o de la entrada estándar). ventanas X-Window. Tiene varios modos de funcionamiento, entre los cuales cabe
Pulsando la barra espaciadora avanza una página, con b o ^B retrocede una página, destacar el modo de inserción de texto y el modo de comandos. Para pasar del
con q termina. modo de inserción al modo de comandos se presiona la tecla Esc.
Destacaremos las funciones más básicas del modo de comandos:
wc Cuenta el número de bytes, palabras o líneas en un fichero (o en la entrada
a Añadir texto (pasa al modo de inserción y todo lo que tecleemos se añadirá al
estándar).
fichero) tras el carácter sobre el que se halla el cursor.

who Muestra los usuarios que en este momento están trabajando con el
i Pasa al modo de inserción e inserta texto delante del carácter sobre el que se
sistema.
encuentra el cursor.

df Permite saber cuánto espacio libre hay en cada sistema de ficheros.


ZZ Graba el fichero y sale del editor.
:x Graba el fichero y sale del editor.
du Dice cuántos bloques ocupa un directorio con todos sus ficheros y
:w Graba el fichero sin salir del editor.
subdirectorios.
:w fichero Graba en el fichero con el nombre indicado.
:q abandona el editor.
find Realiza una búsqueda recursiva, comenzando por el directorio especificado
:q! Abandona el editor sin grabar.
y descendiendo por los subdirectorios.
x Elimina el carácter sobre el que está el cursor.
dd Elimina la línea sobre la que está el cursor.
Ej.: find / -name mifichero –print
numdd Elimina las num líneas situadas tras el cursor.
dw elimina la palabra sobre la que está el cursor. definirse variables locales (o de shell) y variables de entorno, definir alias e incluir
u Deshace la última operación. comandos que queramos que se ejecuten al entrar en la cuenta o la nueva shell.

Nos centraremos en la C shell y TC shell que son las más comunes. Los ficheros de
Utilidades de red configuración básicos que se leen cuando entramos en la cuenta son el .cshrc (o
.tcshrc para la TC shell) y el .login . Cuando se inicia una nueva shell sólo se lee el
Estas utilidades nos permiten compartir los recursos de la red. Nuestra máquina primero. Estos ficheros deben estar en el home y al empezar por . son ficheros
puede ver incrementada su potencia y versatilidad gracias a los recursos de otra ocultos.
máquina que pertenezca a nuestra misma red.
telnet Permite acceder a otros sistemas. El formato es: Hay que distinguir entre dos tipos de variables: las variables locales y las de
entorno. Las primeras sólo tienen validez en la shell en las que están definidas. Las
telnet <nombre_maquina> segundas son heredadas por cualquier shell que se ejecute aunque estas variables
hayan sido definidas en el .login que no se lee al abrir una nueva shell.
Seguramente la máquina nos responderá con su petición de 'login:'
ftp Permite la transferencia de ficheros entre sistemas en red aunque tengan Los comandos básicos para la definición de variables son, set, setenv, unset,
distintos sistemas operativos. El formato de inicio es: ftp hostname. Con get nos unsetenv.
traemos un fichero de una máquina remota y con put llevamos un fichero a la
máquina remota. Con help obtenemos una lista de los comandos disponibles en ese set
servidor.
Este comando se utiliza para definir las variables locales, su sintaxis es:
CONFIGURACION DEL ENTORNO
set varname = value
El entorno de trabajo queda definido mediante los valores que la shell encuentra en set varname
los ficheros de inicialización que se leen cada vez que entramos en la cuenta o
empezamos una nueva shell. En general en los ficheros de configuración suelen En el primer caso asignamos un valor a una variable esté o no definida
anteriormente, por ejemplo:
set prompt="(%M)%~%% " Se emplea de forma análoga a set pero con variables de entorno. La sintaxis es
ligeramente diferente:
Define lo que aparece al principio de la línea de comandos. %M es el hostname. %~
El directorio en el que estamos pero representando nuestro home por ~ y %% setenv varname value
añade el caracter % al final. Cada shell usa símbolos distintos para definir el
prompt,. (sin el signo =). Podemos asignar un valor a una variable, simplemente definirla, o
ver las variables de entorno que tenemos definidas ejecutando setenv sin
En el segundo caso simplemente se define una variable. Por ejemplo: argumentos.

set noclobber setenv TAPE /dev/rmt/0bn

Define la variable noclobber. Si esta variable esta definida no permitirá Define la variable TAPE como /dev/rmt/0bn .
sobreescribir un fichero si redireccionamos la salida de un comando a un fichero
que ya existe. unset y unsetenv

Para ver el valor de una variable ya vimos que se puede hacer con el comando Sirven para borrar variables locales y de entorno respectivamente, que ya estaban
echo. Por ejemplo: definidas. La sintaxis es:

echo $PATH unset varname


unsetenv varname
Mostrará el contenido de la variable de entorno PATH (esta variable contiene las
rutas de accesos donde la shell buscara los ficheros ejecutables. Seguirá el orden ¿Donde definir las variables?
en que los directorios aparezcan en el PATH). Sin embargo, si queremos ver todas
las variables que tenemos definidas ejecutamos set sin argumentos. Cada vez que empezamos una nueva shell se ejecuta un fichero de configuración
que depende de la shell en cuestion:
setenv
Bourne Shell .profile
C Shell .cshrc Hay algunas diferencias de sintaxis dependiendo de la shell que empleemos
TC shell .tcshrc (supondremos que usamos una TC shell). Para definir los alias se usa el comando:
Korn Shell .kshrc
BASH .bashrc
alias nombre definicion
Es en estos ficheros donde debemos definir las variables locales que se las llama
Nombre es el nuevo nombre del comando (procurar que sea corto y fácil de
también variables de la shell. Por convención para estas variables se usan letras
recordar). Definición son los comandos que queremos que se ejecuten cuando
minúsculas mientras para las variables de entorno se suelen usar mayúsculas. Hay
tecleamos el alias (es conveniente ponerlo entre ' ') por ejemplo:
que tener en cuenta que en cada shell hay variables que tienen significados
alias lf 'ls -F'
especiales solamente en esa shell, por esto la definición de estas variables debe
alias . 'echo $cwd; ls'
hacerse en estos ficheros y no en el .login.
Si lo ejecutamos en la línea de comandos sólo tendrá validez en esa shell. Si
En el fichero .login en general suelen definirse las variables de entorno, aunque
queremos definirlo de forma que quede permanentemente asignado lo debemos
pueden definirse en el fichero de inicialización de la shell correspondiente.
incluir en el fichero .tcshrc o cualquier otro fichero que el .tcshrc ejecute. En la
Una vez dentro de una shell (supongamos TC shell) podemos definir nuevas definición de los alias podemos no sólo hacer referencia a comandos sino también a
variables ejecutando los comandos set o setenv. o bien incluyendo estos comandos otros alias.
en el fichero .tcshrc y volviendolo a ejecutar con el comando source.
En el primer ejemplo definimos el comando lf que será equivalente al comando ls
source .tcshrc
con la opción -F (esta opción añade una / despues del nombre del fichero si es un
Alias directorio, un * si es un ejecutable, un @ si es un link).

Otra de las utilidades que permiten tener un entorno de trabajo más agradable es la En el segundo ejemplo al teclear . nos mostrará el valor de la variable cwd que
definición de alias. Un alias nos permite asignar un nuevo nombre a un comando. contiene el directorio en que estamos y hace luego un listado de este directorio.
Esto puede ser muy útil en comandos que usemos frecuentemente y que tengan
Pueden ponerse varios comandos en un mismo alias separandolos por ; asi como
nombres largos, difíciles de recordar o con complicadas opciones.
también está permitido la utilización de pipes.
También se pueden pasar argumentos al alias desde la línea de comandos. Cuando Para ver todos los alias que hay definidos se ejecuta el comando alias sin
ejecutamos un alias podemos poner una serie de argumentos que se interpretan argumento. Para ver la definición de un alias concreto tecleamos alias name.
como si estuvieran inmediatamente después de la definición del alias. Por ejemplo:
Para cancelar a definición de un alias se usa el comando unalias name. Si
alias k9 'kill -9' queremos cancelar la definición definitivamente, tendremos que borrarlo del
k9 17313 fichero .tcshrc.

Al ejecutar esta última línea se matará el proceso 17313. Para evitar confusiones no se debe usar el nombre de un comando como alias para
otro o el mismo comando con diferentes opciones. Por ejemplo muchos usuarios
Si queremos que los argumentos que damos al alias se sitúen en un punto distinto suelen definir:
del final, tenemos los siguientes cracteres:
alias rm 'rm -i'
!^
!* Al ejecutar rm * se ejecuta en realidad el comando rm -i * que nos va pidiendo
Que deben estar precedidos de \ para evitar que el caracter ! sea interpretado por confirmación de si queremos borrar realmente los ficheros. El problema puede
la shell de otra manera. El primero pasa el argumento que aparece en primer lugar presentarse si nos abren una cuenta en otro sistema donde no hayamos definido
de la línea de comandos al punto donde aparece !^. El segundo pasa todos los este alias y al ejecutar rm * nos borrara todos los ficheros sin pedir confirmación.
argumentos. Por ejemplo: Para evitar esto es mejor definir el alias con otro nombre como del o rmi.

alias gv 'ghostview -a4 -swap -bg white \!^ &' INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS DE RED

Tecleando gv file.ps podremos ver el fichero postscript file.ps con el programa Al igual que un equipo no puede trabajar sin un sistema operativo, una red de
ghostview. El argumento que damos (que es el nombre del postscript) será equipos no puede funcionar sin un sistema operativo de red. Si no se dispone de
introducido antes del caracter & que manda el proceso al background. ningún sistema operativo de red, los equipos no pueden compartir recursos y los
usuarios no pueden utilizar estos recursos.
Dependiendo del fabricante del sistema operativo de red, tenemos que el software
de red para un equipo personal se puede añadir al propio sistema operativo del
equipo o integrarse con él.

NetWare de Novell es el ejemplo más familiar y famoso de sistema operativo de red


donde el software de red del equipo cliente se incorpora en el sistema operativo del
equipo. El equipo personal necesita ambos sistema operativos para gestionar
conjuntamente las funciones de red y las funciones individuales.

El software del sistema operativo de red se integra en un número importante de


sistemas operativos conocidos, incluyendo Windows 2000 Server/Professional,
Windows NT Server/Workstation, Windows 95/98/ME y Apple Talk.

Cada configuración (sistemas operativos de red y de los equipos separados, o


sistema operativo combinando las funciones de ambos) tiene sus ventajas e
inconvenientes. Por tanto, nuestro trabajo como especialistas en redes es
determinar la configuración que mejor se adapte a las necesidades de nuestra red.
Coordinación del software y del hardware Existen dos métodos básicos de multitarea:

El sistema operativo de un equipo coordina la interacción entre el equipo y los  Con prioridad. En una multitarea con prioridad, el sistema operativo
programas (o aplicaciones) que está ejecutando. Controla la asignación y utilización puede tomar el control del procesador sin la cooperación de la propia
de los recursos hardware tales como: tarea.
 Sin prioridad (cooperativo). En una multitarea sin prioridad, la propia
 Memoria. tarea decide cuándo deja el procesador. Los programa escritos para
 Tiempo de CPU. sistemas de multitarea sin prioridad deben incluir algún tipo de previsión
 Espacio de disco. que permita ejercer el control del procesador. No se puede ejecutar
 Dispositivos periféricos. ningún otro programa hasta que el programa sin prioridad haya
abandonado el control del procesador.
En un entorno de red, los servidores proporcionan recursos a los clientes de la red
y el software de red del cliente permite que estos recursos estén disponibles para El sistema multitarea con prioridad puede proporcionar ciertas ventajas dada la
los equipos clientes. La red y el sistema operativo del cliente están coordinados de interacción entre el sistema operativo individual y el Sistema Operativo de Red
forma que todos los elementos de la red funcionen correctamente. (sistema operativo de red). Por ejemplo, cuando la situación lo requiera, el sistema
con prioridad puede conmutar la actividad de la CPU de una tarea local a una tarea
Multitarea de red.

Un sistema operativo multitarea, como su nombre indica, proporciona el medio que Componentes software
permite a un equipo procesar más de una tarea a la vez. Un sistema operativo
multitarea real puede ejecutar tantas tareas como procesadores tenga. Si el El software cliente de red debe instalarse sobre el sistema operativo existente, en
número de tareas es superior al número de procesadores, el equipo debe ordenar aquellos sistemas operativos de equipo que no incluyan funciones propias de red.
los procesadores disponibles para dedicar una cierta cantidad de tiempo a cada Otros sistemas operativos, como Windows NT/2000, integran el sistema operativo
tarea, alternándolos hasta que se completen las citadas tareas. Con este sistema, de red y sistema operativo del equipo. A pesar de que estos sistemas integrados
el equipo parece que está trabajando sobre varias tareas a la vez. tienen algunas ventajas, no evitan la utilización de otros Sistema Operativo de Red.
Es importante considerar la propiedad de interoperabilidad cuando se configuran
entornos de red multiplataforma. Se dice que los elementos o componentes de los local a la red y desde allí al servidor que tiene el recurso solicitado. Este envío es
sistemas operativos «interoperan» cuando pueden funcionar en diferentes realizado por el redirector.
entornos de trabajo. Por ejemplo, un servidor NetWare puede interoperar (es decir,
acceder a los recursos) con servidores NetWare y servidores Windows NT/2000. Redirector

Un sistema operativo de red: Un redirector procesa el envío de peticiones. Dependiendo del software de red, este
redirector se conoce como «Shell» o «generador de peticiones». El redirector es
 Conecta todos los equipos y periféricos. una pequeña sección del código de un Sistema Operativo de Red que:
 Coordina las funciones de todos los periféricos y equipos.
 Proporciona seguridad controlando el acceso a los datos y periféricos.  Intercepta peticiones en el equipo.
 Determina si la peticiones deben continuar en el bus del equipo local o
Las dos componentes principales del software de red son: deben redirigirse a través de la red a otro servidor

 El software de red que se instala en los clientes. La actividad del redirector se inicia en un equipo cliente cuando el usuario genera la
 El software de red que se instala en los servidores. petición de un recurso o servicio de red. El equipo del usuario se identifica como
cliente, puesto que está realizando una petición a un servidor. El redirector
Software de cliente intercepta la petición y la envía a la red.

En un sistema autónomo, cuando un usuario escribe un comando que solicita el El servidor procesa la conexión solicitada por los redirectores del cliente y les
equipo para realizar una tarea, la petición circula a través del bus local del equipo proporciona acceso a los recursos solicitados. En otras palabras, los servicios del
hasta la CPU del mismo. Por ejemplo, si quiere ver un listado de directorios de uno servidor solicitados por el cliente.
de los discos duros locales, la CPU interpreta y ejecuta la petición y, a continuación,
muestra el resultado del listado de directorios en una ventana. Designadores

Sin embargo, en un entorno de red, cuando un usuario inicia una petición para Normalmente, el sistema operativo proporcionará diferentes opciones para
utilizar un recurso que está en un servidor en otra parte de la red, el acceder al directorio cuando necesite acceder a un directorio compartido y tenga
comportamiento es distinto. La petición se tiene que enviar, o redirigir, desde el bus los correspondientes permisos para realizarlo. Por ejemplo, con Windows NT/2000,
podría utilizar el icono Conectar a unidad de red del Explorador de Windows El software de servidor permite a los usuarios en otras máquinas, y a los equipos
NT/2000 para conectarse a la unidad de red. También, puede asignar una unidad. clientes, poder compartir los datos y periféricos del servidor incluyendo
La asignación de unidades consiste en asignar una letra o nombre a una unidad de impresoras, trazadores y directorios.
disco, de forma que el sistema operativo o el servidor de la red puede identificarla
y localizarla. El redirector también realiza un seguimiento de los designadores de Si un usuario solicita un listado de directorios de un disco duro remoto compartido.
unidades asociados a recursos de red. El redirector envía la petición por la red, se pasa al servidor de archivos que
contiene el directorio compartido. Se concede la petición y se proporciona el
Periféricos listado de directorios.

Los redirectores pueden enviar peticiones a los periféricos, al igual que se envían a Compartir recursos
los directorios compartidos. La petición se redirige desde el equipo origen y se
envía a través de la red al correspondiente destino. En este caso, el destino es el Compartir es el término utilizado para describir los recursos que públicamente
servidor de impresión para la impresora solicitada. están disponibles para cualquier usuario de la red. La mayoría de los sistemas
operativos de red no sólo permiten compartir, sino también determinar el grado de
Con el redirector, podemos referenciar como LPT1 o COM1 impresoras de red en compartición. Las opciones para la compartición de recursos incluyen:
lugar de impresoras locales. El redirector intercepta cualquier trabajo de
impresión dirigido a LPT1 y lo envía a la impresora de red especificada.  Permitir diferentes usuarios con diferentes niveles de acceso a los
recursos.
La utilización del redirector permite a los usuarios no preocuparse ni de la  Coordinación en el acceso a los recursos asegurando que dos usuarios no
ubicación actual de los datos o periféricos ni de la complejidad del proceso de utilizan el mismo recurso en el mismo instante.
conexión o entrada. Por ejemplo, para acceder a los datos de un ordenador de red,
el usuario sólo necesita escribir el designador de la unidad asignado a la Por ejemplo, un administrador de una oficina quiere que una persona de la red se
localización del recurso y el redirector determina el encaminamiento actual. familiarice con un cierto documento (archivo), de forma que permite compartir el
documento. Sin embargo, se controla el acceso al documento compartiéndolo de
Software de servidor forma que:

 Algunos usuarios sólo podrán leerlo.


 Algunos usuarios podrán leerlo y realizar modificaciones en él. Algunos sistemas operativos de red avanzados incluyen herramientas de gestión
que ayudan a los administradores a controlar el comportamiento de la red. Cuando
Gestión de usuarios se produce un problema en la red, estas herramientas de gestión permiten
detectar síntomas de la presencia del problema y presentar estos síntomas en un
Los sistemas operativos de red permiten al administrador de la red determinar las gráfico o en otro formato. Con estas herramientas, el administrador de la red
personas, o grupos de personas, que tendrán la posibilidad de acceder a los puede tomar la decisión correcta antes de que el problema suponga la caída de la
recursos de la red. El administrador de una red puede utilizar el Sistema Operativo red.
de Red para:
Selección de un sistema operativo de red
 Crear permisos de usuario, controlados por el sistema operativo de red,
que indican quién puede utilizar la red. El sistema operativo de red determina estos recursos, así como la forma de
 Asignar o denegar permisos de usuario en la red. compartirlos y acceder a ellos.
 Eliminar usuarios de la lista de usuarios que controla el sistema operativo
de red. En la planificación de una red, la selección del sistema operativo de red se puede
simplificar de forma significativa, si primero se determina la arquitectura de red
Para simplificar la tarea de la gestión de usuarios en una gran red, el sistema (cliente/servidor o Trabajo en Grupo) que mejor se ajusta a nuestras necesidades.
operativo de red permite la creación de grupos de usuarios. Mediante la A menudo, esta decisión se basa en los tipos de seguridad que se consideran más
clasificación de los individuos en grupos, el administrador puede asignar permisos adecuados. Las redes basadas en servidor le permiten incluir más posibilidades
al grupo. Todos los miembros de un grupo tendrán los mismos permisos, asignados relativas a la seguridad que las disponibles en una red Trabajo en Grupo. Por otro
al grupo como una unidad. Cuando se une a la red un nuevo usuario, el lado, cuando la seguridad no es una propiedad a considerar, puede resultar más
administrador puede asignar el nuevo usuario al grupo apropiado, con sus apropiado un entorno de red Trabajo en Grupo.
correspondientes permisos y derechos.
Después de identificar las necesidades de seguridad de la red, el siguiente paso es
Gestión de la red determinar los tipos de interoperabilidad necesaria en la red para que se comporte
como una unidad. Cada sistema operativo de red considera la interoperabilidad de
forma diferente y, por ello, resulta muy importante recordar nuestras propias
necesidades de interoperabilidad cuando se evalúe cada Sistema Operativo de Red. Los sistemas operativos de red basados en servidor más importantes son
Si la opción es Trabajo en Grupo, disminuirán las opciones de seguridad e Microsoft Windows NT 4, Windows 2000 Server y Novell NetWare 3.x, 4.x y 5.x. Los
interoperabilidad debida a las limitaciones propias de esta arquitectura. Si la opción sistemas operativos de red Trabajo en Grupo más importantes son AppleTalk,
seleccionada se basa en la utilización de un servidor, es necesario realizar Windows 95 y 98 y UNIX (incluyendo Linux y Solaris).
estimaciones futuras para determinar si la interoperabilidad va a ser considerada
como un servicio en el servidor de la red o como una aplicación cliente en cada Sistemas operativos de Novell
equipo conectado a la red. La interoperabilidad basada en servidor es más sencilla
de gestionar puesto que, al igual que otros servicios, se localiza de forma Introducción a NetWare
centralizada. La interoperabilidad basada en cliente requiere la instalación y
El sistema operativo de red NetWare está formado por aplicaciones de servidor y
configuración en cada equipo. Esto implica que la interoperabilidad sea mucho más
cliente. La aplicación cliente se diseña para ejecutarse sobre una variedad
difícil de gestionar.
importante de los sistemas operativos que residen en los clientes. Los usuarios
No es raro encontrar ambos métodos (un servicio de red en el servidor y clientes pueden acceder a la aplicación servidor a partir de ordenadores que
aplicaciones cliente en cada equipo) en una misma red. Por ejemplo, un servidor ejecuten MS-DOS, Microsoft Windows (versiones 3.x, 95 y 98 y Windows NT), OS/2,
NetWare, a menudo, se implementa con un servicio para los equipos Apple, mientras Apple Talk o UNIX. A menudo, NetWare es la opción que se utiliza como sistema
que la interoperabilidad de las redes de Microsoft Windows se consigue con una operativo en entornos de múltiples sistemas operativos mezclados.
aplicación cliente de red en cada equipo personal.
La versión 3.2 de NetWare es un Sistema Operativo de Red de 32 bits que admite
Cuando se selecciona un sistema operativo de red, primero se determinan los entornos Windows (versiones 3.x, 95 y 98 y Windows NT), UNIX, Mac OS y MS-DOS.
servicios de red que se requieren. Los servicios estándares incluyen seguridad, Con la versión NetWare 4.11, también denominada IntranetWare, Novell introdujo su
compartición de archivos, impresión y mensajería; los servicios adicionales nuevo Sistema Operativo de Red, los Servicios de directorios de Novell (NDS). La
incluyen soporte de interoperabilidad para conexiones con otros sistemas versión 5, última versión distribuida, se centra en la integración de LAN, WAN,
operativos. Para cualquier Sistema Operativo de Red, es necesario determinar los aplicaciones de red, intranets e Internet en una única red global.
servicios de interoperabilidad o clientes de red a implementar para adecuarse
Los Servicios de directorios de Novell (NDS) proporcionan servicios de nombre y
mejor a las necesidades.
seguridad, encaminamiento, mensajería, publicación Web y servicios de impresión y
de archivos. Mediante la utilización de la arquitectura de directorios X.500, directorio de un servidor de archivos de NetWare, de forma que los recursos de
organiza todos los recursos de red, incluyendo usuarios, grupos, impresoras, NetWare aparecerán como unidades lógicas en sus equipos. Estas unidades lógicas
servidores y volúmenes. NDS también proporciona una entrada única para el funcionan igual que cualquier otra unidad en sus equipos.
usuario, que permite a éste poder entrar en cualquier servidor de la red y tener
acceso a todos sus permisos y derechos habituales. Seguridad

Otros Sistema Operativo de Red proporcionan software de cliente para la NetWare proporciona seguridad de gran alcance, incluyendo:
interoperabilidad con servidores NetWare. Por ejemplo, Windows NT proporciona
Servicios de enlace para NetWare (Gateway Services GSNW). Con este servicio, un  Seguridad de entrada.- Proporciona verificación de autenticación
servidor Windows NT puede obtener acceso a servicios de archivo e impresión basada en el nombre de usuario, contraseña y restricciones de cuentas y
NetWare. de tiempo.
 Derechos de Trustee.- Controla los directorios y archivos a los que
Servicios NetWare puede acceder un usuario y lo que puede realizar el usuario con ellos.
 Atributos de archivos y directorios. Identifica los tipos de acciones que
Con el Cliente NetWare instalado, cualquier estación cliente puede obtener todas las se pueden llevar a cabo en un archivo (visualizarlo, escribir en él,
ventajas de los recursos proporcionados por un servidor NetWare. Algunos de los copiarlo, buscarlo u ocultarlo o suprimirlo).
servicios más importantes que proporciona, son:
Servicios de impresión
Servicios de archivos
Los servicios de impresión son transparentes (invisibles) al usuario de un equipo
Los servicios de archivos de NetWare forman parte de la base de datos NDS. NDS cliente. Cualquier petición de impresión por parte de un cliente es redirigida al
proporciona un único punto de entrada para los usuarios y permite a los usuarios y servidor de archivos, donde se envía al servidor de impresión y, finalmente, a la
administradores ver de la misma forma los recursos de la red. Dependiendo del impresora. El mismo equipo puede actuar como servidor de archivos y servidor de
software de cliente instalado, podrá ver la red completa en un formato conocido impresión. Permite compartir dispositivos de impresión que se conectan al
para el sistema operativo de la estación de trabajo. Por ejemplo, un cliente servidor, a la estación de trabajo o, directamente, a la red por medio de las propias
Microsoft Windows puede asignar una unidad lógica a cualquier volumen o
tarjetas de red (NIC) de los dispositivos. Los servicios de impresión de NetWare NT desarrolló NWLink y GSNW que le permiten interoperar. Estos servicios permiten
pueden admitir hasta 256 impresoras. a un servidor en una red Windows NT actuar como un enlace a la red NetWare.
Cualquier estación en la red Windows NT puede solicitar recursos o servicios
Envío de mensajes a otros disponibles en la red NetWare, pero deben realizar la petición a través del servidor
Windows NT. A continuación, el servidor actuará como cliente en la red NetWare,
Por medio de algunos comandos sencillos, los usuarios pueden enviar un breve pasando las peticiones entre las dos redes.
mensaje a otros usuarios de la red. Los mensajes se pueden enviar a grupos o de
forma individual. Si todos los receptores pertenecen al mismo grupo, es SISTEMAS OPERATIVOS DE RED DE MICROSOFT
conveniente enviar el mensaje al grupo en lugar de enviarlo de forma individual. Los
usuarios también pueden activar o desactivar este comando para sus estaciones de Introducción a Windows NT
trabajo. Cuando un usuario desactiva este comando, no recibirá ningún mensaje
enviado. A diferencia del sistema operativo NetWare, Windows NT combina el sistema
operativo del equipo y de red en un mismo sistema. Windows NT Server configura
Los mensajes también se pueden controlar a través del Servicio de control de un equipo para proporcionar funciones y recursos de servidor a una red, y Windows
mensajes (Message Handling Service - MHS). MHS se puede instalar en cualquier NT Workstation proporciona las funciones de cliente de la red.
servidor y configurarse como una infraestructura de mensajes completamente
interconectada para una distribución de correo electrónico. MHS admite los Windows NT trabaja sobre un modelo de dominio. Un dominio es una colección de
programas más habituales de correo electrónico. equipos que comparten una política de seguridad y una base de datos común. Cada
dominio tiene un nombre único. Dentro de cada dominio, se debe designar un
Interoperabilidad servidor como Controlador principal de dominio (PDC, Primary Domain Controller).
Este servidor mantiene los servicios de directorios y autentifica cualquier usuario
No siempre se puede conseguir la interoperabilidad completa de un Sistema que quiera entrar en el sistema. Los servicios de directorios de Windows NT se
Operativo de Red. Es especialmente cierta cuando se conectan dos redes pueden implementar de varias formas utilizando la base de datos de seguridad y de
diferentes, como NetWare y Windows NT. Un entorno NetWare, caracterizado por las cuentas.
sus servicios de directorio y Windows NT que trabaja sobre la base de un modelo de
dominio, son esencialmente incompatibles. Para solucionar este problema, Windows Existen cuatro modelos de dominio diferentes.
 Dominio único.- Un único servidor mantiene la base de datos de compartición obtiene las ventajas completas de las características de seguridad de
seguridad y de las cuentas. Windows NT. Puede asignar permisos a nivel de directorio y a nivel de archivos.
 Maestro único.- Una red con maestro único puede tener diferentes Esto le permite restringir el acceso a grupos o usuarios determinados. Para poder
dominios, pero se designa uno como el maestro y mantiene la base de obtener las ventajas de un proceso de compartición de archivos más avanzado, es
datos de las cuentas de usuario. necesario utilizar el sistema de archivos de Windows NT (NTFS). Durante la
 Maestro múltiple.- Una red con maestro múltiple incluye diferentes instalación de Windows NT, puede seleccionar entre un sistema de archivos NTFS o
dominios, pero la base de datos de las cuentas se mantiene en más de un un sistema FAT-16 bits (MS-DOS). Puede instalar ambos sistemas sobre unidades
servidor. Este modelo se diseña para organizaciones muy grandes. fijas diferentes o sobre particiones distintas de un mismo disco duro, pero cuando
 Confianza-completa.- «Confianza completa» significa que existen varios el equipo esté trabajando en modo MS-DOS, no estarán disponibles los directorios
dominios, pero ninguno está designado como maestro. Todos los dominios de NTFS. Cualquier cliente que no utilice NTFS puede compartir la red, pero está
confían completamente en el resto. limitado para publicar recursos compartidos y no puede utilizar las ventajas de las
utilidades de seguridad de NTFS.
Servicios de Windows NT

Los servicios más importantes que Windows NT Server y Workstation proporcionan


a una red:

Servicios de archivos

Existen dos mecanismos que permiten compartir archivos en una red Windows NT.
El primero se basa en un proceso sencillo de compartición de archivos, como puede
ser una red Trabajo en Grupo. Cualquier estación o servidor puede publicar un
directorio compartido en la red y especificar los atributos de los datos (sin acceso,
lectura, agregar, cambio, control total). La gran diferencia entra los sistemas
operativos Windows NT y Windows 95 /98 es que para compartir un recurso de
Windows NT debe tener permisos de administrador. El siguiente nivel de
Seguridad Windows NT proporciona diferentes servicios de red que ayudan a facilitar una red
de ejecución uniforme. Algunos servicios son:
Al igual que los Sistema Operativo de Red más importantes, Windows NT
proporciona seguridad para cualquier recurso de la red. El servidor de dominio en  Servicio de mensajería.- Monitoriza la red y recibe mensajes
una red Windows NT mantiene todos los registros de las cuentas y gestiona los emergentes para el usuario.
permisos y derechos de usuario. Para acceder a cualquier recurso de la red, el  Servicio de alarma.- Envía las notificaciones recibidas por el servicio de
usuario debe tener los derechos necesarios para realizar la tarea y los permisos mensajería.
adecuados para utilizar el recurso.  Servicio de exploración.- Proporciona una lista de servidores
disponibles en los dominios y en los grupos de trabajo.
Impresión  Servicio de estación.- Se ejecuta sobre una estación de trabajo y es
responsable de las conexiones con el servidor. Además, se conoce como
En una red Windows NT, cualquier servidor o cliente puede funcionar como servidor el redirector.
de impresión. Compartir una impresora de red implica que esté disponible para  Servicio de Servidor.- Proporciona acceso de red a los recursos de un
cualquier usuario de red (sujeto a las reglas de compartición). Cuando se instala equipo.
una impresora, primero se pregunta si la impresora está designada como
impresora local (Mi PC) o como impresora de red. Si se selecciona como impresora Interoperabilidad
de red, aparece un cuadro de diálogo mostrando todas las impresoras de red
disponibles. Todo lo que tiene que hacer es seleccionar aquella que desea utilizar. El protocolo de red NWLink se diseña para que Windows NT sea compatible con
Recuerde que puede instalar más de una impresora en una máquina. NetWare. Los servicios disponibles son:

Además, si está instalando una impresora local, se preguntará si quiere compartir  Servicios de enlace para NetWare (Gateway Services for NetWare
la impresora con otros usuarios de la red. GSNW).- Todos los clientes de Windows NT, dentro de un dominio, deben
conectarse con un servidor NetWare a través de una única fuente. GSNW
Servicios de red proporciona la conexión basada en gateway entre un dominio de Windows
NT y un servidor NetWare. Esto funciona correctamente en condiciones de
bajo volumen, pero provocará una bajada en el rendimiento cuando se Además, veremos la utilización de Windows para Grupos de trabajo, Windows 95 y
incremente el número de peticiones. Windows 98 para configurar redes Trabajo en Grupo, o como clientes en otras
 Servicios de cliente para NetWare (Client Services for NetWare redes.
CSNW).- Este servicio activa una estación Windows NT para acceder a los
servicios de archivo e impresión de un servidor NetWare. Se incluye como Muchas compañías de software han desarrollado software LAN Trabajo en Grupo.
parte de GSNW. Realizar una búsqueda en Internet le ayudará a localizar estas posibles opciones.
 Servicios de archivos e impresión para NetWare (File and Print
Services for NetWare FPNW).- Esta utilidad permite a los clientes de Sistema operativo de red AppleTalk
NetWare acceder a los servicios de archivo e impresión de Windows NT.
El sistema operativo de red AppleTalk está completamente integrado en el sistema
No forma parte del paquete de Windows NT y debe adquirirse por
operativo de cada equipo que ejecuta el Mac OS. Su primera versión, denominada
separado.
LocalTalk, era lenta en comparación con los estándares de hoy en día, pero trajo
 Gestor de los servicios de directorio para NetWare (Directory
consigo la interconexión de los usuarios que rápidamente hicieron uso de ella.
Service Manager for NetWare DSMN).- Esta utilidad adicional integra la
Todavía forma parte del Apple Sistema Operativo de Red una forma de
información de cuentas de los grupos y de usuarios de Windows NT y
interconexión por el puerto de serie de LocalTalk.
NetWare. No forma parte del paquete de Windows NT y debe adquirirse
por separado.
La implementación actual de AppleTalk permite posibilidades de interconexión
 Herramienta de migración para NetWare.- Esta herramienta la utilizan Trabajo en Grupo de alta velocidad entre equipos Apple, así como interoperabilidad
los administradores que están convirtiendo NetWare en Windows NT. Envía con otros equipos y sistemas operativos de red. No obstante, esta interoperabilidad
la información de las cuentas de un servidor NetWare a un controlador de no forma parte, obviamente, del sistema operativo de Apple; En su lugar, los
dominio de Windows NT. usuarios de equipos distintos de Apple pueden conectar más fácilmente sus
recursos a un sistema operativo de red de Apple mediante Apple IP, la
OTROS SISTEMAS OPERATIVOS DE RED
implementación Apple del protocolo de red TCP/IP. Apple IP permite a usuarios no
Apple acceder a los recursos de Apple, como pueden ser archivos de bases de
Aunque Windows NT y NetWare constituyen los sistemas operativos de red más
datos.
habituales del mercado, no son los únicos disponibles. Incluir también algunos de
los sistemas operativos menos conocidos como AppleTalk, Unix y Banyan Vines.
Los equipos que forman parte del sistema operativo en red de Apple pueden Redes UNIX
conectarse a otras redes utilizando servicios proporcionados por los fabricantes
de los Sistema Operativo de Red que se están ejecutando en los correspondientes UNIX es un sistema operativo de propósito general, multiusuario y multitarea. La
servidores de red. Toda la comunidad Windows NT Server, Novell NetWare y Linux dos versiones más conocidas son Linux y Solaris de Sun Microsystem.
proporcionan servicios de interoperabilidad Apple para sus respectivas Normalmente, un sistema UNIX está constituido por un equipo central y múltiples
plataformas. Esto permite a los usuarios de Apple, conectados en red, hacer uso de terminales para los usuarios. Este sistema operativo incluye las prestaciones de
los recursos disponibles en estos servidores de red. red, diseñado específicamente para grandes redes, pero también presenta algunas
aplicaciones para equipos personales. UNIX trabaja bien sobre un equipo autónomo
El formato de los servicios de directorio de AppleTalk se basa en las características y, como consecuencia de sus posibilidades de multitarea, también lo hace
denominadas «zonas». Se trata de grupos lógicos de redes y recursos (una red perfectamente en un entorno de red.
Apple Talk Fase 1 está formada por no más de una zona, mientras que una red de
Fase 2 puede tener hasta 255 zonas. Sin embargo, las dos son incompatibles y no UNIX es altamente adaptable al entorno cliente/servidor. Se puede transformar en
resulta sencillo mantenerlas en la misma estructura de cableado de red). Estas un servidor de archivos instalando el correspondiente software del servidor de
zonas proporcionan un medio de agrupamiento de los recursos de una red en archivos. A continuación, como host UNIX, puede responder a peticiones realizadas
unidades funcionales. en las estaciones de trabajo. El software del servidor de archivos es, simplemente,
una aplicación más que se está ejecutando en el equipo multitarea.
En el entorno actual de escritorio, los usuarios de Windows y Apple pueden
beneficiarse de un alto grado de interoperabilidad presente en el software de Un cliente de un host UNIX puede ser otro equipo UNIX o cualquier otro equipo que
aplicaciones. Las colecciones de productividad (aplicaciones estándar, por ejemplo, ejecute MS-DOS, OS/2, Microsoft Windows o Macintosh (System 7 u 8). Un
hojas de cálculo, bases de datos, tratamiento de textos y correo electrónico) redirector de archivos activará la estación para almacenar y recuperar archivos
pueden, a menudo, intercambiar información directamente. AppleShare permite a UNIX cuando éstos están en su formato original.
los usuarios de un equipo Apple compartir con otros usuarios Apple aquellos
recursos para los que tienen asignados los permisos apropiados para permitir su Servicios virtuales de red integrados Banyan (Vines)
acceso. Con la interoperabilidad a nivel de sistema operativo y a nivel de aplicación,
el Sistema Operativo de Red de Apple puede proporcionar a los clientes, y a otros
Sistema Operativo de Red, una gama completa de posibilidades de interconexión.
Otro sistema de conexión es el Servicio virtual de red integrados Banyan (Vines). un área relativamente pequeña es 10 o un número menor. En estas redes todas las
Vines es un Sistema Operativo de Red basado en una arquitectura cliente/servidor estaciones son iguales y cada una de ellas actúa como servidor o cliente. En
derivado de los protocolos Xerox Network System (XNS) de la Corporación Xerox. muchos casos, estas redes compartirán sólo los archivos e impresoras. La mayoría
de los sistemas operativos de red incluyen el software necesario para configurar
En la versión actual de Banyan Vines destaca la mensajería mediante la integración una red Trabajo en Grupo.
con el software Intelligent Messaging (Mensajería inteligente) y BeyondMail de
Banyan. La creación y gestión de los servicios de red se realizan a través de la Windows para Grupos de trabajo
última versión de StreetTalk Explorer de Banyan. Esta interfaz trabaja con los
perfiles de usuario de Windows, aceptando las configuraciones de los usuarios en Windows para Grupos de trabajo (Windows 3.11) funciona de forma muy similar a su
cualquier parte de la red. Algunas características presentes en Vines: predecesor, Windows 3.1, pero incluye un Sistema Operativo de Red Trabajo en
Grupo, una aplicación de correo electrónico y una aplicación de anotaciones. Un
 Soporte cliente para Windows NT y Windows 95 y 98. grupo de equipos conectados a través de una red pueden compartir impresoras y
 Banyan Intranet Connect, que proporciona acceso a cliente remoto con un archivos. Sólo se pueden enviar a otros miembros aquellos elementos que
navegador Web estándar. aparezcan designados como compartidos. Todos los archivos e impresoras
 Software servidor a servidor TCP/IP (Protocolo de control de aparecen ocultos para todos los usuarios, excepto para el equipo local. Cuando se
transmisión/Protocolo de Internet). comparte un directorio del disco o una impresora de una estación de trabajo, se le
 Banyan Networker, una familia de productos de almacenamiento en red. asigna un nombre al recurso compartido que pueden utilizar el resto de usuarios
 Soporte multiprocesador de hasta cuatro procesadores. para referenciarlo. Durante el proceso de conexión se asigna una letra de unidad al
directorio compartido y el redirector redirige el puerto LPT a través de la LAN a la
impresora correcta.

Redes locales Trabajo en Grupo Aunque todavía se utiliza Windows para Grupos de trabajo, resulta prácticamente
imposible que se requieran sus servicios para instalar una nueva red utilizando
En muchas oficinas y pequeñas empresas existe la necesidad de crear una red este sistema operativo.
Trabajo en Grupo sencilla. Una red Trabajo en Grupo podría ser la opción más
económica cuando la seguridad no es importante y el número de equipos dentro de Windows 95/98/ME
Los sistemas operativos Windows 95/98/ME incluyen el software necesario para El entorno multiplataforma
crear una red Trabajo en Grupo y activar la compartición de archivos e impresoras.
Hoy en día, la mayoría de la redes se encuentran un entornos multiplataforma. A
Los equipos que ejecutan Windows 95 y 98 también trabajarán como clientes en pesar de que pueden plantear retos importantes, funcionan correctamente cuando
una LAN Windows NT o NetWare. Tendrá que instalar el software de cliente se implementan y se planifican de forma apropiada.
(generador de peticiones) correspondiente. Los usuarios de Windows 95 y 98 no
pueden utilizar las ventajas completas que proporciona Windows NT con respecto a El carácter de una red cambia cuando los componentes software de diferentes
las características de seguridad. Estas características requieren la utilización del plataformas deben operar en la misma red. Los problemas pueden aumentar
formato de archivos NTFS que no es compatible con Windows 95 y 98. cuando la red está ejecutando más de un tipo de sistema operativo de red.

Warp Connect Para que una red funcione de forma apropiada en un entorno de trabajo
heterogéneo, deben ser compatibles el redirector, el sistema operativo del servidor
Warp Connect combina OS/2 Warp y las posibilidades de interconexión Trabajo en y del cliente. En un entorno multiplataforma, es necesario encontrar un lenguaje
Grupo de WIN-OS/2. Proporciona posibilidades de interconexión a nivel de cliente y común que permita a todos los equipos comunicarse.
Trabajo en Grupo similares a las que proporciona Windows para Grupos de trabajo.
Con la utilidad predefinida de conexión Trabajo en Grupo incluida en Warp Connect, Implementación de soluciones multiplataforma
puede compartir aplicaciones, impresoras, módems y archivos, sin necesidad de
instalar hardware especial. Garantizar la interoperabilidad en entornos multiplataforma se puede conseguir a
nivel de servidor (también conocido como el «final de regreso») o a nivel de cliente
(también conocido como el «final de inicio»). La opción depende de los fabricantes
que se estén utilizando.
SISTEMAS OPERATIVOS DE RED EN ENTORNOS MULTIPLATAFORMA
Interoperabilidad de cliente
Normalmente, los Sistema Operativo de Red tienen que integrar los productos
hardware y software fabricados por diferentes fabricantes. Las propiedades y En las situaciones que se incluyen múltiples Sistema Operativo de Red, el redirector
problemas a tener en cuenta en una red multiplataforma, son: se convierte en la clave de la interoperabilidad. Sólo cuando se utiliza más de un
proveedor de servicios telefónicos para comunicarse con diferente gente, se tiene
que el equipo puede tener más de un redirector para comunicarse a través de la Los tres fabricantes más importantes de productos de redes son:
red con servidores de red distintos.
 Microsoft.
Cada redirector maneja sólo los paquetes enviados en el lenguaje o protocolo que  Novell.
puede entender. Si conoce el destino y el recurso al que se quiere acceder, puede  Apple.
implementar el redirector apropiado y éste reenviará su petición al destino
adecuado. Cada una de estas plataformas proporciona utilidades que:

Si un cliente Windows NT necesita acceder al servidor Novell, para conseguirlo, el  Hacen posible que sus sistemas operativos se puedan comunicar con
administrador de la red carga el redirector de Microsoft, instalado en el cliente, servidores de las otras dos plataformas.
sobre Windows NT para el acceso a los servidores Novel.  Ayudan a sus servidores a reconocer clientes de las otras dos
plataformas.
lnteroperabilidad del servidor
MICROSOFT
La segunda forma de implementar la comunicación entre un cliente y un servidor es
instalar los servicios de comunicaciones en el servidor, enfoque utilizado para Microsoft ha desarrollado un redirector que reconoce redes Microsoft dentro de
incluir un Apple Macintosh en un entorno Windows NT. Microsoft suministra los los siguientes sistemas operativos de Microsoft:
Servicios para Macintosh. Este software permite a un servidor Windows NT Server
comunicarse con el cliente Apple.  Windows NT/2000
 Windows 95/98/ME.
Gracias a esta interoperabilidad, un usuario Macintosh puede seguir el  Windows para Grupos de trabajo.
procedimiento estándar de un Macintosh y visualizar los iconos propios del sistema,
como puede ser Chooser and Finder, incluso cuando el usuario está accediendo a Los redirectorios se implementan, de forma automática, durante la instalación del
los recursos de Windows NT Server. sistema operativo. Una utilidad de instalación carga los controladores requeridos y,
a continuación, edita los archivos de inicio, de forma que el redirector se active la
Opciones de fabricantes próxima vez que el usuario encienda el equipo.
El software redirector de Microsoft no sólo permite a los clientes acceder a los Clientes basados en MS-DOS.- Los fabricantes de los sistemas operativos de
recursos, sino también proporciona cada cliente Windows para Grupos de trabajo y servidor ofrecen utilidades que permiten a los clientes que utilizan MS-DOS,
Windows NT con la posibilidad de compartir sus propios recursos. acceder a los servidores de estos tres fabricantes. Todas estas utilidades pueden
residir en una máquina, de forma que el cliente con MS-DOS puede acceder a los
Microsoft en un entorno Novell.- Los productos Microsoft y Novell pueden servidores correspondientes de los tres entornos.
trabajar juntos.
Novell
 Para conectar un cliente con Windows NT Workstation a una red Novell
NetWare 3.x o 4.x se requiere NWLink y Servicio de Cliente para NetWare Los servidores Novell reconocen los siguientes clientes para los servicios de
(CSNW) o el Cliente NetWare de Novell para Windows NT. archivos e impresión. Los clientes NetWare que ejecutan MS-DOS pueden
 Para conectar un servidor Windows NT Server a una red NetWare se conectarse a:
requiere NWLink y el Servicio de Enlace para NetWare (GSNW). NWLink es
la implementación de Microsoft del protocolo de intercambio de paquetes  Servidores NetWare de Novell.
entre redes/Intercambio de paquetes secuenciados (IPX/SPX). CSNW es  Equipos con Windows NT Server.
la implementación en Microsoft de un generador de peticiones de NetWare
(terminología para el redirector en Novell). Los clientes Windows NT que ejecutan el generador de peticiones de NetWare y el
 Para conectar un cliente Windows 95 o 98 a una red NetWare se requiere redirector de Windows NT pueden conectarse a:
IPX/SPX y redes CSNW de Microsoft.
 Servidores NetWare de Novell.
El Servicio de Microsoft para los Servicios de directorios de Novell (NDS) es el  Equipos con Windows NT Server y Windows NT Workstation.
software de cliente para NetWare que incorpora soporte para Novell Network 4.x y
Novell proporciona generadores de peticiones para sistemas operativos de clientes
Servicios de Directorios 5.x. Microsoft NDS proporciona a los usuarios con entrada
incluyendo:
y exploración soporte para servicios de enlace en NetWare 3.x y NetWare 4.x como
servidores NDS NetWare 4.x y 5.x.
 MS-DOS.
 OS/2.
 Cliente NetWare para Windows NT.
Apple
INTERNET
En el entorno de Macintosh, el redirector para la conexión AppleShare se incluye
con el sistema operativo AppleTalk y proporciona la función de compartir archivos. Internet es una red de redes de millones de ordenadores en todo el mundo. Pero al
El software de cliente se incluye con cada copia del sistema operativo de Apple. contrario de lo que se piensa comúnmente, Internet no es sinónimo de World Wide
Además, se incluye un servidor de impresión de AppleShare, que gestiona las colas Web. La Web es sólo una parte de Internet, es sólo uno de los muchos servicios que
de impresión. Por tanto, tenemos que los Macintosh están equipados para formar ofrece Internet.
parte de la redes Apple.
Internet, la red de redes, suministra un foro de comunicación en el que participan
Cliente basado en MS-DOS.- El software de conexión AppleShare ofrece a los millones de personas de todos los países del mundo, en mayor o menor medida.
clientes que utilizan MS-DOS acceso a los servidores de archivos e impresión de Internet aporta o soporta una serie de instrumentos para que la gente difunda y
AppleShare. Con el software de ordenador personal LocalTalk y una tarjeta de acceda a documentos y a la información (WWW, FTP, etc.), para que los individuos y
equipo personal LocalTalk instalada en los equipos, los usuarios pueden acceder a los grupos se relacionen a través de una serie de medios de comunicación más o
los volúmenes (almacenamiento de archivos) del servidor de archivos e impresoras menos nuevos (correo electrónico, news, listas de distribución, videoconferencia,
de una red AppleTalk. La tarjeta de equipo personal LocalTalk controla el enlace chats...) o más o menos viejos (como una conversación telefónica, poner un fax,
entre la red AppleTalk y el equipo personal. El software del controlador LocalTalk etc,) y también incluye dentro de sí a los denominados medios de comunicación de
para el equipo personal implementa muchos de los protocolos de AppleTalk e masas (radio, televisión, periódicos y revistas "on line", cine, la omnipresente
interactúa con la tarjeta para enviar y recibir paquetes. publicidad, etc). ¿Se trata de un nuevo medio de comunicación? ¿Pueden utilizarse
las nociones habituales que se aplican a los medios de comunicación para definir y
Servicios para Macintosh.- A través de los Servicios para Macintosh, un servidor caracterizar la comunicación en Internet?
Windows NT puede estar disponible para los clientes Macintosh. Este producto hace
posible que los clientes de MS-DOS y Macintosh puedan compartir archivos e
impresoras. Los Servicios para Macintosh incluyen las versiones 2.0 y 2.1 de Apple
Talk Protocol, LocalTalk, Ether Talk, Token Talk y FDDITalk. Además, los Servicios
para Macintosh admiten la impresora LaserWriter versión 5.2 o posterior.
bits de información, sino que también los distintos medios de comunicación con sus
distintos sistemas, se integran en uno al converger en la red.

Javier Echeverría en Los señores del aire: Telépolis y el Tercer Entorno afirma:

"Suele decirse que Internet es un medio de comunicación, y ello es muy cierto. Sin
embargo, Internet posee otras cualidades 'mediáticas', y por ello diremos que esa
red es: un medio de comunicación, un medio de información, un medio de
En realidad, Internet no es un medio de comunicación, sino muchos medios, una red memorización, un medio de producción, un medio de comercio, un medio para el
que comprende distintos tipos y distintos sistemas de comunicación. La gente ocio y el entretenimiento y un medio de interacción".
utiliza Internet para muy distintas finalidades. Muchas de ellas están relacionadas
con diferentes y variadas categorías de comunicación, información e interacción. Efectivamente, Internet es todas esas cosas y muchas cosas más. Se puede
Algunas son nuevas y otras muy antiguas, pero estas categorías no se excluyen analizar Internet desde muchas perspectivas distintas y desde puntos de vista muy
mutuamente, ya que no sólo los usuarios pueden participar en Internet mediante variados.
una combinación de comunicación, información e interacción al mismo tiempo, sino
que también los distintos medios se entremezclan en el mismo canal. Desde el punto de vista documental, Internet es un archivo y una biblioteca
universal en la que el usuario, desde su pantalla de ordenador, tiene acceso
Javier Candeira no se cansa de repetir que Internet no es un medio, sino un canal. inmediato a la mayor fuente de información que jamás ha existido.
En su artículo La Web como memoria organizada dice: "Aprovecho cada ocasión que tengo
para puntualizarlo: Internet no es un medio, es un canal. Los distintos medios que utilizan Internet Desde el punto de la vista de la comunicación, Internet se caracteriza por ser una
como canal son la Web, el correo electrónico, el telnet e incluso la televisión y la radio". red horizontal y en gran medida descentralizada. La comunicación se puede realizar
de forma multidireccional (participar en un grupo de debate), unidireccional (leer,
En puridad, se podría afirmar que Internet no es ni un canal ni un medio, sino un
bajar archivos de la red, buscar información, etc.), bidireccional (conversar o jugar
hipersistema, un macrosistema o un metasistema de comunicación en el que los
con alguien, intercambiar archivos o correos electrónicos) e interactiva. Y se
distintos sistemas se mezclan y entretejen. La digitalidad no sólo reduce todas las
establece tanto en ámbitos públicos como en privados. Al contrario que los medios
morfologías de la información a una sola: texto, imagen y sonido se convierten en
de masas (radio, televisión, prensa, etc.) que no permiten interacciones
transversales entre los participantes, los medios en Internet sí permiten este tipo
de interacciones. El teléfono usa una comunicación uno a uno, en el ciberespacio un
individuo es, potencialmente, emisor y receptor a la vez y todos pueden comunicar
con todos en un espacio sincrónico o asíncrono, simultáneo o no concurrente.

Desde el punto de vista técnico, Internet es un gran conjunto de redes de


ordenadores interconectadas cuyo funcionamiento interno no se ajusta a ningún Metafóricamente se suele hablar de Internet como de un nuevo territorio, un nuevo
tipo de ordenador concreto, a ningún tipo de red específica, a ninguna tecnología de espacio al que se denomina ciberespacio. Javier Echeverría habla de tercer
conexión en exclusiva y a ningún medio físico privilegiado, se trata de una red entorno, un espacio más amplio que incluiría al ciberespacio y a los grandes medios
flexible y dinámica, adaptable a diferentes contextos tecnológicos. Internet es, en sí de telecomunicación e interacción electrónica y que estaría conformado por las 7
misma, un universo tecnológico, una hipertecnología o una miríada de tecnologías tecnologías siguientes: teléfono, radio, televisión, dinero electrónico, redes
que confluyen: telefonía, electrónica, microprocesadores, cables, satélites, fibra telemáticas, hipertexto y multimedia. Igualmente otros autores como Negroponte
óptica, hipertexto, multimedia, televisión, escritura, dibujo, fotografía, vídeo, hablan de "mundo digital", Rodríguez de las Heras de "espacio digital", Postman de
imágenes en 3D, realidad virtual, etc. "Technopoly", DYAZ de "mundo artificial", Rheingold de "comunidad virtual", Castells
de la "sociedad red", etc. Pero sin duda, el término más consolidado y utilizado es el
Desde el punto de vista sociológico, Internet es un fenómeno económico, social y de ciberespacio.
cultural, que tiene repercusiones sobre las personas y las sociedades y sobre la
forma en que éstas se comunican, interrelacionan, producen, comercian, trabajan, La voz ciberespacio fue acuñada por William Gibson y definida en su novela de
se divierten y se organizan. Se puede afirmar, incluso, que repercute sobre la ciencia ficción publicada en 1984 Neuromante (Neuromancer). "Todo el mundo que
conozco y que trabaja asiduamente con ordenadores, cree firmemente que tras la pantalla existe un
propia identidad de las personas y de los grupos sociales, puesto que modifica la
que
mundo invisible a nuestros ojos".Según Gibson, se trata de una "alucinación consensual"
forma en que se ven a sí mismos, operan y se representan los individuos y las
consiste en desarrollar la creencia de que hay una especie de espacio/sitio/lugar
sociedades.
real tras la pantalla del ordenador, un lugar que no podemos ver pero que sabemos
que está allí. El ciberespacio sería, pues, el espacio virtual o no físico que existe al
otro lado del ordenador cuando nos conectamos a la red y que experimentamos
como real, aunque se trate de un espacio figurado. Se trata de un concepto mental
que proyectamos y que es compartido por muchos usuarios de Internet. La lugar; un foro de encuentro para el intercambio personal, íntimo, público, masivo y
metáfora se alimenta con la idea de que el ciberespacio es un océano por donde se comercial; y un nuevo espacio para la interacción humana (finanzas, comercio,
navega, un lugar misterioso, desconocido y proceloso, que nos llama para ser educación, investigación, asociaciones y ONGs, empresas, comunidades globales o
explorado. Un lugar a medio camino entre fluido y tierra, entre el espacio real y locales, etc.) . En suma, un mundo paralelo al mundo real, una imagen especular al
virtual, entre el tiempo actual y la velocidad acelerada de las redes. otro lado de las pantallas o una nueva dimensión de éste que se constituye como el
reino de la comunicación, la información, el entretenimiento y el ocio, el comercio,
Benedikt define el ciberespacio como "una red global soportada por ordenador, a la que el arte, la cultura, la educación, la investigación, la cooperación, la competencia,
se accede por ordenador y generada por ordenador, multidimensional, artificial o realidad etc.
'virtual'; Barnes lo describe como "un territorio de información digital" y "un reino
hiperdimensional en el que entramos por la tecnología", y, aunque otros autores Sin embargo, Internet es un nuevo espacio social que no sustituye a éste, sino que
relacionan el término ciberespacio con los mundos virtuales de experiencia se superpone a los que ya existían. Internet no configura una nueva sociedad, sino
sensorial, la idea del ciberespacio como espacio social de interacción y que forma parte de ella, aunque se produzca y reproduzca al otro lado de las redes.
comunicación ha ido cobrando forma tanto entre los estudiosos de los medios de Esos dos espacios, el de fuera y el de dentro de las redes, están indisolublemente
comunicación como entre los sociólogos, psicólogos, educadores y la mayor parte entrelazados y se transforman mutuamente. Los interactores somos las mismas
de los internautas. personas y los mismos agentes sociales a uno y otro lado de las pantallas, de las
redes y las parafernalias tecnológicas. El nacimiento de la galaxia Internet ha dado
Para Manuel Castells, "Todos los mensajes de cualquier clase, se privatizan en el origen a numerosos estudios y publicaciones sobre las repercusiones de este
ciberespacio, pues éste se ha hecho ya tan abarcante, diversificado y maleable que
nuevo espacio social de interacción y sus implicaciones sobre el arte, la cultura, la
absorbe en un mismo texto multimedia la totalidad de la experiencia humana, pasada,
ciencia, la ecología, la economía, los medios de información y comunicación, el
presente y futura".
mundo laboral, la empresa, la política y todas y cada una de las actividades
El ciberespacio es pues, un sistema de sistemas; un medio de conexión de cosas y humanas. No vamos a analizar aquí dichos aspectos y nos remitiremos a la
personas; una convergencia de productos humanos (materiales y espirituales); un bibliografía, pero sí decir que cualquier análisis para ser mínimamente riguroso y
vasto territorio donde concurren máquinas, individuos y grupos sociales, y donde afrontar el tema con profundidad, debería huir tanto de la estulticia utópica
se almacenan, intercambian y confluyen ideas y obras, datos, libros, periódicos, tecnófila, como de la tecnofobia paranoica.
cartas, imágenes, programas de ordenador, vídeos y música de cualquier tiempo y
interpersonal, o para la comunicación y el debate en grupo. Ejemplos de
comunicación de este tipo son el correo electrónico, las news, las listas de
distribución, etc.

Interacción: La gente puede usar Internet para aprender en un entorno de


colaboración, para investigar de forma cooperativa, para intercambiar archivos,
para jugar (se pueden jugar en línea partidas de Doom, Quake, ajedrez, apostar en
un casino, etc. y también existen sociedades de jugadores y torneos en línea a
escala mundial), para participar en asociaciones o grupos sociales, para comprar,
hacer negocios o invertir en bolsa, para ligar o practicar sexo virtual, o
simplemente para contactar y charlar dentro de grupos de afinidad. Hasta se puede
convocar y asistir a una manifestación virtual. Los espacios de interacción se usan
a menudo para actividades sociales y para la interacción grupal. Ejemplos de
espacios de interacción son los MU*s (MUDs y MOODs), los chats, las redes P2P,
etc.
Las publicaciones de toda índole en torno a Internet han proliferado
enormemente desde los primeros años de la red y continúan a un ritmo creciente Información: Internet se puede usar para difundir, buscar y recuperar
información. La distribución de información de todo tipo de temas y materias cubre
¿Qué es pues lo que ofrece Internet para que haya supuesto un revulsivo de tal
un amplio rango de actividades y conocimientos humanos. Ejemplos de servicios de
magnitud? Nos limitaremos a analizar los servicios concretos que ofrece la red y
información dentro de Internet son la World Wide Web, RSS, los blogs, FTP, y los ya
que son los que mueven a la gente a usar Internet. En general, se puede hablar de 3
casi abandonados sistemas Gopher y telnet.
funciones principales:
Todos estos servicios tienen un espacio distinto en la red, un espacio que unas
Comunicación: La gente usa Internet para comunicarse en un escenario de uno a
veces se solapa con otros espacios y que otras veces permanece completamente
uno, de uno a varios o de varios a varios. La comunicación puede usarse para
separado. El ciberespacio es, pues, un conjunto de espacios en los cuales se
actividades didácticas y de investigación, para la comunicación íntima e
desarrollan diferentes actividades y diferentes servicios. Internet abarca una
ingente y diversa cantidad de actividad, por lo cual es muy difícil estudiar y analizar Asimismo sobre Internet, un espacio no es solamente un tipo de cliente (por
la red ya que comprende un enorme número de sistemas de comunicación, clases, ejemplo, Mosaic como un ejemplo de cliente Web), ni la colección de todos los
medios, contenidos, relaciones, objetos y procesos muy distintos. servidores de un tipo, sino el conjunto entero de clientes y servidores con el
contenido sobre aquellos servidores potencialmente observables por aquellos
clientes".

Podemos diferenciar entre las clases de medios de comunicación en Internet y los


espacios de los medios de comunicación en Internet. Un espacio de Internet incluye
a todos los servidores, clientes correspondientes, y el contenido disponible sobre
estos servidores que pueden ser entregados a los usuarios. Por el contrario, una
clase de medios de comunicación podría incluir los subconjuntos de uno o más
espacios de medios de comunicación, o hasta varios espacios de medios de
comunicación. Por ejemplo, una clase de medios de comunicación definida por todo
el contenido accesible por un cliente de Web incluye no sólo el espacio de Web, sino
también los espacios definidos por FTP o Usenet.
Como afirma John December en Units of Analysis for Internet Communication
refiriéndose a los distintos espacios de Internet como el correo electrónico, los Para analizar Internet debemos no sólo estudiar sus servicios, sino también hacer
MU*s, la Web, chats, etc.: un repaso por su historia y la cronología de los principales hitos de su desarrollo,
así como analizar los aspectos tecnológicos (protocolos, direcciones IP, URL,
"Esta definición de un espacio corresponde a las descripciones informales de nombres de dominio, etc.) que hacen posible el funcionamiento de la red de redes,
otros medios de comunicación. Familiarmente, nosotros podríamos decir que la junto con los organismos que se encargan de normalizar los aspectos técnicos y
televisión es un medio, y dar a entender que la televisión no es solamente una los estándares para que Internet sea hoy una realidad accesible a todos.
colección de televisores (clientes), ni todas las estaciones de difusión de
televisión (los servidores). En cambio, nuestro concepto de televisión como un
medio abarca todos los televisores, todos los sistemas de difusión (el cable y el
satélite), y toda la programación y la producción en combinación con la PROGRAMACION EN C++
observación de los espectadores de ese contenido por los televisores (clientes).
GENERALIDADES usando dos coordenadas físicas. Por una parte la cabeza de lectura/escritura se
puede mover en el sentido del radio del disco, y por otra el disco gira
Muy a menudo necesitamos almacenar cierta cantidad de datos de forma más o permanentemente, con lo que cualquier punto del disco pasa por la cabeza en un
menos permanente. La memoria del ordenador es volátil, y lo que es peor, escaso y tiempo relativamente corto. Esto no pasa con las cintas, donde sólo hay una
caro. De modo que cuando tenemos que guardar nuestros datos durante cierto coordenada física.
tiempo tenemos que recurrir a sistemas de almacenamiento más económicos,
aunque sea a costa de que sean más lentos. Con la invención y proliferación de los discos se desarrollaron los ficheros de
acceso aleatorio, que permiten acceder a cualquier dato almacenado en un fichero
Durante la historia de los ordenadores se han usado varios métodos distintos para en relativamente poco tiempo.
el almacenamiento de datos. Al principio se recurrió a cintas de papel perforadas,
después a tarjetas perforadas. Más adelante se pasó al soporte magnético, Actualmente, los discos duros tienen una enorme capacidad y son muy rápidos,
empezando por grandes rollos de cintas magnéticas abiertas. aunque aún siguen siendo lentos, en comparación con las memorias RAM. El caso de
los CD es algo intermedio. En realidad son secuenciales en cuanto al modo de
Hasta aquí, todos los sistemas de almacenamiento externo eran secuenciales, es guardar los datos, cada disco sólo tiene una pista de datos grabada en espiral. Sin
decir, no permitían acceder al punto exacto donde se guardaba la información sin embargo, este sistema, combinado con algo de memoria RAM, proporciona un
antes haber partido desde el principio y sin haber leído toda la información, hasta el acceso muy próximo al de los discos duros.
punto donde se encontrase la que estábamos buscando.
En cuanto al tipo de acceso, en C y C++ podemos clasificar los archivos según
Con las cintas magnéticas empezó lo que con el tiempo sería el acceso aleatorio a varias categorías:
los datos. Se podía reservar parte de la cinta para guardar cierta información
sobre la situación de los datos, y añadir ciertas marcas que hicieran más sencillo Dependiendo de la dirección del flujo de datos:
localizarla.
 De entrada: los datos se leen por el programa desde el
Pero no fue hasta la aparición de los discos magnéticos cuando ésta técnica llegó a archivo.
su sentido más amplio. En los discos es más sencillo acceder a cualquier punto de  De salida: los datos se escriben por el programa hacia el
la superficie en poco tiempo, ya que se accede al punto de lectura y escritura archivo.
 De entrada/salida: los datos pueden se escritos o leídos.  Archivos de acceso aleatorio: Permiten acceder a
cualquier punto de ellos para realizar lecturas y/o
1. Dependiendo del tipo de valores permitidos a cada byte: escrituras.

 De texto: Sólo están permitidos ciertos rangos de valores 3. Según la longitud de registro:
para cada byte. Algunos bytes tienen un significado
especial, por ejemplo, el valor hexadecimal 0x1A marca el fin  Longitud variable: En realidad, en este tipo de archivos
de fichero. Si abrimos un archivo en modo texto, no será no tiene sentido hablar de longitud de registro, podemos
posible leer más allá de un byte con ese valor, aunque el considerar cada byte como un registro. También puede
fichero sea más largo. suceder que nuestra aplicación conozca el tipo y longitud
 Binarios: Están permitidos todos lo valores para cada byte. de cada dato almacenado en el archivo, y lea o escriba
En estos archivos el final del fichero se detecta de otro los bytes necesarios en cada ocasión. Otro caso es
modo, dependiendo del soporte y del sistema operativo. La cuando se usa una marca para el final de registro, por
mayoría de las veces se hace guardando la longitud del ejemplo, en ficheros de texto se usa el carácter de
fichero. retorno de línea para eso. En estos casos cada registro
 Cuando queramos almacenar valores enteros, o en coma es de longitud diferente.
flotante, o imágenes, etc, deberemos usar este tipo de  Longitud constante: En estos archivos los datos se
archivos. almacenan en forma de registro de tamaño constante. En
C usaremos estructuras para definir los registros. C
2. Según el tipo de acceso: dispone de funciones de biblioteca adecuadas para
manejar este tipo de ficheros.
 Archivos secuenciales: Imitan el modo de acceso de los  Mixtos: En ocasiones pueden crearse archivos que
antiguos ficheros secuenciales almacenados en cintas combinen los dos tipos de registros, por ejemplo, BASE
magnéticas y, usa registros de longitud constante, pero añade un
registro especial de cabecera al principio para definir,
entre otras cosas, el tamaño y el tipo de los registros.
Es posible crear archivos combinando cada una de estas categorías, por ejemplo:  a+: añadir, lectura y escritura, el cursor se sitúa al final del fichero. Si el
archivos secuenciales de texto de longitud de registro variable, que son los típicos fichero no existe, se crea.
archivos de texto. Archivos de acceso aleatorio binarios de longitud de registro
constante, normalmente usados en bases de datos. Y también cualquier En cuanto a los valores permitidos para los bytes, se puede añadir otro carácter a
combinación menos corriente, como archivos secuenciales binarios de longitud de la cadena de modo:
registro constante, etc.
 t: modo texto. Normalmente es el modo por defecto. Se suele omitir.
En cuanto a cómo se definen estas propiedades, hay dos casos. Si son binarios o de  b: modo binario.
texto o de entrada, salida o entrada/salida, se define al abrir el fichero, mediante la
función fopen en C o mediante el método open de fstream en C++. En ciertos sistemas operativos no existe esta distinción, y todos los ficheros son
binarios.
La función open usa dos parámetros. El primero es el nombre del fichero que
contiene el archivo. El segundo es en modo que es una cadena que indica el modo en En C++ es algo diferente, el constructor de las clases ifstream, ofstream y fstream
que se abrirá el archivo: lectura o escritura, y el tipo de datos que contiene: de admite los parámetros para abrir el fichero directamente, y también disponemos
texto o binarios. del método open, para poder crear el stream sin asociarlo con un fichero concreto
y hacer esa asociación más tarde.
En C, los ficheros admiten seis modos en cuanto a la dirección del flujo de datos:
BUFFERS
 r: sólo lectura. El fichero debe existir.
 w: se abre para escritura, se crea un fichero nuevo o se sobrescribe si ya Ya hemos comentado que el acceso a los ficheros es lento, y lo es mucho,
existe. comparado con el acceso a memoria. Es por eso que, generalmente, no se accede a
 a: añadir, se abre para escritura, el cursor se sitúa al final del fichero. Si ficheros externos cada vez que se realiza una operación de lectura o escritura.
el fichero no existe, se crea.
En su lugar, se mantiene una copia de una parte del fichero en la memoria, se
 r+: lectura y escritura. El fichero debe existir.
realizan las operaciones de lectura/escritura que sea posible dentro de esa zona, y
 w+: lectura y escritura, se crea un fichero nuevo o se sobrescribe si ya
cuando sea necesario, porque alguna operación acceda a posiciones fuera de la
existe.
zona almacenada, se vuelca esa zona al fichero y se lee otro tramo del fichero en
memoria. A estas zonas se le llaman buffers, y mejoran sensiblemente el acceso a que las modificaciones realizadas por un usuario queden anuladas por las
los ficheros en lo que respecta a la velocidad. que ha hecho el otro.

Cuanto más grande es un buffer, mejor será el tiempo de acceso al fichero. En el El primer caso puede minimizarse, aunque no evitarse siempre, si se guarda el
caso ideal, el tamaño del buffer es mayor o igual que el del fichero, y todas las contenido del buffer antes de realizar operaciones potencialmente peligrosas.
operaciones de lectura y escritura del fichero se realizan en memoria, de modo que Aunque nada puede evitar la corrupción de ficheros en caso de avería.
sólo es necesario hacer una lectura del fichero y, si se ha modificado, una
escritura. El segundo caso requiere protecciones por parte del sistema operativo o de las
aplicaciones que accedan a ficheros compartidos. Estas protecciones van desde las
Pero no todo son ventajas. Cuando se trabaja con buffers, las actualizaciones más simples, como la imposibilidad de que un segundo usuario acceda a un fichero
físicas del fichero están diferidas, en relación a las actualizaciones hechas por el abierto, hasta métodos más sutiles, como bloqueo de ficheros, o partes de ficheros.
programa, de modo que el fichero no siempre tiene una información actualizada. Estos bloqueos asignan una zona del fichero al primer usuario que lo solicite, e
impiden a otros usuarios acceder a la misma zona, aunque no a otras.
Esto plantea dos problemas:
Cómo funcionan los discos
 Si la aplicación termina de forma inesperada, por un error o por una
avería, el contenido del buffer modificado no se almacenará en el fichero, Para empezar, los discos distribuyen los datos en dos o tres dimensiones. Las
y su estructura puede quedar corrupta y los datos inservibles. cabezas de lectura/escritura se mueven a lo largo del radio del disco, a distancias
 Cuando un fichero deba ser accedido por varios usuarios de forma preestablecidas. Cada una de esas distancias define una pista.
simultánea, se pueden presentar problemas de concurrencia. Por ejemplo,
un usuario lee una parte del fichero en su buffer, y modifica su contenido. Si la cabeza no se mueve, permanece siempre sobre la misma pista. Dependiendo
Mientras tanto, otro usuario, desde otra máquina, accede al mismo de la densidad del soporte magnético, las pistas podrán estar más o menos
fichero, y a la misma zona, pero el contenido no está actualizado con las próximas entre sí, y por lo tanto, en la misma superficie se podrán almacenar más
modificaciones realizadas por el primer usuario. El peligro es mayor si los o menos pistas.
dos están haciendo modificaciones en el mismo fichero, ya que es posible
A su vez, cada pista está dividida en partes más pequeñas, llamadas sectores. Cada Para que sea posible localizar la información en un disco hay que almacenar ciertas
sector puede almacenar un número determinado de bytes, y de nuevo, dependiendo marcas en él. Al conjunto de esas marcas se le llama formato y a la acción de hacer
de la densidad del soporte, cada pista se podrá dividir en más o menos sectores. esas marcas, se le llama formatear el disco.

Por último, en el caso de los discos duros, cada disco está compuesto en realidad En los discos magnéticos, las marcas se almacenan del mismo modo que los datos:
por varios discos llamados platos, cada plato tiene dos caras, y en cada cara se Mediante campos magnéticos creados por la cabeza de lectura/escritura. En cada
coloca una cabeza de lectura/escritura. pista se almacenan ciertas marcas que indican donde empieza cada sector y que
identifican cada una de las pistas y sectores. Esto, por cierto, disminuye el espacio
De modo que para acceder a un dato será necesario calcular en qué plato, pista y disponible para los datos. Antiguamente se distinguía entre la capacidad bruta del
sector está almacenado, mover la cabeza a la pista adecuada y esperar a que el disco, sin descontar el espacio destinado al formato, y la capacidad útil, que es la
sector pase por debajo de la cabeza correspondiente al plato indicado. que nos interesa en realidad.

El tiempo de acceso depende de la capacidad de la cabeza para localizar la pista, Otros soportes, como algunos disquetes primitivos, tenían orificios en la superficie
del número de sectores por pista (cuantos más haya, mayor será el promedio de del disco que podían ser detectados ópticamente, aunque esto no evitaba que el
tiempo necesario para que un sector pase bajo la cabeza), y de la velocidad de giro disco tuviese que tener un formato.
del disco.
En los discos magneto-ópticos las escrituras se hacen de forma magnética, sobre
Parece sencillo localizar una pista, pero no tanto localizar un sector. A fin de un disco con dos capas calentado mediante un láser de alta densidad, mientras que
cuentas, el disco puede empezar a girar en cualquier posición, y no es posible las lecturas se hacen de forma óptica, mediante un láser de baja densidad. De modo
distinguir donde estaban los sectores la última vez que el disco estuvo girando. que estos discos permiten mayor capacidad de almacenamiento, y permiten hacer
Además, en los discos duros actuales se aprovecha mejor el espacio haciendo que lecturas muchos más rápidas, aunque la escritura es más lenta.
las pistas exteriores, con mayor circunferencia, se dividan en más sectores que las
interiores. Esto permite aprovechar mejor la densidad del disco, que por supuesto, En los discos duros la estructura es más complicada, ya que existe más de un
es uniforme. disco, y las cabezas se sitúan en ambas caras de cada disco. Sin embargo, todas
las cabezas se mueven de forma simultánea, aunque las lecturas y escrituras sólo
se hacen en una superficie a la vez. Esto hace que el acceso sea más rápido Por supuesto, todo lo explicado anteriormente es muy simple cuando sólo hacemos
cuantos más platos existan. lecturas o cuando las escrituras no implican que el fichero deba ser más largos o
más cortos.
La unidad mínima que se puede leer o escribir en un disco es un sector. El tamaño
del sector es variable, generalmente son de 512 bytes, pero pueden ser diferentes. Físicamente, los ficheros sólo pueden crecer por el extremo final. Esto es evidente
El sistema operativo no trabaja directamente con sectores, sino con clusters. Cada en el caso de ficheros secuenciales, donde cualquier escritura que no se realice al
cluster tiene un número entero de sectores. final implica la sobrescrita de datos previos.

Los clusters son una unidad lógica, no física. En principio se crearon cuando la Las limitaciones físicas de los soportes de datos explican por qué no se pueden
capacidad de los discos creció hasta el punto que con los protocolos de 16 bits no insertar datos en el interior de un fichero. En teoría se podría insertar un bloque de
era posible direccionar todos los sectores. Agrupando sectores seguía siendo datos cuyo tamaño sea múltiplo del tamaño del cluster. De ese modo se podrían
posible aprovechar toda la capacidad del disco. Esto volvió a suceder con los insertar nuevos clusters dentro del fichero. Pero esto es un caso muy especial, y
protocolos de 32 bits. nunca se hace.

Generalmente es mejor que el tamaño de los clusters sea pequeño, ya que de ese Lo que se hace en realidad es mover el resto del fichero hacia adelante para dejar
modo se aprovecha mejor el espacio de almacenamiento del disco. Si por ejemplo, espacio para la nueva información, o en caso de borrar datos, mover hacia atrás,
en un disco de 100KB almacenamos sólo ficheros de 1KB, en teoría podríamos de modo que se sobrescriban los datos eliminados. De modo que si hay que añadir
almacenar 100 ficheros. Pero si el tamaño del cluster es de 2KB, el número máximo un byte en la primera posición de un fichero, esto implica que se ha de copiar todo
de ficheros será 50, y si el tamaño del cluster es de 16Kb, sólo podremos el fichero.
almacenar 6. De hecho, en un disco con clusters de 16KB, un fichero de un byte
ocupará el mismo espacio que uno de 16KB. TIPOS, FUNCIONES Y CLASES USADOS FRECUENTEMENTE CON FICHEROS

Ficheros que cambian de tamaño Funciones y tipos C estándar:

Tipo FILE:
C define la estructura de datos FILE en el fichero de cabecera stdio.h para el o w+: lectura y escritura, se crea un fichero nuevo o se
manejo de ficheros. Nosotros siempre usaremos punteros a estas estructuras. sobrescribe si ya existe.
o a+: añadir, lectura y escritura, el cursor se sitúa al final del
La definición de ésta estructura depende del compilador, pero en general fichero. Si el fichero no existe, se crea.
mantienen un campo con la posición actual de lectura/escritura, un buffer para o t: tipo texto, si no se especifica "t" ni "b", se asume por defecto
mejorar las prestaciones de acceso al fichero y algunos campos para uso interno. que es "t"
o b: tipo binario.
Función fopen:
Función fclose:
Sintaxis:
Sintaxis:
FILE *fopen(char *nombre, char *modo);
int fclose(FILE *fichero);
Esta función sirve para abrir y crear ficheros en disco. El valor de retorno es un
puntero a una estructura FILE. Los parámetros de entrada son: Es importante cerrar los ficheros abiertos antes de abandonar la aplicación. Esta
función sirve para eso. Cerrar un fichero almacena los datos que aún están en el
1. Nombre: Una cadena que contiene un nombre de fichero válido, esto buffer de memoria, y actualiza algunos datos de la cabecera del fichero que
depende del sistema operativo que estemos usando. El nombre puede mantiene el sistema operativo. Además permite que otros programas puedan abrir
incluir el camino completo. el fichero para su uso. Muy a menudo, los ficheros no pueden ser compartidos por
2. Modo: Especifica en tipo de fichero que se abrirá o se creará y el tipo de varios programas.
datos que puede contener, de texto o binarios:
o r: sólo lectura. El fichero debe existir. Un valor de retorno cero indica que el fichero ha sido correctamente cerrado, si ha
o w: se abre para escritura, se crea un fichero nuevo o se habido algún error, el valor de retorno es la constante EOF. El parámetro es un
sobrescribe si ya existe. puntero a la estructura FILE del fichero que queremos cerrar.
o a: añadir, se abre para escritura, el cursor se sitúa al final del
fichero. Si el fichero no existe, se crea. Función fgetc:
o r+: lectura y escritura. El fichero debe existir.
Sintaxis: int feof(FILE *fichero);

int fgetc(FILE *fichero); Esta función sirve para comprobar si se ha alcanzado el final del fichero. Muy
frecuentemente deberemos trabajar con todos los valores almacenados en un
Esta función lee un carácter desde un fichero. archivo de forma secuencial, la forma que suelen tener los bucles para leer todos
los datos de un archivo es permanecer leyendo mientras no se detecte el fin de
El valor de retorno es el carácter leído como un unsigned char convertido a int. Si fichero. Esta función suele usarse como prueba para verificar si se ha alcanzado o
no hay ningún carácter disponible, el valor de retorno es EOF. El parámetro es un no ese punto.
puntero a una estructura FILE del fichero del que se hará la lectura.
El valor de retorno es distinto de cero sólo si no se ha alcanzado el fin de fichero. El
Función fputc: parámetro es un puntero a la estructura FILE del fichero que queremos verificar.

Sintaxis: Función rewind:

int fputc(int caracter, FILE *fichero); Sintaxis:

Esta función escribe un carácter a un fichero. void rewind(FILE *fichero)

El valor de retorno es el carácter escrito, si la operación fue completada con éxito, Es una función heredada de los tiempos de las cintas magnéticas. Literalmente
en caso contrario será EOF. Los parámetros de entrada son el carácter a escribir, significa "rebobinar", y hace referencia a que para volver al principio de un archivo
convertido a int y un puntero a una estructura FILE del fichero en el que se hará la almacenado en cinta, había que rebobinarla. Eso es lo que hace ésta función, sitúa
escritura. el cursor de lectura/escritura al principio del archivo.

Función feof: El parámetro es un puntero a la estructura FILE del fichero que queremos
rebobinar.
Sintaxis:
Ejemplos:
// ejemplo1.c: Muestra un fichero dos veces. El valor de retorno es un puntero a la cadena leída, si se leyó con éxito, y es NULL si
#include <stdio.h> se detecta el final del fichero o si hay un error. Los parámetros son: la cadena a
leer, el número de caracteres máximo a leer y un puntero a una estructura FILE del
int main() fichero del que se leerá.
{
FILE *fichero; Función fputs:

fichero = fopen("ejemplo1.c", "r"); Sintaxis:


while(!feof(fichero)) fputc(fgetc(fichero), stdout);
rewind(fichero); int fputs(const char *cadena, FILE *stream);
while(!feof(fichero)) fputc(fgetc(fichero), stdout);
fclose(fichero); La función fputs escribe una cadena en un fichero. No se añade el carácter de
getchar(); retorno de línea ni el carácter nulo final.
return 0;
} El valor de retorno es un número no negativo o EOF en caso de error. Los
parámetros de entrada son la cadena a escribir y un puntero a la estructura FILE
Función fgets:
del fichero donde se realizará la escritura.
Sintaxis:
Función fread:
char *fgets(char *cadena, int n, FILE *fichero);
Sintaxis:
Esta función está diseñada para leer cadenas de caracteres. Leerá hasta n-1
size_t fread(void *puntero, size_t tamaño, size_t nregistros, FILE *fichero);
caracteres o hasta que lea un retorno de línea. En este último caso, el carácter de
retorno de línea también es leído. Esta función está pensada para trabajar con registros de longitud constante. Es
capaz de leer desde un fichero uno o varios registros de la misma longitud y a
El parámetro n nos permite limitar la lectura para evitar derbordar el espacio
disponible en la cadena.
partir de una dirección de memoria determinada. El usuario es responsable de // Uso: copia <fichero_origen> <fichero_destino>
asegurarse de que hay espacio suficiente para contener la información leída.
#include <stdio.h>
El valor de retorno es el número de registros leídos, no el número de bytes. Los
parámetros son: un puntero a la zona de memoria donde se almacenarán los datos int main(int argc, char **argv) {
leídos, el tamaño de cada registro, el número de registros a leer y un puntero a la FILE *fe, *fs;
unsigned char buffer[2048]; // Buffer de 2 Kbytes
estructura FILE del fichero del que se hará la lectura.
int bytesLeidos;
Función fwrite:
if(argc != 3) {
printf("Usar: copia <fichero_origen> <fichero_destino>\n");
Sintaxis:
return 1;
size_t fwrite(void *puntero, size_t tamaño, size_t nregistros, FILE *fichero); }

Esta función también está pensada para trabajar con registros de longitud // Abrir el fichero de entrada en lectura y binario
fe = fopen(argv[1], "rb");
constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o
if(!fe) {
varios registros de la misma longitud almacenados a partir de una dirección de
printf("El fichero %s no existe o no puede ser abierto.\n", argv[1]);
memoria determinada.
return 1;
}
El valor de retorno es el número de registros escritos, no el número de bytes.
// Crear o sobreescribir el fichero de salida en binario
Los parámetros son: un puntero a la zona de memoria donde se almacenarán los fs = fopen(argv[2], "wb");
datos leídos, el tamaño de cada registro, el número de registros a leer y un puntero if(!fs) {
a la estructura FILE del fichero del que se hará la lectura. printf("El fichero %s no puede ser creado.\n", argv[2]);
fclose(fe);
Ejemplo: return 1;
}
// copia.c: Copia de ficheros // Bucle de copia:
while((bytesLeidos = fread(buffer, 1, 2048, fe))) Sintaxis:
fwrite(buffer, 1, bytesLeidos, fs);
// Cerrar ficheros: int fflush(FILE *fichero);
fclose(fe);
fclose(fs); Esta función fuerza la salida de los datos acumulados en el buffer de salida del
return 0; fichero. Para mejorar las prestaciones del manejo de ficheros se utilizan buffers,
} almacenes temporales de datos en memoria, las operaciones de salida se hacen a
través del buffer, y sólo cuando el buffer se llena se realiza la escritura en el disco
Función fprintf: y se vacía el buffer. En ocasiones nos hace falta vaciar ese buffer de un modo
manual, para eso sirve ésta función.
Sintaxis:
El valor de retorno es cero si la función se ejecutó con éxito, y EOF si hubo algún
int fprintf(FILE *fichero, const char *formato, ...);
error. El parámetro de entrada es un puntero a la estructura FILE del fichero del
La función fprintf funciona igual que printf en cuanto a parámetros, pero la salida que se quiere vaciar el buffer. Si es NULL se hará el vaciado de todos los ficheros
se dirige a un fichero en lugar de a la pantalla. abiertos.

Función fscanf: Funciones C específicas para ficheros de acceso aleatorio

Sintaxis: Función fseek:

int fscanf(FILE *fichero, const char *formato, ...); Sintaxis:

La función fscanf funciona igual que scanf en cuanto a parámetros, pero la entrada int fseek(FILE *fichero, long int desplazamiento, int origen);
se toma de un fichero en lugar del teclado.
Esta función sirve para situar el cursor del fichero para leer o escribir en el lugar
Función fflush: deseado.
El valor de retorno es cero si la función tuvo éxito, y un valor distinto de cero si El parámetro de entrada es un puntero a una estructura FILE del fichero del que
hubo algún error. queremos leer la posición del cursor de lectura/escritura.

Los parámetros de entrada son: un puntero a una estructura FILE del fichero en el CLASES PARA MANEJAR FICHEROS EN C++
que queremos cambiar el cursor de lectura/escritura, el valor del desplazamiento
y el punto de origen desde el que se calculará el desplazamiento. Existen tres clases para manejar ficheros: ifstream, ofstream y fstream. La
primera está orientada a ficheros de entrada, la segunda a ficheros de salida, y la
El parámetro origen puede tener tres posibles valores: tercera puede manejar cualquiera de los dos tipos o ficheros de entrada y salida.

1. SEEK_SET el desplazamiento se cuenta desde el principio del fichero. El Clase ifstream:


primer byte del fichero tiene un desplazamiento cero.
2. SEEK_CUR el desplazamiento se cuenta desde la posición actual del El constructor está sobrecargado para poder crear streams de varias maneras:
cursor.
3. SEEK_END el desplazamiento se cuenta desde el final del fichero. ifstream();
ifstream(const char *name, int mode = ios::in,
int = filebuf::openprot);

El primero sólo crea un stream de entrada pero no lo asocia a ningún fichero. El


Función ftell:
segundo lo crea, lo asocia al fichero con el nombre "name" y lo abre.
Sintaxis:
Los parámetros son: el nombre del fichero, el modo, que para ifstream es ios::in por
long int ftell(FILE *fichero); defecto. El tercer parámetro se refiere al buffer, y no nos preocupa de momento.

La función ftell sirve para averiguar la posición actual del cursor de Clase ofstream:
lectura/excritura de un fichero.
Lo mismo pasa con ofstream, salvo que los valores por defecto de los parámetros
El valor de retorno será esa posición, o -1 si hay algún error. son diferentes:
ofstream();  out: modo de salida.
ofstream(const char *name, int mode = ios::out,  ate: abre el fichero y sitúa el cursor al final.
int = filebuf::openprot);  app: modo append, parecido al anterior, pero las operaciones de escritura
siempre se hacen al final del fichero.
Clase fstream:  trunc: si se aplica a ficheros de salida, se creará el fichero si no existe
previamente, o se truncará con un tamaño de 0 bytes, si existe.
fstream();
 nocreate: impide crear un fichero si no existe, en ese caso, la función
fstream(const char *name, int mode = ios::in,
int = filebuf::openprot); falla.
 noreplace: lo ignoro.
Método open:  binary: abre el fichero en modo binario.

Todas estas clases disponen además del método "open", para abrir el fichero a lo Los tres últimos modos probablemente no son estándar, y es posible que no existan
largo de la ejecución del programa. en muchos compiladores.

void open(const char *name, int mode, Método close:


int prot=filebuf::openprot);
void close();
"name" es el nombre del fichero, mode es el modo en que se abrirá, puede ser uno
o una combinación del tipo enumerado open_mode, de la clase "ios": Sencillamente, cierra el fichero asociado a un stream.

enum open_mode { in, out, ate, app, trunc, nocreate, Operador >>:
noreplace, binary };
Igual que sucede con el stream estándar cout, el operador de flujo de salida >> se
Cada uno de los valores se pueden combinar usando el operador de bits OR (|), y puede usar con streams de salida cuando trabajemos con texto.
significan lo siguiente:
Operador <<:
 in: modo de entrada.
Del mismo modo, al igual que sucede con el stream estándar cin, el operador de Método de entrada getline:
flujo de entrada << se puede usar con streams de entrada cuando trabajemos con
texto. istream& getline(char*, int, char = '\n');

Método de salida put: Extrae caracteres hasta que se encuentra el delimitador y los coloca en el buffer,
elimina el delimitador del stream de entrada y no lo añade al buffer.
ostream& put(char ch);
Método eof:
Sirve para cualquier stream de salida, e inserta un carácter en el stream.
int eof();
Método de entrada get:
Verifica si se ha alcanzado el final del fichero, devuelve un valor nulo si no es así.
int get();
istream& get(char*, int len, char = '\n'); Método clear:
istream& get(char&);
istream& get(streambuf&, char = '\n'); void clear(iostate state=0);

La primera forma no se recomienda y se considera obsoleta, lee un carácter desde Cada vez que se produzca una condición de error en un stream es necesario
el stream de entrada. eliminarla, ya que en caso contrario ninguna operación que se realice sobre él
tendrá existo. Por ejemplo, si llegamos hasta el final de fichero, el stream quedará
La segunda lee caracteres y los almacena en el buffer indicado en el primer en estado "eof" hasta que se elimine explícitamente ese estado. Eso se hace
parámetro hasta que se leen "len" caracteres o hasta que se encuentra el carácter mediante el método "clear", sin parámetros dejará el estado en 0, es decir, sin
indicado en el tercer parámetro, que por defecto es el retorno de línea. errores.

La tercera forma extrae un único carácter en la referencia a char proporcionada. Los estados posibles se definen en un enumerado:

La cuarta no nos interesa de momento. enum io_state ;


 goodbit: indica que el estado es correcto. // ejemplo1.cpp: Muestra un fichero dos veces.
 eofbit: indica que se ha detectado fin de fichero. #include <iostream>
 failbit: indica que una operación sobre el stream ha fallado. #include <fstream>
 badbit: se activa si falla una operación de escritura de buffers. using namespace std;

Método bad: int main() {


ifstream fichero("ejemplo1.cpp");
int bad(); char c;
while(fichero.get(c)) cout.put(c);
Devuelve el estado del bit "badbit". fichero.clear(); // (1)
fichero.seekg(0);
Método fail: while(fichero.get(c)) cout.put(c);
fichero.close();
int fail(); cin.get();
return 0;
Devuelve el estado del bit "failbit". }

Método good: Como vemos en (1), es necesario eliminar el bit de eof, que se ha activado al leer
hasta el final del fichero, cuando el último intento de llamar a "get" ha fallado,
int good(); porque se ha terminado el fichero.

Devuelve el estado del bit "goodbit". Método is_open:

Ejemplo: int is_open();

Veamos el ejemplo anterior de mostrar dos veces un fichero, pero esta vez escrito Devuelve un valor no nulo si el fichero está abierto.
para C++ usando streams:
Método flush:
ostream& flush(); partida en el segundo, que puede ser cualquiera de los indicados anteriormente:
ios::beg, ios::cur o ios::end.
Realiza las operaciones de escritura pendientes que aún se han realizado sólo en el
buffer. Método seekp:

Cambia la posición del cursor en streams de salida.

Métodos relacionados con acceso aleatorio. ostream& seekp(streampos pos);


ostream& seekp(streamoff offset, seek_dir);
Disponemos de otro tipo enumerado en ios para indicar movimientos relativos
dentro de un stream de acceso aleatorio: Lo mismo que seekg, pero aplicado a estream de salida.

enum seek_dir ; Método tellg:

 beg: relativo al principio del fichero. streampos tellg();


 cur: relativo a la posición actual del cursor dentro del fichero.
 end: relativo al final del fichero. Devuelve la posición actual del cursor dentro de un stream de entrada.

Método seekg: Método tellp:

Cambia la posición del cursor en streams de entrada. streampos tellp();

istream& seekg(streampos pos); Devuelve la posición actual del cursor dentro de un stream de salida.
istream& seekg(streamoff offset, seek_dir dir);
Método read:
La primera forma es para cambiar la posición de modo absoluto. La segunda para
cambios relativos, en la que se indica el salto en el primer parámetro y el punto de istream& read(char*, int);
Lee el número de caracteres indicado en el segundo parámetro dentro del buffer ifstream entrada;
suministrado por el primero. ofstream salida;

Método gcount: char buffer[2048]; // Buffer de 2 Kbytes


int gcount(); int bytesLeidos;

Devuelve el número de caracteres sin formato de la última lectura. Las lecturas sin if(argc != 3) {
formato son las realizadas mediante las funciones get, getline y read. printf("Usar: copia <fichero_origen> <fichero_destino>\n");
return 1;
Método write:

ostream& write(const char*, int); ARCHIVOS SECUENCIALES

Escribe el número de caracteres indicado en el segundo parámetro desde el buffer En estos archivos, la información sólo puede leerse y escribirse empezando desde
suministrado por el primero. el principio del archivo.

Ejemplo: Los archivos secuenciales tienen algunas características que hay que tener en
cuenta:
De nuevo haremos el ejemplo de copiar ficheros, pero esta vez usando streams.
1. La escritura de nuevos datos siempre se hace al final del archivo.
// copia.cpp: Copia de ficheros 2. Para leer una zona concreta del archivo hay que avanzar siempre, si la
// Uso: copia <fichero_origen> <fichero_destino> zona está antes de la zona actual de lectura, será necesario "rebobinar"
el archivo.
#include <iostream>
3. Los ficheros sólo se pueden abrir para lectura o para escritura, nunca de
#include <fstream>
los dos modos a la vez.
using namespace std;

int main(int argc, char **argv) {


Esto es en teoría, por supuesto, en realidad C no distingue si los archivos que Lo normal cuando se quería actualizar el contenido de un archivo de cinta
usamos son secuenciales o no, es el tratamiento que hagamos de ellos lo que los añadiendo o modificando datos, era abrir el archivo en modo lectura en una unidad
clasifica como de uno u otro tipo. de cinta, y crear un nuevo fichero de escritura en una unidad de cinta distinta. Los
datos leídos de una cinta se editan o modifican, y se copian en la otra
Pero hay archivos que se comportan siempre como secuenciales, por ejemplo los secuencialmente.
ficheros de entrada y salida estándar: stdin, stdout, stderr y stdaux.
Cuando trabajemos con archivos secuenciales en disco haremos lo mismo, pero en
Tomemos el caso de stdin, que suele ser el teclado. Nuestro programa sólo podrá ese caso no necesitamos dos unidades de disco, ya que en los discos es posible
abrir ese fichero como de lectura, y sólo podrá leer los caracteres a medida que abrir varios archivos simultáneamente.
estén disponibles, y en el mismo orden en que fueron tecleados.
En cuanto a las ventajas, los archivos secuenciales son más sencillos de manejar,
Lo mismo se aplica para stdout y stderr, que es la pantalla, en estos casos sólo se ya que requieren menos funciones, además son más rápidos, ya que no permiten
pueden usar para escritura, y el orden en que se muestra la información es el moverse a lo largo del archivo, el punto de lectura y escritura está siempre
mismo en que se envía. determinado.

Un caso especial es stdaux, que suele ser el puerto serie. También es un archivo En ocasiones pueden ser útiles, por ejemplo, cuando sólo se quiere almacenar
secuencial, con respecto al modo en que se leen y escriben los datos. Sin embargo cierta información a medida que se recibe, y no interesa analizarla en el momento.
se un fichero de entrada y salida. Posteriormente, otro programa puede leer esa información desde el principio y
analizarla. Este es el caso de archivos "log" o "diarios" por ejemplo, los servidores
Trabajar con archivos secuenciales tiene algunos inconvenientes. Por ejemplo, de las páginas WEB pueden generar una línea de texto cada vez que alguien accede
imagina que tienes un archivo de este tipo en una cinta magnética. Por las al una de las páginas y las guardan en un fichero secuencial.
características físicas de este soporte, es eviente que sólo podemos tener un
fichero abierto en cada unidad de cinta. Cada fichero puede ser leído, y también ARCHIVOS DE ACCESO ALEATORIO
sobrescrito, pero en general, los archivos que haya a continuación del que
escribimos se perderán, o bien serán sobreescritos al crecer el archivo, o quedará Los archivos de acceso aleatorio son más versátiles, permiten acceder a cualquier
un espacio vacío entre el final del archivo y el principio del siguiente. parte del fichero en cualquier momento, como si fueran arrays en memoria. Las
operaciones de lectura y/o escritura pueden hacerse en cualquier punto del fseek(fichero, 5*sizeof(stRegistro), SEEK_SET);
archivo. fread(&reg, sizeof(stRegistro), 1, fichero);

En general se suelen establecer ciertas normas para la creación, aunque no todas Análogamente, para hacer una operación de escritura, usaremos:
son obligatorias:
fseek(fichero, 5*sizeof(stRegistro), SEEK_SET);
1. Abrir el archivo en un modo que te permita leer y escribir. Esto no es fwrite(&reg, sizeof(stRegistro), 1, fichero);
imprescindible, es posible usar archivos de acceso aleatorio sólo de
Muy importante: después de cada operación de lectura o escritura, el cursor del
lectura o de escritura.
fichero se actualiza automáticamente a la siguiente posición, así que es buena idea
2. Abrirlo en modo binario, ya que algunos o todos los campos de la
hacer siempre un fseek antes de un fread o un fwrite.
estructura pueden no ser caracteres.
3. Usar funciones como fread y fwrite, que permiten leer y escribir registros
En el caso de streams, la forma de trabajar es análoga:
de longitud constante desde y hacia un fichero.
4. Usar la función fseek para situar el puntero de lectura/escritura en el fichero.seekg(5*sizeof(stRegistro), ios::beg);
lugar apropiado de tu archivo. fichero.read(&reg, sizeof(stRegistro));

Por ejemplo, supongamos que nuestros registros tienen la siguiente estructura: Y para hacer una operación de escritura, usaremos:

struct stRegistro { fichero.seekp(5*sizeof(stRegistro), ios::beg);


char Nombre[34]; fichero.write(&reg, sizeof(stRegistro));
int dato;
int matriz[23]; Calcular la longitud de un fichero
} reg;
Para calcular el tamaño de un fichero, ya sea en bytes o en registros se suele usar
Teniendo en cuenta que los registros empiezan a contarse desde el cero, para el siguiente procedimiento:
hacer una lectura del registro número 6 usaremos:
long nRegistros;
long nBytes; Si el campo Valido tiene un valor prefijado, por ejemplo 'S' o ' ', el registro
fseek(fichero, 0, SEEK_END); // Colocar el cursor al final del fichero es válido. Si tiene un valor prefijado, por ejemplo 'N' o '*', el registro será
nBytes = ftell(fichero); // Tamaño en bytes inválido o se considerará borrado.
nRegistros = ftell(fich)/sizeof(stRegistro); // Tamaño en registros
De este modo, para borrar un registro sólo tienes que cambiar el valor de
En el caso de streams: ese campo.

long nRegistros; Pero hay que tener en cuenta que será el programa el encargado de
long nBytes;
tratar los registros del modo adecuado dependiendo del valor del campo
fichero.seekg(0, ios::end); // Colocar el cursor al final del fichero
Valido, el hecho de marcar un registro no lo borra físicamente.
nBytes = fichero.tellg(); // Tamaño en bytes
nRegistros = fichero.tellg()/sizeof(stRegistro); // Tamaño en registros
Si se quiere elaborar más, se puede mantener un fichero auxiliar con la
Borrar registros lista de los registros borrados. Esto tiene un doble propósito:

Borrar registros puede ser complicado, ya que no hay ninguna función de biblioteca  Que se pueda diseñar una función para sustituir a fseek()
estándar que lo haga. de modo que se tengan en cuenta los registros marcados.
 Que al insertar nuevos registros, se puedan sobrescribir
Es su lugar se suele usar uno de estos dos métodos: los anteriormente marcados como borrados, si existe
alguno.
1. Marcar el registro como borrado o no válido, para ello hay que añadir un
campo extra en la estructura del registro: 8. Hacer una copia del fichero en otro fichero, pero sin copiar el registro
2. struct stRegistro { que se quiere borrar. Este sistema es más tedioso y lento, y requiere
3. char Valido; // Campo que indica si el registro es válido cerrar el fichero y borrarlo o renombrarlo, antes de poder usar de nuevo
4. char Nombre[34]; la versión con el registro eliminado.
5. int dato;
6. int matriz[23];
7. };
Lo normal es hacer una combinación de ambos, durante la ejecución normal del int main()
programa se borran registros con el método de marcarlos, y cuando se cierra la {
aplicación, o se detecta que el porcentaje de registros borrados es alto o el usuario struct stRegistro reg;
así lo decide, se "empaqueta" el fichero usando el segundo método. FILE *fa;
int opcion;
long numero;
Ejemplo:
fa = fopen("alea.dat", "r+b"); // Este modo permite leer y escribir
if(!fa) fa = fopen("alea.dat", "w+b"); // si el fichero no existe, lo crea.
A continuación se incluye un ejemplo de un programa que trabaja con registros de
do {
acceso aleatorio, es un poco largo, pero bastante completo:
opcion = Menu();
switch(opcion) {
// alea.c: Ejemplo de ficheros de acceso aleatorio.
case '1': // Añadir registro
#include &lt;stdio.h&gt;
Leer(&amp;reg);
#include &lt;stdlib.h&gt;
// Insertar al final:
fseek(fa, 0, SEEK_END);
struct stRegistro {
fwrite(&amp;reg, sizeof(struct stRegistro), 1, fa);
char valido; // Campo que indica si el registro es válido S->Válido, N->Inválido
break;
char nombre[34];
case '2': // Mostrar registro
int dato[4];
system("cls");
};
printf("Mostrar registro: ");
numero = LeeNumero();
int Menu();
fseek(fa, numero*sizeof(struct stRegistro), SEEK_SET);
void Leer(struct stRegistro *reg);
fread(&amp;reg, sizeof(struct stRegistro), 1, fa);
void Mostrar(struct stRegistro *reg);
Mostrar(&amp;reg);
void Listar(long n, struct stRegistro *reg);
break;
long LeeNumero();
void Empaquetar(FILE **fa); case '3': // Eliminar registro
system("cls");
printf("Eliminar registro: "); {
numero = LeeNumero(); char resp[20];
fseek(fa, numero*sizeof(struct stRegistro), SEEK_SET); do {
fread(&amp;reg, sizeof(struct stRegistro), 1, fa); system("cls");
reg.valido = 'N'; printf("MENU PRINCIPAL\n");
fseek(fa, numero*sizeof(struct stRegistro), SEEK_SET); printf("--------------\n\n");
fwrite(&amp;reg, sizeof(struct stRegistro), 1, fa); printf("1- Insertar registro\n");
break; printf("2- Mostrar registro\n");
case '4': // Mostrar todo printf("3- Eliminar registro\n");
rewind(fa); printf("4- Mostrar todo\n");
numero = 0; printf("5- Eliminar registros marcados\n");
system("cls"); printf("0- Salir\n");
printf("Nombre Datos\n"); fgets(resp, 20, stdin);
while(fread(&amp;reg, sizeof(struct stRegistro), 1, fa)) } while(resp[0] &lt; '0' &amp;&amp; resp[0] &gt; '5');
Listar(numero++, &amp;reg); return resp[0];
system("PAUSE"); }
break;
case '5': // Eliminar marcados // Permite que el usuario introduzca un registro por pantalla
Empaquetar(&amp;fa); void Leer(struct stRegistro *reg)
break; {
} int i;
} while(opcion != '0'); char numero[6];
fclose(fa); system("cls");
return 0; printf("Leer registro:\n\n");
} reg-&gt;valido = 'S';
printf("Nombre: ");
// Muestra un menú con las opciones disponibles y captura una opción del usuario fgets(reg-&gt;nombre, 34, stdin);
int Menu() // la función fgets captura el retorno de línea, hay que eliminarlo:
for(i = strlen(reg-&gt;nombre)-1; i &amp;&amp; reg->nombre[i] &lt; ' '; i--) for(i = 0; i &lt; 4; i++) printf(", %4d", reg-&gt;dato[i]);
reg-&gt;nombre[i] = 0; printf("\n");
for(i = 0; i &lt; 4; i++) { }
printf("Dato[%1d]: ", i); }
fgets(numero, 6, stdin);
reg-&gt;dato[i] = atoi(numero); // Lee un número suministrado por el usuario
} long LeeNumero()
} {
char numero[6];
// Muestra un registro en pantalla, si no está marcado como borrado fgets(numero, 6, stdin);
void Mostrar(struct stRegistro *reg) return atoi(numero);
{ }
int i;
system("cls"); // Elimina los registros marcados como borrados
if(reg-&gt;valido == 'S') { void Empaquetar(FILE **fa)
printf("Nombre: %s\n", reg-&gt;nombre); {
for(i = 0; i &lt; 4; i++) printf("Dato[%1d]: %d\n", i, reg-&gt;dato[i]); FILE *ftemp;
} struct stRegistro reg;
system("PAUSE");
} ftemp = fopen("alea.tmp", "wb");
rewind(*fa);
// Muestra un registro por pantalla en forma de listado, while(fread(&amp;reg, sizeof(struct stRegistro), 1, *fa))
// si no está marcado como borrado if(reg.valido == 'S')
void Listar(long n, struct stRegistro *reg) fwrite(&amp;reg, sizeof(struct stRegistro), 1, ftemp);
{ fclose(ftemp);
int i; fclose(*fa);
if(reg-&gt;valido == 'S') { remove("alea.bak");
printf("[%6ld] %-34s", n, reg-&gt;nombre); rename("alea.dat", "alea.bak");
rename("alea.tmp", "alea.dat"); A veces necesitaremos ordenar el contenido de un fichero secuencial, ya sea de
*fa = fopen("alea.dat", "r+b"); longitud de registro variable o constante.
}
Debido a la naturaleza de estos archivos, en general no será posible usar los
Y esto es un ejemplo equivalente en C++: métodos de ordenamiento que usaríamos con tablas en memoria. En muchas
ocasiones trabajaremos con archivos muy grandes, de modo que será imposible
// alea.cpp: Ejemplo de ficheros de acceso aleatorio.
ordenarlos en memoria y después reconstruirlos en disco.
#include <iostream>
#include <fstream>
Algoritmo de mezcla natural
#include <iomanip>
#include <cstdlib>
En cuanto a los ficheros secuenciales, el método más usado es el de mezcla natural.
#include <cstring>
Es válido para ficheros de tamaño de registro variable.
using namespace std;

Es un buen método para ordenar barajas de naipes, por ejemplo.


// Funciones auxiliares:
int Menu();
Cada pasada se compone de dos fases. En la primera se separa el fichero original
long LeeNumero();
en dos auxiliares, los elementos se dirigen a uno u otro fichero separando los
// Clase registro. tramos de registros que ya estén ordenados. En la segunda fase los dos ficheros
class Registro { auxiliares se mezclan de nuevo de modo que de cada dos tramos se obtiene
public: siempre uno ordenado. El proceso se repite hasta que sólo obtenemos un tramo.
Registro(char *n=NULL, int d1=0, int d2=0, int d3=0, int d4=0) : valido('S') {
if(n) strcpy(nombre, n); else strcpy(nombre, ""); Por ejemplo, supongamos los siguientes valores en un fichero de acceso secuencial,
que ordenaremos de menor a mayor:

ORDENAR FICHEROS SECUENCIALES 3, 1, 2, 4, 6, 9, 5, 8, 10, 7

Separaremos todos los tramos ordenados de este fichero:


[3], [1, 2, 4, 6, 9], [5, 8, 10], [7] // Ordena ficheros de texto por orden alfabético de líneas
// Usando el algoritmo de mezcla natural
La primera pasada separará los tramos alternándolos en dos ficheros auxiliares: #include <stdio.h>
#include <stdlib.h>
aux1: [3], [5, 8, 10] #include <string.h>
aux2: [1, 2, 4, 6, 9], [7]
void Mostrar(FILE *fich);
Ahora sigue una pasada de mezcla, mezclaremos un tramo de cada fichero auxiliar void Mezcla(FILE *fich);
en un único tramo: void Separar(FILE *fich, FILE **aux);
int Mezclar(FILE *fich, FILE **aux);
Mezcla: [1, 2, 3, 4, 6, 9], [5, 7, 8, 10]
int main()
Ahora repetimos el proceso, separando los tramos en los ficheros auxiliares: {
FILE *fichero;
aux1: [1, 2, 3, 4, 6, 9]
aux2: [5, 7, 8, 10] fichero = fopen("mezcla.txt", "r+");
puts("Fichero desordenado\n");
Y de mezclándolos de nuevo: Mostrar(fichero);
puts("Ordenando fichero\n");
Mezcla: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Mezcla(fichero);
puts("Fichero ordenado\n");
El fichero ya está ordenado, para verificarlo contaremos los tramos obtenidos Mostrar(fichero);
después de cada proceso de mezcla, el fichero estará desordenado si nos fclose(fichero);
encontramos más de un tramo. system("PAUSE");
return 0;
Ejemplo: }

// mezcla.c : Ordenamiento de archivos secuenciales // Muestra el contenido del fichero "fich"


void Mostrar(FILE *fich) ordenado = Mezclar(fich, aux);
{ fclose(aux[0]);
char linea[128]; fclose(aux[1]);
} while(!ordenado);
rewind(fich); // Elimina los ficheros auxiliares:
fgets(linea, 128, fich); remove("aux1.txt");
while(!feof(fich)) { remove("aux2.txt");
puts(linea); }
fgets(linea, 128, fich);
} // Separa los tramos ordenados alternando entre los ficheros auxiliares:
} void Separar(FILE *fich, FILE **aux)
{
// Algoritmo de mezcla: char linea[128], anterior[2][128];
void Mezcla(FILE *fich) int salida = 0;
{
int ordenado; // Valores iniciales para los últimos valores
FILE *aux[2]; // almacenados en los ficheros auxiliares
strcpy(anterior[0], "");
// Bucle que se repite hasta que el fichero esté ordenado: strcpy(anterior[1], "");
do { // Captura la primero línea:
// Crea los dos ficheros auxiliares para separar los tramos: fgets(linea, 128, fich);
aux[0] = fopen("aux1.txt", "w+"); while(!feof(fich)) {
aux[1] = fopen("aux2.txt", "w+"); // Decide a qué fichero de salida corresponde la línea leída:
rewind(fich); if(salida == 0 && strcmp(linea, anterior[0]) < 0) salida = 1;
Separar(fich, aux); else if(salida == 1 && strcmp(linea, anterior[1]) < 0) salida = 0;
rewind(aux[0]); // Almacena la línea actual como la última añadida:
rewind(aux[1]); strcpy(anterior[salida], linea);
rewind(fich); // Añade la línea al fichero auxiliar:
fputs(línea, aux[salida]); fputs(linea[entrada], fich);
// Lee la siguiente línea: // Lee la siguiente línea del fichero auxiliar:
fgets(linea, 128, fich); fgets(linea[entrada], 128, aux[entrada]);
} // Verificar fin de tramo, si es así copiar el resto del otro tramo:
} if(strcmp(anterior[entrada], linea[entrada]) > 0) {
if(!entrada) entrada = 1; else entrada = 0;
// Mezcla los ficheros auxiliares: tramos++;
int Mezclar(FILE *fich, FILE **aux) // Copia lo que queda del tramo actual al fichero de salida:
{ do {
char ultima[128], linea[2][128], anterior[2][128]; strcpy(anterior[entrada], linea[entrada]);
int entrada; fputs(linea[entrada], fich);
int tramos = 0; fgets(linea[entrada], 128, aux[entrada]);
} while(!feof(aux[entrada]) && strcmp(anterior[entrada], linea[entrada]) <=
// Lee la primera línea de cada fichero auxiliar: 0);
fgets(linea[0], 128, aux[0]); }
fgets(linea[1], 128, aux[1]); }
// Valores iniciales;
strcpy(ultima, ""); // Añadir tramos que queden sin mezclar:
strcpy(anterior[0], ""); if(!feof(aux[0])) tramos++;
strcpy(anterior[1], ""); while(!feof(aux[0])) {
// Bucle, mientras no se acabe ninguno de los ficheros auxiliares (quedan tramos fputs(linea[0], fich);
por mezclar): fgets(linea[0], 128, aux[0]);
while(!feof(aux[0]) && !feof(aux[1])) { }
// Selecciona la línea que se añadirá: if(!feof(aux[1])) tramos++;
if(strcmp(linea[0], linea[1]) <= 0) entrada = 0; else entrada = 1; while(!feof(aux[1])) {
// Almacena el valor como el último añadido: fputs(linea[1], fich);
strcpy(anterior[entrada], linea[entrada]); fgets(linea[1], 128, aux[1]);
// Añade la línea al fichero: }
return(tramos == 1); // Incluye la opción de ordenar el archivo.
} #include <stdio.h>
#include <stdlib.h>
Ordenar ficheros de acceso aleatorio #include <string.h>

Cuando trabajemos con ficheros de acceso secuencial con tamaño de registro struct stRegistro {
constante, podremos aplicar los mismos algoritmos de ordenación que con tablas char valido; // Campo que indica si el registro es válido S->Válido, N->Inválido
en memoria, ya que es posible acceder a cada registro para lectura y escritura. char nombre[34];
int dato[4];
En el caso de ficheros de acceso aleatorio con tamaño de registro variable, los };
trataremos como si fueran secuenciales.
int Menu();
Algoritmo Quicksort void Leer(struct stRegistro *reg);
void Mostrar(struct stRegistro *reg);
Por supuesto, hay que elegir un algoritmo que implique un mínimo de lecturas y void Listar(long n, struct stRegistro *reg);
escrituras en el fichero, y preferentemente, que éstas operaciones estén los más long LeeNumero();
void Empaquetar(FILE **fa);
próximas posible entre sí. Resulta muy costoso, en términos de tiempo de
void Ordenar(FILE *fa);
ejecución, hacer muchas lecturas y escrituras en disco, y más si los puntos donde
void Intercambia(FILE *fa, long iz, long de);
se realizan están muy separados entre ellos.
char *LeeCampo(FILE *fa, long n, char *buf);
void QuickSort(FILE *fa, long inicio, long final);
Como ejemplo, usaremos el algoritmo de ordenación quicksort, adaptándolo para
ordenar ficheros. int main()
{
Usaremos el programa de ejemplo que usamos para los archivos de acceso struct stRegistro reg;
aleatorio "alea.cpp". Y añadiremos una nueva opción para ordenar el archivo. FILE *fa;
int opcion;
// alea2.c: Ejemplo de ficheros de acceso aleatorio. long numero;
fa = fopen("alea.dat", "r+b"); // Este modo permite leer y escribir break;
if(!fa) fa = fopen("alea.dat", "w+b"); // si el fichero no existe, lo crea. case '4': // Mostrar todo
do { rewind(fa);
opcion = Menu(); numero = 0;
switch(opcion) { system("cls");
case '1': // Añadir registro printf("Nombre Datos\n");
Leer(&reg); while(fread(&reg, sizeof(struct stRegistro), 1, fa))
// Insertar al final: Listar(numero++, &reg);
fseek(fa, 0, SEEK_END); system("PAUSE");
fwrite(&reg, sizeof(struct stRegistro), 1, fa); break;
break; case '5': // Eliminar marcados
case '2': // Mostrar registro Empaquetar(&fa);
system("cls"); break;
printf("Mostrar registro: "); case '6': // Ordenar
numero = LeeNumero(); Empaquetar(&fa);
fseek(fa, numero*sizeof(struct stRegistro), SEEK_SET); Ordenar(fa);
fread(&reg, sizeof(struct stRegistro), 1, fa); break;
Mostrar(&reg); }
break; } while(opcion != '0');
case '3': // Eliminar registro fclose(fa);
system("cls"); return 0;
printf("Eliminar registro: "); }
numero = LeeNumero();
fseek(fa, numero*sizeof(struct stRegistro), SEEK_SET); // Muestra un menú con las opciones disponibles y captura una opción del usuario
fread(&reg, sizeof(struct stRegistro), 1, fa); int Menu()
reg.valido = 'N'; {
fseek(fa, numero*sizeof(struct stRegistro), SEEK_SET); char resp[20];
fwrite(&reg, sizeof(struct stRegistro), 1, fa); do {
system("cls"); for(i = 0; i < 4; i++) {
printf("MENU PRINCIPAL\n"); printf("Dato[%1d]: ", i);
printf("--------------\n\n"); fgets(numero, 6, stdin);
printf("1- Insertar registro\n"); reg->dato[i] = atoi(numero);
printf("2- Mostrar registro\n"); }
printf("3- Eliminar registro\n"); }
printf("4- Mostrar todo\n"); // Muestra un registro en pantalla, si no está marcado como borrado
printf("5- Eliminar registros marcados\n"); void Mostrar(struct stRegistro *reg)
printf("6- Ordenar fichero\n"); {
printf("0- Salir\n"); int i;
fgets(resp, 20, stdin); system("cls");
} while(resp[0] < '0' && resp[0] > '6'); if(reg->valido == 'S') {
return resp[0]; printf("Nombre: %s\n", reg->nombre);
} for(i = 0; i < 4; i++)
printf("Dato[%1d]: %d\n", i, reg->dato[i]);
// Permite que el usuario introduzca un registro por pantalla }
void Leer(struct stRegistro *reg) system("PAUSE");
{ }
int i;
char numero[6]; // Muestra un registro por pantalla en forma de listado,
system("cls"); // si no está marcado como borrado
printf("Leer registro:\n\n"); void Listar(long n, struct stRegistro *reg)
reg->valido = 'S'; {
printf("Nombre: "); int i;
fgets(reg->nombre, 34, stdin); if(reg->valido == 'S') {
// la función fgets captura el retorno de línea, hay que eliminarlo: printf("[%6ld] %-34s", n, reg->nombre);
for(i = strlen(reg->nombre)-1; i && reg->nombre[i] < ' '; i--) for(i = 0; i < 4; i++) printf(", %4d", reg->dato[i]);
reg->nombre[i] = 0; printf("\n");
} }
}
void Ordenar(FILE *fa)
// Lee un número suministrado por el usuario {
long LeeNumero() long nRegs;
{ fseek(fa, 0, SEEK_END);
char numero[6]; nRegs = ftell(fa)/sizeof(struct stRegistro);
fgets(numero, 6, stdin); QuickSort(fa, 0L, nRegs-1);
return atoi(numero); }
}
void QuickSort(FILE *fa, long inicio, long final)
// Elimina los registros marcados como borrados {
void Empaquetar(FILE **fa) long iz, de;
{ char mitad[34];
FILE *ftemp; static char cad[34];
struct stRegistro reg;
iz = inicio;
ftemp = fopen("alea.tmp", "wb"); de = final;
rewind(*fa); strcpy(mitad, LeeCampo(fa, (iz+de)/2, cad));
while(fread(&reg, sizeof(struct stRegistro), 1, *fa)) do {
if(reg.valido == 'S') while(strcmp(LeeCampo(fa, iz, cad), mitad) < 0 && iz < final) iz++;
fwrite(&reg, sizeof(struct stRegistro), 1, ftemp); while(strcmp(mitad, LeeCampo(fa, de, cad)) < 0 && de > inicio) de--;
fclose(ftemp); if(iz < de) Intercambia(fa, iz, de);
fclose(*fa); if(iz <= de) {
remove("alea.bak"); iz++;
rename("alea.dat", "alea.bak"); de--;
rename("alea.tmp", "alea.dat"); }
*fa = fopen("alea.dat", "r+b"); } while(iz <= de);
if(inicio < de) QuickSort(fa, inicio, de); grandes puede ser un proceso muy lento. En general es preferible no ordenar los
if(iz < final) QuickSort(fa, iz, final); ficheros, salvo que sea muy necesario.
}
Veamos ahora un ejemplo basado en streams para C++:
char *LeeCampo(FILE *fa, long n, char *buf)
{ // alea2.cpp: Ejemplo de ficheros de acceso aleatorio.
struct stRegistro reg; #include <iostream>
fseek(fa, n*sizeof(struct stRegistro), SEEK_SET); #include <fstream>
fread(&reg, sizeof(struct stRegistro), 1, fa); #include <iomanip>
strcpy(buf, reg.nombre); #include <cstdlib>
return buf; #include <cstring>
}
using namespace std;
void Intercambia(FILE *fa, long iz, long de)
{ // Funciones auxiliares:
struct stRegistro reg1, reg2; int Menu();
fseek(fa, iz*sizeof(struct stRegistro), SEEK_SET); long LeeNumero();
fread(&reg1, sizeof(struct stRegistro), 1, fa);
fseek(fa, de*sizeof(struct stRegistro), SEEK_SET); // Clase registro.
fread(&reg2, sizeof(struct stRegistro), 1, fa); class Registro {
fseek(fa, iz*sizeof(struct stRegistro), SEEK_SET); public:
fwrite(&reg2, sizeof(struct stRegistro), 1, fa); Registro(char *n=NULL, int d1=0, int d2=0, int d3=0, int d4=0) : valido('S') {
fseek(fa, de*sizeof(struct stRegistro), SEEK_SET); if(n) strcpy(nombre, n); else strcpy(nombre, "");
fwrite(&reg1, sizeof(struct stRegistro), 1, fa); dato[0] = d1;
} dato[1] = d2;
dato[2] = d3;
El algoritmo que hemos usado es bastante bueno para ordenar ficheros, ya que dato[3] = d4;
requiere muy pocos intercambios de registros, pero de todos modos, con ficheros }
void Leer(); void Registro::Mostrar()
void Mostrar(); {
void Listar(long n); system("cls");
if(Valido()) {
const bool Valido() { return valido == 'S'; } cout << "Nombre: " << nombre << endl;
const char *Nombre() { return nombre; } for(int i = 0; i < 4; i++)
private: cout << "Dato[" << i << "]: " << dato[i] << endl;
char valido; // Campo que indica si el registro es válido }
// S->Válido, N->Inválido cout << "Pulsa una tecla";
char nombre[34]; cin.get();
int dato[4]; }
};
// Muestra un registro por pantalla en forma de listado,
// Implementaciones de clase Registro: // si no está marcado como borrado
// Permite que el usuario introduzca un registro por pantalla void Registro::Listar(long n) {
void Registro::Leer() { int i;
system("cls"); if(Valido()) {
cout << "Leer registro:" << endl << endl; cout << "[" << setw(6) << n << "] ";
valido = 'S'; cout << setw(34) << nombre;
cout << "Nombre: "; for(i = 0; i < 4; i++)
cin.getline(nombre, 34); cout << ", " << setw(4) << dato[i];
for(int i = 0; i < 4; i++) { cout << endl;
cout << "Dato[" << i << "]: "; }
dato[i] = LeeNumero(); }
}
} // Clase Datos, almacena y trata los datos.
class Datos :public fstream {
// Muestra un registro en pantalla, si no está marcado como borrado public:
Datos() : fstream("alea.dat", ios::in | ios::out | ios::binary) { cout << reg.Nombre() << endl;
if(!good()) { }
open("alea.dat", ios::in | ios::out | ios::trunc | ios::binary);
cout << "fichero creado" << endl; bool Datos::Recupera(long n, Registro &reg) {
cin.get(); clear();
} seekg(n*sizeof(Registro), ios::beg);
} read(reinterpret_cast<char *> (&reg), sizeof(Registro));
~Datos() { return gcount() > 0;
Empaquetar(); }
}
void Guardar(Registro &reg); // Marca el registro como borrado:
bool Recupera(long n, Registro &reg); void Datos::Borrar(long n) {
void Borrar(long n); char marca;
void Ordenar();
clear();
private: marca = 'N';
void Empaquetar(); seekg(n*sizeof(Registro), ios::beg);
void Intercambia(long iz, long de); write(&marca, 1);
char *LeeCampo(long n, char *buf); }
void QuickSort(long inicio, long final);
}; // Elimina los registros marcados como borrados
void Datos::Empaquetar() {
// Implementación de la clase Datos. ofstream ftemp("alea.tmp", ios::out);
void Datos::Guardar(Registro &reg) { Registro reg;
// Insertar al final:
clear(); clear();
seekg(0, ios::end); seekg(0, ios::beg);
write(reinterpret_cast<char *> (&reg), sizeof(Registro)); do {
read(reinterpret_cast<char *> (&reg), sizeof(Registro)); long iz, de;
if(gcount() > 0 && reg.Valido()) char mitad[34];
ftemp.write(reinterpret_cast<char *> (&reg), sizeof(Registro)); static char cad[34];
} while (gcount() > 0);
ftemp.close(); iz = inicio;
close(); de = final;
remove("alea.bak"); strcpy(mitad, LeeCampo((iz+de)/2, cad));
rename("alea.dat", "alea.bak"); do {
rename("alea.tmp", "alea.dat"); while(strcmp(LeeCampo(iz, cad), mitad) < 0 && iz < final) iz++;
open("alea.dat", ios::in | ios::out | ios::binary); while(strcmp(mitad, LeeCampo(de, cad)) < 0 && de > inicio) de--;
} if(iz < de) Intercambia(iz, de);
if(iz <= de) {
// Ordenar el fichero: iz++;
void Datos::Ordenar() de--;
{ }
long nRegs; } while(iz <= de);
if(inicio < de) QuickSort(inicio, de);
Empaquetar(); if(iz < final) QuickSort(iz, final);
}
clear();
seekg(0, ios::end); char* Datos::LeeCampo(long n, char *buf)
nRegs = tellg()/sizeof(Registro); {
QuickSort(0, nRegs-1); Registro reg;
}
seekg(n*sizeof(Registro), ios::beg);
// Funciones auxiliares para ordenar read(reinterpret_cast<char *> (&reg), sizeof(Registro));
void Datos::QuickSort(long inicio, long final) strcpy(buf, reg.Nombre());
{ return buf;
} break;
case '2': // Mostrar registro
void Datos::Intercambia(long iz, long de) system("cls");
{ cout << "Mostrar registro: ";
Registro reg1, reg2; numero = LeeNumero();
if(datos.Recupera(numero, reg))
seekg(iz*sizeof(Registro), ios::beg); reg.Mostrar();
read(reinterpret_cast<char *> (&reg1), sizeof(Registro)); break;
seekg(de*sizeof(Registro), ios::beg); case '3': // Eliminar registro
read(reinterpret_cast<char *> (&reg2), sizeof(Registro)); system("cls");
seekp(iz*sizeof(Registro), ios::beg); cout << "Eliminar registro: ";
write(reinterpret_cast<char *> (&reg2), sizeof(Registro)); numero = LeeNumero();
seekp(de*sizeof(Registro), ios::beg); datos.Borrar(numero);
write(reinterpret_cast<char *> (&reg1), sizeof(Registro)); break;
} case '4': // Mostrar todo
numero = 0;
int main() system("cls");
{ cout << "Nombre Datos" << endl;
Registro reg; while(datos.Recupera(numero, reg)) reg.Listar(numero++);
Datos datos; cout << "pulsa return";
int opcion; cin.get();
long numero; break;
do { case '5': // Ordenar
opcion = Menu(); datos.Ordenar();
switch(opcion) { break;
case '1': // Añadir registro }
reg.Leer(); } while(opcion != '0');
datos.Guardar(reg); return 0;
} FICHEROS DE ÍNDICES

// Muestra un menú con las opciones disponibles y captura una opción del usuario Mantener grandes ficheros de datos ordenados es muy costoso, ya que requiere
int Menu() mucho tiempo de procesador. Afortunadamente, existe una alternativa mucho
{ mejor: indicarlos (o indexarlos).
char resp[20];
do { Para indicar un archivo normalmente se suele generar un archivo auxiliar de
system("cls"); índices. Existen varios métodos, de los que veremos algunos. El más sencillo es
cout << "MENU PRINCIPAL" << endl;
crear un archivo plano que sólo contenga registros con dos campos: el campo o la
cout << "--------------" << endl << endl;
expresión por la que queremos ordenar el archivo, y un campo con un índexe que
cout << "1- Insertar registro" << endl;
almecene la posición del registro indicado en el archivo de datos.
cout << "2- Mostrar registro" << endl;
cout << "3- Eliminar registro" << endl;
Por ejemplo, supongamos que tenemos un archivo de datos con la siguiente
cout << "4- Mostrar todo" << endl;
cout << "5- Ordenar" << endl;
estructura de registro:
cout << "0- Salir" << endl;
struct stRegistro {
cin.getline(resp, 20);
char nombre[32];
} while(resp[0] < '0' && resp[0] > '5');
char apellido[2][32];
return resp[0];
char telefono[12];
}
char calle[45];
int numero;
// Lee un número suministrado por el usuario
char ciudad[32];
long LeeNumero()
char fechaNacimiento[9]; // formato AAAAMMDD: Año, mes y día
{
char estadoCivil;
char numero[6];
int hijos;
fgets(numero, 6, stdin);
}
return atoi(numero);
}
Imaginemos que necesitamos buscar un registro a partir del número de teléfono. Si 003: [Menganito] [Sanchez] [López] [23254532] [Diagonal] [145] [Barcelona]
no tenemos el archivo ordenado por ese campo, estaremos obligados a leer todos [19650505] [C] [1]
los registros del archivo hasta encontrar el que buscamos, y si el número no está, 004: [Tulanito] [Sanz] [Sanchez] [54556544] [Pez] [18] [Dublín] [19750111] [S] [0]
tendremos que leer todos los registros que existan.
Generamos un fichero de índices:
Si tenemos el archivo ordenado por números de teléfono podremos aplicar un
[12345678][000]
algoritmo de búsqueda. Pero si también queremos hacer búsquedas por otros
[84565456][001]
campos, estaremos obligados a ordenar de nuevo el archivo.
[45684565][002]
[23254532][003]
La solución es crear un fichero de índices, cada registro de este archivo tendrá la
[54556544][004]
siguiente estructura:
Y lo ordenamos:
struct stIndiceTelefono {
char telefono[12];
[12345678][000]
long indice;
[23254532][003]
}
[45684565][002]
[54556544][004]
Crearemos el fichero de índices a partir del archivo de datos, asignando a cada [84565456][001]
registro el campo "telefono" y el número de registro correspondiente. Veamos un
ejemplo: Ahora, cuando queramos buscar un número de teléfono, lo haremos en el fichero de
índices, por ejemplo el "54556544" será el registro número 3, y le corresponde el
000: [Fulanito] [Pérez] [Sanchez] [12345678] [Mayor] [15] [Lisboa] [19540425] [S] índice "004". Con ese índice podemos acceder directamente al archivo de datos, y
[0]
veremos que el número corresponde a "Tulanito Sanz Sanchez".
001: [Fonforito] [Fernandez] [López] [84565456] [Baja] [54] [Londres] [19750924]
[C] [3]
Por supuesto, nada nos impide tener más ficheros de índices, para otros campos.
002: [Tantolito] [Jimenez] [Fernandez] [45684565] [Alta] [153] [Berlin] [19840628]
[S] [0]
El mayor problema es mantener los ficheros de índices ordenados a medida que
añadimos, eliminamos o modificamos registros. Pero al ser los registros de índices int Menu();
más pequeños, los ficheros son más manejables, pudiendo incluso almacenarse en void Capturar(stRegistro &reg);
memoria en muchos casos. void EliminarRetornoLinea(char *cad);
void Leer(FILE *fa, stRegistro &reg, char *telefono);
void Insertar(FILE *fa, stRegistro &reg);
Ejemplo
void Mostrar(stRegistro &reg);
void ListarPorTelefonos(FILE *fa);
Veramos un ejemplo de implementación de índices:
void ListarNatural(FILE *fa);
void ReconstruirIndices(FILE *fa);
// indices.cpp: Ejemplo de ficheros de acceso aleatorio con índices.
// Funciones para ordenar el fichero de índices:
#include <cstdio>
void Intercambia(FILE *fa, long iz, long de);
#include <cstdlib>
char *LeeCampo(FILE *fa, long n, char *buf);
#include <cstring>
void QuickSort(FILE *fa, long inicio, long final);
using namespace std;
int main()
{
struct stRegistro {
stRegistro reg;
char valido; // Campo que indica si el registro es valido S->Válido, N->Inválido
FILE *fa;
char nombre[34];
int opcion;
char apellido[2][34];
char telefono[10];
char telefono[10];
};
fa = fopen("indices.dat", "r+b"); // Este modo permite leer y escribir
if(!fa) fa = fopen("indices.dat", "w+b"); // si el fichero no existe, lo crea.
struct stIndice {
char telefono[10];
do {
long indice;
opcion = Menu();
};
switch(opcion) {
case '1': // Insertar registro return 0;
Capturar(reg); }
Insertar(fa, reg); // Muestra un menú con las opciones disponibles y captura una opción del usuario
break; int Menu()
case '2': // Buscar registro {
system("cls"); char resp[20];
printf("Buscar registro: ");
do { do {
fgets(telefono, 10, stdin); system("cls");
EliminarRetornoLinea(telefono); printf("MENU PRINCIPAL\n");
} while(strlen(telefono) < 1); printf("--------------\n\n");
Leer(fa, reg, telefono); printf("1- Insertar registro\n");
Mostrar(reg); printf("2- Buscar registro\n");
break; printf("3- Reindicar archivo\n");
case '3': // Indicar archivo printf("4- Listar por orden de teléfonos\n");
system("cls"); printf("5- Listar por orden natural\n");
printf("Indicando archivo: "); printf("0- Salir\n");
ReconstruirIndices(fa); fgets(resp, 20, stdin);
break; } while(resp[0] < '0' && resp[0] > '5');
case '4': // Mostrar todo por orden de teléfonos return resp[0];
ListarPorTelefonos(fa); }
break;
case '5': // Mostrar todo por orden natural // Permite que el usuario introduzca un registro por pantalla
ListarNatural(fa); void Capturar(stRegistro &reg)
break; {
} int i;
} while(opcion != '0'); char numero[6];
fclose(fa);
system("cls"); int i;
printf("Leer registro:\n\n");
reg.valido = 'S'; if(reg.valido == 'S') {
printf("Nombre: "); printf("Nombre: %s %s %s\n", reg.nombre, reg.apellido[0], reg.apellido[1]);
fgets(reg.nombre, 34, stdin); printf("Número de teléfono: %s\n", reg.telefono);
EliminarRetornoLinea(reg.nombre); }
printf("Primer apellido: "); system("PAUSE");
fgets(reg.apellido[0], 34, stdin); }
EliminarRetornoLinea(reg.apellido[0]);
printf("Segundo apellido: "); // Lee el registro desde el fichero de datos con el teléfono dado
fgets(reg.apellido[1], 34, stdin); void Leer(FILE *fa, stRegistro &reg, char *telefono)
EliminarRetornoLinea(reg.apellido[1]); {
printf("Teléfono: "); FILE *fi;
fgets(reg.telefono, 10, stdin); stIndice ind;
EliminarRetornoLinea(reg.telefono); long inf, sup, n, nRegs;
}
fi = fopen("indices.ind", "rb");
// Elimina los caracteres de retorno de línea al final de cadena fseek(fi, 0, SEEK_END);
void EliminarRetornoLinea(char *cad) nRegs = ftell(fi)/sizeof(stIndice);
{ // Búsqueda binaria:
int i; inf = 0;
// la función fgets captura el retorno de línea, hay que eliminarlo: sup = nRegs-1;
for(i = strlen(cad)-1; i >= 0 && cad[i] < ' '; i--) cad[i] = 0; do {
} n = inf+(sup-inf)/2;
fseek(fi, n*sizeof(stIndice), SEEK_SET);
// Muestra un registro en pantalla, si no está marcado como borrado fread(&ind, sizeof(stIndice), 1, fi);
void Mostrar(stRegistro &reg) if(strcmp(ind.telefono, telefono) < 0) inf = n+1;
{ else sup = n-1;
} while(inf <= sup && strcmp(ind.telefono, telefono));
// Si se encontró el teléfono, lee el registro, si no muestra mensaje. system("cls");
if(!strcmp(ind.telefono, telefono)) { fi = fopen("indices.ind", "rb");
fseek(fa, ind.indice*sizeof(stRegistro), SEEK_SET); while(fread(&ind, sizeof(stIndice), 1, fi)) {
fread(&reg, sizeof(stRegistro), 1, fa); fseek(fa, ind.indice*sizeof(stRegistro), SEEK_SET);
} fread(&reg, sizeof(stRegistro), 1, fa);
else { printf("%s %s %s %s\n", reg.nombre, reg.apellido[0],
reg.valido = 'N'; reg.apellido[1], reg.telefono);
printf("Registro no encontrado\n"); }
} fclose(fi);
fclose(fi); system("PAUSE");
} }

// Añade un registro al archivo de datos y reconstruye los índices // Lista todos los registros del archivo de datos por el orden en que se
void Insertar(FILE *fa, stRegistro &reg) // insertaron.
{ void ListarNatural(FILE *fa)
// Insertar al final: {
fseek(fa, 0, SEEK_END); stRegistro reg;
fwrite(&reg, sizeof(stRegistro), 1, fa);
Reconstruir Indices(fa); rewind(fa);
} system("cls");
while(fread(&reg, sizeof(stRegistro), 1, fa))
// Lista todos los registros ordenados por el número de teléfono printf("%s %s %s %s\n", reg.nombre, reg.apellido[0],
void ListarPorTelefonos(FILE *fa) reg.apellido[1], reg.telefono);
{ system("PAUSE");
FILE *fi; }
stIndice ind;
stRegistro reg; // Reconstruye el archivo de índices
void ReconstruirIndices(FILE *fa) de = final;
{ strcpy(mitad, LeeCampo(fi, (iz+de)/2, cad));
long n=0; do {
FILE *fi; while(strcmp(LeeCampo(fi, iz, cad), mitad) < 0 && iz < final) iz++;
stRegistro reg; while(strcmp(mitad, LeeCampo(fi, de, cad)) < 0 && de > inicio) de--;
stIndice ind; if(iz < de) Intercambia(fi, iz, de);
if(iz <= de) {
// Crea el fichero de índices a partir del archivo de datos: iz++;
fi = fopen("indices.ind", "w+b"); de--;
rewind(fa); }
while(fread(&reg, sizeof(stRegistro), 1, fa)) { } while(iz <= de);
strcpy(ind.telefono, reg.telefono); if(inicio < de) QuickSort(fi, inicio, de);
ind.indice = n++; if(iz < final) QuickSort(fi, iz, final);
fwrite(&ind, sizeof(stIndice), 1, fi); }
}
// Ordena usando el algoritmo Quicksort: char *LeeCampo(FILE *fi, long n, char *buf)
QuickSort(fi, 0, n-1); {
fclose(fi); stIndice ind;
}
fseek(fi, n*sizeof(stIndice), SEEK_SET);
// Implementación del algoritmo Quicksort para fichero de índices fread(&ind, sizeof(stIndice), 1, fi);
void QuickSort(FILE *fi, long inicio, long final) strcpy(buf, ind.telefono);
{ return buf;
long iz, de; }
char mitad[10];
static char cad[10]; void Intercambia(FILE *fi, long iz, long de)
{
iz = inicio; stIndice reg1, reg2;
char telefono[10];
fseek(fi, iz*sizeof(stIndice), SEEK_SET); long indice;
fread(&reg1, sizeof(stIndice), 1, fi); long menor, mayor;
fseek(fi, de*sizeof(stIndice), SEEK_SET); };
fread(&reg2, sizeof(stIndice), 1, fi);
fseek(fi, iz*sizeof(stIndice), SEEK_SET); Crearemos el fichero de índices estructurados en árbol a partir del archivo de
fwrite(&reg2, sizeof(stIndice), 1, fi); datos, asignando a cada registro el campo "telefono" y el número de registro
fseek(fi, de*sizeof(stIndice), SEEK_SET); correspondiente y añadiendo los enlaces a otros nodos. Veamos un ejemplo:
fwrite(&reg1, sizeof(stIndice), 1, fi);
} 000: [Fulanito] [Pérez] [Sanchez] [12345678] [Mayor] [15] [Lisboa] [19540425] [S] [0]
001: [Fonforito] [Fernandez] [López] [84565456] [Baja] [54] [Londres] [19750924] [C] [3]
002: [Tantolito] [Jimenez] [Fernandez] [45684565] [Alta] [153] [Berlin] [19840628] [S] [0]
003: [Menganito] [Sanchez] [López] [23254532] [Diagonal] [145] [Barcelona] [19650505]
[C] [1]
FICHEROS INDICADOS NO ORDENADOS: ÁRBOLES BINARIOS
004: [Tulanito] [Sanz] [Sanchez] [54556544] [Pez] [18] [Dublín] [19750111] [S] [0]

Para evitar tener que reconstruir el fichero de índices cada vez que se actualiza el
Veremos cómo se actualiza el fichero de índices a medida que insertamos registros
archivo de datos existen varios métodos. Veremos ahora cómo implementar
en el archivo de datos:
árboles binarios.
Paso uno:
Para ello construiremos una estructura en árbol mediante una tabla almacenada en
un archivo de disco. [12345678][000][---][---]

La estructura para cada nodo del árbol es una extensión de la que usamos en el Paso dos:
capítulo anterior, tan sólo añadiremos dos campos extra para apuntar a otros
nodos: [12345678][000][---][001] <--
[84565456][001][---][---]
struct stNodo {
Paso tres:

[12345678][000][---][001]
[84565456][001][002][---] <--
[45684565][002][---][---]
Paso cuatro: Duplicación de claves

[12345678][000][---][001] No hay inconveniente en almacenar registros con claves duplicadas, tan sólo habrá
[84565456][001][002][---] que tener en cuenta que tendremos que almacenar un nodo para cada uno de ellos.
[45684565][002][003][---] <-- Tomaremos un criterio para el árbol, la rama 'menor', y pasará a ser la rama
[23254532][003][---][---] 'menor o igual'.

Paso cinco: Ventajas y desventajas

[12345678][000][---][001]
Este método tiene la ventaja de que no es necesario ordenar el archivo de índices,
[84565456][001][002][---]
pero puede producir resultados mediocres o francamente malos. Por ejemplo, si
[45684565][002][003][004] <--
los registros se introducen ordenados, buscar por la clave del último registro
[23254532][003][---][---]
[54556544][004][---][---]
insertado requerirá leer todos los nodos del árbol.

Como puede observarse, cada vez que se inserta un registro de datos, tan sólo hay FICHEROS INDICADOS ÁRBOLES-B (B-TREES)
que insertar un registro de índice y modificar otro.
En preparación.
Eliminar registros
Los árboles-B son árboles de búsqueda equilibrados, es decir, la profundidad, y por
Supongamos que queremos eliminar un registro de datos. En el archivo de datos lo tanto el número de lecturas máximo para cualquier búsqueda, está determinada
simplemente lo marcamos como borrado. En teoría, mientras el registro no se por el número de nodos que contenga el árbol.
elimine físicamente, no será necesario eliminar el registro de índice asociado.
La desventaja es que son más difíciles de manejar, son estructuras complejas, pero
Simplemente estará apuntando a un registro marcado como borrado.
muy versátiles y potentes, como veremos.
Posteriormente, cuando purguemos el archivo de datos será necesario reconstruir
el fichero de índices.
Hay un artículo sobre el tema en árboles-B, aunque aplicado a arrays. En este caso
lo aplicaremos a ficheros.
Los árboles-B pueden ser de cualquier 'orden'. Cada nodo del árbol puede contener int main(){
un número de claves que decidiremos en función de varios parámetros, de modo
que se minimicen los accesos al disco: double x,y;

 Tamaño de la clave. printf("Escribe el primer número");


 Tamaño del cluster. scanf("%lf",&x);
printf("Escribe el segundo número");
Para nuestro ejemplo consideraremos que el cluster tiene x bytes, y las claves por scanf("%lf",&y);
las que indicaremos el fichero son de 8 bytes.
if(x>y) printf("El mayor es %f",x);
Cada registro correspondiente a un nodo de un árbol-B contiene n-1 claves y n else if(y>x) printf("El mayor es %f",y);
punteros a nodos. Siendo el tamaño de una clave long_clave y el tamaño de un else printf("Son iguales");
puntero long_puntero, tenemos:
}
(n-1) * (long_clave + long_puntero) + n * long_puntero <= long_cluster
Ejercicio 2

Crear un programa en C que lea un número e indique si es par o no


EJERCICIOS
Solución
Ejercicio 1
#include <stdio.h>
Crear un programa en C que lea dos números y que escriba el mayor de los dos.
int main(){
Solución
int x;
#include <stdio.h>
scanf("%lf",&y);
printf("Escribe el número (sin decimales"); printf("Escribe el tercer número");
scanf("%i",&x); scanf("%lf",&z);

if(x>y && x>z) { //El mayor es x


if(x%2==0) printf("Es par");
else printf("Es impar"); if(y>z) printf("\t%lf\t%lf\t%lf", x, y, z);
else printf("\t%lf\t%lf\t%lf", x, z, y);
}
}
Ejercicio 3 else if (y>x && y>z) { //El mayor es y

Leer tres números y escribir el mayor de los tres if (x>z) printf("\t%lf\t%lf\t%lf", y, x, z);
else printf("\t%lf\t%lf\t%lf", y, z, x);
Solución
}
#include <stdio.h> else { //El mayor es z

int main(){ if (x>y) printf("\t%lf\t%lf\t%lf", z, x, y);

double x,y,z; else printf("\t%lf\t%lf\t%lf", z, y, x);

//Lectura de datos }

printf("Escribe el primer número"); }


scanf("%lf",&x);
printf("Escribe el segundo número"); Ejercicio 4
Escribir un programa en C que lea números enteros indefinidamente hasta que Modificar el programa anterior para que en lugar de leer 8 números, se puedan
llegue el número 0 leer tantos números como se quiera hasta que llegue un cero. El resultado es la
suma de todos los números leídos.
Solución

#include <stdio.h>
Ejercicio 7

int main(){ Intentar escribir un programa en C que lea tres números e indique el tipo de
triángulo que forman (isósceles, equilatero, escaleno). Comprobar que los números
int x; realmente formen un triángulo, sino emitir el error.
do{
Ejercicio 8
scanf("%i",&x);
Modificar el programa anterior para que se pueda repetir indefinidamente si el
}while(x!=0); usuario lo desea (que el ordenador pregunte ¿Quiere continuar? y la persona pueda
responder S ó N).
}

RESOLVER Ejercicio 9
Escribir un programa que escriba todos los múltiplos de 3 del número 1 al 3000.
Ejercicio 5
Escribir un programa C que lea exactamente 8 números y luego escriba la suma de Ejercicio 10
todos ellos.
Programa que lea una serie de números (leer hasta que llegue el cero por ejemplo)
y que calcule su media aritmética.
Ejercicio 6
Ejercicio 11
Introduzca la cantidad vendida
Programa que escriba todo el código ASCII (el código ASCII va de 0 a 255 y
representa el número con el que los ordenadores almacenan los caracteres).
Tras lo cual el usuario introducirá un número entero positivo.

Ejercicio 12 Después se pregunta:

Programa que lea un número entero por teclado y que calcule su factorial. Introduzca el precio

Que será un número decimal positivo.


Ejercicio 13
La lectura termina cuando en la cantidad se introduzca un cero. Si es así se
Programa que lea una serie de números por teclado e indique cuál es el mayor.
escribirá el total.

Ejercicio 14 Ejercicio 16
Crear un programa que lea un número entero y a partir de él cree un cuadrado de
Crear un programa para calcular el salario semanal de unos empleados a los que
asteriscos con ese tamaño. Los asteriscos sólo se verán en el borde del cuadrado,
se les paga 15 euros por hora si éstas no superan las 35 horas. Cada hora por
no en el interior.
encima de 35 se considerará extra y se paga a 22 €.

Ejercicio 15 El programa pide las horas del trabajador y devuelve el salario que se le debe
pagar.
Crear un programa C que lea cantidades y precios y al final indique el total de la
factura. Además el programa debe preguntar si deseamos calcular otro salario, si es así el
programa se vuelve a repetir.
Primero se pregunta:
Ejercicio 17 Crear un programa qu escriba dos columnas de números, en la primera se colocan
los números del 1 al 100, en la segunda los números del 100 al 1.
Escribir un programa en C que lea números enteros indefinidamente hasta que
llegue el número 0. Ejercicio 21
Crear un programa en C que lea un número entero y positivo y que escriba tres
Ejercicio 18
columnas. La primera cuenta desde uno hasta el número escrito contando de uno
en uno; la segunda columna cuenta de dos en dos y la tercera de tres.
Crear el programa asteriscos4 en el que se introduce un número entero y se crea
una pirámide de asteriscos. Por ejemplo si se introduce el 6, el resultado sería:
Ejercicio 22
Crear el programa tablaMultiplicar que escriba la tabla de multiplicar del número 1
* al número 15.
***
*****
Ejercicio 23
*******
********* Crear un programa que muestre un menú como este:
***********
1) Salir
Ejercicio 19
2) Sumatorio
Modificar el ejercicio anterior para que aparezca un rombo.
3) Factorial

Ejercicio 20 Tras mostrar el menú, el programa debe leer un número del 1 al tres si se elige 1, el
programa acaba. Si se elige 2 se calcula el sumatorio del número, si se elige 3 se
calcula el factorial (en ambos casos el programa pedirá escribir el número sobre el como arreglos de datos, es decir, para hacer una introducción al manejo y
que se calcula el sumatorio o el factorial). Tras calcular el sumatorio o el factorial programación de listas encadenadas podemos tomar como punto de partida a los
e indicar el resultado, el programa volverá a mostrar el menú y así sucesivamente. arreglos estáticos. Es así como en esta seccción se descubrirá la forma de
operación de tres tipos comúnes de listas conocidas como: PILAS, COLAS Y DOBLE
Ejercicio 24 COLA (STACK, QUEUE, DQUEUE). En programación, el uso de listas es una práctica
tan extendida que lenguajes tales como (por ejemplo) Java, Python y C++ soportan
Crear un programa que lea un número e indique su valor en la sucesión de los mecanismos necesarios para trabajar con estructuras de: Vectores, Pilas,
Fibonacci (llamarle Fibonacci). Colas, Listas, etc. En C++, los programadores que usen Dev-Cpp (
Bloodshed.software -Dev-C++ ) pueden aprovechar las ventajas que ofrecen las STL
Esta sucesión calcula su valor de la siguiente manera. Sólo es válido para números (Standard Templates Libraries) dentro de la cual se pueden encontrar plantillas
positivos, si el número es un uno, la sucesión vale 1 si es dos, la sucesión vale 2. para la manipulación de listas tales como: Vectores, Listas, Sets, Maps, etc. Por
Para el resto la sucesión es la suma de la sucesión de los dos números anteriores. otro lado, los usuarios de Borland C++ ( Turbo C++ version 1.01 ) pueden hacer uso
de la CLASSLIB, misma que posee las librerias para los propósitos mencionados.
Es decir, para 7 el valor sería lo que valga la sucesión de 6 más la sucesión de
cinco.
Nota: En las siguientes secciones se presentarán seis programas, tres para simular
listas basadas en arreglos estáticos y tres para simular listas por medio de
enlaces dinámicos (punteros). En cuanto al material incluido se debe hacer las
ESTRUCTURAS II siguientes declaraciones:

Algunos autores comienzan por definir los conceptos de estructura de datos a raiz Puesto que el material es puramente didáctico, cada programa se escribe en un
de estructuras conocidas como listas. En el mismo contexto, suele suceder que a mismo archivo. La idea es no perder de vista el objetivo. Los entendidos sabrán que
dichas listas también se les conoce como secuencias y/o colecciones de datos. Hay normalmente se deben escribir archivos de cabecera, archivos de implementacion
que decir que dichos autores están (en parte) en lo correcto, ya que una lista (de y archivos de prueba por separado.
cualquier tipo) es una estructura ideada con el propósito de albergar datos Para cada una de las clases creadas en los programas se han elegido nombres en
agrupados bajo un mismo nombre. Al respecto, podemos pensar que las listas son ingles. La idea es que gran parte de la documentación e implementación referente a
listas está en dicho idioma, así, se le da al estudiante la idea básica de como operar Para la implementación de la clase Stack se han elegido los métodos:
con las librerías soportadas por los compiladores Dev-Cpp, Borlan C++, y otros.
put(), poner un elemento en la pila
Igual, se debe observar que los métodos de las clases tienen nombres en ingles, y get(), retirar un elemento de la pila
que con el objetivo de establecer cierta estandarización todas las clases poseen los empty(), regresa 1 (TRUE) si la pila esta vacia
mismos métodos, aunque cada una de ellas implementa los mismos a su manera. size(), número de elementos en la pila

PILAS O STACKS
El atributo SP de la clase Stack es el puntero de lectura/escritura, es decir, el SP
Una PILA es una estructura en donde cada elemento es insertado y retirado del
indica la posición dentro de la pila en donde la función put() insertará el siguiente
tope de la misma, y debido a esto el comportamiento de un una pila se conoce
dato, y la posición dentro de la pila de donde la función get() leerá el siguiente dato.
como LIFO (último en entrar, primero en salir).

Un ejemplo de pila o stack se puede observar en el mismo procesador, es decir, Cada vez que put() inserta un elemento el SP se decrementa.
cada vez que en los programas aparece una llamada a una función el
microprocesador guarda el estado de ciertos registros en un segmento de Cada vez que get() retira un elemento el SP se incrementa.
memoria conocido como Stack Segment, mismos que serán recuperados al
regreso de la función.
En el siguente ejemplo se analiza lo que sucede con el SP (puntero de pila) cuando
se guardan en la pila uno por uno los caracteres 'A', 'B', 'C' y 'D'. Observe que al
principio el SP es igual al tamaño de la pila.
PILA EN ARREGLO ESTÁTICO

En el programa que se verá en seguida, se simula el comportamiento de una Llenando la pila.


estructura de pila. Aunque en el mismo se usa un arreglo estático de tamaño fijo se
SP
debe mencionar que normalmente las implementaciones hechas por fabricantes
|
y/o terceras personas se basan en listas dinámicas o enlazadas.
+---+---+---+---+---+
| | | | | | al principio (lista vacia) SP
+---+---+---+---+---+ |
SP +---+---+---+---+---+
| | | D | C | B | A | después de haber retirado todos los elementos
+---+---+---+---+---+ push('A'); +---+---+---+---+---+
| | | | | A | después de haber agregado el primer elemento
+---+---+---+---+---+ Nota: Observe que al final la lista está vacia, y que dicho estado se debe a que
el puntero está al final de la pila y no al hecho de borrar físicamente cada elemento
... de la pila.

SP
| Ejemplo: Pila basada en un arreglo estático
+---+---+---+---+---+
| | D | C | B | A | después de haber agregado cuatro elementos #include <iostream>
+---+---+---+---+---+ using namespace std;

#define STACK_SIZE 256 /* capacidad máxima */


Vaciando la pila. typedef char arreglo[STACK_SIZE];

SP class Stack {
|
+---+---+---+---+---+ pop(); int sp; /* puntero de lectura/escritura */
| | D | C | B | A | después de haber retirado un elemento int items; /* número de elementos en lista */
+---+---+---+---+---+ int itemsize; /* tamaño del elemento */
arreglo pila; /* el arreglo */
...
public: return d;
// constructor }
Stack() {
sp = STACK_SIZE-1; /* retirar elemento de la lista */
items = 0; int get()
itemsize = 1; {
} if ( ! empty() ) {
sp ++;
// destructor items --;
~Stack() {}; }
return pila[sp];
/* regresa el número de elementos en lista */ }
int size() { return items; }
}; // fin de clase Stack
/* regresa 1 si no hay elementos en la lista, o sea, si la lista está vacia
*/
int empty() { return items == 0; } // probando la pila.

/* insertar elemento a la lista */ // Nota: Obseve cómo los elementos se ingresan en orden desde la A hasta la Z,
int put(char d)
{ // y como los mismos se recuperán en orden inverso.
if ( sp >= 0) { int main()
pila[sp] = d; {
sp --; int d;
items ++; Stack s; // s es un objeto (instancia) de la clase Stack
}
// Llenando la pila Uno de los puntos más destacables en cuando al uso de listas enlazadas
for (d='A'; d<='Z'; d++) s.put(d); dinámicamente es el hecho de crear estructuras conocidas como nodos. Un nodo
es una especie de eslabón ( similar al de una cadena de bicicleta ), es decir, cada
cout << "Items =" << s.size() << endl; nodo se enlaza con otro a través de un puntero que apunta a una estructura del
mismo tipo que el nodo. Por ejemplo, para crear una estructura de nodo para
// Vaciando la pila almacenar enteros y a la vez para apuntar a otro posible nodo podemos emplear la
sintaxis:
while ( s.size() ) cout << (char)s.get() << " ";
struct nodo {
cout << "\nPara terminar oprima <Enter>..."; int data;
nodo *siguiente;
cin.get();
};
return 0;
} Observe que con la declaración anterior estamos creando el tipo estructurado
} nodo, mismo que posee a los miembros: data para guardar valores enteros, y
siguiente para apuntar o enlazar a un supuesto siguiente nodo.
PILA DINÁMICA
Ya que las listas dinámicas inicialmente se encuentran vacias, y más aún, una lista
En el siguiente programa se presenta una implementación de una estructura
dinámica no posee una dirección establecida en tiempo de compilación ya que las
dinámica tipo pila o stack. Es importante hacer notar que, a diferencia de una pila
dirección de memoria que ocupará cada uno de los elementos se establecerá en
basada en un arreglo estático, una pila enlazadada dinámicamente no posee de
tiempo de ejecución, entonces cómo determinar la condición de vacio?. En nuestro
forma natural el mecanismo de acceso por índices, en ese sentido, el programador
ejemplo usaremos un contador ( ITEMS ) que dicho sea de paso, si ITEMS = 0,
puede crear los algoritmos necesarios para permitir tal comportamiento. En la
entonces la lista está vacia. (La condición de vacio también podría determinarse al
clase que presentaremos en el ejemplo no se ha implementado el mecanismo de
verificar el SP, es decir, si el SP = NULL, significa que la lista no posee elementos).
acceso por índices, ya que la misma se presenta como una alternativa para la
simulación de una pila o stack.
Al hacer un análisis previo de los eventos que acontecerán en la pila y su puntero #include <iostream>
de lectura y escritura (SP, que en esta ocasión es una estructura tipo nodo), se //#include <conio.h>
tiene lo siguiente:
using namespace std;
1) Al principio la lista está vacia, en ese caso el SP es igual a NULL y, en
consecuencia, el puntero next también es NULL. /* tipo de dato que contendrá la lista */
SP = NULL typedef char DATA_TYPE;

+------+------+ // declaraci¢n de estructura nodo


| ???? | next |--> NULL struct nodo {
DATA_TYPE data;
+------+------+ nodo *next;
};
2) Después de agregar el primer elemento la situación se vería así:
SP = asignado class StackDin {
1
+------+------+ // atributos
| data | next |--> NULL int ITEMS; /* número de elementos en la lista */
+------+------+
int ITEMSIZE; /* tamaño de cada elemento */
nodo *SP; /* puntero de lectura/escritura */
3) Después de agregar otro elemento la situación se vería así:
SP = asignado public:
2 1
// constructor
+------+------+ +------+------+
StackDin() : SP(NULL), ITEMS(0), ITEMSIZE(sizeof(DATA_TYPE)) {}
| data | next |--> | data | next |--> NULL
+------+------+ +------+------+
// destructor
Ejemplo: Pila basada en un arreglo dinámico ~StackDin() {}
/* agregar componente a la lista */ if (SP) delete SP;
DATA_TYPE put(DATA_TYPE valor) SP = temp;
{ ITEMS --;
nodo *temp; return d;
}
temp = new nodo;
if (temp == NULL) return -1; }; // fin de la clase StackDin

temp->data = valor;
temp->next = SP; /* punto de prueba para la clase StackDin */
SP = temp; int main()
ITEMS ++; {
return valor; //clrscr();
}
StackDin s;
int empty() { return ITEMS == 0; } DATA_TYPE d;

for (d='A'; d<='Z'; d++) s.put(d);


/* retirar elemento de la lista */
DATA_TYPE get() while ( ! s.empty() )
{ cout << (DATA_TYPE)s.get() << " ";
nodo *temp;
DATA_TYPE d; cout << "\nPara terminar presione <Enter>...";
cin.get();
if ( empty() ) return -1; return 0;
}
d = SP->data;
temp = SP->next; COLAS O QUEUES
Una cola sencilla es una estructura en donde cada elemento es insertado put(), poner un elemento en la cola
inmediatamente después del último elemento insertado; y donde los elementos se get(), retirar un elemento de la cola
retiran siempre por el frente de la misma, debido a esto el comportamiento de un empty(), regresa 1 (TRUE) si la cola est vacia
una cola se conoce como FIFO (primero en entrar, primero en salir). size(), número de elementos en la cola

Un ejemplo a citar de cola es el comportamiento del buffer del teclado. El atributo cabeza de la clase Queue es el puntero de lectura.
El atributo cola de la clase Queue es el puntero de escritura.
Cuando en el teclado se oprime una tecla, el código del carácter ingresado es
Es decir, la cola indica la posición dentro de la lista en donde la función put ( ) insertará el
trasladado y depositado en un área de memoria intermedia conocida como "el
siguiente dato, y la cabeza indica la posición dentro de la lista de donde la función get ( )
buffer del teclado", para esto el microprocedador llama a una rutina específica. leerá el siguiente dato.
Luego, para leer el carácter depositado en el buffer existe otra función, es decir,
hay una rutina para escribir y otra para leer los caracteres del buffer cada una de Cada vez que put() inserta un elemento la cola se incrementa.
las cuales posee un puntero; uno para saber en donde dentro del buffer se Cada vez que get() retira un elemento la cabeza se incrementa.
escribirá el siguiente código y otro para saber de donde dentro del buffer se leerá
el siguiente código. En el siguente ejemplo se analiza lo que sucede con la cola y la cabeza (punteros de
escritura y de lectura de la Lista) cuando se guardan en la cola uno por uno los caracteres
Cola en un arreglo estático 'A', 'B', 'C' y 'D'. Observe que al principio: cola = cabeza = cero.

En el programa que se ve en seguida, se simula el comportamiento de una


Llenando la cola.
estructura de cola simple. Aunque en el mismo se usa un arreglo estático de
tamañoo fijo se debe mencionar que normalmente las implementaciones hechas por cola
fabricantes y/o terceras personas se basan en listas dinámicas o dinamicamente |
enlazadas. +---+---+---+---+---+
| | | | | | al principio
Para la implementación de la clase Queue se han elegido los métodos: +---+---+---+---+---+
|
cabeza |
cola +---+---+---+---+---+ get();
| | A | B | C | D | | después de haber retirado un elemento
+---+---+---+---+---+
+---+---+---+---+---+ put('A');
| A | | | | | después de haber agregado el primer elemento
+---+---+---+---+---+ ...
|
cabeza
cabeza
|
+---+---+---+---+---+ al final
... | A | B | C | D | | después de haber retirado todos los elementos
+---+---+---+---+---+
cola |
| cola
+---+---+---+---+---+
| A | B | C | D | | después de haber agregado cuatro elementos Observese que al final el cabeza apunta hacia el mismo elemento que la cola, es
+---+---+---+---+---+ decir, la cola vuelve a estar vacia. Puesto que la cola que estamos proyectando
| reside en un arreglo estático los componentes del arreglo aún están dentro de la
cabeza misma, salvo que para su recuperación se debería escribir otro método. En una
cola dinámica (como se demostrará más adelante) los elementos retirados de la
misma se eliminan de la memoria y podría no ser posible su recuperación
Vaciando la cola. posterior.

cabeza Nota: En el programa que aparece en seguida, al tipo de lista implementado por la
| clase Queue se le conoce como "lista circular" debido al comportamiento de sus
+---+---+---+---+---+ punteros. Es decir si los métodos para escribir o leer detectan que el puntero
| A | B | C | D | | antes de haber retirado elementos
correspondiente ha sobrepasado el tamaño máximo de elementos permitidos
+---+---+---+---+---+
cabeza
dentro de la cola, éste es puesto a cero.
Ejemplo: Cola en un arreglo estático int empty() { return ITEMS == 0; }

#define MAX_SIZE 256 /* capacidad máxima */ // insertar elemento a la lista


typedef char almacen[MAX_SIZE]; int put(int d)
{
class Queue { if ( ITEMS == MAX_SIZE) return -1;
if ( cola >= MAX_SIZE) { cola = 0; }
int cabeza; /* puntero de lectura */ alma[cola] = d;
int cola; /* puntero de escritura */ cola ++;
int ITEMS; /* número de elementos en la lista */ ITEMS ++;
int ITEMSIZE; /* tamaño de cada elemento */ return d;
almacen alma; /* el almacen */ }

public: // retirar elemento de la lista


int get()
// constructor {
Queue() { char d;
cabeza = 0; if ( empty() ) return -1;
cola = 0; if ( cabeza >= MAX_SIZE ) { cabeza = 0; }
ITEMS = 0; d = alma[cabeza];
ITEMSIZE = 1; cabeza ++;
} ITEMS --;
return d;
// destructor }

~Queue() {} // regresa el n£mero de elementos en lista


int size() { return ITEMS; }
// regresa 1 (true) si la lista está vacia
}; // fin de la clase Queue
struct nodo {
DATA_TYPE data;
// probando la cola nodo *next;
int main() };
{
int d; class QueueDin {
Queue q;
// atributos
for (d='A'; d<='Z'; d++) q.put(d); int ITEMS, ITEMSIZE;
nodo *cola, *cabeza;
cout << "Items = " << q.size() << endl;
public:
while ( q.size() ) { // constructor
cout << (char)q.get() << " "; QueueDin() : cola(NULL), cabeza(NULL), ITEMS(0), ITEMSIZE(sizeof(DATA_TYPE)) {}
}
// destructor
cout << "\nPara terminar oprima <Enter> ..."; ~QueueDin() {}
cin .get();
return 0; /* agregar componente a la lista */
} DATA_TYPE put(DATA_TYPE valor)
{
Ejemplo: Cola en un arreglo dinámico nodo *temp;

temp = new nodo;


using namespace std; if (temp == NULL) return -1;

typedef char DATA_TYPE; ITEMS ++;


temp->data = valor; temp = cabeza->next;
temp->next = NULL; if (cabeza) delete cabeza;
cabeza = temp;
if (cabeza == NULL) ITEMS --;
{ return d;
cabeza = temp; }
cola = temp;
} else }; // fin de la clase QueueDin
{
cola->next = temp; /* punto de prueba */
cola = temp; int main()
} {
return valor; QueueDin s;
} DATA_TYPE d;

// regresa 1 (true) si la lista está vacia // llenando la cola


int empty() { return ITEMS == 0; } for (d='A'; d<='Z'; d++) {
s.put(d);
cout << d << " ";
/* retirar elemento de la lista */ }
DATA_TYPE get()
{ cout << endl;
nodo *temp; // vaciando la cola
DATA_TYPE d; while ( ! s.empty() )
cout << (DATA_TYPE)s.get() << " ";
if ( empty() ) return -1;
cout << "\nPara terminar presione <Enter>...";
d = cabeza->data; cin.get();
return 0; mover una posición hacia adelante a todos los elementos que le siguen al primer
} elemento.

COLAS DE DOBLE ENLACE Ejemplo: Doble cola en un arreglo estático

Una cola doble es una estructuras en donde cada elemento puede ser insertado y recuperado por la #include <mem.h> // por memmove
parte del frente (cabeza) o por la parte de atras (cola) de la lista. A diferencia de una cola sencilla,
en donde solo se necesitan un método para leer y otro para escribir componentes en la lista, en una
// using namespace std;
doble cola debe haber dos métodos para leer ( uno para leer por el frente y uno para leer por atras
#define MAX_SIZE 256
) y dos métodos para escribir ( uno para escribir por el frente y uno para escribir por atras ).
#define t_error -1;

typedef int DATA_TYPE; // máximo número de elementos


En el programa que se verá en seguida, se simula el comportamiento de una
typedef int almacen[MAX_SIZE];
estructura de cola doble con base en un arreglo estático. En dicho programa se
declara e implementa la clase SDQueue con los siguientes métodos: class SDQueue {
// atributos
put_front(), poner un elemento en el frente de la cola int itemsize; // tamaño de cada elemento
put_back(), poner un elemento en la parte tracera de la cola int items; // número de elementos
get_front(), retirar un elemento de la parte frontal de la cola int cola, cabeza; // punteros de lectura y escritura
get_back(), retirar un elemento de la parte tracera de la cola almacen alma; // el almacen o arreglo
empty(), regresa 1 (TRUE) si la cola est vacia
size(), número de elementos en la cola public:
// constructor
Nota: Observe que para los métodos put_front ( ) y get_front ( ) se hace uso de la SDQueue() : cola(0), cabeza(0), items(0), itemsize(sizeof(DATA_TYPE)) {}
función memmove ( ), esto es necesario debido al hecho de que put_front ( ) tiene
que mover una posición hacia atras todos los elementos en la lista antes de // destructor
~SDQueue() {}
insertar el componente indicado; por otro lado, la función get_front ( ) tiene que
int empty() { return items == 0; } {
DATA_TYPE d;
int size() { return items; }
if ( empty() ) return t_error;
/* agregar componente en la parte tracera de la lista */ items --;
DATA_TYPE put_back(DATA_TYPE valor) cola --;
{ d = alma[cabeza];
if (items == MAX_SIZE) return t_error; memmove((void*)&alma[cabeza], (void*)&alma[cabeza+1], items*itemsize);
alma[cola] = valor; return d;
items ++; }
cola ++;
return valor; /* retirar elemento de la parte tracera de la lista */
} DATA_TYPE get_back()
{
/* agregar componente en la parte delantera de la lista */ DATA_TYPE d;
DATA_TYPE put_front(DATA_TYPE valor)
{ if ( empty() ) return t_error;
if (items == MAX_SIZE) return t_error; items--;
memmove((void *)&alma[cabeza+1], (void*)&alma[cabeza], items*itemsize); cola --;
alma[cabeza] = valor; d = alma[cola];
items ++; return d;
cola ++; }
return valor;
} }; // fin de la clase SDQueue

/* punto de prueba */
/* retirar elemento de la parte frontal de la lista */ int main()
DATA_TYPE get_front() {
SDQueue s; +------+------+------+
DATA_TYPE d; <--| prev | data | next |-->
+------+------+------+
for (d='A'; d<='Z'; d++) s.put_back(d);

while ( ! s.empty() )
cout << (char)s.get_front() << " "; En el programa que se verá en seguida, se simula el comportamiento de una
estructura de cola de doble enlace. Para la implementación de la clase DDqueue en
cout << "\nPara terminar presione <Enter>..."; el programa se han elegido los métodos:
cin.get();
return 0; put_front(), poner un elemento en el frente de la cola
} put_back(), poner un elemento en la parte tracera de la cola
get_front(), retirar un elemento de la parte frontal de la cola
Una cola doblemente encadenada es una estructuras en donde cada elemento get_back(), retirar un elemento de la parte tracera de la cola
puede ser insertado y recuperado por la parte del frente (cabeza) o por la parte de empty(), regresa 1 (TRUE) si la cola est vacia
atras (cola) de la lista. A diferencia de una cola sencilla, en donde solo se necesita size(), n£mero de elementos en la cola
un puntero a un siguiente elemento, la estructura del nodo para una doble cola debe
#include <iostream.h>
poseer un puntero a un posible siguiente elemento y un puntero a otro posible
#include <conio.h>
anterior elemento. Por ejemplo, para crear una estructura de nodo con doble
enlace para coleccionar números enteros podemos usar la sintaxis: // using namespace std;

struct nodo { typedef char DATA_TYPE;


int data;
nodo *next, *prev; struct nodo {
}; DATA_TYPE data;
nodo *next, *prev;
Gráficamente podemos imaginar la estructura anterior como: };
temp->next = NULL;
class DDqueue { temp->prev = NULL;
cabeza = temp;
int itemsize, items; cola = temp;
nodo *cola, *cabeza; } else
{
cola->next = temp;
public: temp->prev = cola;
// constructor cola = temp;
DDqueue() : cola(NULL), cabeza(NULL), items(0), itemsize(sizeof(DATA_TYPE)) {} cola->next = NULL;
}
// destructor return valor;
~DDqueue() {} }
/* agregar componente en la parte frontal de la lista */
DATA_TYPE put_front(DATA_TYPE valor)
/* agregar componente en la parte tracera de la lista */ {
DATA_TYPE put_back(DATA_TYPE valor) nodo *temp;
{
nodo *temp; temp = new nodo;
if (temp == NULL) return -1;
temp = new nodo;
if (temp == NULL) return -1; temp->data = valor;

temp->data = valor; items ++;


if (cabeza == NULL )
items ++; {
if (cabeza == NULL ) temp->next = NULL;
{ temp->prev = NULL;
cabeza = temp; cabeza = temp;
cola = temp; return d;
} else }
{
cabeza->prev = temp; /* retirar elemento de la parte tracera de la lista */
temp->next = cabeza; DATA_TYPE get_back()
cabeza = temp; {
cabeza->prev = NULL; nodo *temp;
} DATA_TYPE d;
return valor;
} if ( empty() ) return -1;

// regresa true si la lista está vacia items--;


int empty() { return items == 0; } d = cola->data;
temp = cola->prev;
if (cola) delete cola;
/* retirar elemento de la parte frontal lista */ cola = temp;
DATA_TYPE get_front() return d;
{ }
nodo *temp;
DATA_TYPE d; }; // fin de la clase DDqueue

if ( empty() ) return -1; /* punto de prueba */


int main()
items --; {
d = cabeza->data; clrscr();
temp = cabeza->next;
if (cabeza) delete cabeza; DDqueue s;
DATA_TYPE d; objetivo buscado por el algoritmo. Para implementar repetición de bloques de
instrucciones se utilizan los estructuras de control llamadas ciclos o estructuras
// insertando elementos en la parte tracera repetitivas.
for (d='A'; d<='Z'; d++) s.put_back(d);
Concepto General
// insertando en la parte delantera
for (d=9; d>=0; d--)s.put_front(d+'0');
Un ciclo puede definirse como una estructura que nos permite repetir o iterar un
conjunto de instrucciones y que tiene las siguientes características:
// vaciando la lista
while ( ! s.empty() )
cout << (DATA_TYPE)s.get_front() << " ";
 El conjunto de instrucciones a repetir dentro del ciclo debe ser finito
 La cantidad de veces que se repita dicho conjunto de instrucciones
cout << "\nPara terminar presione <Enter>..."; también debe ser finita. En algunos casos esta cantidad de veces va a
cin.get(); depender de una condición explícita y en otros casos va a depender de
return 0; una condición implícita. Una condición es explícita cuando depende
} solamente de la misma ejecución del programa sin que sea importante la
participación del usuario. Asimismo una condición es implícita cuando
ESTRUCTURAS REPETITIVAS depende solamente de la voluntad del usuario y por lo tanto la cantidad de
iteraciones o repeticiones del ciclo podría llegar a ser diferente cada vez
Un ciclo es una estructura que nos permite representar un conjunto de pues sería posible que cambiara con cada usuario.
instrucciones que debe repetirse una cantidad limitada de veces, normalmente  Deben estar claramente demarcados el inicio y el fin del ciclo. En los
dependiente de una condición o de una cantidad determinada de repeticiones o casos en los cuales solo exista una instrucción a iterar, no serán
iteraciones. Los ciclos permiten iterar todo un proceso tantas veces como el necesarias dichas marcas.
programador (ó el usuario) lo determine.  Dentro de un ciclo podrá ir cualquiera de las otras estructuras,
incluyendo otros ciclos.
Es común, que en la solución de muchos problemas algorítmicos, se requiera
realizar la repetición de cierto bloque de instrucciones, con el fin de obtener el Tipos de Ciclos
A continuación se describe la estructura de construcción de cada uno de los ciclos cantidad finita y deberá existir, dentro del mismo cuerpo del ciclo, una o mas instrucciones que
tal como son concebidos por la mayoría de lenguajes de programación y hagan que en algún momento la condición sea Falsa.

posteriormente se utilizaran para representar el mismo algoritmo con cada una de


las estructuras. El ciclo while se puede describir de la siguiente forma: cuando el computador encuentra la
estructura while verifica la condición del ciclo, si la condición es verdadera se ejecutan las
Ciclo while (Mientras) instrucciones al interior del ciclo, luego de ejecutar la última condición del ciclo se vuelve a evaluar
la condición, sí continúa siendo cierta se vuelve a ejecutar el bloque de instrucciones del ciclo.
El ciclo while representa el esquema general de trabajo para todos los ciclos, esto Cuando la condición se hace falsa el computador se salta el bloque de instrucciones del ciclo y
continúa con la ejecución del resto de instrucciones del programa.
quiere decir que si se entiende claramente la lógica de funcionamiento de este ciclo
se facilita entender no solo los otros ciclos. Es útil saber que este ciclo también es
Ciclo for (Para o Desde)
llamado en algunos libros el Ciclo Mientras Que.
La estructura general de este ciclo en lenguaje C es la siguiente:

for (control=valor_inicial;control<=valor_tope;incremento_control)
La estructura general de este ciclo en lenguaje C es la siguiente:
{
...
while (expresion_condicional)
instrucciones_del_cuerpo_del_ciclo
{
...
...
}
instrucciones_del_cuerpo_del_ciclo
...
La forma de ejecución del ciclo es la siguiente: control representa una variable que va a tomar
instrucciones_que_modifican_el_resultado_de_la_condicion
valores iniciando en valor_inicial y terminando en valor_tope avanzando con un incremento. En los
}
casos en los que no se especifica el valor del paso la mayoría de los lenguajes de programación
asume el incremento de 1, sin embargo el lenguaje C requiere que la variable de control sea
Su forma de ejecución es muy sencilla: Mientras se cumpla que la condición sea Verdadera entonces incrementada, P.Ej.: Si la variable de control se llama vi y el paso es de 1 el incremento de la variable
se ejecutará el Cuerpo del Ciclo. De igual forma también se podría decir que el Cuerpo del Ciclo se
de control se define así, vi=vi+1. El Cuerpo del Ciclo se ejecutará una vez por cada valor que tome la
repetirá tantas veces como lo permita la condición o mientras dicha condición sea Verdadera. En variable control. Veamos con un ejemplo cuál sería la aplicación de este ciclo.
condiciones normales la cantidad de veces que se repita el cuerpo del ciclo será siempre una
En el siguiente ejemplo se muestra una aplicación de esta estructura. while(vc<=100)
{
Ejemplo 1. Escribir los números impares comprendidos entre 1 y 100. printf("\nImpar %d: %d",vc/2+1,vc);
vc=vc+2;
#include <stdio.h> }
return(0);
int main() }
{
int numero,vc; Los dos programas de ejemplo logran el mismo objetivo lo cual significa que ambas
for(vc=1; vc<=100; vc=vc+2) versiones son correctas. Es importante anotar que cada ciclo siempre va a tener una
{ variable que es la que almacena el valor de inicio del ciclo, es la que va a estar presente en
printf("\nImpar %d: %d",vc/2+1,vc); la evaluación de la condición y es la que se incrementa para que en algún momento la
} condición sea Falsa. Es evidente que esta variable es muy importante por ello a éste tipo de
return(0);
variables se le ha dado el nombre de índice o variable de control del Ciclo. Se puede decir
}
que el índice del ciclo es la variable que permite la ejecución del cuerpo del ciclo. Un ciclo
puede llegar a tener varios índices al tiempo.
El programa del ejemplo produce una salida por pantalla similar a: "Impar 3: 5". Y serán 50
salidas, una por cada impar entre 1 y 100.
Como los índices no son mas que variables entonces varios ciclos pueden tener el mismo
El siguiente ejemplo resuelve el mismo problema pero usando la estructura while índice siempre que se utilice éste en un ciclo solo hasta cuando haya terminado la
mencionada en el apartado anterior. ejecución del ciclo anterior que utilizó esta variable.

Ejemplo 2. Escribir los números impares comprendidos entre 1 y 100.

#include <stdio.h> Ciclo do / while

int main() Este ciclo carece de representación algorítmica equivalente, sin embargo es similar en
{ funcionalidad al ciclo repetir hasta o hacer hasta, con la diferencia que el ciclo hacer
int vc;
hastase repite siempre que la condición resulte falsa y el ciclo do - while se repite si la
vc=1;
condición es verdadera, lo que implicaría que en un algoritmo que utiliza la
estructura hacer- hasta, en su implementación en lenguaje C debe hacerse un pequeño do{
cambio en la forma de la condición. printf("\nImpar %d: %d",vc/2+1,vc);
vc=vc+2;
La estructura general de este ciclo en lenguaje C es la siguiente: }while(vc<=100);
return(0);
}
do{
...
instrucciones_del_cuerpo_del_ciclo. Actividades
...
Para el siguiente problema resuelto algorítmicamente, realizar la implementación
instrucciones_que_modifican_el_resultado_de_la_condicion.
}while (expresion_condicional);
Enunciado: Elaborar un diagrama de flujo que imprima la siguiente secuencia:

Podría decirse que esta es una inversión de la estructura del ciclo while. En este ciclo el
1, 5, 3, 7,5,9,7 11,....23.
cuerpo del mismo se repite mientras la condición sea Verdadera y su única diferencia con
el ciclo while es que en el Ciclo do - while primero se ejecuta el cuerpo del ciclo y luego se Solución
evalúa la condición en cambio en el ciclo while primero se evalúa la condición y luego se
ejecuta el cuerpo del ciclo. Tenga en cuenta que al final de la condición en el ciclo do-while Análisis del problema: Para representar esta serie tenemos que encontrar primero cual es el patrón
se debe poner punto y coma (;), a diferencia de los ciclos anteriores. que determina la serie, por simple observación podemos encontrar que hay dos variaciones en la
serie, primero el segundo elemento es igual al primero más 4 y el tercero es igual al segundo menos
2 y así sucesivamente. Por lo tanto, la serie es alternante, es decir, varía entre dos patrones
diferentes. Para resolver el problema planteado podemos crear un ciclo controlado por una variable
Ejemplo 3. Escribir los números impares comprendidos entre 1 y 100. que toma valores entre 1 y 23, que además en cada iteración del ciclo va a alternar el factor de
variación de la serie, lo cual podemos hacer con una estructura condicional, cuya condición se
#include <stdio.h> cumpla en un ciclo y no se cumpla en el siguiente.

int main() Entrada: Este algoritmo no tiene datos de entrada dado que el eneuciado del problema nos
{ proporciona toda la información necesaria.
int vc;
vc=1; Salida: Impresión de cada uno de los elementos de la serie.
El algoritmo solución de este problema esta implementado usando una estructura repetitiva
de control, repetir hasta, esta estructura particular no tiene representación en lenguaje C/C++. Sin
embargo se puede implementar con la estructura de control do-while, cambiando la lógica de la
condición de control del ciclo.

1. Realizar la implementación del algoritmo planteado en lenguaje C/C++.

2. De ser posible realizar la implementación del algoritmo planteado en lenguaje C/C++, utilizando un
algoritmo equivalente haciendo uso de la estructura de controlmientras. Si no es posible realizar la
implementación, explique.

3. De ser posible realizar la implementación del algoritmo planteado en lenguaje C/C++, utilizando un
algoritmo equivalente haciendo uso de la estructura de controldesde o para. Si no es posible
realizar la implementación, explique.

ESTRUCTURAS DE DATOS

Las estructuras de datos se emplean con el objetivo principal de organizar los


datos contenidos dentro de la memoria del ordenador. Así, nuestra primera
experiencia con estructuras comienza desde el momento mismo en que usamos en
nuestros programas variables de tipos primitivos (char, short, int, float, etc). A la
memoria del ordenador se le puede considerar como un gran bloque compuesto
por una serie de BYTES dispuestos secuencialmente uno detrás de otro. por
ejemplo, si un ordenador posee una memoria de 128MB (128 megas) entonces se le
puede leer o escribir desde el BYTE 0 hasta el BYTE 128MB - 1 ( 0000000H ..
7FFFFFFH ).
La idea de ver la memoria como una serie de bytes es buena, sin embargo no es ESTRUCTURAS BÁSICAS EN C, C++
suficiente ya que en la misma podemos guardar números, cadenas de caracteres,
funciones, objetos, etc. de tal manera que surge la necesidad de establecer los Tipos primitivos
mecanismos adecuados para dar cuenta de la forma, tamaño y objetivo de los datos
almacenados. Según el tipo de microprocesador, estos tienen la capacidad para Nombre común Nombre C Longitud Procesador 64 bits
manipular o direccionar estructuras compuestas por uno, dos, cuatro, etc, bytes;
BYTE char 8 bits 8 bits
de donde se derivan los tipos que comunmente se conocen como: BYTE, WORD,
DWORD, QWORD y TWORD.
WORD short 16 bits 16 bits
La estructura mínima de información manipulable en un sistema de computación es
DWORD int 32 bits 32 bits
el BIT el cual se agrupa normalmente en bloques de 8 para formar un BYTE. Cabe
mencionar que los BITS no son direccionables directamente, sino a través de DWORD long 32 bits 64 bits
compuertas AND, OR, NOT, XOR, las cuales en C y C++ se escriben como &, |, ~ y ^,
conocidos como "Bitwise operators" u "Operadores de manipulación de bits". DWORD float 32 bits 32 bits

En C,C++ existe una serie de estructuras básicas o tipos primitivos, los cuales QWORD double 64 bits 64 bits
pueden ser usados por el programador para declarar variables, y también son el
fundamento sobre el cual se crean estructuras complejas. El tamaño de los tipos TWORD long double 80 bits 128 bits
primitivos no es estándar ya que los mismos dependen de factores tales como:
Nota: En el lenguaje C,C++ existe el operador sizeof(), con el cual se puede obtener
 Tipo del microprocesador el tamaño (número de bytes) ocupados por un tipo específico. Por ejemplo, sizeof
 El compilador (int) regresa el número de bytes ocupados por los datos de tipo int.

Sin embargo, en la actualidad, la mayoria de compiladores de C y C++ soportan los VARIABLES


siguientes tipos con la longitud indicada:
En C, C++ la sintaxis para declarar variables es: tipo id1 [, id2...] donde, tipo se memoria y con la idea de referirnos a los mismos mediante nombres usamos
refiere a uno de los tipos mostrados en la tabla anterior; id1 es el nombre con el identificadores de variables.
cual se identificará a la variable. Observe que si se quiere declarar más de una
variable en una línea de instrucción, las mismas deben separarse por medio de una MATRICES O ARREGLOS
coma.
Una Matriz (en inglés, array, también denominado arreglo) es una estructura usada
Ejemplos: para agrupar bajo un mismo nombre

char c; // La variable c es una variable char Listas de datos de un mismo tipo.

int i; // La variable i es una variable int El tipo de matriz puede ser cualquiera, sin embargo cada componente tiene que ser
del mismo tipo. En C estándar solamente da soporte para matrices estáticas,
float f; // La variable f es una variable float mientras que con C++ se pueden crear matrices dinámicas pudiendo usar la
librería estándar de plantillas (STL).
int x,y,z; // Las variables x,y,z son todas variables int, y declaradas a la vez
MATRICES ESTÁTICAS
De acuerdo con la tabla anterior y según las instrucciones anteriores, con la
primera, o sea ( char c;), se le está indicando al ordenador que reserve en la Una matriz estática es una estructura cuyo tamaño es determinado en tiempo de
memoria un espacio de tipo char (8 bits) y que el mismo será identificado bajo el compilación, es decir, una vez establecido el tamaño de la matriz ésta no podrá
nombre de c. La segunda instrucción ( int i;) le indica al ordenador que reserve en cambiarse durante el tiempo de ejecución. En C, C++ para declarar un arreglo
la memoria un espacio de tipo int (16 bits) y que el mismo será identificado bajo el estático de datos se emplea la sintaxis:
nombre de i. Luego, la instrucción ( float f;) le indica al ordenador que reserve en la
memoria un espacio de tipo float (32 bits) y que el mismo será identificado bajo el Tipo identificador [ [tamaño] ] [ = { lista de inicialización } ] ;donde, tipo se refiere
nombre de f. Por último, se le indica al compilador que reserve espacio para otras al tipo de datos que contendrá la matriz. El tipo puede ser cualquiera de los tipos
tres variables enteras identificadas como: x, y, z. Así, se puede dar cuenta cómo los estándar (char, int, float, etc.) o un tipo definido por el usuario. Es más, el tipo de la
tipos primitivos sirven con el propósito de estructurar los datos dentro de la matriz puede ser de una estructura creada con: struct, union y class.
Identificador se refiere al nombre que se le dará a la matriz. intA[0] = 100; // establece el valor del elemento 0 de intA a 100.

Tamaño es opcional e indica el número de elementos que contendrá la matriz. Si charA[3] = 'O'; // establece el valor del elemento 3 de charA a 'O'.
una matriz se declara sin tamaño, la misma no podrá contener elemento alguno a
menos que en la declaración se emplee una lista de inicialización. cout << longA[0]; // muestra por pantalla el elemento 0 de longA, que es longA[0].

Lista de inicialización es opcional y se usa para establecer valores para cada uno MATRICES DINÁMICAS
de los componentes de la matriz. Si la matriz es declarada con un tamaño
especifíco, el número de valores inicializados no podrá ser mayor a dicho tamaño. Una matriz dinámica es una estructura compleja y, ya que C estándar no da el
soporte para operar con estos tipos de estructuras, le corresponde al
Ejemplos: programador crear los algoritmos necesarios para su implementación. Crear lista
dinámicas de datos en C estándar no es una tarea para programadores inexpertos,
int intA[5]; ya que para lograr tal objetivo se necesita tener conocimentos solidos acerca de
los punteros y el comportamiento de los mismos. Los usuarios de C++ pueden
long longA[5] = { 1, 2, 3, 4, 5 }; auxiliarse de la librería estándar de plantillas, conocidas por sus siglas en ingles
como STL.
char charA[] = { 'a', 'b', 'c' };
ESTRUCTURAS COMPUESTAS (struct, union, class)
Acceso a los miembros de una matriz de datos:
Con base en los tipos básicos mostrados arriba, se pueden crear nuevos tipos con
En orden de acceder a los miembros de una matriz se debe indicar el nombre de la estructuras compuestas por uno o más de uno de los tipos mencionados. En C, C++
matriz seguido de dos corchetes, dentro de los cuales se debe especificar el índice en orden de crear nuevas estructuras se emplean las palabras reservadas struct,
del elemento deseado. Se debe aclarar que los índices son números o expresiones union y class.
enteras y que en C, C++ estos tienen un rango permitido de 0 a T-1 (T = tamaño de
la matriz). Struct: Esta orden se emplea para agrupar variables de tipos iguales o diferentes
en un solo registro, con la misma se pueden crear estructuras anónimas,
Ejemplos: Dadas las matrices intA, charA, longA (ejemplo anterior)
estructuras con nombre, y un tipo especial de estructura conocida como bit-fields ( Nota: Recuerde que lo que se muestra entre corchetes es opcional.
banderas o campos de bits ).
struct: Sintaxis ( variación uno, estructura anónima )
Union: Una union es similar a una struct, salvo que en una estructura creada con
union los campos o variables comparten una dirección de almacenamiento común. De acuerdo con la sintaxis general de la orden struct es posible crear estructuras
de datos anónimas. Solamente hay que tener en cuenta que en una declaración
Class: Una clase es una estructura en donde se agrupan variables y funciones, la anónima se debe definir al menos una variable al final de la declaración. Por
misma es usada en Programación Orientada al Objeto. Las clases no son ejemplo, con el siguiente fragmento de código:
soportadas por el C estándar.
struct { int a, b; } p1;
NOTA: Tanto las estructuras como las uniones y las clases pueden ser anónimas,
pero lo más recomendable es darle a las mismas un nombre. Si una estructura, se declara y define la variable estructurada p1, misma que se compone por los
union o clase posee nombre, esta pueden ser empleadas para declarar variables de miembros a y b; ambos del tipo int. Ahora bien, la sintaxis mostrada arriba no es
la misma y, lo más importante, puede ser usada para el paso de parámetros a tan común ni conveniente, ya que con la misma solamente se esta creando una
funciones. variable estructurada pero no un nuevo tipo. Es decir, si desearamos tener otra
variable que tuviera las mismas caracteristicas que posee la variable p1,
SINTAXIS GENERAL: struct necesitariamos escribir exactamente la misma instrucción, salvo que cambiando el
nombre de la variable. Por ejemplo:
struct [ <nombre tipo de estructura > ] {
struct { int a, b; } p2;
[ <tipo> <nombre-variable[, nombre-variable, ...]> ] ;
Por supuesto, en una misma línea de instrucción podemos definir más de una
[ <tipo> <nombre-variable[, nombre-variable, ...]> ] ; variable. Ejemplo:

... struct { int a, b; } p1, p2;

} [ <variables de estructura> ] ;
Entonces, para crear nuevos tipos con struct deberemos de modificar la sintaxis struct tiempo { int hora, minuto, segundo; };
mostrada en los ejemplos anteriores.
/* declaración de variables de tipo tiempo */
Sintaxis: Struct (variación dos, estructura con nombre)
struct tiempo t1, t2;
Observe que, la sintaxis para declarar estructuras con nombre es bastante
parecida a la sintaxis para declarar estructuras anónimas; salvo que en una Nota: En C++ puede obviarse la palabra struct a la hora de declarar variables. Así,
declaración de estructura con nombre se debe especificar el nombre deseado para en C++ la línea de instrución struct tiempo t1, t2; ( del ejemplo anterior) puede
la misma. Además, en una declaración de estructura con nombre la o las variables escibirse como: tiempo t1, t2;
definidas al final de la misma son opcionales.
Acceso a los miembros de una estructura
Ejemplos:
En orden de poder leer o escribir uno de los miembros de una variable
struct pareja { int a, b; } p1; estructurada, se debe usar el operador de acceso ( . ); o sea, el nombre de la
variable seguida por un punto seguido por el nombre del miembro o componente
En el fragmento de código anterior se declara la estructura identificada como deseado de la estructura. Por ejemplo, para acceder a los miembros de la variable
pareja, misma que se compone de los miembros a y b, ambos de tipo int. En el t1 (mostrada arriba) podemos hacerlo de la siguiente manera:
mismo ejemplo, se define la variable p1; la cual es una variable estructurada de tipo
pareja. t1.hora = 12;

Una vez que una estructura con nombre ha sido creada, la misma puede ser usada t1.minuto = 0;
para declarar cualquier número de variables. Por ejemplo, en el siguiente
fragmento de código se crea la estructura tiempo compuesta por los miembros t1.segundo = 0;
hora, minuto y segundo; todos del tipo int. En el mismo ejemplo, se declaran las
printf ("%i\n", t1.hora);
variables t1 y t2.
cout << t1.minuto << endl;
/* declaración de estructura tiempo */
ESTRUCTURAS ANIDADAS El término herencia se usa con gran frecuencia en Programación Orientada a
Objetos, y se le relaciona principalmente con las clases. Sin embargo, la herencia
Los miembros de una estructura pueden ser ellos mismos, otra estructura está presente siempre y cuando una estructura "struct", "union" o "class" posea a
previamente identificada, o bien una estructura anónima. Por ejemplo, en el otra estructura. En ese sentido, en C++ se presentan dos tipos de herencia:
siguiente fragmento de código, se crean las estructuras pareja y pareja2.
Obsérvese cómo dentro de los miembros de pareja2, se declara el miembro X, que Herencia por agregación o composición.
a su vez es una estructura del tipo pareja. Luego, las variables declaradas a raíz de
la estructura pareja2 poseerán los miembros variables a y b heredados de pareja, y Herencia por extensión
c.
Por ejemplo, en la definición de las estructuras pareja y pareja 2 del ejemplo
struct pareja { int a, b ; }; anterior, se dice que pareja2 hereda por composición todos los miembros de
pareja. Ahora, en el siguiente ejemplo se usa la sintaxis para que la estructura
struct pareja2 { struct pareja X; int c; } P3; pareja2 herede por extensión los miembros de pareja:

Ahora bien, para acceder a los miembros de una estructura dentro de otra // solo C++
estructura se emplea el mismo mecanismo de acceso (el punto). Por ejemplo, para
desplegar el miembro a de la variable P3 declarada en el ejemplo anterior, lo struct pareja { int a, b ; };
haremos más o menos así:
struct pareja2 : pareja { int c; } P3;

printf( "%i\n", P3.X.a ); Con esta forma de herencia, la estructura pareja 2 hereda de pareja los miembros
a y b, y además agrega un miembro c. Y a diferencia del ejemplo anterior, para
acceder a alguno de sus miembros heredados, basta con utilizar el mecanismo de
acceso (el punto).
HERENCIA
// solo C++
cout << P3.a << P3.b ; nos daremos cuenta que no basta con una prueba mediante AND ( X & 1 ), sino que
hay que realizar otros pasos.
ESTRUCTURA DE CAMPOS DE BITS
Precisamente, para problemas como el planteado arriba es por los que los
Un campo de bit es un elemento de una estructura definido en terminos de bits. lenguajes C y C++ soportan las estructuras de campos de bits. Por ejemplo, la
Usando un tipo especial de definición de struct, se pueden declarar elementos de estructura
estructura con rangos de 1 a 16 de largo (dependiendo de la arquitectura de la PC y
del compilador, el rango para una estructura de campos de bits puede ser de 1 a 16, struct campo_de_bit {
1 a 32, 1 a 64).
int bit_1 : 1;
Antes de ver un ejemplo del uso de struct para crear estructuras de campos de
bits, consideremos el caso en donde se tiene una variable del tipo short (16 bits) y int bits_2_a_5 : 4;
que para la misma se desea que los bits tengan significados específicos. Digamos
que el primer bit servirá para controlar alguna condición; los siguientes cuatro bits, int bit_6 : 1;
o sea del segundo al quinto bit, controlarán otra condición; el bit 6 tendrá otra
int bits_7_a_16 : 10;
función; y el resto, o sea del séptimo al decimosexto bit se emplearán para
controlar otra condición. De tal manera que si queremos, por ejemplo, saber si el
} bit_var;
primer bit de la variable tiene almacenado un 1 o un 0, podemos emplear la
siguiente sintaxis: Corresponde a la siguiente colección de campos bits:

int X = 123; Struct01.gif

int r = X & 1; El mecanismo de estructuras de campos de bits soportado por C,C++ es una
herramienta útil y poderosa, sobre todo en programación de bajo nivel; ya que
La cosa parece sencilla, pero ahora consideremos el caso en el cual deseamos
mediante el mismo es posible aislar y dar nombres a todos y cada uno de los bits de
saber cual es el valor contenido por el grupo de bits ( segundo al quinto ), entonces
un dato, y también crear en un mismo campo grupos de bits (como se mostró
arriba). Ahora bien, no hay que olvidar que la estructura mínima de información en De la misma manera que con la orden struct, con la orden union se pueden crear
un sistema de memoria de un PC es el bit, y que para aislar a cada uno de estos se estructuras con nombre y estructuras sin nombre.
puede emplear el operador AND ( &, en C ), pero mediante el mecanismo
mencionado el compilador genera los algoritmos necesarios para llevar a cabo el El mecanismo de acceso a los miembros de una union es igual al mecanismo de
aislamiento de los bits. Por ejemplo, para escribir y leer bit identificado como bit_1 acceso a los miembros de una struct.
de la variable bit_var del ejemplo anterior, podemos emplear las siguientes
instrucciones: Los miembros de una union comparten un espacio de almacenamiento común.

bit_var.bit_1 = 1; En una unión, el compilador reserva el espacio de almacenamiento para la misma


de acuerdo con el tipo de la variable de mayor tamaño.
printf("%i\n", bit_var.bit_1 );
Ejemplo: Unión anónima
NOTA: Acerca de las estructuras de campos de bits hay que aclarar que, aunque
cada uno de los campos de la estructura pueden declararse como enteros con unión { short a; long b; } u1;
signo o enteros sin signo, la misma no tendrá una longitud mayor a un entero largo.
En el ejemplo anterior se declara la variable u1, la cual es una estructura tipo unión.
El espacio de almacenamiento para la variable a es compartido por la variable b, en
consecuencia, al escribir sobre cualquiera de estas dos variables se altera el
unión: Sintaxis general contenido de ambas.

unión [ <nombre tipo de union > ] { Ejemplo: Unión con nombre

<tipo> <lista de variables>; unión ux { short a; long b; } u1;

} [ <variables de union> ] ; En el ejemplo anterior se declara la variable u1, la cual es una estructura tipo unión.
El espacio de almacenamiento para la variable a es compartido por la variable b. Es
decir, el compilador reservará espacio en la memoria para la variable de mayor
tamaño (que para éste caso es b ). Ahora bién, suponiendo que en su equipo el tipo El mecanismo para acceder a los miembros de una class es igual que aquel utilizado
long ocupa 32 bits y que el tipo short ocupa 16 bits, entonces la variable a ocupará para acceder a los miembros de una struct
solamente los 16 bits menos significativos, mientras que la variable b ocupará todo
el espacio, o sea los 32 bits; Observe que en la sintaxis se ha especificado el Las clases son algo así como "super" estructuras capaces de agrupar no solo
nombre ux, mismo que puede ser empleado para declarar cualquier número de datos miembros sino también funciones miembros. En el lenguaje común a los datos
variables de la union. Por ejemplo, a continuación se declaran las variables u2 y u3 miembros de una clase se les conoce como atributos; mientras que a las funciones
del tipo union ux creado en el ejemplo anterior. miembros de una clase se les llama métodos. Normalmente, los métodos se
emplean para leer o escribir los atributos. Es decir, la norma general es no
unión ux u2, u3; permitir el acceso directo a los atributos de una clase, con la idea de aumentar la
seguridad de los datos.
class: sintaxis[editar]
Enseguida se mostrará el código para crear la clase Pareja, misma que poseerá los
<classkey> <classname> [<:baselist>] { <member list> } [lista de variables] ; atributos a y b, y los métodos setA(), setB(); getA(), getB(), y mostrar();

<classkey> es una de las palabras "class", "struct", o "union". class Pareja {

<baselist> lista de clas(es) base de donde se deriva esta clase. <baselist> es int a, b;
opcional.
public:
<member list> declara los datos miembros y funciones miembros de la clase.
void setA(int n) { a = n; }
[lista de variables] esta entrada es opcional y se usa para instanciar variables u
objetos de esta clase. void setB(int n) { b = n; }

Nota: Dentro de una clase, los datos son llamados "datos miembros" las funciones int getA() { return a; }
son llamadas "funciones miembros".
int getB() { return b; }
void mostrar() { esta, las estructuras (struct) pueden extenderse de otras y heredar todos los
miembros de la estructura base. Otro punto que se demostrará aquí es el hecho de
cout << "a = " << a << "; b = " << b << endl; que las estructuras en C++ (no en C estándar) pueden contener miembros
funciones. Por supuesto, el compilador trata a una struct de una forma diferente
} que a una class. Entre algunas de las diferencias que se pueden mencionar
respecto a las estructuras contra las clases son:
} p1;
Los miembros de una struct son públicos por defecto, mientras que los miembros
Nota: Por omisión, los miembros de una clase son privados, lo cual significa que los
de una class son privados por defecto.
objetos instanciados de dicha clase no tendrán acceso a los mismos.
Los parámetros-argumentos struct se pasan normalmente por copia, los
Así, en el ejemplo anterior se está creando la clase Pareja, y al mismo tiempo el
parámetros-argumentos class se pasan normalmente por referencia.
objeto p1. Luego, para leer o escribir los atributos de p1 se debe hacer a traves de
los métodos definidos con tal objetivo. Por ejemplo, con el siguiente fragmento de // Este programa ha sido probado en Dev-C++, Borland C++ y Code::Blocks
código se establecen respectivamente a 100 y a 200 los atributos a y b; y
posteriormente se despliegan por medio del método mostrar. #include <iostream>

p1.setA(100); using namespace std;

p1.setB(200); // estructura tipo clase base

p1.mostrar(); struct Par {

STRUCT VS. CLASS int a, b;

Esta sección no pretende enseñar que el uso de la palabra struct es lo mismo que // constructor base
usar la palabra class. Sin embargo, como ya se mencionó en una sección anterior a
Par() { a = b = 0; } ParHijo(int a, int b) {

// destructor base this->a = a;

~Par() { cout << "hecho..." << endl; } this->b = b;

void setA(int n) { a = n; } }

void setB(int n) { b = n; } };

// prueba

void mostrar() { void test00() {

cout << "a = " << a << ", b = " << b << "; suma = " << a+b << endl; ParHijo p1(100, 200); // p1 es instancia de ParHijo

} p1.mostrar(); // se envía mensaje al método mostrar() de p1

}; }

// estructura tipo clase hija // funcion principal

// ParHijo es una extensión de Par, y por lo tanto hereda los miembros de Par int main()

struct ParHijo : Par { {

// constructor del hijo test00();


cin.get();

return 0;

}
APLICACIONES INFORMATICAS TERCER AÑO DE BACHILLERATO ELEMENTOS DEL PROYECTO ARQUITECTÓNICO

DIBUJO ARQUITECTÓNICO En la elaboración de un proyecto arquitectónico, hay una serie de elementos que
deben estar presentes, ellos incluyen un conjunto de dibujos específicos destinados
Dibujo técnico que incluye técnicas de dibujo a mano alzada, de dibujo con a ilustrar los diferentes aspectos constructivos. Entre los elementos de dibujo
instrumental y de dibujo por ordenador, para la representación realista de arquitectónico incluimos planos estructurales, de cimentación, de obra,
elementos arquitectónicos. Esta variante incluye el dibujo de edificios, de topográficos, instalaciones eléctricas, sanitarios, de secciones. También se incluyen
paisajismo y de urbanismo. perspectivas y diferentes vistas de la obra terminada. En el dibujo arquitectónico
aparecen representados además de las formas de las construcciones, la finalidad,
Las distintas representaciones gráficas abarcan la perspectiva, las proyecciones los requerimientos, el entorno, los materiales y acabados.
ortogonales, el croquis, los diseños por computadora, planos, representaciones 3D
y animadas. Consiste esencialmente en la representación geométrica de las  Planos estructurales: Contienen los elementos estructurales de la
diferentes vistas, cortes y secciones de una edificación o de alguna de sus partes edificación como vigas y pilares. Planos de cimentación: incluyen los
cuyo conjunto constituye lo que se denomina proyecto de ejecución de una cimientos y las características del terreno.
edificación. Este proyecto consta de distintos planos cuya información que se  Planos de obra: Son los que representan los muros, ventanas, techos,
suministra a los constructores de la obra. acabados.
 Planos topográficos: Contienen todas las características del terreno en
Al introducirnos en el dibujo arquitectónico nos ubicamos en la concepción visual el cual se va a edificar. Son un requisito previo del diseño, ya que
que altera el paisaje urbano, los espacios físicos de una obra o infraestructura civil determinan los niveles de suelos de la construcción.
y que es elaborada a escala de reducción para luego ser representada a una escala  Planos de instalaciones eléctricas: Contienen todas las instalaciones
real o natural, tiene como finalidad ayudar al hombre en su contexto social, cultural eléctricas y su conexión con la red.
e interdisciplinario con su ambiente, forma parte de lo que en fenomenología  Planos de sanitaria: Se encargan de lo que tiene que ver con
explica el porqué, según las experiencias humanas, se logra una mejora en la abastecimiento de agua y evacuación de líquidos usados. Planos de cortes
calidad de vida. La arquitectura ayuda a moldear la forma de vida de una sociedad y y secciones: muestran cortes de la edificación en los cuales se muestran
del individuo colectivamente. detalles constructivos y su emplazamiento en el edificio. Las perspectivas
son dibujos a mano alzada en los cuales se emplean técnicas mixtas de
dibujo artístico y dibujo con instrumental, como el uso de la perspectiva, mediante las oportunas notas o especificaciones complementarias que las definan
etc. inequívocamente.

PROCEDIMIENTO Y NORMAS DE EJECUCIÓN En cuanto a las estructuras se refiere, contendrán, en su caso:

Los planos son los documentos más utilizados de los que constituyen el proyecto y  Detalles de los dispositivos especiales, tales como apoyo o de enlace.
por ello han de ser completos, suficientes y concisos, es decir, incluir toda la  Igualmente se harán indicaciones sobre las contra flechas que convenga
información necesaria para poder ejecutar la obra objeto del proyecto en la forma establecer en los encofrados y procesos de ejecución. En cada plano
más concreta posible y sin dar información inútil o innecesaria. deberá figurar en la zona inferior derecha del mismo, un cuadro con las
características resistentes del hormigón, y de los aceros empleados en
Los planos han de contener todos los detalles necesarios para la completa y eficaz los elementos que este plano define, así como los niveles de control
representación de las obras. Los planos deben ser lo suficiente descriptivos para la previstos.
exacta realización de las obras, a cuyos efectos deberán poder deducirse de ellos
los planos auxiliares de obra o taller y las mediciones que sirvan de base para las PLANOS
valoraciones pertinentes.
Los planos son la representación gráfica y exhaustiva de todos los elementos que
Las dimensiones en todos los planos, generalmente, se acotarán en metros y con plantea un proyecto. Constituyen, los planos, la geometría plana de las obras
dos cifras decimales. Como excepción, los diámetros de armaduras, tuberías, etc. proyectadas de forma que las defina completamente en sus tres dimensiones.
se expresarán en milímetros, colocando detrás del símbolo la cifra que
corresponda. En los planos de taller, mobiliario, maquinaria, etc. las dimensiones se Los planos nos muestran cotas, dimensiones lineales superficiales y volumétricas
suelen acotar en mm. Deberá poder efectuarse, salvo en casos especiales, las de todas construcciones y acciones que comportan los trabajos los desarrollados
mediciones de todos los elementos sin utilizar más dimensiones que las acotadas. por el proyectista.

En particular, de no incluirse despiece detallado, deberá poderse deducir Los planos definen las obras que ha de desarrollar el Contratista y componen el
directamente de los planos, todas las dimensiones geométricas de los mismos, documento del proyecto más utilizado a pie de obra.
Planos de un proyecto en ejecución  Plano de elevación: Se realizan en planos de proyección verticales, es por
ello que siempre aparece la dimensión altura, la cual suministra
 Plano de macro localización: Se emplea para identificar el información sobre las distintas elevaciones del objeto, las elevaciones se
emplazamiento y situación del contorno del objeto en relación con la designan por letras: Elevación A, Elevación B.
planificación urbana, está destinado a determinar la posición precisa de  Plano de corte: El término corte se emplea en el dibujo arquitectónico
uno o varios objetos. para designar una vista ortográfica realizada en un plano de proyección
 Plano de microlocalización: Se presentan las dimensiones y Angulo del vertical producto del corte de un objeto. La representación del corte
terreno , orientación, calles circundantes, cotas de niveles de terreno y el permite apreciar interioridades del objeto como son: La altura del piso o
contorno del edificio se incluyen las distancias de estos en los límites del techo, además de informaciones que no se ofrecen claramente en los
terreno u otros puntos de referencia , por ejemplo: Muros de contención planos de plantas y elevación, un solo corte no siempre es suficiente para
,n , ejes de calles ,, árboles existentes o plantaciones que estén en el informar sobre todos los detalles interiores de una edificación por lo
proyecto. tanto se recomienda representar todos los que sean convenientes.
 Plano de planta: A la edificación se le aplica un corte horizontal el cual da
lugar al plano de planta. dicho corte se realiza ala la altura media de la Se dibuja el contorno seccionado por el plano cortante y los restantes detalles del
ventana que secciona muros y vanos, No debe realizarse a la altura fija objeto que se encuentran detrás del plano cortante de proyección.
del nivel del piso terminado ya que se desea en todos los casos que el
plano de planta sea lo más explícito posible. El plano de planta permite  Plano de sección: Tienen características similares a las de corte, con la
apreciar además de las dimensiones y la disposición de los distintos única diferencia que en estas solo se representa en el plano cortante el
locales las longitudes y espesores de los muros, los anchos de baños, contorno del objeto contenido en el corte con lo que se elimina la
puertas, ventanas, aparatos sanitarios y de otros elementos que son representación del contorno situado en su parte posterior. El objetivo de
empleados en las construcciones. El plano de plantas solo contiene estos dibujos es similar al de los de cortes.
dimensiones horizontales.
Las secciones tanto longitudinales como transversales son indispensables para
En una edificación que tenga varias plantas por cada planta se representa un plano conocer el interior de las piezas diseñadas y por tanto poder ejecutarlas. Las
que se va a llamar, primera planta, segunda planta, etc. plantas y alzados por si solas no pueden definir un volumen irregular, para la
dimensión tridimensional de una figura geométrica es preciso recurrir a las tanto ortogonales como oblicuas y cónicas son de importancia, porque al
secciones. dominarlas perfectamente se poseerá una base sólida para una comprensión mejor
de la geometría descriptiva.

LA PROYECCIÓN ORTOGONAL También, los diversos tipos de proyecciones como la del punto en el
espacio y sus diversas posiciones con sus respectivos ejercicios, la proyección de
la recta y sus diversas posiciones con las actividades que ayudan a comprender
mejor la proyección. El rebatimiento de los planos trata sobre la rotación de los
planos sobre sus ejes de forma tal que coincidan en un plano único el cual ayuda a
representar fácilmente las vistas principales de un modelo sin que sufra
deformaciones ópticas.

Debido a que con una sola vista no se pueden conocer las dimensiones de un objeto,
se van a utilizar tres vistas que son: Frente, Lateral y Superior.

Estas vistas van a dar una descripción más exacta del largo, ancho y alto del objeto.

Las proyecciones ortogonales tienen importancia como base para luego


poder comprender la geometría descriptiva. El dibujo de proyección es un
elemento esencial en cualquier industria, ya que todo producto elaborado debe
pasar primero por una fase de proyecto donde se realizan los diferentes dibujos
necesarios para la fabricación.

La proyección ortogonal abarcará los diversos trazos y normas para una


buena representación en el sistema ortogonal. El conocimiento de las proyecciones,
Debido a que es muy complicado estar trabajando con tres planos en tres
dimensiones, se van a acomodar en otra forma que nos permita trabajar en una
hoja de papel, es decir, dos dimensiones. Primero se definen dos líneas: la línea de
tierra (LT), y la línea que une los planos lateral y horizontal.

Supongamos que la línea de tierra y la traza están formadas por bisagras


que sujetan los planos; Si abrimos los planos horizontal y lateral y lo ponemos en el
Para hacer el dibujo de estas proyecciones se dispone de tres planos de la
mismo plano que el plano vertical, tendremos tres planos en uno.
siguiente manera:
De esta manera ya se pondrán las tres vistas en una hoja de papel. A este
Un horizontal y dos verticales, llamados respectivamente planos horizontal, vertical
acomodamiento que se da de tres planos en uno, se le da el nombre de Montea.
y lateral, los planos forman ángulos entre ellos.
Montea
Se coloca el objeto entre estos tres planos para obtener las proyecciones
ortogonales en ellos, usando las líneas de proyección.
Si se quiere representar una pirámide en la montea, se va a dibujar primero la vista
frontal que irá colocada en el plano vertical.

Las líneas de referencia que se utilizarán para acotar la vista frontal se van a
extender hacia la derecha y hacia abajo del plano vertical, cruzando los planos
lateral y horizontal.
La extensión de las líneas de referencia ayudará a dibujar la vista
superior y lateral rápidamente.

Se dibuja la vista superior que va a ir colocada en el plano horizontal, y las


nuevas líneas de referencia que servirán para acotar, se van a extender hacia la GEOMETRÍA DESCRIPTIVA
derecha hasta llegar al límite de este plano; de allí se extiende a 45º hacia arriba
hasta tocar el plano lateral. Por último, se extiende verticalmente hasta cruzar este La Geometría Descriptiva, que posee el carácter de ciencia aplicada, ha tenido un
plano. largo proceso de desarrollo desde las incipientes representaciones trazadas en
la edad de piedra. Los Elementos de Euclides, los estudios de
Descartes en geometría analítica y la crucial aportación de Gaspard Monge a
finales del siglo XVIII, quien la formula y la eleva a la condición de ciencia autónoma.

Desde la antigüedad, el hombre ha sentido siempre la necesidad de representar


gráficamente el entorno que le rodea, como lo demuestran los dibujos encontrados
en las cuevas prehistóricas, pero no es hasta el renacimiento cuando se intenta
representar la profundidad.
Las nuevas necesidades de representación del arte y de la técnica empujan a dos dimensiones los problemas espaciales garantizando la reversibilidad del
ciertos humanistas a estudiar propiedades geométricas para obtener nuevos proceso a través de la adecuada lectura.
métodos que les permitan representar fielmente la realidad. Todos ellos, al
descubrir la perspectiva y la sección crean la necesidad de sentar las bases PROYECCIÓN: Es la representación gráfica, sea cual fuere el método de
formales en la que se asiente la nueva forma de Geometría que ésta implica: representación de un objeto, tal como nosotros lo vemos. Los puntos de
la Geometría Proyectiva, cuyos principios fundamentales aparecen de la mano intersección entre el plano y los rayos de proyección que parten del punto de
de Gérard Desargues en el siglo XVII. Esta nueva Geometría también fue estudiada observación y pasan por los diferentes puntos del objeto, constituyen la proyección
por Blaise Pascal o por de la Hire, pero debido al gran interés suscitado por la del objeto.
Geometría Cartesiana y sus métodos, no alcanzó tanta difusión.
El posterior desarrollo de la técnica hizo necesario aplicar las teorías matemáticas En cualquier proyección intervienen tres elementos:
a la práctica, proceso que culminó en 1795 con la publicación de la obra de Gaspard
Monge «Geometría Descriptiva».  El punto de observación, ojo, foco de luz o punto de vista. Desde el punto
de observación se emiten rayos de proyección, los cuales pasan por todos
En la época actual se reconocen dos modelos: uno que considera la Geometría los puntos del objeto, penetrando en la superficie de proyección
Descriptiva como un lenguaje de representación y sus aplicaciones, y otro que la (proyección del objeto).
sitúa como un tratado de geometría. Aunque no es exactamente lo mismo, su  El objeto observado.
desarrollo ha estado asociado al de la Geometría Proyectiva.
 La superficie de proyección, pantalla, plano de cuadro, etc.
La geometría es la parte de las matemáticas que estudia las propiedades y las TIPOS DE PROYECCIONES.
medidas de las figuras en el plano o en el espacio.
Variando el punto de observación:
La Geometría Descriptiva es la ciencia que tiene por objeto el estudio de la
extensión considerada bajo sus tres dimensiones: línea, superficie y volumen. 1.- Proyección Cónica:
Es un conjunto de técnicas de carácter geométrico que permite representar el
espacio tridimensional sobre una superficie bidimensional y, por tanto, resolver en  El Observador está en el finito (se conoce su ubicación).
 El Objeto se ubica entre el Observador y el Plano de Proyección
 Los rayos de luz (proyección) parten de un mismo punto formando un  El Objeto se ubica entre el Observador y el Plano de Proyección
cono.  Los rayos de luz (proyección) son paralelos entre sí. Inciden de forma
 Se observa una sola vista donde se muestran solo dos (2) dimensiones del oblicua sobre el Plano de Proyección.
objeto.  Se observa en una sola vista las tres dimensiones de un objeto (alto,
ancho y largo).
2.- Proyección Cilíndrica Oblicua: 5.- Doble Proyección Ortogonal (Sistema Diédrico):

 El Observador está en el infinito (No se conoce su ubicación).  El Observador está en el infinito (No se conoce su ubicación). Y siempre es
 El Objeto se ubica entre el Observador y el Plano de Proyección paralelo a los Planos de Proyección.
 Los rayos de luz (proyección) son paralelos entre sí. Inciden de forma  El Objeto se ubica entre el Observador y el Plano de Proyección
oblicua sobre el Plano de Proyección.  Los rayos de luz (proyección) son paralelos entre sí. Inciden de forma
 Se observa una sola vista donde se muestran solo dos (2) dimensiones del ortogonal sobre el Plano de Proyección (90°).
objeto.  Se observan dos (2) vistas simultáneas ortogonales entre sí. Ambas vistas
muestran solo dos (2) dimensiones del objeto.
3.- Proyección Cilíndrica Ortogonal:

 El Observador está en el infinito (No se conoce su ubicación).


 El Objeto se ubica entre el Observador y el Plano de Proyección
 Los rayos de luz (proyección) son paralelos entre sí y forman un cilindro.
Inciden de forma ortogonal sobre el Plano de Proyección (90°).
 Se observa una sola vista donde se muestran solo dos (2) dimensiones del
objeto.

4.- Proyección Axonométrica (Perspectiva):

 El Observador está en el infinito (No se conoce su ubicación).


sí. De esta forma se obtiene dos proyecciones ortogonales del objeto en estudio,
por medio de las cuales, se puede concebir la forma tridimensional del mismo.

Si dos planos perpendiculares entre si se cortan forman el llamado ángulo diedro;


si son tres los planos perpendiculares que se cortan o coinciden en un mismo
punto, forman el ángulo triedro. Si son más de tres planos los que coinciden en un
mismo punto, forman el ángulo poliedro.

Los planos de proyección pueden ser infinitos; pero son tres los principales.
El estudio del sistema de la Doble Proyección Ortogonal o Proyección Diédrica, es el
objetivo principal de la materia de Geometría Descriptiva. - Plano Horizontal: Llamado también planta del objeto o plano de piso.
- Plano Vertical: Llamado también alzado o fachada.
Este sistema de proyección consiste, en definir la proyección ortogonal de los - Plano Lateral: O vista de perfil, que puede ser derecha o izquierda.
objetos en forma simultánea sobre dos planos de proyección perpendiculares entre
Las líneas donde se cruzan de forma perpendicular los tres Planos Principales, Si bien la utilidad fundamental del Sistema Acotado es el dibujo topográfico, también
forman los tres ejes cartesianos, llamados: Eje X o Línea de Tierra; Eje Y; Eje Z. pueden representarse sólidos en este sistema. Estos se verían como las
proyecciones horizontales del Sistema Diédrico Ortogonal, pero con las cotas de
El punto donde coinciden los tres ejes cartesianos se llama Origen de Coordenadas. sus vértices anotadas.

Se presentan, en base a los cuerpos y posiciones relativas de estos, las siguientes


variables:

Los cuerpos o sólidos a representar pueden ser:


 Radiados: Prisma, pirámide. (Rectos u oblicuos, regulares o irregulares)
 Poliédricos: Poliedros regulares. (Hexaedro y tetraedro.)
 De revolución: Cilindro, Cono (rectos u oblicuos) y Esfera.
Las posiciones relativas:

 Apoyados en el Plano Principal por alguno de sus elementos.


 Apoyados en un plano oblicuo.
Resolveré algunos ejercicios de forma que se recojan éstas variables.

Prisma recto, conocida la base irregular y la altura, apoyado por ésta en el plano de
proyección.
Este ejercicio no presenta dificultad. Se dibujan las bases, coincidentes y en
verdadera magnitud por pertenecer o ser paralelas al plano principal. Las aristas
laterales del prisma son proyectantes en un punto sobre los vértices de la base.
Finalmente se acota cada vértice.

PROYECCIÓN DE SÓLIDOS ELEMENTALES EN EL SISTEMA ACOTADO


Prisma recto, conocida la base irregular y la altura, apoyado por ésta en el plano de
proyección.

Representación de un prisma recto, conocida su base, irregular (ABC) y la magnitud


de la arista lateral, apoyado por ésta en un plano oblicuo dado P.
Representación de un prisma recto, conocida su base, irregular (ABC) y la magnitud
Dibujamos una de las aristas laterales del prisma pasando por uno de los puntos – de la arista lateral, apoyado por ésta en un plano oblicuo dado P.
C– de la base dada y perpendicular al plano P dado. Sobre ella y a partir del
mencionado punto, llevamos la magnitud dada para la arista lateral. Para poder
trabajar en verdadera magnitud abatiremos la recta R en Ro (en este caso sobre un Prisma oblicuo, conocidas las bases irregulares y apoyado por una de éstas en un
plano horizontal de cota 7). plano oblicuo P dado.
Conocemos la base ABC por su proyección así como el plano P donde está situada,
la proyección r de la recta que define la dirección y pendiente de la arista lateral
del prisma y se pide representarlo sabiendo que la magnitud de su arista lateral es
de tres unidades. Tendremos que situar la dirección r dada en uno de sus vértices
C y abatirla para, a partir de C situar en proyección tres unidades y obtener,
desabatiendo, el punto h de la base superior.
En la Figura 34 se representa el Hexaedro del mismo modo que hemos hecho en el
prisma de la Figura 31.

Hexaedro, apoyado por una de sus caras en un plano P paralelo al Plano de


Proyección y situado a una unidad de éste. Magnitud de la arista 4 unidades.

Hexaedro, apoyado por una de sus caras en un plano oblicuo al Plano de Proyección,
conociendo la proyección de la arista AC situada en dicho plano.
La arista AC del hexaedro está apoyada en el plano P dado. La abatimos,
simplificando por afinidad, sobre el Plano de Proyección para poder dibujar en
Prisma oblicuo, conocidas las bases irregulares y apoyado por una de éstas en un verdadera magnitud la cara ABDC del cubo que desabatimos posteriormente
plano oblicuo P dado. obteniendo la proyección de la base del cubo.
Las aristas laterales son rectas perpendiculares a la base del cubo y por tanto al
plano P que la contiene. Trazamos por uno de los vértices (C en la figura) una recta
Hexaedro, apoyado por una de sus caras en un plano P paralelo al Plano de R perpendicular al plano P (proyección r perpendicular a la traza del plano,
Proyección y situado a una unidad de éste. Magnitud de la arista 4 unidades. intervalo inverso y gradiente de sentido contrario). Trazamos, por la proyección de
los vértices A, B y D de la base, rectas paralelas a R que contendrán a las aristas
laterales del cuerpo.
Sobre la recta R y a partir del vértice C, llevamos la magnitud C-H de la arista del
cubo abatiendo para ello la recta R en Ro a partir de un punto auxiliar X tal y como
vimos en este ejercicio. Desabatiendo Ho obtenemos la proyección h, vértice de la
base superior y extremo de la arista lateral C-H. Por h trazamos rectas paralelas a
las aristas correspondientes de la base inferior. Completamos el trazado del cubo
designando sus partes vistas y ocultas. Figura 35.

Hexaedro, apoyado por una de sus caras en un plano oblicuo al Plano de Proyección,
conociendo la proyección de la arista AC situada en dicho plano.

Varios cuerpos sobre el plano principal.


 Pirámide regular de base cuadrada y paralela al plano principal (horizontal a una
unidad), conocida la proyección de una arista de la base y la altura (5
unidades). Figura 36
 Cilindro recto y de revolución de base horizontal, conocida la proyección del
centro de su base o(2), el diámetro 3 y la altura 3. Figura 37
 Cilindro recto y de revolución de eje horizontal, conocida la proyección del eje, la
altura y el diámetro de la base (3). Figura 38
 Esfera, conociendo el diámetro (3) y la proyección de su centro O.

Cono de revolución recto, con la base contenida en un plano oblicuo P, conociendo


la proyección del centro C de la base, el diámetro D de ésta y la altura.

SISTEMAS INFORMATICOS MULTIUSUARIOS Y EN RED


DEFINICION: Conjunto de equipos de transmisión de datos y programas
informáticos que permiten el intercambio de datos entre sistemas informáticos.

EVOLUCION HISTORICA DE LOS SISTEMAS DE COMUNICACION


Sistema acotado. Representación de pirámide, cilindro y esfera
 1830-El telégrafo se utiliza una sola línea
 1839-Aplican el telégrafo paralelo
Cono de revolución recto, con la base contenida en un plano oblicuo P, conociendo  1874-Utiliza una línea para transmitir varios mensajes
la proyección del centro C de la base, el diámetro D de ésta y la altura (4).  1876-Graham Bell inventa el teléfono
 1910-Aparece el teletipo  EMISOR Transmite datos
 1940-1950 Las telecomunicaciones se aplican al campo militar  MENSAJE Los datos transmitidos
 1958-Se crea el proyecto SAGE interconexión de centros militares para  MEDIO Recorrido de datos del origen al destino
control de aviones  RECEPTOR Destino de los datos
 1960-1970 Se da lugar al INTERNET.
 1980-1990 Se da lugar a la RTB y CYCLADES se suma RDSI.
MEDIOS, FORMA Y TIPOS DE TRANSMISION
ORGANISMOS DE NORMALIZACION
MEDIOS
UIT UNION INTERNACIONAL DE TELECOMUNICACIONES: Está compuesto por 4
áreas  AEREOS: Señales de radio eléctricas
 SOLIDOS:
 IFRB Junta internacional de registro de frecuencias
o -Cobre
 Secretaria general
o -Par trenzado
 CCIRB Comité consultivo internacional de radio
o -Cable coaxial
 CCITT Comité consultivo internacional de telefonía y telégrafo
o -Fibra óptica
ISO. ORGANIZACION INTERNACIONAL DE ESTANDARES
TIPOS
Responsable del desarrollo y mantenimiento del modelo de referencia de
 TRANSMISION SIMPLEX: Produce en un solo sentido.
interconexión de sistemas abiertos.
 TRANSMISION FULL-DUPLEX: Ambos sentidos al mismo tiempo.
IEEE INSTITUTO DE INGENIEROS ELECTRICOS Y ELECTRONICOS  TRANSMISION HALF-DUPLEX: Ambos sentidos alternativos.
 TRANSMISION ASINCRONA: Transmite y recibe ese rato.
Formado por fabricantes profesionales.
 TRANSMISION SINCRONICA: Transmite pero no recibe.
DESCRIPCION GENERAL DE UN SISTEMA DE COMUNICACION DE DATOS

Es el proceso de comunicar información en forma binaria y requiere 4 elementos:


FORMAS
 TRANSMISION EN SERIE: Bits se transmiten uno a uno.
 TRANSMISION EN PARALEL: Bits se transmiten en grupo sobre barias
EL MODELO OSI
líneas.
Se estructura en 7 niveles:

 Nivel físico
REDES DE PUNTO A PUNTO
 Nivel de enlace de datos.
Son aquellos que responden a un tipo de arquitectura de red en las que cada canal  Nivel de red.
de datos se usa para comunicar únicamente dos nodos en contraposición a las  Nivel de transporte.
redes multipunto.  Nivel de sección.
 Nivel de presentacion.
PROTOCO  Nivel de aplicación.
Conjunto de reglas que posibilitan la trasferencia de datos entre dos o más CLASIFICACION LINEAS DE COMUNICACION
computadoras
 LINEAS CONMUTDAS: Requiere marcar un código para la comunicación.
ARQUITECTURA DE NIVELES  LINEAS DIDICADAS: Permite conexión en dos o más puntos.
Es para reducir la complejidad de la comunicación de datos  LINEAS PUNTO PUNTO: Enlazan dos o más puntos DTE
 LINES MULTIPUNTO: Almacenan tres o más DTE.
INFORMACION DE CONTROL  LINEAS DIGITALES: Bits transmite en forma de señales.

Cada nivel se comporta como si estuviera comunicándose con su contra parte

TIPOS DE REDES

INFORMACION DE INTERFASE  CONMUTADAS POR CIRCUITOS


En esta red para comunicarse se realiza una llamada
Dirigida a nivel adyacente con el cual se está interactuando
 CONMUTADAS POR MENSAJES
Puede ser en un computador en el cual almacena borra o contesta el El Transmisor pasa el mensaje al canal en forma de señal. Para lograr una
mensaje. transmisión eficiente y efectiva, se deben desarrollar varias operaciones de
procesamiento de la señal. La más común e importante es la modulación, un
MODELO DE UN SISTEMA DE COMUNICACIONES
proceso que se distingue por el acoplamiento de la señal transmitida a las
La Comunicación es la transferencia de información con sentido desde un lugar propiedades del canal, por medio de una onda portadora.
(remitente, origen, fuente, transmisor) a otro lugar (destino, receptor). Por otra
El Canal de Transmisión o medio es el enlace eléctrico entre el transmisor y el
parte Información es un patrón físico al cual se le ha asignado un significado
receptor, siendo el puente de unión entre la fuente y el destino. Este medio puede
comúnmente acordado. El patrón debe ser único (separado y distinto), capaz de ser
ser un par de alambres, un cable coaxial, el aire, etc. Pero sin importar el tipo,
enviado por el transmisor, y capaz de ser detectado y entendido por el receptor.
todos los medios de transmisión se caracterizan por la atenuación, la disminución
Si la información es intercambiada entre comunicadores humanos, por lo general progresiva de la potencia de la señal conforme aumenta la distancia.
se transmite en forma de sonido, luz o patrones de textura en forma tal que pueda
La función del Receptor es extraer del canal la señal deseada y entregarla al
ser detectada por los sentidos primarios del oído, vista y tacto. El receptor asumirá
transductor de salida. Como las señales son frecuentemente muy débiles, como
que no se está comunicando información si no se reciben patrones reconocibles.
resultado de la atenuación, el receptor debe tener varias etapas de amplificación.
En la siguiente figura se muestra un diagrama a bloques del modelo básico de un En todo caso, la operación clave que ejecuta el receptor es la demodulación, el caso
sistema de comunicaciones, en éste se muestran los principales componentes que inverso del proceso de modulación del transmisor, con lo cual vuelve la señal a su
permiten la comunicación. forma original.

Sistemas de Comunicaciones SISTEMAS DE COMUNICACIONES

Elementos básicos de un sistema de comunicaciones  Dato: Técnicamente un dato es un hecho o una cifra en bruto, sin
procesar.
ELEMENTOS DEL SISTEMA  Información: Conjunto de datos procesados expresados con un sentido
lógico.
En toda comunicación existen tres elementos básicos (imprescindibles uno del otro)
 Mensaje: Información que se pretende llegue del emisor al receptor por
en un sistema de comunicación: el transmisor, el canal de transmisión y el
medio de un sistema de comunicación.
receptor. Cada uno tiene una función característica.
 Sistema: Conjunto de elementos interrelacionados armónicamente para Periodo ( T ): El tiempo que tarda en realizar una oscilación
alcanzar un objetivo común.
Frecuencia ( F): Es el número de oscilaciones (vibraciones) que efectúa cualquier
 Sistema Operativo: Programa de control maestro que administra el
punto de la onda en un segundo.
funcionamiento del sistema informático interactuando con los programas
de aplicación. Tipos de Ondas: Ondas transversales y Ondas longitudinales
 Sistema de Comunicación: Sistema que transmite información desde un
lugar (emisor) a otro (receptor). En función del soporte que requieren para su propagación las ondas se clasifican
 Origen: Quien posee la información. en mecánicas y electromagnéticas. Las mecánicas requieren un medio elástico
 Destino: Quien espera recibir la información para propagarse y las electromagnéticas se pueden propagar en el vacío.
 Emisor: Punto de origen que emplea un sistema de comunicación para Si las clasificamos en función de cómo vibran respecto a la dirección de
transmitir un mensaje.
propagación tenemos las ondas transversales y las longitudinales.
 Receptor: Punto de destino del mensaje que se ha transmitido por un
medio de un sistema de comunicación Si las partículas del medio en el que se propaga la perturbación vibran
 Canal : Es el medio de transmisión de los mensajes perpendicularmente a la dirección de propagación las ondas se llaman
transversales. Si vibran en la misma dirección se llaman longitudinales.
TIPOS DE ONDAS
CODIFICACIÓN DE LA INFORMACIÓN
Onda: Una onda es una perturbación que se propaga, las ondas materiales (todas
menos las electromagnéticas) requieren un medio elástico para propagarse. Definición: La información para ser transmitida, necesita ser adaptada al medio de
transmisión. Para ello, será preciso codificarla de tal forma que pueda asegurarse
El medio elástico se deforma y se recupera vibrando al paso de la onda.
una recepción clara y segura.
 Longitud de onda, frecuencia y periodo
Si tenemos la información en un determinado alfabeto fuente y queremos
Ciclo (Oscilación): Serie completa de sucesos transformarla en otro alfabeto destino podemos definir codificación como la
realización de dicha transformación, siendo el código la correspondencia existente
Longitud de onda: como la distancia que recorre el pulso mientras un punto realiza entre cada símbolo del alfabeto fuente y cada conjunto de símbolos (palabras) del
una oscilación completa. alfabeto destino.
 Código Morse: Primer código utilizado para la transmisión a distancia a Las señales que maneja un ordenador son señales biestado a las que se asignan los
través de señales eléctricas, inventado por el físico norte americano valores 0 y 1, es decir, el ordenador sólo puede trabajar con información binaria. El
Samuel F. B. Morse en 1820 lo que dio origen al telégrafo problema es que la información que maneja el usuario y que le envía al ordenador
electromagnético. Este en 1896 se convirtió en el telégrafo sin hilos o no tiene por qué ser información binaria. El usuario trabaja con números en base
radio telégrafo. diez y con las letras del abecedario, por ejemplo, y no con ceros y unos. Cualquier
El código Morse está conformado por puntos y rayas que se diferencian objeto se representa en un ordenador mediante una secuencia de bits y, por tanto,
en el tiempo de duración de la señal activa o 1. Un 1 corto corresponde al es necesario un sistema de codificación que establezca una correspondencia entre
punto y un largo (aproximadamente de duración de tres veces el punto) la información que se le da a un ordenador y esas secuencias de bit.
corresponde a la raya. Entre cada dos símbolos (punto o raya) existe un 0
 objeto1 >> secuencia1
separador o ausencia de señal, cuya duración es aproximadamente la del
 objeto2 >> secuencia2
punto. La separación entre caracteres es tres veces mayor que la del
punto, y para la separación de palabras transmitidas el tiempo es de 7  objeto3 >> secuencia3
veces el del punto. Todas estas referencias y la propia duración del punto Un ejemplo de código binario para las cuatro primeras letras del abecedario podría
en unidades de tiempo dependerán de la velocidad de transmisión que se ser:
utilice.
 A >> 00
 Código Baudot: Inventado por Emile Baudot en 1874. Se trata de un código  B >> 01
de 5 bits capaz de representar hasta 32 caracteres distintos, pero tiene  C >> 10
además 2 de ellos que permiten conmutar entre dos grupos denominados  D >> 11
letras y figuras. El grupo de letras contiene el abecedario completo de
El número de objetos diferentes que se pueden codificar con n bits son 2n (2
mayúsculas de la A a la Z, mientras que el grupo de figuras contiene las
elevado a n). Así, con 2 bits podemos codificar como muchos 4 objetos, y con 8 bits
cifras del 0 al 9, los signos de puntuación y caracteres especiales hasta
(un byte) podemos codificar hasta 256 objetos.
un total de 26.
 Código Binario: El proceso de asignar a cada objeto perteneciente a un
conjunto una secuencia de bits, o especificar las reglas que lo relacionan,
es crear un código binario.
Existen varios criterios genéricos para establecer esta correspondencia que dan transmitida por un medio físico o por espacio experimenta una pérdida de
lugar a tipos diferentes de códigos. Dichos criterios se denominan sistemas de potencia denominada atenuación. Se mide normalmente en decibelios por
codificación unidad de distancia

Utilidad del Código: Un código se dice que es útil cuando existe una La atenuación debe de tenerse en cuenta a la hora de diseñar un circuito por la
correspondencia biunívoca y recíproca entre los símbolos del alfabeto fuente y las necesidad que existe de recibir la señal con un nivel suficiente y una baja relación
palabras del alfabeto destino. señal - ruido que asegure la calidad de la transmisión.

Código Redundante: Cuando existen palabras del alfabeto destino no utilizadas o  Distorsión: Es la deformación que experimenta la señal al ser transmitida
sin significado o parte de los símbolos podrían no ser necesarios, aunque en por un canal debida a la respuesta imperfecta del sistema a ella misma. A
general, estos símbolos se utilizan para controlar posibles errores. diferencia del ruido y la interferencia, la distorsión desaparece cuando la
señal deja de aplicarse.
PROBLEMAS DE LA TRANSMISION  Interferencia: Es la contaminación por señales extrañas, generalmente
artificiales y de forma similar a las de la señal. El problema es
CONTAMINACIONES DE LA SEÑAL
particularmente común en emisiones de radio, donde pueden ser captadas
Durante la transmisión de la señal ocurren ciertos efectos no deseados. Uno de dos o más señales simultáneamente por el receptor. La solución al
ellos es la atenuación, la cual reduce la intensidad de la señal; sin embargo, son problema de la interferencia es obvia; eliminar en una u otra forma la
más serios la distorsión, la interferencia y el ruido, los cuales se manifiestan como señal interferente o su fuente. En este caso es posible una solución
alteraciones de la forma de la señal. Al introducirse estas contaminaciones al perfecta, sí bien no siempre práctica.
sistema, es una práctica común y conveniente imputárselas, pues el transmisor y el  Ruido: Interferencia externa sobre la señal transmitida. Por ruido se debe
receptor son considerados ideales. En términos generales, cualquier perturbación de entender las señales aleatorias e impredecibles de tipo eléctrico
no intencional de la señal se puede clasificar como "ruido", y algunas veces es originadas en forma natural dentro o fuera del sistema. Cuando estas
difícil distinguir las diferentes causas que originan una señal contaminada. Existen señales se agregan a la señal portadora de la información, ésta puede
buenas razones y bases para separar estos tres efectos, de la manera siguiente: quedar en gran parte oculta o eliminada totalmente. Por supuesto que
podemos decir lo mismo en relación a la interferencia y la distorsión y en
 Atenuación: Desgaste que sufre la señal de energía ocasionada por la
distancia entre el emisor y el receptor. Toda señal eléctrica al ser
cuanto al ruido que no puede ser eliminado nunca completamente, ni aún inmediatamente superior y solicitar servicios a la capa inmediatamente
en teoría. inferior, haciendo trasparente el modo en que estos se llevan a cabo.
 Interface entre capas: Son las normas de comunicación entre capas, o
ARQUITECTURA DE LAS COMUNICACIONES
sea la definición de los servicios y operaciones que la capa inferior ofrece
La arquitectura de las comunicaciones es una estructura organizada a la superior.
jerárquicamente con el fin de permitir el intercambio de datos entre niveles lógicos  Primitivas: Son llamadas entrantes o salientes en cada una de las capas
semejantes en distintas máquinas o terminales de la misma o distinta red. que sirven para solicitar servicios, devolver resultados, confirmar las
peticiones, etc.
 Ordenadores: equipos emisores y receptores con capacidad de mantener  Arquitectura de la red: Conjunto organizado de capas y protocolos de la
una comunicación. misma.
 Host o nodo: Ordenador con capacidad de interactuar en red.  Sistemas abiertos: conjunto de uno o más ordenadores, el software
 Sistema aislado: Ordenador incapaz de comunicarse con el exterior por asociado, los periféricos, los procesos físicos, los medios de transmisión
vía telemática. de la información, etc. que constituyen un todo autónomo capaz de
 Sistema temporalmente remoto: Un ordenador con recursos telemáticos realizar un tratamiento a la información, interconectarse con otros de
de comunicación que realiza conexiones temporales. Las estaciones de los acuerdo a normas establecidas.
usuarios solo pertenecen a la red cuando se produce la conexión.  OSI (open system interconnection) Interconexión de sistemas abiertos: Se
 Redes de ordenadores: Distintos equipos se conectan a través de redes ocupa del intercambio de información entre sistemas y su objetivo es la
de datos, pero sin perder su identidad propia. confección de una serie de normas que permitan la intercomunicación
 Sistemas distribuidos: Está compuesto por una red de ordenadores que es entre estos.
totalmente transparente al usuario. La red se comporta como un sistema
que gestiona todos los recursos de los ordenadores que posee. EL MODELO ARQUITECTÓNICO DE CAPAS DE RED
 Protocolo de comunicaciones: Es un conjunto de reglas perfectamente
En una arquitectura de red basada en capas, existen varios niveles de capas con
ordenadas y convenidas de mutuo acuerdo entre los participantes en una
interfaces entre ellas. Las interfaces proporcionan los puntos de acceso a los
comunicación y su misión es regular algún aspecto de la misma.
diferentes servicios que cada capa provee; la primera capa no tiene otra por debajo
 Capa o nivel: Es una estructura jerarquizada de las diferentes funciones y
servicios que realiza la red. Su misión es proveer servicios a la capa
a quien solicitar servicios, ésta se encarga de operar con los medios de un trabajo para ella.
transmisión.
Una entidad es informada de que ha
Una ventaja de esta arquitectura es que es poco sensible a los cambios Indicación .indication ocurrido un evento.
tecnológicos que se producen por evolución en las funciones y en los servicios de
las redes lo que las hace enormemente flexibles. Una entidad responde con una primitiva a
Respuesta .response un evento producido anteriormente
El proceso de comunicación se produce entre capas equivalentes de dos host
Una entidad es informada acerca de una
distintos. La información va descendiendo por la estructura de capas del host
Confirmación .confirm solicitud efectuada anteriormente
emisor hasta llegar al nivel más bajo, de donde pasa al host receptor y aquí se
inicia el viaje ascendente hasta llegar a la capa equivalente en el host de destino. La
capa N de un host emisor se comunica con la capa N de un receptor a través de un
protocolo que enmascara el proceso desencadenado en las capas de nivel inferior
haciéndolo transparente. La capa 1 opera con transmisiones en el nivel físico, es OTRAS ARQUITECTURAS Y REDES
decir con señales; el resto de las capas opera con comunicaciones.
Siendo el modelo de referencia OSI teórico, no hay ninguna red 100% OSI, y existen
 La comunicación entre las capas: La comunicación se realiza a través del otras arquitecturas que han evolucionado, siendo compatibles con OSI. Algunas son:
interface, y se da por un sistema de llamadas y respuestas denominadas
primitivas. Cada servicio es el conjunto de primitivas que cada capa LA ARQUITECTURA SNA DE IBM
ofrece a través de su interface a la capa superior y está nominado por un SNA (system network architecture). Red propia de IBM. El modelo OSI se configuró a
SAP que lo identifica unívocamente dentro de cada interface. partir de SNA, de donde toma el número de funciones aproximadas de sus capas.
OSI define cuatro primitivas: La primera versión comenzó en 1974 para gestionar redes en forma de árbol con un
solo host al que se conectaban sus terminales. La segunda versión en 1976, en ella
Primitiva Nombre OSI Significado
se permitía varios host con sus respectivos árboles pudiendo establecer
comunicación entre ellos. En 1985 se incluyeron el resto de las topologías y
Solicitud .request Una entidad solicita que un servicio realice relaciones de área local.
SNA está constituido por un conjunto de máquinas conectadas a la red y llamadas Enlace Enlace Enlace
nodos, que se pueden denominar como terminales, controladores, procesadores
frontales y los hosts. Físico Físico Físico

Cada uno de estos nodos tiene una NAU (network address unit) unidad de
direccionamiento de red, que es el software por el que un proceso puede llegar a LA ARQUITECTURA DE ARPANET
utilizar la red. Hay varios tipos de NAU. EL conjunto de hardware y software
 Arpanet no sigue el modelo OSI. Tiene protocolos equivalentes a lo que en
controlado por una NAU de tipo SSCP es lo que se llama dominio en SNA.
OSI serían la capa de red y de transporte. Los más conocidos son:
El número de capas es igual al de OSI, pero no hay correspondencia exacta entre  IP (Internet protocol): Protocolo entre redes. Protocolo sin conexión
ellas. diseñado para la interconexión de redes WAN y LAN.

LA ARQUITECTURA DNA DE DEC TCP (Transmission control protocol) protocolo de control de transmisión. Protocolo
orientado a la conexión equivalente en OSI a la capa de transporte en cuento a su
DNA (digital network architecture) es la arquitectura de red compuesta por DEC función, aunque difiere de su formato.
(digital equipment corporation). Consta de siete capas semejantes a las de OSI.
Entre las capas de presentación y sesión, ARPANET no tiene protocolos, pero en la
Relación de las capas entre las arquitecturas OSI, SNA y DNA de aplicación si hay varios. Los más conocidos son:

SNA DE IBM OSI DNA DE DEC  FTP (files trasnfer protocol) protocolo de transferencia de ficheros de un
ordenador a otro.
Servicio de transacción Aplicación Usuario  SMPT (simple Mail Protocol Transfer) protocolo de simple de
transferencia de correo electrónico a través de la red.
Administración de funciones Presentación Gestión de red
 TELNET: protocolo de conexión remota utilizado para conexiones remotas
Control de flujo Sesión Sesión y control de red gestionadas como terminales virtuales.
Control de transmisión Transporte Extremos de comunicaciones  ARPANET se ha convertido un estándar de hecho, multiplicando su
utilización debido al Internet.
Control de rutas Red Encaminamiento
RAL 1924 Nyquist 1948 Shannon

LA ESTRUCUTURA DE LAS REDES DE AREA LOCAL


Caudal máximo = 2H*log2V bps Caudal máximo H* log2 (1+S/N)
Un ordenador se puede considerar como una entidad que se relaciona con otros
ordenadores o dispositivos de comunicación. Cuando las comunicaciones entre H = ancho de banda del canal
equipos se extiende en una zona geográfica limitada, se exige una elevada velocidad V= número de niveles posibles para la H = ancho de banda del canal
de transmisión de datos y una tasa de error mínima, nos encontramos entonces en señal
el campo de las LAN (Local Área Network) o redes de área local. Una LAN puede S/N= relación señal ruido en escala
incorporar protocolos de múltiples capas, aunque número de protocolos pertenece Bit= pulso binario “0” y “1” lineal o decibelios
a las capas inferiores.
Caudal proporcionar al ancho de banda Caudal proporcionar al ancho de banda
El Nivel Físico
A mayor ancho de banda mayor
Está regido por la física de la comunicación. Una de las dificultades en la transmisión A mayor proporción S/N, mayor caudal
transmisión de datos se debe a la limitación del ancho de banda de los equipos (si
es pequeña transmite a baja velocidad), otro problema es el ruido, si la razón El crecimientos de la velocidad está
señal/ruido es baja, aparecen dificultades en la interpretación de la señal y limitado por el ancho de banda, pero se
desciende el caudal de información. puede incrementar utilizando señales
multiestado aunque esto disminuye la
La capacidad de un canal: para averiguar la máxima capacidad de comunicación de diferencia entre dos niveles
datos (caudal) de un canal, tenemos dos respuestas: consecutivos, haciendo difícil
distinguirlos Es independiente del número de niveles
Velocidad Máxima de Datos

CAUDAL EN UN CANAL IDEAL SIN RUIDO CAUDAL EN UN CANAL CON RUIDO ALEATORIO
 Tipologías básicas: Es la forma de la red organizada de acuerdo a normas
establecidas y estándares propuestos
ESTRELLA ANILLO BUS  Transmisiones digitales a través de redes digitales de transmisión de
datos utilizando técnicas de modulación digital
 técnicas de multiplicación en el tiempo y la frecuencia
Todos se conectan a una
Todos los puestos se única línea de transmisión  técnicas de concentración de canales
conectan a un puesto que recorre la ubicación  Técnicas de conmutación: de circuitos, de mensajes y de paquetes
central a través de líneas física de todos los  Transmisión en serie o paralelo
de transmisión Conecta todos los equipos ordenadores. Simple en su  Transmisión síncrona o asíncrona
individuales a través de un anillo físico funcionamiento
Combinando estas hipótesis se proporcionan sistemas de establecimiento de las
No hay problema en las No hay problema de Sensible a problemas de
comunicaciones tráfico tráfico características de acceso al medio de transmisión. Un sistema de contienda se
establece cuando se elige una solución concreta. El tiempo de contienda se da
La rotura del anillo cuando dos estaciones desean transmitir y esperan que el canal se libere, volcando
Si falla el nodo central no produce un fallo general Sensible a rotura de los
su información simultáneamente. Algunos de estos sistemas son:
funcionara nada en la red de la red cables
Ejemplo: ordenador Ejemplo: Ethernet con EL PROTOCOLO ALOHA: Cualquier estación que tenga datos que transmitir lo hace
central y terminales Ejemplo: token ring cable coaxial inmediatamente y esto puede provocar colisiones que se descubren escuchando el
canal: si lo que se escucha no es lo que se puso es que hay una colisión. En este
 Funciones del nivel físico: Define las características necesarias para caso se espera un tiempo y se vuelve a intentar nuevamente. El rendimiento es muy
conseguir que las tramas de bits puedan ser emitidas por los medios de bajo y especialmente crítico cuando se incrementa el número de estaciones en la
transmisión adecuados en forma de señales. Para ello se utiliza una gran red.
cantidad de recursos:
PROTOCOLO CSMA P-PERSISTENTE (CARRIER SENSE MÚLTIPLE ACCESS):
Los medios de transmisión de señal: Cables de pares, coaxiales, fibras ópticas, etc. Permiten el acceso múltiple a un único canal y averiguan si el canal esta libre por
detección en él de señal portadora. Llevan asociados un índice de persistencia p
 Transmisiones analógicas a través de líneas telefónicas utilizando (número real entre cero y uno) lo que indica una probabilidad de envió. Si dos
módems con diferentes técnicas de modulación. estaciones estuvieran esperando la liberación del canal a la vez con un protocolo 1-
persistente, las dos iniciarían la transmisión simultáneamente y habría colisión; Si
la probabilidad de emisión no es 1 sino que es menor, entonces la probabilidad de  Servicio sin conexión y con confirmación: por cada trama transmitida
colisión también descenderá. Existe un protocolo CSMA no persistente: si el canal se espera la confirmación, si no llega o se confirma que la transmisión fue
está ocupado se vuelve a intentar después de un tiempo aleatorio, haciendo más errónea, se retransmite la trama.
difícil que dos estaciones coincidan en leer el canal libre y así hay una menos  Servicio con conexión: antes de producir el intercambio de tramas se
probabilidad de colisión. establece una conexión entre emisor y receptor.

PROTOCOLO CSMA/CD: La técnica CD (collission detect) implica que las estaciones NECESIDADES, USOS Y APLICACIONES DE UNA RED DE ÁREA LOCAL
permanezcan a la escucha mientras transmiten sus tramas, si reconocen una
colisión suspenden inmediatamente la transmisión ahorrando tiempo y ancho de Necesidades de una Red de Área Local
banda del canal. Es necesario fijar un método de acceso estándar entre los equipos, para que sepan
cómo los equipos intercambian datos, en especial cuando más de dos equipos
PROTOCOLO SIN COLISIÓN: Para establecer la contienda, la red divide su tiempo
comparten el mismo soporte físico.
de contienda en ranuras, una ranura de tiempo por cada estación conectada a la
USOS
red. Cada estación escribe en el canal un bit “1” indicando que necesita transmitir o
Una red de área local, red local o LAN (del inglés local área network) es la
“0” indicando que no necesita competir por los recursos de la red, así ninguna
interconexión de una o varias computadoras y periféricos. Su extensión está
estación se adelantará a otra
limitada físicamente a un edificio o a un entorno de 200 metros, con repetidores
LA SUBCAPA SUPERIOR DEL NIVEL DE ENLACE podría llegar a la distancia de un campo de 1 kilómetro. Su aplicación más extendida
es la interconexión de computadoras personales y estaciones de trabajo en
Su principal función es garantizar la comunicación libre de errores de las tramas oficinas, fábricas, etc.
construidas con la información recibida del nivel de red.

 Servicios: Provee tres tipos de servicios:


 Servicio sin conexión y sin confirmación: envía tramas sin esperar
confirmación. La responsabilidad de corregir algún error esta en las capa
superiores. Es un servicio propio de redes con tasa de error muy baja y
con aplicaciones en tiempo real.
La manera en la que los equipos se encuentran físicamente interconectados se
denomina topología física. Las topologías físicas básicas son:
 Topología en anillo
 Topología de bus
 Topología de estrella

APLICACIONES DE REDES LAN


Su aplicación más extendida es la interconexión de computadoras personales y
estaciones de trabajo en oficinas, fábricas, etc.

 Diseño inicial: topología, componentes hardware y software de la RAL.

TOPOLOGÍAS DE RED DE ÁREA LOCAL (RAL)


Los dispositivos de hardware solos no son suficientes para crear una red de área
local que pueda utilizarse. También es necesario fijar un método de acceso
estándar entre los equipos, para que sepan cómo los equipos intercambian datos,
en especial cuando más de dos equipos comparten el mismo soporte físico. Este
método de acceso se denomina topología lógica. La topología lógica se lleva a cabo
mediante un protocolo de acceso. Los protocolos de acceso más comunes son:
 Ethernet
 Red en anillo
COMPONENTES DE HARDWARE DE UNA RED DE ÁREA LOCAL
Una red de área local está compuesta por equipos conectados mediante un
conjunto de elementos de software y hardware. Los elementos de hardware
utilizados para la conexión de los equipos son:

 La tarjeta de red(a veces denominada “acoplador”): Se trata de una


tarjeta que se conecta a la placa madre del equipo y que se comunica con el medio
físico, es decir, con las líneas físicas a través de las cuales viaja la información.  El soporte físico de interconexión: Es el soporte (generalmente
cableado, es decir que es un cable) utilizado para conectar los equipos entre sí. Los
principales medios de soporte físicos utilizados son:
o el cable coaxial
o el par trenzado;
o la fibra óptica.

COMPONENTES DE SOFTWARE DE UNA RED DE ÁREA LOCAL

Sistema operativo de red: Permite la interconexión de ordenadores para poder


 El transceptor (también denominado “adaptador”): Se utiliza para acceder a los servicios y recursos. Al igual que un equipo no puede trabajar sin un
transformar las señales que viajan por el soporte físico en señales lógicas que la sistema operativo, una red de equipos no puede funcionar sin un sistema operativo
tarjeta de red puede manejar, tanto para enviar como para recibir datos. de red. En muchos casos el sistema operativo de red es parte del sistema
 El tomacorriente (socket en inglés): Es el elemento utilizado para operativo de los servidores y de los clientes.
conectar mecánicamente la tarjeta de red con el soporte físico.
 Software de aplicación: En última instancia, todos los elementos se
utilizan para que el usuario de cada estación, pueda utilizar sus
programas y archivos específicos. Este software puede ser tan amplio
como se necesite ya que puede incluir procesadores de texto, paquetes
integrados, sistemas administrativos de contabilidad y áreas afines,
sistemas especializados, correo electrónico, etc. El software adecuado en
el sistema operativo de red elegido y con los protocolos necesarios
permiten crear servidores para aquellos servicios que se necesiten.
Sistemas operativos de Novell

Es una de las plataformas de servicio más fiable para ofrecer acceso seguro y
continuado a la red y los recursos de información, sobre todo en cuanto a
servidores de archivos. El sistema operativo Netware está formado por
aplicaciones de servidor y cliente. Proporciona servicios como administración de Img  Función del sistema operativo de la red
archivos (mediante la base de datos NDS), seguridad de gran alcance y servicios de 27. Logo Novell
impresión transparentes al usuario. Tiene como inconveniente que no puede Netware ©Novell, Inc.
 Conveniencia. Un Sistema Operativo hace más
interoperar con otras redes de Windows NT. conveniente el uso de una computadora.
 Eficiencia. Un Sistema Operativo permite que
Sistemas operativos de Microsoft los recursos de la computadora se usen de la manera
más eficiente posible.
Desde que Microsoft lanzó el primer Windows NT en 1.993 como sistema operativo  Habilidad para evolucionar. Un Sistema
de red, no ha dejado de evolucionar y de ampliar funciones e interoperabilidad con Operativo deberá construirse de manera que permita el
otros sistemas operativos como Netware. Windows NT combina el sistema desarrollo, prueba o introducción efectiva de nuevas
operativo del equipo y de red en un mismo sistema y trabaja sobre un modelo de funciones del sistema sin interferir con el servicio.
Img 26. Logo Windows
dominio. Está formado por Windows NT Server, que configura un equipo para  Encargado de administrar el hardware. El
Server 2008 ©2009
trabajar como servidor, y Windows NT Workstation, que proporciona a un equipo las Sistema Operativo se encarga de manejar de una mejor
Microsoft Corporation
funciones de cliente. Después de Windows NT, se presentaron Windows Server 2000 manera los recursos de la computadora en cuanto a
y Server 2003. hardware se refiere, esto es, asignar a cada proceso
una parte del procesador para poder compartir los
Sistemas operativos de Apple recursos.
 Relacionar dispositivos (gestionar a través del
El sistema operativo de red Appletalk está completamente integrado en el sistema kernel). El Sistema Operativo se debe encargar de
operativo de cada equipo que ejecuta el Mac OS. La implementación actual de comunicar a los dispositivos periféricos, cuando el
AppleTalk permite posibilidades de interconexión Trabajo en Grupo de alta velocidad usuario así lo requiera.
Img 27. Logo Apple Talk
entre equipos Apple, así como interoperabilidad con otros equipos y sistemas  Organizar datos para acceso rápido y seguro.
Brands of the world
operativos de red.  Manejar las comunicaciones en red. El Sistema
Operativo permite al usuario manejar con alta facilidad
Redes Unix

UNIX es un sistema operativo de propósito general, multiusuario y multitarea,


siendo las dos versiones más conocidas Linux y Solaris. Un sistema UNIX está
constituido por un equipo central y múltiples terminales para los usuarios. Este
Img 28. Logo Unix, Submitted
sistema operativo ha sido diseñado específicamente para grandes redes, pero
by Ignacio Torres Masdeu
también presenta algunas aplicaciones para equipos personales. La característica
todo lo referente a la instalación y uso de las redes de computadoras. instrucción especial de trampa de nombre "llamada al núcleo" o "llamada al
 Procesamiento por bytes de flujo a través del bus de datos. supervisor".
 Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al
usuario el acceso y manejo de los dispositivos de Entrada/Salida de la ESTRUCTURA POR MICROKERNEL
computadora. Las funciones centrales de un SO son controladas por el núcleo (kernel) mientras
que la interfaz del usuario es controlada por el entorno (shell). Por ejemplo, la
ESTRUCTURA DE UN SISTEMA OPERATIVO parte más importante del DOS es un programa con el nombre "COMMAND.COM" Este
En esta unidad examinaremos cuatro estructuras distintas que ya han sido programa tiene dos partes. El kernel, que se mantiene en memoria en todo
probadas, con el fin de tener una idea más extensa de cómo está estructurado el momento, contiene el código máquina de bajo nivel para manejar la administración
sistema operativo. Veremos brevemente algunas estructuras de diseños de de hardware para otros programas que necesitan estos servicios, y para la
sistemas operativos. segunda parte del COMMAND.COM el shell, el cual es el intérprete de comandos.

ESTRUCTURA MODULAR
También llamados sistemas monolíticos. Este tipo de organización es con mucho la
más común; bien podría recibir el subtítulo de "el gran embrollo". La estructura
consiste en que no existe estructura alguna. El sistema operativo se escribe como
una colección de procedimientos, cada uno de los cuales puede llamar a los demás
cada vez que así lo requiera. Cuando se usa esta técnica, cada procedimiento del
sistema tiene una interfaz bien definida en términos de parámetros y resultados y
cada uno de ellos es libre de llamar a cualquier otro, si este último proporciona
cierto cálculo útil para el primero. Sin embargo incluso en este tipo de sistemas es
posible tener al menos algo de estructura. Los servicios (llamadas al sistema) que
proporciona el sistema operativo se solicitan colocando los parámetros en lugares ESTRUCTURA POR ANILLOS CONCÉNTRICOS (CAPAS)
bien definidos, como en los registros o en la pila, para después ejecutar una
El sistema por "capas" consiste en organizar el sistema operativo como una programas del usuario, estos no tenían que preocuparse por el proceso, memoria,
jerarquía de capas, cada una construida sobre la inmediata inferior. consola o control de E/S. el proceso operador del sistema se localizaba en la capa
5.
El sistema tenía 6 capas. La capa 0 trabaja con la asignación del procesador y
alterna entre los procesos cuando ocurren las interrupciones o expiran los ESTRUCTURA CLIENTE – SERVIDOR
cronómetros. Sobre la capa 0, el sistema consta de procesos secuénciales, cada
uno de los cuales se podría programar sin importar que varios procesos estuvieran Una tendencia de los sistemas operativos modernos es la de explotar la idea de
ejecutándose en el mismo procesador, la capa 0 proporcionaba la mover el código a capas superiores y eliminar la mayor parte posible del sistema
multiprogramación básica de la CPU. operativo para mantener un núcleo mínimo. El punto de vista usual es el de
implantar la mayoría de las funciones del sistema operativo en los procesos del
La capa 1 realizaba la administración de la memoria. Asignaba el espacio de usuario. Para solicitar un servicio, como la lectura de un bloque de cierto archivo,
memoria principal para los procesos y un recipiente de palabras de 512K se un proceso del usuario (denominado proceso cliente) envía la solicitud a un proceso
utilizaba para almacenar partes de los procesos (páginas) para las que no existía servidor, que realiza entonces el trabajo y regresa la respuesta, lo único que hace
lugar en la memoria principal. Por encima de la capa 1, los procesos no debían el núcleo es controlar la comunicación entre los clientes y los servidores. Al
preocuparse si estaban en la memoria o en el recipiente; el software de la capa 1 se separar el sistema operativo en partes, cada una de ellas controla una faceta del
encargaba de garantizar que las páginas llegaran a la memoria cuando fueran sistema, como el servicio a archivos, servicios a procesos, servicio a terminales o
necesarias. servicio a la memoria, cada parte es pequeña y controlable. Además como todos los
servidores se ejecutan como procesos en modo usuario y no en modo núcleo, no
La capa 2 se encargaba de la comunicación entre cada proceso y la consola del tienen acceso directo al hardware. En consecuencia si hay un error en el servidor
operador. Por encima de esta capa, cada proceso tiene su propia consola de de archivos, éste puede fallar, pero esto no afectará en general a toda la máquina.
operador.

La capa 3 controla los dispositivos de E/S y guarda en almacenes (buffers) los


flujos de información entre ellos. Por encima de la capa 3, cada proceso puede
trabajar con dispositivos exactos de E/S con propiedades adecuadas, en vez de
dispositivos reales con muchas peculiaridades. La capa 4 es donde estaban los
LA EMPRESA
Fundamentos de los sistemas de información.
Información Aplicada a la Empresa
Los sistemas de información gerencial son una necesidad hoy en día, ya que las
La información es un elemento fundamental para el buen funcionamiento de empresas manejan grandes cantidades de datos los cuales pueden ser analizados,
cualquier tipo de organización. Determina la consecución de los objetivos de la de tal manera que se pueda encontrar información relevante para tomar diferentes
empresa repercutiendo en el éxito o fracaso del negocio. Para que la información cursos de acción. Los SIG actualmente son conocidos como Business intelligent
cumpla con sus objetivos es necesario que posea ciertas características: (Inteligencia de negocios), esto es debido a que influyen a la toma de decisiones.
Los SIG forman parte de las estrategias corporativas, ya que la comunicación e
 Debe ser relevante: Tiene que ser importante, que sea la información que información son de gran valor en las organizaciones o empresas, porque
nosotros necesitamos. representan poder.
 Debe estar actualizada: Debe utilizarse en el momento de ser generada. El resultado de interacción colaborativa entre personas, tecnologías y
 Debe ser económica: La obtención de la información no debe generar un procedimientos colectivamente llamados sistemas de información orientados a
coste elevado para la empresa. solucionar problemas empresariales.
 Debe ser rápida: El acceso a la información debe realizarse de forma
rápida y sencilla. Los SIG o MIS (también denominados así por sus siglas en inglés: Management
 Debe ser de calidad: Es importante que la información carezca de errores Information System se diferencian de los sistemas de información comunes en que
y sea completa. para analizar la información utilizan otros sistemas que se usan en las actividades
 Debe ser objetiva: No cabe opción a subjetividades. operacionales de la organización. Académicamente, el término es comúnmente
 Debe ser completa: El tener la información incompleta es peor que no utilizado para referirse al conjunto de los métodos de gestión de la información
tener nada. vinculada a la automatización o apoyo humano de la toma de decisiones (por
 Debe ser aplicable: La información debe ser adecuada para la toma de una ejemplo: Sistemas de apoyo a la decisión, sistemas expertos y sistemas de
decisión, además de ser importante y pertinente. Una información que no información para ejecutivos).
satisfaga estas características carecerá de valor y, por tanto, no será
válida para la organización. Entiéndase por sistema informativo a cualquier conglomerado humano cuyas
acciones de supervivencia y desarrollo esté basado predominantemente en un
intenso uso, distribución, almacenamiento y creación de recursos de información y información, en contraposición con el capital, cuya relevancia dejó ese primer
conocimientos mediatizados por las nuevas tecnologías de información y plano.
comunicación.
Los orígenes y causas del surgimiento de las sociedades de información o los
Actualmente se habla de gestión en la información en las organizaciones, gestión de sistemas informativos se fundamentan en dos aspectos interrelacionados:
la calidad, gestión de los recursos de información, roles y capacidades de las
personas en la gestión de información. Se habla en la actualidad, en la era de la  El desarrollo económico a largo
información en la cual nos encontramos, la era de la inteligencia corporativa, la plazo
cual consta de varias fases en su establecimiento:  Los cambios tecnológicos.

 Concientización corporativa Componentes de los sistemas de información.


 Establecimiento de un departamento para procesar la
información. Un Sistema de Información realiza cuatro actividades básicas: Almacenamiento,
 Desarrollo de un sistema electrónico. procesamiento y salida de información. A continuación se definirán cada una de
 Desarrollo de una red electrónica global estas actividades.

Todo esto muestra el desarrollo que ha transitado en los caminos de la evolución, la  Entrada de Información.- La entrada es el proceso mediante el cual el
información y los sistemas informativos como vía fundamental para la tomas de Sistema de Información toma los datos que requiere para procesar la
decisiones en una organización, producto de los cambios que se han originado información. Las entradas pueden ser manuales o automáticas. Las
principalmente a partir de la masiva utilización de la computación, la información manuales son aquellas que se proporcionan en forma directa por el
ha pasado a ocupar un lugar fundamental en la vida de las organizaciones. usuario, mientras que las automáticas son datos o información que
provienen o son tomados de otros sistemas o módulos. Esto último se
Existe y existirá información en cualquier acción o intención del que hacer de la denomina interfaces automáticas. Así, un Sistema de Control de Clientes
humanidad, por ende, no hay organización sin información. Los nuevos modelos de podrá tener una interface automática de entrada con el Sistema de
gestión señalan que actualmente el recurso más valioso que existe, es la Facturación, ya que toma las facturas que genera o elabora el Sistema de
Facturación como entrada al Sistema de Control de Clientes.
 Salida de Información.- La salida es la capacidad de un Sistema de
Las unidades típicas de entrada de datos a las computadoras son las terminales, Información para sacar la información procesada o bien datos de entrada
las cintas magnéticas, las unidades de disquete, los códigos de barras, los escáner, al exterior. Las unidades típicas de salida son las impresoras, terminales,
la voz, los monitores sensibles al tacto, el teclado y el ratón, entre otras. disquetes, cintas magnéticas, la voz, los graficadores y los plotters, entre
otros. Es importante aclarar que la salida de un Sistema de Información
 Almacenamiento de información.- El almacenamiento es una de las puede constituir la entrada a otro Sistema de Información o módulo. En
actividades o capacidades más importantes que tiene una computadora, este caso, también existe una interface automática de salida. Por ejemplo,
ya que a través de esta propiedad el sistema puede recordar la el Sistema de Control de Clientes tiene una interface automática de salida
información guardada en la sesión o proceso anterior. Esta información con el Sistema de Contabilidad, ya que genera las pólizas contables de los
suele ser almacenada en estructuras de información denominadas movimientos procesados de los clientes.
archivos. La unidad típica de almacenamiento son los discos magnéticos o
discos duros, los discos flexibles o disquetes y los discos compactos (CD- A continuación se muestran las diferentes actividades que puede realizar un
ROM). Sin embargo, existen otras formas de almacenamiento. Sistema de Información de Control de Clientes:

 Procesamiento de Información.- Es la capacidad del Sistema de Las Bases de Datos son programas que administran información y hacen más
Información para efectuar cálculos de acuerdo con una secuencia de ordenada la información, aparte de hacerla fácil de buscar. Se puede decir que el
operaciones preestablecida. Estos cálculos pueden efectuarse con datos concepto de Base de Datos lleva a la idea de:
introducidos recientemente en el sistema o bien con datos que están
almacenados. Esta característica de los sistemas permite la • Agrupar todos los datos relevantes de la empresa en un único lugar: ya
transformación de datos fuente en información que puede ser utilizada que sustentarán las actividades del negocio y la toma de decisiones
para la toma de decisiones, lo que hace posible, entre otras cosas, que un correspondientes.
tomador de decisiones genere una proyección financiera a partir de los • Compartir los datos: Lo que significa que varios usuarios pueden hacer
datos que contiene un estado de resultados o un balance general de un uso simultáneo de la información contenida en la BD, en el sentido que
año base. todos ellos pueden tener acceso al mismo elemento de información y
diferentes usuarios pueden utilizarlo para propósitos diferentes.
• Evitar redundancia e inconsistencia en los datos: Redundancia es un
estado en el cual existen datos repetidos innecesariamente. Por ejemplo, Sus características pueden ser ventajosas o desventajosas: Pueden ayudarnos
en una BD podríamos tener almacenados datos de los empleados: apellido, para almacenar, organizar, recuperar, comunicar y manejar información en formas
nombre, domicilio, departamento, salario, etc., y también datos de que serían imposibles sin los computadores, pero también nos afecta de alguna
inscripciones para cursos de capacitación. Inconsistencia es un estado en manera ya que existen enormes cantidades de información en bases de datos de las
el que dos o más datos repetidos en una BD contienen diferentes valores. que no se tiene control del acceso.
Generalmente es consecuencia de la actualización despareja o
desordenada de datos redundantes. Por tanto no puede haber Las bases de Datos tienen muchos usos: Nos facilitan el almacenamiento de
inconsistencia si no existe primero redundancia de los datos grandes cantidades de información; permiten la recuperación rápida y flexible de
• Estructurar los datos de una sola forma, de "la forma natural": La Base de información, con ellas se puede organizar y reorganizar la información, así como
Datos de una empresa debe en todo momento reflejar la realidad de la imprimirla o distribuirla en formas diversas.
forma más fidedigna que se pueda lograr porque esto ayuda a Algunos paquetes comerciales manejadores de Bases de Datos son:
comprender su estructura y funcionamiento. El diseño de la BD es crucial
por ese motivo, y es entonces a partir de la realidad que debe dibujarse la • El file Marker Pro,
BD y no la realidad ajustarse a esta. • ProQuest Periodical Abstracts,
• Proporcionar acceso a los mismos a través de lenguajes "naturales": • Organizer de Lotus
¿Qué ocurriría si nuestra BD está perfectamente diseñada y funcionando • Far Side Calendar de Amaze.
de manera óptima, pero cada vez que se consultan algunos datos, están a
nuestro entender incompletos, con información redundante y/o Los tipos de datos que se pueden introducir a una base de datos son:
mostrados de forma tal que dificultan su análisis? El objetivo por el cual
se implementó la BD no está siendo logrado. Es así que la comunicación  *Numéricos: Se pueden introducir números para identificar partes del
entre las BD y los usuarios también posee una importancia vital y se la archivo, esto identifica la parte que numera al archivo o lo distingue de
debe diseñar con cuidado para reflejar el flujo natural de datos hacia la alguna manera.
BD y desde ella.  *Texto: El texto es un nombre que identifica al campo, ya sea el nombre
• La base de datos de clientes debe tener la gran capacidad de servir para del autor o
ofrecer a esos clientes justo lo que necesitan. En el menor tiempo posible.  *Etiquetas: Son los títulos con los que cada campo es designado.
 *Fórmulas: Son datos que aparecen como numéricos pero fueron hechos inversión. En cualquier caso, este factor de uso depende del tipo de actividad. Pese
por medio de fórmulas. a ello las herramientas tecnológicas tales como la implementación de redes LAN,
uso de Internet, entre otros, son empleados cada vez con mayor frecuencia por las
Un paquete manejador de bases de datos es más conveniente cuando se está PYMES.
trabajando con bases de datos, y un administrador de archivos se usa más cuando
sólo se está buscando un archivo desde un procesador de textos. La tecnología ha permitido además, que las empresas puedan realizar de mejor
manera la gestión de su capital humano mediante la implementación de soluciones
Existen programas denominados sistemas gestores de bases de datos, abreviados tales como Business to Employee (B2E), que permite al empleado disponer de la
SGBD, que permiten almacenar y posteriormente acceder a los datos de forma información acerca de los procesos productivos y sobre el mercado, además tiene
rápida y estructurada. Las propiedades de estos SGBD, así como su utilización y que ver con la gestión del conocimiento de los empleados, su función estratégica y
administración, se estudian dentro del ámbito de la informática. su talento, el portal corporativo de empleados en donde pueden acceder a un
conjunto de servicios tales como obtención de certificados, gestión de nóminas,
Las aplicaciones más usuales son para la gestión de empresas e instituciones cursos de formación, actualización de currículum vitae, definición de tareas,
públicas. También son ampliamente utilizadas en entornos científicos con el objeto noticias.
de almacenar la información experimental. Planeación de los recursos de una empresa es otra de las herramientas de gestión
del capital humano, aplicaciones de gestión de recursos humanos, herramientas
Herramientas de tecnologías Aplicadas a las empresas que permiten que el departamento de recursos humanos pueda dedicarse a
gestionar y no a realizar tanto trabajo administrativo.
La tecnología en entornos empresariales, constituye un instrumento muy
importante especialmente para la gestión de la empresa. La figura presentada Un tipo de tecnología enfocada a la administración, seguimiento y contacto entre
describe los niveles y áreas que los sistemas de Información se adaptan en la proveedores y clientes es el CRM (Customer Relationship Magament). Una de las
gestión empresarial. ventajas de este tipo de sistemas es que puede almacenar toda la información
No obstante, el uso de la tecnología se encuentra asociado al tamaño de la relacionada con un cliente haciendo más eficiente e interactivo el proceso de
empresa, puesto que es más frecuente que una empresa grande emplee ventas dentro de una empresa.
herramientas tecnológicas más avanzadas, en comparación a una pequeña y
mediana empresa, ya que las empresas más grandes tienen mayor capacidad de
Uno de los sistemas más utilizados para capturar, procesar y distribuir la Los programas informáticos de la gestión comercial son una herramienta esencial
información dentro de procesos es el sistema DSS (Decision Support System). Éste y muy valiosa que ayudarán a tu empresa a conseguir eficazmente los objetivos
permite lograr decisiones mejor estructuradas teniendo una interacción simultánea comerciales marcados. Hoy en día la alta exigencia presente en el área de la
entre varios usuarios; además se puede contar con información en tiempo real, la distribución de productos, implica que los procesos implantados en el
cual puede ser analizada en el momento, haciendo más eficiente la comunicación; departamento comercial de la empresa deben ser lo más eficaces posibles.
por ejemplo puede ser utilizado en la bolsa de valores como un apoyo para poder
tomar decisiones en cuestión de segundos. Utilizar eficazmente los programas informáticos para la gestión de clientes como
son los CRM le dará un valor incalculable y se convertirá en una gran ventaja
Dentro de los sistemas DSS, existen varias metodologías que son apoyadas por este competitiva frente a su competencia aunque para ello debe tener el control pleno
tipo de sistemas; una de ellas es el E-sourcing. El enfoque principal de este tipo de sobre el programa informático.
metodología es la migración de los procesos o actividades manuales dentro de los
de departamentos de compras o adquisiciones a procesos electrónicos. Este tipo El principal objetivo de este curso es brindar a los alumnos de las competencias
de metodología agiliza una operación entre comprador y proveedor reduciendo así necesarias para el uso eficaz de los programas y aplicaciones informáticas de
los tiempos de respuesta así como un mejor control y manejo de los procesos de gestión comercial.
adquisiciones.
Este curso te servirá para:
Así mismo el E-sourcing cuenta con distintas modalidades de compra o negociación,
por ejemplo, las subastas electrónicas inversas "ERA´s," las cuales tienen como  Identificar las características y funcionamiento de las aplicaciones
objetivo generar un ambiente de negociación entre el comprador y proveedor. De informáticas de gestión comercial.
esta manera se lleva a la baja los precios de producto en tiempo real. Una de las  Manejar perfectamente las herramientas informáticas de
ventajas de este tipo de herramientas es que permite hacer una negociación más facturación.
rápida y eficiente logrando generar ahorros y transparencia dentro del proceso.
La gestión eficaz de las tareas operativas de inventario y almacén en los procesos
¿POR QUÉ SON NECESARIOS LOS PROGRAMAS INFORMÁTICOS PARA LA de trabajo.
GESTIÓN COMERCIAL DE TU NEGOCIO? Gestionar la información obtenida en la posventa y tramitación de quejas y
reclamaciones a través de los sistemas CRM.
Generalmente la principal fuente de ingresos de una empresa son sus clientes. La
Mejorar los procesos de gestión comercial de la empresa. gestión de relaciones con el cliente o CRM tiene la intención de proveer soluciones
tecnológicas que permitan fortalecer la comunicación entre la empresa y sus
Dirigido a: clientes para mejorar las relaciones con la clientela a través de la automatización
de los distintos componentes de la relación con el cliente.
 Aquellos alumnos desempleados o profesionales en activo que desarrollan
su carrera o están interesados en las actividades de gestión  Actualización de ficheros de información de: clientes, proveedores,
administrativa del sector comercial tales como: productos y servicios, agentes de venta y distribución, empresas de la
competencia y parámetros comerciales.
 Administrativos  Tramitación administrativa de la información de clientes-proveedores.
 Administrativos de contabilidad UTILIZACIÓN DE APLICACIONES DE GESTIÓN DE ALMACÉN
 Administrativos comerciales
 Administrativo de servicio de personal Se analizará todo lo relacionado con la gestión de almacenes, englobando el control
 Administrativo con tareas de atención al público no clasificado bajo otros de los artículos almacenados, el registro de las entradas y las salidas, la obtención
epígrafes de inventarios, el registro de transacciones entre almacenes, stock, etc.
 Auxiliar administrativo de cobros y pagos de contabilidad, de facturación
 Auxiliar administrativo comercial  Generar los archivos de información de: existencias, materias primas,
 Auxiliar de apoyo administrativo de compra y venta envases, embalajes y otros.
 Auxiliar administrativo del departamento de Recursos Humanos  Sistemas de gestión informática de almacenes.
 Auxiliar administrativo de las distintas Administraciones Públicas
UTILIZACIÓN DE APLICACIONES INFORMÁTICAS DE GESTIÓN DE LA
UTILIZACIÓN DE APLICACIONES DE GESTIÓN EN RELACIÓN CON CLIENTES- FACTURACIÓN
PROVEEDORES (CRM)
Realizar una presentación de los principales aspectos y parámetros a considerar
en relación a la gestión de facturación. En este apartado se estudiará todo lo
concerniente al proceso comercial de la empresa que se manifiesta en los  Aplicación de sistemas de salvaguarda y protección de la Información.
presupuestos, pedidos, albaranes y facturas a clientes.

 Generación de presupuestos, pedidos, albaranes, facturas y otros. HERRAMIENTAS CASE.


 Realización de enlaces con otras aplicaciones informáticas de contabilidad
y gestión de datos. Herramientas de bajo nivel, L-CASE (Lower CASE - CASE inferior) o back-end,
dirigidas a las últimas fases del desarrollo: construcción e implantación.
UTILIZACIÓN DE HERRAMIENTAS DE APLICACIONES DE GESTIÓN DE LA
POSVENTA Juegos de herramientas o toolkits, son el tipo más simple de herramientas CASE.
Automatizan una fase dentro del ciclo de vida. Dentro de este grupo se encontrarían
El servicio al cliente es fundamental en el desarrollo de la fidelidad y satisfacción las herramientas de reingeniería, orientadas a la fase de mantenimiento.
del mismo. La fidelización del cliente permite asegurar la rentabilidad de la Otra posible clasificación, utilizando la funcionalidad como criterio principal, es la
inversión inicial de captación, desarrollo del producto y prestación del servicio. siguiente:
Para reafirmar una cultura de calidad del servicio y mejora continua, hay que
realizar una buena gestión de incidencias que permita controlar su volumen y  Herramientas de gestión de proyectos
procedencia, así como los responsables y plazos medios de resolución.  Herramientas de gestión y configuración de software (SCM)
 Herramientas de calidad y seguridad de software
En los siguientes apartados se analizará la información obtenida a través de estos  Herramientas de análisis y diseño
servicios dirigidos al cliente.  Herramientas de desarrollo de interfaz de usuarios
 Herramientas para la Ingeniería de Software Orientada a Objetos
 Gestionar la información obtenida en la posventa: organización, registro y  Herramientas de integración y prueba
archivo.  Herramientas de métodos formales
 Realizar acciones de fidelización.  Herramientas Cliente/Servidor
 Gestión de quejas y reclamaciones.  Herramientas de Ingeniería WEB
 Obtención mediante aplicaciones de gestión: informes relacionados,  Herramientas de Reingeniería
formularios, estadísticas, cuadro de datos.
Beneficios de las Herramientas CASE Como disyuntiva, el desarrollo de prototipos puede producir un sistema que
funcione. Las características de entrada y salida son desarrolladas junto con el
Entre los beneficios más significativos de las herramientas CASE se enumeran los código orientado hacia los procedimientos y archivos de datos.
siguientes:
 Generación de código
 Facilidad para la revisión de aplicaciones
La ventaja más visible de esta característica es la disminución del tiempo necesario
La experiencia muestra que una vez que las aplicaciones se implementan, se para preparar un programa. Sin embargo, la generación del código también
emplean por mucho tiempo. Las herramientas CASE proporcionan un beneficio asegura una estructura estándar y consistente para el programa (lo que tiene gran
substancial para las organizaciones al facilitar la revisión de las aplicaciones. influencia en el mantenimiento) y disminuye la ocurrencia de varios tipos de
Contar con un depósito central agiliza el proceso de revisión ya que éste errores, mejorando de esta manera la calidad. Las características de la generación
proporciona bases para las definiciones y estándares para los datos. Las del código permiten volver a utilizar el software y las estructuras estándares para
capacidades de generación interna, si se encuentran presentes, contribuyen a generar dicho código, así como el cambio de una especificación modular, lo que
modificar el sistema por medio de las especificaciones más que por los ajustes significa volver a generar el código y los enlaces con otros módulos.
al código fuente. Mejora en la habilidad para satisfacer los requerimientos del usuario

 Soporte para el desarrollo de prototipos de sistemas Es bien conocida la importancia de satisfacer los requerimientos del usuario, ya
que esto guarda relación con el éxito del sistema. De manera similar, tener los
En general, el desarrollo de prototipos de aplicaciones toma varias formas. En requerimientos correctos mejora la calidad de las prácticas de desarrollo. Las
ocasiones se desarrollan diseños para pantallas y reportes con la finalidad de herramientas CASE disminuyen el tiempo de desarrollo, una característica que es
mostrar la organización y composición de los datos, encabezados y mensajes. Los importante para los usuarios. Las herramientas afectan la naturaleza y cantidad
ajustes necesarios al diseño se hacen con rapidez para alterar la presentación y de interacción entre los encargados del desarrollo y el usuario. Las
las características de la interface. Sin embargo, no se prepara el código fuente, descripciones gráficas y los diagramas, así como los prototipos de reportes y la
de naturaleza orientada hacia procedimientos, como una parte del prototipo. composición de las pantallas, contribuyen a un intercambio de ideas más efectivo.

Soporte interactivo para el proceso de desarrollo


entre grupos de trabajo, presenta diagramas como: Diagrama de Grant y Diagrama
La experiencia ha demostrado que el desarrollo de sistemas es un proceso de Pert (diagrama de red).
interactivo. Las herramientas CASE soportan pasos interactivos al eliminar El software Microsoft Office Project en todas sus versiones (la versión 2007 es la
el tedio manual de dibujar diagramas, elaborar catálogos y clasificar. Como más reciente) es útil para la gestión de proyectos, aplicando procedimientos
resultado de esto, se anticipa que los analistas repasarán y revisarán los detalles descritos en el PMBoK (Management Body of Knowledge) del PMI (Project
del sistema con mayor frecuencia y en forma más consistente. Management Institute).

Ejemplos de Herramientas CASE La primera versión de Microsoft Project fue lanzada para DOS en 1984 por una
compañía que trabajaba para Microsoft. Microsoft adquirió todos los derechos del
software en 1985 y liberó la versión 2. La versión 3 para DOS fue liberada en 1986.
Las herramientas CASE se han venido ampliando y desarrollando, existe una gran
La versión 4 para DOS fue la última versión para este sistema operativo, liberada
variedad de estas con características específicas, a continuación describiremos
en 1987. La primera versión para Windows fue liberada en 1990, y fue llamada
algunas de ellas, desde las más actuales hasta otras ya no tanto.
versión 1 para Windows. Un dato interesante es que la primera versión para DOS
introdujo el concepto de Líneas de dependencia (link lines) entre tareas en la
Microsoft Project
gráfica de Gantt.

Microsoft Project es un software de administración de proyectos diseñado,


Una versión para Macintosh fue liberada en julio de 1991 y su desarrollo continuó
desarrollado y comercializado por Microsoft para asistir a administradores de
hasta Project 4.0 para Mac en 1993. En 1994, Microsoft detuvo el desarrollo para la
proyectos en el desarrollo de planes, asignación de recursos a tareas, dar
mayoría de las aplicaciones Mac, y no ofreció nuevas versiones de Office hasta
seguimiento al progreso, administrar presupuesto y analizar cargas de trabajo.
1998, después de la creación del nuevo Microsoft Macintosh Business Unit el año
anterior. El MacBU nunca lanzó una versión actualizada para Proyect, y la versión
Permite el aprendizaje rápido con el planeamiento y la administración guiados,
anterior de 1993 no es ejecutada nativamente en Mac OS X.
organización y seguimiento de las tareas y recursos, comparar versiones de planes
de proyectos, evaluar los cambios, realizar un seguimiento del rendimiento,
Las versiones fueron lanzadas en 1992 (v3), 1993 (v4), 1995, 1998, 2000, 2002,
generar informes predefinidos, compartir planes de proyecto, colaboración
2003 y 2007.
La aplicación crea calendarización de rutas críticas, además de cadenas críticas
y metodología de eventos en cadena disponibles como add-ons de terceros. Los
calendarios pueden ser resource leveled, y las gráficas visualizadas en una Gráfica
de Gantt. Adicionalmente, Project puede reconocer diferentes clases de usuarios,
los cuales pueden contar con distintos niveles de acceso a proyectos, vistas y otros
datos. Los objetos personalizables como calendarios, vistas, tablas, filtros y
campos, son almacenados en un servidor que comparte la información a todos los
usuarios.

La familia de Microsoft Project incluye: Microsoft Project Standard, Microsoft


Project Professional, Microsoft Project Server y Microsoft Project Web Access.
Microsoft Project y Project Server son piezas angulares del Microsoft Office
Enterprise Project Management (EPM).
Microsoft reveló que las futuras versiones de Microsoft Project contarán con
Interfaz de usuario fluida.

Racional Rose
Rational Rose es una herramienta de producción y comercialización establecidas  Windows 2000 Professional, Service Pack 4
por Rational Software Corporation (actualmente parte de IBM). Rose es un  Windows XP Professional, Service Pack 2
instrumento operativo conjunto que utiliza el Lenguaje Unificado (UML) como medio  Windows 2000 and 2003 Server and Advanced Server, Service Pack 3 and 4
para facilitar la captura de dominio de la semántica, la arquitectura y el diseño.  Windows Vista
Este software tiene la capacidad de:  Linux

La siguiente tabla muestra el soporte para Ciclo de Vida de un Proyecto en Rational


Rose.

DISCIPLINA DE PROYECTO ROSE


Si. Usando el modelo de casos de uso de
Modelado de Negocio
negocio
Administración de Requisitos Junto con RequisitePro.
Sus características principales:
Si. Diagramas UML de clases y de
interacción. El asistente de frameworks
 No es gratuito, se debe hacer un previo pago para poder adquirir el producto. Análisis y Diseño
provee una gran cantidad de plantillas
 La ingeniería de código (directa e inversa) es posible para ANSI C++, Visual para estructurar el modelo
C++, Visual Basic 6, Java, J2EE/EJB, CORBA, Ada 83, Ada 95, Bases de datos: Soporta la mayoría de los lenguajes
Implementación
DB2, Oracle, SQL 92, SQL Server, Sybase, Aplicaciones WEB. excepto .NET
 Solamente Ingeniería reversa para COM. No. Se provee Quality Architect
 Rational Rose habilita asistentes para crear clases y provee plantillas de código para pruebas unitarias, pero requiere
Prueba
que pueden aumentar significativamente la cantidad de código fuente generada. otras herramientas Rational, tales
Adicionalmente, se pueden aplicar los patrones de diseño, Racional Rose ha como Test Manager y Robot.
provisto 20 de los patrones de diseño GOF para Java. Integrado con la aplicación de control de
Control de Versiones
 Admite la integración con otras herramientas de desarrollo (IDEs). versiones compatible con SCC.
 Requerimientos :
Administración del Proyecto No
Publicación Web Si JDeveloper
Documentación No. Requiere el uso de SoDA
Múltiples Usuarios Concurrentes Si Este magnífico entorno integrado desarrollado por Oracle trabaja con la ingeniería
inversa, es decir primero se crea él código y después el diagrama.
Es un software propietario pero gratuito desde 2005. Las primeras versiones de
1998 estaban basadas en el entorno JBuilder de Borland, pero desde la versión 9i
de 2001 está basado en Java, no estando ya relacionado con el código anterior de
JBuilder.

Sus características principales:

 Es un entorno gratis, aunque previamente se debe suscribir para poder


descargarlo. Puede descargarse en :

http://www.oracle.com/technology/products/jdev/index.html.
 Netamente desarrollado para Java.
 Posee diagrama de clases (UML).
 Funciona en los siguientes sistemas operativos:
 Windows.
 Linux.
 Mac OSX

software, y los escritores de la documentación, esta herramienta de
desarrollo dinámica y versátil facilita análisis y el diseño de los sistemas y de las
bases de datos orientados objeto.

Características principales:
 Interfaz elegante e intuitiva, la mayor parte de las opciones accesibles con un solo
click.
 Ayudas en el diseño con autocompletación y corrección automática en tiempo real.
 Permite visualizar el proyecto de diferentes formas.
 Posible derivación de modelos UML a través de códigos fuente escritos
anteriormente.
 Facilidad y rapidez para el cambio del dominio del modelado.
 Generador automático de informes.
 Desarrollo colaborativo directamente con la herramienta a través del Team Work
Server (Software que permite trabajar a más de un desarrollador sobre el mismo
proyecto en el mismo instante, el modelo está almacenado en un equipo servidor y
los desarrolladores pueden consultar y actualizar la información).
 Disponible para un gran número de plataformas y sistemas operativos.
La versiones existentes de MagicDraw son: Reader, Community, Personal, Standard,
MagicDraw Profesional, Entrerprise.

MagicDraw Es una herramienta de modelaje con completas características UML, sin Reader:
duda es una de las mejores herramientas CASE del mercado, que procura  -Permite la visualización e impresión de proyectos.
mantenerse además siempre al día con continuas actualizaciones. Es desarrollada  -Gratuita.
por No Magic, Inc. Implementada totalmente en JAVA. Diseñada para los analistas  -Destinada para poder compartir ficheros.
del negocio, los analistas del software, los programadores, los ingenieros de
Community:  Sun Java Studio 8.
 -Destinada para desarrolladores que creen proyectos no comerciales.  Borland CaliberRM 6.0, 6.5 requirements tool.
 -Disponibles pocas funcionalidades y con restricciones.  Oracle Workshop 8.1.2.
 -Gratuita.  E2E Bridge 4.0
 IntelliJ IDEA 4.X o mayor.
Personal:  NetBeans 6.X o mayor.
 -Disponibles todas las funcionalidades.  Eclipse 3.1 o mayor.
 -Destinada para el uso individual, no contiene Team Work Server.  IBM Rational Application Developer
 Borland JBuilder 8.0, 9.0, X, 2005, 2006, 2007
Standard:  Built-in CVS interface for storing project files.
 Integración con herramientas MDA: Compuware OptimalJ, AndroMDA,
A todas las funcionalidades de la versión personal añade: Interactive Objects ArcStyler, openArchitectureWare, E2E Bridge, Mia-
 -Integración con IDE"s. Software Tools and Netfective' Blu Age.
 -Soporte para el desarrollo colaborativo.  Además MagicDraw tiene plug-ins para que soporten:
 Usando SysML para Ingeniería de Sistemas.
 DoDAF para compilar modelos.
Profesional:  Trabajando con IBM Rational RequisitePro and Telelogic DOORS para
 -Incorpora soporte de generación de código e ingeniería inversa para gestión de requerimientos.
lenguajes como: Java, C++, C#.
Enterprise
 -La versión más avanzada de MagicDraw
 -Permite cualquier modelado.
 -Recuperación de estructuras mediante JDBC.
 -Producción de modelos personalizados o específicos como XML y DDL.

Soporta la integración con los siguientes IDEs:


Visual Paradigm  Generación de código y despliegue de EJB - Generación de beans para el
desarrollo y despliegue de aplicaciones.
Visual Paradigm es una herramienta UML profesional que soporta el ciclo de vida  Diagramas de flujo de datos.
completo del desarrollo de software: análisis y diseño orientados a objetos,  Soporte ORM - Generación de objetos Java desde la base de datos.
construcción, pruebas y despliegue. Permite dibujar todos los tipos de diagramas  Generación de bases de datos - Transformación de diagramas de Entidad-
de clases, código inverso, generar código desde diagramas y generar Relación en tablas de base de datos.
documentación. También proporciona abundantes tutoriales de UML,  Ingeniería inversa de bases de datos - Desde Sistemas Gestores de Bases
demostraciones interactivas de UML y proyectos UML. Presenta licencia gratuita y de Datos (DBMS) existentes a diagramas de Entidad-Relación.
comercial. Es fácil de instalar y actualizar y compatible entre ediciones.  Generador de informes.
Características principales:  Distribución automática de diagramas - Reorganización de las figuras y
conectores de los diagramas UML.
 Soporte de UML versión 2.1.  Importación y exportación de ficheros XMI.
 Diagramas de Procesos de Negocio - Proceso, Decisión, Actor de negocio,  Integración con Visio - Dibujo de diagramas UML con plantillas (stencils)
Documento. de Microsoft Visio.
 Modelado colaborativo con CVS y Subversion (control de versiones).  Editor de figuras.
 Interoperabilidad con modelos UML2 (metamodelos UML 2.x para  Más otras herramientas y plugins de modelado UML:
plataforma Eclipse) a través de XMI.  Plataforma Java (Windows/Linux/Mac OS X):
 Ingeniería de ida y vuelta.  SDE para Eclipse.
 Ingeniería inversa - Código a modelo, código a diagrama.  SDE para NetBeans.
 Ingeniería inversa Java, C++, Esquemas XML, XML, NET exe/dll, CORBA IDL.  SDE para Sun ONE.
 Generación de código - Modelo a código, diagrama a código.  SDE para Oracle JDeveloper.
 Editor de Detalles de Casos de Uso - Entorno todo-en-uno para la  SDE para JBuilder.
especificación de los detalles de los casos de uso, incluyendo la  SDE para IntelliJ IDEA.
especificación del modelo general y de las descripciones de los casos de  SDE para WebLogic Workshop.
uso.  Plataforma Windows:
 Diagramas EJB - Visualización de sistemas EJB.  SDE para Microsoft Visual Studio
Microsoft Visio Enterprise Architect

Microsoft Visio es un software de diagramas para Microsoft Windows. Enterprise Architect (EA) Professional es una herramienta CASE de Sparx Systems.
Usa gráficos de vectores para crear diversos diagramas. Facilita a los Soporta ocho de los nueve diagramas estándares del UML: Diagrama de casos de
profesionales empresariales y de Tecnologías de la Información la visualización, el uso, de clases, de secuencia, de colaboración, de actividad, de estados, de
análisis y la comunicación de información compleja. Los diagramas de Visio implementación (componentes), de despliegue y varios perfiles del UML. Si fuera
comunican información de un vistazo, conectados a datos muestran información, necesario, el diagrama de objetos se puede crear usando los diagramas de
son fáciles de actualizar y pueden aumentar espectacularmente la productividad. La colaboración.
amplia variedad de diagramas de Microsoft Visio permite comprender, procesar y
compartir información sobre los sistemas, recursos y procesos organizativos Enterprise Architect tiene un mecanismo de perfil UML genérico para cargar y
de una empresa. trabajar con diferentes perfiles UML. En Enterprise Architect, estos perfiles se
especifican en archivos XML con un formato específico. Los perfiles disponibles son:
Micorsoft Visio está disponible en dos ediciones independientes: Office Visio Modelado de Procesos de Negocio: Soporta las extensiones de modelado de
Professional y Office Visio Standard. Office Visio Standard tiene la misma procesos de negocio de Eriksson-Penker.
funcionalidad básica que Office Visio Professional e incluye un subconjunto de sus
características y plantillas. Office Visio Professional ofrece funcionalidad avanzada,  Modelado de Datos.
como conectividad de datos y características de visualización, que no se incluyen  Modelado de la Interfaz de Usuario.
en Office Visio Standard. Ambas ediciones, Standard y Professional, comparten la  Modelado Web.
misma interfaz.  Esquema XSD

Microsoft adquiere Visio Corporation en 2000. Visio 2007 fue liberado el 30 de Permite ingeniería de código (directa e inversa) para ANSI C++, Visual Basic 6,
noviembre del 2006. Java, C#, VB.NET, Delphi y Bases de datos: Ingeniería directa desde el modelo de
datos al script DDL. La ingeniería reversa usa la fuente de datos ODBC.
Microsoft reveló que la siguiente versión de Microsoft Visio presentará un cordón
de unión entre interfaces de usuario.
La forma en la que EA trabaja es generando los archivos de código fuente de las Documentación Si
clases para aquellas que correspondan al mismo paquete. Adicionalmente, se
Múltiples Usuarios
pueden aplicar los patrones de diseño, el usuario tiene que crear los patrones. Si
Concurrentes
La siguiente tabla muestra el Soporte del Ciclo de Vida del Proyecto en Enterprise
Architect
BoUML

DISCIPLINA DE PROYECTO ENTERPRISE ARCHITECT


BoUmL es una herramienta de software libre. Pude ser redistribuida o modificada
Si. Usando perfiles de UML para el modelado de bajo los términos de Licencia Pública General (GNU).
Modelado de Negocio
procesos de negocio Es una herramienta que permite especificar y generar código en C++, Java, Php y
Si. Requisitos funcionales y no IDL.
Administración de Requisitos
funcionales; Matriz de trazabilidad de requisitos.
Si. Diagramas UML de clases y de interacción. Sus Características principales:
Requiere agregar algunos estereotipos como <> o
Análisis y Diseño  Es gratis.
<<use case realization>> si se necesitan. En
ocasiones hay que modificar la plantilla  Es multiplataforma: Linux, Solari, Mac Os, Windows.
 Permite programar simultáneamente en C++, Java, Php y IDL.
Implementación Es adecuada para proyectos C++, VB, C# y VB.NET  Es rápido, no necesita mucho espacio de memoria.
Prueba Si 
No lo soporta directamente. Aproximación: Usar
Control de Versiones unidad controlada. Está planificada para futuras
versiones.
Administración de Riesgos - Asignación de
Administración del Proyecto
Recursos - Estimación del Proyecto
Publicación Web Si
además generar xcripts SQL, aplicar procesos de ingeniería inversa, usar plantillas
de diseño personalizables y crear detallados informes en HTML y RTF.

CASE Studio

Herramienta con potente utilidad de modelado para varias bases de datos. CASE
Studio es una herramienta profesional con la que pueden diseñarse bases de datos, ArgoUML
incluye facilidades para la creación de diagramas de relación, modelado de datos y
gestión de estructuras. Tiene soporte para trabajar con una amplia variedad de Herramienta que contiene funciones avanzadas en las etapas de diseño y
formatos de base de datos (Oracle, SQL, MySQL, PostgreSQL, Access) y permite modelación de software. Presenta licencia comercial.
Como características fundamentales: poder crear las aplicaciones eficazmente, desde procesamiento de
 Es modular y extensible. transacciones a la aplicación de bases de datos de cliente/servidor, así
 Soporta todas las especificaciones UML. como sistemas de tiempo real.
 Integrado con la WEB.
 Brinda una excelente ayuda.  EasyCASE permite capturar los detalles de diseño de un sistema y
Poseidon comunicar las ideas gráficamente, para que sean fáciles de ver y
entender. Para un diseño legítimo y modelado de datos, procesos y
Es una herramienta para modelar cualquier clase de sistema, relacionado o no eventos, permite crear y mantener diagramas de flujo de datos,
con programación por computadoras. Se presenta en dos ediciones: Community diagramas de entidad-relación, mapas de estructura y más.
Edition y Professional Edition.
 Posee herramientas de corrección avanzadas que permiten revisiones
Sus características fundamentales son: generales. Permite re-usar diagramas o partes de diagramas para
economizar el diseño de un proyecto.
 Soporta diagramas UML.
 Permite Generación de código para Java y exportación como HTML.  EasyCASE soporta una gama amplia de metodologías estructuradas,
 Fácil de instalar y actualizar. permitiendo escoger los métodos más apropiados para realizar las
 Compatibilidad entre ediciones. tareas. Determina los tipos de esquemas según la metodología del
 Opciones avanzadas de impresión. proyecto seleccionada y notifica de errores a medida que el modelo vaya
 Soporta gráficos en la mayoría de los formatos. construyéndose.
 Varios idiomas.
El verdadero poder de EasyCASE se encuentra en el soporte comprensivo al
EasyCASE modelado de datos, procesos y eventos. Posee desde el editor de diagramas flexible
y un diccionario de los datos, así como una extensa cantidad de reportes y análisis.
 EasyCASE es un producto para la generación de esquemas de base de
datos e ingeniería reversa. Esta herramienta permite automatizar las Es una herramienta multi-usuario, permite compartir datos y trabajar en un
fases de análisis y diseño dentro del desarrollo de una aplicación, para proyecto con otros departamentos. El equipo completo puede acceder a proyectos
localizados en el servidor de la red concurrentemente. Para asegurar la seguridad  . SQL Server
de los datos, existe el diagrama y diccionario de los datos que bloquean por niveles  . Sybase
al registro, al archivo y al proyecto, y niveles de control de acceso.  . Watcom SQL
Especificaciones de EasyCASE Profesional:  . Access
 . ANSI SQL
Metodologías Estructuradas:  . Clipper
 . dBASE III , IV, V
 . Yourdon/DeMarco  . DB2
 . Gane & Sarson  . FoxPro
 . Ward-Mellor  . Informix
 . SSADM  . Otras más ...
 . Yourdon/Constantine
 . Chen Tipos de Diagramas:
 . Martin
 . Bachman  . Data Flow Diagrams (DFDs)
 . Shlaer-Mellor  . Transformation Schema (real-time DFDs)
 . IDEF1X  . Structure Charts (STCs)
 . Merise  . State Transition Diagrams (STDs)
 . Metrica  . Entity Relationship Diagrams (ERDs)
  . Data Model Diagrams (DMDs)
Bases de Datos que soporta:  . Data Structure Diagrams (DSDs)
 . Entity Life History Diagrams (ELHs)
 .Oracle  . Logical Data Structure Diagrams (LDSs)
 . Paradox
 . Progress
 . SQLBase
Genera automáticamente las tablas y miles de líneas de stored procedure y
triggers para los principales tipos de base de datos.

 ERwin hace fácil el diseño de una base de datos. Los diseñadores de bases
de datos sólo apuntan y pulsan un botón para crear un gráfico del modelo
Entidad-Relación de todos sus requerimientos de datos y capturar las
reglas de negocio en un modelo lógico, mostrando todas las entidades,
atributos, relaciones, y llaves importantes.
 Más que una herramienta de dibujo, ERwin automatiza el proceso de
diseño de una manera inteligente. Por ejemplo, ERwin habilita la creación
de un diccionario de atributos reusables, asegurando la consistencia de
nombres y definiciones para su base de datos.
 Se mantienen las vistas de la base de datos como componentes
integrados al modelo, permitiendo que los cambios en las tablas sean
reflejados automáticamente en las vistas definidas.
La migración automática garantiza la integridad referencial de la base de
datos.
Erwin  ERwin establece una conexión entre una base de datos diseñada y una
base de datos, permitiendo transferencia entre ambas y la aplicación de
PLATINUM ERwin es una herramienta de diseño de base de datos. Brinda ingeniería reversa. Usando esta conexión, Edwin genera automáticamente
productividad en diseño, generación, y mantenimiento de aplicaciones. Desde un tablas, vistas, índices, reglas de integridad referencial (llaves primarias,
modelo lógico de los requerimientos de información, hasta el modelo físico llaves foráneas), valores por defecto y restricciones de campos y
perfeccionado para las características específicas de la base de datos diseñada, dominios.
ERwin permite visualizar la estructura, los elementos importantes, y optimizar el
diseño de la base de datos.  ERwin soporta principalmente bases de datos relacionales SQL y bases de
datos que incluyen Oracle, SQL Server, Sybase, DB2, e Informix.
El mismo modelo puede ser usado para generar múltiples bases de datos, o
convertir una aplicación de una plataforma de base de datos a otra.

Especificaciones Técnicas:

Software de Aplicación Compatibles: NetDynamics, PowerBuilder, PROGRESS, Visual


Basic.

Bases de Datos Compatibles: CA-Clipper, CA-OpenIngres, DB2 for MVS y DB2 for
OS/390, DB2 UDB, dBASE, FoxPro, HiRDB, Informix, InterBase, Microsoft Access,
Microsoft SQL Server, Oracle, Paradox, Rdb, Red Brick Warehouse, SAS, SQL
Anywhere, SQLBase, Sybase, Teradata.
Oracle Designer  Sybase

Oracle Designer es un juego de herramientas para guardar las definiciones que Oracle Designer no fuerza al uso de alguna metodología específica, pero en cambio
necesita el usuario y automatizar la construcción rápida de aplicaciones proporciona un juego de herramientas que le permiten que use la metodología de
cliente/servidor. desarrollo que elija.

Integrado con Oracle Developer, Oracle Designer provee una solución para Oracle Designer soporta las siguientes metodologías: Desarrollo Rápido de
desarrollar sistemas empresariales cliente/servidor. Sofisticadas aplicaciones Aplicaciones (RAD), ?Ingeniería de la Información (IE), ?Modelado Asistido de
cliente/servidor pueden ser 100% generadas usando la lógica de la aplicación y el Procesos, Captura de Diseño Asistido.
módulo de componentes reusables. Oracle Designer también habilita la captura del
diseño de sistemas existentes, salvaguardando la versión actual. Las herramientas de Oracle Designer se agrupan en áreas que reflejan las
necesidades primarias de sus tipos diferentes de usuarios:
Todos los datos ingresados por cualquier herramienta de Oracle Designer, en Requisitos para el Modelado de Sistemas:
cualquier fase de desarrollo, se guardan en un repositorio central, habilitando el
trabajo fácil del equipo y la dirección del proyecto.  Uso de las herramientas en esta área: procesos para el modelo del
negocio; Re-examinar los métodos usados para conseguir las metas de la
En el lado del Servidor, Oracle Designer soporta la definición, generación y captura organización; crear representaciones diagramáticas de los procesos del
de diseño de los siguientes tipos de bases de datos, por conexión nativa de Oracle y negocio; detalles de los registros; describir los requisitos del negocio en
por conectividad ODBC: detalle; crear modelos diagramáticos de las entidades, funciones y flujos
de datos en los sistemas que constituyen la organización.
 Oracle7 y más  Generadores de Diseños Preliminares:
 ?Personal Oracle Lite  Uso de Transformadores para generar los diseños preliminares de los
 Rdb modelos creados anteriormente.
 ANSI 92  Diseño y Generación:
 DB and MVS  Uso de las herramientas en esta área: diseño de sistemas que reúnan los
 Microsoft SQL Server requisitos comerciales de una organización; proveer un ambiente de
desarrollo para los ingenieros de sistemas y diseñadores; crear
componentes del lado del servidor y aplicaciones del lado del cliente
desde definiciones grabadas en el Repositorio de Datos.
 Utilitarios:
 Uso de las herramientas en esta área: ingresar y editar la información en
el Repositorio; mostrar las relaciones entre los elementos en el
Repositorio de Datos; generar etiquetas predefinidas y personalizadas en
el Repositorio; administrar el Repositorio de datos; escribir sentencias
interactivas en SQL.
PowerDesigner  PowerDesigner WarehouseArchitect: Provee un poderoso
datawarehousing para el diseño e implementación de una base de datos.
PowerDesigner es una suite de aplicaciones de Powersoft para la construcción, Cuenta con soporte para bases de datos tradicionales DBMS y bases de
diseño y modelado de datos a través de diversas aplicaciones. Es una herramienta datos en plataformas de sistemas analíticos usando modelados
para el análisis, diseño inteligente y construcción sólida de una base de datos y un dimensionales, esquemas de "estrella" y "nieve", particionamiento y
desarrollo orientado a modelos de datos a nivel físico y conceptual. agregación. También cuenta con un alto desempeño en el indexamiento de
esquemas.
Esta suite cuenta con los siguientes productos:
 PowerDesigner MetaWorks: Permite fácilmente ver y compartir la
 PowerDesigner ProcessAnalyst: Permite analizar el flujo de datos de información del modelado de datos con una definición constante de
toda la empresa, a través de los departamentos hasta el usuario final. objetos. También puede comparar y mezclar dos modelos de datos pasó a
paso.
 PowerDesigner DataArchitect: Provee a los diseñadores de las bases de
datos una manera eficiente para la creación inteligente, depuración e  PowerDesigner Viewer: Crea reportes de los modelos físicos,
ingeniería de reversa del modelado, tanto conceptual como físico de los conceptuales y procesos del modelado de la base de datos. También
datos. permite generar reportes para Internet en HTML. Este producto cuenta
con demos directos de sitio de Sybase en Internet para su evaluación.
 PowerDesigner AppModeler: Permite el diseño y ajuste de los
componentes de objetos y datos en aplicaciones de uso común como
Además de todas estas características, PowerDesigner ofrece las posibilidades de:
PowerBuilder, Power++, Visual Basic y Delphi, ajustando el modelo de base
de datos. Junto con la aplicación de servidor PowerDynamo (incluido) se
 Soporte para tipos de datos abstractos: PowerDesigner soporta la identificación de
pueden publicar las bases de datos en Internet directamente del modelo
tipos de datos abstractos con ingeniería inversa de aplicaciones para Oracle.
de base de datos. Esta herramienta también puede generar páginas de
servidor activas para Microsoft Internet Information Server.
 Soporte para usuarios de bases de datos: Los usuarios de bases de datos pueden
ser recogidos de una base de datos existente y luego almacenados en un modelo
físico de datos. Ahora, es posible añadir nuevos usuarios y también asignar a partir de la enciclopedia, en esquemas para Sybase, DB2, Oracle,
usuarios como propietarios y vistas. Ingress, SQL Server, RDB, XDB, Progress, Paradox, SQL Base, AS400,
Interbase, OS/2, DBMS, Dbase 111, Informix, entre otros. Genera también
 Mayor selectividad en ingeniería inversa: PowerDesigner permite seleccionar no Windows DDL y definiciones de datos para lenguaje C/C++. Posibilita a
sólo las tablas que se desean cargar, sino todo tipo de objetos de la base de datos. través de ODBC, la creación de bases de datos a partir del modelo de
entidades, para los diversos manejadores de bases de datos arriba
mencionados.
 Cálculo del tamaño de las bases de datos: Puede calcular y definir el tamaño
definitivo de bases de datos de nuevo diseño y construcción, incluyendo tamaños
Posee un módulo específico para Ingeniería Reversa desde las Bases de Datos SQL
detallados de índices y tablas.
más populares, incluyendo Sybase, DB2, Infonmix, Oracle y SQL Server (DLL),
además de diálogos y menús desde Windows.
System Architect
 System Architect posee múltiples metodologías para diseño y análisis,
 System Architect posee un repositorio único que integra todas las incluyendo: Análisis Estructurado en los modelos De Marco/Yourdon y
herramientas, y metodologías usadas. En la elaboración de los diagramas, Gane/Sarson, análisis de tiempo real en el modelo Ward & Mellor; análisis
el System Architect conecta directamente al diccionario de datos, los esencial de sistemas; análisis orientado a objetos en los modelos UML,
elementos asociados, comentarios, reglas de validaciones, normalización, Booch, Coad/Yourdon, Rumbaugh, Shaler/Mellor; Diagrama de entidad -
etc. relación en los modelos Peter Chen, James Martin, Bachman o Booch,
Gráfico de Estructuras, Diagramas de Descomposición, Planeamiento
Posee control automático de diagramas y datos, normalizaciones y balanceamiento Estratégico de informaciones, entre otras.
entre diagramas "Padre e Hijo", además de balanceamiento horizontal, que trabaja
integrado con el diccionario de datos, asegurando la compatibilidad entre el Modelo Es una herramienta creada específicamente para la arquitectura
de Datos y el Modelo Funcional. "Cliente/Servidor", por eso posee control total de versiones, y de acceso, así
como la administración completa de múltiples equipos de desarrollo.
 System Architect es considerado un Upper Case, que puede ser integrado
a la mayoría de los generadores de código. Traduce modelos de entidades,
 Win A&D, herramientas CASE para Análisis y Diseño, incluye técnicas
estructuradas y orientadas a objetos.
 CRADLE, conjunto de herramientas CASE integradas que dan soporte a
la Planificación estratégica, Análisis y Diseño.
 SilverRun: Conjunto integrado de de herramientas CASE para el modelado
de negocios.
 SNAP
 VISIBLE ANALYST
 UMLCAKE
 WINPROJECT
 TOGETHER
 OBJECTEERING
 MEGA SUITE
 OBJECT DOMAIN
 PROXY DESIGNER
 UML DIAGRAMMMER
 UMBRELLO UML MODELLER

INTRODUCCION A SQL

El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos


normalizado, utilizado por el motor de base de datos de Microsoft Jet. SQL se utiliza
Otras Herramientas para crear objetos QueryDef, como el argumento de origen del método
OpenRecordSet y como la propiedad RecordSource del control de datos. También se
 ASADAL: Herramienta CASE especializada en Sistemas de Tiempo Real puede utilizar con el método Execute para crear y manipular directamente las
 CASE GENEXUS Tool
bases de datos Jet y crear consultas SQL de paso a través para manipular bases de Comando Descripción
datos remotas cliente - servidor.
Utilizado para consultar registros de la base de datos que satisfagan
SELECT
un criterio determinado
1.1. Componentes del SQL
Utilizado para cargar lotes de datos en la base de datos en una única
INSERT
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones operación.
de agregado. Estos elementos se combinan en las instrucciones para crear, Utilizado para modificar los valores de los campos y registros
actualizar y manipular las bases de datos. UPDATE
especificados

1.2 Comandos DELETE Utilizado para eliminar registros de una tabla de una base de datos

Existen dos tipos de comandos SQL:

 Los DLL que permiten crear y definir nuevas bases de datos, campos e
índices.
 Los DML que permiten generar consultas para ordenar, filtrar y extraer
datos de la base de datos.

COMANDOS DLL
COMANDO DESCRIPCIÓN
CREATE Utilizado para crear nuevas tablas, campos e índices
DROP Empleado para eliminar tablas e índices
Utilizado para modificar las tablas agregando campos o cambiando la
ALTER
definición de los campos.
COMANDOS DML
1.3 Cláusulas NOT Negación lógica. Devuelve el valor contrario de la expresión.

Las cláusulas son condiciones de modificación utilizadas para definir los datos que
1.5 Operadores de Comparación
desea seleccionar o manipular.

Cláusula Descripción
Operador Uso
Utilizada para especificar la tabla de la cual se van a seleccionar los
FROM < Menor que
registros
Utilizada para especificar las condiciones que deben reunir los registros > Mayor que
WHERE
que se van a seleccionar <> Distinto de
GROUP <= Menor ó Igual que
Utilizada para separar los registros seleccionados en grupos específicos
BY >= Mayor ó Igual que
HAVING Utilizada para expresar la condición que debe satisfacer cada grupo = Igual que
ORDER Utilizada para ordenar los registros seleccionados de acuerdo con un BETWEEN Utilizado para especificar un intervalo de valores.
BY orden específico
LIKE Utilizado en la comparación de un modelo
1.4 Operadores Lógicos
Utilizado para especificar registros de una base de datos
In

Operador Uso
Es el "y" lógico. Evalua dos condiciones y devuelve un valor de verdad
AND
sólo si ambas son ciertas. 1.6 Funciones de Agregado
Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdar si
OR
alguna de las dos es cierta.
Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de Para consultas sobre tabla adjunta de productos de bases
registros para devolver un único valor que se aplica a un grupo de registros. BINARY 1 byte
de datos que definen un tipo de datos Binario.
BIT 1 byte Valores Si/No ó True/False
Función Descripción BYTE 1 byte Un valor entero entre 0 y 255.
Utilizada para calcular el promedio de los valores de un campo COUNTER 4 bytes Un número incrementado automáticamente (de tipo Long)
AVG
determinado
Un entero escalable entre 922.337.203.685.477,5808 y
COUNT Utilizada para devolver el número de registros de la selección CURRENCY 8 bytes
922.337.203.685.477,5807.
Utilizada para devolver la suma de todos los valores de un campo DATETIME 8 bytes Un valor de fecha u hora entre los años 100 y 9999.
SUM
determinado
Un valor en punto flotante de precisión simple con un
MAX Utilizada para devolver el valor más alto de un campo especificado rango de -3.402823*1038 a -1.401298*10-45 para valores
SINGLE 4 bytes
MIN Utilizada para devolver el valor más bajo de un campo especificado negativos, 1.401298*10-45 a 3.402823*1038 para valores
positivos, y 0.
Un valor en punto flotante de doble precisión con un
TIPOS DE DATOS rango de -1.79769313486232*10308 a -
DOUBLE 8 bytes 4.94065645841247*10-324 para valores negativos,
Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios 4.94065645841247*10-324 a 1.79769313486232*10308 para
sinónimos válidos reconocidos por dichos tipos de datos. valores positivos, y 0.

Tipos de datos primarios: SHORT 2 bytes Un entero corto entre -32,768 y 32,767.
LONG 4 bytes Un entero largo entre -2,147,483,648 y 2,147,483,647.
1 byte por
LONGTEXT De cero a un máximo de 1.2 gigabytes.
Tipo de carácter
Longitud Descripción
Datos
LONGBINARY Según se De cero 1 gigabyte. Utilizado para objetos OLE.
necesite INTEGER2
SHORT
1 byte por SMALLINT
TEXT De cero a 255 caracteres.
caracter INT
LONG INTEGER
La siguiente tabla recoge los sinónimos de los tipos de datos definidos: INTEGER4
GENERAL
LONGBINARY
TIPO DE DATO SINÓNIMOS OLEOBJECT
BINARY VARBINARY LONGCHAR
BOOLEAN LOGICAL LONGTEXT MEMO
BIT NOTE
LOGICAL1 YESNO
BYTE INTEGER1 ALPHANUMERIC
CHAR
COUNTER AUTOINCREMENT
TEXT CHARACTER
CURRENCY MONEY STRING
DATE VARCHAR
DATETIME TIME VARIANT (No Admitido) VALUE
TIMESTAMP
CONSULTAS DE SELECCIÓN
FLOAT4
SINGLE IEEESINGLE Las consultas de selección se utilizan para indicar al motor de datos que devuelva
REAL información de las bases de datos, esta información es devuelta en forma de
FLOAT FLOAT8 conjunto de registros que se pueden almacenar en un objeto recordset. Este
DOUBLE IEEEDOUBLE NUMBER conjunto de registros es modificable.
NUMERIC
 2.1 Consultas básicas
La sintaxis básica de una consulta de selección es la siguiente: SELECT Código Postal, Nombre, Teléfono FROM Clientes ORDER BY
Código Postal, Nombre;
SELECT Campos FROM Tabla; Incluso se puede especificar el orden de los registros: ascendente mediante la
cláusula (ASC -se toma este valor por defecto) ó descendente (DESC)
En donde campos es la lista de campos que se deseen recuperar y tabla es el
origen de los mismos, por ejemplo: SELECT Código Postal, Nombre, Teléfono FROM Clientes ORDER BY
Código Postal DESC , Nombre ASC;
SELECT Nombre, Teléfono FROM Clientes;
 2.3 Consultas con Predicado
Esta consulta devuelve un recordset con el campo nombre y teléfono de la tabla
clientes.
El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar,
 2.2 Ordenar los registros los posibles predicados son:

Adicionalmente se puede especificar el orden en que se desean recuperar los Predicado Descripción
registros de las tablas mediante la cláusula ORDER BY Lista de Campos. En donde ALL Devuelve todos los campos de la tabla
Lista de campos representa los campos a ordenar. Ejemplo: TOP Devuelve un determinado número de registros de la tabla
DISTINCT Omite los registros cuyos campos seleccionados coincidan totalmente
SELECT Código Postal, Nombre, Teléfono FROM Clientes ORDER BY Nombre; DISTINCTROW Omite los registros duplicados basándose en la totalidad del
registro y no sólo en los campos seleccionados.
Esta consulta devuelve los campos Código Postal, Nombre, Teléfono de la tabla
Clientes ordenados por el campo Nombre.  ALL

Se pueden ordenar los registros por más de un campo, como por ejemplo: Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos
selecciona todos los registros que cumplen las condiciones de la instrucción SQL.
No se conveniente abusar de este predicado ya que obligamos al motor de la base El valor que va a continuación de TOP debe ser un Integer sin signo.TOP no afecta a
de datos a analizar la estructura de la tabla para averiguar los campos que la posible actualización de la consulta.
contiene, es mucho más rápido indicar el listado de campos deseados.
 DISTINCT
SELECT ALL FROM Empleados;
SELECT * FROM Empleados; Omite los registros que contienen datos duplicados en los campos seleccionados.
Para que los valores de cada campo listado en la instrucción SELECT se incluyan en
 TOP la consulta deben ser únicos.

Devuelve un cierto número de registros que entran entre al principio o al final de un Por ejemplo, varios empleados listados en la tabla Empleados pueden tener el
rango especificado por una cláusula ORDER BY. Supongamos que queremos mismo apellido. Si dos registros contienen López en el campo Apellido, la siguiente
recuperar los nombres de los 25 primeros estudiantes del curso 1994: instrucción SQL devuelve un único registro:

SELECT TOP 25 Nombre, Apellido FROM Estudiantes SELECT DISTINCT Apellido FROM Empleados;
ORDER BY Nota DESC;
Si no se incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos
de 25 registros de la tabla Estudiantes. El predicado TOP no elige entre valores campos indicados en la cláusula SELECT posean un contenido diferente. El resultado
iguales. En el ejemplo anterior, si la nota media número 25 y la 26 son iguales, la de una consulta que utiliza DISTINCT no es actualizable y no refleja los cambios
consulta devolverá 26 registros. Se puede utilizar la palabra reservada PERCENT subsiguientes realizados por otros usuarios.
para devolver un cierto porcentaje de registros que caen al principio o al final de
un rango especificado por la cláusula ORDER BY. Supongamos que en lugar de los
25 primeros estudiantes deseamos el 10 por ciento del curso:  DISTINCTROW

SELECT TOP 10 PERCENT Nombre, Apellido FROM Estudiantes Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior
ORDER BY Nota DESC; que sólo se fijaba en el contenido de los campos seleccionados, éste lo hace en el
contenido del registro completo independientemente de los campos indicados en la información que se encuentra contenida en una tabla que no se encuentra en la
cláusula SELECT. base de datos que ejecutará la consulta o que en ese momento no se encuentra
SELECT DISTINCTROW Apellido FROM Empleados; abierta, esta situación la podemos salvar con la palabra reservada IN de la
siguiente forma:
Si la tabla empleados contiene dos registros: Antonio López y Marta López el
ejemplo del predicado DISTINCT devuleve un único registro con el valor López en el
campo Apellido ya que busca no duplicados en dicho campo. Este último ejemplo SELECT DISTINCTROW Apellido AS Empleado FROM Empleados
devuelve dos registros con el valor López en el apellido ya que se buscan no
duplicados en el registro completo. IN 'c:\databases\gestion.mdb';

 2.4 Alias
En donde c:\databases\gestion.mdb es la base de datos que contiene la tabla
En determinadas circunstancias es necesario asignar un nombre a alguna columna Empleados.
determinada de un conjunto devuelto, otras veces por simple capricho o por otras
circunstancias. Para resolver todas ellas tenemos la palabra reservada AS que se
INSTRUCCIONES DE LENGUAJE DE MANIPULACIÓN DE DATOS (DML)
encarga de asignar el nombre que deseamos a la columna deseada. Tomado como
(TRANSACT-SQL)
referencia el ejemplo anterior podemos hacer que la columna devuelta por la
consulta, en lugar de llamarse apellido (igual que el campo devuelto) se llame
Empleado. En este caso procederíamos de la siguiente forma:
El lenguaje de manipulación de datos (DML) es un vocabulario usado para
recuperar y trabajar con datos en SQL Server 2016. Use estas instrucciones para
SELECT DISTINCTROW Apellido AS Empleado FROM Empleados;
agregar, modificar, consultar o quitar datos de una base de datos de SQL Server.

 2.5 Recuperar Información de una base de Datos Externa


En la siguiente tabla se describen las instrucciones DML que usa SQL Server.

Para concluir este capítulo se debe hacer referencia a la recuperación de registros


de bases de datos externa. Es ocasiones es necesario la recuperación de
Se puede utilizar en estas
Cláusula
instrucciones
BULK INSERT (Transact-SQL) SELECT (Transact-SQL)
Constructor con valores de tabla FROM, INSERT, MERGE
DELETE (Transact-SQL) UPDATE (Transact-SQL)
(Transact-SQL)
INSERT (Transact-SQL) UPDATETEXT (Transact-SQL)
TOP (Transact-SQL) DELETE, INSERT, MERGE, SELECT,
UPDATE
MERGE (Transact-SQL) WRITETEXT (Transact-SQL)
WHERE (Transact-SQL) DELETE, SELECT, UPDATE
READTEXT (Transact-SQL)
En la siguiente lista se enumeran las cláusulas que se usan en varias instrucciones WITH common_table_expression (Transact- DELETE, INSERT, MERGE, SELECT,
o cláusulas DML. SQL) UPDATE

Se puede utilizar en estas


Cláusula
instrucciones
PROBLEMAS DE SEGURIDAD EN LAS BD
FROM (Transact-SQL) DELETE, SELECT, UPDATE

Sugerencias (Transact-SQL) DELETE, INSERT, SELECT, UPDATE


A continuación se listan algunos problemas de seguridad que se pueden presentar
OPTION (cláusula de Transact-SQL) DELETE, SELECT, UPDATE en las bases de datos:

OUTPUT (cláusula de Transact-SQL) DELETE, INSERT, MERGE, UPDATE 1) Identificar su sensibilidad

Condiciones de búsqueda (Transact-SQL) DELETE, MERGE, SELECT, UPDATE No se puede asegurar lo que no se conoce.
administrador):
Confeccione un buen catálogo de tablas o datos sensibles de sus instancias de base
de datos. Además, automatice el proceso de identificación, ya que estos datos y su Limitar el acceso a los procedimientos a ciertos usuarios.
correspondiente ubicación pueden estar en constante cambio debido a nuevas Delimitar el acceso a los datos para ciertos usuarios, procedimientos y/o datos.
aplicaciones o cambios producto de fusiones y adquisiciones. Declinar la coincidencia de horarios entre usuarios que coincidan.

Desarrolle o adquiera herramientas de identificación, asegurando éstas contra el


malware, colocado en su base de datos el resultado de los ataques de inyección 3) Endurecimiento
SQL; pues aparte de exponer información confidencial debido a vulnerabilidades,
como la inyección SQL, también facilita a los atacantes incorporar otros ataques en Como resultado de una evaluación de la vulnerabilidad a menudo se dan una serie
el interior de la base de datos. de recomendaciones específicas. Este es el primer paso en el endurecimiento de la
base de datos. Otros elementos de endurecimiento implican la eliminación de todas
2) Evaluación de la vulnerabilidad y la configuración las funciones y opciones que se no utilicen. Aplique una política estricta sobre que
se puede y que no se puede hacer, pero asegúrese de desactivar lo que no necesita.
Evalúe su configuración de bases de datos, para asegurarse que no tiene huecos de
seguridad. 4) Audite

Esto incluye la verificación de la forma en que se instaló la base de datos y su Una vez que haya creado una configuración y controles de endurecimiento, realice
sistema operativo (por ejemplo, la comprobación privilegios de grupos de archivo - auto evaluaciones y seguimiento a las recomendaciones de auditoría para asegurar
lectura, escritura y ejecución- de base de datos y bitácoras de transacciones). que no se desvíe de su objetivo (la seguridad).

Asimismo con archivos con parámetros de configuración y programas ejecutables. Automatice el control de la configuración de tal forma que se registre cualquier
cambio en la misma. Implemente alertas sobre cambios en la configuración. Cada
Además, es necesario verificar que no se está ejecutando la base de datos con vez que un cambio se realice, este podría afectar a la seguridad de la base de
versiones que incluyen vulnerabilidades conocidas; así como impedir consultas SQL datos.
desde las aplicaciones o capa de usuarios. Para ello se pueden considerar (como 5) Monitoreo
Recuerde que es un requisito de auditoría, y también es importante para las
Monitoreo en tiempo real de la actividad de base de datos es clave para limitar su investigaciones forenses.
exposición, aplique o adquiera agentes inteligentes de monitoreo, detección de
intrusiones y uso indebido. La mayoría de las organizaciones en la actualidad emplean alguna forma de manual
de auditoría de transacciones o aplicaciones nativas de los sistemas gestores de
Por ejemplo, alertas sobre patrones inusuales de acceso, que podrían indicar la bases de datos. Sin embargo, estas aplicaciones son a menudo desactivadas, debido
presencia de un ataque de inyección SQL, cambios no autorizados a los datos, a: su complejidad altos costos operativos problemas de rendimiento la falta de
cambios en privilegios de las cuentas, y los cambios de configuración que se segregación de funciones y la necesidad mayor capacidad de almacenamiento.
ejecutan a mediante de comandos de SQL. Afortunadamente, se han desarrollado soluciones con un mínimo de impacto en el
rendimiento y poco costo operativo, basado en tecnologías de agente inteligentes.
Recuerde que el monitoreo usuarios privilegiados, es requisito para la 7) Autenticación, control de acceso, y Gestión de derechos
gobernabilidad de datos y cumplimiento de regulaciones como SOX y regulaciones
de privacidad. También, ayuda a detectar intrusiones, ya que muchos de los ataques
más comunes se hacen con privilegios de usuario de alto nivel. No todos los datos y no todos los usuarios son creados iguales. Usted debe
autenticar a los usuarios, garantizar la rendición de cuentas por usuario, y
El monitoreo dinámico es también un elemento esencial de la evaluación de administrar los privilegios para de limitar el acceso a los datos.
vulnerabilidad, le permite ir más allá de evaluaciones estáticas o forenses. Un
ejemplo clásico lo vemos cuando múltiples usuarios comparten credenciales con Implemente y revise periódicamente los informes sobre de derechos de usuarios,
privilegios o un número excesivo de inicios de sesión de base de datos. como parte de un proceso de formal de auditoría.

Utilice el cifrado para hacer ilegibles los datos confidenciales, complique el trabajo
6) Pistas de Auditoría a los atacantes, esto incluye el cifrado de los datos en tránsito, de modo que un
atacante no puede escuchar en la capa de red y tener acceso a los datos cuando se
Aplique pistas de auditoría y genere trazabilidad de las actividades que afectan la envía al cliente de base de datos.
integridad de los datos, o la visualización los datos sensibles.
Todos los elementos del estándar HTML5 están listados aquí, descritos por su
Medidas de seguridad del DBA: etiqueta de apertura y agrupados por su función. Contrariamente Alin dice de
elementos HTML el cual lista todas las posibles etiquetas, estándar, no-estándar,
 Físicas: Controlar el acceso al equipo. Tarjetas de acceso, etc. válidas, obsoletas o aquellas en desuso, esta lista solamente los elementos válidos
de HTML5. Solamente aquellos elementos listados aquí son los que deberían ser
 Personal: Acceso sólo del personal autorizado. Evitar sobornos, etc. usados en nuevos sitios Web.

 SO: Seguridad a nivel de SO El símbolo indica que el elemento fue añadido en HTML5. Nótese que otros
elementos listados aquí pueden haber sido modificados o extendido en su
 SGBD (sistema de gestión de base de datos): Uso herramientas de significado por la especificación HTML5.
seguridad que proporcione el SGBD. Perfiles de usuario, vistas,
restricciones de uso de vistas, etc. ELEMENTO RAÍZ

 Uso de técnicas de cifrado: Para proteger datos en Base de Datos ELEMENTO DESCRIPCIÓN
distribuidas o con acceso por red o internet.
<!doctype html> Define que el documento está bajo el estándar de HTML 5.
 Diferentes tipos de cuentas. Elemento Descripción

Representa la raíz de un documento HTML o XHTML. Todos los demás elementos d


 Manejo de la tabla de usuarios con código y contraseña, control de las <html>
descendientes de este elemento.
operaciones efectuadas en cada sesión de trabajo por cada usuario y
anotadas en la bitácora, lo cual facilita la auditoría de la Base de Datos.
METADATOS DEL DOCUMENTO

INTRODUCCION AL CONCEPTO DE LA APLICACIÓN WEB ELEMENTO DESCRIPCIÓN

<head> Representa una colección de metadatos acerca del documento,


ELEMENTO DESCRIPCIÓN ELEMENTO DESCRIPCIÓN

incluyendo enlaces a, o definiciones de, scripts y hojas de estilo. soporta scripting.

Define el título del documento, el cual se muestra en la barra de título


del navegador o en las pestañas de página. Solamente puede SECCIONES
<title>
contener texto y cualquier otra etiqueta contenida no será
interpretada. ELEMENTO DESCRIPCIÓN

<base> Define la URL base para las URLs relativas en la página. Representa el contenido principal de un
<body> documento HTML. Solo hay un elemento <body> en
Usada para enlazar JavaScript y CSS externos con el documento un documento.
<link>
HTML actual.
Define una sección en un documento.
Define los metadatos que no pueden ser definidos usando otro <section>
<meta>
elemento HTML.
Define una sección que solamente contiene
<style> Etiqueta de estilo usada para escribir CSS en línea. <nav> enlaces de navegación

Define contenido autónomo que podría existir


<article> independientemente del resto del contenido.
SCRIPTING
Define algunos contenidos vagamente relacionados
ELEMENTO DESCRIPCIÓN con el resto del contenido de la página. Si es
<aside> removido, el contenido restante seguirá teniendo
Define ya sea un script interno o un enlace hacia un script externo. El sentido
<script>
lenguaje de programación es JavaScript
Los elemento de cabecera implementan seis
<noscript> Define un contenido alternativo a mostrar cuando el navegador no <h1>,<h2>,<h3>,<h4>,<h5>,<h6>
niveles de cabeceras de documentos; <h1> es la de
ELEMENTO DESCRIPCIÓN ELEMENTO DESCRIPCIÓN

mayor y <h6> es la de menor importancia. Un <p> Define una parte que debe mostrarse como un párrafo.
elemento de cabecera describe brevemente el
Representa un quiebre temático entre párrafos de una
tema de la sección que introduce. <hr>
sección o articulo o cualquier contenido.
Define la cabecera de una página o sección.
Indica que su contenido esta pre formateado y que este
Usualmente contiene un logotipo, el título del sitio <pre>
<header> formato debe ser preservado.
Web y una tabla de navegación de contenidos.
<blockquote> Representa un contenido citado desde otra fuente.
Define el pie de una página o sección. Usualmente
contiene un mensaje de derechos de autoría, <ol> Define una lista ordenada de artículos.
<footer> algunos enlaces a información legal o direcciones
para dar información de retroalimentación. <ul> Define una lista de artículos sin orden.

Define una sección que contiene información de <li> Define un artículo de una lista enumerada.
<address>
contacto. Define una lista de definiciones, es decir, una lista de
<dl>
Define el contenido principal o importante en el términos y sus definiciones asociadas.
documento. Solamente existe un <dt> Representa un término definido por el siguiente <dd>.
<main>
elemento <main> en el documento.
<dd> Representa la definición de los términos listados antes que él.

Representa una figura ilustrada como parte del documento.


<figure>
AGRUPACIÓN DE CONTENIDO
Representa la leyenda de una figura.
<figcaption>
ELEMENTO DESCRIPCIÓN
ELEMENTO DESCRIPCIÓN ELEMENTO DESCRIPCIÓN

Representa un contenedor genérico sin ningún significado abreviatura puede ser representada por el atributo title.
<div>
especial.
Asocia un equivalente legible por máquina a sus contenidos. (Este
elemento está sólamente en la versión de la WHATWG del
<data>
SEMÁNTICA A NIVEL DE TEXTO estandar HTML, y no en la versión de la W3C de HTML5).

ELEMENTO DESCRIPCIÓN Representa un valor de fecha y hora; el equivalente legible por


<time> máquina puede ser representado en el atributo datetime.
<a> Representa un hiperenlace, enlazando a otro recurso.
<code> Representa un código de ordenador.
<em> Representa un texto enfatizado, como un acento de intensidad.
Representa a una variable, es decir, una expresión matemática o
<strong> Representa un texto especialmente importante. contexto de programación, un identificador que represente a una
<var>
Representa un comentario aparte, es decir, textos como un
constante, un símbolo que identifica una cantidad física, un
<small> descargo de responsabilidad o una nota de derechos de autoría,
parámetro de una función o un marcador de posición en prosa.
que no son esenciales para la comprensión del documento. <samp> Representa la salida de un programa o un ordenador.
<s> Representa contenido que ya no es exacto o relevante. Representa la entrada de usuario o usuaria, por lo general desde
un teclado, pero no necesariamente, este puede representar
<cite> Representa el título de una obra. <kbd>
otras formas de entrada de usuario o usuaria, como comandos de
<q> Representa una cita textual inline. voz transcritos.

Representa un término cuya definición está contenida en su <sub>,<sup> Representan un subíndice y un superíndice, respectivamente.
<dfn>
contenido ancestro más próximo.
Representa un texto en una voz o estado de ánimo alterno, o por
<i>
<abbr> Representa una abreviación o un acrónimo; la expansión de la lo menos de diferente calidad, como una designación taxonómica,
ELEMENTO DESCRIPCIÓN ELEMENTO DESCRIPCIÓN

un término técnico, una frase idiomática, un pensamiento o el Representa un texto que debe ser aislado de sus alrededores para
nombre de un barco. el formateado bidireccional del texto. Permite incrustar un
<bdi> fragmento de texto con una direccionalidad diferente o
Representa un texto hacia el cual se llama la atención
desconocida.
<b> para propósitos utilitaros. No confiere ninguna importancia
adicional y no implica una voz alterna. Representa la direccionalidad de sus descendientes con el fin de
<bdo>
anular de forma explícita al algoritmo bidireccional Unicode.
Representa una anotación no textual sin-articular, como etiquetar
<u> un texto como mal escrito o etiquetar un nombre propio en texto Representa texto sin un significado específico. Este debe ser
en Chino. usado cuando ningún otro elemento semántico le confiere un
<span>
significado adecuado, en cuyo caso, provendrá de atributos
Representa texto resaltado con propósitos de referencia, es decir
globales como class, lang, o dir.
<mark> por su relevancia en otro contexto.
<br> Representa un salto de línea.
Representa contenidos a ser marcados con anotaciones
ruby, recorridos cortos de texto presentados junto al texto. Estos Representa una oportunidad de salto de línea, es decir, un punto
son utilizados con regularidad en conjunto a lenguajes de Asia del sugerido de envoltura donde el texto de múltiples líneas puede ser
<ruby> <wbr>
Este, donde las anotaciones actúan como una guía para la dividido para mejorar su legibilidad.
pronunciación, como el furigana Japonés.

Representa el texto de una anotación ruby .


<rt> EDICIONES

Representa los paréntesis alrededor de una anotación ruby, usada


ELEMENTO DESCRIPCIÓN
para mostrar la anotación de manera alterna por los navegadores
<rp>
que no soporten despliegue estandar para las anotaciones. <ins> Define una adición en el documento.
ELEMENTO DESCRIPCIÓN ELEMENTO DESCRIPCIÓN

<del> Define una remoción del documento. Permite a autores o autoras especificar recursos multimedia
<source> alternativos para los elementos multimedia
como <video> o <audio>.
CONTENIDO INCRUSTADO
Permite a autores o autoras especificar una pista de
<track> texto temporizado para elementos multimedia
ELEMENTO DESCRIPCIÓN
como <video> o <audio>.
<img> Representa una imagen. Representa un área de mapa de bits en el que se pueden utilizar
Representa un contexto anidado de navegación, es decir, un <canvas> scripts para renderizar gráficos como gráficas, gráficas de
<iframe> juegos o cualquier imagen visual al vuelo.
documento HTML embebido.
Representa un punto de integración para una aplicación o <map> En conjunto con <area>, define un mapa de imagen.
<embed> contenido interactivo externo que por lo general no es HTML.
<area> En conjunto con <map>, define un mapa de imagen.
Representa un recurso externo, que será tratado como una
<object> imagen, un sub-documento HTML o un recurso externo a ser Define una imagen vectorial embebida.
<svg>
procesado por un plugin.
Define parámetros para el uso por los plugins invocados por los Define una fórmula matemática.
<param> <math>
elementos <object>.
Representa un video, y sus archivos de audio y capciones
<video> DATOS TABULARES
asociadas, con la interfaz necesaria para reproducirlos.

Representa un sonido o stream de audio. ELEMENTO DESCRIPCIÓN


<audio>
<table> Representa datos con más de una dimensión.
ELEMENTO DESCRIPCIÓN ELEMENTO DESCRIPCIÓN

<caption> Representa el título de una tabla. puede ser enviado a un servidor para procesamiento.

<colgroup> Representa un conjunto de una o más columnas de una tabla. <fieldset> Representa un conjunto de controles.

<col> Representa una columna de una tabla. <legend> Representa el título de un <fieldset>.

Representa el bloque de filas que describen los datos contretos de <label> Representa el título de un control de formulario.
<tbody>
una tabla.
Representa un campo de datos escrito que permite al usuario
<input>
Representa el bloque de filas que describen las etiquetas de o usuaria editar los datos.
<thead>
columna de una tabla.
<button> Representa un botón.
Representa los bloques de filas que describen los resúmenes de
<tfoot> Representa un control que permite la selección entre un
columna de una tabla. <select>
conjunto de opciones.
<tr> Representa una fila de celdas en una tabla.
Representa un conjunto de opciones predefinidas para otros
<td> Representa una celda de datos en una tabla. <datalist> controles.

<th> Representa una celda encabezado en una tabla. <optgroup> Representa un conjunto de opciones, agrupadas lógicamente.

Representa una opción en un elemento <select>, o una


<option>
sugerencia de un elemento <datalist>.
FORMULARIOS
<textarea> Representa un control de edición de texto multi-línea.
ELEMENTO DESCRIPCIÓN
Representa un control de par generador de llaves.
<keygen>
<form> Representa un formulario, consistiendo de controles que
ELEMENTO DESCRIPCIÓN PHP es un lenguaje diseñado para crear contenido HTML. PHP puede ser ejecutado
de tres formas: en un servidor web, a través de la línea de comandos, o mediante
Representa el resultado de un cálculo. un cliente GUI.
<output>
El lenguaje puede ejecutarse en prácticamente todos los sistemas operativos
Representa el progreso de finalización de una tarea. actuales y en múltiples servidores web. Este también soporta una amplia variedad
<progress>
de bases de datos y cuenta con múltiples librerías para ejecutar procesos
Representa la medida escalar (o el valor fraccionario) dentro comunes.
<meter> de un rango conocido.
Una página PHP generalmente consiste de una página HTML con comandos PHP
incrustados en ella. El servidor web procesa los comandos PHP y envía la salida al
ELEMENTOS INTERACTIVOS
visualizador (browser). Un ejemplo de una página PHP sencilla sería la siguiente:

ELEMENTO DESCRIPCIÓN Una página PHP generalmente consiste de una página HTML con comandos PHP
incrustados en ella. El servidor web procesa los comandos PHP y envía la salida al
Representa un widget desde el que un usuario o usuaria
<details> visualizador (browser). Un ejemplo de una página PHP sencilla sería la siguiente:
puede obtener información o controles adicionales.
<html>
Representa un resumen, título o leyenda para un
<summary> elemento <details> dado. <head> <title>Hello, world</title> </head>
Representa un comando que un usuario o usuaria puede <body>
<command> invocar.
<?php echo "Hello, world!"; ?>
Representa una lista de comandos.
<menu> </body>

</html>
INTRODUCCIÓN A PHP
El comando hecho de PHP produce la salida que se inserta en la página HTML. Note El siguiente ejemplo muestra la utilización de los tipos de datos enteros y flotantes.
que el código PHP se escribe dentro de los delimitadores <?php y ?>. Los otros tipos de datos se describen más adelante.

Las instrucciones se separan con ‘;’, en el caso de ser la última instrucción no es  <html>
necesario el punto y coma.  <head> <title>Ejemplo 2 </title></head>
 <body>
Los comentarios en PHP pueden ser:
 <h1> Ejemplo de PHP </h1>
Como en C o C++, /*...*/ ó //  <?php

Otro tipo de comentario de una línea es #, que comentará la línea en la que #Enteros
aparezca pero sólo hasta el tag ?> que cierra el código php.
 $a = 1234; # número decimal
1.1. Tipos de Datos  $a = -123; # un número negativo
 $a = 0123; # número octal (equivalente al 83 decimal)
Los tipos de cada variable en PHP no están tan claros como en C. El intérprete  $a = 0x12; /* número hexadecimal (equivalente al 18 decimal) */
asigna el tipo de una variable según el uso que se esté haciendo de ella. Para
asignar un tipo fijo a una variable se utiliza la función settype(). //Flotantes o reales

Los tipos son:  $b = 1.234; $b = 1.2e3;

 Enteros
 Flotantes
//Escribimos algo
 String
 arreglos  print "\n La a= $a y la b= $b <br>\n";
 Objetos  ?>
 Variables variables  </body>
 </html>
1.1.1. Hileras de texto

Las hileras de texto pueden estar delimitadas por ” o ‘. Si la hilera de texto está  /* Esta hilera de texto terminará siendo '<p>Número: 9</p>' */
delimitada por comillas dobles, cualquier variable incluida dentro de ella será  $num = 9;
sustituida por su valor (ver y ejecutar el ejemplo anterior). Para especificar el  $str = "<p>Número: $num</p>";
carácter “se escapará con el carácter backslash( \ ).  print "$str <br>\n";

Las operaciones con hileras de texto son exactamente igual que en PERL. Por
ejemplo, con strlen se ve el tamaño de una hilera de texto y con el punto ( . ) se
 /* Esta será '<p>Número: $num</p>' */
concatenan hileras de texto.
 $num = 9;
 <html>  $str = '<p>Número: $num</p>';
 <head> <title>Ejemplo 3 </title></head>  print "$str <br>\n";
 <body>  /* Obtener el primer carácter de una hilera de texto como una vector*/
 <h1> Ejemplo de PHP </h1>  $str = 'Esto es una prueba.';
 $first = $str[0];
<?php
 print "$str 0->$first <br>\n";
 /* Asignando una hilera de texto. */
 $str = "Esto es una hilera de texto";
 /* Obtener el último carácter de una hilera de texto. */
 /* Añadiendo a la hilera de texto. */  $str = 'Esto es aún una prueba.';
 $str = $str . " con algo más de texto";  $last = $str[strlen($str)-1];
 print "$str last->$last <br>\n";
 /* Otra forma de añadir, incluye un carácter de nueva línea */  ?>
 $str .= " Y un carácter de nueva línea al final.\n";
 print "$str <br>\n";
 </body>  print "$foo <br>\n";
 </html>  $foo = 1 + "bob3"; // $foo es entero (1)
 print "$foo <br>\n";
Para hacer conversión de hileras de texto a otros tipos de datos hay que tener en
 $foo = 1 + "10 Cerditos"; // $foo es entero (11)
cuenta una hilera de texto se evalúa como un valor numérico, el valor resultante y
 print "$foo <br>\n";
el tipo se determinan como sigue. La hilera de texto se evaluará como un doble si
 $foo = 1 + "10 Cerditos"; // $foo es entero (11)
contiene cualquiera de los caracteres ‘.’, ‘e’, o ‘E’. En caso contrario, se evaluará
 print "$foo <br>\n";
como un entero. El valor viene dado por la porción inicial de la hilera de texto. Si la
 $foo = "10.0 cerdos " + 1; // $foo es entero (11)
hilera de texto comienza con datos de valor numérico, este será el valor usado. En
 print "$foo <br>\n";
caso contrario, el valor será 0 (cero). Cuando la primera expresión es una hilera de
 $foo = "10.0 cerdos " + 1.0; // $foo es doble (11)
texto, el tipo de la variable dependerá de la segunda expresión.
 print "$foo <br>\n";
 <html>
 <head> <title>Ejemplo 4</title></head>
 <body>  ?>
 <h1> Ejemplo de PHP </h1>

 </body>
 <?php  </html>

 $foo = 1 + "10.5"; // $foo es doble (11.5)


 print "$foo <br>\n";
1.1.2. Arreglos
 $foo = 1 + "-1.3e3"; // $foo es doble (-1299)
 print "$foo <br>\n"; Los arreglos en PHP se pueden utilizar tanto como arreglos indexados (vectores) o
 $foo = 1 + "bob-1.3e3"; // $foo es entero (1) como arreglos asociativos (tablas hash). Para PHP, no existen ninguna diferencia
arreglos indexados unidimensionales y arreglos asociativos. Las funciones que se  #mostramos los resultados
utilizan para crear arreglos son list() oarray() , o se puede asignar el valor de cada  print "a= $a[0] , $a[1] , $a[2] , $a[3] <br>\n";
elemento del array de manera explícita. En el caso de que no se especifique el  print "b[foo]=".$b["foo"]."<br>\n";
índice en un array, el elemento que se asigna se añade al final.

 <html>
 ?>
 <head> <title>Ejemplo 5</title></head>
 <body>
 <h1> Ejemplo de PHP </h1>
 </body>
 </html>

 <?php

Los arreglos se pueden ordenar usando las


funciones asort(), arsort(), ksort(), rsort(), sort(), uasort(),usort(),
 #forma explícita
y uksort() dependiendo del tipo de ordenación que se desee.
 $a[0] = "abc";
 $a[1] = "def"; Se puede contar el número de elementos de un array usando la función count().
 $b["foo"] = 13;
Se puede recorrer un array usando las funciones next() y prev(). Otra forma
habitual de recorrer un array es usando la función each().
 #Añadiendo valores al array Los arreglos multidimensionales son bastante simples, para cada dimensión array,
 $a[] = "hola"; // $a[2] == "hola" se puede añadir otro valor [clave] al final. Los índices de un array multidimensional
 $a[] = "mundo"; // $a[3] == "mundo" pueden ser tanto numéricos como asociativos.

 $a[1] = $f; # ejemplos de una sola dimensión


 $a["foo"] = $f;
 "color" => "rojo",
 "sabor" => "dulce",
 $a[1][0] = $f; # bidimensional
 "forma" => "redondeada",
 $a["foo"][2] = $f; # (se pueden mezclar índices numéricos y
 "nombre" => "manzana",
asociativos)
 3 => 4
 $a[3]["bar"] = $f; # (se pueden mezclar índices numéricos y
 );
asociativos)
1.1.3. Objetos

Para inicializar un objeto se utiliza el método new , y para acceder a cada uno de
 $a["foo"][4]["bar"][0] = $f; # tetradimensional!
sus métodos se utiliza el operador -> .

class nada {
Los arreglos se declarar utilizando la instrucción array y se pueden rellenar
function haz_nada () {
también usando =>
echo "No estoy haciendo nada.";
# Ejemplo 1:
}
 $a["color"] = "rojo";
 $a["sabor"] = "dulce"; }
 $a["forma"] = "redondeada";
 $a["nombre"] = "manzana";
 $a[3] = 4; $miclase = new nada;

$miclase->haz_nada();
# Ejemplo 2:

 $a = array(
1.1.4. Conversión de Tipos de datos  print "bar=$bar , foo=$foo <br>\n";

Una variable en PHP, define su tipo según el contenido y el contexto en el que se


utilice, es decir, si se asigna una hilera de texto a una variable, el tipo de esa
 ?>
variable será string. Si a esa misma variable se le asigna un número, el tipo
cambiará a entero.

Para asegurarte de que una variable es del tipo adecuado se utiliza la  </body>
función settype() . Para obtener el tipo de una variable se utiliza la  </html>
función gettype().  Los tipos de casting permitidos son:
 (int), (integer) - fuerza a entero (integer)
También es posible utilizar el mecanismo del casting tal y como se utiliza en C.
 (real), (double), (float) - fuerza a doble (double)
 <html>  (string) - fuerza a hilera de texto (string)
 <head> <title>Ejemplo 6</title></head>  (array) - fuerza a array (array)
 <body>  (object) - fuerza a objeto (object)
 <h1> Ejemplo de PHP </h1>

1.2. Variables
 <?php
En PHP las variables se representan como un signo de dólar seguido por el nombre
de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas. Las
variables se asignan normalmente por valor, pero desde PHP4, también se asignan
 $foo = 10; // $foo es un entero
por referencia usando el símbolo &
 $bar = (double) $foo; // $bar es un doble
 <html>
 <head> <title>Ejemplo 7</title></head>
 #Mostramos resultados  <body>
 <h1> Ejemplo de PHP </h1> De todas estas variables, algunas se crean dependiendo del servidor que se esté
utilizando y otras son propias de PHP.

Si se tratara de un servidor Apache, la lista de variables es:


 <?php
 $foo = 'Bob'; // Asigna el valor 'Bob' a $foo  GATEWAY_INTERFACE:
 $bar = &$foo; // Referencia $foo vía $bar.  SERVER_NAME
 $bar = "Mi nombre es $bar"; // Modifica $bar...  SERVER_SOFTWARE
 echo $foo." <br>\n"; // $foo también se modifica.  SERVER_PROTOCOL
 echo $bar." <br>\n";  REQUEST_METHOD
 ?>  QUERY_STRING
 DOCUMENT_ROOT
 HTTP_ACCEPT
 </body>  HTTP_ACCEPT_CHARSET
 </html>  HTTP_ENCODING
 HTTP_ACCEPT_LANGUAJE
Algo importante a tener en cuenta es que sólo las variables con nombre pueden ser  HTTP_CONNECTION
asignadas por referencia.  HTTP_HOST
 HTTP_REFERER
1.2.1. Variables predefinidas
 HTTP_USER_AGENT
En PHP cada vez que se ejecuta un script, existen variables que se crean y que nos  REMOTE_ADDR
pueden informar del entorno en el que se está ejecutando dicho script.  REMOTE_PORT
 SCRIPT_FILENAME
Para obtener una lista de todas estas variables predefinidas se puede utilizar la  SERVER_ADMIN
función PHPinfo().  SERVER_PORT
 SERVER_SIGNATURE
 PATH_TANSLATED  <h1> Ejemplo de PHP </h1>
 SCRIPT_NAME
 REQUEST_URL
 las variables creadas por el propio PHP son:  <?php
 argv  $a = 1;
 argc  $b = 2;
 PHP_SELF
 HTTP_COOKIE_VARS
 HTTP_GET_VARS
 Function Sum () {
 HTTP_POST_VARS
 global $a, $b;
NOTA: Esta lista no es exhaustiva ni pretende serlo. Simplemente es una guía de
qué tipo de variables predefinidas se puede esperar tener disponibles en un script
PHP.  $b = $a + $b;
 }

1.2.2. Ámbito de una variable


 Sum ();
El ámbito de una variable en PHP es exactamente igual que en C o en Perl tomando
 echo $b;
siempre en cuenta los archivos incluidos al principio de cada programa.

La única diferencia se encuentra en las variables globales, que tienen que ser
expresamente definidas dentro de las funciones.  ?>

 <html>
 <head> <title>Ejemplo 8</title></head>
 <body>  </body>
 </html> sabe si se desea utilizar la variable denominada a[1] o utilizar la variables :math:`a
indexándola en su primer valor. Para esto se utiliza una sintaxis especial que sería
*{{$a}[1]* según se desee una opción u otra.
1.2.3. Variables variables
1.2.4. Variables de los formularios HTML

Cuando existe un formulario en HTML, inmediatamente después de ser enviado,


PHP permite un mecanismo para mantener variables con un nombre no fijo. Por dentro del ámbito PHP se crean automáticamente una variable por cada uno de los
ejemplo: objetos que contiene el formulario.

 $a = "hola"; Por ejemplo, consideremos el siguiente formulario:


 $$a = "mundo";  <html>
El ejemplo anterior, define dos variables, una denominada :math:`a que contiene el  <head> <title>Ejemplo 9</title></head>
valor “hola” y otra que se llama `hola que contiene el valor “mundo”  <body>
 <h1> Ejemplo de Formulario 1 </h1>

Para acceder al valor de una variable, se accede con:


 <p>
 echo "$a ${$a}";  Dame tu nombre !!!

La instrucción anterior provocará la salida “hola mundo”.  <form action="ej10.php" method="post">


 Nombre: <input type="text" name="nombre"> <input type="submit">
Algo que se debe tener en cuenta cuando se utilizan variables, es que hay que
 </form>
resolver la ambigüedad que se crea al utilizar arreglos de variables de este tipo.
Por ejemplo : math:`$a[1]provoca una ambigüedad para el intérprete, puesto que no
 </body>
 </html>
 <form action="ej12.php" method="post">
Cuando es enviado, PHP creará la variable $nombre, que contendrá lo que sea que  Nombre: <input type="text" name="personal[name]"> E-mail: <input
se introdujo en el campo Nombre:: del formulario. type="text" name="personal[email]"> Cerveza: <br>
 <select multiple name="beer[]">
 <html>
 <option value="warthog">Warthog
 <head> <title>Ejemplo 10</title></head>
 <option value="guinness">Guinness
 <body>
 <option value="stuttgarter">Stuttgarter Schwabenbr‰u
 <h1> Ejemplo de PHP </h1>
 </select>
 <input type="submit">
 </form>
 <?php  </body>
 print "<h2>Hola $nombre </h2>\n";  </html>

 ?>
 </body>
 <html>
 </html>
 <head> <title>Ejemplo 12</title></head>
PHP también maneja arreglos en el contexto de variables de formularios, pero sólo  <body>
en una dimensión. Se puede, por ejemplo, agrupar juntas variables relacionadas, o  <h1> Ejemplo de PHP </h1>
usar esta característica para recuperar valores de un campo select input múltiple:

 <html>
 <?php
 <head> <title>Ejemplo 11</title></head>
 <body>
 <h1> Ejemplo de Formulario 2 </h1>
 print "<h2>Hola $personal[name] , ";  PHP_OS: Sistema operativo del cliente.
 print "tu email es $personal[email] y ";  TRUE: Verdadero.
 print "te gusta la cerveza $beer[0] </h2>\n";  FALSE: Falso.
 E_ERROR: Error sin recuperación.
 E_WARNING: Error recuperable.
 ?>  E_PARSE: Error no recuperable (sintaxis).
 E_NOTICE: Puede Tratarse de un error o no. Normalmente permite
continuar la ejecución.
 </body> Todas las constantes que empiezan por “E_”se utilizan normalmente con la
 </html> función error_reporting().
Si la posibilidad de PHP de track_vars está activada (se hace en la configuración  <html>
previa a la compilación), las variables enviadas con los métodos POST o GET  <head> <title>Ejemplo 14</title></head>
también se encontrarán en los arreglos asociativos globales:  <body>
Math:`HTTP_POST_VARS y `HTTP_GET_VARS.  <h1> Ejemplo de PHP </h1>
1.3. Constantes

Las constantes en PHP tienen que ser definidas por la función `define ()  <?php
<php_manual_es.html#function.define>`__ y además no pueden ser redefinidas con  define("CONSTANTE", "hello world.");
otro valor.  echo CONSTANTE;
Además, existen una serie de variables predefinidas denominadas:

 _FILE_: Fichero que se está procesando.  ?>


 _LINE_: Línea del fichero que se está procesando
 _PHP_VERSION: Versión de PHP.
 </body> instrucción y si ocurre otro error posterior, se machaca el valor con la nueva
 </html> hilera de texto.

PHP mantiene también los operadores” ‘ ” que sirven para ejecutar un comando del
sistema tal y como hace la función `system()
1.4. Expresiones y operadores <php_manual_es.html#function.system>`__.
En PHP una expresión es cualquier cosa que pueda contener un valor. Las En PHP existen dos operadores and y dos operadores or que son: ‘and’, ‘&&’ y ‘or’,
expresiones más simples son las variables y las constantes y otras más ‘||’ respectivamente, que se diferencian en la precedencia de cada uno.
complicadas serán las funciones, puesto que cada función devuelve un valor al ser
invocada, es decir, contiene un valor, por lo tanto, es una expresión. La tabla que nos puede resumir la precedencia de cada uno de los operadores es:

Todas las expresiones en PHP son exactamente igual que en C. Los operadores
abreviados, los incrementos, etc, son exactamente iguales. Incluso existen otros
operadores adicionales como el operador”.” que concatena valores de variables, o Asocitividad Operadores
el operador “===” denominado operador de identidad que devolverá verdadero si
las expresiones a ambos lados del operador contienen el mismo valor y a la vez son
Izquierda ,
del mismo tipo. Por último, el operador “@” sirve para el control de errores. Para
poder ver cómo funciona el operador @, veamos un ejemplo:
Izquierda or
 <?php
 $res = @mysql\_query("select nombre from clientes")
Izquierda xor
 or die ("Error en la selección, '$php\_errormsg'");
 ?>
Izquierda and
Este ejemplo, utiliza el operador @ en la llamada a mysql_query y en el caso de dar
un error, se salvará el mensaje devuelto en una variable
denominada php_errormsg. Esta variable contendra el mensaje de error de cada
Derecha print Izquierda >> <<

Izquierda = += -* *= /= .= %= &= |= ^= ~= <<= >>=


Izquierda
.
Izquierda ?:

Izquierda */%
Izquierda ||

Derecha ! ~ ++ – (int) (double) (string) (array) (object) @


Izquierda &&

Derecha [
Izquierda |

No posee new
Izquierda ^

Izquierda &

 <html>
No posee == != ===
 <head> <title>Ejemplo 15</title></head>
 <body>
No posee < <= > >=  <h1> Ejemplo de PHP </h1>
 <?php

 #Operador de ejecución
 $output = `ls -al`;
 function double($i) {
 echo "<pre>$output</pre><br>";
 return $i*2;
 }

 echo "<h3>Postincremento</h3>";
 $a = 5;
 $b = $a = 5; /* asignar el valor cinco a las variables $a y $b */
 echo "Debería ser 5: " . $a++ . "<br>\n";
 $c = $a++; /* postincremento, asignar el valor original de $a (5) a
 echo "Debería ser 6: " . $a . "<br>\n";
$c */
 $e = $d = ++$b; /* preincremento, asignar el valor incrementado de $b
(6) a
 echo "<h3>Preincremento</h3>";
 $d y a $e */
 $a = 5;
 echo "Debería ser 6: " . ++$a . "<br>\n";
 echo "Debería ser 6: " . $a . "<br>\n";
 /* en este punto, tanto $d como $e son iguales a 6 */
 $f = double($d++); /* asignar el doble del valor de $d antes
 del incremento, 2*6 = 12 a $f */
 echo "<h3>Postdecremento</h3>";
 $g = double(++$e); /* asignar el doble del valor de $e después
 $a = 5;
 del incremento, 2*7 = 14 a $g */
 echo "Debería ser 5: " . $a-- . "<br>\n";
 $h = $g += 10; /* primero, $g es incrementado en 10 y termina
 echo "Debería ser 4: " . $a . "<br>\n";
valiendo 24.
 después el valor de la asignación (24) se asigna a $h,
 y $h también acaba valiendo 24. */
 echo "<h3>Predecremento</h3>";  $a=8;
 $a = 5;  $b=6;
 echo "Debería ser 4: " . --$a . "<br>\n";
 echo "Debería ser 4: " . $a . "<br>\n";
 ?>  // Primer if
 if ($a > $b) {
 print "a es mayor que b<br>";
 </body>  $b = $a;
 </html>  }

1.5. Estructuras de Control  // if alternativo


 if ($a > $b):
Además de la sintaxis normal (parecida al Perl o al C), PHP ofrece una sintaxis
 print "A es mayor que B<br>";
alternativa para alguna de sus estructuras de control; a saber, if, while, for, y  endif;
switch. En cada caso, la forma básica de la sintaxis alternativa es cambiar abrir-
llave por dos puntos (:) y cerrar-llave por endif;, endwhile;, endfor;, or endswitch;,
respectivamente.
 // Segundo if (con else y elseif )
 <html>  if ($a > $b) {
 <head> <title>Ejemplo 16</title></head>  print "a es mayor que b<br>";
 <body>  } elseif ($a == $b) {
 <h1> Ejemplo de PHP </h1>  print "a es igual que b<br>";
 } else {
 print "b es mayor que a<br>";
 <?php  }
for for: endfor;
 // Segundo if alternativo
do.. while
 if ($a > $b):
 print "A es mayor que B<br>"; foreach(array as :math:`value) - foreach(a rray
 print "..."; as `key=>$value)
 elseif ($a == $b):
switch:
 print "A es igual a B<br>"; switch
endswitch;
 print "!!!";
 else: continue
 print "B es mayor que A<br>";
 endif; break
 ?>
require()(Necesitan estar dentro de tags PHP)

include()(Necesitan estar dentro de tags PHP)


 </body>
 </html>
La instrucción require() se sustituye a sí misma con el archivo especificado, tal y
La mejor forma de resumir cada una de las opciones que ofrece PHP para las como funciona la directiva #include de C. La instrucción include() incluye y evalúa el
estructuras de control es mediante una tabla: archivo especificado.

Estructura Alternativa A diferencia de include(), require() siempre leerá el archivo referenciado, incluso si
la línea en que está no se ejecuta nunca. Si se quiere incluir condicionalmente un
If, if else, if elseif if: endif; archivo, se usa include(). La instrucción condicional no afecta a require(). No
obstante, si la línea en la cual aparece el require() no se ejecuta, tampoco se
while while: endwhile;
ejecutará el código del archivo referenciado.
De forma similar, las estructuras de ciclo no afectan la conducta de require()..  </body>
Aunque el código contenido en el archivo referenciado está todavía sujeto al ciclo,  </html>
el propio require() sólo ocurre una vez. Esto significa que no se puede poner una  1.6. Funciones
instrucción require() dentro de una estructura de ciclo y esperar que incluya el
1.6.1. Funciones definidas por el usuario
contenido de un archivo distinto en cada iteración. Para hacer esto, usa una
instrucción include(). Así, require, reemplaza su llamada por el contenido del  Un ejemplo puede ser:
fichero que requiere, einclude, incluye y evalua el fichero especificado.  function foo($arg1, $arg2, ..., $argN) {
 echo "Función ejemplo";
 return $value;
 <?php  }
 print "Hola Mundo !<br>\n";
 ?>
Dentro de una función puede aparecer cualquier cosa, incluso otra función o
definiciones de clase.
El archivo que realiza la inclusión del primero sería algo similar a esto:
Respecto al paso de argumentos, son siempre pasados por valor y para pasarlos
 <html> por referencia hay que indicarlo y se puede hacer de dos formas diferentes, en la
 <head> <title>Ejemplo 18</title></head> definición de la función, anteponiendo el símbolo & al argumento que corresponda,
 <body> en este caso la llamada será igual que la llamada a una función normal, o
 <h1> Ejemplo de PHP </h1> manteniendo la definición de la función normal y anteponer un & delante del
argumento que corresponda en la llamada a la función.

 <html>
 <?php include( 'ej17.php' ); ?>
 <head> <title>Ejemplo 19</title></head>
 <body>
 <h1> Ejemplo de PHP </h1>
 //Llama la función 1 por referencia (no puede ser de otra forma)
 print $suma=suma1($a,$b);

 <?php

 //Llama la función 2 por referencia


 print $suma=suma1(&$a,&$b);
 //Define la función con parametros por referencia
 function suma1 (&$a, &$b)
 {
 //Llama la función 2 por valor
 $c=$a+$b;
 print $suma=suma1($a,$b);
 return $c;
 }

 ?>
 //Define la función con parametros por valor
 function suma2 ($a, $b)
 {  </body>
 $c=$a+$b;  </html>
 return $c;
PHP permite el mecanismo de argumentos por defecto. Un ejemplo de esta
 }
característica es:

 function hacerCafe($tipo="capuchino") {
 $a=2; $b=3; $suma;  return "he hecho un café $tipo\n";
 }
En la llamada a esta función se obtendrá una frase u otra según se llame: PHP soporta el concepto de funciones variable, esto significa que si una variable
tiene unos paréntesis añadidos al final, PHP buscará una función con el mismo
 echo hacerCafe();
nombre que la evaluación de la variable, e intentará ejecutarla.
 echo hacerCafe("expreso");
 <?php
En el caso de tratarse de una función con argumentos por defecto y argumentos
 function foo() {
normales, los argumentos por defecto deberán estar agrupados al final de la lista
 echo "En foo()<br\>\n";\
de argumentos.
 }
En PHP4 el número de argumentos de una función definida por el usuario, puede ser
variable, se utilizan las
funciones func_num_args(), func_get_arg() y func_get_args().  function bar ($arg ='') {
 echo " bar();El argumento ha sido '$arg'.<br\>\n";\
 }
1.6.2. Valores devueltos

A diferencia de C, PHP puede devolver cualquier número de valores, sólo hará falta  $func = 'foo';
recibir estos argumentos de la forma adecuada. Ejemplo:  $func();
 function numeros() {  $func='bar';
 return array(0,1,2);  $func('test');
 }  ?>

JAVA VIRTUAL MACHINE (JVM)

 list ($cero, $uno, $dos) = numeros(); Java es un lenguaje multiplataforma, que se ejecuta en cualquier máquina. Esto es
gracias a la JVM (Java Virtual Machine) que nos permite ejecutar el código de Java
1.6.3. Funciones variables en cualquier lugar para el que se haya creado dicha máquina virtual. JVM es el
secreto (no tan secreto porque todo el mundo lo sabe) y la clave de Java como operativo completo y que requiere de otro software específico para poder
lenguaje multiplataforma. programar aplicaciones. De momento queremos enseñarte a programar en Java a
nivel general, pero si lo que quieres es programar en Android tenemos otro manual
La JVM hace de puente entre el código compilado de Java y la máquina donde se
que te podemos recomendar, también del mismo autor: Desarrollo para Android
pretende ejecutar. Podemos verlo como un traductor, que se encarga de
básico.
interpretar el código de Java, de manera que sea correctamente ejecutado en el
sistema objetivo. Es decir, con Java compilamos el código y el resultado de la 1) Java JDK
compilación se ejecuta en la JVM que tenga el sistema operativo donde quieres
Lo primero que necesitas para poder desarrollar en Java es el "Java Development
poner en marcha el programa.
Kit". Es un software gratuito que contiene todo aquello que requiere tu máquina
En este artículo volveremos más tarde a analizar este esquema de funcionamiento. para trabajar con el lenguaje, tanto la JVM como las librerías para realizar
De momento te puedes quedar con que la JVM es la pieza que permite la filosofía de programas de Java, desde los más básicos hasta los más complejos y específicos.
Java, que se programe en un lenguaje y el mismo programa se pueda ejecutar en
Para obtener el JDK necesitas descargarlo desde la página de Oracle. A menudo
Mac, Windows, Linux e incluso en otros tipos de sistemas, siempre que tengan una
resulta un poco complicado navegar por este tipo de "macrositios"; te
JMV.
recomendamos ir por la vía rápida y buscar en Google "download java jdk". Esto te
Casi en cualquier hardware se puede montar un JVM y gracias a ello ser compatible llevará a la página principal de descarga del JDK en el sito de Oracle.
con Java. De hecho, los primeros teléfonos móviles, antes de la llegada de los
Hay diferentes "entregas", "sabores" o "paquetes", de Java. Cada una tiene un
smartphones, tenían la posibilidad de ejecutar juegos en Java y eso es porque
nombre y a veces resulta un poco lioso por tener tantas siglas que aprenderse.
simplemente se había creado una JVM para ellos.
Puedes ver en la imagen siguiente un resumen del "Java SE Platform", que es un
Qué necesitas para desarrollar en Java diagrama que Oracle nos ofrece para saber lo que estamos bajando cuando
descargamos una de estas entregas de Java.
A continuación describimos todos los materiales que debes tener para programar
en Java. Como puedes apreciar, cuando descargas el JDK, en realidad estás descargando
Java por completo, incluyendo todas las librerías y también por supuesto el Java
Nota: Ojo, nos referimos a realizar programas en Java a nivel general en VM (JVM). Si te descargas el JRE, en realidad estás trayéndote un subconjunto de
cualquiera de las ramas, pero tenemos que excluir a Android, que es un sistema
Java. Así pues, simplemente tienes que fijarte qué es lo que estás descargando El tercer paso sería contar con un IDE para el desarrollo. IDE son las siglas de
para traerte aquello que necesites. "Integrated Development Environment" o en español, Entorno de Desarrollo
Integrado. Te recomendamos usar Eclipse, luego veremos algo más sobre cómo
Nota: En resumen, si descargas el JDK acabas antes porque ahí lo tienes todo, obtener y usar Eclipse.
aunque por supuesto, la descarga también será mayor.
Flujo de trabajo para desarrollar en Java
Desde la página de Oracle podrás descargar el JDK en la última versión publicada y
luego tendrás que usar aquella que sea para tu sistema operativo. Si estás en Antes de continuar queremos hacer una parada para explicar mejor el flujo de
Windows tendrás que escoger además la versión x86 para procesadores de 32bit y trabajo cuando programas en Java y eso nos dará una idea más exacta de por qué
la x64 para procesadores de 64bits. Java es diferente a otros lenguajes y también sobre cómo un IDE nos facilita la
labor a los desarrolladores Java.
Cuando instalas Java ya se configura todo en tu sistema, por lo que no deberías
tener ningún problema para empezar a usarlo. 1) Cuando programas Java escribes archivos con el código Java. Como cualquier
lenguaje son archivos de texto plano. En este caso los guardarás siempre con
2) JVM
extensión ".java".
Lo más seguro es que tú ya tuvieras la Java Virtual Machine en tu sistema (es
2) Cuando compilas tus archivos Java creas lo que se llaman los "Byte Code", que
común que Java esté instalado en tu ordenador porque incluso sin saberlo estés
son los archivos ".class". Generalmente, cualquiera de los IDE usados para
usando algún programa desarrollado con Java.) Si tenías o no Java realmente no es
desarrollar con Java (nombraremos algunos aún en este artículo) tiene
preocupante, pues cómo pudiste apreciar en la imagen anterior, la JMV se instala
herramientas integradas para compilar.
también cuando instalas el JDK para Java.
Nota: También podrías compilar manualmente desde la línea de comandos, pero es
Nota: Aunque obtener la JVM no significa realmente un paso adicional, la hemos algo que no se hace generalmente. Esto quedó atrás gracias a las ventajas de
destacado aquí para que quede claro que tenerla es condición indispensable para
trabajar con un entorno de desarrollo avanzado. Quizás en el único sitio donde se
usar Java.
compila manualmente es en la universidad, donde nos quieren hacer aprender sin
3) IDE para desarrollo apoyarnos en otras herramientas, de modo que seamos más autónomos o
aprendamos a hacer las cosas más cercanas a la máquina. Normalmente dentro de
nuestro IDE, ya sea Eclipse, Netbeans, etc. le das simplemente al botón "Run" y se Sobre IDE tenemos varias opciones para Java, entre las más conocidas y usadas
realiza todo el proceso de compilación y ejecución. tenemos Eclipse, Netbeans, Jdeveloper, IntelliJ IDEA. Cualquiera de ellos puedes
usarlo perfectamente, así como cualquier otro que encuentres y te sientas cómodo.
3) Cuando has generado los Byte Code, los puedes ejecutar en tu máquina gracias a
la JVM que hay nativa para tu sistema. Recuerda que tienes una JVM específica El IDE Eclipse es con diferencia el más usado (tiene en torno al 60% o 70% de tasa
para cada sistema operativo. La JVM es capaz de entender los archivos Byte Code y de uso entre los desarrolladores de Java) porque es el primero que se popularizó,
ejecutarlos en tu sistema sin fallos y mostrando el mismo resultado que mostraría gracias a que fue el que primero introdujo las extensiones por medio de plugins.
la JVM de otro sistema operativo. Java es atractivo también porque es abierto y gratuito para cualquier tipo de uso.

Este proceso lo puedes ver esquematizado en el siguiente diagrama. Instalar Eclipse para programar en Java

Los Byte Code son los archivos más importantes de Java, que nos dan junto con la Existen también diversas distribuciones de Eclipse y a veces nos podemos liar un
JVM el soporte para las múltiples plataformas. Cuando compilas con Java no poco a la hora de elegir la que más nos interesa.
compilas tu código en un binario nativo para tu sistema operativo, sino que lo
Si entras en eclipse.org y accedes a la página de descargas, podrás encontrar
compilas en estos Byte Code que son un paso intermedio. Realmente, son las JVM
diversos paquetes o distribuciones del IDE. Algunos son específicos para trabajar
las que interpretan los Byte Code para que a la hora de ejecutarlos el resultado sea
con Java, otros están más preparados para otros lenguajes. La diferencia de las
capaz de verse de la misma manera en cualquier sistema operativo que puedas
distintas distribuciones de Eclipse estriba en el tipo de proyectos que vas a realizar
usar.
porque recuerda que Java se puede usar para distintos objetivos dentro del mundo
Por lo tanto, Java es un lenguaje que primero se compila y luego se interpreta, a de la programación, tanto en aplicaciones de línea de comandos, como en
diferencia de otros lenguajes que generalmente son, o bien compilados como C, o aplicaciones con ventanas e interfaces de usuario gráficas, para aplicaciones web,
bien interpretados como PHP. Con todo esto podríamos pensar que Java es un etc.
lenguaje un poco pesado, pero las máquinas actuales no tienen problemas para
Nosotros vamos a recomendar la distribución que encuentras con el nombre
ejecutarlo y además Java se ha ido también mejorando y optimizando.
"Eclipse IDE for Java Developers", que contiene todo lo que vamos a necesitar para
Alternativas de IDE para Java este curso. Sin embargo, podrás utilizar cualquier otra de las recomendadas.
Nota: A veces, las distribuciones de Eclipse implementan diferentes opciones y Nota: Obviamente, en la nueva máquina, para que te funcionen tus aplicaciones Java
Layout (distribución de las herramientas y paneles del IDE), por lo que para no tendrás que haber instalado el JDK como fue relatado anteriormente en este
perderte puedes usar la misma que nosotros recomendamos, así podrás ver artículo.
exactamente el mismo Eclipse que nosotros estamos usando para la redacción de
Otra de las ventajas que nos proporciona el estilo de instalación de Eclipse, sin el
este manual.
típico asistente, es que puedes tener varias distribuciones de Eclipse, configuradas
Eclipse es multiplataforma, por lo que también tendrás que asegurarte de estar de distinta manera, para varios tipos de lenguajes o varios proyectos, sin que se
descargando exactamente la versión para tu sistema operativo, Linux, Mac o si peguen la una con la otra.
estás en Windows, la versión de 32 Bit o 64 Bit que corresponda con el tipo de
De momento esto es todo. Con esto ya sabes bastante de Java como para poder
procesador de tu PC.
enfrentarte al primer "hola mundo", pero eso ya te lo contamos en el próximo
Eclipse tiene una particularidad y es que no requiere instalación, al contrario de lo artículo.
que estamos acostumbrados en muchos sistemas. Realmente lo que descargas es
el programa entero, ya "paquetizado" para que puedas usarlo. Simplemente tienes
que descomprimir el contenido de tu fichero y dejarlo en cualquier localización de Ahora te dejamos con la grabación del vídeo de la clase de iniciación a Java, donde
tu disco duro, el escritorio, la raíz del disco, un disco externo o donde desees. Una encontrarás esta información ampliada.
vez descomprimido, simplemente tendrás que hacer un doble clic en el ejecutable
(eclipse.exe) para poner en marca el IDE. Crear una aplicación sencilla con Visual C# o Visual Basic

Como puedes ver, Eclipse se instala como lo que podríamos decir una versión
"portable" del software, porque todo lo que necesita el programa para funcionar Tras completar este tutorial, estará familiarizado con muchas de las herramientas,
está en la carpeta que has descomprimido. Si te llevas la carpeta a cualquier otra cuadros de diálogo y diseñadores que puede utilizar para desarrollar aplicaciones
localización, seguirá funcionando de la misma manera. Incluso si tienes que con Visual Studio. Creará una aplicación sencilla de estilo “Hola mundo”, diseñará la
cambiar de ordenador, simplemente te llevas la carpeta a la nueva máquina y interfaz de usuario, agregará código y depurará errores, mientras aprende a
funcionará perfectamente, junto con todos tus proyectos. trabajar en el entorno de desarrollo integrado (IDE).
Este tema contiene las siguientes secciones:
configuraciones. Consulte Personalizar la configuración de desarrollo en Visual
Studio.
NOTA:
Después de abrir Visual Studio, puede identificar las ventanas de herramientas, los
menús y barras de herramientas y el espacio de la ventana principal. Las ventanas
Este tutorial se basa en Visual Studio Professional, que proporciona la plantilla de aplicacióndeWPF
herramientas se acoplan a los lados izquierdos y derecho de la ventana de la
en la que creará
Inicio rápido, la barra de menús y la barra de herramientas
aplicación,esaconplantilla,
el proyecto de este tutorial.Visual Studio Express para escritorio de Windows también proporciona
estándar enpreliminar
pero no así Visual Studio Express para Windows y Visual Studio Express para Web. Para información la parte superior. En el centro de la ventana de la aplicación está
sobre cómo usar Visual Studio Express para Windows, visite el Centro de desarrollola de Página principal.
software paraCuando se carga una solución o un proyecto, los editores y
aplicaciones de la Tienda Windows. Para información preliminar sobre cómo usar Visualdiseñadores Studio Express para en el espacio donde está la página de inicio. Cuando
aparecen
Web, vea Empezar con ASP.NET. Asimismo la edición de Visual Studio y la configuración quedesarrolle una aplicación,
utilice determinan los pasará la mayor parte del tiempo en esta área central.
nombres y las ubicaciones de algunos elementos de la interfaz de usuario. Consulte PersonalizarFigurala2: configuración
IDE de Visual Studio.
de desarrollo en Visual Studio.

CONFIGURAR EL IDE

Al iniciar Visual Studio por primera vez, Visual Studio le pedirá que inicie sesión con
una cuenta de servicio de Microsoft (MSA), INICIO DE SESIÓN EN VISUAL
STUDIO. No es necesario iniciar sesión y puede hacerlo más tarde.
Al iniciar Visual Studio, debe elegir una combinación de configuración que aplique un
conjunto de personalizaciones predefinidas al IDE. Cada combinación de valores se
ha diseñado para que sea más sencillo desarrollar aplicaciones.
Este tutorial asume que aplicó la Configuración general de desarrollo, lo que
implica la menor cantidad de personalización del IDE. Si ya eligió C# o Visual Basic
(ambas son opciones válidas), no debe cambiar la configuración. Si desea cambiar
la configuración, puede usar el Asistente para importar y exportar
Puede crear personalizaciones adicionales en Visual Studio, como cambiar el tipo
de fuente y el tamaño del texto en el editor o el tema de color del IDE, mediante el Para cambiar el tema de color del IDE
cuadro de diálogo Opciones. Dependiendo de la combinación de opciones que haya
aplicado, puede que algunos elementos de este cuadro de diálogo no aparezcan 1. Para abrir el cuadro de diálogo Opciones, seleccione el
automáticamente. Puede asegurarse de que aparezcan todas las opciones posibles menú Herramientas en la parte superior y, luego, el
activando la casilla Mostrar todas las configuraciones. elemento Opciones....
Figura 3: Cuadro de diálogo Opciones

2. Cambie el tema de color a Oscuro y, a continuación, haga clic


en Aceptar.

En este ejemplo, cambiará el tema de color del IDE de claro a oscuro. Puede
continuar para crear un proyecto si lo desea.
El tema de color usado para las imágenes en el resto de este tutorial es el tema
claro. Para obtener más información acerca de cómo personalizar el IDE,
Los colores de Visual Studio deben coincidir con la imagen siguiente: vea Configuración de Visual Studio.

Crear una aplicación sencilla

Crear el proyecto
Cuando cree una aplicación en Visual Studio, primero creará un proyecto y una
solución. Para este ejemplo, creará un proyecto de Windows Presentation
Foundation (WPF).
Para crear el proyecto de WPF

1. Crear un nuevo proyecto. En la barra de menús,


elija Archivo, Nuevo, Proyecto....
2. Para elegir la plantilla Aplicación WPF de Visual C# o Visual Basic, elija en
el panel izquierdo Instaladas, Plantillas, Visual C#, Windows, por
ejemplo y, después, elija Aplicación WPF en el panel central. Asigne al
proyecto el nombre HelloWPFApp en la parte inferior del cuadro de diálogo
Nuevo proyecto.

También puede escribir Nuevo proyecto en el cuadro Inicio rápido.


Después de crear el proyecto, puede personalizarlo. Mediante la
ventana Propiedades, (que se encuentra en el menú Ver), puede mostrar y
Visual Studio crea el proyecto HelloWPFApp y la solución y el Explorador de cambiar las opciones de los elementos de proyecto, controles y otros elementos de
soluciones muestra los distintos archivos. WPF Designer muestra una vista de una aplicación. Mediante las propiedades del proyecto y las páginas de propiedades,
diseño y una vista XAML de MainWindow.xaml en una vista en dos paneles. Puede puede mostrar y cambiar las opciones de proyectos y soluciones.
deslizar el divisor para mostrar más o menos de cualquiera de las vistas. Puede
elegir ver solo la vista visual o solo la vista XAML. (Para obtener más información, Para cambiar el nombre de MainWindow.xaml
vea Diseñador WPF para desarrolladores de Windows Forms). Los elementos
siguientes aparecen en el Explorador de soluciones: 1. En el siguiente procedimiento, se asignará un nombre más específico a
MainWindow. En el Explorador de soluciones, seleccione
Figura 5: Elementos del proyecto MainWindow.xaml. Debería ver la ventana Propiedades, pero, si no es así,
elija el menú Ver y el elemento Ventana de propiedades.Cambie la
propiedad Nombre de archivo a Greetings.xaml.
Este cambio produce un error que aprenderá a depurar y corregir en un paso posterior.

2. En el Explorador de soluciones, abra Greetings.xaml en la vista del


diseñador (presionando la tecla Entrar mientras el nodo tiene el foco) y
seleccione la barra de título de la ventana con el mouse.

3. En la ventana Propiedades, cambie el valor de la


propiedad Title a GREETINGS.
En la barra de título de MainWindow.xaml se lee ahora Greetings.

Diseñar la interfaz de usuario (IU)

Agregaremos tres tipos de controles a esta aplicación: un control TextBlock, dos


controles RadioButton y un control Button.

El Explorador de soluciones muestra que el nombre del archivo es ahora


Greetings.xaml y, si expande el nodo MainWindow.xaml (poniendo el foco Para agregar un control TextBlock
en el nodo y presionando la tecla flecha derecha), verá que el nombre de
MainWindow.xaml.vb o MainWindow.xaml.cs es ahora Greetings.xaml.vb o
Greetings.xaml.cs. Este archivo de código está anidado bajo el nodo del 1. Abra la ventana Cuadro de herramientas eligiendo el menú Ver y el
archivo .xaml para mostrar que están muy relacionados entre sí. elemento Cuadro de herramientas.

2. En el Cuadro de herramientas, busque el control TextBlock.


Advertencia
<TextBlock HorizontalAlignment="Center" TextWrapping="Wrap"
VerticalAlignment="Center" RenderTransformOrigin="4.08,2.312"
Margin="237,57,221,238"><Run Text="TextBlock"/><InlineUIContainer><TextBlock
TextWrapping="Wrap" Text="TextBlock"/>

Para personalizar el texto en el bloque de texto


3. Agregue un control TextBlock a la superficie de diseño. Para ello, elija el
elemento TextBlock y arrástrelo a la ventana en la superficie de 1. En la vista XAML, busque el marcado de TextBlock y cambie el atributo de
diseño. Centre el control cerca de la parte superior de la ventana. texto: Text=”Select a message option and then choose the Display
button.”
La ventana debería ser similar a la siguiente ilustración:
2. Si TextBlock no se expande para ajustarse a la vista Diseño, amplíe el
Figura 7: Ventana Greetings con el control TextBlock control TextBlock (con las asas de captación de los bordes) para que se
muestre todo el texto.

3. Guarde los cambios presionando Ctrl-s o usando el elemento de


menú Archivo.

A continuación, agregará dos controles RadioButton al formulario.


Para agregar botones de radio:

1. En el Cuadro de herramientas, busque el control RadioButton.

El marcado XAML debe tener un aspecto similar al siguiente:


2. Agregue dos controles RadioButton a la superficie de diseño eligiendo el
elemento RadioButton y arrastrándolo a la ventana de la superficie de
diseño dos veces. Además, mueva los botones (seleccionándolos y usando
las teclas de dirección) para que los botones aparezcan uno junto al otro
bajo el control TextBlock.

La ventana debe ser similar a la que se muestra a continuación:

Figura 8: RadioButtons en la ventana Greetings.


3. En la ventana Propiedades del control RadioButton izquierdo, cambie la
propiedad Name (la propiedad situada en la parte superior de la
ventana Propiedades) a RADIOBUTTON1. Asegúrese de que seleccionó
RadioButton y no la cuadrícula de fondo del formulario; el campo Tipo de la
ventana de propiedades del campo Nombre debe indicar RadioButton.

4. En la ventana Propiedades del control RadioButton derecho, cambie la


propiedad Name a RADIOBUTTON2 Y después guarde los cambios
presionando Ctrl-s o usando el elemento de menú Archivo. Asegúrese de
haber seleccionado RadioButton antes de cambiar y guardar.
Ahora puede agregar el texto para mostrar de cada control RadioButton. El
procedimiento siguiente actualiza la propiedad Content de un control RadioButton. La ventana debería parecerse a la de la siguiente ilustración.
Para agregar el texto para mostrar de cada botón de radio. Figura 9: Interfaz de usuario final de Greetings

1. En la superficie de diseño, abra el menú contextual de RadioButton1


presionando el botón secundario del mouse mientras selecciona
RadioButton1, elija Editar texto y, luego, escriba HELLO.

2. Abra el menú contextual de RadioButton2 presionando el botón secundario


del mouse mientras selecciona RadioButton2, elija Editar texto y, luego,
escriba GOODBYE.

El último elemento de la interfaz de usuario que agregará es un control Button.

Para agregar el control Button

1. En Cuadro de herramientas, busque el control Botón y, después,


agréguelo a la superficie de diseño en los controles RadioButton Agregar código al botón Mostrar
seleccionando el botón y arrastrándolo al formulario de la vista de diseño.
2. En la vista XAML, cambie el valor de Contenido del control Botón Cuando se ejecuta esta aplicación, aparece un cuadro de mensaje después de que
de Content=”Button” a Content=”Display” y después guarde los un usuario elija un botón de radio y, a continuación, el botónMostrar. Aparecerá un
cambios (Ctrl-s o use el menú Archivo. cuadro de mensaje para Hello y otro para Goodbye. Para crear este
3. El marcado debería ser similar al del ejemplo siguiente: <Button comportamiento, debe agregar código al evento Button_Click en Greetings.xaml.vb o
Content="Display" HorizontalAlignment="Left" Greetings.xaml.cs.
VerticalAlignment="Top" Width="75" Margin="215,204,0,0"/> Agregar código para mostrar cuadros de mensaje.
 VB
1. En la superficie de diseño, haga doble clic en el botón Mostrar.  If RadioButton1.IsChecked = True Then
 MessageBox.Show("Hello.")
Se abre Greetings.xaml.vb o Greetings.xaml.cs con el cursor en el evento  Else RadioButton2.IsChecked = True
Button_Click. También puede agregar un controlador de eventos clic de la  MessageBox.Show("Goodbye.")
siguiente manera (si el código pegado tiene una línea en zigzag roja debajo  End If
de algún nombre, probablemente no seleccionó los controles RadioButton
en la superficie de diseño y les cambió el nombre):
 Para Visual C#, escriba el código siguiente:
Para Visual Basic, el controlador de eventos debe ser similar a:
 if (RadioButton1.IsChecked == true)
 {
 VB  MessageBox.Show("Hello.");
 Private Sub Button_Click_1(sender As Object, e As  }
RoutedEventArgs)  else
 {
 End Sub  RadioButton2.IsChecked = true;
 Para Visual C#, el controlador de eventos debe ser similar a:  MessageBox.Show("Goodbye.");
 C#  }
 private void Button_Click_1(object sender, RoutedEventArgs e) 3. Guarde la aplicación.
 {
Depurar y probar la aplicación
 }
A continuación, depurará la aplicación para buscar errores y probar que los dos
cuadros de mensaje aparecen correctamente. Las siguientes instrucciones indican
2. Para Visual Basic, escriba el código siguiente:
cómo compilar e iniciar el depurador, pero más adelante podría leer Compilar una
aplicación de WPF (WPF) y Depurar WPF para obtener más información.

Buscar y corregir errores.

En este paso, encontrará el error que causamos anteriormente al cambiar el


nombre del archivo XAML de la ventana principal.

Para iniciar la depuración y buscar el error


Hemos cambiado el nombre de Mainwindow.xaml a Greetings.xaml al comienzo de
1. Inicie el depurador seleccionando Depurar y después Iniciar depuración. este tutorial, pero el código todavía hace referencia a Mainwindow.xaml como el URI
de inicio de la aplicación, por lo que el proyecto no puede iniciarse.
Para especificar Greetings.xaml como el URI de inicio.

1. En el Explorador de soluciones, abra el archivo App.xaml (en el proyecto


de C#) o el archivo Application.xaml (en el proyecto de Visual Basic) en la
vista XAML (no puede abrirse en la vista Diseño). Para ello, seleccione el
archivo y presione Entrar o haga doble clic en él.

Aparece un cuadro de diálogo que indica que se ha producido una 2. Cambie StartupUri="MainWindow.xaml" a StartupUri="Greetings.xaml
excepción IO Exception: No se encuentra el recurso ‘mainwindow.xaml’. " y después guarde los cambios con Ctrl-s.

2. Elija el botón Aceptar y después detenga el depurador. Vuelva a iniciar el depurador (presione F5). Debería ver la ventana Greetings de la
aplicación.
Para depurar con puntos de interrupción.

Agregando algunos puntos de interrupción puede probar el código durante la


depuración. Puede agregar puntos de interrupción eligiendo Depurar en el menú
principal, luego Alternar puntos de interrupción o haciendo clic en el margen
izquierdo del editor junto a la línea de código donde desea que se produzca la
interrupción.

Para agregar puntos de interrupción.

1. Abra Greetings.xaml.vb o Greetings.xaml.cs y seleccione la línea


siguiente: MessageBox.Show("Hello.").

2. Agregue un punto de interrupción en el menú seleccionando Depurar y


después Alternar puntos de interrupción.
Aparece un círculo rojo al lado de la línea de código en el margen
izquierdo de la ventana del editor.
3. Seleccione la línea siguiente: MessageBox.Show("Goodbye.").
4. Presione la tecla F9 para agregar un punto de interrupción y después
presione la tecla F5 para iniciar la depuración.
5. En la ventana Greetings, elija el botón de radio Hello y después elija el
botón Mostrar.
La línea MessageBox.Show("Hello.") se resalta en amarillo. En la parte
inferior del IDE, las ventanas Automático, Variables locales e Inspección
están acopladas juntas en el lado izquierdo, mientras que las ventanas Pila
de llamadas, Puntos de interrupción, Comando, Inmediato y Salida están 1. En el menú principal, seleccione Compilar y, después, Limpiar
acopladas juntas en el lado derecho. solución para eliminar los archivos intermedios y de salida que se
6. En la barra de menús, elija Depurar, Paso a paso para salir. crearon durante las compilaciones anteriores. Esto no es necesario, pero
La aplicación reanuda la ejecución y aparece un cuadro de mensaje con la se limpian las salidas de compilación de depuración.
palabra “Hello”.
7. Elija el botón Aceptar en el cuadro de mensaje para cerrarlo.
8. En la ventana Greetings, elija el botón de radio Goodbye y después elija el
botón Mostrar.
La línea MessageBox.Show("Goodbye.") se resalta en amarillo.
9. Elija la tecla F5 para continuar con la depuración. Cuando aparezca el
cuadro de mensaje, elija el botón Aceptar en el cuadro de mensaje para
cerrarlo.
10. Presione las teclas MAYÚS + F5 (presione MAYÚS en primer lugar y,
mientras la mantiene presionada, presione F5) para detener la
depuración.
11. En la barra de menús, elija Depurar, Deshabilitar todos los puntos de
interrupción.
Cambie la configuración de compilación de HelloWPFApp
de Depurar a Liberar mediante el control de lista desplegable en la barra de
Compilar una versión de lanzamiento de la aplicación
herramientas (dice "Depurar" actualmente).
Ahora que ha comprobado que todo funciona, puede preparar una versión de
lanzamiento de la aplicación.

Para limpiar los archivos de solución y crear una versión de lanzamiento.


2. Compile la solución con Compilar, Compilar solución o presione la tecla
F6.
GUÍA BREVE DE CSS declaración. A su vez la declaración está compuesta por una propiedad y el valor
que se le asigne.

 h1 {color: red;}
¿Qué es CSS?  h1 es el selector
 {color: red;} es la declaración
Hojas de Estilo en Cascada (Cascading Style Sheets), es un mecanismo simple que
describe cómo se va a mostrar un documento en la pantalla, o cómo se va a El selector funciona como enlace entre el documento y el estilo, especificando los
imprimir, o incluso cómo va a ser pronunciada la información presente en ese elementos que se van a ver afectados por esa declaración. La declaración es la
documento a través de un dispositivo de lectura. Esta forma de descripción de parte de la regla que establece cuál será el efecto. En el ejemplo anterior, el
estilos ofrece a los desarrolladores el control total sobre estilo y formato de sus selector h1 indica que todos los elementos h1 se verán afectados por la declaración
documentos. donde se establece que la propiedad color va a tener el valor red (rojo) para todos
los elementos h1 del documento o documentos que estén vinculados a esa hoja de
¿Para qué sirve?
estilos.
CSS se utiliza para dar estilo a documentos HTML y XML, separando el contenido de
Las tres formas más conocidas de dar estilo a un documento son las siguientes:
la presentación. Los Estilos definen la forma de mostrar los elementos HTML y XML.
CSS permite a los desarrolladores Web controlar el estilo y el formato de múltiples Utilizando una hoja de estilo externa que estará vinculada a un documento a través
páginas Web al mismo tiempo. Cualquier cambio en el estilo marcado para un del elemento <link>, el cual debe ir situado en la sección <head>.
elemento en la CSS afectará a todas las páginas vinculadas a esa CSS en las que
aparezca ese elemento.  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN">
 <html>
¿Cómo funciona?  <head>
 <title>Título</title>
CSS funciona a base de reglas, es decir, declaraciones sobre el estilo de uno o más
 <link rel="stylesheet" type="text/css"
elementos. Las hojas de estilo están compuestas por una o más de esas reglas
href="http://www.w3.org/css/officeFloats.css" />
aplicadas a un documento HTML o XML. La regla tiene dos partes: un selector y la
 </head>
 <body>
 .  h1 {
 .  font-family: Helvetica, Geneva, Arial, sans-serif;
 .  }
 .
 </body>
 </html>  </style>
 </head>
Utilizando el elemento <style>, en el interior del documento al que se le quiere dar
 <body>
estilo, y que generalmente se situaría en la sección <head>. De esta forma los
 <h1>Aquí se aplicará el estilo de letra para el Título</h1>
estilos serán reconocidos antes de que la página se cargue por completo.
 </body>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN">  </html>
 <html>
Utilizando estilos directamente sobre aquellos elementos que lo permiten a través
 <head>
del atributo <style> dentro de <body>. Pero este tipo de definición del estilo pierde
 <title>hoja de estilo interna</title>
las ventajas que ofrecen las hojas de estilo al mezclarse el contenido con la
 <style type="text/css">
presentación.

Algunas normas básicas a la hora de crear una CSS son las siguientes:
 body {
En el siguiente ejemplo, h1{color: red;}, el selector, <h1>, le dice al navegador la
 padding-left: 11em;
parte del documento que se verá afectada por esa regla. Los selectores pueden
 font-family: Georgia, "Times New Roman", serif;
aparecer individualmente o agrupados, separándolos con comas:
 color: red;
 background-color: #d8da3d;  h1, h2, h3 {
 }  color: red;
 }
 lo que es lo mismo
 h1 {color: red;} A continuación se muestran tres ejemplos de Hojas de Estilo diferentes, en las que
 h2 {color: red;} se cambian algunas características, vinculadas a este mismo documento: La Guía
 h3 {color: red;} Breve de CSS. Comprueba el cambio de aspecto:

La propiedad, que en este caso sería color, especifica qué aspecto se va a cambiar. Las tres formas más conocidas de dar estilo a un documento son las
En este ejemplo la propiedad cambiada será el color. Las propiedades que se siguientes:
desean modificar en una CSS para un mismo selector pueden agruparse, pero será
necesario separar cada una de ellas con un punto y coma.  Utilizando una hoja de estilo externa que estará vinculada a un
documento a través del elemento <link>, el cual debe ir situado en la
 p {text-align:center;color:red} sección <head>.
 Normalmente se describe una propiedad por línea, de la siguiente manera:
 h1 {
 padding-left: 11em;
 font-family: Georgia, "Times New Roman",Times, serif;  <!DOCTYPE html PUBLIC "-//W3C//DTD
 color: red; XHTML 1.1//EN">
 background-color: #d8da3d;  <html>
 }  <head>
 <title>Título</title>
El valor, representado a la derecha de los dos puntos (:), establece el valor de la
 <link rel="stylesheet" type="text/css"
propiedad. Es importante recordar que si el valor está formado por más de una

palabra, hay que ponerlo entre comillas.
href="http://www.w3.org/css/officeFloats.
 p {font-family: "sans serif";} css" />
 </head>
Ejemplos:  <body>
 .
 .
 .  }
 . 
 </body>  </style>
 </html>  </head>
 Utilizando el elemento <style>, en el interior del documento al que se  <body>
le quiere dar estilo, y que generalmente se situaría en la  <h1>Aquí se aplicará el estilo de letra para
sección <head>. De esta forma los estilos serán reconocidos antes el Título</h1>
de que la página se cargue por completo.  </body>
 <!DOCTYPE html PUBLIC "-//W3C//DTD  </html>
XHTML 1.1//EN">
 <html>
Utilizando estilos directamente sobre aquellos elementos que lo permiten a través
 <head>
del atributo <style> dentro de <body>. Pero este tipo de estilo pierde las ventajas
 <title>hoja de estilo interna</title>
que ofrecen las hojas de estilo al mezclarse el contenido con la presentación.
 <style type="text/css">
 Algunas normas básicas a la hora de crear una CSS son las siguientes:
 body {
 padding-left: 11em; En el siguiente ejemplo, h1{color: red;}, el selector, <h1>, le dice al navegador la
 font-family: Georgia, "Times New parte del documento que se verá afectada por esa regla. Los selectores pueden
Roman", serif; aparecer individualmente o agrupados, separándolos con comas:
 color: red;
 background-color: #d8da3d;
 }  h1, h2, h3 {
  color: red;
 h1 {  }
 font-family: Helvetica, Geneva, Arial, O lo que es lo mismo
sans-serif;
h1 {color: red;} p {font-family: "sans serif";}
h2 {color: red;} EL PRIMER SCRIPT
h3 {color: red;}

La propiedad, que en este caso sería color, especifica qué aspecto se va a cambiar. A continuación, se muestra un primer script sencillo pero completo:
En este ejemplo la propiedad cambiada será el color. Las propiedades que se <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://
desean modificar en una CSS para un mismo selector pueden agruparse, pero será www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
necesario separar cada una de ellas con un punto y coma.
<html xmlns="http://www.w3.org/1999/xhtml">
p {text-align:center;color:red}
<head>

Normalmente se describe una propiedad por línea, de la siguiente manera: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /
h1 { >
padding-left: 11em;
<title>El primer script</title>
font-family: Georgia, "Times New
Roman",Times, serif; <script type="text/javascript">
color: red;
background-color: #d8da3d; alert("Hola Mundo!");
}
</script>

El valor, en este caso red, establece el valor de la propiedad. Es importante </head>


recordar que si el valor está formado por más de una palabra, hay que ponerlo
entre comillas.
<body> La instrucción alert() es una de las utilidades que incluye JavaScript y permite
mostrar un mensaje en la pantalla del usuario. Si se visualiza la página web de este
<p>Esta página contiene el primer script</p> primer script en cualquier navegador, automáticamente se mostrará una ventana
con el mensaje "Hola Mundo!".
</body>

</html>

En este ejemplo, el script se incluye como un bloque de código dentro de una página A continuación se muestra el resultado de ejecutar el script en diferentes
XHTML. Por tanto, en primer lugar se debe crear una página XHTML correcta que navegadores:
incluya la declaración del DOCTYPE, el atributo xmlns, las
secciones <head> y <body>, la etiqueta <title>, etc.

Aunque el código del script se puede incluir en cualquier parte de la página, se


recomienda incluirlo en la cabecera del documento, es decir, dentro de la
etiqueta <head>.

A continuación, el código JavaScript se debe incluir entre las


etiquetas <script>...</script>. Además, para que la página sea válida, es necesario
definir el atributo type de la etiqueta <script>. Técnicamente, el atributo type se
corresponde con "el tipo MIME", que es un estándar para identificar los diferentes
tipos de contenidos. El "tipo MIME" correcto para JavaScript es text/javascript.

Una vez definida la zona en la que se incluirá el script, se escriben todas las
sentencias que forman la aplicación. Este primer ejemplo es tan sencillo que Figura 2.1 Mensaje mostrado con "alert()" en Internet Explorer
solamente incluye una sentencia: alert("Hola Mundo!");.
Figura 2.2 Mensaje mostrado con "alert()" en Firefox
Figura 2.3 Mensaje mostrado con "alert()" en Opera

Como se puede observar en las imágenes anteriores, el funcionamiento de la


utilidad alert() en los distintos navegadores es idéntico. Sin embargo, existen
grandes diferencias visuales en la forma en la que se presentan los mensajes.

Ejercicio 1

Modificar el primer script para que:

 Todo el código JavaScript se encuentre en un archivo externo


llamado codigo.js y el script siga funcionando de la misma manera.
 Después del primer mensaje, se debe mostrar otro mensaje que diga "Soy
el primer script"
 Añadir algunos comentarios que expliquen el funcionamiento del código
 Añadir en la página XHTML un mensaje de aviso para los navegadores que
no tengan activado el soporte de JavaScript

PROGRAMACIÓN BÁSICA

Antes de comenzar a desarrollar programas y utilidades con JavaScript, es


necesario conocer los elementos básicos con los que se construyen las
aplicaciones. Si ya sabes programar en algún lenguaje de programación, este
capítulo te servirá para conocer la sintaxis específica de JavaScript.

Si nunca has programado, este capítulo explica en detalle y comenzando desde cero
los conocimientos básicos necesarios para poder entender posteriormente la
programación avanzada, que es la que se utiliza para crear las aplicaciones reales.
VARIABLES Los elementos numero_1 y numero_2 son variables que almacenan los valores que
utiliza el programa. El resultado se calcula siempre en función del valor almacenado
Las variables en los lenguajes de programación siguen una lógica similar a las por las variables, por lo que este programa funciona correctamente para cualquier
variables utilizadas en otros ámbitos como las matemáticas. Una variable es un par de números indicado. Si se modifica el valor de las
elemento que se emplea para almacenar y hacer referencia a otro valor. Gracias a variables numero_1 y numero_2, el programa sigue funcionando correctamente.
las variables es posible crear "programas genéricos", es decir, programas que
funcionan siempre igual independientemente de los valores concretos utilizados. Las variables en JavaScript se crean mediante la palabra reservada var. De esta
forma, el ejemplo anterior se puede realizar en JavaScript de la siguiente manera:
De la misma forma que si en Matemáticas no existieran las variables no se podrían
definir las ecuaciones y fórmulas, en programación no se podrían hacer programas  var numero_1 = 3;
realmente útiles sin las variables.  var numero_2 = 1;
 var resultado = numero_1 + numero_2;
Si no existieran variables, un programa que suma dos números podría escribirse
como: La palabra reservada var solamente se debe indicar al definir por primera vez la
variable, lo que se denomina declarar una variable. Cuando se utilizan las variables
resultado = 3 + 1 en el resto de instrucciones del script, solamente es necesario indicar su nombre.
En otras palabras, en el ejemplo anterior sería un error indicar lo siguiente:
El programa anterior es tan poco útil que sólo sirve para el caso en el que el primer
número de la suma sea el 3 y el segundo número sea el 1. En cualquier otro caso,  var numero_1 = 3;
el programa obtiene un resultado incorrecto.  var numero_2 = 1;
 var resultado = var numero_1 + var numero_2;
Sin embargo, el programa se puede rehacer de la siguiente manera utilizando
variables para almacenar y referirse a cada número: Si cuando se declara una variable se le asigna también un valor, se dice que la
variable ha sidoinicializada. En JavaScript no es obligatorio inicializar las variables,
 numero_1 = 3 ya que se pueden declarar por una parte y asignarles un valor posteriormente. Por
 numero_2 = 1 tanto, el ejemplo anterior se puede rehacer de la siguiente manera:
 resultado = numero_1 + numero_2
 var numero_1;  numero_2 = 1;
 var numero_2;  resultado = numero_1 + numero_2;

En cualquier caso, se recomienda declarar todas las variables que se vayan a


utilizar.
 numero_1 = 3;
 numero_2 = 1; El nombre de una variable también se conoce como identificador y debe cumplir
las siguientes normas:

 Sólo puede estar formado por letras, números y los símbolos $ (dólar)
 var resultado = numero_1 + numero_2; y _ (guión bajo).
Una de las características más sorprendentes de JavaSript para los
 El primer carácter no puede ser un número.
programadores habituados a otros lenguajes de programación es que tampoco es
necesario declarar las variables. En otras palabras, se pueden utilizar variables que Por tanto, las siguientes variables tienen nombres correctos:
no se han definido anteriormente mediante la palabra reservada var. El ejemplo
anterior también es correcto en JavaScript de la siguiente forma:  var $numero1;
 var _$letra;
 var numero_1 = 3;  var $$$otroNumero;
 var numero_2 = 1;  var $_a__$4;
 resultado = numero_1 + numero_2;
Sin embargo, las siguientes variables tienen identificadores incorrectos:
La variable resultado no está declarada, por lo que JavaScript crea una variable
global (más adelante se verán las diferencias entre variables locales y globales) y  var 1numero; // Empieza por un número
le asigna el valor correspondiente. De la misma forma, también sería correcto el  var numero;1_123; // Contiene un carácter ";"
siguiente código:

 numero_1 = 3;
Tipos de variables En ocasiones, el texto que se almacena en las variables no es tan sencillo. Si por
ejemplo el propio texto contiene comillas simples o dobles, la estrategia que se
Aunque todas las variables de JavaScript se crean de la misma forma (mediante la
sigue es la de encerrar el texto con las comillas (simples o dobles) que no utilice el
palabra reservada var), la forma en la que se les asigna un valor depende del tipo
texto:
de valor que se quiere almacenar (números, textos, etc.)

3.2.1. Numéricas
 /* El contenido de texto1 tiene comillas simples, por lo que
Se utilizan para almacenar valores numéricos enteros (llamados integer en inglés)
 se encierra con comillas dobles */
o decimales (llamados float en inglés). En este caso, el valor se asigna indicando
 var texto1 = "Una frase con 'comillas simples' dentro";
directamente el número entero o decimal. Los números decimales utilizan el
carácter. (punto) en vez de , (coma) para separar la parte entera y la parte
decimal:
 /* El contenido de texto2 tiene comillas dobles, por lo que
 var iva = 16; // variable tipo entero  se encierra con comillas simples */
 var total = 234.65; // variable tipo decimal  var texto2 = 'Una frase con "comillas dobles" dentro';

3.2.2. Cadenas de texto No obstante, a veces las cadenas de texto contienen tanto comillas simples como
dobles. Además, existen otros caracteres que son difíciles de incluir en una variable
Se utilizan para almacenar caracteres, palabras y/o frases de texto. Para asignar de texto (tabulador, ENTER, etc.) Para resolver estos problemas, JavaScript define
el valor a la variable, se encierra el valor entre comillas dobles o simples, para un mecanismo para incluir de forma sencilla caracteres especiales y problemáticos
delimitar su comienzo y su final: dentro de una cadena de texto.
var mensaje = "Bienvenido a nuestro sitio web"; El mecanismo consiste en sustituir el carácter problemático por una combinación
var nombreProducto = 'Producto ABC'; simple de caracteres. A continuación se muestra la tabla de conversión que se debe
utilizar:
var letraSeleccionada = 'c';
 Si se quiere incluir... Se debe incluir...
 Una nueva línea \n El mensaje mostrado sea el de la siguiente imagen:
 Un tabulador \t
Nuevo mensaje que debe mostrar el script
 Una comilla simple \'
 Una comilla doble \"
 Una barra inclinada \\
3.2.3. Arrays
De esta forma, el ejemplo anterior que contenía comillas simples y dobles dentro
del texto se puede rehacer de la siguiente forma: En ocasiones, a los arrays se les llama vectores, matrices e incluso arreglos. No
obstante, el término array es el más utilizado y es una palabra comúnmente
 var texto1 = 'Una frase con \'comillas simples\' dentro'; aceptada en el entorno de la programación.

Un array es una colección de variables, que pueden ser todas del mismo tipo o cada
una de un tipo diferente. Su utilidad se comprende mejor con un ejemplo sencillo: si
 var texto2 = "Una frase con \"comillas dobles\" dentro";
una aplicación necesita manejar los días de la semana, se podrían crear siete
Este mecanismo de JavaScript se denomina "mecanismo de escape" de los variables de tipo texto:
caracteres problemáticos, y es habitual referirse a que los caracteres han sido
"escapados".  var dia1 = "Lunes";
 var dia2 = "Martes";
 ...
 var dia7 = "Domingo";
Ejercicio 2

Aunque el código anterior no es incorrecto, sí que es poco eficiente y complica en


Modificar el primer script del capítulo anterior para que:
exceso la programación. Si en vez de los días de la semana se tuviera que guardar
El mensaje que se muestra al usuario se almacene en una variable llamada mensaje el nombre de los meses del año, el nombre de todos los países del mundo o las
y el funcionamiento del script sea el mismo. mediciones diarias de temperatura de los últimos 100 años, se tendrían que crear
decenas o cientos de variables.
En este tipo de casos, se pueden agrupar todas las variables relacionadas en una El valor dias[5] hace referencia al elemento que ocupa la sexta posición dentro del
colección de variables o array. El ejemplo anterior se puede rehacer de la siguiente array dias. Como las posiciones empiezan a contarse en 0, la posición 5 hace
forma: referencia al sexto elemento, en este caso, el valor sábado.

 var dias = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", Ejercicio 3


"Domingo"];
Crear un array llamado meses y que almacene el nombre de los doce meses del
Ahora, una única variable llamada dias almacena todos los valores relacionados año. Mostrar por pantalla los doce nombres utilizando la función alert().
entre sí, en este caso los días de la semana. Para definir un array, se utilizan los
3.2.4. Booleanos
caracteres [ y ] para delimitar su comienzo y su final y se utiliza el carácter ,
(coma) para separar sus elementos: Las variables de tipo boolean o booleano también se conocen con el nombre de
variables de tipo lógico. Aunque para entender realmente su utilidad se debe
 var nombre_array = [valor1, valor2, ..., valorN];
estudiar la programación avanzada con JavaScript del siguiente capítulo, su
Una vez definido un array, es muy sencillo acceder a cada uno de sus elementos. funcionamiento básico es muy sencillo.
Cada elemento se accede indicando su posición dentro del array. La única
Una variable de tipo boolean almacena un tipo especial de valor que solamente
complicación, que es responsable de muchos errores cuando se empieza a
puede tomar dos valores: true (verdadero) o false (falso). No se puede utilizar para
programar, es que las posiciones de los elementos empiezan a contarse en el 0 y
no en el 1: almacenar números y tampoco permite guardar cadenas de texto.

 var diaSeleccionado = dias[0]; // diaSeleccionado = "Lunes"


 var otroDia = dias[5]; // otroDia = "Sábado" Los únicos valores que pueden almacenar estas variables son true y false, por lo
que no pueden utilizarse los valores verdadero y falso. A continuación se muestra
En el ejemplo anterior, la primera instrucción quiere obtener el primer elemento del
un par de variables de tipo booleano:
array. Para ello, se indica el nombre del array y entre corchetes la posición del
elemento dentro del array. Como se ha comentado, las posiciones se empiezan a  var clienteRegistrado = false;
contar en el 0, por lo que el primer elemento ocupa la posición 0 y se accede a él  var ivaIncluido = true;
mediante dias[0].
OPERADORES  /* Error, la asignación siempre se realiza a una variable,
 por lo que en la izquierda no se puede indicar un número */
Las variables por sí solas son de poca utilidad. Hasta ahora, sólo se ha visto cómo  5 = número1;
crear variables de diferentes tipos y cómo mostrar su valor mediante la función
alert(). Para hacer programas realmente útiles, son necesarias otro tipo de
herramientas.  // Ahora, la variable número1 vale 5
Los operadores permiten manipular el valor de las variables, realizar operaciones  número1 = 5;
matemáticas con sus valores y comparar diferentes variables. De esta forma, los
operadores permiten a los programas realizar cálculos complejos y tomar
decisiones lógicas en función de comparaciones y otros tipos de condiciones.  // Ahora, la variable número1 vale 4
 número1 = número2;
3.3.1. Asignación

El operador de asignación es el más utilizado y el más sencillo. Este operador se


utiliza para guardar un valor específico en una variable. El símbolo utilizado es = 3.3.2. Incremento y decremento
(no confundir con el operador == que se verá más adelante):
Estos dos operadores solamente son válidos para las variables numéricas y se
 var número1 = 3; utilizan para incrementar o decrementar en una unidad el valor de una variable.

A la izquierda del operador, siempre debe indicarse el nombre de una variable. A la Ejemplo:
derecha del operador, se pueden indicar variables, valores, condiciones lógicas,
 var número = 5;
etc:
 ++número;
 var número1 = 3;  alert(número); // número = 6
 var número2 = 4;
El operador de incremento se indica mediante el prefijo ++ en el nombre de la  alert(número); // número = 6
variable. El resultado es que el valor de esa variable se incrementa en una unidad.
El resultado de ejecutar el script anterior es el mismo que cuando se utiliza el
Por tanto, el anterior ejemplo es equivalente a:
operador ++número, por lo que puede parecer que es equivalente indicar el
 var número = 5; operador ++ delante o detrás del identificador de la variable. Sin embargo, el
 número = número + 1; siguiente ejemplo muestra sus diferencias:
 alert(número); // número = 6

De forma equivalente, el operador decremento (indicado como un prefijo -- en el


nombre de la variable) se utiliza para decrementar el valor de la variable:
 var número1 = 5;
 var número = 5;
 var número2 = 2;
 --número;
 número3 = número1++ + número2;
 alert(número); // número = 4
 // número3 = 7, número1 = 6
El anterior ejemplo es equivalente a:

 var número = 5;
 var número1 = 5;
 número = número - 1;
 var número2 = 2;
 alert(número); // número = 4
 número3 = ++número1 + número2;
Los operadores de incremento y decremento no solamente se pueden indicar como  // número3 = 8, número1 = 6
prefijo del nombre de la variable, sino que también es posible utilizarlos como
Si el operador ++ se indica como prefijo del identificador de la variable, su valor se
sufijo. En este caso, su comportamiento es similar pero muy diferente. En el
incrementa antes de realizar cualquier otra operación. Si el operador ++ se indica
siguiente ejemplo:
como sufijo del identificador de la variable, su valor se incrementa después de
 var número = 5; ejecutar la sentencia en la que aparece.
 número++;
Por tanto, en la instrucción número3 = número1++ + número2;, el valor de número1 La negación lógica se obtiene prefijando el símbolo ! al identificador de la variable.
se incrementa después de realizar la operación (primero se suma y número3 vale El funcionamiento de este operador se resume en la siguiente tabla:
7, después se incrementa el valor de número1 y vale 6). Sin embargo, en la
 variable !variable
instrucción número3 = ++número1 + número2;, en primer lugar se incrementa el
 true false
valor de número1 y después se realiza la suma (primero se incrementa número1 y
 false true
vale 6, después se realiza la suma y número3 vale 8).
Si la variable original es de tipo booleano, es muy sencillo obtener su negación. Sin
embargo, ¿qué sucede cuando la variable es un número o una cadena de texto?
3.3.3. Lógicos Para obtener la negación en este tipo de variables, se realiza en primer lugar su
conversión a un valor booleano:
Los operadores lógicos son imprescindibles para realizar aplicaciones complejas,
ya que se utilizan para tomar decisiones sobre las instrucciones que debería Si la variable contiene un número, se transforma en false si vale 0 y en true para
ejecutar el programa en función de ciertas condiciones. cualquier otro número (positivo o negativo, decimal o entero).

El resultado de cualquier operación que utilice operadores lógicos siempre es un Si la variable contiene una cadena de texto, se transforma en false si la cadena es
valor lógico o booleano. vacía ("") y en true en cualquier otro caso.

 var cantidad = 0;
 vacio = !cantidad; // vacio = true
3.3.3.1. Negación

Uno de los operadores lógicos más utilizados es el de la negación. Se utiliza para


obtener el valor contrario al valor de la variable:  cantidad = 2;
 vacio = !cantidad; // vacio = false
 var visible = true;
 alert(!visible); // Muestra "false" y no "true"

 var mensaje = "";


 mensajeVacio = !mensaje; // mensajeVacio = true  resultado = valor1 && valor2; // resultado = true

 mensaje = "Bienvenido"; 3.3.3.3. OR


 mensajeVacio = !mensaje; // mensajeVacio = false
La operación lógica OR también combina dos valores booleanos. El operador se
indica mediante el símbolo || y su resultado es true si alguno de los dos operandos
es true:
3.3.3.2. AND
variable1 variable2variable1 || variable2
La operación lógica AND obtiene su resultado combinando dos valores booleanos. El
operador se indica mediante el símbolo && y su resultado solamente es true si los true true true
dos operandos son true:
true false true
variable1 variable2variable1 && variable2
false true true
 true true true
 true false false false false false
 false true false
 false false false  var valor1 = true;
 var valor1 = true;  var valor2 = false;
 var valor2 = false;  resultado = valor1 || valor2; // resultado = true
 resultado = valor1 && valor2; // resultado = false

 valor1 = false;
 valor1 = true;  valor2 = false;
 valor2 = true;  resultado = valor1 || valor2; // resultado = false
El operador módulo en JavaScript se indica mediante el símbolo %, que no debe
confundirse con el cálculo del porcentaje:
3.3.4. Matemáticos
 var número1 = 10;
JavaScript permite realizar manipulaciones matemáticas sobre el valor de las
 var número2 = 5;
variables numéricas. Los operadores definidos son: suma (+), resta (-),
 resultado = número1 % número2; // resultado = 0
multiplicación (*) y división (/). Ejemplo:

 var número1 = 10;


 var número2 = 5;  número1 = 9;
 número2 = 5;
 resultado = número1 % número2; // resultado = 4
 resultado = número1 / número2; // resultado = 2
Los operadores matemáticos también se pueden combinar con el operador de
 resultado = 3 + número1; // resultado = 13
asignación para abreviar su notación:
 resultado = número2 – 4; // resultado = 1
 resultado = número1 * número 2; // resultado = 50  var número1 = 5;
 número1 += 3; // número1 = número1 + 3 = 8
Además de los cuatro operadores básicos, JavaScript define otro operador
 número1 -= 1; // número1 = número1 - 1 = 4
matemático que no es sencillo de entender cuando se estudia por primera vez, pero
 número1 *= 2; // número1 = número1 * 2 = 10
que es muy útil en algunas ocasiones.
 número1 /= 5; // número1 = número1 / 5 = 1
Se trata del operador "módulo", que calcula el resto de la división entera de dos  número1 %= 4; // número1 = número1 % 4 = 1
números. Si se divide por ejemplo 10 y 5, la división es exacta y da un resultado de
3.3.5. Relacionales
2. El resto de esa división es 0, por lo que módulo de 10 y 5 es igual a 0.
Los operadores relacionales definidos por JavaScript son idénticos a los que
Sin embargo, si se divide 9 y 5, la división no es exacta, el resultado es 1 y el resto
definen las matemáticas: mayor que (>), menor que (<), mayor o igual (>=), menor o
4, por lo que módulo de 9 y 5 es igual a 4.
igual (<=), igual que (==) y distinto de (!=).
Los operadores que relacionan variables son imprescindibles para realizar
cualquier aplicación compleja, como se verá en el siguiente capítulo de
 // El operador "==" compara variables
programación avanzada. El resultado de todos estos operadores siempre es un
 var número1 = 5;
valor booleano:
 resultado = número1 == 3; // número1 = 5 y resultado = false
 var número1 = 3;
Los operadores relacionales también se pueden utilizar con variables de tipo
 var número2 = 5;
cadena de texto:
 resultado = número1 > número2; // resultado = false
 resultado = número1 < número2; // resultado = true  var texto1 = "hola";
 var texto2 = "hola";
 var texto3 = "adios";
 número1 = 5;
 numero2 = 5;
 resultado = número1 >= número2; // resultado = true  resultado = texto1 == texto3; // resultado = false
 resultado = número1 <= número2; // resultado = true  resultado = texto1 != texto2; // resultado = false
 resultado = número1 == número2; // resultado = true  resultado = texto3 >= texto2; // resultado = false
 resultado = número1 != número2; // resultado = false
Cuando se utilizan cadenas de texto, los operadores "mayor que" (>) y "menor que"
Se debe tener especial cuidado con el operador de igualdad (==), ya que es el (<) siguen un razonamiento no intuitivo: se compara letra a letra comenzando desde
origen de la mayoría de errores de programación, incluso para los usuarios que ya la izquierda hasta que se encuentre una diferencia entre las dos cadenas de texto.
tienen cierta experiencia desarrollando scripts. El operador == se utiliza para Para determinar si una letra es mayor o menor que otra, las mayúsculas se
comparar el valor de dos variables, por lo que es muy diferente del operador =, que consideran menores que las minúsculas y las primeras letras del alfabeto son
se utiliza para asignar un valor a una variable: menores que las últimas (a es menor que b, b es menor que c, A es menor que a,
etc.)
 // El operador "=" asigna valores
 var número1 = 5;
 resultado = número1 = 3; // número1 = 3 y resultado = 3
ESTRUCTURAS DE CONTROL DE FLUJO  }

Los programas que se pueden realizar utilizando solamente variables y operadores Si la condición se cumple (es decir, si su valor es true) se ejecutan todas las
son una simple sucesión lineal de instrucciones básicas. instrucciones que se encuentran dentro de {...}. Si la condición no se cumple (es
decir, si su valor es false) no se ejecuta ninguna instrucción contenida en {...} y el
Sin embargo, no se pueden realizar programas que muestren un mensaje si el valor programa continúa ejecutando el resto de instrucciones del script.
de una variable es igual a un valor determinado y no muestren el mensaje en el
resto de casos. Tampoco se puede repetir de forma eficiente una misma Ejemplo:
instrucción, como por ejemplo sumar un determinado valor a todos los elementos
 var mostrarMensaje = true;
de un array.

Para realizar este tipo de programas son necesarias las estructuras de control de
flujo, que son instrucciones del tipo "si se cumple esta condición, hazlo; si no se  if(mostrarMensaje) {
cumple, haz esto otro". También existen instrucciones del tipo "repite esto mientras  alert("Hola Mundo");
se cumpla esta condición".  }
Si se utilizan estructuras de control de flujo, los programas dejan de ser una En el ejemplo anterior, el mensaje sí que se muestra al usuario ya que la
sucesión lineal de instrucciones para convertirse en programas inteligentes que variable mostrarMensaje tiene un valor de true y por tanto, el programa entra
pueden tomar decisiones en función del valor de las variables. dentro del bloque de instrucciones del if.
3.4.1. Estructura if El ejemplo se podría reescribir también como:
La estructura más utilizada en JavaScript y en la mayoría de lenguajes de  var mostrarMensaje = true;
programación es la estructuraif. Se emplea para tomar decisiones en función de
una condición. Su definición formal es:

 if(condicion) {  if(mostrarMensaje == true) {


 ...  alert("Hola Mundo");
 } La condición que controla el if() puede combinar los diferentes operadores lógicos
y relacionales mostrados anteriormente:

 var mostrado = false;


En este caso, la condición es una comparación entre el valor de la
variable mostrarMensaje y el valortrue. Como los dos valores coinciden, la igualdad
se cumple y por tanto la condición es cierta, su valor es true y se ejecutan las
instrucciones contenidas en ese bloque del if.  if(!mostrado) {
 alert("Es la primera vez que se muestra el mensaje");
La comparación del ejemplo anterior suele ser el origen de muchos errores de  }
programación, al confundir los operadores == y =. Las comparaciones siempre se
realizan con el operador ==, ya que el operador = solamente asigna valores: Los operadores AND y OR permiten encadenar varias condiciones simples para
construir condiciones complejas:
 var mostrarMensaje = true;
 var mostrado = false;
 var usuarioPermiteMensajes = true;

 // Se comparan los dos valores


 if(mostrarMensaje == false) {
 ...  if(!mostrado && usuarioPermiteMensajes) {
 }  alert("Es la primera vez que se muestra el mensaje");
 }

La condición anterior está formada por una operación AND sobre dos variables. A
 // Error - Se asigna el valor "false" a la variable su vez, a la primera variable se le aplica el operador de negación antes de realizar
 if(mostrarMensaje = false) { la operación AND. De esta forma, como el valor de mostrado es false, el
 ... valor !mostrado sería true. Como la variable usuarioPermiteMensajes valetrue, el
 } resultado de !mostrado && usuarioPermiteMensajes sería igual a true && true, por
lo que el resultado final de la condición del if() sería true y por tanto, se ejecutan En ocasiones, las decisiones que se deben realizar no son del tipo "si se cumple la
las instrucciones que se encuentran dentro del bloque del if(). condición, hazlo; si no se cumple, no hagas nada". Normalmente las condiciones
suelen ser del tipo "si se cumple esta condición, hazlo; si no se cumple, haz esto
Ejercicio
otro".
Completar las condiciones de los if del siguiente script para que los mensajes de
Para este segundo tipo de decisiones, existe una variante de la
los alert() se muestren siempre de forma correcta:
estructura if llamada if...else. Su definición formal es la siguiente:
 var numero1 = 5;
 if(condicion) {
 var numero2 = 8;
 ...
 }
 else {
 if(...) {  ...
 alert("numero1 no es mayor que numero2");  }
 }
Si la condición se cumple (es decir, si su valor es true) se ejecutan todas las
 if(...) {
instrucciones que se encuentran dentro del if(). Si la condición no se cumple (es
 alert("numero2 es positivo");
decir, si su valor es false) se ejecutan todas las instrucciones contenidas en else {
 }
}. Ejemplo:
 if(...) {
 alert("numero1 es negativo o distinto de cero");  var edad = 18;
 }
 if(...) {
 alert("Incrementar en 1 unidad el valor de numero1 no lo hace mayor
 if(edad >= 18) {
o igual que numero2");
 alert("Eres mayor de edad");
 }
 }
3.4.2. Estructura if...else  else {
 alert("Todavía eres menor de edad"); almacenada en la variable nombre es vacía (es decir, es igual a"") se muestra el
 } mensaje definido en el if(). En otro caso, se muestra el mensaje definido en el
bloque else { }.
Si el valor de la variable edad es mayor o igual que el valor numérico 18, la
condición del if() se cumple y por tanto, se ejecutan sus instrucciones y se muestra La estructura if...else se puede encadenar para realizar varias comprobaciones
el mensaje "Eres mayor de edad". Sin embargo, cuando el valor de la seguidas:
variable edad no es igual o mayor que 18, la condición del if() no se cumple, por lo
 if(edad < 12) {
que automáticamente se ejecutan todas las instrucciones del bloque else { }. En
 alert("Todavía eres muy pequeño");
este caso, se mostraría el mensaje "Todavía eres menor de edad".
 }
El siguiente ejemplo compara variables de tipo cadena de texto:  else if(edad < 19) {
 alert("Eres un adolescente");
 var nombre = "";
 }
 else if(edad < 35) {
 alert("Aun sigues siendo joven");
 if(nombre == "") {  }
 alert("Aún no nos has dicho tu nombre");  else {
 }  alert("Piensa en cuidarte un poco más");
 else {  }
 alert("Hemos guardado tu nombre");
No es obligatorio que la combinación de estructuras if...else acabe con la
 }
instrucción else, ya que puede terminar con una instrucción de tipo else if().

Ejercicio
La condición del if() anterior se construye mediante el operador ==, que es el que
El cálculo de la letra del Documento Nacional de Identidad (DNI) es un proceso
se emplea para comparar dos valores (no confundir con el operador = que se
matemático sencillo que se basa en obtener el resto de la división entera del
utiliza para asignar valores). En el ejemplo anterior, si la cadena de texto
número de DNI y el número 23. A partir del resto de la división, se obtiene la letra 3.4.3. Estructura for
seleccionándola dentro de un array de letras.
Las estructuras if y if...else no son muy eficientes cuando se desea ejecutar de
El array de letras es: forma repetitiva una instrucción. Por ejemplo, si se quiere mostrar un mensaje
cinco veces, se podría pensar en utilizar el siguiente if:
var letras = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L',
'C', 'K', 'E', 'T'];  var veces = 0;

Por tanto si el resto de la división es 0, la letra del DNI es la T y si el resto es 3 la


letra es la A. Con estos datos, elaborar un pequeño script que:
 if(veces < 4) {
 alert("Mensaje");
 veces++;
Almacene en una variable el número de DNI indicado por el usuario y en otra
 }
variable la letra del DNI que se ha indicado. (Pista: si se quiere pedir directamente
al usuario que indique su número y su letra, se puede utilizar la función prompt()) Se comprueba si la variable veces es menor que 4. Si se cumple, se entra dentro
del if(), se muestra el mensaje y se incrementa el valor de la variable veces. Así se
En primer lugar (y en una sola instrucción) se debe comprobar si el número es
debería seguir ejecutando hasta mostrar el mensaje las cinco veces deseadas.
menor que 0 o mayor que 99999999. Si ese es el caso, se muestra un mensaje al
usuario indicando que el número proporcionado no es válido y el programa no Sin embargo, el funcionamiento real del script anterior es muy diferente al
muestra más mensajes. deseado, ya que solamente se muestra una vez el mensaje por pantalla. La razón es
que la ejecución de la estructura if() no se repite y la comprobación de la condición
Si el número es válido, se calcula la letra que le corresponde según el método
sólo se realiza una vez, independientemente de que dentro del if() se modifique el
explicado anteriormente.
valor de la variable utilizada en la condición.
Una vez calculada la letra, se debe comparar con la letra indicada por el usuario. Si
La estructura for permite realizar este tipo de repeticiones (también llamadas
no coinciden, se muestra un mensaje al usuario diciéndole que la letra que ha
bucles) de una forma muy sencilla. No obstante, su definición formal no es tan
indicado no es correcta. En otro caso, se muestra un mensaje indicando que el
sencilla como la de if():
número y la letra de DNI son correctos.
 for(inicializacion; condicion; actualizacion) {  var i = 0;
 ...
Por tanto, en primer lugar se crea la variable i y se le asigna el valor de 0. Esta
 }
zona de inicialización solamente se tiene en consideración justo antes de comenzar
La idea del funcionamiento de un bucle for es la siguiente: "mientras la condición a ejecutar el bucle. Las siguientes repeticiones no tienen en cuenta esta parte de
indicada se siga cumpliendo, repite la ejecución de las instrucciones definidas inicialización.
dentro del for. Además, después de cada repetición, actualiza el valor de las
La zona de condición del bucle es:
variables que se utilizan en la condición".

La "inicialización" es la zona en la que se establece los valores iniciales de las  i<5


variables que controlan la repetición.
Los bucles se siguen ejecutando mientras se cumplan las condiciones y se dejan de
La "condición" es el único elemento que decide si continua o se detiene la ejecutar justo después de comprobar que la condición no se cumple. En este caso,
repetición. mientras la variable i valga menos de 5 el bucle se ejecuta indefinidamente.

La "actualización" es el nuevo valor que se asigna después de cada repetición a las Como la variable i se ha inicializado a un valor de 0 y la condición para salir del
variables que controlan la repetición. bucle es que i sea menor que 5, si no se modifica el valor de i de alguna forma, el
bucle se repetiría indefinidamente.
 var mensaje = "Hola, estoy dentro de un bucle";
Por ese motivo, es imprescindible indicar la zona de actualización, en la que se
modifica el valor de las variables que controlan el bucle:

 for(var i = 0; i < 5; i++) {  i++


 alert(mensaje);
 } En este caso, el valor de la variable i se incrementa en una unidad después de cada
repetición. La zona de actualización se ejecuta después de la ejecución de las
instrucciones que incluye el for.

La parte de la inicialización del bucle consiste en:


Así, durante la ejecución de la quinta repetición el valor de i será 4. Después de la 3.4.4. Estructura for...in
quinta ejecución, se actualiza el valor de i, que ahora valdrá 5. Como la condición es
que i sea menor que 5, la condición ya no se cumple y las instrucciones del for no
se ejecutan una sexta vez. Una estructura de control derivada de for es la estructura for...in. Su definición
exacta implica el uso de objetos, que es un elemento de programación avanzada que
Normalmente, la variable que controla los bucles for se llama i, ya que recuerda a
no se va a estudiar. Por tanto, solamente se va a presentar la
la palabra índice y su nombre tan corto ahorra mucho tiempo y espacio.
estructura for...in adaptada a su uso en arrays. Su definición formal adaptada a los
El ejemplo anterior que mostraba los días de la semana contenidos en un array se arrays es:
puede rehacer de forma más sencilla utilizando la estructura for:
 for(indice in array) {
 var dias = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sá  ...
bado", "Domingo"];  }

Si se quieren recorrer todos los elementos que forman un array, la


estructura for...in es la forma más eficiente de hacerlo, como se muestra en el
 for(var i=0; i<7; i++) { siguiente ejemplo:
 alert(dias[i]);
 }  var dias = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sá
bado", "Domingo"];
Ejercicio:

El factorial de un número entero n es una operación matemática que consiste en


multiplicar todos los factores n x (n-1) x (n-2) x ... x 1. Así, el factorial de 5 (escrito  for(i in dias) {
como 5!) es igual a: 5! = 5 x 4 x 3 x 2 x 1 = 120  alert(dias[i]);
Utilizando la estructura for, crear un script que calcule el factorial de un número  }
entero.
La variable que se indica como indice es la que se puede utilizar dentro del
bucle for...in para acceder a los elementos del array. De esta forma, en la primera
repetición del bucle la variable i vale 0 y en la última vale 6.

Esta estructura de control es la más adecuada para recorrer arrays (y objetos), ya


que evita tener que indicar la inicialización y las condiciones del bucle for simple y
funciona correctamente cualquiera que sea la longitud del array. De hecho, sigue
funcionando igual aunque varíe el número de elementos del array.

PROGRAMACIÓN AVANZADA
Las estructuras de control, los operadores y todas las utilidades propias de
JavaScript que se han visto en los capítulos anteriores, permiten crear scripts
sencillos y de mediana complejidad.

Sin embargo, para las aplicaciones más complejas son necesarios otros elementos
como las funciones y otras estructuras de control más avanzadas, que se
describen en este capítulo.
FUNCIONES  var número1 = 3;
 var número2 = 5;
Cuando se desarrolla una aplicación compleja, es muy habitual utilizar una y otra
vez las mismas instrucciones. Un script para una tienda de comercio electrónico
por ejemplo, tiene que calcular el precio total de los productos varias veces, para
añadir los impuestos y los gastos de envío.  // Se suman los números y se muestra el resultado
 resultado = número1 + número2;
Cuando una serie de instrucciones se repiten una y otra vez, se complica  alert("El resultado es " + resultado);
demasiado el código fuente de la aplicación, ya que:

El código de la aplicación es mucho más largo porque muchas instrucciones están


repetidas.  número1 = 10;
 número2 = 7;
Si se quiere modificar alguna de las instrucciones repetidas, se deben hacer tantas
modificaciones como veces se haya escrito esa instrucción, lo que se convierte en
un trabajo muy pesado y muy propenso a cometer errores.
 // Se suman los números y se muestra el resultado
Las funciones son la solución a todos estos problemas, tanto en JavaScript como
 resultado = número1 + número2;
en el resto de lenguajes de programación. Una función es un conjunto de
 alert("El resultado es " + resultado);
instrucciones que se agrupan para realizar una tarea concreta y que se pueden
reutilizar fácilmente.

En el siguiente ejemplo, las instrucciones que suman los dos números y muestran  número1 = 5;
un mensaje con el resultado se repiten una y otra vez:  número2 = 8;
 var resultado;

 // Se suman los números y se muestra el resultado


 resultado = número1 + número2;  /* En este punto, se llama a la función que suma
 alert("El resultado es " + resultado);  2 números y muestra el resultado */
 ...

Aunque es un ejemplo muy sencillo, parece evidente que repetir las mismas
instrucciones a lo largo de todo el código no es algo recomendable. La solución que  número1 = 5;
proponen las funciones consiste en extraer las instrucciones que se repiten y  número2 = 8;
sustituirlas por una instrucción del tipo "en este punto, se ejecutan las
instrucciones que se han extraído":

 var resultado;  /* En este punto, se llama a la función que suma


 2 números y muestra el resultado */

...
 var número1 = 3;
Para que la solución del ejemplo anterior sea válida, las instrucciones comunes se
 var número2 = 5;
tienen que agrupar en una función a la que se le puedan indicar los números que
debe sumar antes de mostrar el mensaje.

 /* En este punto, se llama a la función que suma Por lo tanto, en primer lugar se debe crear la función básica con las instrucciones
 2 números y muestra el resultado */ comunes. Las funciones en JavaScript se definen mediante la palabra
reservada function, seguida del nombre de la función. Su definición formal es la
siguiente:

 número1 = 10;  function nombre_funcion() {


 número2 = 7;  ...
 }
El nombre de la función se utiliza para llamar a esa función cuando sea necesario.  }
El concepto es el mismo que con las variables, a las que se les asigna un nombre
único para poder utilizarlas dentro del código. Después del nombre de la función, se
incluyen dos paréntesis cuyo significado se detalla más adelante. Por último, los
 var resultado;
símbolos { y } se utilizan para encerrar todas las instrucciones que pertenecen a la
función (de forma similar a como se encierran las instrucciones en las
estructuras if ofor).
 var número1 = 3;
Volviendo al ejemplo anterior, se crea una función llamada suma_y_muestra de la  var número2 = 5;
siguiente forma:

 function suma_y_muestra() {
 resultado = número1 + número2;  suma_y_muestra();
 alert("El resultado es " + resultado);
 }

Aunque la función anterior está correctamente creada, no funciona como debería  número1 = 10;
ya que le faltan los "argumentos", que se explican en la siguiente sección. Una vez  número2 = 7;
creada la función, desde cualquier punto del código se puede llamar a la función
para que se ejecuten sus instrucciones (además de "llamar a la función", también
se suele utilizar la expresión "invocar a la función").
 suma_y_muestra();
La llamada a la función se realiza simplemente indicando su nombre, incluyendo los
paréntesis del final y el carácter; para terminar la instrucción:

 function suma_y_muestra() {  número1 = 5;


 resultado = número1 + número2;  número2 = 8;
 alert("El resultado es " + resultado);
Siguiendo el ejemplo anterior, la función debe indicar que necesita dos argumentos,
correspondientes a los dos números que tiene que sumar:
 suma_y_muestra();
 ...  function suma_y_muestra (primer Número, segundo Número) { ... }

El código del ejemplo anterior es mucho más eficiente que el primer código que se A continuación, para utilizar el valor de los argumentos dentro de la función, se
mostró, ya que no existen instrucciones repetidas. Las instrucciones que suman y debe emplear el mismo nombre con el que se definieron los argumentos:
muestran mensajes se han agrupado bajo una función, lo que permite ejecutarlas
 function suma_y_muestra (primer Número, segundo Número) { ... }
en cualquier punto del programa simplemente indicando el nombre de la función.
 var resultado = primerNúmero + segundoNúmero;
Lo único que le falta al ejemplo anterior para funcionar correctamente es poder  alert("El resultado es " + resultado);
indicar a la función los números que debe sumar. Cuando se necesitan pasar datos  }
a una función, se utilizan los "argumentos", como se explica en la siguiente sección.
Dentro de la función, el valor de la variable primerNúmero será igual al primer
valor que se le pase a la función y el valor de la variable segundoNúmero será igual
al segundo valor que se le pasa. Para pasar valores a la función, se incluyen dentro
4.1.1. Argumentos y valores de retorno de los paréntesis utilizados al llamar a la función:
Las funciones más sencillas no necesitan ninguna información para producir sus  // Definición de la función
resultados. Sin embargo, la mayoría de funciones de las aplicaciones reales deben  function suma_y_muestra(primerNumero, segundoNúmero) { ... }
acceder al valor de algunas variables para producir sus resultados.  var resultado = primerNúmero + segundoNúmero;
Las variables que necesitan las funciones se llaman argumentos. Antes de que  alert("El resultado es " + resultado);
pueda utilizarlos, la función debe indicar cuántos argumentos necesita y cuál es el  }
nombre de cada argumento. Además, al invocar la función, se deben incluir los
valores que se le van a pasar a la función. Los argumentos se indican dentro de los
paréntesis que van detrás del nombre de la función y se separan con una coma (,).  // Declaración de las variables
 var número1 = 3;
 var número2 = 5; A continuación se muestra otro ejemplo de una función que calcula el precio total
de un producto a partir de su precio básico:

 // Definición de la función
 // Llamada a la función  function calculaPrecioTotal(precio) {
 suma_y_muestra(número1, número2);  var impuestos = 1.16;
 var gastosEnvio = 10;
En el código anterior, se debe tener en cuenta que:
 var precioTotal = ( precio * impuestos ) + gastosEnvio;
Aunque casi siempre se utilizan variables para pasar los datos a la función, se  }
podría haber utilizado directamente el valor de esas variables: suma_y_muestra(3,
5);

El número de argumentos que se pasa a una función debería ser el mismo que el  // Llamada a la función
número de argumentos que ha indicado la función. No obstante, JavaScript no  calculaPrecioTotal(23.34);
muestra ningún error si se pasan más o menos argumentos de los necesarios.
La función anterior toma como argumento una variable llamada precio y le suma los
El orden de los argumentos es fundamental, ya que el primer dato que se indica en impuestos y los gastos de envío para obtener el precio total. Al llamar a la función,
la llamada, será el primer valor que espera la función; el segundo valor indicado en se pasa directamente el valor del precio básico mediante el número 23.34.
la llamada, es el segundo valor que espera la función y así sucesivamente.
No obstante, el código anterior no es demasiado útil, ya que lo ideal sería que la
Se puede utilizar un número ilimitado de argumentos, aunque si su número es muy función pudiera devolver el resultado obtenido para guardarlo en otra variable y
grande, se complica en exceso la llamada a la función. poder seguir trabajando con este precio total:

No es obligatorio que coincida el nombre de los argumentos que utiliza la función y  function calculaPrecioTotal(precio) {
el nombre de los argumentos que se le pasan. En el ejemplo anterior, los  var impuestos = 1.16;
argumentos que se pasan son numero1y numero2 y los argumentos que utiliza la  var gastosEnvio = 10;
función son primerNúmero y segundoNúmero.  var precioTotal = ( precio * impuestos ) + gastosEnvio;
 }

 // Seguir trabajando con la variable "precioTotal"

 // El valor devuelto por la función, se guarda en una variable Para que la función devuelva un valor, solamente es necesario escribir la palabra
 var precioTotal = calculaPrecioTotal(23.34); reservada returnjunto con el nombre de la variable que se quiere devolver. En el
ejemplo anterior, la ejecución de la función llega a la instrucción return
precioTotal; Y en ese momento, devuelve el valor que contenga la
variable precioTotal.
 // Seguir trabajando con la variable "precioTotal"
Como la función devuelve un valor, en el punto en el que se realiza la llamada, debe
Afortunadamente, las funciones no solamente puede recibir variables y datos, sino indicarse el nombre de una variable en el que se guarda el valor devuelto:
que también pueden devolver los valores que han calculado. Para devolver valores
dentro de una función, se utiliza la palabra reservada return. Aunque las funciones  var precioTotal = calculaPrecioTotal(23.34);
pueden devolver valores de cualquier tipo, solamente pueden devolver un valor
Si no se indica el nombre de ninguna variable, JavaScript no muestra ningún error
cada vez que se ejecutan.
y el valor devuelto por la función simplemente se pierde y por tanto, no se utilizará
 function calculaPrecioTotal(precio) { en el resto del programa. En este caso, tampoco es obligatorio que el nombre de la
 var impuestos = 1.16; variable devuelta por la función coincida con el nombre de la variable en la que se
 var gastosEnvio = 10; va a almacenar ese valor.
 var precioTotal = ( precio * impuestos ) + gastosEnvio;
Si la función llega a una instrucción de tipo return, se devuelve el valor indicado y
 return precioTotal;
finaliza la ejecución de la función. Por tanto, todas las instrucciones que se incluyen
 }
después de un return se ignoran y por ese motivo la instrucción return suele ser la
última de la mayoría de funciones.

 var precioTotal = calculaPrecioTotal(23.34); Para que el ejemplo anterior sea más completo, se puede añadir otro argumento a
la función que indique el porcentaje de impuestos que se debe añadir al precio del
producto. Evidentemente, el nuevo argumento se debe añadir tanto a la definición  return precioTotal.toFixed(2);
de la función como a su llamada:  }

 function calculaPrecioTotal(precio, porcentajeImpuestos) {  var precioTotal = calculaPrecioTotal(23.34, 16);


 var gastosEnvio = 10;
 var precioConImpuestos = (1 + porcentajeImpuestos/100) * precio; SENTENCIAS BREAK Y CONTINUE
 var precioTotal = precioConImpuestos + gastosEnvio;
La estructura de control for es muy sencilla de utilizar, pero tiene el inconveniente
 return precioTotal;
de que el número de repeticiones que se realizan sólo se pueden controlar
 }
mediante las variables definidas en la zona de actualización del bucle.

Las sentencias break y continue permiten manipular el comportamiento normal de


los bucles for para detener el bucle o para saltarse algunas repeticiones.
 var precioTotal = calculaPrecioTotal(23.34, 16);
Concretamente, la sentencia break permite terminar de forma abrupta un bucle y la
 var otroPrecioTotal = calculaPrecioTotal(15.20, 4);
sentencia continue permite saltarse algunas repeticiones del bucle.

El siguiente ejemplo muestra el uso de la sentencia break:


Para terminar de completar el ejercicio anterior, se puede rendondear a dos
 var cadena = "En un lugar de la Mancha de cuyo nombre no quiero ac
decimales el precio total devuelto por la función:
ordarme...";
 var letras = cadena.split("");

 function calculaPrecioTotal(precio, porcentajeImpuestos) {  var resultado = "";


 var gastosEnvio = 10;
 var precioConImpuestos = (1 + porcentajeImpuestos/100) * precio;
 var precioTotal = precioConImpuestos + gastosEnvio;  for(i in letras) {
 if(letras[i] == 'a') {  var letras = cadena.split("");
 break;  var resultado = "";
 }
 else {
 resultado += letras[i];  for(i in letras) {
 }  if(letras[i] == 'a') {
 }  continue;
 alert(resultado);  }
 // muestra "En un lug"  else {
 resultado += letras[i];
 }
Si el programa llega a una instrucción de tipo break;, sale inmediatamente del bucle  }
y continúa ejecutando el resto de instrucciones que se encuentran fuera del  alert(resultado);
bucle for. En el ejemplo anterior, se recorren todas las letras de una cadena de  // muestra "En un lugr de l Mnch de cuyo nombre no quiero cordrm
texto y cuando se encuentra con la primera letra "a", se detiene la ejecución del e..."
bucle for.

La utilidad de break es terminar la ejecución del bucle cuando una variable toma un
determinado valor o cuando se cumple alguna condición. En este caso, cuando se encuentra una letra "a" no se termina el bucle, sino que no
se ejecutan las instrucciones de esa repetición y se pasa directamente a la
En ocasiones, lo que se desea es saltarse alguna repetición del bucle cuando se dan siguiente repetición del bucle for.
algunas condiciones. Siguiendo con el ejemplo anterior, ahora se desea que el texto
de salida elimine todas las letras "a" de la cadena de texto original: La utilidad de continue es que permite utilizar el bucle for para filtrar los resultados
en función de algunas condiciones o cuando el valor de alguna variable coincide con
 var cadena = "En un lugar de la Mancha de cuyo nombre no quiero ac un valor determinado.
ordarme...";
Evidentemente, las variables que controlan la condición deben modificarse dentro
del propio bucle, ya que de otra forma, la condición se cumpliría siempre y el
OTRAS ESTRUCTURAS DE CONTROL bucle while se repetiría indefinidamente.
Las estructuras de control de flujo que se han visto (if, else, for) y las sentencias El siguiente ejemplo utiliza el bucle while para sumar todos los números menores o
que modifican su comportamiento (break, continue) no son suficientes para realizar iguales que otro número:
algunas tareas complejas y otro tipo de repeticiones. Por ese motivo, JavaScript
proporciona otras estructuras de control de flujo diferentes y en algunos casos  var resultado = 0;
más eficientes.  var numero = 100;
 var i = 0;
4.4.1. Estructura while

La estructura while permite crear bucles que se ejecutan ninguna o más veces,
dependiendo de la condición indicada. Su definición formal es:  while(i <= numero) {
 while(condicion) {  resultado += i;
 ...  i++;
 }  }
El funcionamiento del bucle while se resume en: "mientras se cumpla la condición
indicada, repite indefinidamente las instrucciones incluidas dentro del bucle".
 alert(resultado);
Si la condición no se cumple ni siquiera la primera vez, el bucle no se ejecuta. Si la
condición se cumple, se ejecutan las instrucciones una vez y se vuelve a comprobar El programa debe sumar todos los números menores o igual que otro dado. Por
la condición. Si se sigue cumpliendo la condición, se vuelve a ejecutar el bucle y así ejemplo si el número es 5, se debe calcular: 1 + 2 + 3 + 4 + 5 = 15
se continúa hasta que la condición no se cumpla.
Este tipo de condiciones "suma números mientras sean menores o iguales que otro
número dado") se resuelven muy fácilmente con los bucles tipo while, aunque
también se podían resolver con bucles de tipo for.
En el ejemplo anterior, mientras se cumpla la condición, es decir, mientras que la  var resultado = 1;
variable i sea menor o igual que la variable número, se ejecutan las instrucciones  var numero = 5;
del bucle.

Dentro del bucle se suma el valor de la variable i al resultado total


(variable resultado) y se actualiza el valor de la variable i, que es la que controla la  do {
condición del bucle. Si no se actualiza el valor de la variable i, la ejecución del bucle  resultado *= numero; // resultado = resultado * numero
continua infinitamente o hasta que el navegador permita al usuario detener el  numero--;
script.  } while(numero > 0);

4.4.2. Estructura do...while


 alert(resultado);
El bucle de tipo do...while es muy similar al bucle while, salvo que en este
caso siempre se ejecutan las instrucciones del bucle al menos la primera vez. Su En el código anterior, el resultado se multiplica en cada repetición por el valor del
definición formal es: variable número. Además, en cada repetición se decrementa el valor de esta
variable número. La condición del bucledo...while es que el valor de número sea
 do { mayor que 0, ya que el factorial de un número multiplica todos los números
 ... menores o iguales que él mismo, pero hasta el número 1 (el factorial de 5 por
 } while(condicion); ejemplo es 5 x 4 x 3 x 2 x 1 = 120).

De esta forma, como la condición se comprueba después de cada repetición, la Como en cada repetición se decrementa el valor de la variable número y la
primera vez siempre se ejecutan las instrucciones del bucle. Es importante no condición es que numero sea mayor que cero, en la repetición en la
olvidar que después del while() se debe añadir el carácter ; (al contrario de lo que que numero valga 0, la condición ya no se cumple y el programa se sale del
sucede con el bucle while simple). bucle do...while.

Utilizando este bucle se puede calcular fácilmente el factorial de un número: 4.4.3. Estructura switch
La estructura if...else se puede utilizar para realizar comprobaciones múltiples y  case valor_2:
tomar decisiones complejas. Sin embargo, si todas las condiciones dependen  ...
siempre de la misma variable, el código JavaScript resultante es demasiado  break;
redundante:  ...
 case valor_n:
 if(numero == 5) {
 ...
 ...
 break;
 }
 default:
 else if(numero == 8) {
 ...
 ...
 break;
 }
 }
 else if(numero == 20) {
 ... El anterior ejemplo realizado con if...else se puede rehacer mediante switch:
 }
 else {  switch(número) {
 ...  case 5:
 }  ...
 break;
En estos casos, la estructura switch es la más eficiente, ya que está especialmente  case 8:
diseñada para manejar de forma sencilla múltiples condiciones sobre la misma  ...
variable. Su definición formal puede parecer compleja, aunque su uso es muy  break;
sencillo:  case 20:
 ...
 switch(variable) {
 break;
 case valor_1:
 default:
 ...
 ...
 break;
 break;
 }
INFORMACIÓN GENERAL SOBRE LOS CONTROLES DE SERVIDOR WEB ASP.NET
La estructura switch se define mediante la palabra reservada switch seguida, entre
Cuando crea páginas Web ASP.NET, puede utilizar estos tipos de controles:
paréntesis, del nombre de la variable que se va a utilizar en las comparaciones.
Como es habitual, las instrucciones que forman parte del switch se encierran entre Controles de servidor HTML Elementos HTML expuestos al servidor para que se
las llaves { y }. puedan programar. Los controles de servidor HTML exponen un modelo de objeto
que se relacionan muy estrechamente con los elementos HTML que representan.
Dentro del switch se definen todas las comparaciones que se quieren realizar sobre
el valor de la variable. Cada comparación se indica mediante la palabra Controles de servidor Web Controles con más funciones incorporadas que los
reservada case seguida del valor con el que se realiza la comparación. Si el valor controles de servidor HTML. Los controles de servidor Web incluyen no sólo
de la variable utilizada por switch coincide con el valor indicado por case, se controles de formulario como botones y cuadros de texto, sino también controles
ejecutan las instrucciones definidas dentro de ese case. con fines especiales como un calendario, menús y un control de vista de árbol. Los
controles de servidor Web son más abstractos que los controles de servidor HTML
Normalmente, después de las instrucciones de cada case se incluye la
pues su modelo de objetos no refleja necesariamente la sintaxis HTML.
sentencia break para terminar la ejecución del switch, aunque no es obligatorio. Las
comparaciones se realizan por orden, desde el primer case hasta el último, por lo Controles de validación Controles que incorporan lógica para permitirle
que es muy importante el orden en el que se definen los case. comprobar los controles de entrada de los usuarios como el control TextBox. Los
controles de validación le permiten comprobar un campo necesario, su adecuación
¿Qué sucede si ningún valor de la variable del switch coincide con los valores
a un valor o un modelo de caracteres concreto, comprobar que un valor se
definidos en los case? En este caso, se utiliza el valor default para indicar las
encuentra en un intervalo predefinido, etc. Para obtener más información, vea
instrucciones que se ejecutan en el caso en el que ningún case se cumpla para la
Controles de validación ASP.NET.
variable indicada.
Controles de usuario Controles que crea como páginas Web ASP.NET. Se pueden
Aunque default es opcional, las estructuras switch suelen incluirlo para definir al
incrustar controles de usuario de ASP.NET en otras páginas Web ASP.NET; esta es
menos un valor por defecto para alguna variable o para mostrar algún mensaje por
una forma sencilla de crear barras de herramientas y otros elementos
pantalla.
reutilizables. Para obtener más información, vea Controles de usuario ASP.NET.
También se pueden crear resultados para dispositivos móviles. Para hacerlo así, se El modelo de objetos de los controles de servidor HTML se relaciona estrechamente
utiliza el mismo marco de trabajo de páginas ASP.NET, pero se crean páginas Web con el de los elementos correspondientes. Por ejemplo, los atributos HTML se
Mobile ASP.NET en lugar de páginas Web ASP.NET y se utilizan controles diseñados exponen en controles de servidor HTML como propiedades.
específicamente para dispositivos móviles. Para obtener información detallada, vea
Cualquier elemento HTML de una página se puede convertir en control de servidor
Crear páginas Web de ASP.NET Mobile.
HTML agregando el atributo runat="server". Durante el análisis, el marco de trabajo
En la misma página puede utilizar todos los tipos de controles. En las siguientes de la página ASP.NET crea instancias de todos los elementos que contienen el
secciones se proporciona información más detallada sobre los controles de atributo runat="server". Si desea hacer referencia al control como un miembro
servidor ASP.NET. dentro del código, también deberá asignarle un atributo id al control.

En algunos casos, el funcionamiento correcto de los controles de servidor requiere El marco de trabajo de la página proporciona controles de servidor HTML
scripts de cliente. Si un usuario ha deshabilitado el scripting en el explorador, el predefinidos para los elementos HTML que se utilizan con más frecuencia
funcionamiento de los controles podría no ser el esperado. Para obtener dinámicamente en una página: el elemento form, los elementos input (cuadro de
información detallada, vea Controles de servidor Web ASP.NET y funciones del texto, casilla, botón Enviar), el elemento select, etc. Estos controles de servidor
explorador. HTML predefinidos comparten las propiedades básicas del control genérico y,
además, cada control normalmente proporciona su propio conjunto de propiedades
y su propio evento.
CONTROLES DE SERVIDOR HTML
Los controles de servidor HTML ofrecen las funciones siguientes:
Los controles de servidor HTML son elementos HTML (o elementos en otro marcado
Un modelo de objetos que pueda volver a programar en el servidor con las técnicas
compatible, como XHTML) que contienen atributos que los convierten en
habituales orientadas a objetos. Los controles de servidor exponen propiedades que
programables en código del servidor. De forma predeterminada, los elementos
permiten manipular los atributos de marcado del control mediante programación
HTML en una página Web ASP.NET no están disponibles para el servidor. En su lugar,
en el código del servidor.
se tratan como texto opaco y se pasan al explorador. Sin embargo, cuando se
convierten en controles de servidor HTML, los elementos HTML quedan expuestos Un conjunto de eventos para los que pueda escribir controles de eventos de la
como elementos programables en el servidor. misma forma que lo haría en un formulario basado en cliente, con la excepción de
que un evento se controla en código del servidor.
La capacidad de controlar eventos en un script de cliente. real representado por el control puede ser muy diferente al modelo con respecto al
que se han programado. Por ejemplo, un control RadioButtonList de servidor Web
Mantenimiento automático del estado del control. Cuando la página realiza una
podría representarse en una tabla o como un texto en línea con otro marcado.
acción de ida y vuelta al servidor, los valores que el usuario escriba en los
controles de servidor HTML se mantendrán automáticamente y la página se Los controles de servidor Web incluyen controles de formulario tradicionales como
devuelve al explorador. botones y cuadros de texto, además de controles complejos, como, por ejemplo, las
tablas. También incluyen controles que proporcionan funcionalidad de formulario de
Interacción con los controles de validación ASP.NET para poder comprobar que un
uso frecuente, como la presentación de datos en cuadrícula, la elección de fechas,
usuario ha escrito la información adecuada en un control.
la visualización de menús, etc.
Enlace de datos a una o varias de las propiedades del control.
Los controles de servidor Web ofrecen todas las funciones descritas anteriormente
Compatibilidad con estilos si la página Web ASP.NET se muestra en un explorador para los controles de servidor HTML (excepto la asignación uno a uno a elementos)
que admite hojas de estilos en cascada. y estas funciones adicionales:

Paso a través de atributos personalizados. Pueden agregarse los atributos que se  Un modelo de objetos enriquecido que proporciona capacidades de
necesiten a un control de servidor HTML: el marco de trabajo de páginas los programación de tipo seguro.
representará sin ningún cambio en la funcionalidad. Esto permite agregar atributos  Detección automática del explorador. Los controles pueden detectar las
específicos del explorador a los controles. funciones del explorador y representar el marcado adecuado.
 Para algunos controles, la capacidad para definir su propio diseño para el
Para obtener detalles sobre cómo convertir un elemento HTML en un control de control utilizando Templates.
servidor HTML, vea Cómo: Agregar controles de servidor HTML a una página Web  Para algunos controles, la capacidad de especificar si un evento del
mediante la sintaxis de ASP.NET. control provoca un envío inmediato al servidor o, en su lugar, se almacena
en caché y se activa cuando se envía la página.
Controles de servidor Web
 Compatibilidad para temas, lo que le permite definir un aspecto uniforme
Los controles de servidor Web son un segundo conjunto de controles diseñado con para los controles en todo el sitio. Para obtener información detallada,
otro enfoque. No se asignan necesariamente uno a uno a controles de servidor vea Temas y máscaras de ASP.NET.
HTML. En lugar de ello, se definen como controles abstractos, en los que el marcado
 Capacidad para pasar eventos de un control anidado (como un botón en hechos con anterioridad y que posiblemente él mismo hizo. También una aplicación
una tabla) al control contenedor. con mala documentación es muy difícil de depurar y de corregir errores
posteriores a su implementación.
Los controles utilizan una sintaxis como la que se muestra a continuación:

 <asp:button attributes runat="server" id="Button1" />


¿ y qué tiene esto que ver con la programación orientada a objetos ?
En este caso los atributos no son los de los elementos HTML. En lugar de ello, son
propiedades del control Web. Este tipo de programación consiste en agrupar en "objetos" aquel código, rutinas,
procedimientos, etc, que tengan cosas en común, de forma que cuando un
Cuando se ejecuta la página Web ASP.NET, el control de servidor Web se representa
programador las utilice sepa dónde encontrarlas. Un "nuevo" concepto (entre
en la página utilizando el marcado apropiado, que con frecuencia no sólo depende
comillas porque en realidad no es nuevo, pero bueno) que incluye la generación de
del tipo de explorador sino también de la configuración que haya realizado para el
aplicaciones "autodocumentadas". Una vez generado o construido un objeto el
control. Por ejemplo, un control TextBox podría representarse como una etiqueta
programador, y los que vengan detrás, podrán olvidarse por completo del objeto y
input o una etiqueta textarea dependiendo de sus propiedades.
sencillamente utilizarlo, al igual que hacemos con los textbox, commands, grids, etc.

Argumentos a favor de la POO:


MANUALES: POO Imaginemos que queremos utilizar ventanas en nuestro proyecto.
¿Qué es y para qué sirve la programación orientada a objetos? Queremos que estas ventanas puedan hacer dos cosas, abrirse y cerrarse. Además
una ventana deberá tener una propiedad llamada "estado" que nos indique si está
Cualquiera que haya programado un poco se dará cuenta de la importancia que
abierta o cerrada.
tiene para el programador la dichosa documentación. Documentación que le sirve
tanto a él como a otras personas (todavía no he conocido a uno al que le guste Con Visual Basic, sin utilizar la potencia de la POO escribiríamos algo parecido a
realizar tan atractiva labor). esto:
Pero la cosa no se queda ahí, además sin una buena documentación un  Sub Abrir()
programador pierde el tiempo en hacer rutinas o procedimientos que ya estaban o estado = 1 'Abrimos la ventana
 End Sub La POO nos ofrece la posibilidad de una vez definida una clase (en este caso la clase
 Sub Cerrar() ventana) poder crear tantas instancias (objetos) de esa clase como necesitemos y
o estado = 0 'Cerramos la ventana dotarlas de un nombre propio.
 End Sub

Si ahora otra persona, o incluso el mismo programador dentro de un mes, se pone


¿ Cómo se crea una clase ?
a leer esto, estaréis de acuerdo conmigo en que no entenderá nada. No sabe qué es
lo que abre ni lo que cierra ¿Cómo se va a dar cuenta de que está manipulando una Una clase se puede crear utilizando un módulo de clase "class module".
ventana?
Para crear un objeto, previamente hay que crear una clase. Una clase define los
Pero eso no es todo. ¿Qué sucede si desea crear varias ventanas? ¿Cómo distingue métodos de los objetos y sus propiedades.
unas de otras? ¿Definiendo más variables, como por ejemplo: estado1, estado2, etc?
Vamos con un ejemplo:
¡Menudo lío! ¡Y estamos hablando de una simple ventana con una propiedad y dos
métodos! Abrir un nuevo proyecto

Hombre, exagero un poco, seguramente el programador haría algo así: En el menú Insertar seleccionar "módulo de clase". Aparecerá en la ventana de
nuestro proyecto el nuevo archivo Class1.
 Sub Abrir (index as integer)
 estado(index) = 0 'Abrimos la ventana número index Analicemos el nuevo archivo:
 End Sub
Para poder acceder a sus propiedades seguramente no te baste con seleccionarlo
 Sub Cerrar (index as integer) en la ventana del proyecto y pulsar F4 sino que tendrás que abrirlo haciendo doble
 estado(index) = 1 'Cerramos la ventana index Click sobre él y posteriormente pulsar F4.
 End Sub
Al hacer esto observamos que tiene tres propiedades:
Es posible que haga esto, que se construya un Array de ventanas con sus
correspondientes variables de estado.
Propiedad "Instancing". Nos indica, en caso de que queramos hacer pública la Las propiedades se definen definiendo variables también de tipo Public en el general
clase (ya explicaremos esto) si podremos crear cero, una o n instancias de la clase del módulo.
(objetos). De momento poner Not Creatable.
Siguiendo con nuestro ejemplo, nuestra ventana ha de poder abrirse y cerrarse
Propiedad "Name". Con esta propiedad damos nombre a la clase que queremos además de tener una propiedad llamada "estado" que nos indique si está abierta o
crear. En nuestro ejemplo el nombre más apropiado sería "ventana". cerrada.

Propiedad "Public". Como ya intuís con esta propiedad determinamos si hacemos Para definir pues la propiedad "estado" basta con escribir en el general del módulo
o no pública nuestra clase (si queremos o no que otras aplicaciones puedan crear de clase:
nuevos objetos de la clase ventana). De momento poner False. Nota: al poner false
en esta propiedad se ignora el valor de la propiedad "Instancing"
Public estado as integer '1 abierta, 0 cerrada

Para definir los métodos abrir y cerrar:


Ya hemos creado la clase ventana. ¿Qué os parece?, ¿sencillo no?.

 Public Sub abrir()


Sigamos analizando el formulario de clase...
 estado = 1
Dicho formulario tiene en principio dos métodos: Initialize y Terminate.  End Sub
Abandonémoslos por ahora.  Public Sub cerrar()
 estado = 0
Ya estamos en disposición de empezar a crear los métodos y propiedades que van  End Sub
a definir la clase ventana.
¡Ya tenemos la clase ventana terminada!
Los métodos de una clase se definen sencillamente implementando funciones o
procedimientos en el "general" del módulo de tipo Public
¿Cómo se crea un objeto? A partir de ahora el programador sólo deberá recordar que puede crear ventanas y
que las ventanas se pueden abrir y cerrar. Además, si algún día desea revisar el
Siguiendo con el ejemplo creemos nuestro primer objeto ventana.
código asociado a los métodos abrir o cerrar sabrá dónde encontrarlo sin
En el Form_Load del formulario del mismo proyecto (Form1) escribir lo siguiente: dificultad; en la clase ventana.

A continuación guardemos el proyecto con el nombre, por ejemplo, "libreria.vbp"


(más adelante entenderéis porqué le llamo así)
 Dim Ventana_salita As New ventana ' Creamos mi Ventana_salita
 Ventana_salita.abrir 'Abramos la ventana de la salita Al hacerlo observaréis que se ha generado un archivo llamado ventana.cls. Este es
 estado = Ventana_salita.estado 'comprobemos que efectivamente se ha el archivo de definición de la clase (por deformación yo directamente le llamo: el
abierto objeto ventana, aunque no existe ningún objeto hasta que no se crea una instancia
 Ventana_salita.cerrar 'Cerremos ahora la ventana de la clase, como ya sabéis con la orden As New)
 estado = Ventana_salita.estado
Si ahora queréis utilizar el objeto ventana en nuevos proyectos basta con que en
éstos insertéis el archivo de clase ventana.cls

Ejecuta el código paso a paso para ir viendo el valor que va tomando la variable Ya sé lo que estáis pensando, que valla chapuza. Cada proyecto que utilice el objeto
estado. ventana tendrá que tener insertado el archivo ventana.cls.

¿Qué ocurre si ahora queremos crear otra ventana? Puedes crear tantas ventanas Esto ha de ser así porque no hemos dicho que la clase sea pública.
(instancias de la clase ventana) como desees. Por ejemplo creemos la ventana del
baño.
¿Cómo se crea una clase pública?
 Dim Ventana_baño As New ventana
 Ventana_baño.abrir Antes de meternos directamente con el procedimiento conviene tener una serie de
 Ventana_baño.cerrar conceptos claros. Para que una aplicación pueda servir a otras aplicaciones objetos
 ,etc ambas tienen que entenderse a través de la interfaz de Automatización OLE.
Una aplicación hace de servidor OLE (servidor de objetos) y otra de cliente. Por Acceder a las propiedades de la clase ventana y hacerla pública. Para ello en la
ejemplo, cuando hacemos unas tablas en Excel y las queremos pegar en Word, Excel propiedad Public poner True. Si queréis que distintas aplicaciones puedan crear
hace de servidor OLE y Word es el cliente. Ambos se entienden a través de la más de una instancia (objeto) poner la propiedad Instancing a Creatable MultiUse.
interfaz de automatización OLE y Excel le proporciona a Word el objeto "tabla" (en
Guardar el proyecto.
lugar de "ventana").
Repasemos. En nuestro proyecto tenemos un archivo llamado ventana.cls que
Así que, como habréis intuido, para que nuestro proyecto pueda servir el objeto
define la clase ventana. También tenemos un módulo con un procedimiento Sub Main
ventana (ya que queremos que sea público) a otras aplicaciones deberemos
sin código alguno. No tenemos nada más. Además nuestra clase es pública y
convertir el proyecto en un servidor OLE.
multiuse.

Ya reunimos todos los ingredientes para hacer de nuestro proyecto un servidor


¿Cómo se crea un servidor OLE? OLE.

Para que un proyecto con clases se convierta en un servidor OLE el proyecto Acceder al menú Archivo y seleccionar "Crear archivo Ole dll" (sólo disponible en la
deberá contener además de las clases, un módulo con el procedimiento Sub Main, versión profesional y para empresas).
aunque en éste no escribamos nada de código. Así que manos a la obra:
Dejar el nombre por defecto, que será "libreria.dll"
Insertar un módulo (normal) en el proyecto (module1)
Si hemos llevado a cabo con éxito la operación se nos habrá generado dicho archivo
Si queréis podéis borrar el formulario Form1, ya que para nuestros propósitos no y además se habrá registrado automáticamente en el registro de Windows.
nos es de utilidad.
Es interesante que accedamos al registro para ver un par de cosillas. Para ello ir a
Escribir en el módulo el procedimiento Sub Main vacío. Menú Inicio, Ejecutar. Poner "regedit".

 Sub Main() Una vez dentro del editor del registro de windows lo más sencillo para localizar los
 End Sub parámetros correspondientes a nuestro servidor OLE es que utilicemos el comando
buscar, introduciendo como cadena a buscar "libreria.dll".
Una vez encontrada observemos el valor de las siguientes constantes:  ,etc

InprocServer32 = "c:windowsescritoriolibreria.dll". Esta constante indica el camino Como ya se os habrá ocurrido, sería útil, a medida que hacemos aplicaciones, crear
hasta la dll que hemos creado. Cada vez que queramos crear una instancia de una una especie de librería de objetos (quiero decir clases) para ser utilizada en
clase contenida en esta dll, el sistema la buscará ahí. cualquier momento. Todos ellos dentro de, por ejemplo, libreria.dll. De esta forma
todo será más fácil de encontrar.
ProgID = "project1.ventana". Este valor es muy importante. Será la cadena que
deberemos escribir cuando desde nuestras aplicaciones queramos crear una Ah, otra cosa, no creáis que me olvido de los métodos Initialize y Terminate
instancia de ventana. project1 es la aplicación que nos sirve la clase ventana. comunes a todas las clases. Simplemente decir que se suele utilizar para
reinicializar y comprobar parámetros comunes a la clase. Explicar cuándo se
Una vez visto esto podemos salgamos del editor del registro de Windows e
producen ambos eventos me ocuparía varias líneas y no lograría expresarlo bien.
intentemos crear un objeto ventana para utilizar en una aplicación de Visual Basic.
Lo mejor es que escribáis código en ellos y ejecutéis paso a paso para daros cuenta
del momento exacto en el que se ejecutan. Baste decir que el evento Initialize se
produce inmediatamente antes de referirnos al objeto por primera vez y el evento
¿Cómo se crea un objeto servido por un servidor OLE? Terminate se produce cuando se encuentra la primera línea de código que ya no
hace referencia al objeto.
Abramos un nuevo proyecto con Visual Basic y escribamos las siguientes líneas de
código en el Form_Load del formulario Form1. Espero haber transmitido la utilidad de generar aplicaciones con programación
orientada a objetos y que me hayáis entendido (más bien haberme explicado).
 Dim ventana_cocina As Object
 Set ventana_cocina = CreateObject("proyect1.ventana") Lógicamente el ejemplo de la ventana es totalmente ilustrativo. Nadie va a crearse
un objeto para hacer algo tan simple. Pero la potencia de la POO nos facilita mucho
Ya tenemos creado nuestro objeto sin necesidad de tener en el proyecto el archivo
las cosas cuando debemos agrupar procedimientos o código que sea muy complejo
de clase ventana.cls.
y del que no nos queramos volver a acordar. Simplemente creamos una instancia y
Como antes, podemos hacer: la utilizamos.

 ventana_cocina.abrir
 ventana_cocina.cerrar

You might also like