apstrakcije podataka_drugi deo

Upload: matthew-gomez

Post on 05-Jul-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    1/29

    P R O G R A M S K I J E Z I C I 

    Apstrakcije podataka

    Dr Milica Vučković 

    Fakultet organizacionih nauka,

    Beograd, 2013.

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    2/29

    Inkapsulacija

    ATP se implementira korišdenjem klase

    Članice klase su podaci i funkcije definisane u klasi

    Instance (objekti) klase mogu biti stack_ inamičke  iliheap-inamičke

    ATP u programskom jeziku C++

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    3/29

    Skrivanje infromacija

     – private klauzulaentiteti u private klauzuli su vidljivi samo za članice klase I

    prijateljske (friends) klase

     – public klauzula javni entiteti su u public klauzuli; ova klauzula opisuje javni

    interfejs

     – protected klauzula za nasleĎivanje 

     ATP u programskom jeziku C++

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    4/29

    #include

    class stack {

    private: // vidljive za članice klase i friends

    int *stackPtr;

    int maxLen;

    int topPtr;

    public: // članice vidljive za klijente 

    stack() { // konstruktor

    stackPtr = new int [100];

    maxLen = 99; topPtr = -1; }

    ~stack() { delete [ ] stackPtr; } // destruktor

    void push( int number ) { … } void  pop( ) { … } 

    int top( ) { return (stackPtr[topPtr]) };

    int empty() { return ( topPtr == -1);}

    }

    void main( ) {

    int  top;

    stack stk;

    stk.push (42)

    stk.push (20);

    top = stk.top( );

    stk.pop( );

    . . .

    }

    ATP u programskom jeziku C++

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    5/29

     

    Razlika u podršci ATP C++ i Java:

    • U C++, klijenti mogu pristupati nekoj od javnih članica klase, alisamo preko instanci (objekata) klase.

    • Klijentski programi mogu da pristupe nekom od javnih entitetaAda package direktno pomodu njegovog imena

     ATP u programskom jeziku C++

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    6/29

    Inkapsulacija svi korisnički definisani tipovi su klase

    svi objekti su heap-dinamički

    implicitna dealokacija

    Skrivanje informacijaATP u programskom jeziku Java

    Za svaku članicu klase definiše  se vrsta pristupa; koriste se modifikatori pristupa umesto klauzula

    -   public

    -   private

    -   protected

    ATP u programskom jeziku Java

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    7/29

    Java StackClass ATP Korišćenje StackClass 

    import java.io.*;class StackClass {

    private int [ ] stackRef;

    private int maxLen, topIndex;

    public StackClass( ) { // Konstuktor  

    stackRef = new int [100];

    maxLen = 99;

    topIndex = -1;}

    public void push(int number) {

    if  (topIndex == maxLen)

    System.out.println (“Error: stack is full”); else  stackRef [++topIndex] = number ;

    }

    public void pop() { // brise broj na vrhu staka

    if  (topIndex == -1)

    System.out.println (“Error: stack isempty”); else  - -topIndex;

    }

    public int top() { return (stackRef [ topIndex ]); }

    public boolean empty() { return (topIndex == -1);}

    }

    public class TestStack {

    public static void main(String[ ] args ) {

    StackClass myStack = new StackClass ();

    myStack.push (40):

    myStack.push (20);

    System.out.println (“ ” + myStack.top()); myStack.pop ();System.out.println (“ ” + myStack.top()); myStack.pop ();

    myStack.pop (); // error!!!

    }

    }

    ATP u programskom jeziku Java

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    8/29

    Inkapsulacija ATP se implementira korišdenjem klase (class)

    Sve istance klase su heap-inamičke;

    implicitna dealokacija 

    Skrivanje informacija

    za svaku članicu klase definiše  se vrsta pristupa, pomodu slededih modifikatora pristupa:

    -   public, private, protected, internal, protected internal

     ATP u programskom jeziku C#

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    9/29

     

    pristup privatnim članicama-podacima klase: metodepristupa (getters i setters)

    C# obezbeđuje  properties kao način  za implementacijumetoda pristupa (set i get); ne zahteva se eksplicitni poziv

    metoda

     ATP u programskom jeziku C#

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    10/29

      U klasi Student  definisan je property Year, koji omogudava metoama get i set

    pristup o privatne članice-podatka: year

    public class Student {

    public int Year { //* property Year

    get { return year; }

    set  { year = value; }}

    private int year;

    . . . .

    } …. 

    Klijentski kod:

    Student s = new Student( );

    s.Year = 1;

    s.Year = s.Year + 1;

     ATP u programskom jeziku C#

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    11/29

    • U prethodnom delu razmatrane su sledeće (minimalne)inkapsulacije

     – Package u Adi

     – Klase u C++, Javi i C#

    • Kod velikih programa, dva problema postaju evidentna:

     – logička organizacija i

     – rekompilacija

    Složeni inkapsulacioni

     mehanizmi

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    12/29

    Složeni inkapsulacioni mehanizmiRešenje za oba problema:

    - grupisanje programa u kolekcije logički  povezanogkoda i podataka, gde se svaka od njih može 

    pojedinačno  kompajlirati bez rekomplilacije ostatkaprograma

    - Takve kolekcije nazivaju se inkapsulacione

    (inkapsulacion) konstrukcije- sintaksni kontejneri za logički  povezane softverske resurse,gde se svaki od njih može kompajlirati pojedinačno 

    Složeni inkapsulacioni

     mehanizmi

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    13/29

      S l   o  ž   e   n i i   n   k  a   p  s   u l  a  c i   o   n i    m   e   h  a   n i  z    m i

    • Inkapsulacione konstrukcije  Ugnježdavanje potprograma

    programi se organizuju pomoću  ugnježdavanja  definicijapotprograma unutar većih  potprograma u kojima sekoriste

    Ovaj metod organizovanja programa koristi statički dosegi nije primarna inkapsulaciona konstrukcija koju koristesavremeni pj

     Ada, Pascal, FORTRAN 95

    Složeni inkapsulacioni

     mehanizmi

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    14/29

    • Inkapsulacione konstrukcije u programskom jeziku C

     – Ne pruža strogu poršku za inkapsulaciju ali se može simulirati 

     – kolekcija povezanih funkcija i podataka smešta  se uimplementacionu datoteku, koja se može nezavisno kompajlirati

     – Interfejs  impl. datoteke smešta  se u posebnu datoteku, tzv. headerfile ( .h file ). Header file sarži  sarži deklaracije funkcija i tipova. 

     – header file se uključuje  u klijentski kod (pomodu  #include specifikacije)

     – Ovaj pristup omogudava odvajanje specifikacije od implementacije

    Složeni inkapsulacioni

     mehanizmi

    15

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    15/29

    • Inkapsulacione konstrukcije u programskom jeziku C

    Primer:

      Header datoteka convert.h

    #define FACTOR ((double) 1.609344)double MileToKilometers( double miles );

    implementaciona datoteka convert.c

    #include “convert.h" double MileToKilometers( double miles ) {

    return FACTOR * miles;

    }

    15

    Složeni inkapsulacioni mehanizmi 

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    16/29

    •  Inkapsulacije konstrukcije u programskom jeziku C++- slično kao u C-u, sa header datotekama za razdvajanje

    specifikacije od implementacije

    - Problem pristupa neke operacije objektima dve klase. U

    C++ uvedene friends funkcije i klase

    - C++ dozvoljava da klase deklarišu  druge klase ilifunkcije kao “friends” 

    - “friends”  funkcije i klase imaju pristup privatnimčlanicama klase u kojoj su deklarisane kao friend

    Složeni inkapsulacioni

     mehanizmi

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    17/29

    Primer korišćenja friend funkcije za množenje matrice i vektora

    class Vector {

    friend Vector multiply(const Matrix&, const Vector&);

    ...

    };class Matrix {

    friend Vector multiply(const Matrix&, const Vector&);

    ...

    };

    // funkcija multiply definisana izvan definicija dve klase klasa

    Vector multiply(const Matrix& m1, const Vector& v1){

    ...

    };

    Složeni inkapsulacioni

     mehanizmi

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    18/29

    • Inkapsulacione konstrukcije u programskom jeziku Ada

    inkapsulaciona konstrukcija package  koji može  da sadr ži 

    više ATP-a

    Složeni inkapsulacioni

     mehanizmi

    l ž

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    19/29

    • Inkapsulacione konstrukcije u programskom jeziku C# –  Assemblies, veća konstrukcija od klase i koristi se od strane svih .NET

    programskih jezika

     –  Assembly se kreira u procesu kompilacije C# pj

    assembly A.cs

    B.cs

    CSC .exe

    .dll

    –  Assembly je kolekcija datoteka koje mogu biti DLL ili EXE

    DLL (Dynamic Link Library) je kolekcija klasa i metoda koje seindividualno povezuju sa izvršnim programom kada je potrebno(na zahtev)

    Složeni inkapsulacioni

     mehanizmi

    Sl ž i i k l i i

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    20/29

    Single File  Assembly

    Resources

    MSIL

    MetaData

    Manifest

     Assembly.dll

    Manifest – metapodaci o assembly-uMetapodaci – opisuju tipove i metode usamom kodu

     Assembly sadr ži kod u formi MSILinstrukcija i meta informacije u formimetapodataka. (samoopisujući unit )

    Članice  klase sa modifikatorompristupa internal, vidljive su u svimklasama u jednom assembly-a

    Složeni inkapsulacioni

     mehanizmi

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    21/29

      Imenovane inkapsulacije 

    druga vrsta inkapsulacija koja se koristi za

    konstruisanje velikih programa

    Složeni inkapsulacioni mehanizmi 

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    22/29

    • Imenovane inkapsulacije 

     – Veliki programi definišu  veliki broj globalnih imena, pamora postojati način  za organizovanje takvih imena u

    logičke grupe

     – Imenovane inkapsulacije  su logičke  inkapsulacije  i

    koriste se za definisanje dosega (namespace-a) za

    imena

    Složeni inkapsulacioni mehanizmi 

    Sl ž i i k l i i

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    23/29

    • Imenovana inkapsulacija u C++

    namespaces imenovana inkapsulacija reprezentuje se preko

    specifikacije namespace. Svaka biblioteka ima sopstveni namespace,

    a za njihovo kori[„enje  izvan namespace koriste se kvalifikovanaimena sa imenom namespace

    namespace MyStack {

    //deklaracije

    …. 

    }

    Primer stack: 

    Sve deklaracije za stack smeštene su

    u njegov sopstveni namespace blok

    Složeni inkapsulacioni

     mehanizmi

    Sl ž i i k l i i

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    24/29

     – Implemetaciona datoteka za ATP stack može da referencira

    deklarisana imena u namespace bloku preko operatoradosega ::

    MyStack::top

     – Umesto operatora dosega, klijent koristi using za imena izdrugih namespace-ova

    using namespace MyStack

    Složeni inkapsulacioni

     mehanizmi

    Sl ž i i k l i i

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    25/29

    • Imenovane inkapsulacije u programskom jeziku

    C#

    - imenovana inkapsulacija u C# je namespace

    - Namespace-ovi su programski elementi projektovaniprvenstveno za organizovanje programskog koda

    - mogu se organizovati u hijerarhijsku srukturu, koja se

    reprezentuje preko ugnježdavanja namespace-ova

    - Članice  namespace mogu da budu: klase, strukture,delegati, interfejsi

    Složeni inkapsulacioni

     mehanizmi

    Sl ž i i k l i i

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    26/29

    using  System; // deklaracije namespace

    namespace N1{namespace N2{

    class myExample{ public static void myPrint*(

    { Console.WriteLine(“primer poziva clanice namesp.”); 

    }}

    }

    class NamespaceCalling{ public static void Main ()

    {

    N2.myExample.myPrint();}

    }

    }  // Primer za ugnježdene namespacese-ove u C#

    Složeni inkapsulacioni

     mehanizmi

    Složeni inkaps lacioni

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    27/29

    • Imenovana inkapsulacije u programskom jeziku Java

     – Imenovana inkapsulaciona konstrukcija je package koji može  da sadrži više definicija klasa

     – Članice definisane u klasi koja je sadržana u package-u mogu biti private,public, protected ili su bez modifikatora pristupa, pa su u tom slučaju 

    vidljive za sve klase u paketu (package scope by default) – Deklaracija paketa: package myStack;

     – Klijent package-a referencira imena definisana u package-ukoristeći ili

    - puno kvalifikovano ime

    myStack.top- ili deklaraciju import, koja dozvoljava skraćene  reference za imena def. u

    package-u

    import myStack.*;

    Složeni inkapsulacioni

     mehanizmi

    Složeni inkapsulacioni

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    28/29

    •  imenovane inkapsulacije u programskom jeziku Ada

     – package se koristi kao imenovana inkapsulacije

     – Definiše se hijerarhija paketa, koji se memorišu u odgovarajuće hijerarijske direktorijume

    Složeni inkapsulacioni

     mehanizmi

  • 8/16/2019 Apstrakcije Podataka_Drugi Deo

    29/29