You are on page 1of 9

MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK

U TRAVNIKU

Šk. 2018/2019. god

- SEMINARSKI RAD –

PREDMET: Programiranje i programski jezici


TEMA: Umetnuti funkcijski članovi
Dodjela prava pristupa
Formiranje javnog interfejsa korištenjem prava pristupa

Učenica: Čehić Amila Profesor: Arnautović Mevludin

Travnik, April 2019.


1. UVOD

Kroz ovaj rad upoznati ćemo se sa tri različite teme koje su međusobno povezane, a to su
umetnuti funkcijski članovi, dodjela prava pristupa te formiranje javnog interfejsa korištenjem
prava pristupa. U nastavku ovog rada pokušati ću detaljno opisati svaki od ovih djelova,
odnosno objasniti.
Table of Contents
1. UVOD ............................................................................................................................................... 3
2. TEME................................................................................................................................................ 5
2.1. UMETNUTI FUNKCIJSKI ČLANOVI ............................................................................................ 5
2.2. DODJELA PRAVA PRISTUPA ..................................................................................................... 6
2.3. FORMIRANJE JAVNOG INTERFEJSA KORIŠTENJEM PRAVA PRISTUPA ..................................... 8
2. TEME

2.1. UMETNUTI FUNKCIJSKI ČLANOVI

Ako je funkcija kratka tako da njena definicija stane u nekoliko redaka, onda je njenu definiciju
moguće navesti unutar same deklaracije klase. Time dobijamo umetnutu definiciju (engl. inline
definition) funkcijskog člana. Prepišimo našu klasu Vektor tako da funkcija MnoziSkalarom() bude
umetnuta.

class Vektor {
public:
float ax, ay;
void MnoziSkalarom(float skalar) {
ax *= skalar;
ay *= skalar;
}
};
Razlozi radi kojih je poželjno funkcijske članove učiniti umetnutima su isti kao i za obične funkcije, a
svode se na brže izvođenje koda te (u principu) kraći prevedeni kod. Ako je nezgodno smjestiti
umetnutu funkciju u samu definiciju klase, isti efekt se može postići ključnom riječi inline kao u
sljedećem primjeru.

class Vektor {
public:
float ax, ay;
inline void MnoziSkalarom(float skalar);
};
void Vektor::MnoziSkalarom(float skalar) {
...
}
Rezultat će prilikom ovakve deklaracije biti isti. Ključna riječ inline se mogla ponoviti prije definicije
funkcijskog člana. Umetnuti funkcijski članovi su vrlo važni u C++ jeziku, jer se često primjenjuju za
postavljanje i čitanje podatkovnih članova koji nisu javno dostupni. Prevoditelj koji ne podržava
dovoljno dobro umetnute funkcijske članove može vrlo lako generisati kod značajno degradiranih
performansi.
2.2. DODJELA PRAVA PRISTUPA

U prethodnim primjerima sigurno ste primijetili upotrebu ključne riječi public koja do sada nije bila
objašnjena. Ona služi za definiranje prava pristupa članovima klase. Svaki član može imati jedan od tri
moguća načina pristupa: javni (engl. public), privatni (engl. private) i zaštićeni (engl. protected). Prava
pristupa se dodjeljuju tako da se u tijelu klase navede jedna od tri ključne riječi public, private i
protected iza kojih se stavlja dvotačka. Svi elementi, dakle funkcijski i podatkovni članovi te
deklaracije ugniježđenih klasa koji slijede iza te riječi imaju pravo definirano tom riječi. Zatim se može
navesti neka druga od gore navedenih ključnih riječi, iza koje slijede elementi koji imaju drukčije
pravo pristupa. Evo primjera:

class Pristup {
public:
int a, b;
void Funkcija1(int brojac);
private:
int c;
protected:
int d; int Funkcija2();
};

Prava pristupa određuju koji će članovi klase biti dostupni izvan klase, koji iz naslijeđenih klasa, a koji
samo unutar klase. Time programer tačno određuje „publiku“ za pojedini dio objekta. Javni pristup
se dodjeljuje ključnom riječi public. Članovima koji imaju javni pristup može se pristupiti izvan klase.
Cjelobrojni elementi a i b, te Funkcija1() se mogu pozvati tako da se definira neki objekt klase Pristup
te im se pomoću operatora . pristupi. Član c ima privatni pristup dodijeljen ključnom riječi private. U
vanjskom programu te u klasama koje su naslijeđene od klase Pristup on nije dostupan - njemu se
može pristupiti samo preko funkcijskih članova klase Pristup. Zaštićeni pristup se određuje ključnom
riječi protected te se time ograničava mogućnost pristupa članu d i funkcijskom članu Funkcija2().
Njima se ne može pristupiti iz vanjskog programa preko objekta. Dostupne su samo u funkcijskim
članovima klase Pristup i klasama koje su naslijeđene od klase Pristup. Redoslijed navođenja prava
pristupa je proizvoljan, a pojedine vrste pristupa je moguće ponavljati. Dozvoljeno je primjerice
definirati prvo elemente s javnim, zatim elemente s privatnim te ponovo elemente s javnim
pristupom. Članovi navedeni u deklaraciji klase odmah nakon otvorene vitičaste zagrade do prve
ključne riječi za specifikaciju prava pristupa (ili do kraja klase ako prava pristupa uopće nisu
navedena) imaju privatni pristup. Ako se negdje u programu pokuša nedozvoljeno pristupiti
privatnom ili zaštićenom elementu, dobit će se pogreška prilikom prevođenja „Za element 'xx' nema
prava pristupa“. Da bismo ilustrirali korištenja prava pristupa, stvorit ćemo objekt x klase Pristup te
ćemo pokazati kojim se podatkovnim članovima iz kojeg dijela programa može pristupiti.
2.3. FORMIRANJE JAVNOG INTERFEJSA KORIŠTENJEM PRAVA PRISTUPA

Osobi koja se po prvi put susreće sa C++ jezikom može se učiniti da su komplikacije oko prava
pristupa nepotrebne, te da samo unose dodatnu entropiju u već ionako dovoljno kaotičan način
programiranja, koji više sliči Brownovom gibanju. To je i donekle tačno u programima od nekoliko
stotina redaka koji se napišu u jednom popodnevu. No prilikom razvoja složenih aplikacija sa
stotinama hiljada linija koda gdje cijeli programerski tim radi na projektu, prava pristupa
omogućavaju programerima da odrede što je dostupno suradnicima koji koriste objekte, a što njima
samima. Članovi klase s javnim pristupom formiraju javni interfejs objekta. Do javnog interfejsa
programer dolazi analizom uloge pojedinog objekta i načina njegovog korištenja. Ono se zatim može
obznaniti suradnicima koji tačno znaju što objektu trebaju pružiti te što od njega mogu dobiti. Sadržaj
objekta za njih predstavlja „crnu kutiju“. Implementaciju klase programer piše na osnovu javnog
interfejsa, čime javni interfejs postaje nezavisan o implementaciji. Kasnije se analizom može
ustanoviti da neka druga implementacija omogućava bolje performanse programa. Objekt se može
jednostavno preraditi, dok ostatak koda ne treba dirati on vidi samo javni interfejs objekta koje
ostaje neizmijenjeno. Da bismo to pojasnili, vratimo se na primjer s vektorima te preradimo klasu
tako da njena implementacija bude nezavisna od javnog interfejsa:

Definicija funkcijskog člana MnoziSkalarom() je izostavljena jer se ne mijenja. Implementacija klase


pretpostavlja da se vektor pamti u Descartesovim koordinatama. Javni interfejs ništa ne govori o
koordinatama, ono samo omogućava da se svakom vektoru utvrdi njegova projekcija na x i na y os,
što je moguće nezavisno o koordinatnom sistemu u kojem je vektor zapamćen. Sada je moguće
promijeniti koordinatni sistem u polarni, ustanovi li se da takav prikaz omogućava bolja svojstva
prilikom izvođenja. I na temelju takvog načina pamćenja vektora mogu se implementirati svi elementi
javnog interfejsa. Funkcijski članovi DajX(), DajY() i PostaviXY() su napisani kao umetnuti, kako bi se
postiglo brže izvođenje programa. Većina savremenih prevoditelja će generirati isti kod kao da se
direktno pristupa č

lanovima ax i ay tako da se performanse programa ne degradiraju.

You might also like