0% found this document useful (0 votes)
142 views72 pages

Java 06 PDF

Uploaded by

Vullnet Nuredini
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
142 views72 pages

Java 06 PDF

Uploaded by

Vullnet Nuredini
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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