You are on page 1of 82

Struktura e kontrollit: Urdhrat kushtzues

Struktura e kontrollit: Urdherat kushtezues fq. 1

Struktura e kontrollit: Urdhrat kushtzues


Objektivat: T studiohet rrjedha e kontrollit t programit dhe nj form e re urdhri, urdhri kushtzues, e cila i mundson metods t bj pyetje mbi vlerat e argumenteve t saj ose t dhnave hyrse. Mbshtetur n prgjegjjet n pyetjet, metoda mund t kontrolloj rrjedhn e llogaritjes n rrugn m t prshtatshme pr kto vlera.

Struktura e kontrollit: Urdherat kushtezues fq. 2

Struktura e kontrollit: Urdhrat kushtzues


Objektivat: T studiohet rrjedha e kontrollit t programit dhe nj form e re urdhri, urdhri kushtzues, e cila i mundson metods t bj pyetje mbi vlerat e argumenteve t saj ose t dhnave hyrse. Mbshtetur n prgjegjjet n pyetjet, metoda mund t kontrolloj rrjedhn e llogaritjes n rrugn m t prshtatshme pr kto vlera. T studiohen operatort logjik dhe t msohet logjika prapa urdhrave kushtzues.

Struktura e kontrollit: Urdherat kushtezues fq. 2

Struktura e kontrollit: Urdhrat kushtzues


Objektivat: T studiohet rrjedha e kontrollit t programit dhe nj form e re urdhri, urdhri kushtzues, e cila i mundson metods t bj pyetje mbi vlerat e argumenteve t saj ose t dhnave hyrse. Mbshtetur n prgjegjjet n pyetjet, metoda mund t kontrolloj rrjedhn e llogaritjes n rrugn m t prshtatshme pr kto vlera. T studiohen operatort logjik dhe t msohet logjika prapa urdhrave kushtzues. T shfrytzohet dituria mbi rrjedhn e kontrollit pr t zhvilluar ndrtim aplikacionesh n m tepr detaje; n veanti, aplikacioni ndahet n tri komponente: model, view (pamje) dhe controller (kontrollues), ku view merr prgjegjsin pr hyrjen dhe daljen e t dhnave, kontrolluesi pr rrjedhn e kontrollit, kurse modeli merr prgjegjsin pr llogaritjet e prgjegjjeve.

Struktura e kontrollit: Urdherat kushtezues fq. 2

Rrjedha e kontrollit dhe struktura e kontrollit


Rrjedh e kontrollit: renditja n t ciln ekzekutohen urdhrat e nj programi.

Struktura e kontrollit: Urdherat kushtezues fq. 3

Rrjedha e kontrollit dhe struktura e kontrollit


Rrjedh e kontrollit: renditja n t ciln ekzekutohen urdhrat e nj programi. Struktur e kontrollit: form urdhri e cila prcakton rrjedhn e kontrollit.

Struktura e kontrollit: Urdherat kushtezues fq. 3

Rrjedha e kontrollit dhe struktura e kontrollit Vazhdim

Struktura e kontrollit e vargut t urdhrave


URDHRI1; URDHRI2; ... URDHRIn;

prcakton rrjedhn e kontrollit t ekzekutimit t njpasnjshm t urdhrave prkatse.

Struktura e kontrollit: Urdherat kushtezues fq. 4

Rrjedha e kontrollit dhe struktura e kontrollit Vazhdim

Struktura e kontrollit e vargut t urdhrave


URDHRI1; URDHRI2; ... URDHRIn;

prcakton rrjedhn e kontrollit t ekzekutimit t njpasnjshm t urdhrave prkatse. Struktura e kontrollit e invokimit t metods
PRANUESI.METODA(ARGUMENTET)

prcakton rrjedhn e kontrollit t pauzimit t ekzekutimit n vendin e invokimit ashtu q urdhrat e emrtuara me METODA n PRANUESI t ekzekutohen n vijim.

Struktura e kontrollit: Urdherat kushtezues fq. 4

Struktura kushtzuese e kontrollit


Urdhr kushtzues (urdhr if): struktur kontrolli e cila shtron nj pyetje (test) dhe n baz t prgjegjjes zgjedh nj rrjedh t kontrollit.

Struktura e kontrollit: Urdherat kushtezues fq. 5

Struktura kushtzuese e kontrollit


Urdhr kushtzues (urdhr if): struktur kontrolli e cila shtron nj pyetje (test) dhe n baz t prgjegjjes zgjedh nj rrjedh t kontrollit. Sintaksa e urdhrit kushtzues: if ( TESTI ) { URDHRAT1 } else { URDHRAT2 }

Struktura e kontrollit: Urdherat kushtezues fq. 5

Struktura kushtzuese e kontrollit


Urdhr kushtzues (urdhr if): struktur kontrolli e cila shtron nj pyetje (test) dhe n baz t prgjegjjes zgjedh nj rrjedh t kontrollit. Sintaksa e urdhrit kushtzues: if ( TESTI ) { URDHRAT1 } else { URDHRAT2 } Semantika: n qoft se rezultati i testit sht true, ather ekzekutohen URDHRAT1 (then-krahu); n qoft se rezultati i testit sht false, ather ekzekutohen URDHRAT2 (else-krahu).

Struktura e kontrollit: Urdherat kushtezues fq. 5

Struktura kushtzuese e kontrollit Vazhdim


/** Afishon se a sht argumenti negativ. * @param i - argumenti */ public void printPolarity(int i) { System.out.print("Numri " + i + " sht "); if ( i < 0 ) { System.out.println("negativ.");} else { System.out.println("jonegativ.");} System.out.println("Fund!"); }

Struktura e kontrollit: Urdherat kushtezues fq. 6

Struktura kushtzuese e kontrollit Vazhdim

TESTI? true URDHRAT1 false URDHRAT2

Figura 1. Skema e rrjedhes se kontrollit te percaktuar nga urdheri kushtezues

Struktura e kontrollit: Urdherat kushtezues fq. 7

Struktura kushtzuese e kontrollit Vazhdim


Ndonjher, kur dshirohet t specikohet vetm then-krahu, urdhri kushtzues shkruhet n formn
if ( TESTI ) { URDHRAT }

e cila sht shkurtes pr


if ( TESTI ) { URDHRAT } else { }

Struktura e kontrollit: Urdherat kushtezues fq. 8

Struktura kushtzuese e kontrollit Vazhdim


Algoritmi i nj aplikacioni i cili konverton ort n sekonda: 1. Lexo nga shfrytzuesi (si hyrje) nj numr t plot, i cili paraqet sasin e orve. 2. N qoft se numri i plot sht jonegativ, ather kthe ort n sekonda. Prndryshe, numri i plot nuk sht jonegativ, prandaj asho nj mesazh gabimi.

Struktura e kontrollit: Urdherat kushtezues fq. 9

Struktura kushtzuese e kontrollit Vazhdim


import javax.swing.*; /** Konverton ort n sekonda. * Input: numr i plot jonegativ * Output: koha e konvertuar n sekonda */ public class ConvertHours { public static void main(String[] args) { int hours = new Integer( JOptionPane.showInputDialog("Numri i orve")).intValue();

Struktura e kontrollit: Urdherat kushtezues fq. 10

Struktura kushtzuese e kontrollit Vazhdim


if ( hours >= 0 ) { int seconds = hours * 60 * 60; JOptionPane.showMessageDialog(null, hours + " or jan " + seconds + " sekonda"); } else { JOptionPane.showMessageDialog(null, "Gabim: hyrje negative " + hours); } } }

Struktura e kontrollit: Urdherat kushtezues fq. 11

Urdhrat kushtzues t vendosur prbrenda


Urdhra kushtzues mund t vendosen prbrenda ndonjrit nga kraht e nj urdhri kushtzues tjetr, pr t koduar situata kur ekzistojn pyetje t shumshta pr tu testuar.

Struktura e kontrollit: Urdherat kushtezues fq. 12

Urdhrat kushtzues t vendosur prbrenda Vazhdim


Algoritmi pr nj version m t avansuar t MakeChange: 1. Lexo eurot si nj numr t plot. 2. N qoft se eurot jan negativ, ather gjenero nj mesazh gabimi. Prndryshe, eurot jan jonegativ: (a) Lexo centt, numr i plot. (b) N qoft se centt jan negativ, ather gjenero nj mesazh gabimi. Prndryshe, centt jan jonegativ: i. N qoft se centt jan m t mdhenj se 99, ather gjenero nj mesazh gabimi. Prndryshe, centt jan n intrvalin 0. . . 99: A. Llogarit totalin e eurove dhe centve. B. Nxjerr sasin prkatse t metelikve gjysmeurosh, njzetqindarksh, dhjetqindarksh, pesqindarksh dhe qindarksh.

Struktura e kontrollit: Urdherat kushtezues fq. 13

Urdhrat kushtzues t vendosur prbrenda Vazhdim

import javax.swing.*; /** Llogarit sasin e metelikeve. * Input: dy numra t dhn n rreshtin komandues sasia e eurove dhe sasia e centve * * Output: sasit e metelikve */ public class MakeChange { public static void main (String[] args) { int euros = new Integer(args[0]).intValue(); if ( euros < 0 ) { JOptionPane.showMessageDialog(null, "Gabim: euro negativ " + euros); }

Struktura e kontrollit: Urdherat kushtezues fq. 14

Urdhrat kushtzues t vendosur prbrenda Vazhdim

else { int cents = new Integer(args[1]).intValue(); if ( cents < 0 ) { JOptionPane.showMessageDialog(null, "Gabim: cent negativ " + cents); } else { if ( cents > 99 ) { JOptionPane.showMessageDialog(null, "Gabim: n cent " + cents); }

Struktura e kontrollit: Urdherat kushtezues fq. 15

Urdhrat kushtzues t vendosur prbrenda Vazhdim

else { int money = (euros * 100) + cents; System.out.println("Gjysma = " + (money / 50)); money = money % 50; System.out.println("Njzetqindarka = " + (money / 20)); money = money % 20; System.out.println("Dhjetqindarka = " + (money / 10)); money = money % 10; System.out.println("Pesqindarka = " + (money / 5)); money = money % 5; System.out.println("Qindarka = " + money); } } } } }

Struktura e kontrollit: Urdherat kushtezues fq. 16

Urdhrat kushtzues t vendosur prbrenda Vazhdim

lexo eurot; euro negative? gabim lexo centt; cent negativ? gabim
cents > 99 ?

gabim

total t holla; llogarit metelikt

Figura 2. Skema e rrjedhes se kontrollit

Struktura e kontrollit: Urdherat kushtezues fq. 17

Urdhrat kushtzues t vendosur prbrenda Vazhdim

import javax.swing.*; /** Llogarit sasin e metelikeve * Input: dy numra t dhn n rreshtin komandues sasia e eurove dhe sasia e centve * * Output: sasit e metelikve */ public class MakeChange4 { public static void main (String[] args) { boolean ok = true; // memoron korrektsin e t dhnave hyrse int euros = new Integer(args[0]).intValue(); int cents = new Integer(args[1]).intValue(); if ( euros < 0 ) { JOptionPane.showMessageDialog(null, "Gabim: euro negativ " + euros); ok = false; // gabimi mohon korrektsin }

Struktura e kontrollit: Urdherat kushtezues fq. 18

Urdhrat kushtzues t vendosur prbrenda Vazhdim

if ( ok ) // eurot jan n rregull, shqyrto centt { if ( cents < 0 ) { JOptionPane.showMessageDialog(null, "Gabim: cent negativ " + cents); ok = false; } if ( cents > 99 ) { JOptionPane.showMessageDialog(null, "Gabim: n cent " + cents); ok = false; } }

Struktura e kontrollit: Urdherat kushtezues fq. 19

Urdhrat kushtzues t vendosur prbrenda Vazhdim

if ( ok )

// eurot dhe centt jan n rregull, // llogarit prgjegjjen. { int money = (euros * 100) + cents; System.out.println("Gjysma = " + (money / 50)); money = money % 50; System.out.println("Njzetqindarka = " + (money / 20)); money = money % 20; System.out.println("Dhjetqindarka = " + (money / 10)); money = money % 10; System.out.println("Pesqindarka = " + (money / 5)); money = money % 5; System.out.println("Qindarka = " + money); } } }

Struktura e kontrollit: Urdherat kushtezues fq. 20

Operatort logjik

import javax.swing.*; /** Llogarit sasin e metelikeve * Input: dy numra t dhn n rreshtin komandues sasia e eurove dhe sasia e centve * * Output: sasit e metelikve */ public class MakeChange { public static void main (String[] args) { int euros = new Integer(args[0]).intValue(); int cents = new Integer(args[1]).intValue(); if ( (euros < 0) || (cents < 0) || (cents > 99) ) { JOptionPane.showMessageDialog(null, "Gabim n hyrje " + euros + " " + cents); }

Struktura e kontrollit: Urdherat kushtezues fq. 21

Operatort logjik Vazhdim

else { int money = (euros * 100) + cents; System.out.println("Gjysma = " + (money / 50)); money = money % 50; System.out.println("Njzetqindarka = " + (money / 20)); money = money % 20; System.out.println("Dhjetqindarka = " + (money / 10)); money = money % 10; System.out.println("Pesqindarka = " + (money / 5)); money = money % 5; System.out.println("Qindarka = " + money); } } }

Struktura e kontrollit: Urdherat kushtezues fq. 22

Operatort logjik Vazhdim

Operator logjik: operator i cili mundson t shkruhen dy krahasime n nj shprehje t tipit boolean.
Operatori Semantika Konjuksioni dhe:
true && true => true true && false => false false && SH2 => false Disjunksioni ose: false || false => false false || true => true true || SH2 => true Negacioni jo: !true => false !false => true

SH1 && SH2

SH1 || SH2

!SH

Tabela 1. Operatoret logjike

Struktura e kontrollit: Urdherat kushtezues fq. 23

Operatort logjik Vazhdim

Semantika e urdhrave logjik:


(minutes >= 0) && (minutes < 60) => false && (minutes < 60) => false (cents < 0) || (cents > 99) => true || (cents > 99) => true

Struktura e kontrollit: Urdherat kushtezues fq. 24

Operatort logjik Vazhdim

Operatort logjik kan precedenc m t ult sesa operatort relacional; p.sh., n versionin e fundit t aplikacionit MakeChange kemi mundur t shkruajm
if ( euros < 0 || cents < 0 || cents > 99 )

Struktura e kontrollit: Urdherat kushtezues fq. 25

Zbatimi i urdhrave kushtzues


Dy zbatimet kryesore t urdhrave kushtzues jan: pr ti mundsuar metods t veproj bazuar n vlera t dhnash dhe parametrash; pr t paisur metodn pr mbrojtje nga t dhna dhe parametra aktual t pakuptim.

Struktura e kontrollit: Urdherat kushtezues fq. 26

Zbatimi i urdhrave kushtzues Vazhdim


/** Konverton kohn 12 orshe n 24 orshe. * @param hour - koha 12 orshe n or * @param minute - koha n minuta * @param am - boolean: true pr mngjes, false pr pasdite * @return koha 24 orshe, e formatizuar si string */ public String twentyfourHourClock(int hour, int minute, boolean am) { String answer = ""; if ( hour < 1 || hour > 12 || minute < 0 || minute > 59 ) { answer = "Gabim: " + hour + ":" + minute; }

Struktura e kontrollit: Urdherat kushtezues fq. 27

Zbatimi i urdhrave kushtzues Vazhdim


else { if ( hour == 12 ) { if ( am ) { answer = answer + "0"; } else { answer = answer + "12"; } } else { if ( am ) { answer = answer + hour; } else { answer = answer + (hour + 12); } } answer = answer + ":"; if ( minute < 10 ) { answer = answer + "0"; } answer = answer + minute; } return answer; }

Struktura e kontrollit: Urdherat kushtezues fq. 28

Ndryshimi i rrjedhs s kontrollit

Prjashtim (exception): gabim i cili ndodh gjat ekzekutimit t nj programi. Zakonisht, prjashtimi ndalon programin (themi se sht hedhur nj prjashtim).

Struktura e kontrollit: Urdherat kushtezues fq. 29

Ndryshimi i rrjedhs s kontrollit

Prjashtim (exception): gabim i cili ndodh gjat ekzekutimit t nj programi. Zakonisht, prjashtimi ndalon programin (themi se sht hedhur nj prjashtim). Hedhja eksplicite e nj prjashtimi mund t bhet me an t strukturs kontrolluese:
throw new RuntimeException(MESAZHI);

ku MESAZHI sht nj string.

Struktura e kontrollit: Urdherat kushtezues fq. 29

Ndryshimi i rrjedhs s kontrollit Vazhdim


/** hourToSecond konverton ort n sekonda * @param hours - ort * @return ekuvalenti n sekonda */ public int hourToSecond(int hours) { int seconds = 0; if ( hours < 0 ) { String error = "Gabim: ort " + hours; JOptionPane.showMessageDialog(null, error); throw new RuntimeException(error); } else { seconds = hours * 60 * 60; } return seconds; }

Struktura e kontrollit: Urdherat kushtezues fq. 30

Ndryshimi i rrjedhs s kontrollit Vazhdim


Urdhri return shkakton q rrjedha e kontrollit t kthehet menjher n vendin e invokimit t metods.
public void printSeconds(int hours) { if ( hours < 0 ) { return; } int seconds = hours * 60 * 60; System.out.println(horus + " or jan " + seconds + " sekonda"); } public int hourToSecond(int hours) { if ( hours < 0 ) { return -1; } int seconds = hours * 60 * 60; return seconds; }

Struktura e kontrollit: Urdherat kushtezues fq. 31

Urdhri switch
N disa raste, urdhri switch sht nj alternativ pr urdhrat if-else t vendosur prbrenda. Sintaksa:
switch (SHPREHJA) { case VLERA1 : { URDHRAT1; break; } case VLERA2 : { URDHRAT2; break; } ... case VLERAn : { URDHRATn; break; } default : { URDHRATn+1; } }

Struktura e kontrollit: Urdherat kushtezues fq. 32

Urdhri switch Vazhdim


Semantika: 1. Llogaritet SHPREHJA n vlern e saj, t themi, v. 2. N qoft se ndonj nga VLERAk sht e barabart me v, ather ekzekutohen urdhrat prkatse URDHRATk ; n qoft se asnj nga VLERAk nuk sht e barabart me v, ather ekzekutohen urdhrat URDHRATn+1;

Struktura e kontrollit: Urdherat kushtezues fq. 33

Urdhri switch Vazhdim


Shembull:
switch(ch) { case C: case c: { // Celsius // ... break; } case F: case f: { // Fahrenheit // ... break; } case K: case k: { // Kelvin // ... break; } default: { System.out.println("Gabim: TempConverter"); } }

Struktura e kontrollit: Urdherat kushtezues fq. 34

Komponentet model dhe kontrollues

KONTROLLUESI INPUT VIEW MODELI OUTPUT VIEW

Figura 3. Nje arkitekture e thjeshte MVC

Struktura e kontrollit: Urdherat kushtezues fq. 35

Komponentet model dhe kontrollues

KONTROLLUESI INPUT VIEW MODELI OUTPUT VIEW

Figura 4. Nje arkitekture e thjeshte MVC


Komponenta model merr prgjegjsin pr modelimin e problemit dhe kompjutimin e pergjegjjeve t tij. Komponenta view merr prgjegjsin pr bartjen e t dhnave hyrse dhe dalse. Komponenta kontrollues merr prgjegjsin pr rrjedhn e kontrollit t aplikacionit, d.m.th. prcakton renditjen e kryerjes s kompjutimit.

Struktura e kontrollit: Urdherat kushtezues fq. 35

Komponentet model dhe kontrollues Vazhdim


Arsyet kryesore pr zbatimin e MVC arkitekturs: 1. Klast t cilat i gjenerojn objektet mund t rishfrytzohen. 2. Komponentet e organizojn nj aplikacion n pjes madhsish t menagjueshme me detyra specike. Pjest jan t organizuara n nj arkitektur standarde dhe mund t shkruhen dhe testohen ve e ve. 3. Komponentet jan t izoluara, kshtu q modikimi i njrs pjes nuk krkon rishkrimin edhe t pjesve tjera.

Struktura e kontrollit: Urdherat kushtezues fq. 36

Komponentet model dhe kontrollues Vazhdim


N nj situat ideale, ndrtimi i nj aplikacioni do t konsistonte nga zgjedhja e klasve tanim t shkruara, ndoshta paksa t zgjeruara, pr gjenerimin e input-output-views; zgjedhja nj klase tanim t shkruar, ndoshta paksa t zgjeruar, pr gjenerimin e modelit; shkruarja e nj klase t re pr gjenerimin e kontrolluesit i cili lidh s bashku pjest e aplikacionit.

Struktura e kontrollit: Urdherat kushtezues fq. 37

Komponentet model dhe kontrollues Vazhdim


Model: komponent n aplikacion e cila modelon problemin q programohet dhe llogarit prgjegjjet e tij. Atribut: variabl fushe private prbrenda nj klase modeli. Fusha prmban informata mbi gjendjen e brendshme t modelit.

Struktura e kontrollit: Urdherat kushtezues fq. 38

Case study: menagjer kontosh bankiere


Ndrtojm nj menagjer kontoje bankiere i cili pr hyrjet, p.sh.,
Komanda (D,T,M): d 50.50 Komanda (D,T,M): T 30.33 Komanda (D,T,M): M

ashon n dritare grake raportet mbi transakcionet dhe gjendjet e balancit.

Struktura e kontrollit: Urdherat kushtezues fq. 39

Disenjimi i modelit

BankAccount modelon nj konto bankiere

Konstruktori:
BankAccount(int amount)

inicializon konton

Metodat:
boolean deposit(int amount)

deponon sasin e dhn n konton; kthen true pr sukses dhe false pr mossukses trheq sasin e dhn nga kontoja; kthen true pr sukses dhe false pr mossukses kthen balansin e kontos

boolean withdraw(int amount)

int getBalance()

Tabela 2. Interfejsi i klases BankAccount

Struktura e kontrollit: Urdherat kushtezues fq. 40

Disenjimi i modelit Vazhdim

import javax.swing.*; /** Modelon nj konto. */ public class BankAccount { private int balance; // invariant: balance >= 0 /** Konstruktori. * @param amount - balansi inicial */ public BankAccount(int amount) { if ( amount >= 0 ) { balance = amount; } else { balance = 0; } }

Struktura e kontrollit: Urdherat kushtezues fq. 41

Disenjimi i modelit Vazhdim

/** Deponon t holla n konto. * @param amount - sasia pr deponim * @return true nse trheqja e suksesshme, false prndryshe */ public boolean deposit(int amount) { boolean result = false; if ( amount < 0 ) { JOptionPane.showMessageDialog(null, "Gabim: depositi " + amount); } else { balance = balance + amount; result = true; } return result; }

Struktura e kontrollit: Urdherat kushtezues fq. 42

Disenjimi i modelit Vazhdim

/** Trheq t holla nga kontoja. * @param amount - sasia pr trheqje * @return true nse trheqja e suksesshme, false prndryshe */ public boolean withdraw(int amount) { boolean result = false; if ( amount < 0 ) { JOptionPane.showMessageDialog(null, "Gabim: trheqja " + amount); } else if ( amount > balance ) { JOptionPane.showMessageDialog(null, "Gabim: trheqja tejkalon balansin"); } else { balance = balance - amount; result = true; } return result; }

Struktura e kontrollit: Urdherat kushtezues fq. 43

Disenjimi i modelit Vazhdim

/** getBalance kthen balansin vijues * @return balansi */ public int getBalance() { return balance; } }

Struktura e kontrollit: Urdherat kushtezues fq. 44

Disenjimi i modelit Vazhdim


Metod accessor: metod e cila vetm raporton vlera fushash t objektit (atributesh) por nuk ndyshon asnj fush. Metod mutator: metod e cila ndyshon vlera fushash t nj objekti.

Struktura e kontrollit: Urdherat kushtezues fq. 45

Arkitektura e softuerit t aplikacionit

AccountManager main(...)

AccountController processTransactions()

BankReader BankAccount char readCommand() int readAmount() BankWriter showTransaction(String message, int amount) showTransaction(String message) boolean deposit(int amount) boolean withdraw(int amount) int getBalance()

Figura 5. Arkitektura e AccountManager

Struktura e kontrollit: Urdherat kushtezues fq. 46

View komponentet

BankReader lexon transakcionet nga shfrytzuesi

Metodat:
char readCommand(String message) int readAmount()

lexon linj t re komanduese; kthen karakterin e par t linjs kthen vlern numerike nga linja e lexuar s fundi

Tabela 3. Interfejsi i klases BankReader

Struktura e kontrollit: Urdherat kushtezues fq. 47

View komponentet Vazhdim

BankWriter shkruan transakcionet

Konstruktori:
BankWriter(String title, BankAccount a)

inicializon shkruesin me titullin dhe konton e dhn

Metodat:
showTransaction(String message, int amount) showTransaction(String message)

ashon transakcionin e dhn me vlern e dhn ashon transakcionin e dhn

Tabela 4. Interfejsi i klases BankWriter

Struktura e kontrollit: Urdherat kushtezues fq. 48

View komponentet Vazhdim

import javax.swing.*; /** Lexon transakcione bankiere. */ public class BankReader { private String inputLine; /** Konstruktori. */ public BankReader() { inputLine = ""; } /** Lexon linj t re komanduese. * @param message - prompti pr shfrytzuesin * @return karakterin e par t komands */ public char readCommand(String message) { inputLine = JOptionPane.showInputDialog(message).trim().toUpperCase(); return inputLine.charAt(0); }

Struktura e kontrollit: Urdherat kushtezues fq. 49

View komponentet Vazhdim

/** Kthen vlern numerike nga linja komanduese. * @return vlera e konvertuar n cent */ public int readAmount() { int answer = 0; String s = inputLine.substring(1, inputLine.length()); s = s.trim(); if ( s.length() > 0) { double money = new Double(s).doubleValue(); answer = (int)(money * 100); } else { JOptionPane.showMessageDialog(null, "Gabim: transakcion pa vler"); } return answer; } }

Struktura e kontrollit: Urdherat kushtezues fq. 50

View komponentet Vazhdim

import javax.swing.*; import java.awt.*; import java.text.*; /** Shkruan transakcione bankiere. */ public class BankWriter extends JPanel { private int width = 300; private int height = 200; private BankAccount account; private String lastTransaction = "";

Struktura e kontrollit: Urdherat kushtezues fq. 51

View komponentet Vazhdim

/** Konstruktori. * @param title - titulli i dritares grafike * @param a - kontoja bankiere q afishohet */ public BankWriter(String title, BankAccount a) { account = a; JFrame f = new JFrame(); f.getContentPane().add(this); f.setTitle(title); f.setSize(width, height); f.setBackground(Color.white); f.setVisible(true); }

Struktura e kontrollit: Urdherat kushtezues fq. 52

View komponentet Vazhdim

public void paintComponent(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, width, height); g.setColor(Color.black); int textMargin = 50; int textBaseline = 50; g.drawString(lastTransaction, textMargin, textBaseline); g.drawString("Balanci vijues = " + unconvert(account.getBalance()) + " E", textMargin, textBaseline + 20); } /** Reformaton centt n euro dhe cent. */ private String unconvert(int amount) { double money = amount / 100.0; return new DecimalFormat("0.00").format(money); }

Struktura e kontrollit: Urdherat kushtezues fq. 53

View komponentet Vazhdim

/** Afishon transakcion. * @param message - transakcioni * @param amount - sasia e transakcionit */ public void showTransaction(String message, int amount) { lastTransaction = message + " " + unconvert(amount) + " E"; this.repaint(); } /** Afishon transakcion. * @param message - transakcioni */ public void showTransaction(String message) { lastTransaction = message; this.repaint(); } }

Struktura e kontrollit: Urdherat kushtezues fq. 54

Konstruktimi i kontrollerit
Algoritmi i kontrollerit pr procesimin e nj transakcioni: 1. Lexo komandn. 2. N qoft se komanda sht M, ather prfundo procesimin. 3. Prndryshe: (a) N rast se komanda sht D, lexo sasin e depositit, kryej depositin dhe asho transakcionin. (b) N rast se komanda sht T, lexo sasin e trheqjes, kryej trheqjen dhe asho transakcionin. (c) Prndryshe, komanda sht jolegale, prandaj ankohu.

Struktura e kontrollit: Urdherat kushtezues fq. 55

Konstruktimi i kontrollerit Vazhdim


/** Menagjon nj konto. * Input: nj varg komandash t forms D ee.cc (deponim), T ee.cc (trheqje), M (mjaft) * * Output: Afishon transakcione */ public class AccountController { private BankReader reader; private BankWriter writer; private BankAccount account; /** Konstruktori. * @param r - input view objekti * @param w - output view objekti * @param a - model objekti */ public AccountController(BankReader r, BankWriter w, BankAccount a) { reader = r; writer = w; account = a; }

Struktura e kontrollit: Urdherat kushtezues fq. 56

Konstruktimi i kontrollerit Vazhdim


/** Proceson transakcione. */ public void processTransactions() { char command = reader.readCommand("Komanda (D,T,M) dhe sasia:"); if ( command == M ) { } else { switch ( command ) { case D : { int amount = reader.readAmount(); boolean ok = account.deposit(amount); if ( ok ) { writer.showTransaction("Deponim", amount); } else { writer.showTransaction("Deponim jovalid"); } break; }

Struktura e kontrollit: Urdherat kushtezues fq. 57

Konstruktimi i kontrollerit Vazhdim


case T : { int amount = reader.readAmount(); boolean ok = account.withdraw(amount); if ( ok ) { writer.showTransaction("Trheqje", amount); } else { writer.showTransaction("Trheqje jovalide"); } break; } default : { writer.showTransaction("Komand jovalide " + command); } } this.processTransactions(); } } }

Struktura e kontrollit: Urdherat kushtezues fq. 58

Konstruktimi i kontrollerit Vazhdim


/** Starton aplikacionin pr menagjim kontoje. */ public class AccountManager { public static void main(String[] args) { BankReader reader = new BankReader(); BankAccount account = new BankAccount(0); BankWriter writer = new BankWriter("Shkruesi bankier", account); AccountController controller = new AccountController(reader, writer, account); controller.processTransactions(); } }

Struktura e kontrollit: Urdherat kushtezues fq. 59

Konstruktimi i kontrollerit Vazhdim


Invokim rekursiv: invokim ku metoda drgon mesazh pr t ristartuar vetvehten. Emr i mbingarkuar metode (overloaded): emr metode i cili prdoret pr t emrtuar dy metoda t ndryshme t s njjts klas. Objekti pranues i mesazhit shfrytzon sasin dhe tipin e t dhnave t parametrave aktual pr t zgjedhur metodn prkatse pr ekzekutim.

Struktura e kontrollit: Urdherat kushtezues fq. 60

Objekte t shumshta nga e njjta klas


Modikojm menagjerin e kontove ashtu q t menagjoj dy konto t ndryshme n mnyr simultane. Hyrjet, p.sh.:
Komanda Komanda Komanda Komanda Komanda Komanda Komanda (P,S,D,T,M): (P,S,D,T,M): (P,S,D,T,M): (P,S,D,T,M): (P,S,D,T,M): (P,S,D,T,M): (P,S,D,T,M): P d 50.50 s D10.10 p T 30.33 m

Struktura e kontrollit: Urdherat kushtezues fq. 61

Objekte t shumshta nga e njjta klas Vazhdim

AccountManager main(...)

AccountController processTransactions()

1
BankReader

1 2
BankAccount

char readCommand() int readAmount() BankWriter showTransaction(String message, int amount) showTransaction(String message) boolean deposit(int amount)

boolean withdraw(int amount) int getBalance()

Figura 6. Arkitektura e AccountManager

Struktura e kontrollit: Urdherat kushtezues fq. 62

Objekte t shumshta nga e njjta klas Vazhdim


/** Menagjon dy konto. * Input: nj varg komandash t forms P (menagjo konton primare), S (menagjo konton sekondare) * D ee.cc (deponim), T ee.cc (trheqje), M (mjaft) * * Output: Afishon transakcione */ public class AccountController2 { private BankReader reader; // kontoja primare private BankWriter primaryWriter; private BankAccount primaryAccount; // kontoja sekondare private BankWriter secondaryWriter; private BankAccount secondaryAccount; // kontoja aktive private BankWriter writer; private BankAccount account; // invariant: barazi me fushat t kontos primare ose sekondare

Struktura e kontrollit: Urdherat kushtezues fq. 63

Objekte t shumshta nga e njjta klas Vazhdim


/** Konstruktori * @param r - input view objekti * @param w1 - output view objekti i par * @param a1 - model objekti i par * @param w2 - output view objekti i dyt * @param a2 - model objekti i dyt */ public AccountController2(BankReader r, BankWriter w1, BankAccount a1, BankWriter w2, BankAccount a2) { reader = r; primaryWriter = w1; primaryAccount = a1; secondaryWriter = w2; secondaryAccount = a2; writer = primaryWriter; account = primaryAccount; }

Struktura e kontrollit: Urdherat kushtezues fq. 64

Objekte t shumshta nga e njjta klas Vazhdim


/** Ndryshon konton aktive. */ private void resetAccount(BankWriter w, BankAccount a) { writer.showTransaction("Joaktiv"); writer = w; account = a; writer.showTransaction("Aktiv"); }

Struktura e kontrollit: Urdherat kushtezues fq. 65

Objekte t shumshta nga e njjta klas Vazhdim


/** Proceson transakcione. */ public void processTransactions() { char command = reader.readCommand("Komanda (P,S,D,T,M) dhe sasia:"); if ( command == M ) { } else { switch ( command ) { case D : { int amount = reader.readAmount(); boolean ok = account.deposit(amount); if ( ok ) { writer.showTransaction("Deponim", amount); } else { writer.showTransaction("Deponim jovalid"); } break; }

Struktura e kontrollit: Urdherat kushtezues fq. 66

Objekte t shumshta nga e njjta klas Vazhdim


case T : { int amount = reader.readAmount(); boolean ok = account.withdraw(amount); if ( ok ) { writer.showTransaction("Trheqje", amount); } else { writer.showTransaction("Trheqje jovalide"); } break; }

Struktura e kontrollit: Urdherat kushtezues fq. 67

Objekte t shumshta nga e njjta klas Vazhdim


case P : { this.resetAccount(primaryWriter, primaryAccount); break; } case S : { this.resetAccount(secondaryWriter, secondaryAccount); break; } default : { writer.showTransaction("Komand jovalide " + command); } } this.processTransactions(); } } }

Struktura e kontrollit: Urdherat kushtezues fq. 68

Objekte t shumshta nga e njjta klas Vazhdim

/** Starton aplikacionin pr menagjim kontosh. */ public class AccountManager2 { public static void main(String[] args) { BankReader reader = new BankReader(); BankAccount primaryAccount = new BankAccount(0); BankWriter primaryWriter = new BankWriter("Kontoja primare", primaryAccount); BankAccount secondaryAccount = new BankAccount(0); BankWriter secondaryWriter = new BankWriter("Kontoja sekondare", secondaryAccount); AccountController2 controller = new AccountController2(reader, primaryWriter, primaryAccount secondaryWriter, secondaryAccount); controller.processTransactions(); } }

Struktura e kontrollit: Urdherat kushtezues fq. 69

Testimi i metodave dhe klasave


Secila metod e secils klas testohet ve e ve.

Struktura e kontrollit: Urdherat kushtezues fq. 70

Testimi i metodave dhe klasave


Secila metod e secils klas testohet ve e ve. Kur metoda prmban urdhra if secili krah i secilit urdhr ekzekutohet s paku nga nj test.

Struktura e kontrollit: Urdherat kushtezues fq. 70

Testimi i metodave dhe klasave


Secila metod e secils klas testohet ve e ve. Kur metoda prmban urdhra if secili krah i secilit urdhr ekzekutohet s paku nga nj test. N qoft se klasa prmban fusha, ather testohet secila metod e klass n invariantat e paraqitjes s fushave.

Struktura e kontrollit: Urdherat kushtezues fq. 70

Testimi i metodave dhe klasave Vazhdim


public static void main(String[] args) { BankAccount a = new BankAccount(100); int i = new Integer(args[0]).intValue(); boolean result = a.withdraw(i); System.out.println(result); System.out.println(a.getBalance()); }

Struktura e kontrollit: Urdherat kushtezues fq. 71

Testimi i metodave dhe klasave Vazhdim


public class BankAccount { private int balance; // invariant: balance >= 0 public BankAccount(int amount) { balance = 0; } // dummy public boolean deposit(int amount) { boolean result = false; if ( amount < 0 ) { JOptionPane.showMessageDialog(null, "Gabim"); } else { balance = balance + amount; result = true; } return result; } public boolean withdraw(int amount) { return true; } // dummy public int getBalance() { return 0; } // dummy }

Struktura e kontrollit: Urdherat kushtezues fq. 72

You might also like