Upload
milekitic2005
View
219
Download
0
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