You are on page 1of 75

Preddiplomski studij: 3.

godina Diplomski studij

Razvoj usluga i aplikacija za operacijski sustav Android


1. Objektno orijentirano programiranje i dizajn u programskom jeziku Java

Ak.g. 2012./2013.
Zatieno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/
18.10.2012.

Creative Commons
slobodno smijete:
l l l

dijeliti umnoavati, distribuirati i javnosti priopavati djelo remiksirati preraivati djelo

pod sljedeim uvjetima:

l 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 ili Vae koritenje njegova djela imate njegovu izravnu podrku). nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate 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

Uvod u objektno orijentirano programiranje u programskom jeziku Java

RUAZOSA

18.10.2012.

3 od 70

Klasian pristup izvoenja programa

Prevoditelji

Binarni kod Windows

Izvorni kod Macintosh

Solaris

RUAZOSA

18.10.2012.

4 od 75

Izvoenje programa pomou virtualnog stroja

Prevoditelji

Interpretor Windows

Izvorni kod

Byte kod Macintosh

Solaris

RUAZOSA

18.10.2012.

5 od 75

Prvi primjer
FirstExample.java:
public class FirstExample { public static void main(String[] args) { System.out.println("Ovo radi!!"); } }

prevoenje: pokretanje:

javac FirstExample.java java FirstExample

ispis:
Ovo radi!!

RUAZOSA

18.10.2012.

6 od 75

UML
t

UML Unified Modeling Language


t uite ga na OPP-u

grafiki jezik za:


vizualizaciju specificiranje konstrukciju i dokumentiranje

objektno orijentiranih programskih rjeenja

RUAZOSA

18.10.2012.

7 od 75

Svojstva olakava komunikaciju sudionika (kupac tj. naruitelj, konzultant, dizajner, programer, ) t neovisan o programskom jeziku t neovisan o razvojnom procesu t posjeduje mehanizme za proirenje i specijalizaciju (prilagodba novim potrebama) t neiskusni programeri uz UML lake ue i shvaaju OO koncepte
t

RUAZOSA

18.10.2012.

8 od 75

UML dijagrami

Use Case Use Case Diagrams Sequence Diagrams Diagrams Scenario Scenario Diagrams Collaboration Diagrams Diagrams Scenario Scenario Diagrams Statechart Diagrams Diagrams

Use Case Use Case Diagrams Use Case Diagrams Diagrams

State State Diagrams Class Diagrams Diagrams

State State Diagrams Object Diagrams Diagrams

Models

State State Diagrams Component Diagrams Diagrams


Component Component Diagrams Deployment Diagrams

Dinamiki dijagrami

Activity Diagrams

Diagrams

Statiki dijagrami

RUAZOSA

18.10.2012.

9 od 75

Objektni sustav
metode

atributi
poruka

objektni sustav = sustav meusobno povezanih objekata


meusobno komuniciraju razmjenom poruka u Javi: razmjena poruka = pozivanje metoda
atributi

programski objekt esto moe odgovarati "stvarnom" objektu


18.10.2012. 10 od 75

RUAZOSA

Ponaanje objekta, enkapsulacija


t

osnovno naelo u OO-jezicima:


identifikator stanje objekta skriveno ponaanje objekta dostupno

ponaanje ovisi o trenutnom stanju

skrivanje stanja = enkapsulacija t Java:


t

ponaanje = koje vrijednosti vraaju metode


metoda = objektova funkcija (javna) atribut = objektova privatna varijabla

stanje = trenutne vrijednosti atributa objekta

RUAZOSA

18.10.2012.

11 od 75

Analiza zahtjeva

RUAZOSA

18.10.2012.

12 od 70

Brainstorming 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?
t

RUAZOSA

18.10.2012.

13 od 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

Modeliranje pomou CRC kartica


t

CRC (Class Responsibility Collaborator) kartice


class responsibility collaborator

Klasa (class) predstavlja kolekciju slinih objekata Odgovornost (responsibility) sve to klasa zna ili radi Suradnik (collaborator) ponekad klasa sama nema sve informacije pa za neku odgovornost treba druge klase
RUAZOSA 18.10.2012. 15 od 75

Prepoznavanje klasa 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 klase t Imena klasa su imenice


t

RUAZOSA

18.10.2012.

16 od 75

Prepoznavanje odgovornosti to klasa zna? t to klasa radi? t emu pripada klasa?


t

Ponekad emo prepoznati odgovornosti koje neemo implementirati t Klase trebaju suraivati da bi mogle izvriti svoje odgovornosti
t

RUAZOSA

18.10.2012.

17 od 75

Definiranje suradnika Suradnik je potreban kada klasa treba informacije koje nema (nisu u njenoj odgovornosti) t Treba postojati barem jedan inicijator za svaku suradnju t Ponekad suradnici odrade veinu posla t Nove odgovornosti se mogu stvoriti da bi se ispunila neka suradnja
t

RUAZOSA

18.10.2012.

18 od 75

Definiranje sluajeva uporabe (use cases) Potrebno je pojedine sluajeve opisati t Ti sluajevi se koriste za funkcijsko testiranje t Na temelju tih sluajeva naruitelj provjerava da li sustav radi
t t

Moemo koristiti UML-ov dijagram sluajeva uporabe (Use Case Diagram)

RUAZOSA

18.10.2012.

19 od 75

Premjetanje kartica Kartice s klasama koje surauju trebaju biti blie jedna k drugoj t to vie klase surauju to su kartice blie t Na poetku se kartice miu esto t Kartice koje smo vie micali stavljamo u centar
t

RUAZOSA

18.10.2012.

20 od 75

Isprobati sluajeve uporabe


1. 2. 3. 4. 5. 6. 7.

Odabrati sluaj uporabe (scenarij) Odrediti koja kartica je zaduena za njega Dopisati u karticu ako je potrebno neto dodati Objasniti logiku procesiranja Dogovarati se po potrebi Kada je jedna kartica gotova vratiti natrag izvravanje Paralelno pisati slijedne dijagrame (sequence diagram)

RUAZOSA

18.10.2012.

21 od 75

Dizajn koda

RUAZOSA

18.10.2012.

22 od 70

Izrada koncepta aplikacije


t

Iz CRC kartica napraviti dijagram klasa


Dodati relacije Upisati atribute Upisati metode

Napraviti slijedne dijagrame (sequence) s konkretnim metodama

RUAZOSA

18.10.2012.

23 od 75

Primjer CRC kartica nije gotovo


nastavnik -stvara pitanja -stvara ispit -dohvaa rezultate ispita svih studenata ks ks ks Student -odgovara na pitanja -polae ispit -dohvaa rezultate svog ispita ks ks ks

korisniko suelje (ks) -prima unos novih pitanja i sprema ih -ispisuje pitanja -prima unos ispita -prima odgovore na pitanja baza pitanja (bp) -sprema pitanja -ima listu svih pitanja -ima predloke ispita -stvara novi ispit za studenta nastavnik, bp student, pitanje nastavnik, bp student,ispit

ispit -zna koja su pitanja u ispitu -postavlja pitanje -sprema odgovore pitanje ks ks

pitanje -zna tekst -zna toan odgovor -zna provjeriti toan odgovor

RUAZOSA

18.10.2012.

24 od 75

Primjer uporabe objekta


public class Main {

kreiranje objekta, zapis reference u varijablu

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

pozivi metoda nad objektom

RUAZOSA

18.10.2012.

25 od 75

Klasa ShortAnswerQuestion
public class ShortAnswerQuestion { private String text; private String correctAnswer;

atributi

public ShortAnswerQuestion(String text, String correctAnswer) { konstruktor this.text = text; this.correctAnswer = correctAnswer; } public String getText() { return text; }

objekta

metode koje ispoljavaju ponaanje (povratna vrijednost ovisi o trenutnom stanju)

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


RUAZOSA 18.10.2012. 26 od 75

UML-ov dijagram klase ShortAnswerQuestion


public class ShortAnswerQuestion { private String text; private String correctAnswer; public ShortAnswerQuestion(String text, String correctAnswer) { this.text = text; ShortAnswerQuestion this.correctAnswer = correctAnswer; -text: String }
-correctAnswer: String

public String getText() { return text; }

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

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


RUAZOSA 18.10.2012. 27 od 75

Klasa ono to definiramo datotekom izvornog koda t predloak za objekte


t

koje atribute i metode e imati objekt

objekt = instanca svoje klase t klasa je vrsta podatka, kao i int ili float
t t

atribut: privatna varijabla objekta


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

RUAZOSA

18.10.2012.

28 od 75

Druge namjene klase ne slue sve klase za instanciranje t npr. klasa Main
t

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

slui za pokretanje programa

RUAZOSA

18.10.2012.

29 od 75

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

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

Identifikatori i arobni brojevi


t t

na engleskom jeziku 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

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: private static final int ARRAY_SIZE = 10;

RUAZOSA

18.10.2012.

31 od 75

Klase i metode
Klase

predstavlja predmet, imenicu to je mogue jednostavnija samo jedna namjena


Metode

public class ClassName extends SuperClass implements Interface1, Interface2 { // tijelo uvueno za // jedan korak } public void methodName( SomeClass argument ) throws SomethingThrowable { // tijelo uvueno za // jedan korak }

predstavlja djelovanje, glagol poeljno jedan ekran, najdulje A4 stranica pazite na dug niz argumenata

skupite srodne argumente u jednu klasu suzite funkcionalnost metode

RUAZOSA

18.10.2012.

32 od 70

Softverska dokumentacija dokumentacija je informacija o proizvodu namijenjena korisniku t unutranja i vanjska t programer dokumentira (opisuje) svoj rad za:
t

samog sebe (unutranja) (poznate) lanove tima (unutranja) (nepoznate) budue programere (unutranja) ljude koji e samo koristiti (vanjska)

RUAZOSA

18.10.2012.

33 od 75

Samodokumentirajui kod
t

upute raunalu ujedno razumljive ljudima


identifikator razumljiv po imenu objekti domene rjeenja odgovaraju tono pojmovima domene problema kodne apstrakcije prate ljudske

komentari:
samo najnuniji jezgrovite, ali pune reenice usput, ne naknadno

RUAZOSA

18.10.2012.

34 od 75

Komentari (1)
t t t

pozicioniranje: prije koda ponekad na kraju linije koda (inline) samo ako je komentar vrlo kratak i takvim e ostati odaberite stil oblikovanja
minimalni trud pri pisanju lako se moe proiriti ili prepraviti

t t

jednolinijski komentar: // komentar 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

Komentari (2)
t

Komentari koji ponavljaju kod


// z je korijen iz zbroja kvadrata z = Math.sqrt( x*x + y*y );

ne valja:

nema novih informacija zakruje kod

Komentari koji objanjavaju 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 objanjenja su nuna kod optimiziranog koda

RUAZOSA

18.10.2012.

36 od 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

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

Javadoc komentari mehanizam generiranja vanjske API dokumentacije na osnovu komentara u kodu t poinju s /**, zavravaju s */ t piu se prije deklaracije klase, varijable ili metode t moe se formatirati u HTML-u t posebne oznake u komentaru poinju s @
t

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

RUAZOSA

18.10.2012.

38 od 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

Generirani HTML iz primjera (1)

RUAZOSA

18.10.2012.

40 od 75

Komentari (4)
t

iskomentirani kod
privremeno izbaen dio napisanog koda jednolinijski bez razmaka

vielinijski sa /* i */
t

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

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 public static void main(String[] args) { // TODO Auto-generated constructor stub }

primjer:

RUAZOSA

18.10.2012.

41 od 75

Oznake u kodu

RUAZOSA

18.10.2012.

42 od 75

Dodavanje novih oznaka u kodu

RUAZOSA

18.10.2012.

43 od 75

Nadopunjavanje koda (predloci templates)


t

Pregledavanje postojeih:
Eclipse Preferences Java Editor Templetes

RUAZOSA

18.10.2012.

44 od 75

Dijagram klasa (class diagram) opisuje klase objekata u sustavu te statike relacije izmeu njih t prikazuje operacije (metode u Javi) i atribute klasa t tijekom razvojnog procesa dijagrami klasa se detaljiziraju od konceptualnih dijagrama do dijagrama dovoljnih za kreiranje koda
t
<<stereotip>> ImeKlase +atribut1:int #atribut2:int -atribut3:long +op1(param:int):long

+ public # protected - private

RUAZOSA

18.10.2012.

45 od 75

Dijagram klasa relacije (1)

t asocijacija

Predavac

ime

Predmet

t agregacija

n opisuje najopenitiju vezu izmeu klasa n ne misli se na komunikaciju n moe biti jednosmjerna n pokazuje da klasa sadri druge klase tj. da je dio druge klase n Predmet sadri SadrzajPredmeta n isto kao agregacija samo to nitko nema referencu na objekt osim objekta koji je komponiran tom klasom
SadrzajPredmeta

t kompozicija

Poglavlje

RUAZOSA

18.10.2012.

46 od 75

Dijagram klasa relacije (2)

t uloge u relacijama

t viestrukost

n kraj relacije koji se spaja na simbol klase zove se uloga n uloge mogu imati imena n ime uloge je obino imenica koja objanjava svrhu relacije u klasi i ima definiranu viestrukost i viestrukost vidljivost
1 tono 1 * 0 ili vie 0..2 od 0 do 2 (raspon) 6,10 6 i 10 (nabrajanje) 4..6, 10 od 4 do 6 i 10 (kombinacija)

SadrzajPredmeta

1..*

+predavanja uloge

+predavac

PredavaceveInformacije

RUAZOSA

18.10.2012.

47 od 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 stvaranje podklase koja predstavlja dodavanje novih elemenata

KorisnickeInformacije

PolaznikoveInformacije

PredavaceveInformacije

RUAZOSA

18.10.2012.

48 od 75

Dijagram klasa relacije (4) t realizacija


n realizacija je slina nasljeivanju samo to se kod realizacije nasljeuju samo operacije s parametrima, a bez implementacije
interface Printer +printaj(in dokument) : boolean

PdfFileWriter

PsFileWriter

t koritenje/ovisnost
n pokazuje da jedan objekt jedne klase (User) koristi objekt druge klase (Printer)
User Printer

RUAZOSA

18.10.2012.

49 od 75

Repriza klasa Main


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

Dijagram klasa primjera

ShortAnswerQuestion Main +main():void


-text: String -correctAnswer: String +ShortAnswerQuestion() +getText() : String +isCorrectAnswer() : boolean

RUAZOSA

18.10.2012.

51 od 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

Dijagram objekata (object diagram) opisuje sustav u jednom vremenskom trenutku t opisuje stvarne podatke koji bi se mogli nalaziti u objektima t vrlo slian dijagramu klasa t osnovni elementi:
t

objekt asocijacija

question1:ShortAnswerQuestion text = " Android?" correctAnswer="Java"

question2:ShortAnswerQuestion text = " iPhone?" correctAnswer="Objective-C"

RUAZOSA

18.10.2012.

53 od 75

Primjer itanja 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

Izgradnja sustava objekata


kompozicija i agregacija

RUAZOSA

18.10.2012.

55 od 70

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

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

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

Kopozicija objekata
dijagram klasa
Quiz
-name:String -noOfQuestions: int

dijagram objekata
nalExam:Quiz name = "Final Exam"

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

questions
-questions 0..10

questions question2:ShortAnswerQuestion text = " iPhone?" correctAnswer="Objective-C"

question1:ShortAnswerQuestion text = " Android?" correctAnswer="Java"

ShortAnswerQuestion
-text: String -correctAnswer: String +ShortAnswerQuestion() +getText() : String +isCorrectAnswer() : boolean

RUAZOSA

18.10.2012.

59 od 70

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

Konstruktor kreiranje objekta: potrebna je inicijalizacija t dovoenje objekta u poetno stanje t to se obavlja konstruktorom
t

procedura koja se izvrava prilikom stvaranja objekta

RUAZOSA

18.10.2012.

61 od 75

Repriza: klasa ShortAnswerQuestion


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); } }
RUAZOSA 18.10.2012. 62 od 75

Konstruktor klasa Quiz


public class Quiz { private String name; private ShortAnswerQuestion[] questions = new ShortAnswerQuestion[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

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

UML-ov dijagram agregacija


Quiz
-name:String -noOfQuestions: int

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

-questions

0..10

ShortAnswerQuestion
-text: String -correctAnswer: String +ShortAnswerQuestion() +getText() : String +isCorrectAnswer() : boolean

RUAZOSA

18.10.2012.

65 od 75

Polimorfizam

RUAZOSA

18.10.2012.

66 od 70

Klasa MultipleChoiceQuestion
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

Dvije klase pitanja


public class ShortAnswerQuestion { private String text; private String correctAnswer; public class MultipleChoiceQuestion { private String text; private String correctAnswer1; private String correctAnswer2; ... public String getText() { return text; } public boolean isCorrectAnswer( String answer) { ... } }

... public String getText() { return text; } public boolean isCorrectAnswer( String answer) { ... } }

RUAZOSA

18.10.2012.

68 od 70

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

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")); }

dinamiko povezivanje!
oekivani ispis:

SAQ Pitenje: pitanje1 o1: true o2: false MCQ Pitenje: pitanje2 o1: true o2: true

RUAZOSA

18.10.2012.

70 od 75

Question je suelje

public interface Question { String getText(); boolean isCorrectAnswer(String answer); }

RUAZOSA

18.10.2012.

71 od 75

UML-ov dijagram sa sueljem

<<interface>> Question +getText(): String +isCorrectAnswer(): boolean

IShortAnswerQuestion
-text: String -correctAnswer: String +ShortAnswerQuestion() +getText() : String +isCorrectAnswer() : boolean

IMultipleChoiceQuestion
-text: String -correctAnswer1: String -correctAnswer2: String +MultipleChoiceQuestion() +getText() : String +isCorrectAnswer() : boolean

RUAZOSA

18.10.2012.

72 od 75

Najava implementacije suelja


public class IShortAnswerQuestion implements Question { private String text; private String correctAnswer; public class IMultipleChoiceQuestion implements Question { private String text; private String correctAnswer1; private String correctAnswer2; ... public String getText() { return text; } public boolean isCorrectAnswer( String answer) { ... } }

... public String getText() { return text; } public boolean isCorrectAnswer( String answer) { ... } }

RUAZOSA

18.10.2012.

73 od 70

Suelje pravila
t

nema implementacije metoda:


public interface Question { String getText(); boolean isCorrectAnswer(String answer); }

t t t

samo deklaracije metoda


najavljen popis metoda koje e objekt imati

koristimo ga kao vrstu podatka


kao da je klasa s punom implementacijom

u suelju sve metode su javne


oznaka public se podrazumijeva, ne treba pisati

RUAZOSA

18.10.2012.

74 od 75

Koritenje suelja
t

suelje se redovito koristi kao vrsta:


parametra metode povratne vrijednosti metode atributa lokalne varijable

openito, koristi se svugdje gdje je mogue

RUAZOSA

18.10.2012.

75 od 75

You might also like