CCNN 10 Mo
CCNN 10 Mo
CCNN 10 Mo
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
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.
Ejemplo de programación
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.
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:
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 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:
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:
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.
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
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.
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.
(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
¿TIPOS DE ALGORITMOS…?
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
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
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.
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.
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
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:
Dónde:
La forma es la siguiente:
Pseudocódigo:
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!
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:
ESTRUCTURAS CÍCLICAS
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:
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
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 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.
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
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:
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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=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:
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.
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:
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.
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:
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.
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.
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:
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.
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:
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
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.
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
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.
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:
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.
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.
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.
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:
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.
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:
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;
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:
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;
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(®, 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(®, 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(®, sizeof(stRegistro));
Por ejemplo, supongamos que nuestros registros tienen la siguiente estructura: Y para hacer una operación de escritura, usaremos:
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 <stdio.h>
Leer(&reg);
#include <stdlib.h>
// Insertar al final:
fseek(fa, 0, SEEK_END);
struct stRegistro {
fwrite(&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(&reg, sizeof(struct stRegistro), 1, fa);
void Mostrar(struct stRegistro *reg);
Mostrar(&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(&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(&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(&reg, sizeof(struct stRegistro), 1, fa)) } while(resp[0] < '0' && resp[0] > '5');
Listar(numero++, &reg); return resp[0];
system("PAUSE"); }
break;
case '5': // Eliminar marcados // Permite que el usuario introduzca un registro por pantalla
Empaquetar(&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->valido = 'S';
printf("Nombre: ");
// Muestra un menú con las opciones disponibles y captura una opción del usuario fgets(reg->nombre, 34, stdin);
int Menu() // la función fgets captura el retorno de línea, hay que eliminarlo:
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");
for(i = 0; i < 4; i++) { }
printf("Dato[%1d]: ", i); }
fgets(numero, 6, stdin);
reg->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->valido == 'S') { void Empaquetar(FILE **fa)
printf("Nombre: %s\n", reg->nombre); {
for(i = 0; i < 4; i++) printf("Dato[%1d]: %d\n", i, reg->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(&reg, sizeof(struct stRegistro), 1, *fa))
// si no está marcado como borrado if(reg.valido == 'S')
void Listar(long n, struct stRegistro *reg) fwrite(&reg, sizeof(struct stRegistro), 1, ftemp);
{ fclose(ftemp);
int i; fclose(*fa);
if(reg->valido == 'S') { remove("alea.bak");
printf("[%6ld] %-34s", n, reg->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;
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(®); while(fread(®, sizeof(struct stRegistro), 1, fa))
// Insertar al final: Listar(numero++, ®);
fseek(fa, 0, SEEK_END); system("PAUSE");
fwrite(®, 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(®, sizeof(struct stRegistro), 1, fa); break;
Mostrar(®); }
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(®, sizeof(struct stRegistro), 1, fa); int Menu()
reg.valido = 'N'; {
fseek(fa, numero*sizeof(struct stRegistro), SEEK_SET); char resp[20];
fwrite(®, 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(®, sizeof(struct stRegistro), 1, *fa)) do {
if(reg.valido == 'S') while(strcmp(LeeCampo(fa, iz, cad), mitad) < 0 && iz < final) iz++;
fwrite(®, 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(®, 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(®1, sizeof(struct stRegistro), 1, fa);
fseek(fa, de*sizeof(struct stRegistro), SEEK_SET); // Clase registro.
fread(®2, sizeof(struct stRegistro), 1, fa); class Registro {
fseek(fa, iz*sizeof(struct stRegistro), SEEK_SET); public:
fwrite(®2, 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(®1, 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 ®) {
cin.get(); clear();
} seekg(n*sizeof(Registro), ios::beg);
} read(reinterpret_cast<char *> (®), sizeof(Registro));
~Datos() { return gcount() > 0;
Empaquetar(); }
}
void Guardar(Registro ®); // Marca el registro como borrado:
bool Recupera(long n, Registro ®); 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 ®) { Registro reg;
// Insertar al final:
clear(); clear();
seekg(0, ios::end); seekg(0, ios::beg);
write(reinterpret_cast<char *> (®), sizeof(Registro)); do {
read(reinterpret_cast<char *> (®), sizeof(Registro)); long iz, de;
if(gcount() > 0 && reg.Valido()) char mitad[34];
ftemp.write(reinterpret_cast<char *> (®), 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 *> (®), 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 *> (®1), sizeof(Registro)); break;
seekg(de*sizeof(Registro), ios::beg); case '3': // Eliminar registro
read(reinterpret_cast<char *> (®2), sizeof(Registro)); system("cls");
seekp(iz*sizeof(Registro), ios::beg); cout << "Eliminar registro: ";
write(reinterpret_cast<char *> (®2), sizeof(Registro)); numero = LeeNumero();
seekp(de*sizeof(Registro), ios::beg); datos.Borrar(numero);
write(reinterpret_cast<char *> (®1), 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 ®);
memoria en muchos casos. void EliminarRetornoLinea(char *cad);
void Leer(FILE *fa, stRegistro ®, char *telefono);
void Insertar(FILE *fa, stRegistro ®);
Ejemplo
void Mostrar(stRegistro ®);
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 ®)
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 ®, 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 ®) 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(®, sizeof(stRegistro), 1, fa); fseek(fa, ind.indice*sizeof(stRegistro), SEEK_SET);
} fread(®, 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 ®) // insertaron.
{ void ListarNatural(FILE *fa)
// Insertar al final: {
fseek(fa, 0, SEEK_END); stRegistro reg;
fwrite(®, sizeof(stRegistro), 1, fa);
Reconstruir Indices(fa); rewind(fa);
} system("cls");
while(fread(®, 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(®, 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(®1, sizeof(stIndice), 1, fi); long menor, mayor;
fseek(fi, de*sizeof(stIndice), SEEK_SET); };
fread(®2, 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(®2, 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(®1, 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'.
[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;
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
//Lectura de datos }
#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.
Programa que lea un número entero por teclado y que calcule su factorial. Introduzca el precio
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
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;
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;
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;
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.
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; }
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;
/* 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;
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.
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.
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
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.
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:
} [ <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 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.
} [ <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();
<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>
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) {
void setA(int n) { a = n; } }
void setB(int n) { b = n; } };
// prueba
cout << "a = " << a << ", b = " << b << "; suma = " << a+b << endl; ParHijo p1(100, 200); // p1 es instancia de ParHijo
}; }
// ParHijo es una extensión de Par, y por lo tanto hereda los miembros de Par int main()
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.
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 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.
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:
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.
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.
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.
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.
TIPOS DE REDES
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
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.
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
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.
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.
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.
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.
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
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.
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
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:
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
1.2 Comandos DELETE Utilizado para eliminar registros de una tabla de una base de datos
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.
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.
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
<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
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 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).
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.
<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.
<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.
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
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>
<html>
?>
<head> <title>Ejemplo 5</title></head>
<body>
<h1> Ejemplo de PHP </h1>
</body>
</html>
<?php
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";
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.
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
?>
</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:
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 ||
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> }
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
?>
//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');
} ?>
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
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 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
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.
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>
</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.
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
Ejercicio 1
PROGRAMACIÓN BÁSICA
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;
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
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
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
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:
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:
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;
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:
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:
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;
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 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:
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:
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;
}
// 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: }
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.
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:
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
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.
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