You are on page 1of 72

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.

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.

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 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.

Sintaksa e urdhrit kushtzues:


if ( TESTI )
{ URDHRAT1 }
else { URDHRAT2 }

Semantika: n qoft se rezultati i testit sht true,


ather ekzekutohet then-krahu; n qoft se rezultati i
testit sht false, ather ekzekutohet 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 false

URDHRAT1 URDHRAT2

Figura 1. Skema e rrjedhs s kontrollit t prcaktuar nga urdhri


kushtzues


Struktura e kontrollit: Urdherat
kushtezues fq. 7
Struktura kushtzuese e kontrollit
Vazhdim

Ndonjher, kur dshirohet t specifikohet 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 afisho 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 shumfishta 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?

lexo centt;
gabim
cent negativ?

gabim cents > 99 ?

total t holla;
gabim
llogarit metelikt

Figura 2. Skema e rrjedhs s 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
SH1 && SH2
true && false => false
false && SH2 => false
Disjunksioni ose:
false || false => false
SH1 || SH2
false || true => true
true || SH2 => true
Negacioni jo:
!SH !true => false
!false => true

Tabela 1. Operatort logjik


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).

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 OUTPUT VIEW

MODELI

Figura 3. Nj arkitektur e thjesht 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 specifike.
Pjest jan t organizuara n nj arkitektur standarde
dhe mund t shkruhen dhe testohen ve e ve.
3. Komponentet jan t izoluara, kshtu q modifikimi 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
afishon n dritare grafike 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
boolean withdraw(int amount) trheq sasin e dhn nga kontoja;
kthen true pr sukses dhe false
pr mossukses
int getBalance() kthen balansin e kontos

Tabela 2. Interfejsi i klass 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 AccountController
main(...) processTransactions()

BankReader
BankAccount
char readCommand()
boolean deposit(int amount)
int readAmount()
boolean withdraw(int amount)

BankWriter int getBalance()

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

Figura 4. Arkitektura e AccountManager



Struktura e kontrollit: Urdherat
kushtezues fq. 46
View komponentet

BankReader lexon transakcionet nga shfry-


tzuesi
Metodat:
char readCommand(String message) lexon linj t re komanduese; kthen
karakterin e par t linjs
int readAmount() kthen vlern numerike nga linja e
lexuar s fundi

Tabela 3. Interfejsi i klass BankReader


Struktura e kontrollit: Urdherat
kushtezues fq. 47
View komponentet Vazhdim

BankWriter shkruan transakcionet


Konstruktori:
BankWriter(String title, inicializon shkruesin me titullin dhe
BankAccount a) konton e dhn
Metodat:
showTransaction(String message, afishon transakcionin e dhn me
int amount) vlern e dhn
showTransaction(String message) afishon transakcionin e dhn

Tabela 4. Interfejsi i klass 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 afisho transakcionin.
(b) N rast se komanda sht T, lexo sasin e
trheqjes, kryej trheqjen dhe afisho 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 shumfishta nga e njjta
klas

Modifikojm menagjerin e kontove ashtu q t menagjoj


dy konto t ndryshme n mnyr simultane.

Hyrjet, p.sh.:
Komanda (P,S,D,T,M): P
Komanda (P,S,D,T,M): d 50.50
Komanda (P,S,D,T,M): s
Komanda (P,S,D,T,M): D10.10
Komanda (P,S,D,T,M): p
Komanda (P,S,D,T,M): T 30.33
Komanda (P,S,D,T,M): m


Struktura e kontrollit: Urdherat
kushtezues fq. 61
Objekte t shumfishta nga e njjta
klas Vazhdim

AccountManager AccountController
main(...) processTransactions()
1 1
2
BankReader
BankAccount
char readCommand()
boolean deposit(int amount)
int readAmount()
2 boolean withdraw(int amount)

BankWriter int getBalance()

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

Figura 5. Arkitektura e AccountManager



Struktura e kontrollit: Urdherat
kushtezues fq. 62
Objekte t shumfishta 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 shumfishta 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 shumfishta 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 shumfishta 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 shumfishta 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 shumfishta 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 shumfishta 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.

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