Click here to load reader

Objektno orjentirano programiranje - . semestar/Objektno... · PDF filePostojani objekti - osnove •eng. persistent objects •ez obzira na veličinu poslovne aplikacije, ona će

  • View
    220

  • Download
    4

Embed Size (px)

Text of Objektno orjentirano programiranje - . semestar/Objektno... · PDF filePostojani objekti...

  • Objektno orjentirano programiranje

    Predavanje 9

    Postojani objekti, serijalizacija, marshaling, relacijske baze podataka

  • Postojani objekti - osnove

    eng. persistent objects

    Bez obzira na veliinu poslovne aplikacije, ona e gotovo uvijek koristiti baze podataka

    Podaci su temelj programa

    Kada se objekt instancira u aplikaciji on ivi maksimalno koliko i aplikacija

    Da bi objekt nastavio ivjeti i nakon to aplikacija zavri mora biti zapisan u neku vrstu sustava pohrane

    Stanje objekta je definirano vrijednou njegovih atrbuta

  • Postojani objekti - osnove

    Koncept spremanja stanja objekta na nain da se moe kasnije ponovno koristiti zove se postojanost (eng. persistence)

    Pojam postojani objekt (eng. persitstent object) oznaava objekt ije se stanje moe povratiti i koristiti neovisno o samo jednoj aplikaciji

    Aplikacija 1

    Aplikacija 2

    Sustav pohrane

    Zapii objekt

    Uitaj objekt

  • Postojani objekti - osnove

    Postoje razliiti naini spremanja stanja objekta, neki od njih su:

    Spremanje u file

    Spremanje u relacijsku bazu podataka

    Spremanje u objektnu bazu podataka

    Najjednostavniji nain je spremanje u datoteku, to nije standard kod poslovnih aplikacija

  • Spremanje objekta u datoteku

    Zapisivanje objekta u datoteku je razliito od zapisivanja vrijednosti neke varijable u datoteku

    Spremanje varijabli u npr. tekstualnu datoteku (vrijednosti odvojene delimiterom)

    Objekt nije samo kolekcija primitivnih tipova, moe sadravati i druge objekte

    Da bi smo spremili objekt moramo ga razbiti u manje dijelove koje onda moemo zapisati u datoteku

    Moramo znati na koji nain objekt ponovno vratiti u izvorni oblik

  • Serijalizacija

    Da bi objekt slali kroz kanal (npr. putem interneta) potrebno ga je dekonstruirati (razbiti u elementarne podatke, npr. byte stream), poslati i onda ga ponovno sloiti na drugom kraju kanala ovaj proces naziva se serijalizacija (eng. serialization)

    Proces samog slanja kroz mreu zove se marshaling

    Serijalizirani objekt se moe zapisati u file i poslije opet vratiti u originalno stanje

    Serijaliziacija i deserijalizacjia trebaju koristiti iste specifikacije (metodu dekompozicije i kasnije vraanja u stanje objekta) slino kao enkripcijski algoritam

    Java prua interfejs Serializable

    .NET jezici pruaju interfejs ISerializable

  • Spremanje objekta u datoteku

    Moderni jezici imaju ugraene mehanizme za postojanost objekata

    Kao i veina jezika Java koristi koncept toka za I/O

    Da bi spremili objekt u datoteku Java koristi Stream

    Da bi pisali u Stream objekt mora implementirati interfejs Serializableili Externaizable

    Ogranienje ovakvog pristupa je da se za povraanje objekta treba koristiti isti mehanizam/tehnolgija (Java)

    Java mora biti na obje strane ovog procesa

  • Serijalizacija u Javi

    package Serialization;

    import java.util.*;

    import java.io.*;

    class Osoba implements Serializable{

    private String ime;

    public Osoba(){

    }

    public Osoba(String i){

    System.out.println(Konstruktor);

    ime = i;

    }

    String dohvatiIme() {

    return ime;

    }

    }

  • public class SpremiOsobu implements Serializable{

    public SpremiOsobu(){

    Osoba osoba = new Osoba(Ivo Ivi);

    try{

    FileOutputStream fos = new FileOutputStream(Dat.txt);

    ObjectOutputStream oos = new ObjectOutputStream(fos);

    oos.writeObject(osoba);

    oos.flush();

    oos.close();

    } catch(Exception e){

    e.printStackTrace();

    }

    }}

  • Serijalizacija u Javi

    U ovom primjeru:

    Instancira se objekt Osoba

    Objekt se serijalizira

    Objekt se sprema u datoteku Dat.txt

    Objekt se jednostavno serijalizira sa:

    oos.writeObject(osoba);

  • Serijalizacija putem interfejsa

    Primjer razlike izmeu interfejsa i implementacije (znamo kako koristiti serijalizaciju ali ne znamo detalje implementacije)

    Primjer vraanja objekta iz datoteke

    package Serialization;import java.io.*;import java.util.*;public class UcitajOsobu{

    public UcitajOsobu(){try{

    FileInputStream fis = new FileInputStream(Dat.txt);ObjectInputStream ois = new ObjectInputStream(fis);Osoba osoba = (Osoba )ois.readObject();System.out.print(Uitano ime osobe: );System.out.println(osoba.dohvatiIme());ois.close();

    } catch(Exception e){e.printStackTrace();

    }}

    }

  • to se dogaa s metodama pri serijalizaciji?

    Objekti se po definiciji sastoje od atributa i metoda

    Atributi se serijaliziraju, ali to je s metodama?

    U primjeru Jave metode se ne serijaliziraju

    Pri ovakvoj serijalizaciji Java treba biti na obje strane procesa (serijalizacija i deserijalizacija)

    Ako jedna aplikacija serijalizira, druga aplikacija koja radi deserijalizaciju treba imati istu definiciju klase

    Ipak, to se tie programera nema konceptualne razlike (iako fizika implementacija ne odgovara tono konceptualnom modelu)

  • Koritenje XML-a u procesu serijalizacije

    Vidjeli smo primjer serijalizacije na jednoj platformi

    XML nam omoguuju serijalizaciju/deserijalizaciju kroz razliite platforme

    Generira se XML file koji predstavlja atribute klase Osoba

    Da bi u C# omoguili ovu funkcionalnost potrebne su dodatne definicije u klasi

    [XmlRoot(osoba)]public class Osoba...[XmlAttribute(ime)]public String Ime...[XmlElement(god_starosti)]public int God_starosti

  • Koritenje XML-a u procesu serijalizacije

    Getteri i setteri su standardizirani

    Korisno jer ne mora svaki programer smiljati svoja imena za ove metode

    [XmlAttribute(ime)]public String Ime{

    get{

    return this.strIme;}set{

    if (value == null) return;this.strIme = value;

    }}

  • Koritenje XML-a u procesu serijalizacije

    Prilikom postavljanja vrijednosti atributa ne trebamo eksplicitno pozivati setter ve moemo koristiti jednostavno pridruivanje vrijednosti

    this.Ime = ime;

    Kada se ova naredba izvri automatski se poziva setter

    Slino kao preoptereenje operatora u C++

  • Koritenje XML-a u procesu serijalizacije

    public void Serialize()

    {

    Osoba[] ljudi = new Osoba[3];

    ljudi[0] = new Osoba (Ivo Ivi, 32, 95);

    ljudi[1] = new Osoba (Mate Mati, 35, 67);

    ljudi[2] = new Osoba (Jure Juri, 65, 77);

    XmlSerializer serializator= new XmlSerializer(typeof(Osoba[]));

    TextWriter writer= new StreamWriter(osoba.xml);

    serializator.Serialize(writer, ljudi);

    writer.Close();

    }

  • 32

    35

    65

  • public void DeSerialize()

    {

    Osoba[] ucitaniLjudi;

    XmlSerializer serializator = new XmlSerializer(typeof(Osoba[]));

    TextReader reader = new StreamReader(osoba.xml);

    ucitaniLjudi = (Osoba[])serializator.Deserialize(reader);

    Console.WriteLine(Ucitani ljudi su:);

    foreach (Osoba osoba in ucitaniLjudi)

    {

    Console WriteLine(osoba.Ime+ ima +

    osoba.God_Starosti + godina.);

    }

    }

  • Pisanje u relacijsku bazu podataka

    Relacijske baze podataka su jedan od najuspjenijih alata u IT industriji

    Relacijske baze i danas igraju vanu ulogu iako moda postoje i bolje tehnologije

    Velika veina poslovnih aplikacija koristi relacijske baze podataka (Oracle, SQLServer, MSAccess)

    Iako se radi o korisnom alatu, moe doi do problema kada se radi interakcija s objektima

    Objekt koji se potencijalno sastoji od drugih objekata elimo zapisati u relacijski model koji nije dizajniran na OO nain

  • Relacijske baze podataka sastoje se od tablica

  • Pisanje u relacijsku bazu podataka

    Objektno orijentirani model se ne temelji na tablicama

    Budui da se objekti ne mapiraju jednostavno u tablice razvijene su objektno orijentirane baze podataka (90ih)

    Iako su ovakve baze bolje predstavljale OO model postoji jedan veliki problem: legacy data (podaci koji ve due vremena skladiteni u postojeem formatu)

    Veina tvrtki koriste relacijske baze podataka i veina ukupnih svjetskih podataka je spremljena u relacijskom modelu

    Dodatna stavka u korist relacijskih baza je da one provjereno funkcioniraju na razliitim nivoima skaliranja

  • Pisanje u relacijsku bazu podataka

    Iako je objekte lake zapisivati u objektno orijentirane baze podatka, cijena konverzije postojeih podatka iz relacijskog u objektni model je esto previsoka

    OO baze se koriste uglavnom u samo novijim sustavima koji se ne povezuju na legacy podatke

    elimo rijeiti sljedei problem: elimo pisati OO aplikacij i imati pristup legacy podacima u relacijskim bazama podataka

    Radi se o mapiranju iz objektnog u relacijski model

  • Pisanje u relacijsku bazu podataka

    Prilikom koritenja baza podataka postoji sljedea struktura:

    1. Klijent baze

    2. Server baze

    3. Baza podataka

    Korisnika aplikacija obino predstavlja klijenta koji podsredstvomservera obavlja interakciju s bazom podataka

    Klijent komunicira s bazom putem SQL izraza (Structured QueryLanguage)

  • Jedan od problema komunikacije sa specifinom bazom je da su driveri baze vezani za proizvoaa i koriste posebne protokole za komunikaciju

    Pisanje u relacijsku bazu podataka

    korisnik klijent baze server baze Bazapodataka

    SQL

    driveri

  • Pisanje u relacijsku bazu podataka

    Microsoft je razvio standard nazvan Open Database Connectivity (ODBC) koji apstrahira komunikaciju sa bazom

    Pisanjem klijenata po ODBC API-ju omoguavamo naim aplikacijama da se spajaju na vie