Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

– Ohjelmistojen mallintaminen, olio- ja relaatiomallinnuksen suhteesta

Samankaltaiset esitykset


Esitys aiheesta: "– Ohjelmistojen mallintaminen, olio- ja relaatiomallinnuksen suhteesta"— Esityksen transkriptio:

1 582104 – Ohjelmistojen mallintaminen, olio- ja relaatiomallinnuksen suhteesta

2 Tietojen pysyvyys liiketoiminnan edellytys
Tällä kurssilla on keskitytty oliomenetelmiä hyödyntävään ohjelmistojen mallintamiseen Rinnakkainen kurssi Tietokantojen perusteet käsittelee relaatioteoriaa hyöndyntävään tietosisällön mallintamiseen Oliomallinnus on de facto –standardi ohjelmistojen toiminnan mallintamiseksi Relaatiomallinnus on de facto –standardi pysyväisluonteisen tiedon mallintamiseksi Toimiva liiketoimintajärjestelmä käyttää pysyväisluonteista dataa

3 Sisältö Tietosisällön mallintaminen relaatio- ja oliomaailmassa
Olio- ja relaatiomallin yhteensovittaminen (ORM) Hibernate –kehyksen pikaesittely Kirjastoesimerkin sovittaminen Hibernate-sovellukseksi

4 Tiedon mallintaminen relaatiokannassa
Relaatiokannassakin mallinnetaan järjestelmän tietosisältöä useammalla abstraktiotasolla Kohdealuetta mallinnetaan esimerkiksi ER-kaavioilla (entity-relationship) Taulukaavioin (SQL-taulut) Fyysisen tallennuksen kaavioin Järjestelmän suorituskyky tärkeä tekijä, tarkoituksena löytää tehokkaat tallennusformaatit Tietokannan hallintajärjestelmä käsittelee miljoonia tai miljardeja rivejä

5 Käsitetaso, rakennetaso, tallennustaso

6 Oliomallinnuksen käyttäminen relaatiokannan yhteydessä
UML-luokkamallilla pystytään monesti saavuttamaan ER-kaaviota vastaava ilmaisuvoima Useimmat oliokielet eivät kuitenkaan tue tehokasta tietojen säilyttämistä ja hakemista, joten monesti tietojen pysyvyyden varmistamiseksi käytetään SQL-kantaa Olio- ja relaatiomallien yhteensovittamiseksi voidaan käyttää olio-relaatiokuvauksia (object-to-relational mapping, ORM)

7 Relaation esittäminen taulumuodossa
Relaatiot esitetään SQL:ssä taulumuodossa Käsitteiden väliset yhteydet esitetään viite- ja pääavainten välisten arvojen samuudella

8 Olioiden esittäminen UML:ssä

9 Olioiden esittäminen relaatiokannassa
Yksinkertaisessa tapauksessa olioiden tallentaminen relaatiokantaan on suoraviivaista class Asiakas { String tunnus; String nimi; Set<Laskutustieto> laskutustiedot; } class Laskutustieto { int tilinumero; boolean luottotili; decimal summa; Asiakas omistaja; }

10 SQL-taulurakenteen luomislausekkeet
create table ASIAKAS ( TUNNUS VARCHAR(15) NOT NULL PRIMARY KEY, NIMI VARCHAR(50) NOT NULL, SALASANA CHAR(32) NOT NULL ); create table LASKUTUSTIETO ( TILINUMERO INT NOT NULL PRIMARY KEY, LUOTTOTILI BOOLEAN, RAHAMAARA DECIMAL(10, 3), OMISTAJA FOREIGN KEY REFERENCES ASIAKAS

11 Oliomallin relaatiovastineet moniselitteisiä
Edellisessä esimerkissä ei tunnettu asiakkaan osoitetta Vakiotapa osoitteen mallintamiseen on käyttää kompositiota Miten relaatiomalli muuttuu? Ovatko Osoite-luokan kentät Asiakas-taulun sarakkeita? Vai oma erillinen taulunsa, viittaukset viiteavaimin? Olio/relaatiomallin epäyhteensopivuus yleistä

12 Olio- ja relaatioparadigmojen epäyhteensopivuus
Olio- ja relaatiomallien yhteensovittamisessa syntyviä ongelmia syntyy esim. seuraavista: Mallinnuksen tarkkuustasosta (granularity) Luokkahierarkioiden tallennustavassa Olioiden identiteettiongelmat Yhteyksien tallennustavasta Yhteyksien navigoituvuustavoissa Joidenkin arvioiden mukaan jopa 30% oliojärjestelmän koodiriveistä voi olla puuduttavaa, toisteista olio- ja relaatiomuunnosten toteuttamista

13 Mallinnuksen tarkkuustaso-ongelma
Oliomallinnuksessa voidaan tietosisältöä jakaa luokkiin vapaasti tarpeen mukaan Relaatiomallinnuksessa käytetään jaotellaan taulu sarakkeisiin ja riveihin uusien tietotyyppien esitteleminen monesti vaikeaa, järjestelmäkohtaista create table ASIAKAS ( TUNNUS VARCHAR(15) NOT NULL PRIMARY KEY, NIMI VARCHAR(50) NOT NULL, SALASANA CHAR(32) NOT NULL OSOITE_KATUOSOITE VARCHAR(50), OSOITE_KUNTA VARCHAR(15), OSOITE_POSTINUMERO CHAR(5), );

14 Luokkahierarkian tallennusongelma
Luokkahierarkian laajennosmekanismille ei ole suoraa vastinetta relaatiomallissa Kukin aliluokka määrittelee oman tietosisältönsä, vaikuttaa taulujen rakenteeseen Kullakin oliolla on luokkansa, vaikuttaa taulujen rakenteeseen Taulujen viiteavaimet voivat osoittaa vain yhteen viitattuun tauluun

15 Olioidentiteetin ongelma
Asiakkaan identifioivaksi kentäksi määriteltiin käyttäjätunnus Esim. Javassa olioita voidaan tunnistaa viitesamuuden ja identiteettisamuuden kannalta Viitesamuus: ab == bc Identiteettisamuus: ab.equals(bc) Tietokannan identiteettikenttä tuo kolmannen samuuden käsitteen Esimerkiksi tietojen muokkaustilanteessa voi järjestelmässä olla olioita, jotka viite- ja identiteettitasolla ovat eriäviä, mutta tietokannan kannalta samoja

16 Yhteyksien tallennustapaongelma
UML:ssä on mahdollista merkitä navigoituvuussääntöjä Vastaavat olion hallussaan pitämää viitettä Olioviite aina yksisuuntainen Molempiin suuntiin navigoitavat yhteydet toteutetaan kahtena olioviitteenä Relaatiokannassa viitteet ovat luonnostaan kaksisuuntaisia Viiteavain viittaa toisen taulun pääavaimeen

17 Olioverkkojen navigoituvuusongelma
Olio-ohjelmalle on luontaista käsitellä olioverkkoja ja delegoida palvelun toteuttaminen osaolioille Etukäteen palvelun toteuttamiseen osallistuvien olioiden tunnistaminen vaikeaa Kunkin olion noutaminen tietokannasta siinä vaiheessa, kun olion palveluita tarvitaan, on tehotonta ns. n+1 kyselyn ongelma

18 Olio/relaatiomallin kuvausten käyttäminen
Olio- ja relaatiomallien välisten yhteyksien kuvaamisen käytetään monesti erillistä työkalua ORM-kuvaus määrittelee miten oliomalli esitetään relaatiokannassa ORM-työkalu sisältää rajapinnat olioiden tietokannasta lataamiseksi ja tallentamiseksi Javassa standardi Java Persistence API (JPA)

19 ORM-työkalun ongelmakenttä
ORM-työkalun käytännöt vastaavat mm. seuraaviin kysymyksiin: Minkälainen rakenne pysyväisluokilla tulee olla Miten O/R-kuvaukset esitetään Miten periytymisrakenteet tallennetaan Olioidentiteettiin liittyvät kysymykset Miten sovelluslogiikka kudotaan tallennuskerroksen kanssa yhteen Mikä on pysyväisluokkien olioiden elinkaari Miten pysyväisolioita noudetaan tietokannasta Miten pysyväisolioverkkoja noudetaan tehokkaasti

20 Hello World-esimerkki Hibernatella
Hibernate on ehkäpä käytetyin ORM-toteutus Java-ympäristössä Alkuperäinen JPA-määrittely perustuu Hibernaten esittelemiin rajapintoihin Esimerkiksi linkitetyn viestilistan tallentaminen Hibernatella

21 Olioita voidaan käsitellä normaalisti
public class HoiMaailma1 { public static void main(String args[]) { Message msg = new Message(“Terve maailma”); System.out.println(msg.getText()); }

22 Tietokantakäytössä sessiot ja transaktiot
Tietokantaa käytettäessä tietokannan hallintajärjestelmä erottelee eri käyttäjien muutokset kannan sisältöön Muutokset tietokantaan jaetaan erillisiin transaktioihin Hibernate käyttää sisäistä session käsitettä tietokantayhteyden ohessa { Session session = getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); Message msg = new Message(“Terve kaverit!”); session.save(msg); tx.commit(); session.close() }

23 Luokkien kuvaus tietokantatauluiksi
Luokkien tallennustapa tietokantaan kuvataan XML-kuvauksin, esim: <hibernate-mapping> <class name=“Message” table=“MESSAGES”> <id name=“id” column=“MSG_ID”> <generator class=“increment” /> </id> <property name=“text” column=“MSG_TEXT” /> <many-to-one name=“nextMessage” cascade=“all” column=“NEXT_MESSAGE_ID” /> </class> </hibernate-mapping>

24 Vastaava tietokantakaavio
Relaatiotietokannasta löytyvien taulujen tulisi vastata luokkakuvauksia Mahdollista käyttää luokkakuvauksista automaattisesti tuotettua taulukaaviota Hello-world –esimerkissä:

25 Olioiden tietojen lataaminen
Olioiden tietokantaan talletettu tila voidaan ladata sessiota käyttäen: { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction newTransaction = session.beginTransaction(); List messages = session.createQuery("from Message").list(); System.out.println(messages.size() + " message(s) found:"); for (Iterator iter = messages.iterator(); iter.hasNext();) { Message msg = (Message) iter.next(); System.out.println("[" + msg.getId() + "]: " + msg.getText()); } newTransaction.commit(); session.close();

26 Olioiden tietojen päivittäminen
Muistissa olevien olioiden tietoja voidaan päivittää session kautta: { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction newTransaction = session.beginTransaction(); Message oldMsg = (Message) session.load(Message.class, msgId); oldMsg.setText(newMsg); newTransaction.commit(); newSession.close(); }

27 Kirjastojärjestelmän toinen iteraatio
Toteutetaan järjestelmän käsittelemä data pysyväksi Toteutus tehdään Hibernate-kehystä hyödyntäen


Lataa ppt "– Ohjelmistojen mallintaminen, olio- ja relaatiomallinnuksen suhteesta"

Samankaltaiset esitykset


Iklan oleh Google