apstrakcije podataka_drugi deo
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