Mostrando entradas con la etiqueta Artículo. Mostrar todas las entradas
Mostrando entradas con la etiqueta Artículo. Mostrar todas las entradas

lunes, 27 de julio de 2015

Una Bonita ardilla


Se que llevo mucho tiempo sin escribir (concretamente un mes) pero ya hablaremos de eso más adelante. Hoy sólo vengo a deciros que esta pequeña ardilla se ha unido a la familia. Como sabéis, eso significa que me han aceptado otro artículo, el 5º, esta vez de primer autor.
Es una triste gracia el efecto que causan mis artículos a mi alrededor, que se les quite toda la importancia y "el regocijo" hasta el punto de, casi, tener que pedir perdón por la publicación de los mismos. Pero qué le vamos a hacer, es la historia de mi vida, estuve toda la carrera teniendo que pedir perdón cada vez que sacaba una buena nota así que ¿por qué iba a ser diferente con los artículos?
En fin, esta vez, como creo que os informé cuando lo enviamos, lo ha cogido Bioessays y es una pequeña revisión de unas nuevas técnicas. Ya os hablaré más de él cuando salga online (que en papel va a salir en Octubre y espero que en la red esté disponible un poco antes).
Ahora a seguir trabajando para "tener que pedir perdón otra vez" lo más pronto posible y que la familia siga creciendo.

miércoles, 8 de abril de 2015

Una firma específica de especie define una distribución periódica de los aminoácidos en las proteínas

Hoy, por fin, salió publicado el cuarto trabajo en el que "he colaborado" y que tantos quebraderos de cabeza me ha traído. Éste es el que más conocéis o, al menos, del que más me habéis oído hablar. Se encuentra disponible, en abierto, en esta dirección:
Os paso a resumir, un poco, de qué va el artículo. Lo que no os voy a poner son imágenes del mismo ya que las podéis consultar en la revista y, en realidad, no se si tengo o no permiso para colocarlas aquí. Si la revista tuviera licencias abiertas lo haría, pero no lo pone así que mejor no arriesgarse.

El ADN de los organismos eucariotas se organiza dentro del núcleo celular y, para caber dentro del mismo, ha de empaquetarse en cromatina en diferentes niveles. El primero de ellos lo constituye la asociación de las proteínas histónicas con la fibra de ADN, constituyendo los nucleosomas. Nosotros estamos interesados en este proceso, en la localización y dinámica de los nucleosomas en la célula.
Es por ello que realizamos mapas de ocupación de nucleosomas. Un ejemplo de éstos lo podéis ver en la figura sumplementaria 1 del artículo. En estos mapas lo que podemos observar el el nivel de ocupación de nucleosomas que tiene cada nucleótido del genoma. Dicho así puede parecer confuso pero lo que vemos en realidad es dónde están localizados los nucleosomas del genoma (picos en el mapa) y dónde faltan, regiones que denominamos NDRs.
Además podemos inferir lo bien o mal posicionados que están los nucleosomas en cada zona concreta. Así, si en una zona hay picos muy juntos y con poca diferencia entre la altura del pico y la altura de los valles que lo flanquean, consideraremos que es una zona mal posicionada (cada célula de la población utilizada para el experimento tiene los nucleosomas en un punto diferente), mientras que si aparecen picos bien definidos, espaciados regularmente a 147 pares de bases o más y con una altura considerable (1.5 o más) consideraremos que están bien posicionados ya que en la mayoría de las células de la población los nucleosomas aparecen en la misma posición.
Habiendo realizado mapas de nucleosomas de muy alta resolución para 4 especies de levaduras diferentes, en las que podíamos encontrar cerca de los 80.000 nucleosomas que deberían empaquetar sus pequeños genomas, nos preguntamos si había algo en la secuencia del ADN empaquetado por los nucleosomas que nos ayudara a averiguar por qué se ponían en esas posiciones concretas.
De esta forma seleccionamos aquellos nucleosomas mejor posicionados de cada uno de los genomas que, por tanto, serán los que presenten una señal más marcada, si es que esa señal existe, y comprobamos si tenían alguna huella que los definiera. En la Figura 1 podéis observar estas huellas. Lo que representan las gráficas es el porcentaje de aparición de cada nucleótido (Adenina, Timina, Guanina y Citosina) en cada una de las posiciones de las miles de secuencias bajo los nucleosomas bien posicionados, calculado nucleotido a nucleotido. Podéis observar cómo no es un perfil plano (como si que es el de regiones seleccionadas al azar), presenta unas zonas de preferencia para la aparición de cada una de las bases. Además estas zonas son diferentes para cada una de las especies estudiadas. Esta diferencia es más visible en las gráficas inferiores de la figura, en las que se representa el porcentaje conjunto de uso de Adenina y Timina para cada especie y se observa perfectamente las diferencias que presentan entre ellas.
Al tener una querencia tan marcada presente tanto en las regiones del genoma que codifican genes (y, por tanto, sometidas a una fuerte selección natural) como en las que no lo hacen (Figura Suplementaria 2), y mantenerla incluso al representar la frecuencia de aparición de dinucleótidos y trinucleótidos (Figuras suplementarias 4 y 5), nos preguntamos si las proteínas se verían afectadas, de alguna forma, en su composición, para respetar este patrón.
En la Figura 2 representamos la forma en la que predecimos que aparecerá cada uno de los aminoácidos en las proteínas a lo largo de los nucleosomas. Para ello simplemente calculamos el perfil que daría agregar la frecuencia de uso de todos los codones (trinucleotidos) que codifican para cada aminoácido. Se puede ver cómo si la predicción fuera cierta, los aminoácidos aparecerían en determinadas posiciones del nucleosoma con más frecuencia que en otras y que, además, estas frecuencias serían diferentes para cada especie.
En la Figura 3 comprobamos como, efectivamente, cuando comparamos la predicción con la frecuencia de aparición real de los aminoácidos en los nucleosomas que empaquetan genes, se ajustan casi a la perfección. Además, en la Figura 4 mostramos cómo no es un efecto que se vaya perdiendo a lo largo de la proteína ya que si sólo seleccionamos nucleosomas del principio, el medio o el final, para representar cómo sería un gen promedio, el efecto se reproduce a lo largo de toda la codificación.
Obviamente ésto son sólo tendencias promedio y es prácticamente imposible (o directamente imposible) ver estos efectos en nucleosomas individuales. Pero bueno, están ahí y algo querrán decir, aunque sea, simplemente, una huella que han dejado los nucleosomas al paso de la evolución.

En esencia esto es lo que quiere decir el artículo, de una manera muy resumida y tratando de simplificarlo lo más posible. Me gusta tratar de hacer tarea de divulgación, aunque sea un poquito, para acercar la ciencia al mundo real y por ello os dejo estos tostones. Espero que, por lo menos, os haya resultado interesante, o sorprendente. Si tenéis cualquier duda, sugerencia o comentario, queréis profundizar más o lo que sea, ya sabéis que tenéis los comentarios.

miércoles, 26 de octubre de 2011

Implementación y Uso actual de las Bases de Datos Orientadas a Objetos

En la actualidad, el uso de las Bases de Datos Orientadas a Objetos no está muy extendido. Bajo nuestra opinión, esto se debe a varios factores:

Ausencia de una implementación completa del estándar desarrollado por el ODMG: Ninguna implementación real se ha ceñido estrictamente al estándar, debido a su complejidad. Por lo tanto no hay un referente a seguir y no se soportan cosas mejores que las bases de datos relacionales, en conjunto, aunque si en partes específicas.

  • SQL: La evolución de este lenguaje de consulta es uno de los grandes “lastres” que ralentizan la evolución e implantación de los sistemas orientados a objetos. Las versiones de 1999 y 2003 de este estándar ya definen una forma de acceso similar a la orientada a objetos, así como un mecanismo de definición, extensión y herencia de tipos de datos, por lo tanto los sistemas Orientados a Objetos, en muchos casos carecen de sentido.

  • Frameworks de trabajo con bases de datos: Este punto está muy relacionado con el anterior. En poco tiempo han surgido una inmensa cantidad de frameworks para lenguajes de programación orientados a objetos, que hacen que el trabajo con la base de datos sea transparente y aparentemente orientado a objetos debido a que mapean los resultados de las consultas en objetos directamente. Esto, unido a que utilizan una serie de patrones y buenas prácticas (DAO, factorías, variaciones protegidas...) han extendido mucho su uso y evitado la necesidad de las nuevas bases de datos.

  • XML: Este lenguaje estándar de marcas también se puede considerar una causa del lento avance de la orientación a objetos en bases de datos ya que se ha mostrado como una muy eficiente forma de almacenamiento, de acceso rápido y trabajo sencillo.

  • Baja complejidad de la mayoría de las aplicaciones: Las aplicaciones que se desarrollan en la actualidad son, en general, de una complejidad baja, basadas en el mantenimiento y gestión de entidades sencillas y fácilmente modelables con los sistemas relacionales. Esto hace que la orientación a objetos sólo avance y se utilice en ámbitos muy concretos debido a la pronunciada curva de aprendizaje que tienen que, en la mayoría de los casos no merece la pena para una aplicación web sencilla o una aplicación de escritorio de la que ya existen infinidad de modelos de ejemplo.

  • Detractores reconocidos: Hay muchos eruditos de las bases de datos que son detractores de las bases de datos orientadas a objetos por opinar que el modelo relacional es capaz de resolver los problemas que se le planteen ya que es muy potente además de contar con una base matemática, de la que el modelo objeto carece. Un ejemplo de esta afirmación son las opiniones que da C. J. Date sobre las bases de datos orientadas a objetos ya que opina que su única aportación útil es la capacidad de definir tipos de datos de muy alta complejidad y que eso ya lo da la buena definición de dominios del modelo relacional, por lo tanto, el modelo relacional es tan poderoso como el orientado a objetos.


Todas estas razones causan el lento avance de las bases de datos orientadas a objetos. Pero deja una evidencia clara de que hay un abismo que hay que salvar debido a que el resto de ramas de la informática cada vez son más semánticos, más basados en clases, objetos, herencia y otros principios. No podemos olvidarnos de que, en los orígenes del modelo relacional, cuando aún no existían implementaciones eficientes, muy pocos creían que ese, conceptualmente, muy poderoso modelo, llegaría a sustituir a los modelos jerárquico y de red. Se tardaron muchos años en cambiar al modelo relacional y se afianzó.

El modelo objeto aún es muy joven, se basa en ideas avanzadas y diferentes de las tradicionales. Es un modelo difícil de comprender en su totalidad y “cambiar el chip” para pensar orientado a objetos.


En cualquier caso, se ha demostrado que el modelo objeto es muy poderoso y facilita mucho la tarea de programadores y diseñadores además de capturar mucha más semántica del mundo real y por lo tanto buscamos acercarnos a él.

Se ha tratado este acercamiento en varios frentes, sin acabar del todo con el modelo relacional. Un ejemplo de esto son los, ya citados, frameworks de acceso a datos para los diferentes lenguajes que “atacan” el problema en el programa. O las últimas versiones de SQL 3 que permite unas consultas y definiciones de datos muy cercanas al modelo objeto, con lo que se trata de acercar en las consultas.

Un último lugar dónde se puede producir este amoldamiento del modelo relacional al objeto es en el propio sistema gestor de bases de datos. Así surgen los modelos Objeto/Relacionales. Estos sistemas emulan el funcionamiento de un sistema gestor de bases de datos orientado a objetos pero, internamente, trabajan con un modelo relacional. En ellos se ha definido una capa intermedia, a la que acceden las aplicaciones, que será la que permita un acceso directamente orientado a objetos y se encargará de traducir las peticiones a consultas, recuperar los datos y transformarlos en objetos, de manera parecida a cómo lo hacen los frameworks, pero directamente imbuido en el gestor.

Un ejemplo de estos sistemas sería PostGreSQL (considerado a veces como un sistema gestor orientado a objetos completamente).

Como sistemas Objeto/Relacionales también cabría definir los sistemas orientados a objetos, que suplen las carencias de la ausencia de implementación estándar de OQL permitiendo el uso de SQL en sus consultas pero apenas se encuentran ejemplos de este caso.


Finalmente, hablaremos un poco de las implementaciones que existen de sistemas orientados a objetos. Un primer modelo que se trata, según algunos autores, de esta forma serían los modelos objeto relacionales de los que ya hemos hablado.

Otra posible implementación existente es la de sistemas gestores de bases de datos orientados a objetos. Algunos ejemplos de estos sistemas son: Caché, Zope o incluso una implementación de Oracle orientada a objetos. Estos gestores buscan cierta independencia del lenguaje de programación utilizado para la aplicación que accederá a ellas, siempre con limitaciones debido a la diferencia entre unos lenguajes y otros y que el modelo objeto busca, precisamente, ser más eficiente con los lenguajes debido a su cercanía.

La 3º forma implementada de estas bases de datos es como extensiones directas de lenguajes de programación orientados a objetos. Esto, por supuesto, crea una dependencia total del lenguaje de programación pero, por a favor tiene que es muchísimo más eficiente y transparente el acceso y recuperación de objetos, así como la creación o eliminación de los mismos. En un principio fueron las implementaciones más utilizadas ya que eran relativamente sencillas de conseguir, pero muchas se quedaron por el camino. Hoy en día podemos encontrar algunos ejemplos como ObjectStore para C++ o JDO (Java Database Objects) para java.

Estas extensiones de los lenguajes se diferenciaban unas de otras, dentro de un mismo lenguaje, normalmente en la forma en que manejaban la persistencia de objetos, así por ejemplo ObjectStore maneja punteros persistentes almacenados en punteros normales. Estos punteros persistentes apuntaban a los objetos almacenados en disco y al cargarlos en memoria se sustituían por punteros normales que se transformaban en punteros persistentes al devolver a memoria los objetos. En cambio, la extinta norma ODMG para C++ definía la clase de plantillas d_Ref< T > para manejar punteros persistentes a la clase T.


Como hemos visto, hay muchas implementaciones y acercamientos diferentes a la orientación a objetos lo que nos demuestra que, lentamente, se va tendiendo a ello. Pero aún queda un largo camino por recorrer para ver si se convierten en una completa alternativa al modelo relacional o verdaderamente el modelo relacional es lo suficientemente potente como para resistir ese avance.

Lo que está claro es que el modelo relacional no se adapta del todo bien a las novedosas aplicaciones de computación en nube, computación grid, complejos sistemas de cálculo, necesidades multimedia o aplicaciones de diseño asistido por ordenador. Aplicaciones para las que el modelo objeto está demostrando su eficiencia.


Bibliografía

martes, 25 de octubre de 2011

Bases de Datos Relacionales vs Orientadas a Objetos

Como hemos podido observar en la definición de ambos paradigmas de gestión e implementación de bases de datos, hay grandes diferencias entre el modelo más utilizado en la actualidad, el Modelo Relacional y el paradigma más utilizado en la informática en los últimos tiempos, el Modelo Objeto. En este apartado vamos a tratar de dar una visión global de ambos sistemas presentando las diferencias más importantes que se observan tratando de encontrar una explicación al hecho de que aún se siga utilizando en las bases de datos el modelo relacional y si, es mejor que el orientado a objetos, ¿por qué se sigue desarrollando este 2º modelo?

Una principal diferencia la vemos ya al comparar la definición de las unidades básicas de información de cada caso. El modelo relacional define las tuplas como “instancias específicas de una entidad” con un identificador único y las propiedades de esa entidad. En cambio, en el caso de las bases de datos orientadas a objetos, se almacenan los objetos que se definen como “un objeto está modelando una situación o entidad del mundo real al tener una identificación única, propiedades específicas a sí misma, y la habilidad de trabajar en conjunto con objetos tanto de la misma o distinta especificación”. Las tuplas del modelo relacional carecen de esa habilidad de trabajar con otras tuplas ya que carecen de comportamiento. Además, el modelo objeto es capaz de representar situaciones del mundo real, en cambio el modelo relacional sólo trabaja con entidades, por lo tanto, si se quisiera modelar situaciones habría que adaptarlas, convirtiéndolas en entidades perdiendo por el camino parte de la información, o creando un modelo extremadamente complejo.

La identificación única de las entidades/objetos también difiere en ambos casos. El modelo relacional utiliza el concepto de Clave Primaria para identificar a sus entidades de una manera única. Esta clave es un valor que puede introducir y cambiar el usuario del sistema gestor con la única restricción de que no se repita con ninguna otra clave primaria que contenga la tabla en ese momento, aunque también puede asignarla el propio sistema gestor. En cambio, el modelo objeto define el OID (Object Identity) que proveerá el sistema y le otorgará al objeto su identidad única. No puede ser cambiado ni introducido por el usuario. Al desaparecer el objeto, el sistema elimina ese OID pero no vuelve a asignárselo nunca a ningún objeto nuevo.

Los modelos relacionales tradicionales sólo permitían tipos de datos simples ofrecidos por SQL y en última instancia por el sistema gestor. Esto hace bastante costoso trabajar con atributos multivaluados pudiendo hacerse este tratamiento de 2 formas, o bien saltándose la 1FN o separando esos atributos en más tablas lo que, sin duda, carga mucho el sistema y convierte las consultas en algo muy complejo. El modelo objeto, por definición provee de un sistema de tipos análogo al lenguaje de programación con el que se utiliza. De esta forma permite definir nuevas clases así como utilizar la herencia para extender las ya creadas. Así se consigue aplicar toda la potencia de la Orientación a Objetos en las bases de datos.

Los modelos relacionales utilizan el lenguaje estándar de consultas SQL, que es declarativo lo que hace que las consultas no vayan a la forma de encontrar el dato sino que sea el sistema gestor el que realice esta tarea. Además, el hecho de ser estándar permite que las aplicaciones lo utilicen sin importar el lenguaje de programación en el que están escritas. Por contra carga mucho el procesamiento y hace que haya que tratar los datos para convertirlos a objetos en el lenguaje de programación utilizado.

El modelo objeto difiere en este sentido bastante. Utiliza varios sistemas diferentes dependiendo de la implementación que se esté utilizando. Hay sistemas, directamente imbuidos en el lenguaje de programación que hacen esta recuperación de los datos transparente al programador, trabajando con los objetos persistentes como si fueran objetos de memoria normales. Esta visión es muy eficiente e intuitiva pero al no tener un lenguaje específico para trabajar con las consultas no controla de forma alguna este acceso siendo vulnerable a errores del programador.

Otra forma de implementar las consultas ha sido el estándar OQL (Object Query Language) definido por el Object Data Management Group (ODMG) que busca ser un estándar declarativo para consultas a bases de datos orientadas a objetos. Su uso sería análogo al de SQL pero, debido a su complejidad aún no hay ninguna implementación completa del estándar, sólo se han llegado a realizar subconjuntos como JDOQL y EJB QL.

La forma de trabajar con los datos persistentes en el modelo relacional es seleccionando los datos que queremos que persistan en el tiempo y grabándolos de manera explicita mediante consultas de alta/modificación de SQL, previa transformación de los datos. Los objetos trabajan de otra forma. Dependiendo de la implementación particular puede ser que haya clases persistentes, cuyos objetos siempre se almacenen en disco, marcar especiales para los objetos que permitan discriminar cuáles se almacenarán, y otras técnicas.

Esta es una de las partes más complejas de implementar de un sistema gestor de bases de datos orientados a objetos ya que se busca que este paso a datos persistentes sea lo más transparente posible para el programador de aplicaciones orientadas a objetos.

Obviamente el modelo objeto es una forma de centrar el desarrollo y explotación de un sistema en la semántica del dato. En el modelo relacional había que adaptar la semántica a las capacidades del sistema de una manera bastante estricta. En cambio, cuando trabajamos con objetos podemos aplicar la semántica propia del problema de una manera mucho más natural, ya que este paradigma se basa en modelar el mundo real.

Las relaciones entre entidades des modelo es una característica muy importante que cualquier base de datos moderna debe poseer. La orientación a objetos facilita mucho esta tarea gracias a los OID y a la herencia. Las relaciones de herencia, para lo cual se permite la herencia entre clases de la misma forma que en los lenguajes de programación, heredando el hijo todos los atributos y métodos que hubiera definido su padre. El resto de relaciones que hubiera que representar se haría mediante los OID que identifican univocamente a un objeto.

En las bases de datos relaciones, las relaciones de herencia se pueden simular mediante complejos sistemas que obligaban al programador a aplicar una serie de mecanismos que garantizaran la integridad. Y el resto de relaciones, por norma general crean una serie de tablas intermedias que complica las sentencias SQL necesarias para recuperar los datos.

El acceso a los datos, en la gran mayoría de los sistemas gestores de bases de datos orientados a objetos, se realiza de una forma navegacional, al estilo de los modelos jerárquico y red lo cual obliga al usuario a conocer la ruta de acceso a los objetos. Esto, además de complicar el uso para usuarios no programadores, unido a la necesidad de requisitos indirectos de hardware y software debido al uso de objetos ralentiza las transacciones respecto al modelo relacional, lo que lo convierte en muchos casos en algo inaceptable.

Las bases de datos orientadas a objetos permiten el almacenamiento de archivos multimedia ya que un objeto puede ser cualquier cosa. Las bases de datos relacionales no permiten esto y hay que simularlo guardando la dirección del archivo, con lo que no se garantiza que el archivo exista, o almacenando en un campo binario de longitud indeterminada el archivo completo sin capturar la propia base de datos de que tipo de archivo se trata.

Los sistemas gestores de bases de datos orientados a objetos proporcionan un importante control de versiones sobre los objetos almacenados, característica que junto a la capacidad de almacenar objetos multimedia antes citada, hace a estos sistemas muy válidos en campos como el CAD, aplicaciones científicas y otras aplicaciones igualmente específicas.

Bibliografía


Autor: Enrique Vázquez de Luis