Modelamiento Logico de una base de datos


Los modelos  se  utilizan  en  todo  tipo  de  ciencias.  Su  finalidad  es  la  de  simbolizar  una
parte del mundo real de forma que sea m谩s f谩cilmente manipulable. En definitiva es un
esquema mental (conceptual) en el que se intentan reproducir las caracter铆sticas de una
realidad espec铆fica.
En el caso de los modelos de datos, lo que intentan reproducir es una informaci贸n
real que deseamos almacenar en un sistema inform谩tico.
Se denomina  esquema  a  una  descripci贸n  espec铆fica  en  t茅rminos  de  un  modelo  de
datos. El conjunto de datos representados por el esquema forma la base de datos.




clasificaci贸n de los modelos de datos
Esquema
Conceptual
Mundo
real Esquema
can贸nico
Esquema
interno BD
F铆sical
Modelo
Conceptual
Modelo
L贸gico
Modelo
Interno
DBMS
Ilustraci贸n 5, Clasificaci贸n de los modelos de datos
En la ilustraci贸n anterior aparecen los distintos esquemas que llevan desde el mundo real
a la base de datos f铆sica. Como se ve aparecen varios esquemas intermedios. Los que est谩n
m谩s a la izquierda se alejan m谩s de las caracter铆sticas f铆sicas. Los elementos de ese
esquema son:
€ Mundo real. Contiene la informaci贸n tal cual la percibimos como seres humanos.
Es el punto de partida
€ Esquema conceptual. Representa el modelo de datos de forma independiente del
DBMS que se utilizar谩.
€ Esquema can贸nico (o de base de datos). Representa los datos en un formato
m谩s cercano al del ordenador
€ Esquema interno. Representa los datos seg煤n el modelo concreto de un sistema
gestor de bases de datos (por ejemplo Oracle)
€ Base de datos f铆sica. Los datos tal cual son almacenados en disco. Dise帽o conceptual de bases de datos
modelado de datos
<16>
Para conseguir estos esquemas se utilizan modelos de datos. El paso entre cada esquema
se sigue con unas directrices concretas. Estas directrices permiten adaptar un esquema
hacia otro.
Los dos modelos fundamentales de datos son el conceptual y el l贸gico. Ambos son
conceptuales en el sentido de que convierten par谩metros del mundo real en abstracciones
que permiten entender los datos sin tener en cuenta la f铆sica de los mismos.
diferencias entre el modelo l贸gico y el conceptual
€ El  modelo  conceptual  es  independiente del DBMS que se  vaya a utilizar. El l贸gico
depende de un tipo de SGBD en particular
€ El modelo l贸gico es m谩s cercano al ordenador
€ Es m谩s cercano al usuario el modelo conceptual, el l贸gico forma el paso entre el
inform谩tico y el sistema.
Algunos ejemplos de modelos conceptuales son:
€ Modelo E/R
€ Modelo RM/T
€ Modelos sem谩ntico
Ejemplos de modelos l贸gicos son:
€ Modelo relacional
€ Codasyl
€ Jer谩rquic



1- ETAPAS DE UNA METODOLOG脥A DE DISE脩O
En los 煤ltimos a帽os venimos asistiendo, gracias al avance tecnol贸gico, a una gran difusi贸n de los SGBDR, cuyos productos se soportan en cualquier plataforma, desde los superordenadores a los ordenadores personales. Sin embargo, y a pesar del esfuerzo realizado por numerosos investigadores y estudiosos del tema, la concepci贸n de una BD sigue siendo una tarea larga y costosa.
Estas dificultades inherentes al dise帽o de una base de datos han de afrontarse con procedimientos ordenados y met贸dicos en el marco de una metodolog铆a de dise帽o de bases de datos.
En el proceso de dise帽o de una base de datos hemos de distinguir tres grandes fases:
-          Dise帽o conceptual: cuyo objetivo es obtener una buena representaci贸n de los recursos de informaci贸n de la empresa, con independencia de usuarios o aplicaciones en particular, y fuera de consideraciones sobre eficiencia del ordenador.
-          Dise帽o l贸gico: cuyo objetivo es transformar el esquema conceptual obtenido en la etapa anterior, adapt谩ndolo al modelo de datos en el que se apoya el SGBD que se va a utilizar. Nosotros nos vamos a referir al modelo relacional, pero de forma an谩loga se podr铆a adaptar esta etapa de dise帽o l贸gico a otros modelos de datos, como el Jer谩rquico o el Codasyl.
-          Dise帽o f铆sico: cuyo objetivo es conseguir una instrumentaci贸n, lo m谩s eficiente posible, del esquema l贸gico.
Cuando estudiamos el papel de los modelos de datos en el dise帽o de las bases de datos, ya se帽alamos las ventajas de obtener, en una primera fase del dise帽o, un esquema conceptual independiente de las caracter铆sticas de los modelos convencionales, como el modelo relacional, y que recogiese la sem谩ntica del mundo real.
Un problema que se suele presentar en el dise帽o de bases de datos es la comunicaci贸n entre el dise帽ador y el usuario; este 煤ltimo conoce bien el dominio de aplicaci贸n, lo que en general no ocurre con el dise帽ador, pero muchas veces no sabe expresarlo de forma correcta y, menos aun, precisa. La utilizaci贸n del modelo E/R, en una primera fase del dise帽o, facilita el dialogo entre el inform谩tico, conocedor de las t茅cnicas de estructuraci贸n de los datos pero ajeno al dominio de la aplicaci贸n, y el usuario, que suele conocer bien su mundo real pero que no es capaz de describirlo bajo las premisas que impone un modelo convencional.
El modelo E/R sencillo, pero a la vez suficientemente potente, permite entablar un di谩logo entre el usuario y el dise帽ador que facilitara que se despejen dudas y aclaren aspectos del universo del discurso a modelar. Se facilita as铆 la colaboraci贸n de los especialistas con los usuarios, de manera que estos 煤ltimos pueden participar activamente, e incluso ser protagonistas, en el dise帽o.
Podemos representar esquem谩ticamente las dos primeras fases (dise帽o conceptual y dise帽o l贸gico) de la metodolog铆a, en este ejemplo, en el cual aparece el proceso de dise帽o de una biblioteca; el dise帽ador observa el mundo real bajo unos ciertos objetivos (universo del discurso) y, apoy谩ndose en una primera etapa en el modelo E/R, llega a un esquema conceptual, al cual se le aplicara un conjunto de reglas a fin de transformarlo en una estructura relacional (conjunto de tablas).
2- TRANSFORMACI脫N DEL ESQUEMA CONCEPTUAL AL RELACIONAL
El paso de un esquema en el modelo E/R al relacional est谩 basado en los tres principios siguientes:
-          Todo tipo de entidad se convierte en una relaci贸n.
-          Todo tipo de interrelaci贸n N:M se transforma en una relaci贸n.
-          Todo tipo de interrelaci贸n 1:N se traduce en el fen贸meno de propagaci贸n de clave o bien se crea una nueva relaci贸n.
A primera vista se puede observar que en el paso del modelo E/R al relacional pierde sem谩ntica, puesto que tanto las entidades como las interrelaciones se transforman en relaciones, de forma que ya no es posible distinguir entre unas y otras (en el modelo relacional) solo existe la relaci贸n para presentar ambos tipos de objetos).
Tambi茅n se constata que la perdida de sem谩ntica es a煤n mayor en el caso de la propagaci贸n de clave, donde desaparece incluso el nombre de la interrelaci贸n. Es preciso destacar que la perdida de sem谩ntica no implica, necesariamente, un peligro para la integridad de la base de datos, ya que, si la transformaci贸n se ha realizado correctamente, se habr谩n definido las necesarias restricciones (muy en especial las claves ajenas con sus opciones) que aseguraran la consistencia de los datos.
En el ejemplo, puede observarse que las tres entidades EDITORIAL, LIBRO y AUTOR se transforman en otras tantas relaciones. La interrelaci贸n N:M Escribe da lugar a una nueva relaci贸n ESCRIBE cuya clave primaria es la concatenaci贸n de los atributos identificadores de las entidades que participan en ella (nombre de AUTOR y c贸digo de LIBRO), siendo adem谩s estos claves ajenas de ESCRIBE que referencian a las relaciones AUTOR yLIBRO, respectivamente. La interrelaci贸n 1:N edita se transforma en la relaci贸n LIBRO la clave de la relaci贸nEDITORIAL (  a la que llamamos Editorial); atributo que ser谩 clave ajena de la relaci贸n LIBRO referenciando aEDITORIAL.
Las opciones de clave ajena en la transformaci贸n del ME/R al relacional
Si bien, insistimos, el paso del ME/R al relacional implica una cierta p茅rdida de sem谩ntica, se debe procurar que est谩 perdida sea lo menor posible, adem谩s de asegurar al m谩ximo la consistencia de los datos, es decir, la integridad de la base de datos en las operaciones de actualizaci贸n. Las opciones de clave ajena, cuando se borran o modifican ocurrencias de la relaci贸n referenciada (“NO ACTION”,”SET NULL”,”CASCADE, y “SET DEFAULT”), nos pueden ayudar a cumplir este objetivo de mantener la integridad. Seguidamente analizaremos las posibles opciones de borrado y modificaci贸n asociada a las claves ajenas en los casos de propagaci贸n de clave y de creaci贸n de una nueva relaci贸n.

Read more »

An谩lisis y dise帽o orientado a objetos



An谩lisis y dise帽o orientado a objetos (ADOO) es un enfoque de la ingenier铆a de software que modela un sistema como un grupo de objetos que interact煤an entre s铆. Este enfoque representa un dominio en t茅rminos de conceptos compuestos por verbos y sustantivos, clasificados de acuerdo a su dependencia funcional.
En este m茅todo de an谩lisis y dise帽o se crea un conjunto de modelos utilizando una notaci贸n acordada como, por ejemplo, el lenguaje unificado de modelado (UML). ADOO aplica t茅cnicas de modelado de objetos para analizar los requerimientos para un contexto - por ejemplo, un sistema de negocio, un conjunto de m贸dulos de software - y para dise帽ar una soluci贸n para mejorar los procesos involucrados. No est谩 restringido al dise帽o de programas de computadora, sino que cubre sistemas enteros de distinto tipo. Las metodolog铆as de an谩lisis y dise帽o m谩s modernas son casos de uso guiados a trav茅s de requerimientos, dise帽o, implementaci贸n, pruebas, y despliegue.

UML es un lenguaje gr谩fico para construir modelos, no gu铆a al desarrollador en la forma de realizar buenos an谩lisis y dise帽os, ni le indica cual proceso de desarrollo adoptar. La idea de esta serie de art铆culos va m谩s all谩 de aprender la notaci贸n UML utilizada para dise帽ar y construir sistemas software orientados a objetos de buena calidad independiente del proceso de desarrollo utilizado. Guiar谩 al desarrollador principiante como yo a realizar buenos an谩lisis y dise帽os orientados a objetos utilizando patrones de dise帽o.
El caso de estudio que vamos a tratar es el simulador de la cantera que he dise帽ado para las pr谩cticas de la asignatura Ingenier铆a del software de la universidad. Voy a intentar realizarlo todo m谩s o menos siguiendo la tem谩tica del libro UML y patrones de Craig Larman. De esta forma me sirve a m铆 mismo para mejorar la implementaci贸n y el dise帽o que realiz茅 y afirmar todo lo aprendido. Como soy un novato principiante en este mundillo, si alg煤n lector sigue mis art铆culos y encuentra alguna burrada ser铆a recomendable que me avisara para rectificarlo. De todas formas este curso va a seguir una bibliograf铆a recomendada as铆 que me voy a basar en principios reales y no inventar conceptos nuevos.
En este curso, aprenderemos a crear modelos conceptuales del dominio del problema al que nos enfrentamos y a representarlos mediante diagramas de clases en UML.  Aprenderemos a extraer los casos de usos funcionales a partir de la especificaci贸n de requerimientos del sistema que vamos a desarrollar y a representarlos mediante diagramas de casos de uso en UML. Aprenderemos a realizar diagramas de secuencia, de colaboraci贸n y de estado en UML. Paralelamente a este curso voy a intentar redactar otros art铆culos dedicados exclusivamente a los patrones de dise帽o, esta vez sin seguir un caso de uso, sino a partir de ejemplos donde podamos aplicarlos.
Este proyecto puede durar mucho tiempo, debido a que paralelamente estoy redactando otros cursillos de PHP, y MySQL que incorporar al blog. Adem谩s en unas semanas empiezo a trabajar dise帽ando una aplicaci贸n de gesti贸n inmobiliaria, as铆 que no voy a tener mucho tiempo libre.
En breves os explicar茅 el caso de estudio y realizaremos una especificaci贸n de funcionalidades que incorporar a nuestro sistema software. La implementaci贸n la desarrollaremos en el lenguaje C#. Para este curso voy a presuponer que se tienen ciertos conocimientos de la metodolog铆a orientada a objetos, as铆 como del lenguaje C# y de construcci贸n de aplicaciones mediante formularios windows. No va a tener acceso a base de datos para simplificar un poco el desarrollo. Ya explicar茅 el sistema que realizaremos para cargar y guardar datos.

Read more »

Arquitectura en Capas

Por qu茅 es tan importante la programaci贸n por capas?
Visual Basic .NET es un lenguaje POO (es decir, Programaci贸n Orientada a Objetos) desde su versi贸n 2002, que fue el salto definitivo del antiguo y arcaico Visual Basic 6.
Este salto supone muchas ventajas, ya que permite la creaci贸n de clases (como indica su definici贸n, permiten la Herencia, etc… ya lo explicar茅 m谩s en profundidad en otra ocasi贸n)
Y es aqu铆 donde intervienen las capas, ya que las capas pueden ser conjuntos de clases y, en caso de ser un equipo de desarrollo de software, cada grupo se podr铆a ocupar de programar una capa en concreto y as铆 optimizar el proceso de mejor铆a en los programas, ya que se tardar谩 menos tiempo en lanzar una nueva versi贸n.
Es decir, puedes mejorar la capa de datos (mejor铆a en la gesti贸n de consultas, etc….) sin que la capa de negocio se vea afectada, por ejemplo. Programar un poco por m贸dulos.
Adem谩s, las capas no hacen falta que est茅n todas en el mismo ordenador, sino que en caso de tener una red LAN, cada capa puede estar en un PC distinto tal y como se puede apreciar en la siguiente imagen:
  • Capa de presentaci贸n
  • Capa de negocio
  • Capa de datos

  • La capa de la  Presentaci贸n
    Esta capa re煤ne todos los aspectos del software que tiene que ver con las interfaces y la interacci贸n con los diferentes tipos de usuarios humanos Estos aspectos t铆picamente incluyen el manejo y aspecto de las ventanas, el formato de los reportes, men煤es,  gr谩ficos y elementos multimedia en general.
     
  • La capa del Dominio de la Aplicaci贸n
    Esta capa re煤ne todos los aspectos del software que tienen que automatizan o apoyan los procesos de negocio que llevan a cabo los usuarios. Estos aspectos t铆picamente incluyen las tareas que forman parte de los procesos, las reglas y restricciones que aplican. Esta capa tambi茅n recibe el nombre de la capa de la L贸gica de la Aplicaci贸n.
     
  • La capa del Repositorio
    Esta capa re煤ne todos los aspectos del software que tienen que ver con el manejo de los datos persistentes, por lo que tambi茅n se le denomina la capa de las Bases de Datos).
RPM toca muy superficialmente los problemas asociados al desarrollo de una capa de Presentaci贸n. Menciona que es conveniente usar un enfoque de prototipaje y que pueden ser 煤tiles los casos reales de uso; sin embargo no proporciona m茅todos, principios o lineamientos metodol贸gicos que apoyen el desarrollo de una met谩fora de dise帽o para la interfaz, el dise帽o l贸gico de la presentaci贸n o su dise帽o f铆sico.

RPM tampoco proporciona muchas luces sobre el desarrollo de la capa del Repositorio y tiende a subestimar su complejidad.

Una vez elaborado el Modelo de Uso, RPM recomiendo seguir con actividades de an谩lisis de requerimientos. Para ello se elabora un Modelo Conceptual, en el cual se busca identificar los conceptos importantes del dominio de la aplicaci贸n, abstrayendo todo lo que puedan ser mecanismos o conceptos propios de un dise帽o o de una implementaci贸n. As铆, en el ejemplo de un Sistema de Punto de Venta, nos interesan los conceptos como Venta, Recibo, Efectivo, Cheque, Impuesto que tienen que ver con los procesos de negocio que se est谩n apoyando y no nos interesan conceptos como Men煤, Ventana, Tabla relacional, Consulta a Base de Datos que tienen que ver con c贸mo mejor implementar los conceptos del negocio. La mayor铆a de estos elementos de un Modelo Conceptual terminan agrup谩ndose naturalmente en la capa del Dominio de la Aplicaci贸n.

Este enfoque de RPM termina por sesgar la metodolog铆a hacia el desarrollo de la capa del Dominio de la Aplicaci贸n, y en la pr谩ctica, tiende a hacer presuponer que el desarrollo de las otras capas se puede ajustar al dise帽o de la capa del Dominio de Aplicaci贸n, lo cual no es siempre el caso, incluso dentro del 谩mbito de los Sistemas de Informaci贸n.

Antes de estudiar el Modelo Conceptual, nos conviene aclarar qu茅 es una arquitectura de capas, su importancia e implicaciones, para tener mayor claridad en los riesgos que corremos al adoptar una metodolog铆a como RPM.
 

Arquitectura de Capas

  • Preguntar qu茅 conocen por arquitectura de capas (en Sistemas de Operaci贸n, Redes de Computadores...).
§  Nos limitaremos a manejar la noci贸n de arquitectura como una forma de estructurar los elementos de un software.
§  En toda arquitectura de capa los elementos agrupados en una misma capa pueden comunicarse entre si; pero existen variantes en cuanto a las comunicaciones permitidas entre elementos de capas diferentes:
  1. Arquitectura top-down de capas:
    Los elementos de una capa i+1 pueden enviar solicitudes de servicio a elementos de la capa inferior i. T铆picamente se produce una cascada de solicitudes, es decir para satisfacer una solicitud a una capa i+2, 茅sta requiere enviar varias solicitudes a la capa i+1; cada una de estas solicitudes a la capa i+1 genera a su vez un conjunto de solicitudes a la capa i y as铆 sucesivamente.  Una arquitectura top-down es laxa (o no estricta) si los elementos de una capa i+1 pueden enviar solicitudes de servicio directamente a un elemento de cualquiera de las i capas inferiores.
     
  2. Arquitectura bottom-up de capas:
    Cada elemento de una capa i puede notificar a elementos de la  capa superior i+1 de que ha ocurrido alg煤n evento de inter茅s (ej. manejadores de dispositivos). La capa i+1 puede juntar varios eventos antes de notificar a su vez an elemento de la capa i+2. Una arquitectura bottom-up tambien puede ser no estricta si el elemento de la capa i puede notificar a cualquier elemento de cualquier capa superior a la capa i.
     
  3. Arquitectura bidireccional de capas
    En su forma m谩s com煤n involucra dos pilas de N capas  que se comunican entre si. El ejemplo m谩s conocido es el de los protocolos en Redes de Computadores.
Al implementar una arquitectura top-down  de capas, se deben tomar en cuenta los siguientes factores:
  1. ¿Cu谩l es el criterio de abstracci贸n para agrupar servicios/clases en una capa?
    Mencionar el criterio Presentaci贸n-Dominio de Aplicaci贸n-Repositorio de Sistemas de Informaci贸n.
     
  2. Determinar el n煤mero de capas
    En t茅rminos simplistas, a m谩s capas m谩s flexibilidad pero menor desempe帽o. [Discutir]
     
  3. T铆picamente las capas m谩s internas ofrecen menos servicios.
    Esto ayuda la reutilizaci贸n de capas ("pir谩mide invertida de reuso").
     
  4. El grado de encapsulamiento de las capas.
    A mayor encapsulamiento, menor dependencia externa sobre la estructura de una capa.
     
  5. Estructura interna de cada capa.
     
  6. ¿Cu谩nta informaci贸n pasar de una capa a otra?
    Tomemos el caso de la arquitectura top-down. Es muy posible que, de acuerdo con el tipo de servicio solicitado, la capa inferior requiera una cantidad de informaci贸n variable. En un modelo puro "empujado" (push), la capa superior est谩 obligada a enviarle toda la informaci贸n que pueda llegar a hacerle falta a la capa inferior en la solicitud.
Esto no siempre es posible (piense por ejemplo en una solicitud de servicio a una base de datos que no logra completarse por estar fuera de l铆nea. ¿Qu茅 se hace: reintentar, abandonar, usar una fuente alterna?).
En el modelo contrario, "halado" (pull o por demanda), la capa inferior solicita mayor informaci贸n s贸lo si le hace falta --¿pero de qui茅n la pida? El modelo de solicitudes top-down presupone un invocador an贸nimo y un invocado conocido.
La soluci贸n la proporciona el patr贸n Editorial-Suscriptor (Publish-Subscribe) que encapsula la idea del callback.  Este patr贸n de dise帽o lo estudiaremos m谩s adelante.
 
  1. Dise帽e la estrategia de manejo de errores. Este es un aspecto que es frecuentemente obviado, aunque tiene impacto fuerte tanto en el tiempo de procesamiento como en el esfuerzo de programaci贸n. T铆picamente se recomienda manejar el error en el nivel que lo descubri贸, si esto no es posible, dejar que lo resuelva la capa m谩s arriba, pero generalmente abstrayendo el tipo de error para que sea comprensible en t茅rmino de los servicios de la capa superior.
Todo patr贸n tiene ventajas  y desventajas: en el caso de la arquitectura de capas ya las hemos mencionado [dejar que los estudiantes las resuman]:
  • Ventajas
    • Reutilizaci贸n de capas;
    • Facilita la estandarizaci贸n
    • Dependencias se limitan a intra-capa
    • Contenci贸n de cambios a una o pocas capas
  • Desventajas
    • A veces no se logra la contenci贸n del cambio y se requiere una cascada de cambios en varias capas;
    • P茅rdida de eficiencia;
    • Trabajo innecesario por parte de capas m谩s internas o redundante entre varias capas;
    • Dificultad de dise帽ar correctamente la granularidad de las capas.
Existen tres propuestas de arquitecturas de capas para Sistemas de Informaci贸n, donde las capas a veces reciben el nombre de niveles (en Ingl茅s tiers):
  • Arquitectura de dos capas;
  • Arquitectura de tres capas;
  • Arquitectura de cuatro capas.

Dos capas

En la actualidad muchos sistemas de informaci贸n est谩n basados en arquitecturas de dos capas, denominadas:
  • Nivel de aplicaci贸n;
  • Nivel de la base de datos.
Existen herramientas de amplio uso que presuponen esta estructura (p. ej. Visual Basic + Access/SQL server). Estas arquitecturas fueron las primeras en aprovecharse de la estructura cliente-servidor (aplicaci贸n en los clientes, base de datos como servidor). Las desventajas de dos niveles son bien conocidas:
  • El nivel de las aplicaciones se recargan, entremezclando aspectos t铆picos del manejo de la interfaz con las reglas del negocio;
  • Las reglas del negocio quedan dispersas entre el nivel de aplicaci贸n y los "stored procedures" de la base de datos;
  • La aplicaci贸n queda sobrecargada de informaci贸n de bajo nivel si hay que extraer los datos de varias bases de datos, posiblemente con estructuras diferentes.
  • El nivel de aplicaci贸n puede ser demasiado pesado para el cliente.
     

Tres capas

Por estas razones, existe una fuerte y bien avanzada tendencia a adoptar una arquitectura de tres capas:
  • Aplicaci贸n [ojo!]
  • Dominio de la aplicaci贸n;
  • Repositorio.
La mayor铆a de estos sistemas buscan conservar la tecnolog铆a de BD relacional para la capa del repositorio e introducir la tecnolog铆a OO para el dominio de la aplicaci贸n. Para la capa de presentaci贸n existe una pelea entre tecnolog铆a HTML (Java-enabled) vs. generadores GUI.

¿Qu茅 contiene el dominio de la aplicaci贸n? En terminolog铆a m谩s cl谩sica de BD los tres niveles pueden equipararse, a grosso modo, con:
  • Esquema externo;
  • Esquema conceptual;
  • Esquema interno o de almacenamiento.
La ventaja es que ahora la aplicaci贸n puede describirse  煤nicamente en relaci贸n a la sem谩ntica de la aplicaci贸n, sin tener que preocuparse sobre c贸mo est谩 implementado ese dominio (ubicaci贸n y estructura f铆sica de la data).

****Un punto interesante es d贸nde ubicar el nivel del dominio de la aplicaci贸n, ¿en el lado del cliente o en el lado del servidor? Hay ventajas y desventajas asociadas con cada alternativa, al estudiante interesado le recomiendo el excelente an谩lisis del Fowler (secci贸n 12.2.1, vp. 243-245).
  

Cuatro capas

Los desarrollos m谩s recientes empiezan a experimentar con una capa adicional (para 2000 no hab铆a visto evidencia de esto en Venezuela):
  • Presentaci贸n;
  • Aplicaci贸n;
  • Dominio de la aplicaci贸n;
  • Repositorio
La idea b谩sica es separar todo lo que es programaci贸n GUI de la aplicaci贸n per se (y por ende tiende a usar frameworks para GUI como MFC). El nivel de la presentaci贸n no hace c谩lculos, consultas o actualizaciones sobre el dominio --de hecho nisiquiera tiene visibilidad sobre la capa del dominio. La capa de la aplicaci贸n es la encargada de accesar la capa del dominio, simplificar la informaci贸n del dominio convirti茅ndolo a los tipos de datos que entiende la interfaz: enteros, reales, cadenas de caracteres, fecha y clases contenedoras (container, collection).

Una forma de organizar esta nueva capa de la aplicaci贸n es considerarla una fachada al dominio. Cada aplicaci贸n presenta una fachada diferente (y simple) del dominio a la interfaz. Las ventajas de las cuatro capas se encuentra nuevamente en el texto de Fowler(secci贸n 12.3.1, vp. 249-250). En la secci贸n siguiente del mismo texto se argumenta que el patr贸n Proxy puede aplicarse a la capa de la aplicaci贸n, de forma de tener una parte de la capa en el cliente y otra en el servidor. Los detalles pueden consultarse all铆.

Finalmente resulta interesante discutir el acoplamiento entre la capa del dominio y la capa del repositorio. Por falta de tiempo, prefiero posponer este acoplamiento hasta la pr贸xima clase.
 
***De hecho, en el libro de Larman el diagrama de clases que se presenta como parte del modelo conceptual es el diagrama conceptual del dominio de la aplicaci贸n.



Read more »

Programaci贸n Orientado a Objetos

INTRODUCCI脫N



La programaci贸n orientada a objetos es una “filosof铆a”, un modelo de programaci贸n,
con su teor铆a y su metodolog铆a, que conviene conocer y estudiar antes de nada. Un
lenguaje orientado a objetos es un lenguaje de programaci贸n que permite el dise帽o de
aplicaciones orientadas a objetos. Dicho esto, lo normal es que toda persona que vaya a
desarrollar aplicaciones orientadas a objetos aprenda primero la “filosof铆a” (o adquiera
la forma de pensar) y despu茅s el lenguaje, porque “filosof铆a” s贸lo hay una y lenguajes
muchos



Los objetos son entidades que tienen un determinado estadocomportamiento (m茅todo) e identidad:
  • El estado est谩 compuesto de datos, ser谩 uno o varios atributos a los que se habr谩n asignado unos valores concretos (datos).
  • El comportamiento est谩 definido por los m茅todos o mensajes a los que sabe responder dicho objeto, es decir, qu茅 operaciones se pueden realizar con 茅l.
  • La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto an谩logo al de identificador de una variable o unaconstante).
Un objeto contiene toda la informaci贸n que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacci贸n llamados m茅todos, que favorecen la comunicaci贸n entre ellos. Esta comunicaci贸n favorece a su vez el cambio de estado en los propios objetos. Esta caracter铆stica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.
Los m茅todos (comportamiento) y atributos (estado) est谩n estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de m茅todos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podr铆a producir el h谩bito err贸neo de crear clases contenedoras de informaci贸n por un lado y clases con m茅todos que manejen a las primeras por el otro. De esta manera se estar铆a realizando una programaci贸n estructurada camuflada en un lenguaje de programaci贸n orientado a objetos.
La POO difiere de la programaci贸n estructurada tradicional, en la que los datos y los procedimientos est谩n separados y sin relaci贸n, ya que lo 煤nico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programaci贸n estructurada anima al programador a pensar sobre todo en t茅rminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programaci贸n estructurada s贸lo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicit谩ndoles que realicen sus m茅todos por s铆 mismos.

[editar]Origen

Los conceptos de la programaci贸n orientada a objetos tienen origen en Simula 67, un lenguaje dise帽ado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de C贸mputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de naves, que fueron confundidas por la explosi贸n combinatoria de c贸mo las diversas cualidades de diferentes naves pod铆an afectar unas a las otras. La idea surgi贸 al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. Fueron refinados m谩s tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versi贸n fue escrita sobre Basic) pero dise帽ado para ser un sistema completamente din谩mico en el cual los objetos se podr铆an crear y modificar "sobre la marcha" (en tiempo de ejecuci贸n) en lugar de tener un sistema basado en programas est谩ticos.
La programaci贸n orientada a objetos se fue convirtiendo en el estilo de programaci贸n dominante a mediados de los a帽os ochenta, en gran parte debido a la influencia de C++, una extensi贸n del lenguaje de programaci贸n C. Su dominaci贸n fue consolidada gracias al auge de las Interfaces gr谩ficas de usuario, para las cuales la programaci贸n orientada a objetos est谩 particularmente bien adaptada. En este caso, se habla tambi茅n de programaci贸n dirigida por eventos.
Las caracter铆sticas de orientaci贸n a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo AdaBASICLispPascal, entre otros. La adici贸n de estas caracter铆sticas a los lenguajes que no fueron dise帽ados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del c贸digo. Los lenguajes orientados a objetos "puros", por su parte, carec铆an de las caracter铆sticas de las cuales muchos programadores hab铆an venido a depender. Para saltar este obst谩culo, se hicieron muchas tentativas para crear nuevos lenguajes basados en m茅todos orientados a objetos, pero permitiendo algunas caracter铆sticas imperativas de maneras "seguras". El Eiffelde Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparici贸n de Internet, y a la implementaci贸n de la m谩quina virtual de Java en la mayor铆a de navegadoresPHP en su versi贸n 5 se ha modificado, soporta una orientaci贸n completa a objetos, cumpliendo todas las caracter铆sticas propias de la orientaci贸n a objetos.

[editar]Conceptos fundamentales

La programaci贸n orientada a objetos es una forma de programar que trata de encontrar una soluci贸n a estos problemas. Introduce nuevos conceptos, que superan y ampl铆an conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
  • Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciaci贸n es la lectura de estas definiciones y la creaci贸n de un objeto a partir de ellas.
  • Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos m茅todos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) tambi茅n se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y s贸lo pueden ser accedidos a trav茅s de otros m茅todos p煤blicos. Esto es as铆 para mantener hegem贸nico el ideal de OOP.
  • Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (m茅todos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.
  • M茅todo: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecuci贸n se desencadena tras la recepci贸n de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un m茅todo puede producir un cambio en las propiedades del objeto, o la generaci贸n de un "evento" con un nuevo mensaje para otro objeto del sistema.
  • Evento: Es un suceso en el sistema (tal como una interacci贸n del usuario con la m谩quina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. Tambi茅n se puede definir como evento, a la reacci贸n que puede desencadenar un objeto, es decir la acci贸n que genera.
  • Mensaje: una comunicaci贸n dirigida a un objeto, que le ordena que ejecute uno de sus m茅todos con ciertos par谩metros asociados al evento que lo gener贸.
  • Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus caracter铆sticas predeterminadas, y cuyo valor puede ser alterado por la ejecuci贸n de alg煤n m茅todo.
  • Estado interno: es una variable que se declara privada, que puede ser 煤nicamente accedida y alterada por un m茅todo del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.
  • Componentes de un objeto: atributos, identidad, relaciones y m茅todos.
  • Identificaci贸n de un objeto: un objeto se representa por medio de una tabla o entidad que est茅 compuesta por sus atributos y funciones correspondientes.
En comparaci贸n con un lenguaje imperativo, una "variable", no es m谩s que un contenedor interno del atributo del objeto o de un estado interno, as铆 como la "funci贸n" es un procedimiento interno del m茅todo del objeto.

[editar]Caracter铆sticas de la POO

Existe un acuerdo acerca de qu茅 caracter铆sticas contempla la "orientaci贸n a objetos", las caracter铆sticas siguientes son las m谩s importantes:
  • Abstracci贸n: denota las caracter铆sticas esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar c贸mo se implementan estas caracter铆sticas. Los procesos, las funciones o los m茅todos pueden tambi茅n ser abstra铆dos y cuando lo est谩n, una variedad de t茅cnicas son requeridas para ampliar una abstracci贸n.El proceso de abstracci贸n permite seleccionar las caracter铆sticas relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracci贸n es clave en el proceso de an谩lisis y dise帽o orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.
  • Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracci贸n. Esto permite aumentar lacohesi贸n de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultaci贸n, principalmente porque se suelen emplear conjuntamente.
  • Modularidad: Se denomina Modularidad a la propiedad que permite subdividir una aplicaci贸n en partes m谩s peque帽as (llamadas m贸dulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicaci贸n en s铆 y de las restantes partes. Estos m贸dulos se pueden compilar por separado, pero tienen conexiones con otros m贸dulos. Al igual que la encapsulaci贸n, los lenguajes soportan la Modularidad de diversas formas.
  • Principio de ocultaci贸n: Cada objeto est谩 aislado del exterior, es un m贸dulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica c贸mo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificaci贸n por quien no tenga derecho a acceder a ellas, solamente los propios m茅todos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracci贸n. La aplicaci贸n entera se reduce a un agregado o rompecabezas de objetos.
  • Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizar谩 el comportamiento correspondiente al objeto que se est茅 usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocaci贸n de un comportamiento en una referencia producir谩 el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecuci贸n", esta 煤ltima caracter铆stica se llama asignaci贸n tard铆a o asignaci贸n din谩mica. Algunos lenguajes proporcionan medios m谩s est谩ticos (en "tiempo de compilaci贸n") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.
  • Herencia: las clases no est谩n aisladas, sino que se relacionan entre s铆, formando una jerarqu铆a de clasificaci贸n. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos enclases y estas en 谩rboles o enrejados que reflejan un comportamiento com煤n. Cuando un objeto hereda de m谩s de una clase se dice que hay herencia m煤ltiple.
  • Recolecci贸n de basura: la recolecci贸n de basura o garbage collector es la t茅cnica por la cual el entorno de objetos se encarga de destruir autom谩ticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignaci贸n o liberaci贸n de memoria, ya que el entorno la asignar谩 al crear un nuevo objeto y la liberar谩 cuando nadie lo est茅 usando. En la mayor铆a de los lenguajes h铆bridos que se extendieron para soportar el Paradigma de Programaci贸n Orientada a Objetos como C++ u Object Pascal, esta caracter铆stica no existe y la memoria debe desasignarse manualmente.
Read more »

 
Powered by Blogger