Professional Documents
Culture Documents
ODL
se utiliza para definir las interfaces de los tipos de objetos, permitiendo la definicin de las firmas de las operaciones y no su implementacin. Principios
Soporta la semntica completa del modelo de objetos
de ODMG Independiente del lenguaje de programacin Extensible (nuevas funcionalidades, optimizaciones fsicas) No se usa para la manipulacin de datos.
El
modelado de estado est definido por una interface. Consta de definir o modelar lo siguiente:
Atributos Relaciones.
attribute tipoDeDato nombreAtributo relationship tipoDeDato nombreRelacion inverse nombreClaseRef::nombreRelacionInv
Una
Ejemplo
de definicin de interface.
interface Date:Object { enum weekday {sun,mon,tue,wed,thu,fri,sat}; enum Month {jan,feb,,nov,dec} unsigned short year(); unsigned short month(); unsigned short day(); boolean is_equal(in Date other_date); }
Una
hereda tambin los atributos de la clase. La herencia mltiple por la relacin extends no es permitida.
Ejemplo
de definicin de clase
class Person (extent people) { attribute string name; attribute struct Address {unsigned short number, string street, string city_name} address; relationship Person spouse inverse Person::spouse; relationship set<Person> children inverse Person::parents; relationship list<Person> parents inverse Person::children; void birth (in string name); boolean marriage (in string person_name) raises (no_such_person); unsigned short ancestors (out set<Person> all_ancestors) raises (no_such_person); void move (in string new_address); };
Es
el lenguaje de consulta del estndar ODMG. Puede integrarse a algunos lenguajes de programacin como C++, SmallTalk y Java.
OQL regresa objetos o colecciones de objetos de sus
consultas, que son compatibles con los lenguajes a los que se integra.
Su
sintaxis es muy similar a SQL con algunas adiciones especiales para la orientacin a objetos.
El
clsico selectfromwhere.
SELECTd.nombre FROM d in departamentos WHERE d.colegio = Ingeniera
Para
Estas
variables son definidas en cualquier consulta OQL donde se reference a una coleccin.
En el ejemplo anterior la variable iteradora era d.
Las
Estas
expresiones son utilizadas para especificar la ruta a los atributos y objetos en un punto de entrada. Inician en el nombre un objeto persistente o su iterador.
Ser seguido cero o mas relaciones o atributos
Una
consulta nombrada en OQL se puede ver como el concepto de vista en una base de datos relacional.
El nombre de la consulta nombrada debe ser
nico. Una vez creada la consulta persistir hasta que sea borrada o redefinida. Incluso la definicin de la vista puede contener parmetros.
Ejemplo
define tiene_tutor(nombre_tutor) as select s from s in estudiantes where s.tutor.nombre = nombre_tutor.
Una
vez definida la consulta, esta puede ser usada como un objeto mas en otra consulta.
Sabemos
con una consulta de OQL regresa una coleccin de objetos. Qu pasa si la coleccin regresada solo contiene un elemento?
El operador element puede usarse para tomar
OQL
Ejemplo:
avg ( select s.calif from s in estudiantes where s.cveGrupo = ACB123 )
OQL
Ejemplo
de pertenencia:
select s.nombreCompleto.nombre s.nombreCompleto.apPaterno from s in estudiantes where CS101 in ( select c.curso.clave from c in s.seccionesCompletadas )
OQL
provee operadores para extraer una sub-coleccin y concatenar 2 listas, as como para ordenar los resultados. Ejemplo
first(select struct (facultad: f.nombre.apPaterno, salario: f.salario) from f in facultad ordered by f.salario desc)
Tal
como SQL lo hace, tambin OQL soporta el operador group by. Ejemplo:
select nomTutor, prom: avg (select calif from e in estudiates) from s in estudiantes group by nomDepto: s.tutor.nombre