jueves, 6 de abril de 2017

trabajo1 de Base de Datos


UNIVERSIDAD NACIONAL DEL ALTIPLANO 



                  ESCUELA PROFESIONAL:

                                                    INGENIERÍA DE SISTEMAS 


                                       TRABAJO DE INVESTIGACIÓN

                         DOCENTE

                                             ALDO HERNAN ZANABRIA GALVEZ

                         ALUMNA:

                                           JHENERY ANYELA CARBAJAL PARI



                              
                 


SEMÁNTICA



INTRODUCCIÓN



La Semántica (del griego semantikos, lo que tiene significado), es el estudio del significado de los signos lingüísticos, esto es qué significan las palabras, expresiones y oraciones para los hablantes, cómo los designan (es decir, de qué forma se refieren a ideas y cosas), y por último, cómo los interpretan los oyentes.

Su finalidad es establecer lo que significan los signos dentro del proceso que asigna tales significados.


Se estudia desde una perspectiva filosófica, lingüística y así como desde un enfoque que se conoce por semántica general. El aspecto lingüístico, motivo de la importancia de este trabajo, estudia los elementos o los rasgos del significado y cómo se relacionan dentro del sistema lingüístico.




SEMANTICA

Se le llama semántica a la interpretación, el análisis y correcto funcionamiento del sentido para usar las palabras, pero también nos encontramos con una clasificación que nos muestra que la semántica no solo es escrita, también el habla y la lectura forman parte de este estudio, pues nos referimos a una herramienta de interpretación de la comunicación, la escritura es un modo de comunicación formal, con la llegada de los medios digitales de conversación este tipo se conexión se volvió las versátil, dando paso a la creación de nuevos términos y modos de escribir, sin embargo, la comunicación oral sigue siendo el modo de expresar y compartir ideas mas usado, por lo que las personas necesitan de un método de comprensión valido para poder comunicarse con facilidad.

Existe otro tipo de semántica, y es la semántica lógica, la cual comprende un área donde se analiza la posición correcta de signos de puntuación y tildes como representación de acentos y formas de lectura.

La finalidad de la semántica es descomponer el significado en unidades más pequeñas, llamadas semas o rasgos semánticos, estos permiten segmentar el significado de las palabras, y diferenciar palabras de significado parecido y palabras de significado opuesto.


En informática, la semántica es considerada una aplicación de la matemática lógica. La semántica refleja el significado de programas o funciones.

Los programas pueden separarse en su parte sintáctica (la estructura gramatical) y su parte semántica (el significado). Por ejemplo, las siguientes sentencias de programación utilizan diferentes sintaxis (en diferentes lenguajes), pero resultan en la misma semántica (hacen lo mismo):
1) x += y; (C, Java, etc)
2) x := x + y; (Pascal) 
3) x = x + y (BASIC, Fortran)

En general, las tres operaciones lo que hacen (semántica) es sumar Y con X y almacenar el resultado en X.

 
SEMÁNTICA «CODER»

El estudio de los lenguajes de programación es conocido como la lingüística de la programación, por analogía con la filología. Esta comparación se basa en el hecho en que ambas poseen sintaxis (forma) y semántica (significado).
Definición de semántica aplicada a la programación:

Es el conjunto de reglas que proporcionan el significado de una sentencia o instrucción de cualquier lenguaje de programación.
Obviamente estos lenguajes no pueden ser comparados con ninguno que usemos para hablar, ya que han sido diseñados para ser implementados en los ordenadores u otros dispositivos. No tienen la misma expresividad y subjetividad.

En las 9 cosas más difíciles que tienen que hacer los desarrolladores, el primer punto se refiere a poner nombres. Para la mayoría de los programadores, elegir los nombres de las variables, funciones, clases, objetos, etc., es lo más difícil.

Como desarrollador/a debes asumir la responsabilidad del código que escribas y asegurarte que sea comprensible para los demás. Es lo que te diferenciará del resto: tu profesionalidad.

Los nombres no sólo nos permiten identificar objetos, sino que también pueden ayudar a describirlos. Hay que nombrar las cosas con el fin de trabajar de manera eficiente y eficaz. Y el primer paso es reconocer que tu código será visto por otros desarrolladores.

  • Características de una buena semántica «coder»:


* Es comprensible
El aspecto más importante es el nombre sea comprensible. Las palabras utilizadas en tu proyecto puede venir varias fuentes. Puedes escribir para que sea ampliamente entendido o para que sólo lo reconozcan las personas con las que trabajas en un proyecto.

* Es obvia
A veces el primer nombre que te viene a la cabeza puede ser la mejor opción. No juegues con conceptos abstractos. A veces darle demasiada vueltas a las cosas, empeoran el resultado.

* Es funcional
Tenemos que centrarnos en la función o el propósito, no en la apariencia o el comportamiento. Es decir, ¿cuál es la función de un componente y no cómo funciona el componente?

* Es consistente
Ser coherente en el enfoque de los nombres permitirá que sea más fácil la denominación de los componentes sucesivos. Las jerarquías deben ser predecibles.

* Es simple
Intenta evitar poner nombres largos. Sé eficiente. Por ejemplo, intenta describir una función particular si es posible con una palabra. Y cuidado con las abreviaturas, el contexto es importante.

* No debe depender de la cultura
Ten en cuenta que un término en España no tiene el mismo significado en otros países. Intenta escribir de una forma estándar o universal.

* Tiene personalidad
Picar código no tiene por qué ser aburrido, los nombres pueden dar carácter a tu proyecto. Sé creativo pero sin perder de vista los punto anteriores. Además puedes jugar según el tipo de producto que estés desarrollando.


Semántica de los lenguajes de programación

La semántica de un lenguaje de programación se refiere al significado que adoptan las distintas sentencias, expresiones y enunciados de un programa. La semántica engloba aspectos sensibles al contexto, a diferencia de la sintaxis que considera aspectos libres de contexto.

Los principales elementos de la semántica son:

* Variables: se refieren a locaciones de memoria ligadas a un nombre y a un tipo.

* Valores y referencias: los valores son el estado de determinada celda o grupo de celdas de la memoria, mientras que las referencias indican la posición de esa celda en memoria. 

Estos 2 conceptos están muy involucrados con los punteros. La mayoría de los lenguajes los soportan, aunque son una conocida fuente de errores de programación.
Expresiones: Son construcciones sintácticas que permiten combinar valores con operadores y producir nuevos valores. 

Semántica estática


* Gramática de atributos: Las gramáticas de atributos son más poderosas que las BNF porque permiten formalizar aspectos sensibles al contexto.

Por ejemplo, el chequeo de tipos depende del contexto porque debemos saber el tipo esperado y el actual y determinar si son compatibles. El tipo esperado lo obtenemos del contexto analizando la definición de la variable. 
Si la variable num1 está definida de tipo String, y más adelante le queremos asignar el valor 1000, se producirá un error de tipo.


  • La gramática de atributos de compone de:


* Atributos: o heredados: son los que se obtienen de un elemento más general. Esquema de arriba hacia abajo. 
Por ejemplo, number y float. En este caso float heredará los atributos de number e incorporará nuevos atributos propios de su tipo.
* Sintetizados: se conocen a partir de los sub- elementos, como ser un subrango. Esquema de abajo hacia arriba, opuesto a los atributos heredados.
* Intrínsecos: Estos atributos se obtienen de tablas externas, fuera del árbol de derivación.
condiciones: Son hechos que se evalúan si suceden o no.
Por ejemplo, if(num>=20) ...
* reglas: A partir de un conjunto de condiciones se forman las reglas.
Por ejemplo:














EJEMPLOS

Creo que la mejor forma más práctica de entender la diferencia entre la semántica y la sintaxis en un lenguaje de programación (en tu caso quieres que sea el lenguaje C) es definiendo los errores semánticos y los errores sintácticos.

- Errores sintácticos: cuando existe código inválido que el compilador no entiende. Por ejemplo, intentas multiplicar una variable string (cadena) con un integer (entero) en C. El compilador lo detectará porque no puede compilarlo así. O cuando olvidas cerrar algún paréntesis o algún corchete, es un error sintáctico.

- Errores semánticos: el código de programación es válido porque el compilador lo entiende, pero el programa resultante no hace lo que el programador quiere que haga. No hay forma de que el compilador detecte estos errores.

Los errores semánticos son "errores lógicos", la lógica detrás del código escrito no hace lo que el programador cree que hará.


Te daré varios errores semánticos en C:

// Sumar uno 1 a la variable X
x -= 1;

En este caso estamos restándole 1 a la variable X.


// Sumar 1 a la variable X
y += 1;

En este caso estamos sumándole 1 a la variable Y (no a X, que es la que necesitamos).


// Actualizar todos los elementos de A

for (size_t i=1; i update(A[i]);

En este caso nos estamos olvidando de actualizar al arreglo A en su posición 0, es decir A[0], por lo que se trata de un error semántico.


Veamos un último ejemplo:

int CalcularArea( int ancho, int largo )
{
return ancho + largo;
}

En la función anterior, la sintaxis en C es correcta, pero hay un error semántico. En realidad para calcular el área del rectángulo se debería multiplicar en lugar de sumar. 



 
La web semántica

La web semántica propone superar las limitaciones de la web actual mediante la introducción de descripciones explícitas del significado, la estructura interna y la estructura global de los contenidos y servicios disponibles en la WWW. Frente a la semántica implícita, el crecimiento caótico de recursos, y la ausencia de una organización clara de la web actual, la web semántica aboga por clasificar, dotar de estructura y anotar los recursos con semántica explícita procesable por máquinas. La figura 2 ilustra esta propuesta. Actualmente la web se asemeja a un grafo formado por nodos del mismo tipo, y arcos (hiperenlaces) igualmente indiferenciados. Por ejemplo, no se hace distinción entre la página personal de un profesor y el portal de una tienda on-line, como tampoco se distinguen explícitamente los enlaces a las asignaturas que imparte un profesor de los enlaces a sus publicaciones. Por el contrario en la web semántica cada nodo (recurso) tiene un tipo (profesor, tienda, pintor, libro), y los arcos representan relaciones explícitamente diferenciadas (pintor – obra, profesor – departamento, libro – editorial).




La idea es que la web semántica esté formada (al menos en parte) por una red de nodos tipificados e interconectados mediante clases y relaciones definidas por una ontología compartida por sus distintos autores. Por ejemplo, una vez establecida una ontología sobre cuadros y pintura, un museo virtual puede organizar sus contenidos definiendo instancias de pintores, cuadros, etc., interrelacionándolas y publicándolas en la web semántica. La adopción de ontologías comunes es clave para que todos los que participen de la web semántica, contribuyendo o consumiendo recursos, puedan trabajar de forma autónoma con la garantía de que las piezas encajen. Así por ejemplo varios museos podrían colaborar para dar lugar a un gran meta-museo que integre los contenidos de todos ellos. Un programa que navegue por una red como ésta puede reconocer las distintas unidades de información, obtener datos específicos o razonar sobre relaciones complejas. A partir de aquí sí podemos distinguir entre un cuadro pintado por un artista y un retrato de un artista.

De la web actual a la web semántica

Llegados a este punto una pregunta importante a responder es cómo encaja la web semántica con la actual, es decir a) cómo accederá el usuario a la web semántica, y sobre todo, b) cómo hacer la transición de la web actual a la web semántica. Para que la web semántica pueda realizarse es importante que guarde, al menos al principio, una compatibilidad con la tecnología actual. Es deseable por ejemplo mantener HTML (u otros lenguajes compatibles con los navegadores actuales) como vehículo de comunicación con el usuario. La asociación entre las instancias de la web semántica y el código HTML se puede establecer de distintas maneras (ver figura 3). Una consiste en conservar los documentos actuales, y crear las instancias asociadas anotando su correspondencia con los documentos (imagen izquierda en la figura 3). Esta posibilidad es la más viable cuando se parte de un gran volumen de material antiguo. Otra es generar dinámicamente páginas web a partir de las ontologías y sus instancias (imagen derecha). Esta última opción puede resultar factible cuando los documentos antiguos ya se estaban generando automáticamente a partir, por ejemplo, de una base de datos.

Programación en Lógica 


Como sabemos, existen diversas alternativas para capturar la semántica de los programas lógicos, a saber: Semántica Operacional Semántica Declarativa Semántica de Punto Fijo La Semántica Operacional fue introducida en clases anteriores. En la clase de hoy, abordaremos la Semántica Declarativa. 3 Semántica Declarativa La Semántica Declarativa se basa en la simple idea de interpretar/considerar a un programa lógico como lo que es: un conjunto de fbfs (cláusulas), expresadas en una determinada teoría formal. Bajo esta nueva óptica, se pueden aplicar los familiares conceptos de interpretación y de modelo a programas lógicos.





BIBLIOGRAFIA

http://conceptodefinicion.de/semantica/
https://www.significados.com/semantica/
http://www.alegsa.com.ar/Diccionario/C/611.php
http://www.alegsa.com.ar/Diccionario/C/25059.php
https://geekytheory.com/semantica-coder
http://www.monografias.com/trabajos-pdf/lenguajes-programacion/lenguajes-programacion2.shtml

http://arantxa.ii.uam.es/~castells/publications/castells-uclm03.pdf
http://cs.uns.edu.ar/~grs/Logica/007-2009.Semantica%20Declarativa.Color.pdf




CONCURRENCIA



Concurrencia se refiere al hecho de que los Sistemas Administradores de Base de Datos permiten que muchas transacciones accedan a una misma Base de Datos a la vez. Cuando existen varios usuarios intentando modificar los datos al mismo tiempo, se necesita establecer algún tipo de control para que dichas modificaciones de un usuario no interfieran en las de los otros, a este sistema se le denomina control de concurrencia. 

DEFINICIÓN DE CONCURRENCIA 

En el campo informatico, el termino concurrencia se refiere a la capacidad de los Sistemas de Administración de Base de Datos, de permitir que múltiples procesos sean ejecutados al mismo tiempo, y que tambien puedan interactuar entre sí.
Los procesos concurrentes pueden ser ejecutados realmente de forma simultánea, sólo cuando cada uno es ejecutado en diferentes procesadores. En cambio, la concurrencia es simulada si sólo existe un procesador encargado de ejecutar todos  los procesos, simulando la concurrencia, ocupándose de forma alternada de uno y otro proceso a muy pequeños intervalos de tiempo. De esta manera simula que se están ejecutando a la vez.

Algunos casos de concurrencia, pueden ser:
      La multiprogramación, ya que el tiempo del procesador es compartido dinámicamente por varios procesos.

      Las aplicaciones estructuradas, donde la programación estructurada se implementa como un conjunto de procesos concurrentes.

      También se tiene que la misma estructura recién mencionada es utilizada en el diseño de los sistemas operativos, los cuales se implementan como un conjunto de procesos.

Debido a que los procesos concurrentes en un sistema pueden interactuar entre otros también en ejecución, el número de caminos de ejecución puede ser extremadamente grande, resultando en un comportamiento sumamente complejo. Las dificultades asociadas a la concurrencia han sido pensadas para el desarrollo de lenguajes de programación y conceptos que permitan hacer la concurrencia más manejable.

TRANSACCIONES


El concepto principal es el de transacción. Informalmente, una transacción es la ejecución de ciertas instrucciones que acceden a una base de datos compartida. El objetivo del control de concurrencia y recuperación es asegurar que dichas transacciones se ejecuten atómicamente, es decir:
Cada transacción accede a información compartida sin interferir con otras transacciones, y si una transacción termina normalmente, todos sus efectos son permanentes, en caso contrario no tiene afecto alguno.
Una base de datos está en un estado consistente si obedece todas las restricciones de integridad (significa que cuando un registro en una tabla haga referencia a un registro en otra tabla, el registro correspondientes debe existir) definidas sobre ella.


PROBLEMAS DE CONCURRENCIA

Existen tres formas en las que una transacción, aunque sea correcta por sí misma, puede producir una respuesta incorrecta si alguna otra transacción interfiere con ella en alguna forma.
Consideremos que la transacción que interfiere también puede ser correcta; lo que produce el resultado incorrecto general es el intercalado sin control entre las operaciones de las dos transacciones correctas.

Los tres problemas son:
      El problema de la Actualización Perdida
      El problema de la Dependencia No Confirmada
      El problema del Análisis Inconsistente

Veamos algunos ejemplos para entender cómo es que los programas pueden interferir con otros. Tomaremos como ejemplo las transacciones de las cuentas de un banco, supongamos que tenemos un programa llamado Depositar, el cual deposita dinero en una cuenta.

Procedure Depositar(Cuenta, Monto)
begin
Start;
temp := Leer(Cuentas[Cuenta]);
temp := temp + Monto;
Escribir(Cuentas[Cuenta],temp);
Commit;
end

Supongamos que la cuenta 7 tiene un saldo de $1000 y que el cliente 1 deposita $100 en la cuenta 7 en el mismo instante en el que el cliente 2 deposita $100000 en la cuenta 7. Cada uno de los clientes llama al procedimiento Depositar de tal manera que se crea una transacción para realizar su actualización. La ejecución concurrente de éstos depósitos produce una secuencia de lecturas y escrituras en la base de datos, tales como

Leer1(Cuentas[7])          devuelve el valor de $1000
Leer2(Cuentas[7])          devuelve el valor de $1000
Escribir2(Cuentas[7], $101000)
Commit2
Escribir1(Cuentas[7], $1100)
Commit1

El resultado de esta ejecución es que la Cuenta[7] contiene $1100. A pesar que el depósito del cliente 2 concluyó satisfactoriamente, la interferencia con la ejecución de Depósito del cliente 1 causó que el depósito del cliente 2 se pierda. Este fenónemo de actualización perdida ocurre cuando dos transacciones, mientras intentan modificar un dato, ambas leen el valor antiguo del elemento antes que ninguna haya modificado su valor.

Otro problema del control de concurrencia se ilustra con el siguiente programa, llamado ImprimirSuma, el cual imprime la suma de los saldos de dos cuentas.

Procedure ImprimirSuma(Cuenta1, Cuenta2)
begin
Start;
temp1 := Leer(Cuentas[Cuenta1]);
output(temp1);
temp2 := Leer(Cuentas[Cuenta2]);
output(temp2);
temp1 := temp1 $+$ temp2;
output(temp1);
Commit;
end

Supongamos que las cuentas 8 y 9 tiene un saldo de $200 cada una, y que el cliente 3 imprime los saldos de las cuentas 8 y 9 (utilizando ImprimirSuma) en el mismo instante en el que el cliente 4 transfiere $100 de la cuenta 8 a la cuenta 9 (utilizando Transferir). La ejecución concurrente de estas dos transacciones puede originar la siguiente ejecución de operaciones de la base de datos.

Leer4(Cuentas[8])          devuelve el valor de $200
Escribir4(Cuentas[8], $100)
Leer3 (Cuentas[8])         devuelve el valor de $100
Leer3 (Cuentas[9])         devuelve el valor de $200
Leer4 (Cuentas[9])         devuelve el valor de $200
Escribir4 (Cuentas[9], $300)
Commit4
Commit3

El procedimiento Transferir interfiere con ImprimirSuma en esta ejecución, causando que ImprimirSuma imprima el valor de $300, la cual no es la suma correcta de los saldos de las cuentas 8 y 9. El procedimiento ImprimirSuma no capturó los $100 en tránsito de la cuenta 8 a la cuenta 9. Es importante recalcar que, a pesar de la interferencia, Transferir todavíia asigna los valores correctos en la base de datos.

Este tipo de interferencia se denomina análisis inconsistente que ocurre cuando una transacción lee un dato antes que otra transacción lo actualice y lea otro dato después que la misma transacción lo ha actualizado. Es decir, la extracción (lectura) de los datos sólo percibe algunos de los resultados de la transacción de actualización.

Para conseguir el objetivo del control de concurrencia se utiliza un sincronizador. Un sincronizador es un programa (o una colección de ellos) que controla la ejecución concurrente de las transacciones; su función radica en ordenar las operaciones que forman parte de las transacciones que se requieren ejecutar concurrentemente, de tal manera que la ejecución resultante sea correcta. Usando tres operaciones básicas (ejecución, rechazo y retraso de una operación) el sincronizador puede controlar el orden en el cual las operaciones son ejecutadas por el Administrador de Datos.. Cuando éste recibe una operación de la transacción (mediante el TM), usualmente trata de pasarla al DM inmediatamente, si no produce alguna ejecución incorrecta. Si el sincronizador decide que la ejecución de la operación puede producir resultados incorrectos, puede o retrasarla (en caso de que pueda procesar correctamente la operación más adelante) o rechazarla (si no es posible procesarla en el futuro de tal manera que produzca resultados correctos).

Por ejemplo, retomemos la ejecución concurrente de dos transacciones Depositar, que depositan $100 y $100,000 en la cuenta 7

Leer1 (Cuentas[7])         devuelve el valor de $1000
Leer2 (Cuentas[7])         devuelve el valor de $1000
Escribir2 (Cuentas[7], $101000)
Commit2
Escribir1(Cuentas[7], $1100)
Commit1

Para evitar esta ejecución incorrecta, un sincronizador debe decidir rechazar Escribir1 provocando que la transacción T1 sea cancelada. En este caso, el usuario o el Administrador de Transacciones puede reenviar T1 , la cual ahora se puede ejecutar sin interferir con T2. Como otra alternativa, el sincronizador puede prevenir la ejecución anterior retrasando Leer2 hasta que reciba y procese Escribir1 y de esta forma evitando que se rechace Escribir1 más adelante.

Por lo tanto, un DBMS que controla la ejecución concurrente de sus transacciones tiene una estructura como la siguiente :


CONTROL DE CONCURRENCIA EN BASES DE DATOS

En los ejemplos anteriores, los errores fueron causados por la ejecución intercalada de operaciones de transacciones diferentes. Los ejemplos no muestran todas las posibles formas en las que la ejecución de dos transacciones pueden interferir, pero sí ilustran dos de los problemas que surgen con frecuencia debido a la intercalación. Para evitar estos problemas, se deben controlar las intercalaciones entre transacciones.

El control de transacciones concurrentes en una base de datos brinda un eficiente desempeño del Sistema de Administración de Base de Datos, puesto que permite controlar la ejecución de transacciones que operan en paralelo, accediendo a información compartida y, por lo tanto, interfiriendo potencialmente unas con otras.
El objetivo de los métodos de control de concurrencia es garantizar la no inferencia o la propiedad de aislamiento de transacciones que se ejecutan de manera concurrente. Los distintos objetivos atacan el problema garantizando que las transacciones se ejecuten en un plan que sea serializable, es decir, que el resultado sea equivalente a el resultante de ejecutar un plan en serie.


CONCLUSIÓN


El control de concurrencias permite mejorar la calidad de funcionamiento de de las aplicaciones, incluso hacen posible que se puedan realizar muchos de los sistemas existentes, lo que sin la existencia de estos controles no serian factibles de realizar.

El correcto control de concurrencias permite además mantener información consistente en las bases de datos, así como también evita la aparición de errores en las recuperaciones  y o respaldos que se realicen de una base de datos.

De esta manera, los sistemas de control de concurrencia deben garantizar la consistencia de la información en la Base de Datos.


BIBLIOGRAFIA


http://www.lsi.us.es/docencia/get.php?id=4559

http://es.wikipedia.org/wiki/Bases_de_datos_distribuidas




trabajo1 de Base de Datos

UNIVERSIDAD   NACIONAL DEL ALTIPLANO                     ESCUELA PROFESIONAL:                                             ...