270
Programimi dhe algoritmet Faton M. Berisha [email protected] Universiteti i Prishtin ¨ es Fakulteti i Shkencave Matematike–natyrore Kompjuter ¨ et dhe programimi – fq. 1

Programimi dhe algoritmet

Embed Size (px)

Citation preview

Programimi dhe algoritmet

Faton M. Berisha

[email protected]

Universiteti i Prishtines

Fakulteti i Shkencave Matematike–natyrore

Kompjuteret dhe programimi – fq. 1

Kompjuterët dhe programimi

Kompjuteret dhe programimi – fq. 2

Referencat

Web sajte:

http://www.fshmn.uni-pr.edu/fberishahttp://fberisha.netfirms.com

http://www.cis.ksu.edu/santos/schmidt/ppj

http://java.sun.com

Literatura:

D. Schmidt, Programming principles in Java:Architectures and Interfaces.

I. Horton, Beginning Java 2, Wrox Press, 2000.

Kompjuteret dhe programimi – fq. 3

Kompjuterët dhe programimi

Programimi kompjuterik është një proces në tre hapa:

disenjim arkitekture,

definim i klasave të cilat e përbëjnë arkitekturën,

shkruarje e Java instruksioneve të cilat e realizojnësecilën klasë.

Kompjuteret dhe programimi – fq. 4

Ç’është kompjuteri?

Kompjuter: entitet i cili ekzekuton instruksione.Procesor: pjesa e një komjuteri elektronik e cila iekzekuton istruksionet.Memoria qendrore (RAM): pjesa e një komjuteri elektronike cila i ruan instruksionet dhe të dhënat të cilat procesori ilexon për ta kryer punën e vetë.Memoria periferike: pjesët e një komjuteri elektronik të cilatarkivojnë instruksione dhe të dhëna shtesë. P.sh., disqet eforta, disketat, CD-të.Njësi hyrëse: tastiera ose mausi, i cili i jep të dhënakompjuterit.Njësi dalëse: monitori për afishim ose printeri, i cili iprezanton të dhëna shfrytëzuesit të kompjuterit.

Kompjuteret dhe programimi – fq. 5

Ç’është kompjuteri? – Vazhdim

Fajl (file): bashkësi të dhënash të ngjashme, tipikisht eruajtur në memorien periferike.

Folder: bashkësi fajlash, tipikisht e ruajtur në memorienperiferike.

Të dhënat në kompjuter janë të koduara në vargje 0-shdhe 1-shesh.

Bit: njësia themelore e informatës – një „0“ ose një „1“.

Kod binar: varg bitësh, i cili lexohet nga procesori siinstruksione ose të dhëna.

Gjuha e makinës: formati specifik i kodit binar i cili lexohetnga procesori specifik.

Kompjuteret dhe programimi – fq. 6

Programimi kompjuterik

Programimi: aktiviteti i shkruarjes së instruksioneve të cilatmund t’i ekzekutojë një kompjuter.

Algoritëm: varg i renditur hapash (instruksionesh) tënjëkuptimta, të ekzekutueshme, i cili përkufizon një procestë fundmë.

Program kompjuterik: algoritëm i cili është shkruar nëmënyrë specifike për t’u ekzekutuar nga një procesor.

Gjuhë programuese: gjuhë e disenjuar posaçërisht përshkruarjen e programeve kompjuterike.

Kompjuteret dhe programimi – fq. 7

Programimi kompjuterik – Vazhdim

Hapat e përkthimit të një programi të shkruar në Java nëgjuhën e makinës:

1. Kompilatori: programi i cili përkthen Java programet nëJava byte code.

2. Java interpretuesi (JVM): programi i cili përkthen Javabyte code në gjuhën e makinës.

Kompjuteret dhe programimi – fq. 8

Programet janë objekte

AFISHIMI MEMORIA PERIFERIKE

SHFRYTËZUESI PROGRAMI EKZEKUTIV (në memorien qendrore)

TASTIERA KOMPJUTERËT TJERË

Figura 1. Rrethina kompjuterike

Kompjuteret dhe programimi – fq. 9

Programet janë objekte

Objekt: instancë e klasës në memorien qendrore. Njësithemelore e një programi ekzekutiv.

Mesazh: komunikim të cilin një objekt i dërgon tjetrit.

Metodë: aktivitet specifik kompjuterik i cili mund tëaktivizohet kur i dërgohet një mesazh. Aftësi të cilën eposedon objekti.

Objekt klient (client): objekt i cili dërgon mesazh.

Objekt pranues (receiver): objekt i cili pranon mesazh.

Kompjuteret dhe programimi – fq. 10

Programet janë objekte – Vazhdim

Input (hyrja): të dhënat të cilat i jepen programitkompjuterik për llogaritje.

Output (dalja): përgjegjja e llogaritur nga programi.

Hardware: komponentet fizike të një kompjuteri, p.sh.,procesori dhe memoria qendrore.

Software: programet kompjuterike.

Kompjuteret dhe programimi – fq. 11

Sistemet operative dhe Windows

Sistemi operativ: programi kontrollues i cili fillon tëekzekutohet me ndezjen e kompjuterit.

Dritarja komanduese: pozitë në displejin kompjuterik kushfrytëzuesi mund të rradhisë instruksione për kompjuterin.

Kompjuteret dhe programimi – fq. 12

Arkitektura e softuerit

Arkitekturë e softuerit: disanji, plani i përgjithshëm i njëprogrami komjuterik.

Hapat krucialë gjatë shkruarjes së një programikompjuterik:

Specifikimi i arkitekturës së programit me anë tëdiagramit të klasave;

Disenjimi i secilës klasë si bashkësi metodash;

Shkruarja e secilës metodë si varg Javainstruksionesh.

Me startimin e programit kompjuterik objektet në memorienqendrore krijohen nga klasat në memorien periferike, dukeformuar programin ekzekutiv.

Kompjuteret dhe programimi – fq. 13

Arkitektura e softuerit – Vazhdim

Gjatë kursit do të mbështetemi esencialisht në njëarkitekturë të posaçme: Model–View–Controller (MVC).

Komponentet e MVC arktiekturës:

View objekti: paraqitja ndaj shfrytëzuesit njeri;posedon metoda të cilat pranojnë kërkesa ngashfrytëzuesi dhe afishojnë rezultate.

Controller objekti: posedon metoda të cilat kontrollojnëbartjen e informatave duke dërguar mesazhekomponenteve tjera.

Model objekti: posedon metoda të cilat llogarisinpergjegjjet si reagim ndaj mesazheve të dërguara atijnga controller objekti.

Kompjuteret dhe programimi – fq. 14

Diagramet e klasave

Klasa: fajl i cili përmban një komponentë të programit.

Diagram i klasave: prezantim grafik i klasave, metodavedhe mesazheve. Specifikon arkitekturën e një programi.

Kompjuteret dhe programimi – fq. 15

Diagramet e klasave – Vazhdim

Controller

main

Input View

getRequest

getText

Model

insertText

deleteText

reformatLines

...

contentsOf

Output View

redisplayDocument

printDocument

Figura 2. Diagram klasash i një tekst procesori

Kompjuteret dhe programimi – fq. 16

Java aplikacione të thjeshta

Java aplikacione te thjeshta – fq. 1

Java aplikacione të thjeshta

Objektivat:

Të prezantohet formati standard i një Java programidhe të ilustrohen shembuj klase, metode dhe objektinë Java.

Të shpjegohen hapat që ndërrmirren për të rradhiturnjë program, kontrolluar sintaksën e tij dhe ekzekutuaratë.

Të tregohet si një objekt mund të dërgojë mesazheobjekteve tjerë, madje edhe të krijojë objekte tjerëgjatë ekzekutimit.

Java aplikacione te thjeshta – fq. 2

Aplikacioni dhe arkitektura e tij

Aplikacion: Java program i cili startohet nga njeriu.

Metoda main : metoda inicuese e cila ekzekutohet fillimishtkur startohet një aplikacion.

Java aplikacione te thjeshta – fq. 3

Aplikacioni dhe arkitektura e tij –Vazhdim

Hello

main

System.out

println

Figura 1. Arkitektura e programit fillestar

Java aplikacione te thjeshta – fq. 4

Aplikacioni dhe arkitektura e tij –Vazhdim

/ ** Afishon dy rreshta në konzolë. * /public class Hello{ public static void main(String[] args)

{ System.out.println("Tungjatjeta botë!");System.out.println(2004);

}}

Java aplikacione te thjeshta – fq. 5

Si ndërtohet dhe ekzekutohet njëaplikacion

1. Klasa class Hello rradhitet dhe ruhet në fajlinHello.java .

2. Kontrollohet sintaksa e programit – programikompilohet; krijohet byte code fajli Hello.class .

3. Programi startohet (ekzekutohet).

Për kryerjen e këtyre hapave mund të shfrytëzohet oserrethina zhvilluese e integruar (integrated developmentenvironment, IDE) e gjuhës Java, ose një editor teksti dheJava Development Kit (JDK).

Java aplikacione te thjeshta – fq. 6

Si funksionon aplikacioni

Koment: shpjegim i futur në program për ta lexuar njeriu (ejo kompjuteri).

Fjalë kyqe (keyword): fjalë me domethënie të caktuar tëposaçme.

Urdhër (sentence): një instruksion i vetëm përbrenda Javaprogramit; tipikisht përfundon me pikëpresë.

Argument: informatë shtesë e cila i bashkangjitet mesazhit;i mbyllur në kllapa vijon pas emrit të metodës në mesazhin.

String: frazë tekstuale; varg karakterësh të mbyllur nëthonjëza të dyfishta.

Java dallon shkronjat e mëdha nga të voglat.

Java aplikacione te thjeshta – fq. 7

Gjurma e ekzekutimit të aplikacionit

Hellopublic static void main(String[] args)

{ System.out.println("Tungjatjeta botë!");

System.out.println(2005);

}

System.out

...

println(...)

{ instruksione për të shtypur tekst }

Java aplikacione te thjeshta – fq. 8

Gjurma e ekzekutimit të aplikacionit– Vazhdim

Hellopublic static void main(String[] args)

{ > System.out.println("Tungjatjeta botë!");

System.out.println(2005);

}

System.out

...

println(...)

{ instruksione për të shtypur tekst }

Java aplikacione te thjeshta – fq. 9

Gjurma e ekzekutimit të aplikacionit– Vazhdim

Hellopublic static void main(String[] args)

{ > PRIT

System.out.println(2005);

}

System.out

...

println(...)

{ > instruksione për të shtypur tekst }

Java aplikacione te thjeshta – fq. 10

Gjurma e ekzekutimit të aplikacionit– Vazhdim

Hellopublic static void main(String[] args)

{ ...

> System.out.println(2005);

}

System.out

...

println(...)

{ instruksione për të shtypur tekst }

Java aplikacione te thjeshta – fq. 11

Gjurma e ekzekutimit të aplikacionit– Vazhdim

Hellopublic static void main(String[] args)

{ ...

> PRIT

}

System.out

...

println(...)

{ > instruksione për të shtypur tekst }

Java aplikacione te thjeshta – fq. 12

Gjurma e ekzekutimit të aplikacionit– Vazhdim

Hellopublic static void main(String[] args)

{ ...

...

> }

System.out

...

println(...)

{ instruksione për të shtypur tekst }

Java aplikacione te thjeshta – fq. 13

Si një objekt konstrukton një tjetër

NameAndDate

main

GregorianCalendar

getTime

System.out

printlnprint

Figura 2. Aplikacioni NameAndDate

Java aplikacione te thjeshta – fq. 14

Si një objekt konstrukton një tjetër –Vazhdim

import java.util. * ;

/ ** Afishon emrin tim dhe kohën e datën e saktë. * /

public class NameAndDate

{ public static void main(String[] args)

{ System.out.print("Filan Fisteku --- ");

// Urdhëri vijues krijon një objekt

GregorianCalendar c = new GregorianCalendar();

System.out.println(c.getTime()); // afisho përgjegjjen

System.out.println();

System.out.println("Mbaroi");

}

}

Java aplikacione te thjeshta – fq. 15

Si një objekt konstrukton një tjetër –Vazhdim

Adresë (e një objekti): „emër“ objekti në memorienqendrore; shfrytëzohet për t’i dërguar mesazhe.

Emër i variablës: emër qelize ku ruhet një vlerë, siç ështëadresa e një objekti.

Java aplikacione te thjeshta – fq. 16

Gjurma e ekzekutimit

NameAndDatepublic static void main(String[] args)

{ > System.out.print("Filan Fisteku --- ");

GregorianCalendar c = new GregorianCalendar();

System.out.println(c.getTime());

System.out.println();

System.out.println("Mbaroi");

}

System.out

...

print(...)

{ instruksione për të shtypur tekst }

println(...)

{ instruksione për të shtypur tekst

dhe terminuar rreshtin

}

Java aplikacione te thjeshta – fq. 17

Gjurma e ekzekutimit – Vazhdim

NameAndDatepublic static void main(String[] args)

{ ...

> GregorianCalendar c = new GregorianCalendar();

System.out.println(c.getTime());

System.out.println();

System.out.println("Mbaroi");

}

System.out

...

a1 : GregorianCalendar

...

getTime()

{ instruksione për lexim të orës dhe kthim të kohës }

Java aplikacione te thjeshta – fq. 18

Gjurma e ekzekutimit – Vazhdim

NameAndDatepublic static void main(String[] args)

{ ...

GregorianCalendar c == a1

> System.out.println(c.getTime());

System.out.println();

System.out.println("Mbaroi");

}

System.out

...

a1 : GregorianCalendar

...

getTime()

{ instruksione për lexim të orës dhe kthim të kohës }

Java aplikacione te thjeshta – fq. 19

Gjurma e ekzekutimit – Vazhdim

NameAndDatepublic static void main(String[] args)

{ ...

GregorianCalendar c == a1

> System.out.println( PRIT);

System.out.println();

System.out.println("Mbaroi");

}

System.out

...

a1 : GregorianCalendar

...

getTime()

{ > instruksione për lexim të orës dhe kthim të kohës }

Java aplikacione te thjeshta – fq. 20

Gjurma e ekzekutimit – Vazhdim

NameAndDatepublic static void main(String[] args)

{ ...

GregorianCalendar c == a1

> System.out.println("Wed Nov 03 10:45:00 CET 2004");

System.out.println();

System.out.println("Mbaroi");

}

System.out

...

a1 : GregorianCalendar

...

getTime()

{ instruksione për lexim të orës dhe kthim të kohës }

Java aplikacione te thjeshta – fq. 21

Si një objekt konstrukton një tjetër –Vazhdim

Versioni i aplikacionit pa variabël për objektin:import java.util. * ;

/ ** Afishon emrin tim dhe kohën e datën e saktë. * /

public class NameAndDate

{ public static void main(String[] args)

{ System.out.print("Filan Fisteku --- ");

// Urdhëri vijues krijon një objekt dhe i dërgon mesazh

System.out.println(new GregorianCalendar().getTime() );

System.out.println();

System.out.println("Mbaroi");

}

}

Java aplikacione te thjeshta – fq. 22

Përmirësimi i mesazheve tëgabimeve të kompilatorit

A është korrekt programi vijues i ruajtur në fajlinTest.java ?

public class test{ public static main(String[] args)

{ System.out.println(Tung!)}

Java aplikacione te thjeshta – fq. 23

Përmirësimi i mesazheve tëgabimeve të kompilatorit – Vazhdim

public class Test{ public static void main(String[] args)

{ System.out.println( " Tung! " ) ; }}

Java aplikacione te thjeshta – fq. 24

Përmirësimi i mesazheve tëgabimeve të kompilatorit – Vazhdim

Sintaksë: paraqitja drejtshkrimore e instruksioneve nëgjuhën Java.

Semantikë: domethënia e instruksioneve në Java.

Java aplikacione te thjeshta – fq. 25

Aritmetika dhe variablat

Aritmetika dhe variablat – fq. 1

Aritmetika dhe variablat

Objektivat:

Të futet nocioni i tipit të së dhënës, i cili siguronkonsistencë gjatë llogaritjeve.

Të futen variablat kompjuterike dhe zbatimettradicionale të tyre.

Të jepet një mënyrë e thjeshtësuar por efektive për t’idhënë të dhënat hyrëse programit.

Aritmetika dhe variablat – fq. 2

Aritmetika e numrave të plotë

/ ** Llogarit sasinë e parave të imëta. * /

public class Total

{ public static void main (String[] args)

{ System.out.print("Për 4 gjysma, 2 njëzetqindarka, ");

System.out.print("asnjë dhjetëqindarkë, 1 pesëqindarkë ");

System.out.println("dhe 6 qindarka,");

System.out.print("shuma totale është ");

System.out.println((4 * 50) + (2 * 20) + (0 * 10)

+ (1 * 5) + (6 * 1));

}

}

Aritmetika dhe variablat – fq. 3

Aritmetika e numrave të plotë –Vazhdim

Operator: simbol, si * ose +, i cili shënon një operacionaritmetik.

Operand: argument i një operatori, p.sh., 1 në 6 * 1.

Aritmetika dhe variablat – fq. 4

Aritmetika e numrave të plotë –Vazhdim

public class Test

{ public static void main(String[] args)

{ System.out.println(1 + ((2 - 3) * 4) + 5); }

}

1 + ((2 - 3) * 4) + 5=> 1 + ((-1) * 4) + 5=> 1 + (-4) + 5=> -3 + 5=> 2

Aritmetika dhe variablat – fq. 5

Madhësitë e emërtuara: variablat

/ ** Llogarit sasinë e parave të imtëa

* mbështetur në vlerat e emërtuara me variabla. * /

public class Total

{ public static void main (String[] args)

{ int gjysma = 4;

int njezeta = 2;

int dhjeta = 0;

int pesa = 1;

int qindarka = 6;

Aritmetika dhe variablat – fq. 6

Madhësitë e emërtuara: variablat –Vazhdim

System.out.println("Për këto sasi metelikësh:");

System.out.print("Gjysma = ");

System.out.println(gjysma);

System.out.print("Njëzetqindarka = ");

System.out.println(njezeta);

System.out.print("Dhjetëqindarka = ");

System.out.println(dhjeta);

System.out.print("Pesëqindarka = ");

System.out.println(pesa);

System.out.print("Qindarka = ");

System.out.println(qindarka);

System.out.print("Shuma totale është ");

System.out.println( (gjysma * 50) + (njezeta * 20)

+ (dhjeta * 10) + (pesa * 5) + (qindarka * 1) );

}

}

Aritmetika dhe variablat – fq. 7

Madhësitë e emërtuara: variablat –Vazhdim

Variabël (ndryshore): qelizë e cila përmban një vlerëprimitive të ruajtur (si, p.sh., një numër të plotë) ose njëadresë të një objekti.

Deklarim: forma e urdhërit që konstrukton variabël, p.sh.,int gjysma = 4;

Inicializim: urdhëri i cili i jep variablës vlerën e parë, inicialetë saj.

Tipi i të dhënave: bashkësi e emërtuar, ose „lloj“ i vlerave.

Aritmetika dhe variablat – fq. 8

Madhësitë e emërtuara: variablat –Vazhdim

Fjala kyçe në Java për tipin e numrave të plotë është int .

Literal: vlera aktuale e një tipi, p.sh. numrat e plotë si 1dhe 115 janë literalë të tipit int .

Referencim i variablës: sjellja në shprehje e një kopjeje tëvlerës së ruajtur në variabël.

Verifikimi i tipit të të dhënave: kontrolli të cilin e bënkompilatori për të siguruar se tipi i të dhënave të variablësështë i pranueshëm për kontekstin e referencimit tëvariablës.

Aritmetika dhe variablat – fq. 9

Madhësitë e emërtuara: variablat –Vazhdim

/ ** Llogarit sasinë e parave të imëta. * /

public class Total

{ public static void main (String[] args)

{ int gjysma = 4;

int njezeta = 2;

int dhjeta = 0;

int pesa = 1;

int qindarka = 6;

Aritmetika dhe variablat – fq. 10

Madhësitë e emërtuara: variablat –Vazhdim

System.out.println("Për këto sasi metelikësh:");

System.out.println("Gjysma = " + gjysma);

System.out.println("Njëzetqindarka = " + njezeta);

System.out.println("Dhjetëqindarka = " + dhjeta);

System.out.println("Pesëqindarka = " + pesa);

System.out.println("Qindarka = " + qindarka);

int total = (gjysma * 50) + (njezeta * 20)

+ (dhjeta * 10) + (pesa * 5) + (qindarka * 1);

System.out.println("Shuma totale është " + (total / 100)

+ " Euro dhe " + (total % 100) + " cent");

}

}

Aritmetika dhe variablat – fq. 11

Ndryshoret mund të ndryshojnë:ndarja e vlerës

Totalpublic static void main(String[] args)

{ int gjysma == 4

int njezeta == 2

int dhjeta == 0

int pesa == 1

int qindarka == 6

>System.out.println("Për këto sasi metelikësh:");

System.out.println("Gjysma = " + gjysma);

...

}

Aritmetika dhe variablat – fq. 12

Ndryshoret mund të ndryshojnë:ndarja e vlerës – Vazhdim

Ndarje vlere: forma e urdhërit e cila vë një vlerë të re nëvariabël.

Shembuj:

int money = 0;money = 100;money = money + 50; // money += 50;

Aritmetika dhe variablat – fq. 13

Ndryshoret mund të ndryshojnë:ndarja e vlerës – Vazhdim

/ ** Llogarit sasinë e metelikeve. * /

public class MakeChange

{ public static void main (String[] args)

{ int euros = 3;

int cents = 46;

int money = (euros * 100) + cents;

System.out.println("Gjysma = " + (money / 50));

money = money % 50; // money %= 50

System.out.println("Njëzetqindarka = " + (money / 20));

money = money % 20;

System.out.println("Dhjetëqindarka = " + (money / 10));

money = money % 10;

System.out.println("Pesëqindarka = " + (money / 5));

money = money % 5;

System.out.println("Qindarka = " + money);

}

}

Aritmetika dhe variablat – fq. 14

Ndryshoret mund të ndryshojnë:ndarja e vlerës – Vazhdim

MakeChangepublic static void main(String[] args)

{ int euros == 3

int cents == 46

int money == 346

>System.out.println("Gjysma = " + (money / 50));

money = money % 50;

System.out.println("Njëzetqindarka = " + (money / 20));

money = money % 20;

...

}

Aritmetika dhe variablat – fq. 15

Ndryshoret mund të ndryshojnë:ndarja e vlerës – Vazhdim

MakeChangepublic static void main(String[] args)

{ int euros == 3

int cents == 46

int money == 46

...

>System.out.println("Njëzetqindarka = " + (money / 20));

money = money % 20;

...

}

Aritmetika dhe variablat – fq. 16

Ndryshoret mund të ndryshojnë:ndarja e vlerës – Vazhdim

Semantika e urdhërave të ndarjeve të vlerës, të cilët mundtë kenë paraqitje cirkulare, si

money = money % 50; // money %= 50

konsiston nga tre hapat vijues:

1. Alokohet variabla (e emërtuar money).

2. Llogaritet rezultati i shprehjes në anën e djathtë tëshenjës së barazimit (money % 50), duke referencuarvlerën të cilën për momentin e përmban variabla.

3. Rezultati nga hapi paraprak vendoset në qelizën evariablës (money) si vlerë e re e saj.

Aritmetika dhe variablat – fq. 17

Operatorët e inkrementimit dhedekrementimit

Operatori i inkrementimit (rritjes) ++: rrit për 1 vlerën eoperatorit.

Forma postfikse:int count = 10;count++; // sikur count = count + 1

Forma prefikse:++count; // sikur count = count + 1

Aritmetika dhe variablat – fq. 18

Operatorët e inkrementimit dhedekrementimit – Vazhdim

Operatori i dekrementimit (zvogëlimit) -- : zvogëlon për 1vlerën e operatorit.

Forma postfikse:count--; // sikur count = count - 1

Forma prefikse:--count; // sikur count = count - 1

Aritmetika dhe variablat – fq. 19

Operatorët e inkrementimit dhedekrementimit – Vazhdim

Operatorët e inkrementimit dhe dekrementimit mund tëpërdoren përbrenda një shprehjeje:

int numApples = 5;

int numOranges = 10;

int numFruit = 0;

numFruit = numApples++ + numOranges; // numFruit == 15

// numApples == 6

numFruit = ++numApples + numOranges; // numApples == 7

// numFruit == 17

Aritmetika dhe variablat – fq. 20

Operatorët e inkrementimit dhedekrementimit – Vazhdim

int numApples = 5;

int numOranges = 10;

int numFruit = 0;

numFruit = numApples-- + numOranges; // numFruit == 15

// numApples == 4

numFruit = --numApples + numOranges; // numApples == 3

// numFruit == 13

Aritmetika dhe variablat – fq. 21

Aritmetika e numrave thyesorë

Fjala kyçe në Java për tipin e numrave thyesorë ështëdouble .

int c = 22;

double p = 3.14159;

double t = 4.7E17;

double d = 9.0;

Një veti e rëndësishme e operatorëve themelorëaritmetikë +, - , * , / :

Kur zbatohen mbi dy operandë të tipit int , rezultatiështë i tipit int .

Kur së paku njëri nga operandët është i tipit double ,rezultati është i tipit double .

Aritmetika dhe variablat – fq. 22

Aritmetika e numrave thyesorë –Vazhdim

/ ** Konverton vlerën e temperaturës. * /

public class FahreheitToCelsius

{ public static void main(String[] args)

{ int f = 70;

double c = (5.0/9.0) * (f - 32);

System.out.println("Për gradë Fahrenheit " + f + ",");

System.out.println("gradë Celsius " + c);

}

}

Aritmetika dhe variablat – fq. 23

Aritmetika e numrave thyesorë –Vazhdim

Ekziston klasa Math e cila përmban metoda për llogaritjeme numra thyesorë:

double num = 1E-2;

System.out.println("Rrënja e " + num

+ " është " + Math.sqrt(num));

System.out.println("Kubi i " + num

+ " është " + Math.pow(num, 3));

System.out.println("Logaritmi natyror i " + num

+ " është " + Math.log(num));

Aritmetika dhe variablat – fq. 24

Aritmetika e numrave thyesorë –Vazhdim

Shembull:

int i = 1;double d = i;

Shembull jokorrekt:

double d = 1.6;int i = d;

Programuesi mund të shfrytëzojë shprehjen e konvertimit(cast expression):

double d = 1.6;int i = (int)d; // Vlera e cunguar

Aritmetika dhe variablat – fq. 25

Operatorët OP=

Sintaksa:NDRYSHORE OP= SHPREHJE

Semantika e njëjtë sikurse e ndarjes së vlerës:NDRYSHORE= NDRYSHORE OP( SHPREHJE)

Shembuj:count += 5; // sikur count = count + 5money %= 50; // sikur money = money % 50

Aritmetika dhe variablat – fq. 26

Tipi boolean

Tipi i të dhënave boolean konsiston nga dy vlerat logjike:true dhe false .

double c = 22.0;

double f = 77.0;

double fConverted = (5.0/9.0) * (f - 32);

System.out.print(c + " Celsius më nxehtë se "

+ f + " Fahrenheit? ");

System.out.println(c > fConverted);

Operatorët e krahasimit (të cilët kthejnë rezultat të tipitboolean ): <, >, <=, >=, ==, != .

boolean b = ((3 * 2) == (5 + 1));

Aritmetika dhe variablat – fq. 27

Përparësia e operatorëve (operatorprecedence)

++ postfix, -- postfix- unar, ++ prefix, -- prefix

* , / , %

+, -

<, <=, >, >=

==, !=

operatorët OP=

Tabela 1. Përparësia e operatorëve themelorë

Shembull:b = 3 * 2 == 5 + 1;

Aritmetika dhe variablat – fq. 28

Stringjet, karakterët dhe operacionetme ta

Emri në Java i tipit të të dhënave për stringje është String .

String name = "Filan Fisteku";

System.out.println("Unë quhem " + name);

System.out.println("dhe jam një Pentium " + (5 - 1));

Stringjet janë objekte në Java dhe operacionet me stringje janë metoda; p.sh.,

Krahasimi në barazim i stringjeve s1 dhe s2 : s1.equals(s2) ; p.sh.,

String s = "tungjatjeta";

System.out.println(s.equals("tungjat" + "jeta"));

System.out.println(s.equals(s));

Gjatësia e stringut s : s.length() ; p.sh.,

String s = "tungjatjeta";

int l = s.length(); // l == 11

Aritmetika dhe variablat – fq. 29

Stringjet, karakterët dhe operacionetme ta – Vazhdim

Simbolet individualë përbrenda një stringu quhenkarakterë.

Tipi i karakterëve në Java është char .

char c = ’a’;

Literali karakter paraqitet duke u mbyllur në thonjëza tënjëfishta, p.sh., ’J’ , ’a’ , ’2’ , ’&’ .

Java zbaton Unicode formatin për karakterë; p.sh.,

int i = ’a’ + 1; // 98char c = (char)(’a’ + 1); // ’b’

Aritmetika dhe variablat – fq. 30

Stringjet, karakterët dhe operacionetme ta – Vazhdim

Karakteri Semantika

\b backspace

\t tab

\n rresht i ri (newline)

\r return

\" thonjëza e dyfishtë

\’ thonjëza e njëfishtë

\\ backslash

Tabela 2. Kodimi i karakterëve kontrollues

Aritmetika dhe variablat – fq. 31

Stringjet, karakterët dhe operacionetme ta – Vazhdim

Metoda Semantika Tipi i rezultatit

s1.equals(s2) Krahasimi në barazim i s1 , s2 boolean

s.length() Gjatësia e s int

s.charAt(i) Karakteri në pozitën i në s char

s.substring(i1,i2) Nënstringu i s nga pozita i1 deri nëi2 - 1

String

s.toUpperCase() s në shkronja të mëdha String

s.toLowerCase() s në shkronja të vogla String

s.trim() s pa hapësirat përreth String

s1.indexOf(s2,i) Indeksin (pozitën) e s2 në s1 ngapozita i

int

s1.compareTo(s2) Krahasimi (leksikografik) i s1 , s2 int

Tabela 3. Disa metoda të klasës String

Aritmetika dhe variablat – fq. 32

Stringjet, karakterët dhe operacionetme ta – Vazhdim

Për të manipuluar me karakterë individualë përbrenda njëstringu shfrytëzohet metoda charAt ; p.sh.,char c = "abc".charAt(0); // ’a’

String s = "abc" + "de"; // "abcde"

c = s.charAt(2+1); // ’d’

boolean result = s.charAt(0) == ’a’; // true

c = "abc".charAt(3); // gabim

Aritmetika dhe variablat – fq. 33

Kontrolli i tipit të të dhënave

Java kompilatori zbaton tipet e të dhënave që të:

sigurohet kompatibiliteti i operandëve ndajoperatorëve;

parashikohet tipi i rezultatit të shprehjes;

krijohen qeliza variablash të formatit përkatës;

imponohet kompatibiliteti i shprehjeve ndaj variablavenë inicializime dhe ndarje vlerash.

Aritmetika dhe variablat – fq. 34

Kontrolli i tipit të të dhënave –Vazhdim

boolean

double

double

double

int

int

( ( -3 *

int

i ) +

double

d ) >

double

int

2

Figura 1. Druri i tipit të së dhënësAritmetika dhe variablat – fq. 35

Kontrolli i tipit të të dhënave –Vazhdim

Ne Java ekzistojnë dy forma tipesh të të dhënave:

tipet primitive, si int , double dhe boolean

tipet e referencës, si GregorianCalendar

double d = 2.5;GregorianCalendar c = new GregorianCalendar();

Tipi String është tip i referencës në Java, megjithësepërdoret sikurse tipet primitive të të dhënave.

String s = "abc";

Aritmetika dhe variablat – fq. 36

Hyrja (input) përmes argumentëveprogramorë

/ ** Afishon gjatësinë e argumentit programor * /

public class LengthOfName

{ public static void main(String[] args)

{ String name = args[0];

int length = name.length();

System.out.println("Emri " + name + " ka gjatësinë " + length );

}

}

Aritmetika dhe variablat – fq. 37

Konvertimi ndërmjet stringjeve dhenumrave dhe formatizimi

Konvertimi i stringjeve në numra të plotë:

String s = "20";int i = new Integer(s).intValue();

class Integer konverton stringje numërorësh në numratë plotë; posedon metodën intValue .

Aritmetika dhe variablat – fq. 38

Konvertimi ndërmjet stringjeve dhenumrave dhe formatizimi – Vazhdim

Konvertimi i stringjeve në numra thyesorë:

String approxPi = "3.14159";double d = new Double(approxPi).doubleValue();

class Double konverton stringje numrash në numrathyesorë; posedon metodën doubleValue .

Aritmetika dhe variablat – fq. 39

Konvertimi ndërmjet stringjeve dhenumrave dhe formatizimi – Vazhdim

Konvertimi i numrave në stringje:

double d = 3.14159;String s = d + "";

Aritmetika dhe variablat – fq. 40

Konvertimi ndërmjet stringjeve dhenumrave dhe formatizimi – Vazhdim

Formatizimi i numrave:

import java.text. * ;

public class Test

{ public static void main(String[] args)

{ DecimalFormat formatter = new DecimalFormat("0.00");

double d = 100.0 / 3.0;

String s = formatter.format(d);

System.out.println(s + " Euro");

}

}

class DecimalFormat gjendet në pakon java.text . Posedon metodën format(d)

e cila kthen vlerën e formatizuar në decimale të numrit d, mbështetur në shabllonin ezbatuar në new DecimalFormat( SHABLLON).

Aritmetika dhe variablat – fq. 41

Konvertimi i temperaturës me input

import java.text. * ;

/ ** Konverton vlerën e temperaturës. * /

public class FahrenheitToCelsius

{ public static void main(String[] args)

{ int f = new Integer(args[0]).intValue();

double c = (5.0/9.0) * (f - 32);

System.out.println("Për gradë Fahrenheit " + f + ",");

DecimalFormat formatter = new DecimalFormat("0.0");

System.out.println("gradë Celsius " + formatter.format( c));

}

}

Aritmetika dhe variablat – fq. 42

Konvertimi i temperaturës me input –Vazhdim

FahrenheitToCelsiusmain(args[0] == "70" )

{ >int f = new Integer(args0).intValue();

double c = (5.0/9.0) * (f - 32);

System.out.println("Për gradë Fahrenheit " + f + ",");

DecimalFormat formatter = new DecimalFormat("0.0");

System.out.println("gradë Celsius " + formatter.format( c));

}

Aritmetika dhe variablat – fq. 43

Konvertimi i temperaturës me input –Vazhdim

FahrenheitToCelsiusmain(args[0] == "70" )

{ int f == ?

>f = new Integer(args[0]).intValue();

double c = (5.0/9.0) * (f - 32);

...

}

Aritmetika dhe variablat – fq. 44

Konvertimi i temperaturës me input –Vazhdim

FahrenheitToCelsiusmain(args[0] == "70" )

{ int f == ?

>f = new Integer("70").intValue();

double c = (5.0/9.0) * (f - 32);

...

}

Aritmetika dhe variablat – fq. 45

Konvertimi i temperaturës me input –Vazhdim

FahrenheitToCelsiusmain(args[0] == "70" )

{ int f == ?

>f = a1.intValue();

double c = (5.0/9.0) * (f - 32);

...

}

a1 : Integerpërmban 70

intValue()

{ metodë e cila kthen 70 }

Aritmetika dhe variablat – fq. 46

Konvertimi i temperaturës me input –Vazhdim

FahrenheitToCelsiusmain(args[0] == "70" )

{ int f == ?

>f = PRIT;

double c = (5.0/9.0) * (f - 32);

...

}

a1 : Integerpërmban 70

intValue()

{ >metodë e cila kthen 70 }

Aritmetika dhe variablat – fq. 47

Konvertimi i temperaturës me input –Vazhdim

FahrenheitToCelsiusmain(args[0] == "70" )

{ int f == ?

>f = 70;

double c = (5.0/9.0) * (f - 32);

...

}

Aritmetika dhe variablat – fq. 48

Konvertimi i temperaturës me input –Vazhdim

FahrenheitToCelsiusmain(args[0] == "70" )

{ int f == 70

>double c = (5.0/9.0) * (f - 32);

System.out.println("Për gradë Fahrenheit " + f + ",");

DecimalFormat formatter = new DecimalFormat("0.0");

System.out.println("gradë Celsius " + formatter.format( c));

}

Aritmetika dhe variablat – fq. 49

Diagnostifikimi i gabimeve nëshprehje

Gabimet mund të kenë këto dy forma:

Compile time errors: gabimet sintaksore të cilatparaqiten gjatë kompilimit.

Run time errors (Exceptions): gabimet të cilatparaqiten gjatë ekzekutimit, kur llogaritet rezultatjokorrekt dhe ekzekutimi ndalohet.

Aritmetika dhe variablat – fq. 50

Gabimet sintaksore (compile timeerrors)

System.out.println( (1+2( * 3 );string s = 3;System.out.println(3+true);

int i;System.out.println(2 * i);

int a = 1;double a = 2.5;System.out.println(a);

Aritmetika dhe variablat – fq. 51

Gabimet sintaksore (compile timeerrors) – Vazhdim

System.out.println( (1+2 ) * 3 );String s = " 3" ;System.out.println(3+ 1);

int i = 0;System.out.println(2 * i);

int a = 1;double b = 2.5;System.out.println(a);

Aritmetika dhe variablat – fq. 52

Përjashtimet (exceptions)

int i = 0;System.out.println(1 / i);

i = new Integer(args[0]).intValue();System.out.println(1 / i);

Aritmetika dhe variablat – fq. 53

Gabimet semantike

int x = 3;int y = 7;System.out.println(x = y);

Aritmetika dhe variablat – fq. 54

Gabimet semantike – Vazhdim

int x = 3;int y = 7;System.out.println(x == y);

Aritmetika dhe variablat – fq. 55

Fjalët kyçe dhe identifkatorët

Identifikator: emër variable, klase ose metode; varg ikarkaterëve, ku karakteri i parë është jonumëror.

Fjalët kyçe kanë domethënie të posaçme në Java dhe nukmund të përdoren si identifikatorë.

Për stil konsistent, klasat emërtohen me identifikatorë qëfillojnë me shkronjë të madhe, kurse variablat dhe metodatme shkronjë të vogël.

Aritmetika dhe variablat – fq. 56

Hyrja (input), dalja (output) dhe gjendja

Hyrja (input), dalja (output) dhe gjendja – fq. 1

Hyrja (input), dalja (output) dhegjendja

Objektivat:

Të zbatohet hyrje interaktive, ku një aplikacion mund tëketë interaksion me shfrytëzuesin dhe të kërkojë inputkur është e nevojshme për kompjutim.

Të shfrytëzohet inheritimi për të disenjuar dritaregrafike që afishojnë output në forma teksti, ngjyrashdhe figurash.

Të tregohet si një objekt mund të „mbajë mend“„gjendjen“ e kompjutimit me anë të variablave tëfushave.

Hyrja (input), dalja (output) dhe gjendja – fq. 2

Hyrja (input) interaktive

Controller

main

Input View Output View

Figura 1. Një arkitekturë me input-view

Hyrja (input), dalja (output) dhe gjendja – fq. 3

Hyrja (input) interaktive – Vazhdim

Input view: komponentet e një aplikacioni të cilat pranojnëtë dhëna hyrëse.

Output view: komponentet e një aplikacioni të cilatafishojnë të dhëna dalëse.

Hyrje interaktive: të dhënat hyrëse të cilat shfrytëzuesi i jepgjatë ekzekutimit të programit.

Dialog: dritare e cila afishon një mesazh të shkurtërdhe/ose pranon hyrje interaktive, p.sh., duke rradhiturshfrytëzuesi tekst ose duke shtypur një buton. Kurshfrytëzuesi të ketë përfunduar interaksionin me të,dialogu zhduket.

Hyrja (input), dalja (output) dhe gjendja – fq. 4

Hyrja (input) interaktive – Vazhdim

Hapat kryesorë për të shfrytëzuar klasën JOptionPanepër gjenerim të dialogut për lexim hyrjeje:

1. Kërko në pakon javax.swing klasën JOptionPane :import javax.swing. * ;

2. Krijo dialogun në displej:

String input

= JOptionPane.showInputDialog( POROSIA);

ku POROSIAështë një string i cili do të afishohetpërbrenda dialogut.

Hyrja (input), dalja (output) dhe gjendja – fq. 5

Hyrja (input) interaktive – Vazhdim

import java.text. * ;

import javax.swing. * ;

/ ** FahrenheitToCelsius konverton vlerën e temperaturës

* input: gradët Fahrenheit, int

* output: gradët Celsius, double

* /

public class FahrenheitToCelsius

{ public static void main(String[] args)

{ String input = JOptionPane.showInputDialog("Gradë Fahr enheit:");

int f = new Integer(input).intValue();

double c = (5.0/9.0) * (f - 32);

DecimalFormat formatter = new DecimalFormat("0.0");

System.out.println("Për gradë Fahrenheit " + f + ",");

System.out.println("gradë Celsius " + formatter.format( c));

}

}

Hyrja (input), dalja (output) dhe gjendja – fq. 6

Hyrja (input) interaktive – Vazhdim

FahrenheitToCelsius

mainJOptionPane

showInputDialog

System.out

println

Integer

intValue

DecimalFormat

format

Figura 2. Arkitektura e aplikacionit për konvertimin e temperaturës

Hyrja (input), dalja (output) dhe gjendja – fq. 7

Dialogu dalës

Krijimi i një dialogu të mesazhit në displej:JOptionPane.showMessageDialog(null, MESAZHI);

ku MESAZHIështë stringu i cili do të afishohet në dialogun.

null : vlerë e posaçme në Java e cila shënon „nuk kavlerë“. Përdorimi i null si operand në shprehje aritmetikeose dërgimi kësaj i një mesazhi gjeneron një përjashtim(run-time error).

Hyrja (input), dalja (output) dhe gjendja – fq. 8

Dialogu dalës – Vazhdim

import java.text. * ;

import javax.swing. * ;

/ ** FahrenheitToCelsius konverton vlerën e temperaturës

* input: gradët Fahrenheit, int

* output: gradët Celsius, double

* /

public class FahrenheitToCelsius

{ public static void main(String[] args)

{ String input = JOptionPane.showInputDialog("Gradë Fahr enheit:");

int f = new Integer(input).intValue();

double c = (5.0/9.0) * (f - 32);

DecimalFormat formatter = new DecimalFormat("0.0");

JOptionPane.showMessageDialog(null, f + " Fahrenheit jan ë "

+ formatter.format(c) + " Celsius");

}

}

Hyrja (input), dalja (output) dhe gjendja – fq. 9

Dalja (output) grafike

Output view për dalje grafike janë dritaret grafike, të cilatafishojnë tekst, figura, ngjyra, etj.

Dritaret grafike janë objekte.

Klasat e dritareve grafike shkruhen duke zgjeruar meinheritim (trashigimi) klasë nga bibliotekat e Java (nga tëcilat mund të konstruktohen dritare boshe).

Hyrja (input), dalja (output) dhe gjendja – fq. 10

Panelat dhe kornizat e tyre

Frame (korniza): emërtimi në Java për dritare grafike.Kornizat ndërtohen nga class JFrame , e cila ndodhet nëpakon javax.swing .

import javax.swing. * ;/ ** FrameTest krijon një kornizë * /public class FrameTest{ public static void main(String[] args)

{ JFrame sampleFrame = new JFrame();System.out.println("Ku është korniza?");

}}

Hyrja (input), dalja (output) dhe gjendja – fq. 11

Panelat dhe kornizat e tyre – Vazhdim

import javax.swing. * ;

/ ** FrameTest krijon dhe afishon një kornizë * /

public class FrameTest

{ public static void main(String[] args)

{ JFrame sampleFrame = new JFrame();

sampleFrame.setSize(300, 200);

sampleFrame.setVisible(true);

System.out.println("Korniza u shfaq!");

}

}

Hyrja (input), dalja (output) dhe gjendja – fq. 12

Përshtatja e panelave me trashigimi

Panel: objekti në Java mbi të cilin vizatohet. Për të vizatuarmbi panel shfrytëzohet teknika e quajtur trashigimi(inheritance).

1. Duke u nisur nga class JPanel , shkruhet klasa eveçantë, p.sh., class TestPanel . Përbrenda kësajklase përfshihen instruksionet për vizatim.

2. Konstruktohet një objekt nga class TestPanel ,konstruktohet një kornizë nga class JFrame , dhefutet objekti panel në objektin kornizë.

3. Vëhet madhësia dhe dukshmëria e kornizës.

Hyrja (input), dalja (output) dhe gjendja – fq. 13

Përshtatja e panelave me trashigimi –Vazhdim

import java.awt. * ;

import javax.swing. * ;

public class TestPanel extends JPanel

{ public void paintComponent(Graphics g)

{ // ... instruksionet të cilat vizatojnë mbi panelin

}

}

Nga public class TestPanel mund të konstruktohen objekte panela.

Fraza extends JPanel bën që class TestPanel ta zgjerojë/trashigojëclass JPanel . TestPanel quhet nënklasë, JPanel quhet mbiklasë.

Instruksionet shtesë përbrenda class TestPanel përmbahen në metodën e repaintComponent . Metoda paintComponent startohet dhe ristartohetautomatikisht.

Penda grafike g është objekti i cili vizaton mbi panelin. Penda grafike shfrytëzonklasa nga biblioteka java.awt .

Hyrja (input), dalja (output) dhe gjendja – fq. 14

Përshtatja e panelave me trashigimi –Vazhdim

import java.awt. * ;

import javax.swing. * ;

/ ** TestPanel krijon një panel që afishon një string * /

public class TestPanel extends JPanel

{ / ** paintComponent vizaton panelin

* @param g - penda grafike * /

public void paintComponent(Graphics g)

{ g.setColor(Color.red);

g.drawString("Tungjatjeta!", 30, 80);

}

}

Hyrja (input), dalja (output) dhe gjendja – fq. 15

Përshtatja e panelave me trashigimi –Vazhdim

import javax.swing. * ;

/ ** FrameTest krijon dhe afishon një kornizë,

* dhe fut një panel në të. * /

public class FrameTest3

{ public static void main(String[] args)

{ TestPanel samplePanel = new TestPanel();

JFrame sampleFrame = new JFrame();

sampleFrame.getContentPane().add(samplePanel);

sampleFrame.setSize(300, 200);

sampleFrame.setVisible(true);

System.out.println("Korniza u shfaq e shkruar!");

}

}

Hyrja (input), dalja (output) dhe gjendja – fq. 16

Përshtatja e panelave me trashigimi –Vazhdim

Trashigimia (inheritance): teknikë për lidhjen e dy klasaveashtu që njëra është „përshtatje“ ose zgjerim i tjetrës. Nëqoftë se klasa C2 trashigon (zgjeron) klasën C1class C2 extends C1

atëherë çdo objekt i konstruktuar nga class C2 do të ketëtërë strukturën e definuar përbrenda class C1 si dhestrukturën përbrenda class C2 .

Nënklasa dhe mbiklasa: C2 është nënklasë e C1, kurse C1është mbiklasë e C2.

Hyrja (input), dalja (output) dhe gjendja – fq. 17

Përshtatja e panelave me trashigimi –Vazhdim

FrameTestmain(...)

{ samplePanel == a1

sampleFrame == a3

...

}

a1 : TestPanel

paintComponent(g == a2 )

{ ... }

Instruksionet nga klasa JPanel

a2 : GraphicssetColor(...) { ... }

drawString(...) { ... }

...

[Objekti Graphics konstruktohetautomatikisht me TestPanel .]

a3 : JFramesetSize(...) { ... }

setVisible(...) { ... }

...

Hyrja (input), dalja (output) dhe gjendja – fq. 18

Përshtatja e panelave me trashigimi –Vazhdim

FrameTest

main

TestPanel

paintComponent

JFrame

getContentPane

setSize

setVisible

JPanelGraphics

setColor

drawString

Figura 3. Arkitektura e aplikacionit me TestPanel

Hyrja (input), dalja (output) dhe gjendja – fq. 19

Përshtatja e panelave me trashigimi –Vazhdim

import java.awt. * ;

import javax.swing. * ;

/ ** MyPanel krijon një panel me ngjyra * /

public class MyPanel extends JPanel

{ / ** paintComponent vizaton mbi panelin

* @param g -- penda grafike * /

public void paintComponent(Graphics g)

{ g.setColor(Color.red);

int left = 100;

int top = 70;

int width = 90;

int height = 60;

g.drawRect(left, top, width, height);

int diameter = 40;

g.fillOval(left + width - diameter, top, diameter, diamete r);

}

}

Hyrja (input), dalja (output) dhe gjendja – fq. 20

Përshtatja e panelave me trashigimi –Vazhdim

import java.awt. * ;

import javax.swing. * ;

/ ** FrameTest2 afishon një dritare me ngjyra * /

public class FrameTest2

{ public static void main(String[] args)

{ JFrame myFrame = new JFrame();

myFrame.getContentPane().add(new MyPanel());

myFrame.setTitle("Vizatuesi im i kornizave");

myFrame.setBackground(Color.white);

int width = 300;

int height = 200;

myFrame.setSize(width, height);

myFrame.setVisible(true);

}

}

Hyrja (input), dalja (output) dhe gjendja – fq. 21

Përshtatja e panelave me trashigimi –Vazhdim

Ngjyrosje e dritares: vizatimi i tekstit, ngjyrave dhe figuravenë dritaren grafike; kryhet përmes metodëspaintComponent .

Pendë grafike: objekti i shfrytëzuar nga metodapaintComponent për ngjyrosjen e dritares.

Piksel: njëra nga „pikat“ e imazhit; shfrytëzohet si njësimatëse për distanca përbrenda dirtares grafike.

Hyrja (input), dalja (output) dhe gjendja – fq. 22

Formati dhe metodat për vizatim

300

200100

70

Figura 4. Alokimi i pikselit me koordinata (100,70)

Hyrja (input), dalja (output) dhe gjendja – fq. 23

Formati dhe metodat për vizatim –Vazhdim

100

70

90

60

Figura 5. g.drawRect(100, 70, 90, 60)

Hyrja (input), dalja (output) dhe gjendja – fq. 24

Formati dhe metodat për vizatim –Vazhdim

100

70

40

40

Figura 6. g.drawOval(100, 70, 40, 40)

Hyrja (input), dalja (output) dhe gjendja – fq. 25

Formati dhe metodat për vizatim –Vazhdim

Metoda Semantika

setColor(c) Mbush pendën me ngjyrën

drawLine(x1, y1, x2, y2) Vizaton segmentin

drawString(s, x, y) Afishon stringun të pozicionuarsipas koordinatave

drawRect(x, y, width, height) Vizaton drejtkëndëshin

fillRect(x, y, width, height) Mbush drejtkëndëshin

drawOval(x, y, width, height) Vizaton elipsën

fillOval(x, y, width, height) Mbush elipsën

fillArc(x, y, width, height,

startAngle, thickness)

Vizaton pjesën e harkut të elipsës

Tabela 1. Disa metoda të pendës grafike (class Graphics )

Hyrja (input), dalja (output) dhe gjendja – fq. 26

Konstruktor metodat dhe objektithis

Metodë konstruktor: metodë përbrenda një klase qëekzekutohet kur të konstruktohet një objekt nga klasa.Emri i konstruktorit është i njëjtë sikurse emri i klasës në tëcilën paraqitet.

this : vlerë e posaçme në Java e cila shënon „këtëobjekt“. Zbatohet për vetëreferencim të objekteve.

Hyrja (input), dalja (output) dhe gjendja – fq. 27

Konstruktor metodat dhe objektithis – Vazhdim

import java.awt. * ;

import javax.swing. * ;

import java.util. * ;

/ ** ClockWriter vizaton një orë * /

public class ClockWriter extends JPanel

{ public ClockWriter()

{ int width = 200;

JFrame clockFrame = new JFrame();

clockFrame.getContentPane().add(this);

clockFrame.setTitle("Ora");

clockFrame.setBackground(Color.white);

clockFrame.setSize(width, width);

clockFrame.setVisible(true);

}

Hyrja (input), dalja (output) dhe gjendja – fq. 28

Konstruktor metodat dhe objektithis – Vazhdim

/ ** paintComponent vizaton orën

* @param g - penda grafike * /

public void paintComponent(Graphics g)

{ GregorianCalendar time = new GregorianCalendar();

int minutesAngle = 90 - time.get(Calendar.MINUTE) * 6;

int hoursAngle = 90 - time.get(Calendar.HOUR) * 30;

int left = 50;

int top = 50;

int diameter = 100;

g.setColor(Color.black);

g.drawOval(left, top, diameter, diameter);

g.setColor(Color.red);

g.fillArc(left + 5, top + 5, diameter - 10, diameter - 10,

minutesAngle, 5);

g.setColor(Color.blue);

g.fillArc(left + 25, top + 25, diameter - 50, diameter - 50,

hoursAngle, -8);

}Hyrja (input), dalja (output) dhe gjendja – fq. 29

Konstruktor metodat dhe objektithis – Vazhdim

/ ** main: për testim * /

public static void main(String[] args)

{ new ClockWriter(); }

}

Hyrja (input), dalja (output) dhe gjendja – fq. 30

Konstruktor metodat dhe objektithis – Vazhdim

Fraza

new ClockWriter()

ka semantikën vijuese:

Konstruktohet një ClockWriter objekt në memorienqendrore;

Objektit të ri i dërgohet mesazh për të ekzekutuarinstruksionet në konstruktorin e tij, të quajtur poashtuClockWriter .

Hyrja (input), dalja (output) dhe gjendja – fq. 31

Objektet me gjendje: Variablat efushave

Variabël e fushës (fushë): variabël e deklaruar në klasëpavarësisht nga metodat e klasës. Fusha mund tëreferencohet dhe t’i ndahet vlerë nga të gjitha metodat nëatë klasë.

Variabël lokale: variabël e deklaruar përbrenda njëmetode. Mund të referencohet vetëm nga urdhëratpërbrenda asaj metode.

Hyrja (input), dalja (output) dhe gjendja – fq. 32

Objektet me gjendje: Variablat efushave – Vazhdim

import java.awt. * ;

import javax.swing. * ;

/ ** FieldExample: Afishon numrin e ngjyrosjeve të dritares * /

public class FieldExample extends JPanel

{ private int count; // numri i ngjyrosjeve të dritares

/ ** FieldExample: konstrukton dritaren * /

public FieldExample()

{ count = 0; // dritarja akoma nuk është ngjyrosur

JFrame myFrame = new JFrame();

myFrame.getContentPane().add(this);

myFrame.setTitle("Shembull fushe");

int height = 200;

myFrame.setSize(3 * height / 2, height);

myFrame.setVisible(true);

}

Hyrja (input), dalja (output) dhe gjendja – fq. 33

Objektet me gjendje: Variablat efushave – Vazhdim

/ ** paintComponent vizaton numrin e ngjyrosjeve

* @param g - penda grafike * /

public void paintComponent(Graphics g)

{ count = count + 1; // ose count++

g.setColor(Color.black);

int margin = 25;

int lineHeight = 20;

int firstLine = 40;

int baseline = firstLine + lineHeight * count;

g.drawString("E ngjyrosur " + count + " herë", margin, basel ine);

}

/ ** main: për testim * /

public static void main(String[] args)

{ new FieldExample(); }

}

Hyrja (input), dalja (output) dhe gjendja – fq. 34

Objektet me gjendje: Variablat efushave – Vazhdim

FieldExamplemain(...)

{ ... > }

a1 : FieldExample

private int count == 0

paintComponent( g == a2 )

{ count = count + 1;

...

}

a2 : GraphicssetColor(...) { ... }

drawString(...) { ... }

...

a3 : JFramesetSize(...) { ... }

setVisible(...) { ... }

...

Hyrja (input), dalja (output) dhe gjendja – fq. 35

Objektet me gjendje: Variablat efushave – Vazhdim

Fushat gjithashtu mund të përmbajnë edhe objekte(adresa të tyre).// ... import -- njësoj sikurse më parë

public class ClockWriter extends JPanel

{ private GregorianCalendar time = new GregorianCalendar( );

public ClockWriter()

{ // ... Njësoj sikurse më parë

}

public void paintComponent(Graphics g)

{ int minutesAngle = 90 - time.get(Calendar.MINUTE) * 6;

int hoursAngle = 90 - time.get(Calendar.HOUR) * 30;

// ... Njësoj sikurse më parë

}

// ... main -- njësoj sikurse më parë

}

Hyrja (input), dalja (output) dhe gjendja – fq. 36

Objektet me gjendje: Variablat efushave – Vazhdim

ClockWriter

paintComponent

JPanel

GregorianCalendar

get

Graphics

setColor

drawString

Figura 7. Arkitektura e ClockWriter

Hyrja (input), dalja (output) dhe gjendja – fq. 37

Objektet me gjendje: Variablat efushave – Vazhdim

Relacioni është: në qoftë se klasa C2 zgjëron klasën C1,themi se C2 është C1.

Relacioni shfrytëzon: në qoftë se klasa C2 dërgonmesazhe objekteve të konstruktuara nga klasa C1, themise C2 shfrytëzon C1.

Relacioni ka: në qoftë se klasa C2 posedon fushë vlera esë cilës është objekt i klasës C1 të cilin ajo e kakonstruktuar, themi se C2 ka C1.

Hyrja (input), dalja (output) dhe gjendja – fq. 38

Objektet me gjendje: Variablat efushave – Vazhdim

Semantika e fushave:

Qeliza e fushës krijohet kur edhe vetë objekti.

Fusha mund të inicializohet me vetë krijimin, nëinstruksionin e deklarimit. Në qoftë se fusha nukinicializohet gjatë deklarimit, atëherë preferohet që tëinicializohet përbrenda metodës konstruktor.

Vlera në qelizën e një fusheje mbahet edhe kur nukekzekutohet asnjë metodë e objektit.

Emrat e fushave nuk duhet të rideklarohen përbrendandonjë metode.

Hyrja (input), dalja (output) dhe gjendja – fq. 39

Zbatimi i fushave për memorimin ehyrjes dhe përgjegjjeve

import java.awt. * ;

import javax.swing. * ;

import java.text. * ;

/ ** Konverton vlerën e temperaturës. * /

public class FahrenheitToCelsiusWriter extends JPanel

{ private int fahrenheit;

private double celsius;

private int leftMargin = 20;

private int lineHeight = 20;

Hyrja (input), dalja (output) dhe gjendja – fq. 40

Zbatimi i fushave për memorimin ehyrjes dhe përgjegjjeve – Vazhdim

/ ** Konstruktori. * /

public FahrenheitToCelsiusWriter()

{ String input = JOptionPane.showInputDialog("Gradë Fahr enheit:");

fahrenheit = new Integer(input).intValue();

celsius = (5.0/9.0) * (fahrenheit - 32);

int frameHeight = 200;

JFrame f = new JFrame();

f.getContentPane().add(this);

f.setTitle("Celsius në Fahrenheit");

f.setBackground(Color.white);

f.setSize(3 * frameHeight / 2, frameHeight);

f.setVisible(true);

}

Hyrja (input), dalja (output) dhe gjendja – fq. 41

Zbatimi i fushave për memorimin ehyrjes dhe përgjegjjeve – Vazhdim

/ ** Vizaton porosinë.

* @param g penda grafike * /

public void paintComponent(Graphics g)

{ g.setColor(Color.red);

int firstLine = lineHeight * 4;

g.drawString(fahrenheit + " Fahrenheit janë",

leftMargin, firstLine);

DecimalFormat formatter = new DecimalFormat("0.0");

g.drawString(formatter.format(celsius) + " Celsius",

leftMargin, firstLine + lineHeight);

}

/ ** main: për testim * /

public static void main(String[] args)

{ new FahrenheitToCelsiusWriter(); }

}

Hyrja (input), dalja (output) dhe gjendja – fq. 42

Testimi i programit i cili shfrytëzonhyrje

Varësisht nga lloji i test shembujve, stili i testimit mund tëjetë:

1. Testim i „kutisë së bardhë“.

2. Testim i „kutisë së zezë“.

Hyrja (input), dalja (output) dhe gjendja – fq. 43

Struktura e komponenteve: Ndërtimi imetodave dhe klasave

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 1

Struktura e komponenteve: Ndërtimii metodave dhe klasave

Objektivat:

Të shkruhen metoda publike dhe private të cilat marrinargumente (parametra) dhe kthejnë rezultate.

Të shkruhen klasa që përmbajnë metoda të cilatrishfrytëzohen sërish.

Të lexohen dhe shkruhen specifikime interfejsash, tëcilat përshkruajnë sjelljet e klasave dhe metodave tëtyre.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 2

Metodat

Metodë: varg i emërtuar urdhërash; i destinuar përkryerjen e një detyre ose përgjegjësie specifike.

public class MyApplication

{ public static void main(String[] args)

{ // ... Instruksionet të cilat ekzekutohen

// me startimin e aplikacionit

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 3

Metodat – Vazhdim

import java.awt. * ;

import javax.swing. * ;

public class MyPanel extends JPanel

{ public MyPanel()

{ // ... Instruksionet për konstruktimin dhe inicializimin

// e panelit

}

public void paintComponent(Graphics g)

{ // ... Instruksionet për vizatim në panelin

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 4

Metodat publike

System.out.println(" TEKSTI ");

Invokim metode: dërgim mesazhi i cili përfshin emrin emetodës. Mesazhi kërkon që objekti pranues të ekzekutojëmetodën e emërtuar në mesazhin.

Klient: objekti i cili dërgon mesazh (invokim).

Pranues: objekti i cili pranon mesazh; ekzekuton metodëne emërtuar në mesazhin.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 5

Metodat publike – Vazhdim

public void paintComponent(Graphics g) // kjo është ballin a

{ URDHËRAT // ky është trupi

}

Përnga sintaksa, metoda përbëhet nga ballina (headerline) dhe trupi.

Metoda publike i është në dispozicion „publikut gjeneral“,përfshirë sistemin operativ të kompjuterit si dhe objekte tëkrijuara nga klasë tjera.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 6

Ca metoda publike themelore

/ ** Vizaton ASCII art * /

public class AsciiArtWriter

{ / ** Konstruktori * /

public AsciiArtWriter()

{ System.out.println(); }

/ ** Afishon një bletë * /

public void printBee()

{ System.out.println(" ,-.");

System.out.println(" \\_/"); // \\ për \

System.out.println(">{|||}-");

System.out.println(" / \\");

System.out.println(" ‘-^");

System.out.println();

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 7

Ca metoda publike themelore –Vazhdim

/ ** Afishon një fluturë * /

public void printButterfly()

{ System.out.println(" _ \" _"); // \" për "

System.out.println(" (_\\|/_)");

System.out.println(" (/|\\)");

System.out.println();

}

/ ** Afishon një kalikuese * /

public void printLadybug()

{ System.out.println(" ‘m\’"); // \’ për ’

System.out.println(" (|)");

System.out.println();

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 8

Ca metoda publike themelore –Vazhdim

/ ** DrawArt: ca Ascii art * /

public class DrawArt

{ public static void main(String[] args)

{ AsciiArtWriter writer = new AsciiArtWriter();

writer.printBee();

System.out.println("Test");

writer.printLadybug();

writer.printButterfly();

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 9

Ca metoda publike themelore –Vazhdim

Specifikim metode: koment i filluar me / ** i cilidokumenton qellimin ose sjelljen e një metode.Specifikimet mund të përpunohen me veglën javadoc përtë gjeneruar një dokumentacion kodi.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 10

Metodat konstruktorë

Konstruktor: metodë përbrenda klasës e cila invokohetautomatikisht kur të konstruktohet një objekt në memorienqendrore të kompjuterit.

AsciiArtWriter writer = new AsciiArtWriter();

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 11

Metodat konstruktorë – Vazhdim

DrawArtmain

{ 1> AsciiArtWriter writer = new AsciiArtWriter();

...

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 12

Metodat konstruktorë – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == ? ;

1> writer = PRIT

...

}

a1 : AsciiArtWriterAsciiArtWriter()

{ 2> System.out.println(); }

public void printBee() {...}

public void printButterfly() {...}

public void printLadybug() {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 13

Metodat konstruktorë – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == ? ;

1> writer = a1

...

}

a1 : AsciiArtWriterpublic void printBee() {...}

public void printButterfly() {...}

public void printLadybug() {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 14

Metodat konstruktorë – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == a1 ;

...

1> writer.printBee();

...

}

a1 : AsciiArtWriterpublic void printBee() {...}

public void printButterfly() {...}

public void printLadybug() {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 15

Metodat konstruktorë – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == a1 ;

...

1> PRIT

...

}

a1 : AsciiArtWriterpublic void printBee()

{ 2> System.out.println(...);

...

}

public void printButterfly() {...}

public void printLadybug() {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 16

Metodat konstruktorë – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == a1 ;

...

1> System.out.println("Test");

...

}

a1 : AsciiArtWriterpublic void printBee() {...}

public void printButterfly() {...}

public void printLadybug() {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 17

Parametrat e metodave

Parametrat aktualë: argumentet lista e të cilëve jepet sëbashku me emrin e metodës gjatë invokimit të metodës,p.sh.,

System.out.println(" TEKSTI ");

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 18

Parametrat e metodave – Vazhdim

Parametrat formalë: emrat e variablave lista e të cilavejepet në ballinën e metodës.

/ ** Afishon një bletë me emër.

* @param name emri i bletës

* /

public void printBeeWithName(String name)

{ System.out.println(" ,-.");

System.out.println(" \\_/");

System.out.println(">{|||}-" + name + "-");

System.out.println(" / \\");

System.out.println(" ‘-^");

System.out.println();

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 19

Parametrat e metodave – Vazhdim

Kur metoda invokohet parametrat aktualë u shoqërohenparametrave formalë përkatës ashtu që parametri formalinicializohet me parametrin aktual. Lidhja e një parametriaktual me një parametër formal funksionon sikur njëinicializim i një variableje lokale.AsciiArtWriter writer = new AsciiArtWriter();

String s = "Tringa";

writer.printBeeWithName(s);

writer.printBeeWithName("Filan " + "Fisteku");

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 20

Parametrat e metodave – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == a1 ;

String s == "Tringa" ;

1> writer.printBeeWithName(s);

...

}

a1 : AsciiArtWriterpublic void printBee() {...}

public void printButterfly() {...}

public void printLadybug() {...}

public void printBeeWithName(String name) {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 21

Parametrat e metodave – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == a1 ;

String s == "Tringa" ;

1> writer.printBeeWithName("Tringa");

...

}

a1 : AsciiArtWriterpublic void printBee() {...}

public void printButterfly() {...}

public void printLadybug() {...}

public void printBeeWithName(String name) {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 22

Parametrat e metodave – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == a1 ;

String s == "Tringa" ;

1> PRIT

...

}

a1 : AsciiArtWriter...

public void printBeeWithName

{ 2> String name = "Tringa";

System.out.println(...);

...

}

...

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 23

Parametrat e metodave – Vazhdim

DrawArtmain

{ AsciiArtWriter writer == a1 ;

String s == "Tringa" ;

1> PRIT

...

}

a1 : AsciiArtWriter...

public void printBeeWithName

{ String name == "Tringa"

2> System.out.println(...);

...

}

...

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 24

Format e parametrave

Çdo vlerë e cila mund t’i shoqërohet (ndahet për vlerë) njëvariableje mund të jetë parametër aktual. Parametri aktualduhet të jetë kompatibil me parametrin formal.

import java.text. * ;

/ ** Kryen operacione matematike. * /

public class MathOperations

{ / ** Afishon numrin invers të një numri të plotë

* të formatizuar në tri vende decimale.

* @param i numri i plotë i cili invertohet * /

public void printInverse(int i)

{ DecimalFormat formatter = new DecimalFormat("0.000");

double d = 1.0 / i;

String s = formatter.format(d);

System.out.println(s);

}

}Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 25

Format e parametrave – Vazhdim

Invokimi i printInverse bëhet, p.sh., meMathOperations calculator = new MathOperations();

calculator.printInverse(3);

Invokim jokorrekt: calculator.printInverse(0.5) .

Për printInverse të shkruar me ballinënpublic void printInverse(double i)

korrekte do të ishin të dy invokimet vijuese:calculator.printInverse(0.5);

calculator.printInverse(3);

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 26

Format e parametrave – Vazhdim

/ ** Afishon numrin invers të një numri të plotë.

* @param i numri i plotë i cili invertohet

* @param pattern shablloni për formatizimin e rezultatit * /

public void printInverse(int i, String pattern)

{ DecimalFormat formatter = new DecimalFormat(pattern);

double d = 1.0 / i;

String s = formatter.format(d);

System.out.println(s);

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 27

Format e parametrave – Vazhdim

MathOperations calculator = new MathOperations();

calculator.printInverse(3, "0.00000");

calculator.printInverse(5, "0.0");

Shoqërimi i parametrave aktualë parametrave formalëpërcaktohet nga renditja në listë e parametrave aktualë –parametrat aktualë u shoqërohen parametrave formalë meradhë.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 28

Format e parametrave – Vazhdim

/ ** Afishon numrin invers të një numri të plotë.

* @param i numri i plotë i cili invertohet

* @param f objekti i cili formatizon rezultatin * /

public void printInverse(int i, DecimalFormat f)

{ double d = 1.0 / i;

String s = f.format(d);

System.out.println(s);

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 29

Format e parametrave – Vazhdim

Invokimi i metodës së tretë:DecimalFormat fivePlaces = new DecimalFormat("0.00000") ;

calculator.printInverse(3, fivePlaces);

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 30

Format e parametrave – Vazhdim

Metodat konstruktorë mund të shfrytëzojnë parametraformalë njësoj sikurse metodat tjera publike.

Metoda ballina e së cilës ka formënpublic void EMRI_I_METODËS()

është metodë me zero parametra formalë dhe duhet tëinvokohet nga urdhër i cili ka zero parametra aktualë:OBJEKTI_PRANUES. EMRI_I_METODËS();

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 31

Case study: kornizë dalëse medestinim të përgjithshëm

Specifikim interfejsi (interfejs): listë emrash dhepërgjegjësish të metodave publike të një klase.

MyWriter krijon dritare grafike e cila afishonnjë fjali

Konstruktori:

MyWriter(int w, int h) Konstrukton dritaren me gjerësi dhelartësi të specifikuar

Metodat:

writeSentnce(String s) Afishon fjalinë në dritaren grafike

repositionSentence(int x, int y) Riafishon fjalinë në pozitën e re

Tabela 1. Specifikimi i interfejsit të kornizës dalëse MyWriter

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 32

Case study: kornizë dalëse medestinim të përgjithshëm – Vazhdim

import javax.swing. * ;

import java.awt. * ;

/ ** Krijon dritare grafike e cila afishon një fjali. * /

public class MyWriter extends JPanel

{ private int width;

private int height;

private String sentence = "";

private int xPosition;

private int yPosition;

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 33

Case study: kornizë dalëse medestinim të përgjithshëm – Vazhdim

/ ** Konstruktor: krijon panelin.

* @param w gjerësia e dritares

* @param h lartësia e dritares * /

public MyWriter(int w, int h)

{ width = w;

height = h;

xPosition = width / 5;

yPosition = height / 2;

JFrame myFrame = new JFrame();

myFrame.getContentPane().add(this);

myFrame.setTitle("MyWriter");

myFrame.setSize(width, height);

myFrame.setVisible(true);

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 34

Case study: kornizë dalëse medestinim të përgjithshëm – Vazhdim

/ ** Vizaton panelin.

* @param g penda grafike * /

public void paintComponent(Graphics g)

{ g.setColor(Color.white);

g.fillRect(0, 0, width, height);

g.setColor(Color.red);

g.drawString(sentence, xPosition, yPosition);

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 35

Case study: kornizë dalëse medestinim të përgjithshëm – Vazhdim

/ ** Afishon një fjali.

* @param s fjalia që afishohet * /

public void writeSentence(String s)

{ sentence = s;

this.repaint();

}

/ ** Riafishon fjalinë në pozitën e re.

* @param x pozita e re horizontale

* @param y pozita e re vertikale * /

public void repositionSentence(int x, int y)

{ xPosition = x;

yPosition = y;

this.repaint();

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 36

Case study: kornizë dalëse medestinim të përgjithshëm – Vazhdim

import javax.swing. * ;

/ ** Afishon në dritare grafike një fjali të futur. * /

public class MyWriterTest

{ public static void main(String args)

{ int width = 300;

int height = 200;

MyWriter writer = new MyWriter(width, height);

writer.repositionSentence(50, 80);

String s = JOptionPane.showInputDialog("Rradhisni ca tek st:");

writer.writeSentence(s);

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 37

Case study: kornizë dalëse medestinim të përgjithshëm – Vazhdim

1. Disenjuam dhe shkruam një klasë e cila mund tëshfrytëzohet si komponentë e shumë aplikacioneve.

2. Disenjuam një specifikim interfejsi i cili na ndihmoi tashkruajmë klasën.

3. Shfrytëzuesit e klasës mund ta lexojnë specififikim eklasës për të kuptuar se si t’i shfrytëzojnë metodat eklasës; nuk ka nevojë për ta lexuar kodimin e klasës.

4. Kodimi shfrytëzoi konstruktor dhe fusha private për tëndihmuar metodat publike të sillen në mënyrë korrekte;metodat publike invokuan njëra tjetrën sipas nevojës.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 38

Case study: kornizë dalëse medestinim të përgjithshëm – Vazhdim

Kur një aplikacion ndërtohet nga disa njerëz, është mëlehtë për njerëzit veç e veç të shkruajnë dhe testojnëpjesët e aplikacionit në qoftë se aplikacioni ndahet nëklasë.

Në qoftë se një pjesë aplikacioni duhet sërish tëshkruhet ose të zëvendësohet, është më lehtë për t’ubërë në qoftë se pjesa është një klasë e veçantë.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 39

Rezultatet e metodave: Funksionet

Kur një objekt klient dërgon mesazh, ndonjëherë klientipret përgjegjje kthyese, p.sh.,String input = JOptionPane.showInputDialog("Gradë Fahre nheit:");

int f = new Integer(input).intValue();

Rezultat metode: përgjegjje e llogaritur nga metoda dhe ekthyer klientit.

Funksion: metodë e cila kthen rezultat.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 40

Rezultatet e metodave: Funksionet –Vazhdim

/ ** Konverton vlera temperaturash. * /

public class TemperatureConvertor

{ / ** Konverton vlerën e dhënë.

* @param f shkallët Fahrenheit

* @return ekuivalenti në shkallë Celsius * /

public double fahrenheitToCelsius(double f)

{ double c = (5.0/9.0) * (f - 32);

return c;

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 41

Rezultatet e metodave: Funksionet –Vazhdim

Teknika për kthimin e rezultatit:

Në ballinën e metodës zëvendësohet fjala kyçe void

me tipin e të dhënave të rezultatit të cilin duhet takthejë metoda. Fjala kyçe void do të thotë mos kthefare rezultat.

Në fund të trupit të metodës vëhet urdhërreturn SH;

ku shprehja SH llogarit vlerën e cila do të kthehet.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 42

Rezultatet e metodave: Funksionet –Vazhdim

import javax.swing. * ;

/ ** ConvertorTest teston konvertorin e temperaturave * /

public class ConvertorTest

{

public static void main(String args)

{ String input =

JOptionPane.showInputDialog("Gradë Fahrenheit:");

int f = new Integer(input).intValue();

TemperatureConvertor convert = new TemperatureConvertor ();

double c = convert.fahrenheitToCelsius(f);

MyWriter writer = new MyWriter(300, 200);

writer.writeSentence(f + " Fahrenheit janë " + c + " Celsius" );

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 43

Rezultatet e metodave: Funksionet –Vazhdim

Urdhëri return është pikë daljeje nga funksioni. P.sh.,funksioni vijues llogarit në mënyrë jokorrekte katrorin e njënumri:

public int square(int num)

{ int result = 0;

return result;

result = num * num;

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 44

Rezultatet e metodave: Funksionet –Vazhdim

ConvertorTestmain

{ int f == 68.0

1> TemperatureConvertor convert = new TemperatureConvertor ();

double c = convert.fahrenheitToCelsius(f);

...

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 45

Rezultatet e metodave: Funksionet –Vazhdim

ConvertorTestmain

{ int f == 68.0

TemperatureConvertor convert == a1

1> double c = convert.fahrenheitToCelsius(f);

...

}

a1 : TemperatureConvertorpublic double fahrenheitToCelsius(double f) {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 46

Rezultatet e metodave: Funksionet –Vazhdim

ConvertorTestmain

{ int f == 68.0

TemperatureConvertor convert == a1

double c == ?

1> c = PRIT;

...

}

a1 : TemperatureConvertorfahrenheitToCelsius

{ double f == 68.0

double c == 20.0

2> return c;

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 47

Rezultatet e metodave: Funksionet –Vazhdim

ConvertorTestmain

{ int f == 68.0

TemperatureConvertor convert == a1

double c == ?

1> c = 20.0;

...

}

a1 : TemperatureConvertorpublic double fahrenheitToCelsius(double f) {...}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 48

Rezultatet e metodave: Funksionet –Vazhdim

Rezultati i një funksioni mund të injorohet, p.sh., nëclass FahrenheitToCelsiusWriter kemi pasur

/ ** main: për testim * /

public static void main(String args)

{ new FahrenheitToCelsiusWriter(); }

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 49

Metodat private

Metodat private mund të invokohen vetëm përbrendaklasës në të cilë paraqiten.

Metoda private shkruhen si zgjidhje në dy situata:

1. Kur ka përsëritje të një detyre.

2. Kur një formulë ose nënalgoritëm fundamental meritontë ketë emër të vetin.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 50

Emërtimi i një nënalgoritmi memetodë private

Algoritmi për paraqitjen e dritares grafike me kufi të kaltër eqendër të bardhë:

1. Ngjyros tërë dritaren në të kaltër.

2. Llogarit madhësinë e një drejtkëndëshi të madhësisëca më të vogël sesa tërë dritarja.

3. Ngjyros drejtkëndëshin në të bardhë.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 51

Emërtimi i një nënalgoritmi memetodë private – Vazhdim

/ ** Vizaton panelin.

* @param g penda grafike * /

public void paintComponent(Graphics g)

{ makeBorder(g);

g.setColor(Color.red);

g.drawString(sentence, xPosition, yPosition);

}

/ ** Ngjyros kufirin e kornizës.

* @param pen penda grafike * /

private void makeBorder(Graphics pen)

{ pen.setColor(Color.blue);

pen.fillRect(0, 0, width, height);

int borderSize = 20;

int rectWidth = width - 2 * borderSize;

int rectHeight = height - 2 * borderSize;

pen.setColor(Color.white);

pen.fillRect(borderSize, borderSize, rectWidth, rectHe ight);

}Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 52

Përsëritja e një aktiviteti me metodëprivate

Algoritmi për ngjyrosjen e një veje:

1. Llogarit lartësinë e vesë si 2/3 e gjerësisë së saj.

2. Llogarit skajin e majtë të vesë ashtu që veja të jetë eqendërsuar në dritaren, dhe llogarit skajin e sipërm tëvesë.

3. Ngjyros venë.

4. Kthe vlerën e skajit të sipërm, në rast nevoje qëmëpastaj të vendoset një tjetër ve përmbi.

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 53

Përsëritja e një aktiviteti me metodëprivate – Vazhdim

import javax.swing. * ;

import java.awt. * ;

/ ** Vizaton tri ve të renditura. * /

public class StackedEggWriter extends JPanel

{ private int frameWidth;

private int frameHeight;

private int egg1Size;

private int egg2Size;

private int egg3Size;

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 54

Përsëritja e një aktiviteti me metodëprivate – Vazhdim

/ ** Konstruktori.

* @param width gjerësia e panelit

* @param height lartësia e panelit

* @param size1 gjerësia e vesë së poshtme

* @param size2 gjerësia e vesë së mesme

* @param size3 gjerësia e vesë së sipërme * /

public StackedEggWriter(int width, int height,

int size1, int size2, int size3)

{ frameWidth = width; frameHeight = height;

egg1Size = size1; egg2Size = size2;

egg3Size = size3;

JFrame myFrame = new JFrame();

myFrame.getContentPane().add(this);

myFrame.setTitle("Mullar vezësh");

myFrame.setBackground(Color.yellow);

myFrame.setSize(frameWidth, frameHeight);

myFrame.setVisible(true);

}Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 55

Përsëritja e një aktiviteti me metodëprivate – Vazhdim

/ ** Mbush dritaren me vezë.

* @param g penda grafike * /

public void paintComponent(Graphics g)

{ int egg1Top = paintAnEgg(frameHeight, egg1Size, g);

int egg2Top = paintAnEgg(egg1Top, egg2Size, g);

paintAnEgg(egg2Top, egg3Size, g);

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 56

Përsëritja e një aktiviteti me metodëprivate – Vazhdim

/ ** Vizaton një ve.

* @param bottom pozita e skajit të poshtëm

* @param width pozita e skajit të poshtëm

* @param pen penda grafike

* @return y pozita e skajit të sipërm * /

private int paintAnEgg(int bottom, int width, Graphics pen )

{ int height = 2 * width / 3;

int top = bottom - height;

int left = (frameWidth - width) / 2;

pen.setColor(Color.pink);

pen.fillOval(left, top, width, height);

pen.setColor(Color.black);

pen.drawOval(left, top, width, height);

return top;

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 57

Përsëritja e një aktiviteti me metodëprivate – Vazhdim

/ ** main për testim * /

public static void main(String args)

{ int width = 300;

int height = 200;

new StackedEggWriter(width, height, 140, 90, 50);

}

}

Struktura e komponenteve: Ndertimi i metodave dhe klasave – fq. 58

Struktura e kontrollit: Urdhërat kushtëzues

Struktura e kontrollit: Urdherat kushtezues – fq. 1

Struktura e kontrollit: Urdhëratkushtëzues

Objektivat:

Të studiohet rrjedha e kontrollit të programit dhe një formë e re urdhëri, urdhërikushtëzues, e cila i mundëson metodës të bëjë pyetje mbi vlerat e argumenteve tësaj ose të dhënave hyrëse. Mbështetur në përgjegjjet në pyetjet, metoda mund tëkontrollojë rrjedhën e llogaritjes në rrugën më të përshtatshme për këto vlera.

Të studiohen operatorët logjikë dhe të mësohet logjika prapa urdhëravekushtëzues.

Të shfrytëzohet dituria mbi rrjedhën e kontrollit për të zhvilluar ndërtimaplikacionesh në më tepër detaje; në veçanti, aplikacioni ndahet në trikomponente: model, view (pamje) dhe controller (kontrollues), ku view merrpërgjegjësinë për hyrjen dhe daljen e të dhënave, kontrolluesi për rrjedhën ekontrollit, kurse modeli merr përgjegjësinë për llogaritjet e përgjegjjeve.

Struktura e kontrollit: Urdherat kushtezues – fq. 2

Rrjedha e kontrollit dhe struktura ekontrollit

Rrjedhë e kontrollit: renditja në të cilën ekzekutohenurdhërat e një programi.

Strukturë e kontrollit: formë urdhëri e cila përcaktonrrjedhën e kontrollit.

Struktura e kontrollit: Urdherat kushtezues – fq. 3

Rrjedha e kontrollit dhe struktura ekontrollit – Vazhdim

Struktura e kontrollit e vargut të urdhërave

URDHËRI1;

URDHËRI2;

...

URDHËRIn;

përcakton rrjedhën e kontrollit të ekzekutimit të njëpasnjëshëm të urdhërave përkatëse.

Struktura e kontrollit e invokimit të metodës

PRANUESI. METODA( ARGUMENTET)

përcakton rrjedhën e kontrollit të pauzimit të ekzekutimit në vendin e invokimit ashtu qëurdhërat e emërtuara me METODAnë PRANUESItë ekzekutohen në vijim.

Struktura e kontrollit: Urdherat kushtezues – fq. 4

Struktura kushtëzuese e kontrollit

Urdhër kushtëzues („urdhër if “): strukturë kontrolli e cilashtron një pyetje (test) dhe në bazë të përgjegjjes zgjedhnjë rrjedhë të kontrollit.

Sintaksa e urdhërit kushtëzues:if ( TESTI ){ URDHËRAT1}else { URDHËRAT2}

Semantika: në qoftë se rezultati i testit është true ,atëherë ekzekutohet then-krahu; në qoftë se rezultati itestit është false , atëherë ekzekutohet else-krahu.

Struktura e kontrollit: Urdherat kushtezues – fq. 5

Struktura kushtëzuese 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 kushtëzuese e kontrollit –Vazhdim

TESTI ?

URDHËRAT1 URDHËRAT2

true false

Figura 1. Skema e rrjedhës së kontrollit të përcaktuar nga urdhërikushtëzues

Struktura e kontrollit: Urdherat kushtezues – fq. 7

Struktura kushtëzuese e kontrollit –Vazhdim

Ndonjëherë, kur dëshirohet të specifikohet vetëmthen-krahu, urdhëri kushtëzues shkruhet në formën

if ( TESTI ){ URDHËRAT}

e cila është shkurtesë për

if ( TESTI ) { URDHËRAT} else { }

Struktura e kontrollit: Urdherat kushtezues – fq. 8

Struktura kushtëzuese e kontrollit –Vazhdim

Algoritmi i një aplikacioni i cili konverton orët në sekonda:

1. Lexo nga shfrytëzuesi (si hyrje) një numër të plotë, i ciliparaqet sasinë e orëve.

2. Në qoftë se numri i plotë është jonegativ, atëherë ktheorët në sekonda. Përndryshe, numri i plotë nuk ështëjonegativ, prandaj afisho një mesazh gabimi.

Struktura e kontrollit: Urdherat kushtezues – fq. 9

Struktura kushtëzuese e kontrollit –Vazhdim

import javax.swing. * ;

/ ** Konverton orët në sekonda.

* Input: numër 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 orëve")).intValu e();

Struktura e kontrollit: Urdherat kushtezues – fq. 10

Struktura kushtëzuese 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

Urdhërat kushtëzues të vendosurpërbrenda

Urdhëra kushtëzues mund të vendosen përbrendandonjërit nga krahët e një urdhëri kushtëzues tjetër, për tëkoduar situata kur ekzistojnë pyetje të shumëfishta për t’utestuar.

Struktura e kontrollit: Urdherat kushtezues – fq. 12

Urdhërat kushtëzues të vendosurpërbrenda – Vazhdim

Algoritmi për një version më të avansuar të MakeChange:

1. Lexo eurot si një numër të plotë.

2. Në qoftë se eurot janë negativë, atëherë gjenero një mesazh gabimi. Përndryshe,eurot janë jonegativë:

(a) Lexo centët, numër i plotë.

(b) Në qoftë se centët janë negativë, atëherë gjenero një mesazh gabimi.Përndryshe, centët janë jonegativë:i. Në qoftë se centët janë më të mëdhenj se 99, atëherë gjenero një mesazh

gabimi. Përndryshe, centët janë në intrvalin 0. . . 99:A. Llogarit totalin e eurove dhe centëve.B. Nxjerr sasinë përkatëse të metelikëve gjysëmeurosh,

njëzetqindarkësh, dhjetëqindarkësh, pesëqindarkësh dhe qindarkësh.

Struktura e kontrollit: Urdherat kushtezues – fq. 13

Urdhërat kushtëzues të vendosurpërbrenda – Vazhdim

import javax.swing. * ;

/ ** Llogarit sasinë e metelikeve.

* Input: dy numra të dhënë në rreshtin komandues

* sasia e eurove dhe sasia e centëve

* Output: sasitë e metelikëve * /

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

Urdhërat kushtëzues të vendosurpërbrenda – 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

Urdhërat kushtëzues të vendosurpërbrenda – Vazhdim

else

{ int money = (euros * 100) + cents;

System.out.println("Gjysma = " + (money / 50));

money = money % 50;

System.out.println("Njëzetqindarka = " + (money / 20));

money = money % 20;

System.out.println("Dhjetëqindarka = " + (money / 10));

money = money % 10;

System.out.println("Pesëqindarka = " + (money / 5));

money = money % 5;

System.out.println("Qindarka = " + money);

}

}

}

}

}

Struktura e kontrollit: Urdherat kushtezues – fq. 16

Urdhërat kushtëzues të vendosurpërbrenda – Vazhdim

lexo eurot;euro negative?

gabimlexo centët;cent negativë?

gabim cents > 99 ?

gabimtotal të holla;llogarit metelikët

Figura 2. Skema e rrjedhës së kontrollit

Struktura e kontrollit: Urdherat kushtezues – fq. 17

Urdhërat kushtëzues të vendosurpërbrenda – Vazhdim

import javax.swing. * ;

/ ** Llogarit sasinë e metelikeve

* Input: dy numra të dhënë në rreshtin komandues

* sasia e eurove dhe sasia e centëve

* Output: sasitë e metelikëve * /

public class MakeChange4

{ public static void main (String[] args)

{ boolean ok = true; // memoron korrektësinë e të dhënave hyrë se

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 korrektësinë

}

Struktura e kontrollit: Urdherat kushtezues – fq. 18

Urdhërat kushtëzues të vendosurpërbrenda – Vazhdim

if ( ok ) // eurot janë në rregull, shqyrto centët

{ 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

Urdhërat kushtëzues të vendosurpërbrenda – Vazhdim

if ( ok ) // eurot dhe centët janë në rregull,

// llogarit përgjegjjen.

{ int money = (euros * 100) + cents;

System.out.println("Gjysma = " + (money / 50));

money = money % 50;

System.out.println("Njëzetqindarka = " + (money / 20));

money = money % 20;

System.out.println("Dhjetëqindarka = " + (money / 10));

money = money % 10;

System.out.println("Pesëqindarka = " + (money / 5));

money = money % 5;

System.out.println("Qindarka = " + money);

}

}

}

Struktura e kontrollit: Urdherat kushtezues – fq. 20

Operatorët logjikë

import javax.swing. * ;

/ ** Llogarit sasinë e metelikeve

* Input: dy numra të dhënë në rreshtin komandues

* sasia e eurove dhe sasia e centëve

* Output: sasitë e metelikëve * /

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

Operatorët logjikë – Vazhdim

else

{ int money = (euros * 100) + cents;

System.out.println("Gjysma = " + (money / 50));

money = money % 50;

System.out.println("Njëzetqindarka = " + (money / 20));

money = money % 20;

System.out.println("Dhjetëqindarka = " + (money / 10));

money = money % 10;

System.out.println("Pesëqindarka = " + (money / 5));

money = money % 5;

System.out.println("Qindarka = " + money);

}

}

}

Struktura e kontrollit: Urdherat kushtezues – fq. 22

Operatorët logjikë – Vazhdim

Operator logjik: operator i cili mundëson të shkruhen dykrahasime në një shprehje të tipit boolean .

Operatori Semantika

SH1 && SH2

Konjuksioni „dhe“:

true && true => true

true && false => false

false && SH2 => false

SH1 || SH2

Disjunksioni „ose“:

false || false => false

false || true => true

true || SH2 => true

! SH

Negacioni „jo“:

!true => false

!false => true

Tabela 1. Operatorët logjikë Struktura e kontrollit: Urdherat kushtezues – fq. 23

Operatorët logjikë – Vazhdim

Semantika e urdhërave logjikë:

(minutes >= 0) && (minutes < 60)=> false && (minutes < 60)=> false

(cents < 0) || (cents > 99)=> true || (cents > 99)=> true

Struktura e kontrollit: Urdherat kushtezues – fq. 24

Operatorët logjikë – Vazhdim

Operatorët logjikë kanë precedencë më të ulët sesaoperatorët 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 urdhërave kushtëzues

Dy zbatimet kryesore të urdhërave kushtëzues janë:

për t’i mundësuar metodës të veprojë bazuar në vleratë dhënash dhe parametrash;

për të paisur metodën për mbrojtje nga të dhëna dheparametra aktualë të pakuptimë.

Struktura e kontrollit: Urdherat kushtezues – fq. 26

Zbatimi i urdhërave kushtëzues –Vazhdim

/ ** Konverton kohën 12 orëshe në 24 orëshe.

* @param hour - koha 12 orëshe në orë

* @param minute - koha në minuta

* @param am - boolean: true për mëngjes, false për pasdite

* @return koha 24 orëshe, e formatizuar si string

* /

public String twentyfourHourClock(int hour, int minute, b oolean 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 urdhërave kushtëzues –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 rrjedhës së kontrollit

Përjashtim (exception): gabim i cili ndodh gjatë ekzekutimittë një programi. Zakonisht, përjashtimi ndalon programin(themi se është hedhur një përjashtim).

Hedhja eksplicite e një përjashtimi mund të bëhet me anëtë strukturës kontrolluese:

throw new RuntimeException( MESAZHI);

ku MESAZHIështë një string.

Struktura e kontrollit: Urdherat kushtezues – fq. 29

Ndryshimi i rrjedhës së kontrollit –Vazhdim

/ ** hourToSecond konverton orët në sekonda

* @param hours - orët

* @return ekuvalenti në sekonda * /

public int hourToSecond(int hours)

{ int seconds = 0;

if ( hours < 0 )

{ String error = "Gabim: orët " + 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 rrjedhës së kontrollit –Vazhdim

Urdhëri return shkakton që rrjedha e kontrollit të kthehetmenjëherë në vendin e invokimit të metodës.

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

Urdhëri switch

Në disa raste, urdhëri switch është një alternativë përurdhërat if-else të vendosur përbrenda.

Sintaksa:switch ( SHPREHJA)

{ case VLERA1 : { URDHËRAT1;

break;

}

case VLERA2 : { URDHËRAT2;

break;

}

...

case VLERAn : { URDHËRATn;

break;

}

default : { URDHËRATn+1; }

}Struktura e kontrollit: Urdherat kushtezues – fq. 32

Urdhëri switch – Vazhdim

Semantika:

1. Llogaritet SHPREHJAnë vlerën e saj, të themi, v .

2. Në qoftë se ndonjë nga VLERAkështë e barabartëme v , atëherë ekzekutohen urdhërat përkatëseURDHËRATk; në qoftë se asnjë nga VLERAknuk ështëe barabartë me v , atëherë ekzekutohen urdhëratURDHËRATn+1;

Struktura e kontrollit: Urdherat kushtezues – fq. 33

Urdhëri 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 përgjegjësinë për „modelimin“ e problemit dhe „kompjutimin“ epergjegjjeve të tij.

Komponenta view merr përgjegjësinë për bartjen e të dhënave hyrëse dhe dalëse.

Komponenta kontrollues merr përgjegjësinë për rrjedhën e kontrollit të aplikacionit,d.m.th. përcakton renditjen e kryerjes së kompjutimit.

Struktura e kontrollit: Urdherat kushtezues – fq. 35

Komponentet model dhe kontrollues– Vazhdim

Arsyet kryesore për zbatimin e MVC arkitekturës:

1. Klasët të cilat i gjenerojnë objektet mund tërishfrytëzohen.

2. Komponentet e organizojnë një aplikacion në pjesëmadhësish të menagjueshme me detyra specifike.Pjesët janë të organizuara në një arkitekturë standardedhe mund të shkruhen dhe testohen veç e veç.

3. Komponentet janë të izoluara, kështu që modifikimi injërës pjesë nuk kërkon rishkrimin edhe të pjesëvetjera.

Struktura e kontrollit: Urdherat kushtezues – fq. 36

Komponentet model dhe kontrollues– Vazhdim

Në një situatë ideale, ndërtimi i një aplikacioni do tëkonsistonte nga

zgjedhja e klasëve tanimë të shkruara, ndoshta paksatë zgjeruara, për gjenerimin e input-output-views;

zgjedhja një klase tanimë të shkruar, ndoshta paksa tëzgjeruar, për gjenerimin e modelit;

shkruarja e një klase të re për gjenerimin ekontrolluesit i cili lidh së bashku pjesët 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 përgjegjjet e tij.

Atribut: variabël fushe private përbrenda një klase modeli.Fusha përmban informata mbi „gjendjen e brendshme“ tëmodelit.

Struktura e kontrollit: Urdherat kushtezues – fq. 38

Case study: menagjer kontoshbankiere

Ndërtojmë një menagjer kontoje bankiere i cili për hyrjet,p.sh.,

Komanda (D,T,M): d 50.50Komanda (D,T,M): T 30.33Komanda (D,T,M): M

afishon në dritare grafike raportet mbi transakcionet dhegjendjet 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 dhënë në konton;kthen true për sukses dhe false

për mossukses

boolean withdraw(int amount) tërheq sasinë e dhënë nga kontoja;kthen true për sukses dhe false

për mossukses

int getBalance() kthen balansin e kontos

Tabela 2. Interfejsi i klasës 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 për deponim

* @return true nëse tërheqja e suksesshme, false përndryshe * /

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

/ ** Tërheq të holla nga kontoja.

* @param amount - sasia për tërheqje

* @return true nëse tërheqja e suksesshme, false përndryshe * /

public boolean withdraw(int amount)

{ boolean result = false;

if ( amount < 0 )

{ JOptionPane.showMessageDialog(null,

"Gabim: tërheqja " + amount);

}

else if ( amount > balance )

{ JOptionPane.showMessageDialog(null,

"Gabim: tërheqja 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 vetëm raporton vlerafushash 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

char readCommand()

int readAmount()

BankWriter

showTransaction(String message,

int amount)

showTransaction(String message)

BankAccount

boolean deposit(int amount)

boolean withdraw(int amount)

int getBalance()

Figura 4. Arkitektura e AccountManager

Struktura e kontrollit: Urdherat kushtezues – fq. 46

View komponentet

BankReader lexon transakcionet nga shfry-tëzuesi

Metodat:

char readCommand(String message) lexon linjë të re komanduese; kthenkarakterin e parë të linjës

int readAmount() kthen vlerën numerike nga linja elexuar së fundi

Tabela 3. Interfejsi i klasës BankReader

Struktura e kontrollit: Urdherat kushtezues – fq. 47

View komponentet – Vazhdim

BankWriter shkruan transakcionet

Konstruktori:

BankWriter(String title,

BankAccount a)

inicializon shkruesin me titullin dhekonton e dhënë

Metodat:

showTransaction(String message,

int amount)

afishon transakcionin e dhënë mevlerën e dhënë

showTransaction(String message) afishon transakcionin e dhënë

Tabela 4. Interfejsi i klasës 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 për shfrytëzuesin

* @return karakterin e parë të komandës * /

public char readCommand(String message)

{ inputLine

= JOptionPane.showInputDialog(message).trim().toUppe rCase();

return inputLine.charAt(0);

}

Struktura e kontrollit: Urdherat kushtezues – fq. 49

View komponentet – Vazhdim

/ ** Kthen vlerën 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, textBaselin e);

g.drawString("Balanci vijues = "

+ unconvert(account.getBalance())

+ " E", textMargin, textBaseline + 20);

}

/ ** Reformaton centët 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 për procesimin e një transakcioni:

1. Lexo komandën.

2. Në qoftë se komanda është ’M’ , atëherë përfundoprocesimin.

3. Përndryshe:(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

tërheqjes, kryej tërheqjen dhe afisho transakcionin.(c) Përndryshe, komanda është jolegale, prandaj

ankohu.

Struktura e kontrollit: Urdherat kushtezues – fq. 55

Konstruktimi i kontrollerit – Vazhdim

/ ** Menagjon një konto.

* Input: një varg komandash të formës

* D ee.cc (deponim), T ee.cc (tërheqje), 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("Tërheqje", amount); }

else { writer.showTransaction("Tërheqje jovalide"); }

break;

}

default :

{ writer.showTransaction("Komandë jovalide " + command); }

}

this.processTransactions();

}

}

}

Struktura e kontrollit: Urdherat kushtezues – fq. 58

Konstruktimi i kontrollerit – Vazhdim

/ ** Starton aplikacionin për 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 dërgon mesazh për tëristartuar vetvehten.

Emër i mbingarkuar metode (overloaded): emër metode icili përdoret për të emërtuar dy metoda të ndryshme të sënjëjtës klasë. Objekti pranues i mesazhit shfrytëzon sasinëdhe tipin e të dhënave të parametrave aktualë për tëzgjedhur metodën përkatëse për ekzekutim.

Struktura e kontrollit: Urdherat kushtezues – fq. 60

Objekte të shumëfishta nga e njëjtaklasë

Modifikojmë menagjerin e kontove ashtu që të menagjojëdy konto të ndryshme në mënyrë simultane.

Hyrjet, p.sh.:

Komanda (P,S,D,T,M): PKomanda (P,S,D,T,M): d 50.50Komanda (P,S,D,T,M): sKomanda (P,S,D,T,M): D10.10Komanda (P,S,D,T,M): pKomanda (P,S,D,T,M): T 30.33Komanda (P,S,D,T,M): m

Struktura e kontrollit: Urdherat kushtezues – fq. 61

Objekte të shumëfishta nga e njëjtaklasë – Vazhdim

AccountManager

main(...)

AccountController

processTransactions()

BankReader

char readCommand()

int readAmount()

BankWriter

showTransaction(String message,

int amount)

showTransaction(String message)

BankAccount

boolean deposit(int amount)

boolean withdraw(int amount)

int getBalance()

1

2

1

2

Figura 5. Arkitektura e AccountManager

Struktura e kontrollit: Urdherat kushtezues – fq. 62

Objekte të shumëfishta nga e njëjtaklasë – Vazhdim

/ ** Menagjon dy konto.

* Input: një varg komandash të formës

* P (menagjo konton primare), S (menagjo konton sekondare)

* D ee.cc (deponim), T ee.cc (tërheqje), 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 sekond are

Struktura e kontrollit: Urdherat kushtezues – fq. 63

Objekte të shumëfishta nga e njëjtaklasë – 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ë shumëfishta nga e njëjtaklasë – 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ë shumëfishta nga e njëjtaklasë – 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ë shumëfishta nga e njëjtaklasë – Vazhdim

case ’T’ :

{ int amount = reader.readAmount();

boolean ok = account.withdraw(amount);

if ( ok )

{ writer.showTransaction("Tërheqje", amount); }

else { writer.showTransaction("Tërheqje jovalide"); }

break;

}

Struktura e kontrollit: Urdherat kushtezues – fq. 67

Objekte të shumëfishta nga e njëjtaklasë – 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ë shumëfishta nga e njëjtaklasë – Vazhdim

/ ** Starton aplikacionin për 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, primary Account,

secondaryWriter, secondaryAccount);

controller.processTransactions();

}

}

Struktura e kontrollit: Urdherat kushtezues – fq. 69

Testimi i metodave dhe klasave

Secila metodë e secilës klasë testohet veç e veç.

Kur metoda përmban urdhëra if secili krah i secilit urdhërekzekutohet së paku nga një test.

Në qoftë se klasa përmban fusha, atëherë testohet secilametodë e klasës 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; } // dumm y

public int getBalance() { return 0; } // dummy

}Struktura e kontrollit: Urdherat kushtezues – fq. 72