Click here to load reader

Objektno orijentisano programiranje - racunske vezbe (prezentacije)

  • View
    77

  • Download
    2

Embed Size (px)

DESCRIPTION

Slajdovi sa racunski vezbi iz predmeta Objektno orijentisano programiranje na Elektronskom fakultetu u Nisu. Elfak.

Text of Objektno orijentisano programiranje - racunske vezbe (prezentacije)

  • Objektno-orijentisano programiranje

    Napredne tehnike programiranja u programskom jeziku C

  • Pokazivai Pokazivai predstavljaju poseban

    izveden tip podataka.

    Podatak tipa pokazivaa sari memorijsku adresu nekog drugog podatka.

    Deklaracija pokazivaa: *;

  • Operatori koji se koriste u radu sa pokazivaima Operator referenciranja (&) -

    odreuje adresu neke promenljive; Operator dereferenciranja (*) -

    odreuje vrednost promenljive na koju ukazuje neka pokazivaka promenljiva.

  • Primer

    int i=0, j=0;//promenljive su tipa int

    int *pi; //pi je pokazivac na int

    pi=&i; //pi ukazuje na promenljivu I

    *pi=2; //promenljiva na koju ukazuje pi

    // dobija vrednost 2, tj. i=2

    j=*pi; //j dobija vrednost 2 , j=I

    pi=&j; //pi dobija adresu promenljive j,

    //tj. ukazuje na j

  • Pokaziva tipa void Pokaziva tipa void (generiki pokaziva)

    moe da primi adresu bilo kog objekta u memoriji.

    Primer: int i=0;

    int *pi1=&i, *pi2;

    void *pv; //pokazivac na bilo koji tip

    pv=pi1; //pv ukazuje na i

    pi2=pv; //nemoguca dodela, greska

  • Konstanta NULL

    Konstanta NULL je definisana u header fajlu stdio.h i ima vrednost 0. Dodeljuje se pokazivakoj promenljivoj kada on ne ukazuje ni na jedan podatak u memoriji.

  • Korienje pokazivaa u programu U radu sa poljima, Za pristup podacima u dinamikoj

    zoni memorije,

    Za prenos argumenata funkcije.

  • Veza pokazivaa i polja Ime polja u programskom jeziku C je

    pokaziva na prvi element polja.

    Primer: int polje[10], *pok_polja, a;

    pok_polja=&polje[0]; //pok_polja=polje;

    a=polje[0]; //a=*polje; ili a=*pok_polja;

  • Adresna aritmetika

    Dozvoljene su sledee operacije nad okazivaima: dodela vrednosti jednog pokazivaa drugoma (samo

    ako su istog tipa);

    dodavanje ili oduzimanje celobrojnog podatka od vrednosti pokazivaa (ako je pokaziva pa=&a[k], pa+1=&a[k+1] bez obzira kolika je duina podatka a ne dodaje se bukvalno 1 ve duina podatka odgovarajueg tipa);

    uporedjivanje 2 pokazivaa (samo ako ukazuju na elemente istog niza);

    poredjenje pokazivaa sa nulom (ispituje da li pokaziva uopte uakzije na neki objekat umesto 0 koristi se konstanta NULL);

  • Zadatak 1.

    Napisati program na C-u za izraunavanje skalarnog proizvoda dva vektora sa po N elemenata. Elementima vektora pristupati korienjem pokazivaa.

  • Dodela memorijskog prostora podacima

    1. Statika prostor za smetanje vrednosti promenljive se rezervie kada se pone sa izvrenjem bloka u kojem je ona definisana, a oslobadja se po zavretku izvrenja tog bloka. Kada se polja pamte u statikoj zoni memorije, potrebno je predvideti njegovu maksimalnu veliinu niza i toliki se prostor pri svakom izvrenju programa i za sve vreme izvrenja programa rezervie za smetanje njegovih elemenata.

  • Dodela memorijskog prostora podacima

    2. Dinamika prostor za smetanje podatak u memoriji se zauzima u toku izvrenja programa. U tom sluaju u statikoj zoni memorije definie se jedan pokaziva na taj deo memorijskog prostora. U toku rada programa moe da se rezervie mem. prostor na koji taj pokaziva ukazuje, da se menja veliina tog mem. prostora i da se on oslobadja te da se u nastavku izvrenja programa koristi za pamenje drugih podataka.

  • Funkcije za upravljanje dinamikom zonom memorije

    Deklarisane su u header fajlu stdlib.h. void* malloc(long velicina)

    rezervie deo memorijskog prostora zadate veliine. Veliina se zadaje brojem bajtova. Funkcija vraa generiki pokaziva (tipa void*) na rezervisani memorijski prostor, ili NULL ako rezervacija ne moe da se izvri. Sadraj rezervisanog prostora je nedefinisan.

  • Funkcije za upravljanje dinamikom zonom memorije

    void* calloc(int broj,int velicina) rezervie deo memorijskog za pamenje navedeni broj elemenata zadate veliine. Funkcija vraa generiki pokaziva (tipa void*) na rezervisani memorijski prostor, ili NULL ako rezervacija ne moe da se izvri. Rezervisani deo memorisjkog prostora se inicijalno popunava nulama.

  • Funkcije za upravljanje dinamikom zonom memorije

    void* realloc(void* pokazivac, int velicina) Ova funkcija menja veliinu memorijskog prostora na koji ukazuje zadati pokaziva na zadati veliinu (tj. na zadati broj bajtova). Veliina memorisjkog prostora na koji ukazuje navedeni pokaziva se na ovaj nain moe i da se smanji i da se povea.

    void free(void* pokazivac) oslobadja deo memorijskog prostora na koji ukazuje davedeni pokaziva.

  • Zadatak 2.

    Napisati program na C-u za zamenu prve pojave podstringa s1 u stringu s stringom s2. Stringovi s1 i s2 mogu biti razliitih duina. Sve stringove pamtiti u dinamikoj zoni meorije i za svaki od njih u svakom trenutku treba da bude rezervisano onoliko memorijskog prostora koliko je potrebno za pamenje njihovih vrednosti.

  • Matrice u dinamikoj zoni memorije U statikoj zoni memorije matrica se pamti u

    linearizovanom obliku (matrica reda mxn se pamti kao niz duine m*n - linearizacija se vri po vrstama). U dinamikoj zoni memorije matrica moe biti predstavljena na tri naina:

    linearizovano matrica se zamenjuje vektorom odgovarajue duine; tako to se u dinamikoj zoni memorije rezervie

    prostor za onoliko nezavisnih vektora koliko vrsta ima matrica, a u statikoj zoni memorije se matrica definie kao vektor pokazivaa na vrste; tako to se i vrste i vektor pokazivaa na vrste smetaju u dinamiku zonu memorije u statikoj zoni memorije u tom sluaju postoji samo pokaziva na vektor pokazivaa na vrste.

  • Linearizovano smetanje matrice u dinamikoj zoni memorije

    ematski prikaz na ovaj nain zapamene matrice:

    statika zona memorije dinamika zona memorije

    a

    ...

    mxn elemenata

  • Linearizovano smetanje matrice u dinamikoj zoni memorije Rezervacija prostora:

    int *a,m,n,i,j;

    a=(int*)calloc(m*n,sizeof(int));

    Pristup elementima matrice: pomou indeksa:

    a[n*i+j] korienjem pokazivaa:

    *(a+n*i+j)

  • Kombinovano smetanje matrice u statikoj i dinamikoj zoni ematski prikaz smetanja podataka:

    statika zona dinamika zona a

    ...

    m pokazivaa n elemenata u nizu

  • Kombinovano smetanje matrice u statikoj i dinamikoj zoni Rezervacija prostora:

    int *a[10],m,n,i,j;

    for (i=0;i

  • Kompletno smetanje matrice u dinamokoj zoni memorije ematski prikaz smetanja podataka: dinamika zona memorije

    a

    ...

    m pokazivaa po n elemenata u nizu (vrsti)

  • Kompletno smetanje matrice u dinamokoj zoni memorije Rezervacija prostora:

    int **a,m,n,i,j;

    a=(int**)calloc(m,sizeof(int*));

    for (i=0;i

  • Prenos parametara korienjem pokazivaa U programskom jeziku C-u svaki parametar

    elementarnog tipa se prenosi funkciji po vrednosti. To podrazumeva da se pri pozivu funkcije pravi kopija stvarnog argumenta u OM, funkcija radi sa tom kopijom i u trenutku zavretka rada funkcije kopija se brie iz operativne memorije. To automatski onemoguava da parametar funkcije bude promenjen u funkciji, a da to bude vidljivo u pozivajuem modulu.

    Kada se javi potreba da se se promena parametara u funkciji vidi u pozivajuem modulu, za prenos parametara se koriste pokazivai.

  • Zadatak 3.

    Napisati funkciju na C-u za zamenu

    vrednosti dveju promenljivih.

  • Strukture

    Struktura je sloeni tip podataka koji sadri elemente razliitih tipova.

    Definicija strukture struct

    {

    ;

    ;

    ;

    };

  • Primer

    struct student

    {

    char prezime[20];

    char ime[20];

    char datumrodjenja[8];

    int godina;

    int ocena[30];

    };

  • Definicija podataka tipa strukture

    struct student student1,

    *ptrstudent, druga_godina[250];

  • Operacije nad strukturama

    pristupanje lanovima strukture korienjem operatora . i ->

    student1.godina = 3; ptrstudent->ocena[0]=8;

    odreivanje adrese strukture korienjem operatora & ptrstudent=&student1;

    odreivanje veliine strukture pomou sizeof operatora

    ptrstudent=(struct student*) malloc( sizeof(struct student));

    dodeljivanje svih elemenata jedne strukture drugoj strukturi istog tipa

    student1=treca[i];

  • Zadatak 4.

    Napisati program na C-u za obradu podataka sa prijemnog ispita na jednom fakultetu. Program treba da tampa rang listu studenata koji su poloili prijemni ispit. Rang lista sadri imena, prezimena, matine brojeve i ukupne brojeve poena studenata i uredjena je u nerastuem redosledu prema ukupnom broju poena. Student polae prijemni ispit iz dva predmeta i smatra se da je poloio prijemni ispit ukoliko je iz oba predmeta osvojio najmanje polovinu od maksimalnog broja bodova.Ukupan broj bodova se dobija kao zbir bodova koje student ima na osnovu uspeha iz srednje kole i broja bodova osvojenih iz oba predmeta na prijemnom ispitu.

  • Objektno-orijentisano programiranje

    (Vebe 1. as)

  • Objekti svuda oko nas

    U svakodnevnom ivotu svet spoznajemo kao skup objekata koji nas okruuju i koji medjusobno interaguju na razliite naine. Moemo li da definiemo objekat?

  • ta je objekat? Svaki objekat je odredjen:

    skupom svojih osobina (karakteristika ili atributa),

    skupom funkcija koje moe da obavlja i

    implementa