ASP Objektno orijentirano programiranje

  • View
    218

  • Download
    0

Embed Size (px)

Text of ASP Objektno orijentirano programiranje

  • 8/16/2019 ASP Objektno orijentirano programiranje

    1/46

    Uvod u objektno-orijentiranoprogramiranje u programskom

    8.4.2007 autor: dr. sc. Zvonimir Vanjak

  • 8/16/2019 ASP Objektno orijentirano programiranje

    2/46

    Evolucija programskih jezika

     prva generacija – strojni jezik

      –

     treća generacija – Pascal, C, Fortran, Algol, LISP, ...  uvodi se paradigma proceduralnog, strukturnog i modularnog programiranja

     pojavljuju se i višenamjenski jezici

     objektno-orijentirani jezici kao nova paradigma razvoja ( - Smalltalk, C++, Java, C#

       četvrta generacija – 4GL jezici

      jezici specijalizirani za određenu domenu problema

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 2 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    3/46

    Razvoj tipičnog programera

     uglavnom započinje učenjem nekog programskog jezika treće

    Basic, Pascal, C ,

     koristi se paradigma nestrukturiranog programiranja

      započinje se pisanjem malih i jednostavnih programa koji se sastoje odslijeda naredbi i djeluju nad zajedničkim skupom podataka

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 3 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    4/46

    Proceduralna paradigma - I

     osnovni korak je uvođenje funkcija koje su izgrađene kao skup naredbi i koje imaju dobro definiran ulaz i izlaz (već viđeno na PIPI-ju)

     rješavamo se problema ponavljanja programskog kôda!!! 

    definiramo ga na jednom mjestu i zatim samo pozivamo funkciju kad nam zatreba takvafunkcionalnost

    Glavni program

    Podaci

    Procedura 1 Procedura 2 Procedura 3

    Lokalni podaci Lokalni podaci Lokalni podaci

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 4 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    5/46

    Proceduralna paradigma - II

     primjeri:    – ,  funkcije za U/I – printf, fwrite  funkci e za rad s rafikom - DrawLine DrawCircle

     a što ako je netko već implementirao takve funkcije?!  možemo ih ednostavno iskoristiti!

    - većina razvojnih okruženja dolazi s ugrađenom gomilom biblioteka takvih funkcija  reusability – mogućnost ponovnog iskorištavanja programskog kôda

     “write once, use everywhere”

     ali, nije sve tako jednostavno   javlja se problem organizacije velikog broja funkcija u smislene cjeline!

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 5 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    6/46

    Modularno programiranje

     procedure srodne funkcionalnosti grupiraju se u module koji mogu imati vlastite odatke

    Modul 1 Program

    Procedura 1

     

    Modul 2Lokalni podaci

    Procedura 2 Procedura 3

    Podaci 1

    Lokalni podaci Lokalni podaci

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 6 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    7/46

    I dalje nije sve idealno!

     teško je napraviti modul da bude dobro definirana i zatvorena jedinica funkcionalnosti!

     programski jezici imaju vrlo “tanku” (i često nejasnu) definiciju modula  npr. u C-u modul može biti:

    - .h datoteka s pripadajućom .cpp datotekom

    - biblioteka funkcija koja se statički povezuje (linka) u naš program

     -  

     koncept modula je najčešće implementacijski detalj programskog okruženja u kojem radimo i nije potpuno integriran u sam programski jezik

     osnovni problem je što funkcije i podaci ugrađeni u modul nisu povezani u

    konkretne programske entitete koji bi predstavljali razumljiv i jasan koncept zara n e or sn e mo u a  standardni predstavlja gomilu struktura i funkcija a mi bismo željeli imati “nešto”

    kao: File Binar File TextFile ...

    Algoritmi i strukture podataka, 2006/07. 8.4.2007

     

    7 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    8/46

    Potreba za objektno-orijentiranom paradigmom

     stvar nije tako kompletno crna jer ovisi i o “razini” funkcionalnosti u rađeno u modul:   moduli “niske razine” (npr. U/I funkcije u C-u, funkcije za grafičko iscrtavanje

    u Windowsima) se svakodnevno (i uspješno) iskorištavaju u projektima diljem svijeta

    -  jasno definirani, s dobrom dokumentacijom i “izglačani” dugotrajnim korištenjem

      MASM (Microsoft Assembler) ima i varijable, i mogućnost definiranja

     zašto nam je onda uopće C zanimljiv? -  jednostavnija sintaksa, i (ipak) moćniji skup osnovnih naredbi

     traži se potpuno nova paradigma programiranja  “od ovor”: ob ektno-ori entirana aradi ma

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 8 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    9/46

    Malo povijesti

     Simula (1967.)  prvi programski jezik sa svojstvima objektno-orijentirane paradigme

      nam en en zgra n sus ava za s mu ac u  uveden pojam klase / razreda

     Smalltalk 1972.  prvi “pravi” (čisti) objektno-orijentiran programski jezik (“sve je objekt”)  razvijen u laboratoriju Xerox PARC

    -

     C++  “hibridni” objektno-orijentirani jezik nastao iz C-a - ispočetka se zvao “C s razredima” (“C

    ”  razvio ga je Bjarne Stroustrup (1983.) u Bell Labs

     inicijalna ANSI standardizacija je dovršena (tek) 1998., a 2003. je izdana verzija  trenutno se radi na razvoju novog standarda C++0x  C++ je “predak” danas široko korištenih jezika - Java, C# i VB.NET

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 9 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    10/46

    Kako ćemo “savladati” OOP?

     krećemo od (jednostavnog) problema koji ćemo riješiti u C-u

     

    koncepata OO paradigme vidjeti kako se oni mogu riješiti u C++

     problem:

     zadana je datoteka u kojoj se nalazi određeni (nepoznat) broj podataka(radi jednostavnosti, datoteka je slijedna formatirana i sadrži u svakom

     treba napisati program koji će učitati podatke iz datoteke u memoriju (u  –

    omogućiti njihovu obradu - s obzirom da odaci mora u ostati u memori i nakon učitavan a ni e mo uće

    Algoritmi i strukture podataka, 2006/07. 8.4.2007  jednostavno rješenje slijednog

    č

    itanja podataka (jedan po jedan) sve do kraja datoteke! 10 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    11/46

    Jednostavno rješenje u C-u

     rješenje:  

    ih ukupno ima  

     ponovno prolazimo kroz datoteku i iznova učitavamo podatke (s time da ih sada s remamo u alocirano ol e 

     ne zadovoljava zadani uvjet!!!  

    problem

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 11 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    12/46

    Bolje rješenje

     možemo koristiti funkciju realloc   .

    potrebi povećavamo tijekom učitavanja

      “ ”  pokazivač na alociranu memoriju

     

     dobro je “povezati” podatke – definiramo strukturu

    struct DinamickoPolje

    { int *Podaci; int BrojElem;

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 12 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    13/46

    Još bolje rješenje

     definiramo i određeni skup funkcija koje će raditi s tom strukturom   -

    - struct FILE (fopen, fscanf, fread , ...)

     

    int Inicijaliziraj (struct DinamickoPolje *Polje,

    int InicijalniBrojElem); void Izbrisi (struct DinamickoPolje *Polje); int PostaviNovuVelicinu struct DinamickoPol e *Pol e 

    int NoviBrojEl);

    Algoritmi i strukture podataka, 2006/07. 8.4.2007

     _ _ _ _ 

    13 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    14/46

    Što nije dobro?

     tehnički nedostaci implementacije u C-u:  

    - problem je što je ova struktura samo vrlo jednostavan “omotač” (engl. wrapper ) oko

    pokazivača („sakrili“ smo malloc i realloc od korisnika strukture, ali nismo definirali nikakvo dodatno ponašanje)

     pristup podacima ide preko izravnog korištenja pokazivača koji je dio s ru ure

    o e. o ac - nameće se primjenjivanje idioma get/set za dohvaćanje i postavljanje vrijednosti

    elemenata u ol u 

     poboljšanja:

       definiramo dodatne funkcije za rad sa strukturom

    Algoritmi i strukture podataka, 2006/07. 8.4.2007 14 / 46

  • 8/16/2019 ASP Objektno orijentirano programiranje

    15/46

    Primjer 

    struct DinamickoPolje {

    int *Podaci;  

    int MaxBrojElemenata; // koliki je maksimalno raspolozivi  prostor

    };

    int Inicijaliziraj (struct DinamickoPolje *Polje, int MaxBrojElem);

    void Izbrisi (struct DinamickoPolje *Polje);

    int PostaviNovuVelicinu (struct DinamickoPolje *Polje, int NoviBrojElem);

    vo os av emen s ruc nam c o o e o e, n n , int Vrijednost);

    int DodajElementNaKraj (struct DinamickoPolje *Polje, int Vrijednost);