6 Uvod u Objektno-Orijentisano Modeliranje Softverski Inzenj

  • Upload
    milanpk

  • View
    54

  • Download
    0

Embed Size (px)

DESCRIPTION

Uvod u Objektno-Orijentisano Modeliranje

Citation preview

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    Kao to je u poglavlju 3 objanjeno, objektno-orijentisani model razmiljanja je idealna osnova za softversko reavanje inenjerskih problema. Konkretno reenje inenjerskih praktinih problema zahteva znanja iz objektno-orijentisanog pristupa navedena u poglavlju 3, koja sada treba primeniti.

    Osnova svakog objektno-orijentisanog reenja je takozvano objektno-orijentisano

    modeliranje (OOM), kojim se definie principijelni postupak reavanja, ali takoe i opte-primenljivi mehanizam, ili, bolje reeno, pogodan matematiki opis problema, koji omoguava formalnu, ali takoe jasnu i preciznu formulaciju problema. Posledino se moe izvriti prevoenje u softver pomou razumljivog i objektno-orijentisanog programskog jezika (u naem sluaju JAVA).

    Pre nego to se pree na formalizme i notaciju OOM, trebalo bi - radi pravilne klasifikacije

    objektno-orijentisanih metoda - kratko obraditi istorijski razvoj.

    6.1. Istorijski razvoj objektno-orijentisanih metoda

    Razvoj i projektovanje softvera brzo je od informatiara nazvan inenjerstvom i mogao se izrazom programiranje samo nepotpuno definisati: da bi se dolo do toga da je softver pravi inenjerski proizvod uporediv sa drugim inenjerskim proizvodima na primer, mostom, mainom, ureajem, i sl. i da bi se uinilo razumljivim da je proces stvaranja softvera slian drugim inenjerskim procesima na primer procesu konstruisanja, uveden je izraz softversko inenjerstvo. Ovaj izraz bi trebalo da objasni da softver mora da bude konstruisan po strogo postavljenim principima i kontrolisan jasno definisanom sistematikom, uz omoguavanje upravljanja njime.

    Objektna orijentacija je najnovije dostignue u razvoju softverskog inenjerstva: mnogi

    poznati principi softverskog inenjerstva su pritom preuzeti (npr. princip modularnosti, princip lokalnosti i dr.) i povezani sa novim idejama (jedinstvo podataka i operacija, asocijacije, izmena novosti, itd.). Ovo je imalo za posledicu da se se pored numerikih problema vie nego do tada nenumeriki (kognitivni, tj. podacima orijentisani) problemi mogli reavati; ak su i humanoidni aspekti (npr. interaktivnost, bolja uslunost, individualnost) mogli biti bolje realizovani nego kod konvencionalnog softverskog inenjerstva.

    Ideja objektne orijentacije je pritom stara vie od 30 godina: upravo ezdesetih godina

    prolog veka stvoren je prvi objektno-orijentisani programski jezik, SIMULA. No tek sa programskim jezikom SMALLTALK, poetkom osamdesetih, ire je postao poznat objektno-orijentisani model miljenja. Posle toga su nastali mnogi objektno-orijentisani programski jezici

    47

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    48

    (Objective C, C++, Eiffel, Clos, Object Pascal, Object Cobol, Ada 9 i JAVA). Sledei grafikon prikazuje razvojni tok objektno-orijentisanih jezika u kontekstu sa ostalim programskim jezicima.

    Istorijski razvoj programskih jezika

    Iako se objektno-orijentisani programski jezici ve dugo vreme upotrebljavaju, iznenaujue

    je da je objektno-orijentisano modeliranje, koje je u sutini koncepcionalna osnova objektno-orijentisanog programiranja, nastalo mnogo docnije. Prvi udbenici o OOM pojavili su se tek poetkom devedesetih. S time u vezi se mogu posebno navesti knjige autora Von Boocha, Coad/Yourdon, Rumbaugh i dr., Wirfs-Brock/Johnson, Shlaer/Mellor i Jacobsen.

    Zatim se pojavio itav niz razliitih, meusobno konkurentnih OOM-metoda. Sledei

    grafikon daje razvoj pojedinih metoda sa naznakom autora pojedinih metoda i pripadajuom skraenicom metode.

    Razvoj OOM (objektno-orijentisane metode)

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    49

    Posebno su dominantne dve metode:

    Object-Modeling Technique (OMT Tehnika za objektno modeliranje), autora Rumbaugha, i

    Object Oriented Design (OOD metoda Booch-a).

    OMT se jako oslanja na klasine struktuirane metode, dok je OOD vie orijentisana ka komercijalnim i vremensko-kritinim primenama.

    Godine 1995. su saradnjom Rumbaugha i Boocha OMT i OOD metoda prevedene u jedan

    zajedniki oblik, takozvani Unified Method (UM), ujedinjeni metod. Kada je i Jacobsen, takoe pristalica OOM pristupio grupi Booch/Rumbaugh (Trijumvirat se nazvao tri Amigosa) i uveo sopstvene principe, posebno Use Cases (tj. sluajeve primene), nastao je Unified Modelling Language (UML) (Jedinstveni jezik za modeliranje), i kao Verzija 1.0 1997. godine stigao kod Object Management Group (konzorcijum za popularizaciju Objektne tehnologije) za standardizaciju i odmah poeo da se razvija kao priznati standard za modeliranje.

    UML je zadovoljio sve uslove jednog konzistentnog opisnog matematikog alata i

    podravao obe oblasti virtuelnog programiranja, tehniku analize i dizajna projektovanja.

    Bazirajui se na definisanoj sistematici i formalnoj notaciji, moe se pomou UML-a od pojedinog problema razviti odgovarajui meta-model (tj. jedan slikoviti, ali od nepotrebnih detalja abstrahovan model problema), koji se relativno lako, poto je konsekventno objektno-orijentisano postavljen, bez znaajnijih gubitaka informacija, pomou objektno-orijentisanog jezika prevesti u izvrni program. Striktna konzistentnost objektne orijentacije, od analize preko dizajna do programiranja, omoguuje ak i automatsko generisanje programskog koda. Tipian primer za to je razvojni alat Together J, pomou koga se metamodel razvijen pomou UML notacije moe automatski prevesti u jezik JAVA i obrnuto.

    6.2. Modeliranje pomou UML i prevoenje u programu JAVA

    Na osnovu injenice da se UML u meuvremenu razvio u svetski priznati standard, u Inenjerskoj informatici je izabran za standardni jezik za opis problema, a u oblasti programiranja mu je data prednost. Drugim reima, daje se prednost objektivno-orijentisanom modeliranju

    Problem

    Reenje problema Programiranje

    Analiza

    Dizajn

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    50

    problema, kojim se omoguava misaoni prodor u reenje problema. Tek poto je taj prodor uspean, okreemo se programiranju problemskog reenja, na osnovu metamodela notiranog u UML jeziku. Da bi se ovaj kolski model mogao slediti, moraju se izloiti najvaniji elementi i najvaniji formalizmi UML jezika.

    6.2.1. Klase i objekti Posebni oblici klasa

    Objekti i klase su ve kratko informaciono obraeni (videti poglavlje 3), ali su za konkretno reavanje problema na osnovu UML neophodni jo neki detalji i pojedinosti.

    Izlazni rezultat UML jezika su objekti, koji kao to znamo predstavljaju razumljive

    abstrakcije stvari iz odgovarajueg okruenja (iz domena problema) i dobijaju se eliminisanjem nepotrebnih pojedinosti (detalja). Pored toga znamo da objekti imaju osobine koje sadre s jedne strane atribute, s druge strane operacije, tj. metode (kao i funkcionalnost) i da su veze (asocijacije) izmeu objekata vrlo vane.

    Za rad sa modelima objekata su i klase, koje ine objekti iste semantike i stoje u vezi sa

    drugim klasama. Uvoenjem klasa, koje predstavljaju plan gradnje, pomou koga se mogu automatski izvesti tj. proizvesti konkretni, nezamenljivi primeri klasa, postaje nepotrebno pojedinano koncipiranje svakog objekta (kao kod klasinog modela razmiljanja). Objekti pritom fiziki zauzimaju mesto u memoriji odgovarajue planu gradnje (strukturi) klase, radi docnije realizacije na raunaru.

    Ukoliko su gore obuhvaeni osnovni koncepti relativno brzo objanjeni, moe se njihov

    nain funkcionisanja razjasniti na konkretnim primerima; ovde e biti razmotrena dva mala praktina problema.

    Primer (nauno-popularni):

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    51

    injenino stanje Jedna krava, kao Objekt, daje mleko; mnogo krava, kao Objekti iste semantike daju isto tako

    sve mleko, posedujui pritom iste osobine i operacije (davati mleko), to sugerie da se u OOM (Object Oriented Modeling) moe modelirati jedna Klasa Krava.

    Notacija U UML notaciji je prihvaeno da se klase i objekti predstavljaju pravougaonicima. Pritom se

    pojedini pravougaonici obeleavaju imenima klase odnosno objekta i to masnim slovima (bold) sa poetnim velikim slovom. Za razliku od imena klasa, imena objekata su podvuena.

    Tako su sve gorenavedene krave, iako svaka za sebe nezamenljiva, nastale po projektu

    krava, tako da su one takozvane instance (objektne instance) klase (Objektne klase) Krava. Izrazi Instanca tj. Instanciranje baziraju se na slobodnom prevodu engleskog izraza instance za objekte; ispravnije bi bilo re instance prevesti sa egzemplar ili primer (primer objekta).

    Odnos izmeu instanca jedne klase i njoj dodeljene klase moe se predstaviti isprekidanom

    strelicom > pri emu svaka strelica ima znaenje instance-of ili primer-od. Primer (iz projektovanja noseih konstrukcija)

    injenino stanje Za objekte Nosa, Nadvratnik, Konzola, modelira se klasa greda, poto se sva tri

    objekta po teoriji konstrukcija u smislu teorije deformacije mogu obuhvatiti gredama optereenim na savijanje.

    Nosa 1

    Rigla 2

    Konzola 3

    Nosa 1 Rigla 2 Konzola 3

    G r e d a

    instance_ofinstance_of

    instance_of

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    52

    Apstraktne klase

    Primer (Projektovanje nosaa) Primer za to da se klase mogu koristiti kao osnova za druge klase (podklase) i tek onda iz

    njih izvesti instance je klasa Nosei elemenat. On direktno ne ini nijedan konkretni objekat, ve preputa kao via klasa kreiranje svojim podklasama Greda, Ram, Ploa, Platno, itd. Ovakve klase, koje ne proizvode direktno objekte, nazivaju se apstraktne klase. Apstraktne klase predstavljaju esto opte izraze. Apstraktne klase su nepotpune, poto ne sadre nikakve atribute niti operacije.

    Notacija Apstraktne klase se, kao i sve druge klase, oznaavaju pravougaonikom. Da bi se naznailo

    da se radi o apstraktnoj klasi, ispod imena klase - uokvireno vitiastim zagradama - stavlja oznaka Apstrakt. Za apstraktnu klasu Nosei elemenat bie tada sledea notacija:

    Paketi

    Uvoenjem veeg broja klasa nastaje kao to se moe pretpostaviti - mrea klasa. Tako se moe razmatrati jedna opta mrea klasa (stablo klasa), bez ulaenja u detalje.

    Ukoliko se iz logikih, strukturalnih, organizacijskih ili drugih razloga klase spajaju u vee strukture, nastaju tzv. paketi ili packages (zvani takoe i podsistemi, subsystems). Paketi mogu pritom opet sadrati druge pakete. Paketi omoguavaju time struktuiranje problema i predstavljaju sredstvo za struktuiranje klasa.

    Klasa Klasa

    Paket

    Klasa

    Klasa

    Klasa KlasaPaket

    Nosa{apstrakt}

    Greda Ram Ploa Ljuska

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    53

    Notacija Paket se oznaava kao kartica kartoteke sa voicom; ime paketa se unosi u sredinu voice.

    Zavisnosti izmeu paketa se oznaavaju isprekidanim strelicama. Primer (Statika)

    Paketi igraju u programiranju pomou JAVA jezika vanu ulogu. Zato je za formiranje paketa predviena posebna kljuna re package. Da bi se uzela u obzir pravilna korelacija izmeu klasa u paketu i posebno definisanih klasa, mora se paziti na pravila pri davanju imena i znaenje strelica u strukturi paketa.

    Paketi koji se isporuuju sa programom JAVA i koji poveavaju relativno mali vokabular

    JAVA programa imaju karakter biblioteka. Osam paketa (Application Program Interfaces - API) stoje na raspolaganju u JAVA (Version 1.0.2).

    java.applet za primenu apleta java.awt apstraktne windows alatke za postavljanje grafikih korisnikih

    povrina java.awt.image obrada slika java.awt.peer za preslikavanje awt na drugi sistem java.io ulaz/izlaz java.lang osnovni sastavni delovi jezika java.net za mrene klase java.util za razliite strukture podataka i pomone klase

    6.2.2. Detalji: atributi, operacije, osiguranja, kapsuliranje podataka

    Da bi se osobine klasa tj. objekata mogle preciznije utvrditi, potrebne su jo neke osobine. To su:

    atributi (podaci), metode (operacije), osiguranja (uslovi).

    Atribute obezbeuju podaci. Atributi mogu imati razliite vrednosti i tako definisati

    unutranje stanje instanci za jedno odreeno vreme. U gore obraenom primeru Greda, geometrijske veliine Duina, Visina, irina su vani atributi za statiko ponaanje (statino stanje) tj. gradnju (stanje gradnje). Pored ovih, mogu postojati i drugi atributi.

    Visokogradnja

    Jednopojasni ram Viespratni ram Jednopojasni nosa

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    54

    Metode, nazvane i operacije, govore nam o tome kako se objekti ponaaju i koje osobine poseduju (funkcionalitet). Metode imaju algoritamski karakter, poto one po unapred datoj emi obrauju podatke. Vezano za primer Greda su prorauni povrine preseka, zapremine ili krive savijanja (elasticitet) tipine metode; ali takoe i komplikovani postupci, kao to je ugradnja grede u noseu konstrukciju, mogu se formulisati kao operacije. Metode su sline funkcijama i procedurama, poznatim u klasinom programiranju, ali se od njih prilino razlikuju, jer su u relaciji Klase-Objekti-Strukture znaajno nezavisnije od klasinih funkcija i procedura (ove stoje stalno pod kontrolom jedne jedinice koja se moe uvek pozvati i kojoj se kontrola po izvravanju vraa nazad!)

    Osiguranja (prava pristupa) su uslovi, formulama sline premise ili druga pravila, koja

    objekti moraju na razumljiv nain ispuniti, da bi se izbegla mogua greka. Na primer, kod primera Greda, geometrijska osiguranja vrste Duina >> irina, tj. Duina >> Visina bi bila razumljiva. Jedan fundamentalni princip reavanja problema kod objektno-orijentisanog modeliranja je da se atributi objekata tako organizuju da mogu biti odgovorni samo nad specijalnim objektnim metodama. Drugim reima: direktni pristup atributima sa mesta izvan odreenih objekata se prekida. Ovaj konstrukcioni princip se naziva

    Information hiding (skrivanje informacija), Data Encapsulating (kapsuliranje podataka,

    Datenkapselung nemaki). Na primeru Greda se moe princip enkapsulacije kratko objasniti. Unutranja struktura

    objekta Rigla 2 sa svojim atributima i metodama moe se, na primer, predstaviti na sledei nain:

    Kao to se raspoznaje, atributi Duina, irina, Visina su u sutini metodama koje deluju kao kvazi-ljuska zatieni od direktnog pristupa spolja. Konsekventnim pridravanjem principa enkapsulacije poveava se sigurnost pri razvoju softvera, a takoe i ponovna upotrebljivost, proirljivost i pogodnost odravanja. To su osobine koje znaajno utiu na cenu softvera.

    Slina struktura kao za objekat Nadvratnik 2 moe se dati i za objekat Nosea greda-1,

    tako da se za sve objekte klase Greda mogu primeniti iste metode (izracunatiA, izracunatiV, itd.) sa istim imenima metoda.

    Duina irina

    Visina

    . .

    Rigla 2

    Metod

    Atribut

    A = PovrinaV = Zapremina W = Teina

    Ugraditi

    Izraunati A

    Izraunati V

    Izraunati W

    ::

    :

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    55

    Ukoliko se neki objekat nekom porukom, jedinstvenim mehanizmom za komunikaciju izmeu objekata, aktivira, on reaguje izvravanjem neke njemu dodeljene metode, pri emu se mogu opet aktivirati i drugi objekti.

    Iz sledeeg primera se jasno vidi razlika u klasinom proceduralnom (ALGOL, FORTRAN,

    BASIC, PASCAL, C, ...) i objektno-orijentisanom pristupu.

    Objekat klase "Greda" objektno-orijentisani smisao:

    metode istog naziva i istih osobina za objekte razliitih klasa (polimorfija)

    proizvesti

    . . .

    proceduralni smisao:za svaki objekat se mora kreirati sopstvena procedura sa razliitim imenom

    potporna greda k

    konzola j

    zaklopna greda i

    izraunati A

    izraunati V izraunati W

    izraunati A

    Duina irina

    Visina

    . .

    Rigla 2 Nosa 1

    Duina irina

    Visina

    . .

    Izraunati A

    Izraunati V Izraunati

    W

    : : Ugraditi

    ::

    : : Ugraditi

    Izraunati A

    Izraunati V Izraunati

    W

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    56

    Treba napomenuti da kako kod atributa, tako kod metoda, izmeu atributa objekata i atributa klasa, kao i izmeu metoda objekata i metoda klasa traba initi razliku. Atributi, koji vae za sve objekte jedne klase, dodeljuju se klasi, pri emu svi objekti te klase imaju pristup atributima te klase. Slino vai i za metode. To znai da jedan atribut klase egzistira jednom za sve instance te klase, da se moe iz svake pojedine instance promeniti i da je ta promena odmah raspoznatljiva za sve druge instance te klase.

    U sledeem primeru, koji se sastoji iz nadklase Greda i podklasa Drvena greda i

    Betonska greda, moe se uvesti atribut Materijal kao promenljiva klase (to se u JAVA postie pomou takozvane static-definition) i definisati metoda za izdavanje materijala kao metoda klase. Atributi Duina, irina, Visina, kao i proraunske metode su nasuprot tome definisane specijalno za nivo objekata.

    Notacija Atributi, metode i osiguranja se pri modeliranju klasa unose po strogo definisanoj notaciji.

    Za atribute i metode su pritom, unutar pravougaonika predvienog za predstavljanje klase - izvan rubrike za ime klase i razdvojeno jednom horizontalnom linijom predviene sopstvene rubrike (videti sledeu principijelnu skicu).

    Atributi se unose najmanje svojim imenom, pri emu je utvreno da imena atributa poinju malim slovom. Pored imena u daljem postupku se daje tip atributa (celobrojan, realan, itd.), eventualne poetne vrednosti (default values), posebne primedbe i osiguranja (pri emu se

    Drvena greda

    Duina irina Visina

    Greda

    izraunati Aizraunati Vizraunati W

    Atributi objekta Metode objekta

    Materijal

    Atributi klasa Metode klasa

    gibMaterijal

    Betonska greda

    . . . . . .

    Ime klase

    atribut

    metode

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    57

    poslednja dva daju u vitiastim zagradama). Standardizovana notacija za atribute, kada su sve mogunosti navedene, ima sledei opti oblik:

    Specifinosti Atributi klasa se radi naglaavanja podvlae; izvedeni atributi, tj. atributi koji se dobijaju iz

    dotada raspoloivih atributa jedne klase prema strogo definisanim uslovima (na primer, prema nekom proraunu), sadre / kao prefiks.

    klasniAtribut / izvedeni atribut

    Karakteristike atributa mogu biti:

    {apstrakt} {readonly/samo uitavanje} {transient/prolazne} {persistent/stalne}

    Jednostavni praktini primer

    Metode se takoe daju najmanje svojim imenom, koje prema UML-konvenciji takoe poinje malim slovom. Kako e metode biti razmatrane kao usluni servisi, one e biti objanjene signaturom, koja se sastoji od najvie jednog imena operacije, parametara (argumenata) i po potrebi, od tipa izlaznog rezultata. U optem sluaju ima signatura (sintaksa) sledei izgled:

    ime_metode ( argument: tip_argumenta = vrednost, ... ) :tip_rezultata {primedba} {osiguranje}

    eventualno drugi argumenti

    radius: Double = 25.0 {readonly} {radius > 0}ime: String = "Boja"boja: {crvena, zelena, zuta, plava} M Atributi

    Krug

    Red veliina kao osiguranje

    Metode M

    atribut: Tip_atributa = Poetna_vrednost {karakteristika} {osiguranje}

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    58

    Argumenti poinju malim slovima i opisuju se svojim tipom (u vezi sa simbolom : ) kao i, po potrebi, unapred datom poetnom vrednou.

    Primer

    6.2.3. Umetanje ranije uvedenih klasa u vezi sa objektnim konceptom programskog jezika JAVA. Prvi kontakt sa JAVA programom.

    Za primer projektovanja nosee konstrukcije moe se do sada uvedeni koncept predstaviti u

    programu JAVA. To predstavljanje treba istovremeno da bude uvod u JAVA programiranje.

    Elementarni problem, predstavljen u UML notaciji (minimalni nivo)

    Dakle, problem se sastoji iz jedne klase pod imenom Greda: bie kreirane dve instance

    klase, objekti Noseca_greda i Nadvratnik. Prevoenje sa detaljnim opisom pomou komentara

    /** * Program I. * Prvo se definise klasa Greda. Ovde se primenjuje kljucna rec class */ public class Greda {

    Nadvratnik Noseca_greda

    Greda

    instance_of

    duzina: Doublesirina: Doublevisina: Double

    izracArea (): Double

    radius: Double {radius > 0.3}centar_x: Double = 0.0centar_y: Double = 0.0Atributi

    Krug

    Metode ZadatiCentar ( x: Double = 10.0, y: Double = 10.0): BooleanZadatiPoluprecnik ( r: Double): voidprimedbe ( ) : void

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    59

    // Telo klase; // definise sadrzaj klase; // prvo atribute saglasno principu tajnosti, pri cemu se pravo pristupa tj. // vidljivost definise naredbom private; private znaci da je pristup // moguc samo unutar klase; // ukoliko nije dozvoljen pristup, onda je pristup moguc samo unutar // odreenog paketa; // ostala prava pristupa su: protected, private ; // Atributi public double duzina, sirina, visina; // ova deklaracija odgovara opstoj deklaraciji atributa u obliku: // pravo_pristupa tip_podatka ime_atributa // Metode // specijalna metoda za konstruisanje objekata je tzv. Konstruktor, koji je // predvien sa pravom pristupa public; u suprotnosti sa private, // omogucava public opsti pristup. // Konstruktor public Greda(double d, double s, double v) { // Povezivanje sa atributima duzina = d; sirina = s; visina = v; } // Time prepisane standardne konstrukcije se ponovo definisu public Greda () { } // Sve metode se definisu prema sledecem opstem obliku. // Pravo_pristupa tip_rezultata metoda (lista parametara) // { // ...sadrzaj metode... // } // Double je pritom podatak tipa real; ukoliko se neki rezultat vraca // preko metode, to se postize naredbom return // Metode za izlaz podataka (rezultata) public double izlDuzina() { return duzina; }

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    60

    public double izlSirina() { return sirina; } public double izlVisina() { return visina; } // Metod za izracunavanje povrsine poprecnog preseka public double izracArea() { return sirina*visina; } } // Kraj klase Greda // // Za testiranje klase Greda nezavisno od dalje primene definise se // klasa GredaTest ; // njome ce biti konstruisani Greda-objekti (primeri) Noseca_greda i // Nadvratnik, uz pomoc gore definisanih konstruktora: public class GredaTest { // Da bi se klasa GredaTest iz JAVA-Byte-Code Interpretera mogla // startovati, mora se u JAVA pozivna rutina main izvrsiti; ovo je // polazna tacka glavnog programa za resavanje problema; // Pritom se treba pridrzavati sledece sintakse: public static void main(String[] args) { // kao parametri se moraju tzv. Komandni argumenti poziva, String args[], tj. // jedno polje niz preneti. String je pritom jedna predefinisana klasa; u // ovom slucaju nije potrebno uneti nikakve argumente. // Konstruisanje objekata // Procedura: postavlja se jedan tzv. referentni atribut i tada u njega novi // objekat sa standardnim konstruktorom obezbeuje; pritom se treba // pridrzavati sledeceg formalizma: // Ime_klase Referentni_atribut_klase = new Ime_klase( ); // ili sa sopstveno definisanim konstruktorom, koji sadrzi listu parametara: // Ime_klase Referenca_klase = new Ime_klase(Lista_parametara); // Sa standardnim konstruktorom Greda Noseca_greda = new Greda(); // Dodeljivanje atributa objektu Noseca_greda pomocu operatora

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    61

    // pristupa funkcionise samo ako su atributi u pravu pristupa public. Noseca_greda.duzina = 3.5; Noseca_greda.sirina = 0.2; Noseca_greda.visina = 0.35; // sto znaci da opsti oblik pristupa u vrednost atributa ima formu: // Referenca_klase.ime_atributa // Alternativno mozemo primeniti i sopstveno definisani konstruktor, // Kreiranje sa sopstvenim konstruktorom Greda Nadvratnik = new Greda (3.5, 0.2, 0.35); // Izdavanje (stampanje) atributa za objekat Nadvratnik pomocu metode // System.out.println iz JAVA paketa java.lang , u koji je smesten recnik // (jezicki interface) System.out.println ("Atributi nadvratnika"); System.out.println ("Duzina=" + Nadvratnik.izlDuzina()); System.out.println ("Sirina=" + Nadvratnik.izlSirina()); System.out.println ("Visina=" + Nadvratnik.izlVisina()); // Proracun povrsine poprecnog preseka nosece grede sa stampanjem System.out.println ("Pop. Pres. Nos. grede=" + Nadvratnik.izracArea()); } // Kraj main } // Kraj klase GredaTest Izlaz: Atributi nadvratnika Duzina=3.5 Sirina=0.2 Visina=0.35 Pop. Pres. Nos. grede=0.069999999999999993

    Fiziki tok prevoenja Izvorni JAVA-program, koji se unosi pomou nekog editora ini jednu celinu za prevoenje.

    U ovom sluaju sastoji se ta celina iz dve klase, klase Greda i klase GredaTest. Ta celina se memorie kao izvorna datoteka GredaTest.java (produno ime = .java).

    Izvorna datoteka pod imenom GredaTest.java se moe u sledeem koraku JAVA-

    kompilatorom javac prevesti u Java-Bytecode (*.class); ukoliko je u izvornoj datoteci definisano vie klasa, za svaku klasu se generise jedna .class datoteka. Ogranienja u pogledu broja klasa ne postoje, no za jednu izvornu datoteku mora biti raspoloiva samo jedna public klasa.

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    62

    6.2.4. Modeliranje hijerarhijski struktuiranih veza izmeu Klasa / Objekata / Nasleivanja / Generalizacija / Specijalizacija

    Dosada su klase s obzirom na diskusiju o apstraktnim klasama posmatrane poglavito izolovano. Problemi iz oblasti primene u osnovi predstavljaju mreu meuodnosa razliitih klasa. Zato je osnovni zadatak pri razvoju softvera za odreenu postavku problema da utvrde osnovnu mreu meusobnih odnosa klasa, da analiziraju njihove unutranje meuzavisnosti i (na osnovu UML) da modeliraju, da bi na osnovu toga mogli dobijene modele da prevedu u izvrni program.

    U notaciji UML za ove zadatke stoje na raspolaganju klasni i objektni dijagrami, koji slue

    tome da se iznaene strukturalne meuzavisnosti formalno i razumljivo mogu (matematiki) definisati. Ali, to ne znai da formalni opis veza mora da bude uvek jednoznaan. Dijagrami klasa imaju esto osobinu da se za jedan isti problem moe dati vie reprezentacionih alternativa (ali svaka pojedina se moe svesti i na neku treu alternativu).

    Kao u obinom ivotu, ali takoe i u mnogim naunim disciplinama (biologija, matematika,

    mehanika, arhitektura, ...), naroito esto zastupljena prirodna sistematika, hijerarhija, primenjuje se u orijentaciji objekata kao oblik ureenja i struktuiranja. Njome se mogu dobro obuhvatiti sve one injenice, koje se mogu podeliti na pojedinane oblasti (mogu se klasifikovati), pri emu se oblasti struktuiraju u obliku stabla. Pri tome se i preporuuje da se u praksi, pored hijerarhije uvode i druge vrste sistematizacije (heterarhije, mree, itd.). Za sada ostanimo kod hijerarhija, poto one predstavljaju najjednostavniji oblik sistematizacije.

    Tipini primeri hijerarhija iz univerzitetske svakodnevnice Hijerarhija: Univerzitet Bochum

    Uni RUB

    FakultetiAdministracija HRZ

    Mathematik Bauwesen

    Kriterijum razlikovanja/Diskriminator: Organizaciona forma

    Diskriminator: Nauna disciplina

    . . .

    . . . . . .

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    63

    Hijerarhija: Univerzitet Ni

    Mehanika

    Primenjena informatika / CAD-sistem (2D)

    Geometrijskafigura 2D

    TrougaoLinija Krug

    Diskriminator: Oblik figure

    . . .

    . . .. . .

    Kvadrat . . . . . .

    Diskriminator: Geometrijski odnos sastavnih delova

    Mehanika

    DinamikaKinematika

    Kinetika Statika(Nastanak Antike)

    Diskriminator: Dejstvo sile sa / bez

    Diskriminator: Oblik (forma) kretanja

    (Nauka o geometrijskom i vremenskom toku kretanjamehanikih sistema bez sila kao uzroka kretanja)

    (Nauka o uzajamnom dejstvu sila i kretanja)

    Nauka o kretanju poddejstvom sila

    Nauka o silama nad mirujuim/nepokretnim sistemima

    Uni Ni

    FakultetiAdministracija JUNIS

    GAF Mainski

    . . .

    . . . . . .

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    64

    Biologija (etnomologija, prethodnik taksonomije)

    Za hijerarhije je karakteristino da svi lanovi hijerarhije imaju sline osobine i kada se u pojedinoj jasno meusobno razlikuju. Takoe je karakteristino da svi lanovi nadreenog nivoa predstavljaju jednu specifinost nieg nivoa; obrnuto, istovremeno su vie postavljeni nivoi generalizacije nie postavljenih nivoa.

    Kako predstavljanje hijerarhija podsea na familijarni rodoslov (videti rodoslove Karolinga i

    Nemanjia) i karakteristike se prenose iz nivoa u nivo, izraz nasledna hijerarhija se odomaio.

    Rodoslov loze Karolinga

    Insekti

    Letei insektiPra-insekti

    Jednokrilci Dvokrilci

    Vilin konjic

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    65

    Rodoslov loze Nemanjia

    Zato je razumljivo primenjivati naslednu hijerarhiju za informatika reenja problema, ili, jo vie, zato ona ini osnovni sastavni deo objektno-orijentisanog modeliranja i programiranja? (Svi znaajni objektno-orijentisani programski jezici podravaju nasledne hijerarhije direktno pomou odgovarajuih jezikih alatki u obliku kljunih rei!).

    Odgovor glasi: Pored, sa nasleivanjem povezanim principom ureivanja, glavna prednost

    lei pre svega u tome to se saglasno logici rodoslova (naslednog drveta) osobine odreenih objekata kao to su atributi i metode, mogu automatski iz jednog hijerarhijskog nivoa u drugi hijerarhijski nivo (top-down) relativno lako obraivati (nasleivati). Pritom je dovoljno informaciju samo jedanput tamo definisati, gde se ona prvi put koristi. Time lako ostvarljiv, implicitni (tj. automatski ugraen) mehanizam nasleivanja se tada stara za to da se ova osobina prenosi na dole. Ovom koncepcijom se znaajno smanjuje rad softverista u smislu kodiranja, a time i mogunost unoenja greke pri kreiranju softvera uopte. Posebno se poviava ponovna upotrebljivost softvera (Re-usability).

    Princip nasleivanja se pritom ne treba primeniti naivno; treba paziti da e se pri

    nasleivanju informacija iz jedne tzv. gornje klase u odgovarajue donje klase preneti takoe i sve odgovornosti i zadaci gornje klase, koji su dati pravom pristupa i metodama. Dalje treba paziti da se nasleene osobine moraju izmenama prilagoditi zadacima donje klase: nasleene metode treba uz pridravanje odreenih pravila (jednakost imena i saglasnost u listi parametara) prepisati! U odreenim sluajevima se mogu i nove uvesti. Posebno se mora ispitati da li nasledna hijerarhija odraava realnu taksonomiju, ili e druge alternative biti bolje usaglaene.

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    66

    UML- notacija

    UML predstavljanje hijerarhije u obliku klasnog dijagrama iroko se oslanja na logiku naslednog stabla. Nasledni odnos izmeu gornjih klasa sa karakteristikama predodreenog znaaja i direktnih podklasa se jasno oznaava strelicom sa neispunjenom vrhom strelice. Vrh strelice je pritom okrenut u pravcu gornje klase; pojedine strelice se mogu po izboru jednom zajednikom linijom spojiti u jednu strelicu.

    Primer (Odseak iz jednog CAD-sistema) U radnom prozoru jednog CAD-sistema treba generisati krugove, pravougaonike, trouglove,

    itd. i izdati ih (nacrtati) kao grafike elemente. Za krugove, pravougaonike i trouglove se uvode kao nacrti (mustre) klase Krug, Pravougaonik i Trougao. Za razliite geometrijske figure se, da bi se mogao prouiti princip nasleivanja, formira (apstraktna) nadklasa GeomFigura (geometrijska figura), koja nastaje generalizacijom klasa Krug, Pravougaonik i Trougao. Obrnuto, klasa GeomFigura se dobija specijalizacijom klasa Krug, Pravougaonik, Trougao, itd.

    Nastali klasni dijagram se tako predstavlja kao na sledeoj emi (gruba struktura bez detalja

    u oblasti atributa i metoda):

    NadklasaDiskriminator 1 Diskriminator 3

    Podklasa 1 Podklasa 3

    Podklasa 2.1 Podklasa 2.3

    Diskriminator 2

    Varijanta II

    Podklasa 2.2

    NadklasaDiskriminator 1 Diskriminator 3

    Podklasa 1 Podklasa 3

    Podklasa 2.1 Podklasa 2.3Podklasa 2.2

    Diskriminator 2

    Varijanta I

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    67

    Kako klasa GeomFigura ne proizvodi sopstvene objekte (oni se iskljuivo generiu preko podklasa!), ve je uvedena kao osnovna klasa za druge klase, to je ona apstraktna klasa: njoj e biti dodeljena primedba {apstrakt}. Pri primeni u jednom JAVA - programu ova predefinicija ima odreeno dejstvo na formulisanje problema (apstraktna klasa ima apstraktne metode, koje moraju odgovarati zadatim JAVA pravilima!).

    U klasnim dijagramima se takoe upotrebljavaju:

    Diskriminator hijerarhije,

    ovde OblikFigure, koji implicitno definie ureenu strukturu klasnog dijagrama (strogo uzev, imena klasa i podklasa predstavljaju vrednosti atributa Diskriminator)

    Osiguranje hijerarhije je dato u vitiastim zagradama i ono oznaava da je hijerarhija jo nepotpuna (Ostala osiguranja mogu biti preklopljena, disjunktna, potpuna).

    Uputstvo: o ureenju osobina

    Osobine su unutar nasledne hijerarhije tano tamo unesene, gde saglasno semantici

    problema imaju svoje poreklo. Drugim reima: ureenje ne treba da bude uraeno prema svrsishodnosti ili radi utede u kodiranju, ve samo na osnovu unutranjih razmatranja. Cilj mora uvek biti da se svet problema (domen problema) predstavi na najprirodniji nain.

    Po utvrivanju gore prodiskutovane grube strukture, uvedene klase se upotpunjuju sledeim

    sadrajima (atributima i metodama):

    GeomFigura{apstrakt}

    Diskriminator: Oblik figure

    Krug TrougaoPravougaonik

    {nepotpuno}

    Osiguranje

    . . . drugi geometrijskioblici

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    68

    Usvojena osiguranja slue tome da uvedeni geometrijski detalji budu uneseni korektno. Kod kruga i kod pravougaonika moraju poluprenik, odnosno duina i irina uvek biti pozitivni. Kod trougla su za svaku stranicu data odgovarajua gornja i donja granica. Na primer, za stranicu a, ako je b+c=a, odnosno c-b=a, umesto trougla dobiemo du. Zato mora da vai c-b 0 } d { d > 0 }s { s > 0 }

    a {c-b

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    69

    U apstraktnoj nadklasi GeomFigure bie za celokupno problemsko podruje uvedene istovetne i zato i sa istim imenom oznaene - metode staviRef(erentnu)T(acku), pomeri, crtaj, brisi i izracunajPovrsinu. Te metode, koje su usko vezane sa fizikim konceptom podklase, bie, to je potpuno razumljivo, prvo realizovane i definisane i stoga uvedene kao apstraktne metode. To znai da se te metode sa svojim sadrajem tek u izvedenim podklasama mogu definisati. Jedino to se mora uvesti pri primeni jezika JAVA u apstraktne klase je oznaka (signatura) te metode, tj. ime metode (sa pravom pristupa), lista parametara i tip izlaznih rezultata. Drugim reima, apstraktna metoda ne sadri definiciju, nema telo metode, ve samo glavu metode (signaturu). U apstraktnu klasu se dalje uvode atributi xRef, yRef za referentnu taku kao markantnu taku pri unoenju neke geometrijske figure (videti sledeu skicu).

    Takoe se uvodi prekida sa vidljivou (da/ne). Navedene veliine (xRef, yRef, vidljiv) uvode se u nadklasu GeomFigura, poto e one biti koriene za sve klase hijerarhije.

    Karakteristike podklasa su generalno samoobjanjive. Svi karakteristini geometrijski

    elementi, kao Radius r za Krug, Duzina d i Sirina s za Pravougaonik, kao i duine stranica a, b i c za Trougao bie dati sa odreenim osiguranjima. U delu metoda podklasa unesi ...(...) bie poziva na odreene delove (r tj. d i s, tj. a, b i c. ), pri emu e zadata osiguranja (opsezi vrednosti) biti proverena. Pored toga, u podklasama e apstraktne metode nadklasa biti napunjene ivotom, tj. u zavisnosti od geometriske figure bie uvedeno crtanje (crtaj), brisanje (brisi), ili raunski postupak (izracunajPovrsinu).

    RefT = TeiteRefT = levo donje teme pravougaonika

    RefT = Centar

    b a

    cA

    B

    C

    Za stranicu a, ako je b+c=a, odnosno c-b=a, umesto trougla dobiemo du

    b c

    C AB

    a

    ABC

    c

    b c-b

    a

    Mora da vai c-b

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    70

    Mehanizam nasleivanja deluje u ovom sluaju tako to se iz osnovne klase GeomFigura mogu preuzeti (naslediti) atributi xRef, yRef i vidljiv, kao i da se nasleuju sve metode iz GeomFigura.

    6.2.5. Uvoenje nasleivanja u JAVA Za primer razmatran u prethodnom odeljku iz osnovne oblasti jednog 2D-CAD sistema treba

    primeniti saglasno gore sastavljenom klasnom dijagramu mehanizme nasleivanja JAVA programa. Grafiki postupci ovde ostaju jo narazmotreni, poto neophodna znanja o grafikim elementima JAVA jo nisu izloena. Stoga se primena JAVA odnosi samo na numeriki deo gore datih klasnih dijagrama (tj. za proraun poprenih preseka).

    JAVA-Programski kd

    /** * Program II. * Osnovna klasa GeomFigura */ public abstract class GeomFigura { // atributi za pravo pristupa unutar svih izvedenih klasa protected double xRef, yRef; protected boolean vidljiv; // metode (za sada samo metode za proracun poprecnog preseka!) public abstract double izracunajPovrsinu(); } // Kraj klase GeomFigura // Podklase nasledne hijerarhije (na primeru klase Pravougaonik) // Nasleivanje ostvareno kljucnom reci extends public class Pravougaonik extends GeomFigura { // Atributi private double d, s; // Metode public void ucitajStrane(double dNovo, double sNovo) { // Osiguranja if(dNovo > 0.0 && sNovo > 0.0) { d = dNovo; s=sNovo; }

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    71

    else { System.out.println ("Greska ! Nije pravougaonik"); } } public double izracunajPovrsinu() { return d*s; } } // Kraj podklase Pravougaonik public class NasledjivanjeTest { // Pozivna rutina main public static void main(String[] args) { // Kreiranje objekta Pravougaonik P1 = new Pravougaonik(); P1.ucitajStrane(300.0, 200.0); System.out.println("Povrsina pravougaonika P1 = " + P1.izracunajPovrsinu()); } // Kraj main } // Kraj Klase NasleivanjeTest Izlaz: Povrsina pravougaonika P1 = 60000.0

    6.2.6. Kontrolne strukture 6.2.6.1. Osnove / Motivacija Do sada su od metoda uvedenih klasa uglavnom razmatrane samo jednostavne naredbe iz

    aspekta primene u predhodnom odeljku razmatranog osiguranja (if else struktura). Jasno je da su za praktinu primenu potrebne i druge strukture, da bi se i kompleksni zahtevi mogli ispuniti.

    Izmene jednostavne (linearne) strukture vode u praksi vrlo brzo do nepreglednih situacija,

    gde se podesnim pravilima ne moe intervenisati. Smisao i svrha ovih pravila je da se razvoj softvera, a to posebno vai za razvoj objektno-orijentisanog softvera, usmeri u ureenom i kontrolisanom pravcu. U drugom sluaju postoji opasnost da se u metodama objektno-orijentisanih programa proizvodi pageti-kod, koji nije vie pod kontrolom.

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    72

    Metode koje se ne mogu rekonstruisati (nekontrolisane) ne odgovaraju standardima kvaliteta modernog softvera. Meu razliitim kriterijumima za ocenu kvaliteta softvera tipini su sledei:

    pouzdanost, pogodno odravanje, laka izmenjivost, efikasnost, pogodnost korienja (user-friendly) i niski trokovi.

    Trokovna komponenta, na koju sa svoje strane utiu osobine kao to su odravanje,

    efikasnost, itd., je pritom od posebnog znaaja. To je stoga to su trokovi softvera poslednjih godina, u poreenju sa hardverom, u stalnom porastu. (Pogledati sledei grafikon radi uvida u situaciju, odakle se vidi da se odnos trokova hardvera i softvera u periodu od 1980. do 2000. godine kretao od 80:20 do 20:80).

    Opte prihvaeni princip je da kvalitativno dobar koncept softvera doprinosi smanjenju trokova softvera. Najvaniji preduslov za kvalitativno dobar projekat softvera je da se razvoj softvera odvija kontrolisano i podlono kontroli, na slian nain kao i razvoj tehnikih proizvoda i konstrukcija u inenjerskim disciplinama.

    U inenjerskim naukama se pre svega pokazalo da rad sa osmiljenim standardima i

    normama povoljno deluje na smanjenje trokova. Stoga je prenoenje tog iskustva na proceduru pri programiranju metoda blisko razmiljanju. Osnovno pravilo je: ne moe se sve, to je negde ostvarljivo, prevesti u dijagram toka (flow-chart). Mnogo ee se sasvim odreene konstrukcije nazvane strukturni elementi prihvataju, i to samo u kontrolisanom broju (Princip ogranienja konstruktivnih varijanti).

    Interesantno je da je upravo manji broj strukturnih elemenata dovoljan da formulie

    kompleksne algoritme visokog nivoa. U osnovi su dovoljna etiri osnovna strukturna elementa:

    Sekvenca, Alternativa ili Grananje, tj. Selekcija, Viestruka alternativa/Razlikovanje sluajeva, Iteracija.

    1980 2000

    100%

    80%

    20%Hardver

    Softver

    Trokovi

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    73

    Ukoliko se formulisanje metoda bazira na normiranim strukturnim elementima, dobija se jo jedna znaajna prednost: izbegava se zavisnost od jednog konkretnog programskog jezika. Drugaije reeno: ukoliko se kontrolni (blok) dijagram operacija definie iskljuivo pomou normiranih strukturnih elemenata, odgovarajue prevoenje u odreeni programski jezik je sekundarno, poto se postupak konverzije moe sprovesti ematski (uporedi definiciju dijagrama klasa u objektno orijentisanom modeliranju, gde se uslovi slino memoriu).

    Da bi se postupak prevoenja olakao, uvedene su grafike oznake za predstavljanje

    strukturnih elemenata, tzv. struktogrami (Nassi-Schneider-dijagrami). Radi usaglaavanja ovih struktograma u vee programske celine/programe uvedena su opta konstrukciona pravila. Oba, struktogrami i konstrukciona pravilla, slue tome da se u objektnom programiranju primenjene metode mogu kontrolisano i uz nadzor ugraditi u softver.

    6.2.6.2. Sekvenca Sekvenca, kao najjednostavnija algoritamska struktura u operacijama je ve dovoljno

    poznata. Definicija: Jednostavan niz naredbi ili blokova naredbi, koji slede u nizu. Grafiki prikaz:

    Dijagram toka Struktogram

    Konstrukciono pravilo / Pravilo Odozgo na dole (Top-Down) Pojedini blokovi (ovde, A,B,C) se moraju poev odozgo u redosledu na dole izvravati; tek

    po izvrenju poslednjeg bloka (ovde C), moe se sekvenca napustiti.

    Uputstvo: Pojedini blokovi naredbi mogu se sastojati iz vie posebnih blokova, koji moraju biti

    stavljeni izmeu vitiastih zagrada; pritom je mogue definisati veliine, koje vae samo unutar jednog dela bloka.

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    74

    JAVA-primer

    // Naredbe A int j = 100; System.out.println("Naredbe A zavrsene"); // Naredbe B { int i = 1; double x = 3.0; System.out.println("Naredbe B zavrsene");

    } 6.2.6.3. Alternativa / Grananje / Selekcija (if-else) Kod odreenih operacija je neophodno izvriti izbor naredbi koje e se izvriti; ovde

    kompjuter izvrava odluke, koje omoguavaju odreene forme inteligentnog ponaanja. Pritom je izvanredno mona relativno jednostavna struktura IF-ELSE, koja se nalazi u mnogim jezicima i upravo je bila primenjena pri realizaciji osiguranja (red veliine, oblast vrednosti). Da bi se ograniilo konstruktivno mnotvo pri primeni na mogue komplikovanije razgranate strukture, njena je primena namerno izostavljena.

    Alternativa / Selekcija Kratak opis: Obrada dva alternativna bloka naredbi u zavisnosti od vrednosti logikog (Boolov) izraza,

    koji moe imati saglasnost (vrednost = true), ili nesaglasnost (vrednost = false) kao odgovor na neki zadati uslov; vrednost true odgovara iskazu istinitosti tano, tj. DA, dok vrednost false odgovara iskazu istinitosti netano, tj. NE.

    Grafiki prikaz:

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    75

    Primena u JAVA sa naredbom if-else Opti oblik:

    if (Bulov izraz ili uslov) { naredbe A; } else { naredbe B;

    }

    Semantika:

    Izraunavaju se uslovi formulisani kao logiki izraz. Kao izraz moe pritom stajati neko poreenje, ali i podatak tipa Boolean, tj. logiki podatak. Ako je rezultat true, izvrava se grupa naredbi A, koja sledi odmah iza uslova, dok se u drugom sluaju izvodi grupa naredbi B. Naredbe A tj. B se pritom nalaze u vitiastim zagradama.

    Radi formiranja logikih izraza u JAVA se primenjuju operatori poreenja i logiki

    operatori. Operatori poreenja uporeuju objekte istog tipa.

    Operator poreenja Matematiki simbol Primer = = = x = = y != x != y < < x < y y >= >= x >= y

    Logiki operatori omoguavaju realizaciju veza izmeu logikih vrednosti.

    Logiki operator Matematiki simbol Primer ! (Negacija) ! bool && (I, Konjunkcija) bool1 && bool2 || (ILI, Disjunkcija) bool1 || bool2 ^ (Ekskluzivno ili) bool1 ^ bool2

    Dejstvo logikih operacija (predstavljeno tablicama istinitosti)

    bool ! bool true false false true

    bool1 bool2 bool1 && bool2 true true true true false false false true false false false false

    ! - Negacija

    && - Konjunkcija

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    76

    bool1 bool2 bool1 || bool2 true true true true false true false true true false false false

    bool1 bool2 bool1 ^ bool2 true true false true false true false true true false false false

    Pri primeni operatora && ili || drugi izraz se tek onda izraunava kada prvi dobije vrednost

    true ili false. Ukoliko, nasuprot tome, treba svaki izraz da se izrauna, moraju se primeniti obini operatori & i |.

    Nadalje treba obratiti panju da operatori poreenja i logiki (Boolovi) operatori treba da

    budu rangirani prema prioritetu. Pri tome, u jeziku JAVA vai sledei prioritet:

    Operator (nepotpuno)

    Asocjativnost, utvruje u kom redosledu se izvravaju operacije istog prioriteta

    Aritmetiki operatori:

    ++ -- + -Inkrement Dekrement Predznak

    < / %+ -

    Operatori poreenja:

    < >=

    unarna

    s leva udesnos leva udesno

    s leva udesno

    Logiki operatori:

    == != & ^| & & | |

    s leva udesno s leva udesno s leva udesno s leva udesno s leva udesno s leva udesno

    Operatori dodeljivanja vrednosti: = += -= *= /= %=

    s desna ulevo

    Opadajui prioritet

    s desna ulevo

    ||- Disjunkcija

    ^ - Ekskluzivno ILI

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    77

    Operacije nad bitovima i iftovanja nisu navedene. Operatorima nad bitovima mogu se obraivati celi brojevi ili logike vrednosti (vano kod posebnih operacija, na primer pri raunanju sa stepenima od 2).

    Alternacija (grananje) Konkretni primer:

    if (i >= 0) { // naredbe A a = b = 100.0; } else { // naredbe B a = b = -100.0; }

    Uputstvo za konstruisanje

    a) Do niza naredbi A ili B stie se iskljuivo preko izraunavanja uslova; naredbe A i B nemaju dakle nikakvu meusobnu vezu; drugim reima, alternacija se moe samo tada napustiti, kada su A ili B potpuno obraeni.

    b) Naredbe A ili B mogu sadrati i druge strukturne elemente:

    Primer uz b):

    Konstrukciono pravilo Strukturni blokovi istog nivoa moraju se oslanjati vertikalnim stranicama. Primeri:

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    78

    6.2.6.4. Viestruko grananje / Razlikovanje sluajeva (switch) U praktinim primenama treba esto uvesti razlikovanje sluajeva. Iako se razlikovanje

    sluajeva moe realizovati ugnjedavanjem jednostavnih alternativa, iz razloga bolje preglednosti i itljivosti je bolje viestruko grananje realizovati jednim strukturnim elementom pogotovu onda kada je broj moguih sluajeva veliki.

    Viestruko grananje sa jednostavnim alternativama (mali broj alternativa)

    Viestruka alternativa Kratak opis To je ureena grupa alternativa, pri emu svakoj alternativi pripadaju sasvim odreene

    operacije; nepripadajui sluaj se posebno regulie, jer bi u suprotnom nastala nekontrolisana stanja.

    Grafiki prikaz

    i = 1da

    da

    da

    i = 2

    i = 3

    ne

    ne

    ne

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    79

    Prevoenje u JAVA vri se naredbama switch, case, default i break:

    switch (aritm. izraz.) { case 1: naredbe 1; break; case 2: naredbe 2; break; // dalje naredbe sa pripadajucim naredbama case n: naredbe n; break; default: ostale naredbe;

    }

    Semantika Vrednost aritmetikog izraza bie uporeena po redosledu sa svakom iz case sledeom

    konstantom 1, 2, ..., n; ukoliko jednakost postoji, bie izvrene naredbe koje pripadaju toj konstanti. Ukoliko se ne pojavi jednakost, izvrie se naredbe koje slede iza default. Da bi se spreilo da se izvre naredbe koje slede iza sluaja koji je zadovoljen (default je iskljuen), mora se niz naredbi zavriti naredbom break; break se stara za to da se kontola programa prenese na sledeu konstrukciju iza viestruke alternative/razlikovanja sluajeva.

    Uputstvo Pri doslednoj primeni objektno orijentisanog modela je mogue da se switch konstrukcija

    izbegne koristei objektnoorijentisane mehanizme kao to su nasleivanje ili polimorfizam. Stoga e viestruka alternativa, poto je znaajan elemenat algoritamskog naina razmiljanja, ovde biti detaljno predstavljena (ona je preglednija i jednostavnija nego neka objektno-orijentisana konstrukcija).

    Struktogramski primer

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    80

    Primer: Proraun razliitih povrina (stub)

    int i; double povrsina, ivica, sirina, visina; ivica = 7.0; sirina = 13.0; visina = 19.0; // Definisanje na osnovu logike problema; ovde staviti switch (i) { case 1: povrsina = ivica * ivica; break; case 2: povrsina = sirina * visina; break; default: System.out.println(Odgovarajuci slucaj ne postoji!);

    } 6.2.6.5. Iteracija Numerike operacije zahtevaju esto ponovljeno izvravanje odreenih naredbi, dok ne

    bude ispunjen odreeni uslov prekida. Pritom je broj ponavljanja nepoznat. Isto tako moe biti razumno naredbama koje se ponavljaju dodati jedan iteracioni uslov i deo koji se ponavlja izvravati samo kada je uslov za iteracije ispunjen. U mnogim sluajevima je broj ponavljanja takoe poznat, pri emu su tada predviene specijalne konstrukcije za ponavljanje.

    Dakle, iteracije su osnovni princip u numerikim aplikacijama. Naveemo kao primer

    sledee mogunosti primene:

    Izraunavanje najmanjeg zajednikog sadraoca (pogledati Euklidov algoritam u odeljku za objanjenje algoritamskog modela razmiljanja),

    Izraunavenje nule neke funkcije,

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    81

    Izraunavanje povrina.

    Za iterativno reavanje problema stoje u JAVA na raspolaganju tri mogunosti:

    Iteracija sa iteracionim uslovom na poetku dela koji se ponavlja (while), tzv.

    odloena ili unapred ispitana petlja, Iteracija sa uslovom prekida na kraju dela koji se ponavlja (do-while), tzv. neodloena,

    ili petlja sa kontrolom na kraju, Iteraciona petlja (for), ili tzv. brojana petlja.

    Sva tri iteraciona oblika bie nadalje razmatrana.

    a) Iteracija sa iteracionim uslovom na poetku (while)

    Iteracija / while Kratki opis Operacija ponavljanja, pri emu se na poetku ponavljjueg dela ispituje da li se ovaj mora

    obraditi. Ukoliko uslov nije ispunjen, sledi otkazivanje, tj. izvravanje e se nastaviti naredbom iza while konstrukcije.

    Grafiki prikaz

    f(x)x

    f(x)

    x

    1. korak

    2. korak (poboljano!)

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    82

    Primena u JAVA sa naredbom while while (logiki izraz) { naredbe; }

    Semantika Logiki izraz se izraunava pre izvrenja naredbi koje se nalaze izmeu vitiastih zagrada,

    { i }. Ukoliko ovaj izraz, kao uslov za izvrenje iteracija, ima vrednost istinitosti true, naredbe koje treba da se ponavljaju bie izvrene; ukoliko je vrednost false, prei e se na strukturni elemenat iza while. Ponavljanja e se izvravati doklegod je iteracioni uslov ispunjen.

    Uputstvo Ukoliko se, iz bilo kojih razloga, uslov false nikada ne dogodi, (dakle grananje

    neispunjeno - nikada se ne aktivira), nastaje tzv. beskrajna petlja. To bi bilo neispravno, jer je onda neophodan runi prekid. Stoga treba unapred paziti da se takav sluaj ne dogodi.

    Primer za ovu situaciju Traenje nule sa divergencijom

    Konstrukciono pravilo Deo koji se ponavlja moe i sam sadrati druge strukturne elemente Primer

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    83

    Primer primene:

    b) Iteracija sa iteracionim uslovom na kraju (do - while) Kod mnogih problema u praksi je pametno da se deo koji se ponavlja bez obzira na

    iteracioni uslov - izvri najmanje jednom, da bi se tek na kraju dela koji se ponavlja ispitalo da li treba prekinuti iteraciju ili ne. Za sluajeve takve vrste stoji na raspolaganju, kao mala modifikacija while konstrukcije, tzv. do-while konstrukcija, koja se oznaava kao petlja sa kontrolom na kraju.

    Iteracija / do-while Kratak opis: Operacija ponavljanja, pri emu se tek na kraju dela koji se ponavlja ispituje da li e deo

    koji se ponavlja biti ponovo obraen.

    Grafiki prikaz:

    Primena u JAVA sa naredbama do i while

    do { naredbe; } while (logicki izraz);

    ==

    10

    1

    maxi

    ii

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    84

    Uputstvo: Obratiti panju na ; iza logikog izraza!

    c) Iteraciona petlja (for) Glavna karakteristika napred opisanih itaracionih varijanti (while i do-while) se sastoji

    u tome da u oba sluaja broj ponavljanja nije neophodno a priori tano utvrditi (navedeni primer izraunavanja sume nije posebno dobro prilagoen jednoj while petlji). U inenjerskim primenama ima dodue esto problemskih postavki, kod kojih je broj ponavljanja unapred tano poznat tipina oblast primene je vektorski raun.

    Jedan primer: Skalarni proizvod dva vektora

    2211002

    0WVWVWVWVWV

    iii

    T ++== =

    Ovde je utvren broj ponavljanja (3) za operacije ii WV sa 2,1,0=i . Za izvrenje iteracija

    sa utvrenom strukturom ponavljanja veina programskih jezika nudi, kao uostalom i JAVA, posebnu konstrukciju, takozvanu petlju (for-loop, for- petlja, for- Schleife (nemaki), ili brojana petlja).

    Iteraciona petlja / for Kratak opis: Ponavljanje operacija sa poznatim brojem ponovljenih prolaza. Grafiki prikaz:

    Primena u JAVA sa naredbom for

    for (pocetna vrednost; kontrolna vrednost; korak) { naredbe; }

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    85

    Semantika: Po izraunavanju poetnih vrednosti ispituje se uslov iteracije (operacija poreenja); ukoliko

    je vrednost logikog izraza = true (tj. iteracioni uslov ispunjen), naredbe izmeu vitiastih zagrada bie izvrene; zatim se izvrava naredba za korak. Ponavljanja se izvravaju sve dok vrednost logikog izraza ne postane = false (tj. uslov iteracije ne bude vie ispunjen).

    Uputstvo:

    a) Petlje kao konstrukcije imaju smisla kada deo koji se ponavlja moe da se formulie u

    zavisnosti od koraka. b) Treba obratiti panju da su mogue konstelacije pri kojima uslovi itaracije nisu ili nikada

    ne mogu biti ispunjeni, tako da naredbe for petlje nikada ne mogu da budu ispunjene.

    Konstrukciono pravilo: for-petlje se mogu viestruko jedna unutar druge ugnezditi.

    Primer:

    Primer primene (videti primer u 6.6.5.1.): int imax, sum; imax = 10; sum = 0; for (int i =1; i

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    86

    6.2.6.6. Poboljanja

    Pri radu sa strukturnim elementima/struktogramima oformile su se pojedine dopune tj. poboljanja, koja mogu doprineti i poboljanjima pri formulisanju metoda. Na kratko emo prei na jednu svrsishodnu dopunu.

    Iteracija sa unutranjim prekidom

    Do sada objanjene iteracione konstrukcije su tako koriene, da se delovi koji se ponavljaju uvek izvravaju u potpunosti. Meutim, u praksi postoje ei sluajevi da se delovi koji se ponavljaju moraju pre vremena prekinuti, dakle, deo koji se ponavlja ne treba da se kompletno izvri.

    Izumitelji struktograma, Nassi i Shneiderman, su stoga predloili da se za sluajeve te vrste

    koriste iteracione konstrukcije while, odnosno do-while da bi se realizovao interni kriterijum prekida. Ukoliko se on dogodi pri obradi dela koji se ponavlja (telo petlje), petlja se naputa prevremeno (tzv. neprirodan izlaz).

    Iteracija sa prekidom Kratak opis: Ponavljanje operacije sa mogunou da se deo koji se ponavlja moe prevremeno napustiti,

    u zavisnosti od nekog unutranjeg kriterijuma prekida. Grafiki prikaz:

    a) while sa prekidom

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    87

    b) do-while sa prekidom

    Primena uslova prekida u JAVA naredbom break kao i if naredbom unutar naredbi

    while ili do-while if (logicki izraz / uslov prekida) break;

    Semantika: Kao uslov prekida ispituje se izraz uslov prekida (operacija poreenja); ukoliko se dobije

    vrednost true, tj. uslov je ispunjen, iteracija se prekida i nastavlja se prvim strukturnim elementom iza iteracije; ukoliko je vrednost false, tj. uslov prekida nije ispunjen, nastavie se sa izvravanjem naredbi 2 unutar iteracione petlje.

    Primer: if (i < 0) break; Konstrukciono pravilo:

    Struktura prekida se moe dalje tako poboljati da se anomalijski prekid u nastavku na strukturni elemenat uini raspoznatljivom pomou jedne ubaene alternative, to se vidi iz sledeeg primera.

    Primer:

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    88

    6.2.6.7. Vrednovanje u smislu softver inenjerstva

    Za projektovanje dobrog softvera rad sa strukturnim elementima/struktogramima ima izvanredno veliki znaaj. U tom smislu se pokazuju sledee prednosti:

    Procesi osmiljavanja se odvijaju struktuisano; oni su pregledni i uvek se mogu opisati.

    Moto: Prvo misli, potom kodiraj.

    Tokovi izvrenja programa su i bez izvravanja na raunaru pod kontrolom (statika kontrola).

    Softver se moe lake modifikovati tj. menjati, a time lake administrirati i odravati;

    razvoj softvera e time biti ekonominiji u poreenju sa ne-struktuiranim konceptom. Razvoj softvera orijentie se na standarde, tako da se razumljivost i transparentnost

    znaajno poboljavaju. 6.2.6.8. Uvoenje kontrolnih struktura u praktinu primenu Na osnovu jednog egzemplarno veeg primera primene u oblasti projektovanja konstrukcija

    (statika) treba pokazati kako se kontrolne strukture koriste za realizaciju obuhvatnijih operacija. Pritom je primer tako izabran da se objektno-orijentisano modeliranje u obliku klasa i objektdijagrama odvija u pozadini. Predmet interesovanja treba da bude pre svega nastajanje metoda. Ovde treba jo jednom naglasiti da i algoritamskom (proceduralnom) modelu razmatranja pri objektnoorijentisanom modeliranju inenjerskih problema pripada veliki znaaj. Praktini primer treba takoe da bude iskorien i za to da se pokae kako se znaajna interakcija izmeu korisnika softvera i raunara posebno u inenjerskim naukama moe realizovati. Mogunost da se utie na tok podataka u raunaru, na primer, interaktivnim unoenjem podataka, upravljanjem ili kontrolom (Prekid, mere korekcije sa mogunou restartovanja, izmeu ostalog), je karakteristika modernih softverskih sistema i podran je pre svega pomou JAVA programa.

    U programu JAVA posebno stoji na raspolaganju paket java.awt (abstract windowing

    toolkit), koji nudi bogat repertoar windows-tehnika (analogno u inenjerskoj informatici primenjivom operativnom sistemu Windows NT). Integrisanjem Windows-tehnika u nae (objektno-orijentisane) programe, unosi se svakako viestruka kompleksnost u poreenju sa proceduralnim programskim jezicima, koji nisu sadrali windows-tehnike, ve samo elementarne, ali zato brzo programirljive instrukcije. Neophodna kompleksnost u JAVA programu se ipak isplati, jer je konfor korisnika windows-baziranih programa (user-friendly) znaajno poboljan, a time je i prihvatanje programa od strane korisnika znatno poveano.

    Postavka problema iz statike (Mehanike)

    Danas je uobiajeno da se statini proraun noseih sistema, posebno kada su komplikovani,

    izvravaju programima. Kao opte upotrebljiva i vrlo efikasna raunska metoda se pokazala tzv.

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    89

    Final Element Method (FEM), Metoda konanih elemenata. Pomou FEM je mogue i po sebi najkomplikovanije nosee sisteme dobro i brzo pomou kompjutera proraunati. Metodika prorauna se u principu pri tome sastoji od odgovarajueg skupa veeg broja procedura, kojima u OOP odgovaraju metode.

    FEM je u svakom sluaju materija koja se ui u viim semestrima u statici. U detalje te

    metode se zato ovde nee ulaziti. Principijelni postupak pri primeni obuhvatnih raunskih operacija moe se ipak objasniti, bez ulaenja u pojedinosti. Kao to se iz donje skice vidi, radni delovi su podeljeni na module (Subroutine, Functions), koji se pozivaju iz jednog glavnog modula (Master- ili Main-Modul). Tok obrade (kontrolni tok) se pritom predstavlja u proceduralnim okvirima u tzv. organizacionom dijagramu (ema strukture programa). Direktno prevoenje konvencionalne eme strukture programa u OOM dodue nije mogue, ali ipak postoje slinosti.

    Na sledeem crteu je prikazana FORTRAN-aplikacija jednog FEM-programa sa

    procedurama baziranim na principu modularizacije:

    Jezgro prorauna kod FEM analize se sastoji u tome da se proraun mehaniko/statikih veliina za koje smo zainteresovani (po pravilu su to pomeranja vorova mree konanih elemenata) svede na sistem linearnih jednaina; ova ideja reavanja bie primenjena i na ovde posmatrani jednostavni nosa, Luk_na_tri_zgloba.

    Strukturni plan programa

    Odseak konstrukcije (FEM-Sistem)

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    90

    Razmatrani nosei sistem: Luk_na_tri_zgloba

    Prethodno datim zadatkom je izvrena

    definicija problema koja uvek prethodi primeni obuhvatnijeg raunskog postupka.

    Kao i kod objektnoorijentisanog modeliranja, pri primeni proceduralnog koncepta reenja

    sprovodi se analiza problema

    u okviru koje se razmatraju razliiti postupci reavanja s obzirom na njihove prednosti i mane. Ova analiza se u datom sluaju relativno jednostavno sprovodi.

    Kod ovog nosaa radi se o ramovskoj konstrukciji (sistem tapova, koji se primenjuje, na

    primer, kod krovnih nosaa, skela, mostova, kranova). Ovde moraju biti ispunjeni sledei preduslovi, koji determiniu oblast vanosti primenjenih postupaka reavanja problema:

    1. Sile (optereenja) moraju delovati samo u tapovima koji povezuju vorove, 2. vorovi se uzimaju kao zglobovi bez trenja, tako da pri razmatranju uticaja sila pod 1.

    tapovi mogu preuzeti sile pritiska ili istezanja, ali ne poprene sile niti momente savijanja.

    Primedba: U stvarnosti zglobovi nisu bez trenja; posebno, kod mnogih ramovskih konstrukcija su

    vorovi izvedeni kao nitnovane ili vajsovane veze. Ocena pomou jedne finije teorije pokazuje jasno da su razlike izmeu jedne krute veze i veze pomou idealnog zgloba (zglob bez trenja) zanemarljivo male.

    Pretpostavka:

    tapovi u ramu ne smeju biti previe kratki (na primer, maxmin 101 ll , ili , birati

    pogodno.

    zadato:Sile u vorovimaV, H, , trai se:Sile u tapovima S1, S2

    + +

    H

    V

    y+

    x+

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    91

    Izabrani postupak prorauna Za dati sluaj primene Luk_na_tri_zgloba (kao najjednostavniji sluaj u dole datom

    klasnom dijagramu Ramovska konstrukcija) najpogodnija je metoda preseka vorova (metoda deformacija, itd.).

    Metoda preseka vorova

    Da bi bio ispunjen uslov ravnotee vorova, mora da vai:

    .0sinsin0

    0coscos0

    21

    !

    21

    !

    =+===+==

    VSSK

    HSSK

    y

    x

    Sreivanjem se dobijaju jednaine

    ,sinsin

    coscos

    21

    21

    VSSHSS

    =+=+

    Konstrukcijastatiki odreena

    statiki neodreena

    lmax lmin

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    92

    koje predstavljaju linearni sistem jednaina sa nepoznatima, silama u tapovima 21, SS , koeficijentima sin,sin,cos,cos i na desnoj strani H i V .

    Raunarska obrada sistema linearnih jednaina (obino sa n linearnih jednaina i n

    nepoznatih) se tako sprovodi, da se postigne visoka opta tanost (princip generalizacije u softverskom inenjerstvu). Raunarska obrada tako estog problema kao to je reavanje sistema linearnih jednaina treba da bude to je mogue efikasnija.

    Sistemi jednaina se zato pri reavanju na raunaru u optem sluaju tako sreuju da se

    koeficijenti nepoznatih predstavljaju u matrinoj formi; same nepoznate se predstavljaju kao vektor i piu se sa desne strane matrice koeficijenata. U naem sluaju se dobija sledei nain pisanja:

    ,222,211,2

    122,111,1

    RSmSmRSmSm

    =+=+

    tj. u matrinoj formi

    =

    2

    1

    2

    1

    2221

    1211

    RR

    SS

    mmmm

    a potom i u sasvim optem obliku

    RSMrr =

    Prednost matrine notacije lei pre svega u tome da se pomou primenjenih indeksa

    posebno primenom brojane petlje (for) - pojedini elementi mogu direktno adresirati, ali i u tome da se bez previe sloenog pisanja mogu obraivati (princip formalizacije).

    Za matrine i vektorske strukture podataka postoje u veini programskih jezika

    odgovarajue jezike konstrukcije, tzv. nizovi i polja. To vai takoe i za JAVA, tako da emo ovde predstaviti nizove i polja.

    Nizovi i polja Kratak opis: Linearni niz komponenata podataka istog tipa. Definicija Opti oblik kod vektora Tip_podataka Referenca [] = new Tip_podataka [n]; Opti oblik kod 2-dimenzionalnih matrica Tip_podataka Referenca [] [] = new Tip_podataka [n] [m];

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    93

    Primeri double matrix [][] = new double[2][2]; long fa[] = new long [10]; double r [] = new double [2]; double s [] = new double [2]; Semantika

    Uvek se generie Referenca (npr. matrix, fa, r, s) na neko jednodimenziono ili

    dvodimenziono polje datog tipa podataka (double tj. long). Operatorom new se povezuje neki objekat datog tipa zadate veliine (= duina polja) u uglastim zagradama ( [] ) kome se moe pristupiti pomou odgovarajue reference.

    Pristup elementima polja se vri pomou indeksa. Vrednost indeksa pritom lei izmeu 0 i

    (duina polja-1). Primer Pomou Double m [][] = new double [2][2];

    bie generisano polje brojeva dimenzije (2x2) , tipa double, u sledeem redosledu memorisanja:

    [ ] [ ] [ ] [ ][ ] [ ] [ ] [ ]

    11,01,10,00

    mmmm

    Uvoenjem polja moe se sprovesti reavanje sistema linearnih jednaina na raunaru.

    (Moto: Kompjuter je ljubitelj matrica, matricofil!). Sve uobiajene numerike metode (npr. Gausov metod, metod Choleskog, itd.) primenjuju indeksirane veliine (polja, nizove) za formulisanje odgovarajuih algoritama.

    U ovim okvirima neemo navoditi neki opti metod za reavanje sistema linearnih

    jednaina, ve emo primeniti Kramerova pravila kojima se lako reavaju sistemi jednaina sa najvie dve, odnosno tri nepoznate, tj. jednaine.

    Dakle, sistem jednaina

    ,sinsin

    coscos

    21

    21

    VSSHSS

    =+=+

    pisaemo u obliku

    ,211110

    201100

    vSmSmhSmSm

    =+=+

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    94

    pri emu se m memorie kao matrica koeficijenata. Obe nepoznate se uvode kao skalarne veliine 21 , SS , a isto tako i slobodni lanovi na desnoj strani h i v . Po Kramerovim pravilima imaemo

    10011100

    0111

    1110

    0100

    11

    01

    1 mmmmmvmh

    mmmm

    mvmh

    s ==

    i

    .10011100

    1000

    1110

    0100

    10

    00

    2 mmmmmhmv

    mmmmvmhm

    s ==

    Kontrola toka za izvrenje prorauna moe se sada obuhvatiti struktogramom, pri emu

    emo posmatrati delove Unoenje, Proraun i Izlaz. Za svaki od tih delova razvija se sopstveni struktogram. Da bi se doprinelo utisku da su pojedini delovi nezavisni moduli, bie uveden novi strukturni element moduo pomou koga e metode biti predstavljene.

    Odatle se dobijaju sledea tri struktograma: Struktogram za unos

    Moduo/Metoda

    Unos uneti h, v

    uneti ,

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    95

    Gore sprovedena jednostavna podela na samostalne module odgovarala bi pristupu koji se primenjuje pri korienju tradicionalnih (proceduralnih) programskih jezika. Pri prevoenju u objektnoorijentisani program sa programom JAVA su neophodne modifikacije, jer objektno orijentisanje zahteva drugi ugao gledanja. Posebno treba upamtiti da

    a) Treba uvesti objekte koji se aktiviraju komunikacijama sa drugim objektima ili

    akcijama (events) korisnika, b) JAVA podrava tehniku prozora i postavljanje grafikih korisnikih interfejsa (GUI =

    Graphical User Interface), ime postie interaktivno povezivanje korisnika drugaije nego kod istih proceduralnih programskih koncepata.

    Za ovde posmatrani primer primene za Luk_na_tri_zgloba najvanije poznate veliine

    (podaci o strukturi) za proraun sila u tapovima, tj. optereenje u zglobu nosaa,

    - horizontalna sila ,h - vertikalna sila s ,

    Proraun po Krameru

    //Prevodjenje u radijane(neophodno za programiranje!)

    ==180180

    //Matrica koeficijenata ( )( )

    ( )( )= ===

    sin]1[]1[m

    sin]0[]1[mcos]1[]0[m

    cos]0[]0[m

    //Proracun glavne determinantedeterminanta = m [0] [0] * m [1] [1] - m [0] [1] * m [1] [0]

    | determinanta | < 10-4da ne

    z1Det = h * m [1] [1] - v * m [0] [1]

    z2Det = v * m [1] [1] - h * m [1] [0]

    Izlaz: Determinanta singularna!

    s1 =z1Det / determinanta

    s2 =z2Det / determinanta

    Izlaz izdati s1, s2

    Struktogram za proraun sila u tapovima

    Struktogram za izlaz

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    96

    kao i geometrijski podaci za uglove nagiba tapova,

    - ugao i - ugao

    mogu da se unesu pomou jednog prozora. Isti prozor se moe (opet radi pojednostavljenja) pored toga koristiti za iniciranje prorauna sila u tapovima. Ovde se koristi tzv. Button (Dugme), jedna prekidaka povrina. Isto tako, da bi se smanjilo programiranje, izlaz rezultata, tj.

    - sila 1S i - sila 2S

    unosi se u isti prozor (Za komplikovanije sluajeve nego to je ovaj, za interakciju sa korisnikom i izlaz rezultata, koriste se posebni prozori).

    Ovde prikazana Jedno-prozorna-logika vodi u sutini do sledeeg Jednostavnog prozora koji se generie kao podklasa Luk_na_tri_zgloba jedne u JAVA ve uvedene osnovne klase Frame.

    Klasa Frame je deo JAVA-paketa awt (abstract windowing toolkit), koji nudi razliite

    klase za kreiranje grafikih korisnikih povrina nezavisno od korisnike platforme MS-Windowsa ili drugih.

    Klasom Frame se posebno moe kreirati prozor na najviem nivou (tzv. toplevel window),

    koji sadri telo menija, kursor i ikonu (Videti 6.2.1.: paket java.awt.* sadri grafike elemente (boje, liste, menije, dijalog-prozore) i tzv. LayoutManager, koji preuzimaju ureenje komponenata). Mesto klase Frame u klasnoj hijerarhiji JAVA da bi se shvatile mogunosti programa JAVA predstavljeno je na sledeoj skici.

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    97

    Objektno-orijentisana implementacija prorauna sila u tapovima za Luk_na_tri_zgloba

    moe se, sa gore datim objanjenjima, najbolje na sledei nain pokazati:

    Generisanje klase Luk_na_tri_zgloba, koja je izvedena iz osnovne klase Frame i kojom treba da se rei problem Luk_na_tri_zgloba, ima pritom sledei oblik (Minimalni formalizam):

    Luk na tri zgloba

    . . .

    Frame

    Klasni dijagram za Frame/Luk na tri zgloba

    Statiki odreena konstrukcija

    Object

    Component

    Container

    Window

    Mesto klase Frame u hijerarhiji klasa JAVA programa

    Frame

    . . . . . .

    . . . . . .

    . . .

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    98

    Kada se prevede klasni dijagram Frame/Luk_na_tri_zgloba/... sa odgovarajuim metodama u JAVA-naredbe, dobija se sledei program:

    // ============================================= // Program III. import java.awt.*; public class Luk_na_tri_zgloba extends Frame { double hSila; double vSila; double alfa,beta; TextField hField = new TextField(""); TextField vField = new TextField(""); TextField aField = new TextField(""); TextField bField = new TextField(""); TextField s1Field = new TextField(""); TextField s2Field = new TextField(""); Button okButton = new Button("Izracunaj"); public Luk_na_tri_zgloba() { super("Luk_na_tri_zgloba"); setLayout(new GridLayout(9,2)); add(new Label ("Unosenje podataka")); add(new Label ("")); add(new Label ("Horizontalna sila")); add(hField); add(new Label ("Vertikalna sila")); add(vField); add(new Label ("Alfa")); add(aField); add(new Label ("Beta")); add(bField); add (okButton); add(new Label ("")); add(new Label ("Rezultati")); add(new Label ("")); add(new Label ("s1")); add(s1Field); add(new Label ("s2")); add(s2Field); pack(); show(); }

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    99

    public boolean handleEvent( Event e ) { if ( e.id == Event.WINDOW_DESTROY) { System.exit(0); } else if ( e.target == okButton && e.id == Event.ACTION_EVENT) { hSila = toDouble (hField); vSila = toDouble (vField); alfa = toDouble(aField)/180*Math.PI; beta = toDouble(bField)/180*Math.PI; double matrix[][] = new double[2][2]; matrix[0][0] = Math.cos(alfa) ; matrix[0][1] = Math.cos(beta) ; matrix[1][0] = Math.sin(alfa) ; matrix[1][1] = Math.sin(beta) ; double determinanta = matrix[0][0]*matrix[1][1]- matrix[1][0]*matrix[0][1] ; if (Math.abs(determinanta)

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    100

    double roundTo (double d, int i) { return ((double)Math.round(d*(int)Math.pow(10,i))); } double toDouble (TextField s) { return Double.valueOf (s.getText().trim()).doubleValue(); } String toString (double d) { return new Double(d).toString(); } public static void main(String[] args) { new Luk_na_tri_zgloba(); }

    } // Kraj III programa // =============================================

    6.2.7. Obrada izuzetaka Upravo pri primeni raunskih metoda pomou struktura objanjenih u prethodnom odeljku

    postaje jasno da se pritom mogu nainiti mnoge greke, bilo da se unesu pogreni podaci koji mogu prouzrokovati besmislene operacije, ili da nastaju greke u izvravanju kontrolnih naredbi usled, na primer, nedozvoljenih operacija (na primer, deljenje sa nulom, pristup nedozvoljenom podruju memorije, pogrean pristup sistemskim resursima, itd.). Mogunosti greke su skoro neiscrpne.

    Ni objektno-orijentisanim pristupom se to stanje nije izmenilo, ak su se pojavile mnoge

    nove mogunosti greke. Sa grekama pri razvoji softvera se mora iveti, a posebno se mora tretiranje nastalih greaka ispravno sprovoditi.

    Tradicionalni programski jezici FORTRAN, ALGOL, BASIC i C pri tome ne nude naroito

    prefinjene metode da bi se greke u toku izvravanja programa razmatrale ili spreile. Svako ko pie softver u jednom od navedenih programa mora da se sam stara za to da nastalu greku raspozna i ispravno je tretira. S obzirom na nezamislivo veliki broj mogunosti nastajanja greaka, ovo je esto jedan beznadean posao. Pri tom nastaje velika teta, poto greke ne samo da ne moraju da budu otkrivene, ve se ne moe ni odrediti kako program po nastanku greke treba da reaguje.

    Nasuprot tome, u JAVA, kao uostalom i u C++ je mogue tretirati greke tokom izvrenja

    programa. Predviene su prefinjene metode za sistematino i logiki struktuirano tretiranje greaka, ime softver postaje sigurniji i robusniji nego ranije.

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    101

    Greke se pritom u JAVA oznaavaju kao izuzeci (exceptions), pri emu se svako nastajanje incidenta koji prekida normalno odvijanje programa ocenjuje kao izuzetak. Kada nastupi greka, ona se mora, pre nego to se nastavi normalno izvrenje programa, ispraviti.

    Primer: izraunavanje korena

    ,22 yx sa .8,4 == yx

    Potkorena veliina e biti u tom sluaju negativna, tako da sa ,3484 22 = dobijamo imaginarni broj kao rezultat, to je izuzetak.

    Interesantno je da strukturno programiranje sa struktogramima, kao to je u prethodnom odeljku za opis raunskih operacija i tokova obrada podataka pomou metoda objanjeno, poseduje i eksplicitna pravila za obradu izuzetaka. Kod iteracija sa unutranjim prekidom, koji iz odreenih razloga prekida obradu naredbi koje se ponavljaju, prekid se isto tako ocenjuje kao izuzetak i direktno u nastavku iteracije eksplicitno navodi kao nezavisna alternativa (predlog poboljanja pronalazaa Nassi-Schneiderman-Struktograma).

    Primer: do-while-struktogram sa internim prekidom

    Ovo je jedan dobar primer za to, kako se tretiranje izuzetaka moe posmatrati kao znaajan konstruktivni elemenat razvoja softvera.

    Semantike mogunosti JAVA programa su znaajno bogatije i konfornije od gore datog

    tretmana koristei struktograme. Da bi se razumeo osnovni princip, dajemo realizaciju principijelnog postupka u programu JAVA.

    Principijelna procedura Kada se u JAVA programu desi izuzetak, na primer, izraunavanje korena sa negativnom

    potkorenom veliinom, metoda koja sadri tu naredbu generisae tzv. instancu za izuzetak

    Uslov prekida

    Uslov iteracija

    Uslov prekida

    Naredba pri nenormalnom izlazu

    da neNaredba pri normalnomizlazu

    Ponovljena naredba deo 1

    ostatak naredbi za ponavljanje

    u JAVA realizovano pomou: if (log. Izraz) break;

    Princip oslanjanja stranica

    narednistruktogrami

    inkapsulirana alternativa if-else, koja obrauje eksplicitno izuzetak

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    102

    (exception-instance), a ova e instancu proslediti run-time okolini (jedinica za nadgledanje programa koji se izvravaju). Generisana instanca za izuzetak sadri niz vanih informacija kao to su vreme nastanka izuzetka, status programa u tome trenutku, tip izuzetka, itd. Sve informacije e biti od strane run-time sistema vrednovane, da bi se po proceni izabrale odgovarajue mere za tretman greke-izuzetka. U JAVA terminoligiji se instanciranje izuzetka (tj. generisanje instance za izuzetak) i njeno prenoenje run-time sistemu oznaava kao Izbacivanje, tj. Throwing an exception i oekivanje reakcije; u stvari se sistemu za kontrolu procesa dostavlja informacija o nastalom problemu i oekuje reakcija sistema.

    Reakcija sistema zavisi od dostavljenih informacija koje se nalaze u jednom automatski

    aktiviranom staku (zove se trace stack); on sadri po redosledu pojavljivanja sve incidente koji dovode do izuzetaka. Poevi od najvieg ulaza, run-time sistem bira nain tretiranja izuzetka (Exception Handler). Izbor zavisi od toga da li je tip izuzetka isti sa tipom Exception Handlera. Postupak nalaenja i izbora oznaava se u JAVA-svetu kao hvatanje, tj. to catch an exception. Sluaj da neki izuzetak ne moe da pronae odgovarajui tretman se ne moe dogoditi, poto je unutranja organizacija tretmana izuzetaka tako postavljena, da uvek postoji Exception Handler (ako se dogodi, vodi do prekida tekueg programa, to bi trebalo izbegavati).

    Sve instance koje se Izbacuju su pritom sledei objektno-orijentisanu logiku instance

    jedne klase, ili klase pod imenom Exception, ili podklase izvedene iz ove klase. Klasa Exception je sa svoje strane opet jedna podklasa klase Throwable, koja se nalazi na najviem mestu mehanizma za tretiranje izuzetaka. Pregled hijerarhije klasa za tretman izuzetaka u JAVA programu daje sledei grafik, iako je dat samo jedan deo stabla klase Throwable (Izbacivanje).

    Objekat

    Sklon padu

    Izuzetak Greka

    Izuzetak pri izvrenju

    . . . . . . Stablo izuzetaka (deo); po nastanku izuzetaka koji pripadajuException delu, moe se programdalje izvravati. Aritmetiki-izuzetak

    . . .

    Izuzeci tipa "Greka/Error";Grana za greke, obino za tee greke, na primer pri linkovanju, itd., sa posledicom da program ne moe da se dalje izvrava

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    103

    Detaljni prikaz pojedinog izuzetka i tipa greke se moe videti iz sledeeg prikaza.

    Kao to se vidi, radi se o vrlo kompleksnom konceptu klasa, koji je pritom i tako

    organizovan da ima vanost za proizvoljne ciljne platforme. Stoga je jasno da jedan tako obuhvatni mehanizam za tretiranje greaka i izuzetaka podlee strogoj sintaksi, koja e biti nadalje obraena.

    Sintaksno ureenje tretiranja izuzetaka

    Svaki niz naredbi koji moe voditi nekom izuzetku (exception), mora biti ukljuen u

    takozvani try-block, koji poinje JAVA naredbom try. Ovo se sprovodi sledeom formalnom konstrukcijom:

    try { JAVA kod; }

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    104

    Preciznije: try { // grupa naredbi saglasno strukturnom dijagramu sa jednom ili vise naredbi koje

    // mogu da ukazu na greske i stampaju ih pomocu naredbe throw. }

    Bloku try-block mora da sledi, bez prekida drugim JAVA kodom, najmanje jedan tzv.

    catch-block, u kome se izuzeci hvataju naredbom catch. Pritom se koristi sledei ablon:

    try { // JAVA kod try-bloka } catch (IzuzetakKlasa1 Instanca1) { // tretman Izuzetka1 // pristup Instanci1 } catch (IzuzetakKlasa2 Instanca2 ) { // tretman Izuzetka2 // pristup Instanci2 }

    // itd. npr. naredne Catch-konstrukcije.

    Primer realizacije naredbe catch catch (ArithmeticException W) { System.out.println (Pronadjeni izuzetak= + W.getMessage()); }

    Semantika: Naredbe koje se nalaze unutar catch-bloka bie izvrene samo onda kada se dogode

    izuzeci koji korespondiraju sa izuzecima navedenim u bloku. to se via klasa izuzetaka pritom izabere, to se vie izuzetaka moe tretirati. Ali, opte deklaracije imaju malo smisla, jer tada se moe reagovati na izuzetke za koje tretman uopte nije bio uziman u obzir. Zato je potrebno da IzuzetakKlasa bude prilagoena konkretnom sluaju.

    Iza try-catch kombinacije moe da opcionalno sledi jedan finally-block. Ukoliko je

    finally-block predvien, on e biti u svakom sluaju izvren i kada nije nastupio izuzetak. finally-block se po pravilu upotrebljava za to da bi se oslobodili resursi koji za rad vie nisu potrebni. S time imamo ukupno sledeu JAVA-strukturu za obradu izuzetaka: try { // Programski kod koji moze, ali ne mora, voditi izuzecima }

  • 6. Uvod u objektno-orijentisano modeliranje / Softverski inenjering

    105

    catch (IzuzetakKlasaN InstancaN) { // tretman izuzetaka prema redosledu, za N=1,2,3, } finally (IzuzetakKlasa2 Instanca2 ) { // naredbe koje se u svakom sluaju izvrsavaju

    }

    Navedenim oblikom tretiranja izuzetaka posebno se povezuju sledee prednosti:

    normalni programski kod se moe osloboditi programskih delova koji se bave obradom greaka i time program ine nepreglednim (bolja preglednost, ponovna upotrebljivost i portabilnost),

    obrada greaka moe biti sistematski i inteligentno struktuirana (uteda rada,

    ponovna upotreba u slinim sluajevima).

    Obrada izuzetaka pomou strukture try-catch-finally mora se aktivirati metodama koje mogu generisati poseban sluaj izuzetka. To znai da kod tih metoda treba ostvariti odgovarajue povezivanje sa regulativom try-catch-finally. Cilj ovih metoda je da se pomou dodeljenih kljunih rei realizuje izvrni mehanizam za izbacivanje (Hinwerfen, throw) izuzetaka. Pri tome se posebno primenjuju:

    kljuna re throws, koja se preuzima u zaglavlje metode (tj. u signaturu), da bi

    idicirala koje izuzetke moe metoda da generie. Primer:

    public void imemetode throws IzuzetakKlasa { ;

    }

    kljuna re throw, kojom se inicira obrada izuzetaka i uvodi jedna throw naredba. Iza kljune rei throw mora biti navedena jedna instanca, tj. objekat klase Throwable ili njene podklase.

    Primer:

    throw new ArithmeticException(Imaginarni broj);

    U ovom sluaju se operatorom new generie istovremeno instanca klase ArithmeticException kao podklasa klase Exception. Prenos jednog teksta za tretman izuzetaka (Imaginarni broj) je mogu stoga na tako jednostavan nain zato to klasa Throwable izmeu ostalog sadri i strukturu tipa niz za memorisanje poruke o greki, kao i metodu getMessage za izlaz teksta. Inicijalizacija niza znakova se pritom odvija pomou konstruktora, koja se pri generisanju nove instance sa operatorom new automatski poziva.

  • Hartmann, orevi, Goci: Uvod u inenjersku informatiku I

    106

    Naredbama throws/throw moe se formulisati i metoda za izraunavanje korena, koja regulie sluaj negativne potkorene veliine.

    Primer: Izraunavanje korena

    // ============================================= // Program IV. public static double koren (double d) Throws ArithmeticException { if ( d < 0 ) throw new ArithmeticException (Imaginarni broj); else return Math.sqrt(d); }

    6.2.8. Viestruko nasleivanje / Modeliranje interfejsa Do sada predstavljeni odnosi izmeu klasa dozvoljavali su samo kreiranje jednostavnijih

    hijerarskijskih mrea (videti 6.2.4.). Kod ovih odnosa se govori o jednostrukom nasleivanju, kod koga kao to je upravo reeno svaka klasa ima najvie jednu nadklasu (superklasu).

    Primer: Klasifikacija (u biologiji)