RUAZOSA-2012_01

Embed Size (px)

Citation preview

  • 7/28/2019 RUAZOSA-2012_01

    1/75

    Preddiplomski studij:

    3. godina

    Diplomski studij

    Ak.g. 2012./2013.

    Razvoj usluga i aplikacija za

    operacijski sustav Android

    1.

    Objektno orijentirano programiranje i dizajn u

    programskom jeziku Java

    Zatieno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

    18.10.2012.

  • 7/28/2019 RUAZOSA-2012_01

    2/75

    Creative Commons

    slobodno smijete:l dijeliti umnoavati, distribuirati i javnosti priopavati djelol remiksirati preraivati djelo

    pod sljedeim uvjetima:l imenovanje. Morate priznati i oznaiti autorstvo djela na nain kako je

    specificirao autor ili davatelj licence (ali ne nain koji bi sugerirao da Vi iliVae koritenje njegova djela imate njegovu izravnu podrku).

    l nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe.l dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ilistvarate koristei ga, preradu moete distribuirati samo pod licencom koja

    je ista ili slina ovoj.

    U sluaju daljnjeg koritenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete

    ovog djela. Najbolji nain da to uinite je linkom na ovu internetsku stranicu.Od svakog od gornjih uvjeta mogue je odstupiti, ako dobijete doputenje nositelja autorskog prava.Nita u ovoj licenci ne naruava ili ograniava autorova moralna prava.

    Tekst licencije preuzet je s http://creativecommons.org/.

    RUAZOSA 18.10.2012. 2 od 75

  • 7/28/2019 RUAZOSA-2012_01

    3/75

    Uvod u objektno orijentirano

    programiranje u programskom jezikuJava

    RUAZOSA 18.10.2012. 3 od 70

  • 7/28/2019 RUAZOSA-2012_01

    4/75

    Klasian pristup izvoenja programa

    Izvorni

    kod

    Windows

    Macintosh

    Solaris

    Prevoditelji Binarni kod

    RUAZOSA 18.10.2012. 4 od 75

  • 7/28/2019 RUAZOSA-2012_01

    5/75

  • 7/28/2019 RUAZOSA-2012_01

    6/75

    Prvi primjer

    FirstExample.java:public class FirstExample {

    public static void main(String[] args) {System.out.println("Ovo radi!!");

    }}

    prevoenje:javac FirstExample.java

    pokretanje:java FirstExample

    ispis:Ovo radi!!

    RUAZOSA 18.10.2012. 6 od 75

  • 7/28/2019 RUAZOSA-2012_01

    7/75

    UML

    t UML Unified Modeling Languagetuite ga na OPP-u

    t grafiki jezik za: vizualizaciju

    specificiranje

    konstrukciju i dokumentiranje

    objektno orijentiranih programskih rjeenja

    RUAZOSA 18.10.2012. 7 od 75

  • 7/28/2019 RUAZOSA-2012_01

    8/75

    Svojstva

    t olakava komunikaciju sudionika (kupac tj. naruitelj,konzultant, dizajner, programer, )

    t neovisan o programskom jezikut neovisan o razvojnom procesut posjeduje mehanizme za proirenje i specijalizaciju

    (prilagodba novim potrebama)t neiskusni programeri uz UML lake ue i shvaaju OO

    koncepte

    RUAZOSA 18.10.2012. 8 od 75

  • 7/28/2019 RUAZOSA-2012_01

    9/75

    UML dijagrami

    Use CaseDiagramsUse Case

    DiagramsUse CaseDiagrams

    ScenarioDiagramsScenario

    DiagramsCollaborationDiagrams

    StateDiagramsState

    DiagramsComponentDiagrams

    ComponentDiagramsComponent

    DiagramsDeployment

    Diagrams

    StateDiagramsState

    DiagramsObjectDiagrams

    ScenarioDiagramsScenario

    DiagramsStatechartDiagrams

    Use CaseDiagramsUse Case

    DiagramsSequenceDiagrams

    StateDiagramsState

    DiagramsClassDiagrams

    ActivityDiagrams

    Models

    Statikidijagrami

    Dinamikidijagrami

    RUAZOSA 18.10.2012. 9 od 75

  • 7/28/2019 RUAZOSA-2012_01

    10/75

    Objektni sustav

    t objektni sustav = sustav meusobnopovezanih objekata meusobno komuniciraju razmjenom poruka u Javi: razmjena poruka = pozivanje metoda

    tprogramski objekt

    esto mo

    e odgovarati"stvarnom" objektu

    metode

    atributi

    atributi

    poruka

    RUAZOSA 18.10.2012. 10 od 75

  • 7/28/2019 RUAZOSA-2012_01

    11/75

    Ponaanje objekta, enkapsulacija

    t osnovno naelo u OO-jezicima: identifikator stanje objekta skriveno ponaanje objekta dostupno

    ponaanje ovisi o trenutnom stanjut skrivanje stanja = enkapsulacijat Java:

    ponaanje = koje vrijednosti vraaju metode metoda = objektova funkcija (javna)

    stanje = trenutne vrijednosti atributa objekta atribut = objektova privatna varijabla

    RUAZOSA 18.10.2012. 11 od 75

  • 7/28/2019 RUAZOSA-2012_01

    12/75

    Analiza zahtjeva

    RUAZOSA 18.10.2012. 12 od 70

  • 7/28/2019 RUAZOSA-2012_01

    13/75

    Brainstorming

    t Za koga je sustav?t to e sustav raditi?t Koji poslovne potrebe treba sustav podravati?t Koje informacije korisnik sustava treba imati?t Podrava li sustav timski rad?t Kako je najjeftinije to napraviti?t Kako moemo to najbolje napraviti?

    RUAZOSA 18.10.2012. 13 od 75

  • 7/28/2019 RUAZOSA-2012_01

    14/75

    Aplikacija Quiz zadatak

    t Ideja: Nastavnik slae skup pitanja za studente Student rjeava ispit Student moe odgovarati na pitanja ispita Postoje razliite vrste pitanja:

    Pitanja s kratkim odgovorima npr. jedna rije Pitanja s vie tonih odgovora npr. a, c Povezivanje pojmova npr. a1,b2,c3

    RUAZOSA 18.10.2012. 14 od 75

  • 7/28/2019 RUAZOSA-2012_01

    15/75

  • 7/28/2019 RUAZOSA-2012_01

    16/75

    Prepoznavanje klasa

    t to komunicira sa sustavom ili je dio sustava?t Postoji li korisnik?t Koji se izvjetaji generiraju?t Koje su najvanije klase?

    t Koristite jednu do dvije rijei za ime klaset Imena klasa su imenice

    RUAZOSA 18.10.2012. 16 od 75

  • 7/28/2019 RUAZOSA-2012_01

    17/75

    Prepoznavanje odgovornosti

    t to klasa zna?t to klasa radi?t emu pripada klasa?t Ponekad emo prepoznati odgovornosti koje neemo

    implementiratit Klase trebaju suraivati da bi mogle izvriti svoje

    odgovornosti

    RUAZOSA 18.10.2012. 17 od 75

  • 7/28/2019 RUAZOSA-2012_01

    18/75

    Definiranje suradnika

    t Suradnik je potreban kada klasa treba informacije kojenema (nisu u njenoj odgovornosti)

    t Treba postojati barem jedan inicijator za svaku suradnjut Ponekad suradnici odrade veinu poslat Nove odgovornosti se mogu stvoriti da bi se ispunila neka

    suradnja

    RUAZOSA 18.10.2012. 18 od 75

  • 7/28/2019 RUAZOSA-2012_01

    19/75

    Definiranje sluajeva uporabe (use cases)

    t Potrebno je pojedine sluajeve opisatit Ti sluajevi se koriste za funkcijsko testiranjet Na temelju tih sluajeva naruitelj provjerava da li sustav

    radi

    t Moemo koristiti UML-ov dijagram sluajeva uporabe (UseCase Diagram)

    RUAZOSA 18.10.2012. 19 od 75

  • 7/28/2019 RUAZOSA-2012_01

    20/75

    Premjetanje kartica

    t Kartice s klasama koje surauju trebaju biti blie jedna kdrugoj

    t to vie klase surauju to su kartice bliet Na poetku se kartice miu estot Kartice koje smo vie micali stavljamo u centar

    RUAZOSA 18.10.2012. 20 od 75

  • 7/28/2019 RUAZOSA-2012_01

    21/75

    Isprobati sluajeve uporabe

    1. Odabrati sluaj uporabe (scenarij)2. Odrediti koja kartica je zaduena za njega3. Dopisati u karticu ako je potrebno neto dodati4. Objasniti logiku procesiranja5. Dogovarati se po potrebi6. Kada je jedna kartica gotova vratiti natrag izvravanje7. Paralelno pisati slijedne dijagrame (sequence diagram)

    RUAZOSA 18.10.2012. 21 od 75

  • 7/28/2019 RUAZOSA-2012_01

    22/75

    Dizajn koda

    RUAZOSA 18.10.2012. 22 od 70

  • 7/28/2019 RUAZOSA-2012_01

    23/75

    Izrada koncepta aplikacije

    t Iz CRC kartica napraviti dijagram klasa Dodati relacije Upisati atribute Upisati metode

    tNapraviti slijedne dijagrame (sequence) s konkretnimmetodama

    RUAZOSA 18.10.2012. 23 od 75

  • 7/28/2019 RUAZOSA-2012_01

    24/75

    Primjer CRC kartica nije gotovo

    RUAZOSA

    nastavnik

    -stvara pitanja-stvara ispit

    -dohvaa rezultate

    ispita svih

    studenata

    ksks

    ks

    Student

    -odgovara napitanja-polae ispit-dohvaa rezultatesvog ispita

    ks

    ksks

    korisniko suelje (ks)

    -prima unos novih

    pitanja i sprema ih-ispisuje pitanja-prima unos ispita-prima odgovore napitanja

    nastavnik, bp

    student, pitanjenastavnik, bpstudent,ispit

    baza pitanja (bp)

    -sprema pitanja-ima listu svih

    pitanja-ima predlokeispita-stvara novi ispit zastudenta

    ispit

    -zna koja su pitanjau ispitu-postavlja pitanje

    -sprema odgovore

    pitanje

    ks

    ks

    pitanje

    -zna tekst-zna toan odgovor-zna provjeriti toan

    odgovor

    18.10.2012. 24 od 75

  • 7/28/2019 RUAZOSA-2012_01

    25/75

    Primjer uporabe objekta

    public class Main {

    public static void main(String[] args) {

    ShortAnswerQuestion question = new ShortAnswerQuestion(

    "U kojem jeziku se programira za Android?", "Java");

    System.out.println(question.getText());

    System.out.println("C: " + question.isCorrectAnswer("C"));

    System.out.println("java: " + question.isCorrectAnswer("java"));}

    }

    Ispis programa:U kojem jeziku se programira za Android?

    C: false

    java: true

    kreiranje objekta, zapis

    reference u varijablu

    pozivi metodanad objektom

    RUAZOSA 18.10.2012. 25 od 75

  • 7/28/2019 RUAZOSA-2012_01

    26/75

    public class ShortAnswerQuestion {

    private String text;private String correctAnswer;

    public ShortAnswerQuestion(String text, String

    correctAnswer) {

    this.text = text;

    this.correctAnswer = correctAnswer;

    }

    public String getText() {

    return text;

    }

    public boolean isCorrectAnswer(String answer) {return correctAnswer.equalsIgnoreCase(answer);

    }

    }

    Klasa ShortAnswerQuestion

    atributi

    konstruktor objekta

    metode koje ispoljavaju ponaanje

    (povratna vrijednost ovisi o

    trenutnom stanju)

    RUAZOSA 18.10.2012. 26 od 75

  • 7/28/2019 RUAZOSA-2012_01

    27/75

    public class ShortAnswerQuestion {

    private String text;private String correctAnswer;

    public ShortAnswerQuestion(String text, String

    correctAnswer) {

    this.text = text;

    this.correctAnswer = correctAnswer;

    }

    public String getText() {

    return text;

    }

    public boolean isCorrectAnswer(String answer) {return correctAnswer.equalsIgnoreCase(answer);

    }

    }

    UML-ov dijagram klase ShortAnswerQuestion

    +ShortAnswerQuestion()+getText() : String+isCorrectAnswer() : boolean

    -text: String-correctAnswer: String

    ShortAnswerQuestion

    RUAZOSA 18.10.2012. 27 od 75

  • 7/28/2019 RUAZOSA-2012_01

    28/75

    Klasa

    t ono to definiramo datotekom izvornog kodat predloak za objekte

    koje atribute i metode e imati objektt objekt = instanca svoje klaset klasa je vrsta podatka, kao i int ili floatt atribut: privatna varijabla objekta

    svi objekti iste klase imaju iste atribute ali svaki ima svoje vrijednosti atributa

    RUAZOSA 18.10.2012. 28 od 75

  • 7/28/2019 RUAZOSA-2012_01

    29/75

    Druge namjene klase

    t ne slue sve klase za instanciranjet npr. klasa Main

    ima samo posebnu metodu main nema atribute nema normalne metode instanca te klase je neupotrebljiva

    t slui za pokretanje programa

    RUAZOSA 18.10.2012. 29 od 75

  • 7/28/2019 RUAZOSA-2012_01

    30/75

    itljivost koda

    t preteno mala slova (lowercase)t praznine se koriste zbog itljivosti

    uvlaenje ocrtava ustroj cijele datoteke koda razmaci odreuju ustroj izraza i izjava prazne linije odvajaju blokove koda

    t postoje standardi kodiranja

    RUAZOSA 18.10.2012. 30 od 75

  • 7/28/2019 RUAZOSA-2012_01

    31/75

    Identifikatori i arobni brojevi

    t na engleskom jezikut identifikatori

    klase i suelja poinju velikim, svi ostali malim slovom logike varijable i metode: isValid, canOpen dohvaanje vrijednosti objekta: get getArea, getRealPart postavljanje vrijednost objekta: set setRealPart

    t neimenovane konstante u kodu primjer: duljina polja u zadatku je 10 nejasan kod (Otkud tu 10?) tekoe u promjeni konstante

    ponekad 10 znai neto drugo negdje pie od 0 do 9

    definirati i smisleno nazvati konstantu:privatestaticfinal int ARRAY_SIZE = 10;

    RUAZOSA 18.10.2012. 31 od 75

  • 7/28/2019 RUAZOSA-2012_01

    32/75

    Klase i metode

    Klase predstavlja predmet, imenicu to je mogue jednostavnija samojedna namjena

    Metode predstavlja djelovanje, glagol poeljno jedan ekran,

    najdulje A4 stranica pazite na dug niz

    argumenata skupite srodne argumente u

    jednu klasu suzite funkcionalnost metode

    publicclass ClassNameextends SuperClass

    implements Interface1,Interface2

    {

    // tijelo uvueno za

    // jedan korak

    }

    publicvoidmethodName(SomeClass argument

    )

    throws SomethingThrowable

    {

    // tijelo uvueno za

    // jedan korak}

    RUAZOSA 18.10.2012. 32 od 70

  • 7/28/2019 RUAZOSA-2012_01

    33/75

    Softverska dokumentacija

    t dokumentacija je informacija o proizvodu namijenjenakorisniku

    t unutranja i vanjskat programer dokumentira (opisuje) svoj rad za:

    samog sebe (unutranja)

    (poznate)

    lanove tima (unutra

    nja) (nepoznate) budue programere (unutranja) ljude koji e samo koristiti (vanjska)

    RUAZOSA 18.10.2012. 33 od 75

  • 7/28/2019 RUAZOSA-2012_01

    34/75

    Samodokumentirajui kod

    t upute raunalu ujedno razumljive ljudima identifikator razumljiv po imenu objekti domene rjeenja odgovaraju tono pojmovima domene

    problema

    kodne apstrakcije prate ljudsket komentari:

    samo najnunijijezgrovite, ali pune reenice usput, ne naknadno

    RUAZOSA 18.10.2012. 34 od 75

  • 7/28/2019 RUAZOSA-2012_01

    35/75

    Komentari (1)

    t pozicioniranje: prije kodat ponekad na kraju linije koda (inline) samo ako je komentarvrlo

    kratak i takvim e ostati

    t odaberite stil oblikovanja minimalni trud pri pisanju lako se moe proiriti ili prepraviti

    tjednolinijski komentar: // komentar

    t vrste komentara: izvedbeni komentari

    ponavljaju kod, objanjavaju kod, saetak koda, opisuju namjeru javadoc komentari iskomentirani kod oznake u kodu

    RUAZOSA 18.10.2012. 35 od 75

  • 7/28/2019 RUAZOSA-2012_01

    36/75

    Komentari (2)

    t Komentari koji ponavljaju kod// z je korijen iz zbroja kvadrataz = Math.sqrt( x*x + y*y );

    ne valja: nema novih informacija zakruje kod

    tKomentari koji obja

    njavaju kod kad je kod prekompliciran

    obino je bolje popraviti kod nego ga objanjavati esto na osnovu pretpostavke da itatelj ne zna programski jezik

    ili njegov dio

    obja

    njenja su nu

    na kod optimiziranog koda

    RUAZOSA 18.10.2012. 36 od 75

  • 7/28/2019 RUAZOSA-2012_01

    37/75

    Komentari (3)

    t Komentari kao saetak koda vei dio koda se saeto opisuje na taj nain se bre prolazi kroz kod u jeziku domene rjeenja dobar postupak:

    napisati suelje metode tijelo popuniti pseudokodom na prirodnom jeziku zamijeniti svaku liniju pseudokoda sa stvarnim kodom pseudokod pretvoriti u komentare

    t Komentari koji opisuju namjeru autora ako je iz koda jasno to se radi treba odgovoriti zato to autor radi u jeziku domene problema

    RUAZOSA 18.10.2012. 37 od 75

  • 7/28/2019 RUAZOSA-2012_01

    38/75

    Javadoc komentari

    t mehanizam generiranja vanjske APIdokumentacije naosnovu komentara u kodu

    t poinju s /**, zavravaju s */t piu se prije deklaracije klase, varijable ili metodet moe se formatirati u HTML-ut posebne oznake u komentaru poinju s @

    za klase: author, version... za metode: param, return, throws, deprecated...

    RUAZOSA 18.10.2012. 38 od 75

  • 7/28/2019 RUAZOSA-2012_01

    39/75

    Primjer Javadoc izvornog koda

    /**

    * This is the Question which accepts only short answer. Short

    * answer is one word.

    *

    * @author Mario Kuek

    *

    */

    public class ShortAnswerQuestion {

    /**

    * Text of question.*/

    private String text;

    /**

    * Correct answer of the question.

    */

    private String correctAnswer;

    ...

    RUAZOSA 18.10.2012. 39 od 75

  • 7/28/2019 RUAZOSA-2012_01

    40/75

    Generirani HTML iz primjera (1)

    RUAZOSA 18.10.2012. 40 od 75

  • 7/28/2019 RUAZOSA-2012_01

    41/75

    Komentari (4)

    t iskomentirani kod privremeno izbaen dio napisanog koda jednolinijski bez razmaka

    //System.out.println( "i = " + i ); vielinijski sa /* i */

    t komentari koji slue kao oznake u kodu oznake samom sebi ili drugim lanovima tima

    dio koda nije dovren ne nalazi se u konanoj verziji koda alati podravaju brzo pronalaenje takvog koda

    primjer:public static void main(String[] args) {

    // TODO Auto-generated constructor stub

    }

    RUAZOSA 18.10.2012. 41 od 75

  • 7/28/2019 RUAZOSA-2012_01

    42/75

    Oznake u kodu

    RUAZOSA 18.10.2012. 42 od 75

  • 7/28/2019 RUAZOSA-2012_01

    43/75

    Dodavanje novih oznaka u kodu

    RUAZOSA 18.10.2012. 43 od 75

  • 7/28/2019 RUAZOSA-2012_01

    44/75

    Nadopunjavanje koda (predloci templates)

    t Pregledavanje postojeih: Eclipse Preferences Java Editor Templetes

    RUAZOSA 18.10.2012. 44 od 75

  • 7/28/2019 RUAZOSA-2012_01

    45/75

    Dijagram klasa (class diagram)

    t opisuje klase objekata u sustavu te statike relacije izmeunjih

    t prikazuje operacije (metode u Javi) i atribute klasat tijekom razvojnog procesa dijagrami klasa se detaljiziraju

    od konceptualnih dijagrama do dijagrama dovoljnih za

    kreiranje koda

    ImeKlase

    +atribut1:int

    #atribut2:int

    -atribut3:long

    +op1(param:int):long

    + public

    # protected

    - private

    RUAZOSA 18.10.2012. 45 od 75

  • 7/28/2019 RUAZOSA-2012_01

    46/75

    Dijagram klasa relacije (1)

    t asocijacijan opisuje najopenitiju

    vezu izmeu klasan ne misli se na komunikacijun moe biti jednosmjerna

    tagregacijan pokazuje da klasa sadri druge klase tj.

    da je dio druge klasen Predmet sadri SadrzajPredmeta

    t kompozicijan isto kao agregacija samo to nitko nema

    referencu na objekt osim objekta koji je

    komponiran tom klasom

    Predavac Predmetime

    SadrzajPredmeta

    Poglavlje

    RUAZOSA 18.10.2012. 46 od 75

  • 7/28/2019 RUAZOSA-2012_01

    47/75

    Dijagram klasa relacije (2)

    t uloge u relacijaman kraj relacije koji se spaja na simbol

    klase zove se ulogan uloge mogu imati imenan ime uloge je obino imenica koja objanjava

    svrhu relacije u klasi

    i ima definiranu viestrukost ividljivost

    t viestrukost1 tono 1* 0 ili vie0..2 od 0 do 2 (raspon)6,10 6 i 10 (nabrajanje)

    4..6, 10 od 4 do 6 i 10 (kombinacija)

    SadrzajPredmeta

    PredavaceveInformacije

    +predavanja1..*

    +predavac1

    viestrukost uloge

    RUAZOSA 18.10.2012. 47 od 75

  • 7/28/2019 RUAZOSA-2012_01

    48/75

    Dijagram klasa relacije (3)

    t Nasljeivanje (generalizacija, specijalizacija) relacija izmeu klasa kada klase dijele strukturu i/ili ponaanje neke klase pojmovi:

    nadklasa ili klasa roditelj (KorisnickeInformacije) podklasa ili klasa dijete ili derivirana klasa ili izvedena klasa

    (PolaznikoveInformacije)

    podklasa nasljeuje nadklasu generalizacija omoguuje stvaranje

    nadklase koja objedinjuje strukturu i

    ponaanje zajedniko za nekoliko klasa

    specijalizacija omoguuje stvaranjepodklase koja predstavlja

    dodavanje novih elemenata

    PolaznikoveInformacije

    KorisnickeInformacije

    PredavaceveInformacije

    RUAZOSA 18.10.2012. 48 od 75

  • 7/28/2019 RUAZOSA-2012_01

    49/75

    Dijagram klasa relacije (4)

    trealizacijanrealizacija je slina nasljeivanjusamo to se kod realizacijenasljeuju samo operacije s

    parametrima, a bez

    implementacijetkoritenje/ovisnost

    npokazuje da jedan objekt jedneklase (User) koristi objekt druge

    klase (Printer)

    +printaj(in dokument) : boolean

    interface

    Printer

    PdfFileWriter PsFileWriter

    User Printer

    RUAZOSA 18.10.2012. 49 od 75

  • 7/28/2019 RUAZOSA-2012_01

    50/75

    Repriza klasaMain

    public class Main {

    public static void main(String[] args) {

    ShortAnswerQuestion question = new ShortAnswerQuestion(

    "U kojem jeziku se programira za Android?", "Java");

    System.out.println(question.getText());

    System.out.println("C: " + question.isCorrectAnswer("C"));

    System.out.println("java: " + question.isCorrectAnswer("java"));}

    }

    RUAZOSA 18.10.2012. 50 od 75

  • 7/28/2019 RUAZOSA-2012_01

    51/75

    Dijagram klasa primjera

    +ShortAnswerQuestion()+getText() : String

    +isCorrectAnswer() : boolean

    -text: String-correctAnswer: String

    ShortAnswerQuestion

    +main():void

    Main

    RUAZOSA 18.10.2012. 51 od 75

  • 7/28/2019 RUAZOSA-2012_01

    52/75

    Primjer s dvije instance (MainTwoInstances)

    public static void main(String[] args) {

    ShortAnswerQuestion question1 = new ShortAnswerQuestion(

    "U kojem jeziku se programira za Android?", "Java");ShortAnswerQuestion question2 = new ShortAnswerQuestion(

    "U kojem jeziku se programira za iPhone?", "Objective-C");

    System.out.println(question1.getText());

    System.out.print("objective-c: " +

    question1.isCorrectAnswer("objective-c"));

    System.out.println(" java: " + question1.isCorrectAnswer("java"));

    System.out.println(question2.getText());

    System.out.print("objective-c: " +

    question2.isCorrectAnswer("objective-c"));

    System.out.println(" java: " + question2.isCorrectAnswer("java"));

    }

    Ispis programa:U kojem jeziku se programira za Android?objective-c: false java: true

    U kojem jeziku se programira za iPhone?

    objective-c: true java: false

    RUAZOSA 18.10.2012. 52 od 75

  • 7/28/2019 RUAZOSA-2012_01

    53/75

    Dijagram objekata (object diagram)

    t opisuje sustav u jednom vremenskom trenutkut opisuje stvarne podatke koji bi se mogli nalaziti u objektimat vrlo slian dijagramu klasat osnovni elementi:

    objekt

    asocijacija

    text = " Android?"correctAnswer="Java"

    question1:ShortAnswerQuestion

    text = " iPhone?"correctAnswer="Objective-C"

    question2:ShortAnswerQuestion

    RUAZOSA 18.10.2012. 53 od 75

  • 7/28/2019 RUAZOSA-2012_01

    54/75

    Primjeritanja s tipkovnice (MainScanner)

    public static void main(String[] args) {

    ShortAnswerQuestion question = new ShortAnswerQuestion(

    "U kojem jeziku se programira za Android?", "Java");

    System.out.println(question.getText());

    Scanner scanner = new Scanner(System.in);

    boolean isCorrectAnswer = false;

    while(!isCorrectAnswer) {

    String answer = scanner.nextLine();

    isCorrectAnswer = question.isCorrectAnswer(answer);

    if(isCorrectAnswer)

    System.out.println("Tono!!!!");

    else

    System.out.println("Netono.");

    }}

    RUAZOSA 18.10.2012. 54 od 75

  • 7/28/2019 RUAZOSA-2012_01

    55/75

    Izgradnja sustava objekata

    kompozicija i agregacija

    RUAZOSA 18.10.2012. 55 od 70

  • 7/28/2019 RUAZOSA-2012_01

    56/75

    Povezivanje objekata u sustav

    t objekt A sadri referencu na objekt B time je A povezan s B moe pozivati njegove metode

    RUAZOSA 18.10.2012. 56 od 75

  • 7/28/2019 RUAZOSA-2012_01

    57/75

    Klasa Quiz (1)

    public class Quiz {

    private String name;

    private ShortAnswerQuestion[] questions = new ShortAnswerQuestion[10];private int noOfQuestions = 0;

    public Quiz() {

    name = "Initial Quiz";

    }

    public String getName() {

    return name;}

    public void addQuestion(String text, String answer) {

    questions[noOfQuestions] = new ShortAnswerQuestion(text, answer);

    noOfQuestions++;

    //TODO maksimalan broj pitanja

    }

    public int getNoOfQuestions() {

    return noOfQuestions;

    }

    RUAZOSA 18.10.2012. 57 od 75

  • 7/28/2019 RUAZOSA-2012_01

    58/75

    Klasa Quiz (2)

    public String getQuestion(int index) {

    return questions[index].getText();

    }

    public boolean isCorrectAnswer(int questionIndex, String answer) {

    return questions[questionIndex].isCorrectAnswer(answer);

    }

    }

    RUAZOSA 18.10.2012. 58 od 75

  • 7/28/2019 RUAZOSA-2012_01

    59/75

    Kopozicija objekata

    dijagram klasa

    dijagram objekata

    text = " Android?"correctAnswer="Java"

    question1:ShortAnswerQuestion

    text = " iPhone?"correctAnswer="Objective-C"

    question2:ShortAnswerQuestion

    name = "Final Exam"

    finalExam:Quiz

    questions questions

    +ShortAnswerQuestion()+getText() : String+isCorrectAnswer() : boolean

    -text: String-correctAnswer: String

    ShortAnswerQuestion

    +getName():String+addQuestion()+getNoOfQuestions(): int+getQuestion():String+isCorrectAnswer():bool

    -name:String-noOfQuestions: int

    Quiz

    1

    -questions 0..10

    RUAZOSA 18.10.2012. 59 od 70

  • 7/28/2019 RUAZOSA-2012_01

    60/75

    Primjer koritenja klase Quiz

    public static void main(String[] args) {

    Quiz quiz = new Quiz();

    quiz.addQuestion("U kojem jeziku se programira za Android?", "Java");quiz.addQuestion("U kojem jeziku se programira za iPhone?",

    "Objective-C");

    Scanner scanner = new Scanner(System.in);

    int noOfCorrectAnswers = 0;

    for (int i = 0; i < quiz.getNoOfQuestions(); i++) {

    System.out.println(quiz.getQuestion(i));

    String answer = scanner.nextLine();

    if(quiz.isCorrectAnswer(i, answer)) {

    noOfCorrectAnswers++;

    System.out.println("Tono!");

    } else {

    System.out.println("Netono.");

    }

    }

    System.out.println("Imali ste " + noOfCorrectAnswers + " tonih

    odgovora od ukupno " + quiz.getNoOfQuestions() + ".");

    }

    RUAZOSA 18.10.2012. 60 od 75

  • 7/28/2019 RUAZOSA-2012_01

    61/75

    Konstruktor

    t kreiranje objekta: potrebna je inicijalizacijat dovoenje objekta u poetno stanjet to se obavlja konstruktorom

    procedura koja se izvrava prilikom stvaranja objekta

    RUAZOSA 18.10.2012. 61 od 75

  • 7/28/2019 RUAZOSA-2012_01

    62/75

    public class ShortAnswerQuestion {

    private String text;

    private String correctAnswer;

    public ShortAnswerQuestion(String text, String

    correctAnswer) {

    this.text = text;

    this.correctAnswer = correctAnswer;

    }

    public String getText() {

    return text;

    }

    public boolean isCorrectAnswer(String answer) {

    return correctAnswer.equalsIgnoreCase(answer);

    }

    }

    Repriza: klasaShortAnswerQuestion

    RUAZOSA 18.10.2012. 62 od 75

  • 7/28/2019 RUAZOSA-2012_01

    63/75

    Konstruktor klasa Quiz

    public class Quiz {

    private String name;

    private ShortAnswerQuestion[] questions = newShortAnswerQuestion[10];

    private int noOfQuestions = 0;

    public Quiz() {

    name = "Initial Quiz";

    }

    public Quiz(String name) {

    this.name = name;

    }

    public String getName() {

    return name;

    }

    ...

    RUAZOSA 18.10.2012. 63 od 75

  • 7/28/2019 RUAZOSA-2012_01

    64/75

    Agregacija - klasa Quiz

    public class Quiz {

    private String name;

    private ShortAnswerQuestion[] questions = new ShortAnswerQuestion[10];private int noOfQuestions = 0;

    ...

    public void addQuestion(String text, String answer) {

    questions[noOfQuestions] = new ShortAnswerQuestion(text, answer);

    noOfQuestions++;

    //TODO maksimalan broj pitanja

    }

    public void addQuestion(ShortAnswerQuestion question) {

    questions[noOfQuestions] = question;

    noOfQuestions++;

    //TODO maksimalan broj pitanja

    }

    RUAZOSA 18.10.2012. 64 od 75

  • 7/28/2019 RUAZOSA-2012_01

    65/75

    UML-ov dijagram agregacija

    +ShortAnswerQuestion()+getText() : String+isCorrectAnswer() : boolean

    -text: String-correctAnswer: String

    ShortAnswerQuestion

    +getName():String+addQuestion()+getNoOfQuestions(): int+getQuestion():String+isCorrectAnswer():bool

    -name:String-noOfQuestions: int

    Quiz

    1

    -questions 0..10

    RUAZOSA 18.10.2012. 65 od 75

  • 7/28/2019 RUAZOSA-2012_01

    66/75

    Polimorfizam

    RUAZOSA 18.10.2012. 66 od 70

  • 7/28/2019 RUAZOSA-2012_01

    67/75

    KlasaMultipleChoiceQuestion

    public class MultipleChoiceQuestion {

    private String text;

    private String correctAnswer1;private String correctAnswer2;

    public MultipleChoiceQuestion(String text,String correctAnswer1, String correctAnswer2) {

    this.text = text;

    this.correctAnswer1 = correctAnswer1;

    this.correctAnswer2 = correctAnswer2;}

    public String getText() {

    return text;

    }

    public boolean isCorrectAnswer(String answer) {

    return correctAnswer1.equalsIgnoreCase(answer) ||correctAnswer2.equalsIgnoreCase(answer);

    }

    }

    RUAZOSA 18.10.2012. 67 od 75

  • 7/28/2019 RUAZOSA-2012_01

    68/75

    Dvije klase pitanja

    public class ShortAnswerQuestion {

    private String text;

    private String correctAnswer;

    ...

    public String getText() {

    return text;

    }

    public boolean isCorrectAnswer(

    String answer) {

    ...

    }

    }

    public class MultipleChoiceQuestion {

    private String text;

    private String correctAnswer1;

    private String correctAnswer2;

    ...

    public String getText() {

    return text;

    }

    public boolean isCorrectAnswer(

    String answer) {

    ...

    }

    }

    RUAZOSA 18.10.2012. 68 od 70

  • 7/28/2019 RUAZOSA-2012_01

    69/75

    Polimorfizam primjer

    public class MainInterface {

    public static void main(String[] args) {Question question1 = new IShortAnswerQuestion("pitanje1", "o1");Question question2 = new IMultipleChoiceQuestion("pitanje2", "o1",

    "o2");

    System.out.println("SAQ");

    useQuestion(question1);

    System.out.println("MCQ");

    useQuestion(question2);}

    ...

    RUAZOSA 18.10.2012. 69 od 75

  • 7/28/2019 RUAZOSA-2012_01

    70/75

    Polimorfizam primjer

    private static void useQuestion(Question question) {

    System.out.println("Pitenje: " + question.getText());

    System.out.println("o1: " + question.isCorrectAnswer("o1"));

    System.out.println("o2: " + question.isCorrectAnswer("o2"));

    }

    t oekivani ispis:SAQPitenje: pitanje1o1: true

    o2: false

    MCQPitenje: pitanje2

    o1: trueo2: true

    dinamiko povezivanje!

    RUAZOSA 18.10.2012. 70 od 75

  • 7/28/2019 RUAZOSA-2012_01

    71/75

    Questionje suelje

    public interface Question {

    String getText();

    boolean isCorrectAnswer(String answer);

    }

    RUAZOSA 18.10.2012. 71 od 75

    UM dij lj

  • 7/28/2019 RUAZOSA-2012_01

    72/75

    UML-ov dijagram sa sueljem

    +ShortAnswerQuestion()+getText() : String

    +isCorrectAnswer() : boolean

    -text: String-correctAnswer: String

    IShortAnswerQuestion

    +MultipleChoiceQuestion()

    +getText() : String+isCorrectAnswer() : boolean

    -text: String-correctAnswer1: String-correctAnswer2: String

    IMultipleChoiceQuestion

    +getText(): String+isCorrectAnswer(): boolean

    Question

    RUAZOSA 18.10.2012. 72 od 75

    N j i l t ij lj

  • 7/28/2019 RUAZOSA-2012_01

    73/75

    Najava implementacije suelja

    public class IShortAnswerQuestion

    implements Question

    {

    private String text;

    private String correctAnswer;

    ...

    public String getText() {return text;

    }

    public boolean isCorrectAnswer(

    String answer) {

    ...

    }

    }

    public class IMultipleChoiceQuestion

    implements Question

    {

    private String text;

    private String correctAnswer1;

    private String correctAnswer2;

    ...

    public String getText() {return text;

    }

    public boolean isCorrectAnswer(

    String answer) {

    ...

    }

    }

    RUAZOSA 18.10.2012. 73 od 70

    S lj il

  • 7/28/2019 RUAZOSA-2012_01

    74/75

    Suelje pravila

    t nema implementacije metoda:public interface Question {String getText();

    boolean isCorrectAnswer(String answer);

    }

    t samo deklaracije metoda najavljen popis metoda koje e objekt imati

    t koristimo ga kao vrstu podatka kao da je klasa s punom implementacijom

    t u suelju sve metode sujavne oznakapublicse podrazumijeva, ne treba pisati

    RUAZOSA 18.10.2012. 74 od 75

    K it j lj

  • 7/28/2019 RUAZOSA-2012_01

    75/75

    Koritenje suelja

    t suelje se redovito koristi kao vrsta: parametra metode povratne vrijednosti metode atributa lokalne varijable

    t openito, koristi se svugdje gdje je mogue