Date post: | 25-Dec-2015 |
Category: |
Documents |
Upload: | hope-skinner |
View: | 225 times |
Download: | 0 times |
CIS 671 OODBs 2
Development of Object-based Systems
• Object-Oriented Database Systems– An alternative to relational systems– Application domains where objects play central
role– Heavily influenced by object-oriented
programming languages– An attempt to add DBMS functionality to a
programming language environment
CIS 671 OODBs 3
Development of Object-based Systems - cont.
• Object-Relational Database Systems– An attempt to extend relational databases
• Broader set of applications
– Provide bridge between relational and object-oriented systems
CIS 671 OODBs 4
Why a Standard?
• Portability from one vendor (system) to another
• Interoperability between systems based on different vendor products easier
CIS 671 OODBs 5
Object Data Management Group(ODMG)
• ODMG-93 or ODMG 1.0; ODMG 2.0 (1997)
• Parts– Object model– Object definition model (ODL)– Object query language (OQL)– Bindings to OO programming languages
CIS 671 OODBs 6
Unified Modeling Language (UML)• Consortium of vendors including
DEC HP IBM Unisys
I-Logix Intellicorp MCI Systemhouse TI
• UML 0.9 (1996); UML 1.1 (1997)
• Unified as to
- Differences in Modeling Languages
- Differences in Perspectives
Microsoft Icon Computing Rational Software Oracle
CIS 671 OODBs 7
ODMG Object Model• Literal
– State (or value) {constant}– No OID– May have complex structure– Types of literals
• Atomic - Simple, e.g., 10.2
- Structured, e.g. Date (19, May, 2001)
• Collection, e.g. days of the week (Sun, Mon, …, Sat)
CIS 671 OODBs 8
ODMG Object Model• Object
– Identifier (OID)– Name (optional)– Lifetime (persistent or transitory)– Structure
• How constructed– Atomic– Collection: t a type, k a key, v a value
» Set <t>» Bag <t>» List <t>» Array <t>» Dictionary <k, v>
• Specified by interface
CIS 671 OODBs 10
Examples:Object – inherited by
all objectsDate – structured
literal
interface Object {…boolean same_as(in Object other_object);Object copy();void delete();
}
interface Date: Object {enum Weekday {Sunday, Monday, …, Saturday};enum Month {January, February, …, December};unsigned short year();unsigned short month();unsigned short day()…boolean is_equal(in Date other_Date);boolean is_greater(in Date other_Date);…
}
Operations are inherited by user-defined objects.
Date is subtype of Object (i.e., inherits from).
CIS 671 OODBs 11
See text for the following examples:
• Structured Literals– Time
– Timestamp
– Interval
• Collection Objects– Collection
• Iterator
• Set
• Bag
• List
• Array
– Association
– Dictionary
CIS 671 OODBs 12
Object Interfaces
• All objects inherit basic interface of Object using dot notation:– o.same_as(p) – true if p is the same as o– p = o.copy() – create copy p of object o– o.delete() – delete object o
• May also use arrow notation:– o->same_as(p) – true if p is the same as o
CIS 671 OODBs 13
Class Definition Examples:Employee
Class Employee( extent all_employees
key ssn ){ attribute string name;
attribute string ssn;attribute date birthdate;attribute enum Gender{M,F} sex;relationship Department works_for
inverse Department::has_emps;void reassign_emp(in string new_dname)
raises(dname_not_valid) ;}
Note that both “works_for” and inverse relationship, “has_emps”, are specified.
CIS 671 OODBs 14
Class Definition Examples:Department
Class Department( extent all_departments
key dname, dnumber ){ attribute string dname;
attribute short dnumber;attribute struct Dept_Mgr{Employee manager, date startdate}
mgr;attribute set<string> locations;attribute struct Projs {string projname, time weekly_hours}
projs;relationship set<Employee> has_emps inverse Employee::works_for; void add_emp(in string new_ename) raises(ename_not_valid);void change_manager(in string new_mgr_name) in date startdate);
}
CIS 671 OODBs 15
Relationships works_for and has_emps between
Employee and Department
Class Employee{…
relationship Department works_for inverse Department::has_emps;}
Class Department{…
relationship set <Employee> has_emps inverse Employee::works_for; }
CIS 671 OODBs 16
COMPANY database in ODL Diagrammore details on page 680 in book
EMPLOYEES
MANAGE_DEPT
DEPARTMENT
LOCATION
PROJECT
WORKS_ON_PROJECT
DEPENDENT
has_dependents
dependent_of
controls
controlled_by
has_projects
located_at
has_departments
located_at
works_for employs
employee
managerdepartment
project
works_on
employees_on
manages managed_by
supervisee
supervisor
CIS 671 OODBs 17
Object Types: Interfaces vs. Classes
• Interface (e.g. Date)– Abstract behavior,
specification via operation signatures
– Noninstantiable (i.e. cannot have object matching description)
– Used via inheritance (behavior inheritance “:”)
• Class (e.g. Employee)– Abstract behavior
– Abstract state
– Instantiable
• Terminology– Behavior: operations– State: properties (attributes & relationships)
CIS 671 OODBs 18
Inheritance Relationships: Behavior vs. Extends
• Behavior Inheritance– Supertype must be
interface
– Subtype may be interface or class
– Denoted by “:”
– Multiple inheritance permitted
• EXTENDS Inheritance– Inherit state and
behavior among classes• Both supertype and
subtype must be classes
– Multiple inheritance not permitted
– Specified by extends keyword
CIS 671 OODBs 19
Example: Person UNIVERSITY Database
Class Person( extent persons
key ssn ){ attribute struct Pname {string fname, string mname, string iname}
name;attribute string ssn;attribute date birthdate;attribute enum Gender{M,F} sex;attribute struct Address {short no, string street, …, short zip}short age();
}
CIS 671 OODBs 20
Example: Faculty UNIVERSITY Database
Class Faculty extends Person( extent faculty){ attribute string rank;
attribute float salary;attribute string office;attribute string phone;relationship Department works_in
inverse Department::has_faculty;relationship set<GradStudent> advises
inverse GradStudent ::advisor;relationship set<GradStudent> on_committee_of
inverse GradStudent ::committee;void give_raise(in float raise);void promote(in string new_rank);
}
Extends inheritance
from Person
CIS 671 OODBs 21
Example: other classes UNIVERSITY Database
• Student extends Person
• Degree• GradStudent
extends Student• Department
• Course• Section• CurrSection
extends Section• Grade
CIS 671 OODBs 22
Factory Objects• Used to generate individual objects
• Examples– ObjectFactory– DateFactory– DatabaseFactory
• Include new() operation
Interface ObjectFactory {Object new();
}
CIS 671 OODBs 23
Database Factoryinterface Database {
void open(in string database_name);void close();void bind( in any some_object,
in string some_object);Object unbind(in string name);Object lookup(in string object_name)
raises(ElementNotFound);}
interface DatabaseFactory {Database new();
}
CIS 671 OODBs 24
Object Database Standards, Languages, and Design
Part II: Object Query language (OQL)
CIS 671 OODBs 25
Object Query Language (OQL)• “Bring the best of SQL to the object world.”• Syntax similar to SQL• Plus additional features• Works with programming languages where
ODMG has defined bindings– Java, C++, Smalltalk– Returns object matching type system of that language– May implement class operations in these languages
• SQL3 – “Bring the best of the object-oriented world to the relational world.”
CIS 671 OODBs 26
Movietitleyearlength /* in minutes */filmType:{color,
blackAndWhite}lengthInHoursstarNamesotherMovies
Movies Example: Movies, Stars, Studios
Starnameaddress
streetcity
Studioname
stars starredIn
1..* 1..*
ownedBy owns
1..* 1..1
Set of stars of this movie.
Other movies by star of this movie.
CIS 671 OODBs 27
Movies Example: Movies, Stars, Studiosclass Movie
(extent Movies key (title, year)){ attribute string title;
attribute integer year;attribute integer length; /* in minutes */attribute enumeration (color, blackAndWhite) filmType;relationship set<Star> stars
inverse Star :: starredIn;relationship Studio ownedBy
inverse Studio :: owns;float lengthInHours() raises(noLengthFound);starNames(out set<String>);otherMovies(in Star, out set(<Movie>) raises(noSuchStar);
};
CIS 671 OODBs 28
Class Star(extent Stars key name)
{ attribute string name;attribute struct Addr;
{string street, string city} address;relationship set<Movie> starredIn
inverse Movie :: stars;};
Class Studio(extent Studios key name)
{ attribute string name;relationship set<Movie> owns
inverse Movie :: ownedBy;};
Movies Example,contd.
CIS 671 OODBs 29
Specifying data from ODB
• Path expression– Dot notation similar to structure in
programming language, – e.g., o.a attribute a of object o.
• Select-From-Where expression– Similar to SQL.– References are to data classes, not relations.
• Integrated directly into host language.
CIS 671 OODBs 30
Path ExpressionsAssume myMovie a host-language variable, value a Movie object.
• myMovie.length - length of the movie.• myMovie.lengthInHours() - real number, computed as
length in minutes. • myMovie.stars – set of Star objects related to myMovie
by relationship stars.• myMovie.starNames(myStars) – returns no value, sets
output variable myStars of method starNames to set of strings with names of the stars of the movie.
• myMovie.ownedBy.name – string that is name of studio owning myMovie.
CIS 671 OODBs 31
Select-From-Where Expressions, I• Year of the movie Gone with the Wind.
select m.year
from m in Movie
where m.title = “Gone with the Wind”;
• Bag containing names of stars of Casablanca.select s.name
from m in Movies, s in m.stars
where m.title = “Casablanca”;
• Set containing names of stars of Disney movies.select distinct s.name
from m in Movies, s in m.stars
where m.ownedBy.name = “Disney”;
Might contain duplicates, therefore bag.
No duplicates, therefore set.
Must name all components in hierarchy, i.e., Movies & stars.
CIS 671 OODBs 32
Select-From-Where Expressions, II• Pairs of stars living at the same address.
select distinct struct(star1: s1, star2: s2)from s1 in Stars, s2 in Starswhere s1.addr = s2.addr and s1.name < s2.name;
• Set containing names of stars of Disney movies, using subquery.Select distinct s.namefrom (select m
from m in Movieswhere m.ownedBy.name = “Disney”) dm, s in dm.stars;
• Set of all Disney movies, ordering results by length and title.select mfrom m in Movieswhere m.ownedBy.name = “Disney”order by m.length, m.title;
Result is set of structs.
List of Movies in ascending
order
Bag of all Disney movies.
Stars in those movies.
CIS 671 OODBs 33
Select-From-Where Expressions, III• Set containing names of stars of Disney movies, using
existential quantifier.select distinct s.namefrom s in Starswhere exists m in s.starredIn :
m.ownedBy.name = “Disney”;
• Set containing names of stars that have appeared only in Disney movies, using universal quantifier.
select distinct s.namefrom s in Starswhere for all m in s.starredIn :
m.ownedBy.name = “Disney”;
CIS 671 OODBs 34
Select-From-Where Expressions, IV• Average length of all movies.
Avg( select m.length from Movies m);
• Table of lengths of movies for each studio for each year.select std, yr, sumLength: sum( select p.m.length
from p in partition)from m in Moviesgroup by std: m.studio, yr: m.year;
• Table of lengths of movies for each studio for each year where studio produced at least one movie of over 120 minutes in that year.
select std, yr, sumLength: sum( select p.m.lengthfrom p in partition)
from m in Moviesgroup by std: m.studio, yr: m.yearhaving max(select p.m.length from partition p) > 120;
Want bag of lengths, not set.
CIS 671 OODBs 35
Views
•View returning Set containing movies by studio studio.define moviesFromStudio(studio) asselect mfrom m in Movieswhere m.ownedBy.name = studio;
Do not need “distinct m”, since Movies is already a
set.
CIS 671 OODBs 36
Returning a single element
• Bag or Set (if distinct included) normally returned.
• May want single element.
• Return Movie with name Casablanca.Element (select m
from m in Movies
where m.title = “Casablanca”);
CIS 671 OODBs 37
Find names of those who starred in all Disney movies.
Movietitleyearlength /* in minutes */filmType:{color,
blackAndWhite}lengthInHoursstarNamesotherMovies
Starnameaddress
streetcity
Studioname
stars starredIn
1..* 1..*
ownedBy owns
1..* 1..1
Idea: select s.name from s in Star where for all DisneyMovies
exists ds in DisneyMovies.starswith same name;
CIS 671 OODBs 38
Find names of those who starred in all Disney movies:First attempt.
1.Using “if p then q”.select s.namefrom s in Starwhere for all m in Movie :
(if m.ownedBy.name = ‘Disney’then exists s1 in m.stars :
s1.name = s.name);
2.Converting “if p then q” to “~p or q”.select s.namefrom s in Starwhere for all m in Movie :
(m.ownedBy.name != ‘Disney’or
exists s1 in m.stars :s1.name = s.name);
CIS 671 OODBs 39
Find names of those who starred in all Disney movies:Using a view of all Disney movies.
View returning Set of Disney movies.define DisneyMovies asselect mfrom m in Movieswhere m.ownedBy.name = ‘Disney’;
3. Query for stars using the DisneyMovies view.select s.namefrom s in Starwhere for all dm in DisneyMovie :
(exists s1 in dm.stars :s1.name = s.name);
CIS 671 OODBs 40
Find names of those who starred in all Disney movies:Using the Movie.starNames function.
Change – starNames(out set<String>) to a function
– set<String> starNames()
4. Query for stars using the DisneyMovies view and starNames() function.
select s.namefrom s in Starwhere for all dm in DisneyMovie :
s.name in dm.starNames();