You are on page 1of 17

Programimi i orientuar ne objekte

Klasa eshte nje strukture te dhenash qe permban te dhenat qe


karakterizojne vetite e objekteve te saj dhe metodat qe operojne me keto
te dhena.

Sipas OOP cdo gje eshte nje objekt dhe cdo objekt eshte pjese e nje klase.

Nje objekt eshte nje shembulltyre i nje klase ose instance e klases.

Ai trashegon veti nga klasa.

Koncepti i klases eshte shume i vlefshem per shkak te riperdorshmerise se


saj.

Per kete arsye ne perdorim objektet ne menyre qe te riperdorim klasa te


shkruara me pare.

Nje program mund te kete disa klasa. Vetem nje klase mund te jete public
ne nje aplikim.

Objektet kane disa veçori ose atribute qe ne java do te quhen fusha(fields)


ose variabla instance.

Pervec atributeve objektet kane metoda te shoqeruara me to, dhe çdo


objekt qe eshte pjese e nje klase zoteron te njejtat metoda. Psh per gjithe
objektet e klases Party do te perdoren metodat setDate() dhe setTime() te
cilat marrin si argumenta daten dhe oren e nje party te caktuar.

Ka edhe disa metoda te klases qe mund te kthejne vlere. Psh metoda


getDate() mund te perdoret nga te ftuarit per te marre daten e organizimit
te festes.

Klasat ne Java, koncepti dhe krijimi i tyre


- Klasat mund te krijohen per te kriuar objekte nga ato, ose mund te jene
nje aplikim me vete brenda te cilit krijohen objekte te klasave te tjera te
krijuara nga ne ose nga programues te tjere (class client).

Si krijohet koka (deklarimi) i nje klase:


1. modifikues hyrjeje

 public, protected, dhe private


 static (kufizon ne nje instance)
 final (ndalon modifikimin)

Deklarimi i klases

1. (niset me modifikuesin public protected, dhe private qe pasohet


nga static ose final)
2. fjala kyce class
3. emri i klases (duhet te jete identifikues i vlefshem)

4. {} brenda kllapave gjarperueshe deklarohen variablat instance dhe


metodat.

Deklarimi i variablave instance (fushave)

1. modifikues i fushave (field modifiers)

private, protected, public, (package)

Me i perdorshem eshte private (nivel i larte sigurie dmth asnje klase nuk
ka te drejte te aksesoje fushat e nje klase por vetem metodat e klases
aktuale.)

1. tipi
2. emri
3. ;

Krijimi i metodave instance brenda nje klase

Krijimi metodave instance brenda nje klase:

Klasa mund te permbaje shume metoda instance te cilat manipulojne


fushat e nje objekti.

Dy metoda shume te perdorshme ne OOP jane get dhe set.

get() - kthen vleren e nje fushe

set() - i vendosim nje vlere te re nje fushe


si ndertohen keto metoda:

get:

public tipi_fushes get_fusha()

return fusha;

// pra nuk ka argumenta dhe kthen vleren e fushes

set:

public void set_fusha( tipi_fushes arg)

fusha = arg;

// pra ka nje argument, nuk kthen vlere dhe i vendos fushes vleren e
argumentit qe e japim ne.
Organizimi i klasave
Shume klasa qe krijojme kane me shume se nje fushe te dhenash dhe dy
ose me shume metoda.

Rekomandohet qe fushat e te dhenave te renditen sipas nje rendi logjik ne


fillim te klases.

fushat e te dhenave te te njejtit tip mund te deklarohen ne nje instruksion


te vetem

Psh

private String emri, mbiemri;

Metodat instance mund te renditen ne rend te cfaredoshem.

Nuk eshte gjithmone e nevojshme qe te krijohen metodat get dhe set per
cdo anetar te dhenash, por vetem per ata qe nevojiten.

Perdorimi i komenteve ne fillim te cdo medode e ben programin me te


lexueshem.

// Shembull demostrues i krijimit te klases Punonjes me fusha : numri, emri ,


mbiemri, rroga dhe metodat get dhe set per cdo fushe.

public class Punonjes

private int numri;

private String emri;

private String mbiemri;

private double rroga;

public int getNumri()

return numri;
}

public void setNumri(int n)

numri = n;

public String getMbiemri()

return mbiemri;

public void setMbiemri(String mb)

{ mbiemri = mb; }

public String getEemri()

{ return emri; }

public void setEmri(String e)

{ emri = e; }

public double getRroga()

{ return rroga; }

public void setRroga(double r)

{ rroga=r; }

}
Deklarimi i objekteve.
Krijimi i nje objekti:

Deklarimi i klases nuk krijon ndonje objekt aktual.

Per te krijuar nje objekt te klases shkruajme:

emri_i_klases emri i objektit;

psh: Punonjes pun1;

Nga ky deklarim nuk eshte rezervuar vend ne memorje per objektin e


krijuar.

Per te rezervuar vend ne memorje per nje objekt perdoret operatori new:

emri_i objektit = new emri_i_klases();

psh : pun1 = new Punonjes();

shkurt te dy instruksionet e deklarimit dhe rezervimit te memorjes mund te


shkruhen ne nje instruksion te vetem:

Punonjes pun1 = new Punonjes();

pun1- emri i objektit

Punonjes()- metoda konstruktor e cila ben te mundur inicializimin e objektit


ne momentin e krijimit.

Thirrja e metodave instance nepermjet nje objekti:

emri_i objektit.emri_metodes()

Shembull. Metoda get():

System.out.println("Kodi i pun ="+pun1.getkodi());

Metoda get thirret brenda metodes println sepse ajo kthen vlere.

Vlera e saj mund t'i jepet nje variabli dhe te kryhen veprime te metejshme
me te.

int k = pun1.getkodi()+5;
Shembull. Metoda set():

pun1.setemri("Agim");

Metoda set thirret direkt sepse ajo nuk kthen vlere.

// Aplikimi qe teston klasen Punonjes te krijuar me lart.

public class Test_Punonjes


{
public static void main(String[] args)
{
Punonjes p = new Punonjes();
p.setEmri("Besi");
p.setRroga(500.50);
p.setNumri(20);
System.out.println("Punonjesi "+p.getEmri()+" ka kodin"+p.getNumri()+" dhe
rrogen "+p.getRroga());
}
}

Konstruktoret
Konstruktori eshte nje metode qe ben te mundur inicializimin e objektit,
duke i vendosur vlere fushave te tij.

Metoda konstruktor ka te njejtin emer me klasen .

Konstruktoret mund te marrin argumenta ose jo.

Nje klase mund te kete disa konstruktore te ngarkuar.

Zakonisht konstruktori krijohet ne fillim te klases, perpara se te ndertohen


metodat e tjera.

Shembull i ndertimit te nje konstruktori:

Punonjes()

emri = "Alda";

rroga = 200;

kodi = 15;
}

Deklarimi i objektit:

Punonjes p = new Punonjes(); i jep objektit p vlerat e siperme duke


mbivendosur vlerat default.

Shembull i konstruktorit me argumenta:

Punonjes (String e, double r, int k)

emri = e;

rroga = r;

kodi = k;

Deklarimi i objektit:

Punonjes p = new Punonjes("Genci",200,8);

Perdorimi i klasave si tipe te dhenash

Kur deklarojme objekte te klasave tona ne java, perdorim te njejten


menyre si kur deklarojme variabla te tipeve primitive si psh:

int a;

Pra ne fillim tipi e me pas emri i objektit.

Pra klasat mund te perdoren si tipe te dhenash te cilat i kemi krijuar vete
me perpara.

Shembull i perdorimit te klasave si tipe te dhenash.

Employee.java
public class Employee
{
private int empNum;
private String empLastName;
String empFirstName;
private double empSalary;
public int getEmpNum()
{
return empNum;
}
public void setEmpNum(int emp)
{
empNum = emp;
}
public String getEmpLastName()
{
return empLastName;
}
public void setEmpLastName(String name)
{
empLastName = name;
}
public String getEmpFirstName()
{
return empFirstName;
}
public void setEmpFirstName(String name)
{
empFirstName = name;
}
public double getEmpSalary()
{
return empSalary;
}
public void setEmpSalary(double sal)
{
empSalary = sal;
}

Perdorimi I metodave

import java.util.Scanner;

class MetodatQePerdorNjePunonjes

public static void main (String args[])

Punonjes myPunonjes;
myPunonjes = getPunonjesData();

displayPunonjes(myPunonjes);

public static Punonjes getPunonjesData()

Punonjes tempEmp = new Punonjes();

int id;

double sal;

Scanner input = new Scanner(System.in);

System.out.print("Enter Punonjes ID ");

id = input.nextInt();

tempEmp.setEmpNum(id);

System.out.print("Enter Punonjes salary ");

sal = input.nextDouble();

tempEmp.setEmpSalary(sal);

return tempEmp;

public static void displayPunonjes(Punonjes anEmp)

System.out.println("\nPunonjes #" + anEmp.getEmpNum() +

" Salary is " + anEmp.getEmpSalary());

}
Trashëgimia dhe Method Overriding

Principi i përgjithësimit dhe specializimit ka të bëjë me vendosjen e karakteristikave


të përgjithshme në pjesën e sipërme të hierarkisë dhe vendosjen e karakteristikave
specifike në klasat e poshtme të hierarkisë.

Të gjitha karakteristikat e klasave të sipërme automatikisht janë edhe karakteristika


të klasave poshtë tyre, kjo quhet trashëgimi.

Një klasë specifikon se karakteristikat e cilës klasë po trashëgon duke përdorur


fjalën kyçe si më poshtë,

class Student extends Person

ndërsa klasa bazë në ndërtimin e saj nuk specifikon asgjë për të treguar që është
klasë bazë sepse çdo klasë mund të jetë klasë bazë.

class Person{

private String emer, mbiemer;

private short mosha;

public String gjeneroIdPersonale(){........}

}
class Student extends Person{

private String dega, niveliStudimeve;

public void regjistroLenden(String lenda){.......}

Në këtë rast klasa Student trashëgon të gjitha atributet dhe metodat e klasës
Person.
Konstruktorët — çdo nënklasë mund të ketë konstruktorin e saj për inicializime
specifike por shpesh herë mund të përfshijë edhe sjelljen e klasës bazë. Kjo bëhet
duke përdorur fjalën kyçe super. Kur thërritet kostruktori i klasës bazë me super, ky
deklarim duhet te jetë i pari. Kur klasa bazë ka vetëm një konstruktor me parametra
atherë nënklasa duhet të thërras patjetër konstruktorin e klasës bazë. Nëse klasa
bazë ka konstruktor me dhe pa parametër dhe nënklasa nuk thërret super ateherë
do të thërritet automatikisht konstruktori paparametër i klasës bazë.

Klasat abstrakte — Disa klasa mund të mos jetë e nevojshme të inicializohen


ndonjëherë. Këto klasa, të quajtura abstrakte, janë të pa kompletuara dhe shërbejnë
vetëm për të grumbulluar karakteristikat e përbashkta të nënklasave të tyre. Pra
inicializimi (krijimi i objektev) i klasave abstrakte nuk është i lejuar. Nëse ne duhet të
përdorim një klasë abstrakte, duhet ta kompletojmë atë duke e trashëguar. Një klasë
quhet e kompletuar nëse ajo nuk përmban metoda abstrakte dhe i implementon të
gjitha metodat abstrakte të cilat i ka trashëguar nga klasa prind ose nga një ndërfaqe
që ka implementuar. Klasat abstrakte mund të kenë dhe metoda konkrete.

abstract class Person{

private String emer, mbiemer;

private short mosha;

public String gjeneroIdPersonale();

this – shënon instancën aktuale të klasës, përdoret për të aksesuar fieldet e klasës.
Normalisht nuk është e nevojshme por nëse në një metodë një argument ose
variabël lokale ka emer të njëjtë me një atribut të klasës përdorim this që të kapim
vlerën e atributit të instancës pasi normalisht ajo mbishkruhet nga parametri ose
variabli local i metodës.

Method overriding (mbishkrimi i metodave)

mbishkrimi i metoda mundëson specializimin apo ndryshimin e funksionimit të një


metode nga klasa bazë në një klasë fëmijë.

1.në method overriding argument list duhet të jetë e njëjtë si metoda që mbishkruhet

2.tipi i vlerës që kthen metoda duhet të jetë i njëjtë ose i trashëguar nga ai i metodës
kryesore (sub-type)

3.Niveli i aksesit nuk mund të jetë më kufizues se i medotës që mbishkruhet

4.Një metodë e deklaruar me fjalën kyçe final nuk mund të mbishkruhet


5.Një metodë e deklaruar si statike nuk mund të mbishkruhet po ri-deklarohet – pra
nuk ka pse ti bindet rregullave të mbishkrimit mësipër

6.Nëse një metodë nuk trashegohet (deklaruar si private) mbishkrimi ska kuptim

7.Konstruktorët nuk mund të mbishkruhen

public class ExchangeStudent extends Student{

private String prefiks ="EX";

public String gjeneroIdPersonale(){

return prefiks + super.gjeneroIdPersonale;

Enkapsulimi

Përfshirja e fieldeve( attribute dhe metoda) në një klasë dhe “fshehja” e funksionimit
të brendshëm të objektit.

Në këtë mënyrë objekti funksionon si një “kuti e zezë” ku një programist tjetër që
përdor objektin nuk ka pse të dijë mënyrën e brendshme të funksionimit të objektit.

Polimorfizmi

Vjen nga fjala në greqisht “shumë forma”. Ai përshkruan vetinë e disa gjuhëve të
programimit të cilat kanë aftesinë të interpretojnë të njëjtën fjalë kyçe në mënyra të
ndryshme në varësi të kontekstit. Java mundëson dy tipe të polimorfizmit:

–statike (compile time) , method overloading

Aftësia që të egzekutohet një metodë tjetër në vartësi të parametrave të kaluar asaj


gjatë thirrjes. Ku return type dhe access level duhet të jenë të njëjtë ndërsa
argumentat mund të jenë të ndryshëm.

–dinamike (run time)

Quhet runtime pasi vetëm gjatë egzekutimit përcaktohet se cila metodë egzekutohet
në varësi të tipit të objektit.

Ndërfaqet – Interfaces
Një ndërfaqe është një koleksion metodash abstrakte. Një klasë që implementon një
ndërfaqe duhet të implementoj të gjitha metodat që trashëgon. Ndërfaqja nuk është
klasë sepse klasa specifikon atribute dhe metoda ndërsa ndërfaqja vetëm metodat të
cilat klasa i implemeton. Klasa duhet të implementojë të gjitha metodat nga
ndërfaqet që implementon përveçse në rastin kur kjo klasë përcaktohet si abstrakte.
Në qoftë se një klasë implementon një ndërfaqe metodat e klasës duhet të
specifikojnë të njëjtin tip të vlerës së kthyer, sikurse në ndërfaqe, dhe parametrat që
merr secila metodë duhet të jenë të njejta me ato të ndërfaqes. Një klasë mund të
implementojë më shumë se një ndërfaqe.

Ngjashmëri me klasat

 Përmban metoda (vetëm kokën)


 Shkruhet në file .java
 kompilohet në bytecode në file .class
 ato përfshihen në paketa

Ndryshimet nga klasat

 Nuk mund të inicializojmë një interface


 nuk përmban konstruktorë
 të gjitha metodat në një ndërfaqe janë abstrakte
 të gjitha field-et që specifikon janë static dhe final
 ndërfaqa nuk trashëgohet por implementohet
 një ndërfaqe mund të trashegojë shumë ndërfaqe të tjera.

public interface LlogaritNoten {

public int llogaritNoten(int piket);

public double llogaritNotenMesataren(int [] nota, int n);

public class Student implements LlogaritNoten {

@Override

public int llogaritNoten(int piket) {

if (piket < 41 && piket >= 0)

piket=4;

else if (piket <51)

piket=5;
else if (piket <61)

piket=6;

else if (piket<71)

piket=7;

else if (piket<81)

piket=8;

else if (piket<91)

piket=9;

else if(piket<=100)

piket=10;

return piket;

@Override

public double llogaritNotenMesataren(int[] nota, int n) {

double shuma = 0;

double mesatarja;

for (int i=0;i<n;i++){

shuma= shuma + nota[i];

mesatarja = shuma/n;

return mesatarja;

public class Kafshe_shtepiake {


int mosha;
double pesha;
String ngjyra;
String rraca;

public static void vendosMosha(int mosha)


{
System.out.println("Mosha eshte " + mosha + " vjeç");
}

public static void vendosNgjyra (String ngjyra)


{
System.out.println("Ngjyra ime eshte " + ngjyra);
}

public static void vendosPesha(double pesha)


{
System.out.println("Pesha eshte " + pesha + " kg");
}

public class Kujdestari {


public static void main(String[] args) {

// Metoda kryesore - krijim objektesh

Macja Pisoke = new Macja();


Pisoke.vendosNgjyra("e bardhe");
Pisoke.vendosMosha(2);
Pisoke.vendosPesha(4.8);
Pisoke.komunikimi();

Qeni Balo = new Qeni();


Qeni.vendosNgjyra("larush");
Qeni.vendosMosha(3);
Qeni.vendosPesha(18.8);
Qeni.vendosRrace("Pitbull");
Qeni.komunikimi();
}
}

public class Macja extends Kafshe_shtepiake {

public void komunikimi ()


{
System.out.println("Po leve nga Macja - Minj do gjuash... ");
}

}
public class Qeni extends Kafshe_shtepiake {

public static void vendosRrace (String rraca)


{
System.out.println("Rraca ime eshte " + rraca);
}

public static void komunikimi ()


{
System.out.println("Ju gjeti si qente e lagjes - Po lehu
njeri, lehin te gjithe... ");
}

You might also like