– Ohjelmistojen mallintaminen, olio- ja relaatiomallinnuksen suhteesta

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
– Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä.
ER-mallista relaatiomalliin
Koostumussuhde Jukka Juslin © Jukka Juslin.
Ohjelmiston tekninen suunnittelu
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
@ Leena Lahtinen Helia TIETO JA TIETOKONEOHJELMA  TIETOKONEOHJELMA KÄSITTELEE TIETOJA  TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
Luku 5 – Tietojen hakeminen sovelluksiin
Tietokanta.
Tietokannan suunnittelu
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
22. Taulukot.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
Olio-ohjelmoinnin perusteet luento 3
Tietojärjestelmät ja Systeemisuunnittelu
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
4-Tietokantaohjelmointi Teuhola Tietokantasovellusten ohjelmointi Taustaa 4.1. Relaatioskeemaa täydentäviä piirteitä 4.2. Sulautettu SQL, Java.
SQL Standardoitu kieli, jonka avulla voidaan
Muunnos luokkakaaviosta relaatiokaavioon
Tietokannan luominen Tietokanta luodaan komennolla CREATE DATABASE
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 4 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen.
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Jouni Juntunen Oulun seudun ammattikorkeakoulu Liiketalouden yksikkö
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Vesa Ollikainen & Outi Grotenfelt
DO NOT PRINT THIS DOCUMENT SQL -valintaehto CREATE TABLE opettaja ( opetunnus varchar(12) NOT NULL, nimi varchar(40) NOT NULL, puhelin varchar(12), tyohuone.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Component diagram– Komponenttikaavio J. Pätsi & H. Malmihuhta
Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.
Fyysinen suunnittelutMyn1 Fyysinen suunnittelu Tässä lähdetään liikkeelle tietokannan loogisesta mallista. Nyt pitää olla tiedossa valittava DBMS-tuote.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
– Ohjelmistojen mallintaminen Unified Modeling Language (UML)
15. Ohjelmoinnin tekniikkaa
Ohjelmistojen mallintaminen, sekvenssikaaviot
Tietokannan hallinta Kevät 2006 Jan Lindström R&G Chapter 1.
2/2001 Tietojärjestelmät ja Systeemisuunnittelu Luennoitsija: Tapio Lammi
5. Kapselointi.
1. Omat operaatiot.
2. Taulukot.
1. Olio-ohjelmointi.
4. Komentoriviparametrit
Tietomallista tietokannaksi
15. Ohjelmoinnin tekniikkaa
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Sisältö PostgreSQL MySQL Historia yms. ORDBMS Ominaisuuksia Asennus
14. Hyvä ohjelmointitapa.
2. Taulukot.
Jouni Juntunen Oulun seudun ammattikorkeakoulu Liiketalouden yksikkö
3. Komentoriviparametrit
15. Ohjelmoinnin tekniikkaa
7. Näytölle tulostaminen
Ohjelmistotekniikan menetelmät, sekvenssikaaviot
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

582104 – Ohjelmistojen mallintaminen, olio- ja relaatiomallinnuksen suhteesta

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

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

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ä

Käsitetaso, rakennetaso, tallennustaso

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)

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

Olioiden esittäminen UML:ssä

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; }

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

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ä

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

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), );

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

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

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

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

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)

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

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

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()); }

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() }

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>

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

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();

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(); }

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