KodeGym/Blog Jawa/Acak/Konsep OOP ing Jawa
John Squirrels
tingkat
San Francisco

Konsep OOP ing Jawa

Diterbitake ing grup
Salah sawijining kekuwatan paling gedhe ing Jawa yaiku pemrograman berorientasi obyek (OOP). Mulane basa iki dadi populer lan cocok kanggo proyek apa wae. Apa Pemrograman Berorientasi Objek? Iku ora sulap, nanging bisa katon gaib yen sampeyan pancene njaluk ing. OOP babagan carane nggawe piranti lunak sampeyan. Iki minangka konsep, utawa luwih akeh konsep oop ing Jawa, sing ngidini sampeyan nggawe sawetara interaksi lan hubungan tartamtu ing antarane obyek Jawa supaya bisa ngembangake lan nggunakake piranti lunak kanthi efektif. Konsep OOP ing Jawa - 1OOP klasik kalebu 3 + 1 konsep utama. Ayo dadi miwiti karo klasik.

Obyek

Obyek Jawa uga obyek donya nyata nduweni rong ciri: kahanan lan prilaku.

Contone, obyek Manungsa nduweni status (jeneng, jenis kelamin, turu utawa ora ...) lan prilaku (sinau Jawa, mlaku-mlaku, ngomong ...). Sembarang obyek Jawa nyimpen negara ing lapangan lan mbabarake prilaku liwat metode.

Enkapsulasi

Enkapsulasi data ndhelikake data internal saka jagad njaba, lan ngakses mung liwat cara sing mbukak umum. Apa tegese? data apa? Sing ndhelikake saka sapa? Singidaken tegese mbatesi akses langsung menyang anggota data (kolom) kelas.

Cara kerjane ing Jawa:

  1. Lapangan digawe pribadi
  2. Saben lapangan ing kelas entuk rong cara khusus: getter lan setter. Metode getter ngasilake nilai lapangan. Cara setter ngidini sampeyan ngganti nilai lapangan kanthi cara ora langsung nanging diidinake.

Tuladha enkapsulasi ing kode Jawa:

public class Student {
private int age;
private String name;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

public class Test{
public static void main(String[] args) {
Student firstStudent = new Student();
firstStudent.setName("John");
// The name field is private, so you can no longer do this:  firstStudent.name = "John";
}
}

Napa sampeyan kudu nggunakake enkapsulasi?

Alesan utama yaiku supaya luwih gampang ngganti kode sampeyan. Mbayangno sampeyan duwe aplikasi kanggo sekolah hoki lan ana kelas HockeyStudent karo rong lapangan sing nyimpen jeneng lan umur siswa nalika dheweke ndhaptar ing sekolah. Kaya iki:
public class HockeyStudent {
public String name;
public  int ageOfEnrollment;
}
Bidang ageOfEnrollment umum, ora ana getter utawa setter… Kelas iki digunakake dening akeh kelas liyane, lan kabeh ok nganti sawetara pangembang mutusake yen kolom int siji ora cukup. Sawetara pemain hoki ing kohort meh setaun luwih tuwa tinimbang kanca-kancane, mula luwih trep yen dibagi dadi rong klompok gumantung saka wulan lair. Dadi lapangan ageOfEnrollment kudu diganti dadi array int (int[][]) : nomer pisanan kanggo taun lengkap lan nomer loro kanggo sasi. Saiki sampeyan kudu refactor kabeh kode sing nggunakake kelas Student ! Nanging yen ageOfEnrollmentlapangan pribadi lan sampeyan duwe getter lan setter, banjur kabeh luwih gampang. Yen syarat kanggo nyetel umur mahasiswa diganti, mung nganyari logika ing setAgeOfEnrollment () cara setter lan kelas sampeyan bisa terus nggunakake Student tanpa masalah! Conto iki rada digawe, nanging muga-muga bisa nerangake kenapa nggunakake enkapsulasi minangka ide sing apik.

pusaka

Prinsip iki luwih gampang dingerteni sanajan tanpa pengalaman praktis. Aja mbaleni dhewe (GARING) bisa dadi motto kanggo konsep warisan. Warisan ngidini sampeyan nggawe kelas anak sing marisi kolom lan metode kelas induk tanpa nemtokake maneh. Mesthi, sampeyan bisa ngatasi lapangan lan metode kelas induk ing kelas anak, nanging ora perlu. Apa maneh, sampeyan bisa nambah status lan prilaku anyar ing kelas bocah. Kelas induk kadhangkala disebut superclass utawa kelas dasar, lan kelas anak dikenal minangka subclass. Tembung kunci ekstensif Jawa digunakake kanggo ngetrapake prinsip warisan ing kode.

Cara kerjane ing Jawa:

  1. Nggawe kelas induk.
  2. Nggawe kelas anak nggunakake tembung kunci ngluwihi .
  3. Ing konstruktor kelas Anak, gunakake metode super(parentField1, parentField2, ...) kanggo nyetel kolom wong tuwa.

Konstruktor minangka cara khusus sing digunakake kanggo miwiti obyek sing mentas digawe. Konstruktor nduweni jeneng sing padha karo jeneng kelas. Ana rong jinis konstruktor: standar (no-arg constructor) lan parameterized constructor. Kelas kudu paling sethithik siji konstruktor (wis konstruktor standar yen ora konstruktor liyane wis ditetepake) lan bisa duwe akeh.

Saben-saben sampeyan nggawe obyek anyar, sampeyan nelpon konstruktor sawijining. Ing conto ing ndhuwur, sampeyan nindakake iki ing baris iki:

Student firstStudent = new Student();

Sampeyan nggunakake tembung kunci anyar kanggo nelpon konstruktor standar kelas Student : tudent () .

Sawetara aturan:

  1. Siji kelas mung bisa duwe siji wong tuwa.
  2. Siji kelas wong tuwa bisa duwe akeh kelas anak.
  3. Kelas bocah bisa duwe kelas anak dhewe.

Tuladha pusaka ing aksara jawa

Ayo nggawe kelas Telpon .
public class Phone {
    int price;
    double weight;

// Constructor
public Phone(int price, double weight) {
        this.price = price;
        this.weight = weight;
    }

    void orderPhone(){
        System.out.println("Ordering phone...");
    }
}
Mesthine, ana macem-macem jinis telpon, mula ayo nggawe rong kelas bocah: siji kanggo telpon Android lan liyane kanggo iPhone. Banjur kita bakal nambah sawetara lapangan lan cara sing wong tuwa ora duwe. Lan kita bakal nggunakake super () kanggo nelpon konstruktor kanggo initialize lapangan sing kelas induk duwe.

Tuladha pusaka ing basa Jawa

public class Android extends Phone {

// Some new fields
String androidVersion;
int screenSize;

    String secretDeviceCode;

// Constructor
    public Android(int price, double weight, String androidVersion, int screenSize, String secretDeviceCode) {
        super(price, weight); // Android inherits Phone’s fields

        //this - reference to the current object
        //super - reference to the parent object

        this.androidVersion = androidVersion;
        this.screenSize = screenSize;
        this.secretDeviceCode = secretDeviceCode;
    }

	// New Android-specific method, does not exist in the Phone class
    void installNewAndroidVersion() {
        System.out.println("installNewAndroidVersion invoked...");

    }

}

public class IPhone extends Phone {

    boolean fingerPrint;

    public IPhone(int price, double weight, boolean fingerPrint) {
        super(price, weight);
        System.out.println("IPhone constructor was invoked...");
        this.fingerPrint = fingerPrint;
    }

    void deleteIPhoneFromDb() {
        System.out.println("deleteIPhoneFromDb invoked...");
    }

@Override // This is about polymorphism, see below
void orderPhone(){
        System.out.println("Ordering my new iPhone and deleting the old one...");
    }
}
Dadi, kanggo mbaleni: ing Jawa, warisan ngidini sampeyan ngluwihi kelas karo kelas anak sing marisi kolom lan metode kelas induk. Iki minangka cara sing apik kanggo entuk panggunaan maneh kode.

Polimorfisme

Polimorfisme minangka kemampuan obyek kanggo morph, njupuk macem-macem wujud utawa tumindak kanthi cara sing beda. Ing Jawa, polimorfisme biasane kedadeyan nalika referensi kelas induk digunakake kanggo nyebut obyek kelas anak.

Apa tegese lan cara kerjane ing Jawa:

Apa polimorfisme ing basa Jawa? Umumé, tegese sampeyan bisa nggunakake jeneng metode sing padha kanggo tujuan sing beda. Ana rong jinis polimorfisme ing basa Jawa: metode overriding (polimorfisme dinamis) lan overloading metode (polimorfisme statis).

Metode overriding

Sampeyan bisa ngilangi metode kelas induk ing kelas bocah, meksa supaya bisa digunakake kanthi cara sing beda. Ayo nggawe kelas induk Musician karo cara play () .

Tuladha polimorfisme ing kode Jawa

public class Musician {
    String name;
    int age;

    // Default constructor
    public Musician() {
    }

    // Parameterized constructor
    public Musician(String name, int age) {
        this.name = name;
        this.age = age;
    }

    void play() {
        System.out.println("I am playing my instrument...");
    }
}
Musisi sing beda nggunakake instrumen sing beda. Ayo nggawe rong kelas bocah: Pianis lan Biola . Thanks kanggo polymorphism, saben bakal nglakokaké versi dhewe saka play () cara. Nalika overriding, sampeyan bisa nggunakake @Override anotasi, nanging ora perlu.
public class Pianist extends Musician {

    String favoritePianoType;

    public Pianist(String name, int age, String favoritePianoType) {
        super(name, age);
        this.favoritePianoType = favoritePianoType;
    }


    @Override
void play(){
        System.out.println("I am playing the piano...");
    }
}
Pemain biola bisa dadi solois utawa anggota orkestra. Ayo dadi njupuk menyang wawasan nalika overriding kita muter () cara.
public class Violinist extends Musician {
    boolean isSoloist;

public Violinist(String name, int age, boolean isSoloist) {
            super(name, age);
            this.isSoloist = isSoloist;
        }


    @Override
void play(){
if (isSoloist)
        System.out.println("I am playing the violin solo...");
else
System.out.println("I am playing the violin in an orchestra...");

    }
}
Ayo nggawe kelas Demo , ing ngendi kita bakal nggawe telung obyek, siji conto saben kelas sing digawe sadurunge. Kita bakal weruh asil apa sing bakal ditindakake.
public class Demo {
  public static void main(String[] args) {
  Musician musician = new Musician();
  Violinist violinist = new Violinist("John", 32, true);
  Pianist pianist = new Pianist("Glen", 30, "Acoustic");

  System.out.println("Musician said:");
  musician.play();
  System.out.println("Violinist said:");
  violinist.play();
  System.out.println("Pianist said:");
  pianist.play();
    }
}
Punika ingkang kita pikantuk:
Musician said:
I am playing my instrument...
Violinist said:
I am playing the violin solo…
Pianist said:
I am playing the piano...
Saben pemain biola lan pianis minangka musisi, nanging ora saben musisi minangka biola utawa pianis. Tegese sampeyan bisa nggunakake cara muter musisi yen sampeyan ora perlu nggawe sing anyar. Utawa sampeyan bisa nelpon cara wong tuwa saka bocah nggunakake tembung kunci super . Ayo nglakoni ing kode Pianist:
public class Pianist extends Musician {

    String favoritePianoType;

    @Override
    void play(){
        super.play();
        System.out.println("I am playing the piano...");
    }
}
Saiki ayo nelpon metode utama () ing kelas Demo . Iki asile:
Musician said:
I am playing my instrument...
Violinist said:
I am playing the violin solo...
Pianist said:
I am playing my instrument...
I am playing the piano...

Metode overloading

Metode overloading tegese nggunakake macem-macem cara kanthi jeneng sing padha ing kelas sing padha. Padha kudu beda ing syarat-syarat nomer, urutan, utawa jinis paramèter. Upaminipun pianis saged main piano akustik lan piano listrik. Kanggo muter listrik, musisi butuh listrik. Ayo nggawe loro cara muter () beda . Pisanan tanpa paramèter, kanggo piano akustik, lan nomer loro kanthi parameter sing nuduhake manawa listrik kasedhiya.
public class Pianist extends Musician {

    String name;
    int age;
    String favoritePianoType;

    @Override
    void play(){
        super.play();
        System.out.println("I am playing the piano...");
    }
    void play(boolean isElectricity){
        if (isElectricity) {
            System.out.println("The electricity is on.");
            System.out.println("I am playing the piano...");
        }
        else System.out.println("I can't play this without electricity.");
    }
}
Miturut cara, sampeyan bisa nggunakake cara muter pisanan () ing cara muter kapindho (boolean) ing cara iki:
void play(boolean isElectricity){
        if (isElectricity) {
            System.out.println("The electricity is on.");
            play();
        }
        else System.out.println("I can't play this without electricity.");
    }
Ayo nambah sawetara baris menyang kelas Demo kanggo nuduhake kakehan kita:
public class Demo {
    public static void main(String[] args) {

        Musician musician = new Musician();
        Violinist violinist = new Violinist("John", 23, true);
        Pianist pianist = new Pianist("Glen", 30, "Acoustic");

        System.out.println("Musician said:");
        musician.play();
        System.out.println("Violinist said:");
        violinist.play();
        System.out.println("Pianist said:");
        pianist.play();
        System.out.println("The pianist will now try the electric piano:");
        pianist.play(true);
        System.out.println("The electricity has been shut off. Now when trying the electric piano, the pianist says:");
        pianist.play(false);
    }
}
Punika asilipun:
Musician said:
I am playing my instrument...
Violinist said:
I am playing the violin solo...
Pianist said:
I am playing my instrument...
I am playing the piano...
The pianist will now try the electric piano:
The electricity is on.
I am playing my instrument...
I am playing the piano...
The electricity has been shut off. Now when trying the electric piano, the pianist says:
I can't play this without electricity.
Jawa ngerti cara sing kudu digunakake adhedhasar paramèter lan jinis obyek. Iku polimorfisme.

abstraksi

Nalika kita nemtokake kelas, kita nyoba kanggo mbangun model soko. Contone, umpamane kita nulis video game sing diarani MyRacer kanthi mobil balap sing beda. Pamuter bisa milih salah siji saka wong-wong mau banjur nganyari mengko utawa tuku liyane. Dadi… Apa mobil? A mobil punika bab cantik rumit, nanging yen kita nyoba kanggo nggawe video game racing (minangka gantos kanggo simulator driving), kita ora perlu kanggo njlèntrèhaké kabeh ewu Gir lan gaskets ngandhut. Kita butuh model, kacepetan paling dhuwur, karakteristik manuver, rega, warna… Lan mungkin wis cukup. Iku model mobil kanggo game kita. Mengko ing MyRacer 2, Upaminipun kita arep kanggo nambah ban sing mengaruhi nangani ing dalan. Kene model beda, amarga kita nambah rincian liyane. ayo s nemtokake abstraksi data minangka proses ngenali mung karakteristik penting (utawa perlu) saka obyek lan nglirwakake rincian ora salaras. Ana macem-macem tingkat abstraksi. Contone, yen sampeyan penumpang ing bis, sampeyan kudu ngerti kaya apa bus sampeyan lan menyang ngendi, nanging sampeyan ora perlu ngerti carane nyopir. Yen sampeyan dadi sopir bis, sampeyan ora perlu ngerti carane nggawe bis anyar — sampeyan mung kudu ngerti carane nyopir. Nanging yen sampeyan minangka pabrikan bis, sampeyan kudu pindhah menyang tingkat abstraksi sing luwih murah, amarga rincian desain bis penting banget kanggo sampeyan. Muga-muga sampeyan ngerti maksudku. sampeyan kudu ngerti apa bus sampeyan katon lan menyang ngendi, nanging sampeyan ora perlu ngerti carane nyopir. Yen sampeyan dadi sopir bis, sampeyan ora perlu ngerti carane nggawe bis anyar — sampeyan mung kudu ngerti carane nyopir. Nanging yen sampeyan minangka pabrikan bis, sampeyan kudu pindhah menyang tingkat abstraksi sing luwih murah, amarga rincian desain bis penting banget kanggo sampeyan. Muga-muga sampeyan ngerti maksudku. sampeyan kudu ngerti apa bus sampeyan katon lan menyang ngendi, nanging sampeyan ora perlu ngerti carane nyopir. Yen sampeyan dadi sopir bis, sampeyan ora perlu ngerti carane nggawe bis anyar — sampeyan mung kudu ngerti carane nyopir. Nanging yen sampeyan minangka pabrikan bis, sampeyan kudu pindhah menyang tingkat abstraksi sing luwih murah, amarga rincian desain bis penting banget kanggo sampeyan. Muga-muga sampeyan ngerti maksudku.

Cara kerjane ing Jawa:

Ayo mbangun papat tingkat abstraksi ing Jawa, utawa luwih ing OOP — saka sing paling murah (paling spesifik) nganti sing paling dhuwur (paling abstrak).
  1. Tingkat abstraksi sing paling murah yaiku obyek tartamtu. Iki minangka entitas kanthi sakumpulan karakteristik sing kalebu ing kelas tartamtu. Wis nilai lapangan tartamtu

  2. Cithakan kanggo nggawe obyek yaiku kelas. Iki minangka katrangan babagan sakumpulan obyek kanthi sifat lan struktur internal sing padha.

  3. Kelas abstrak minangka gambaran abstrak babagan karakteristik sakumpulan kelas (iku minangka cithakan kanggo warisan dening kelas liyane). Nduwe tingkat abstraksi sing dhuwur, mula ora bisa nggawe obyek langsung saka kelas abstrak. Mung kelas anak saka kelas abstrak sing bisa digunakake kanggo nggawe obyek. Kelas abstrak bisa uga kalebu metode kanthi implementasine, nanging iki dudu syarat.

  4. Antarmuka minangka konstruk saka basa pamrograman Java sing mung ngemot metode umum abstrak lan kolom konstan statis (statis pungkasan). Ing tembung liyane, kelas abstrak utawa antarmuka ora bisa digunakake kanggo ngasilake obyek.

BTW, ing Jawa 8 utawa mengko, antarmuka bisa duwe ora mung cara abstrak lan konstanta, nanging uga standar lan cara statis. Ing Jawa, antarmuka nemtokake prilaku, nalika kelas abstrak digunakake kanggo nggawe hirarki. Siji antarmuka bisa dileksanakake dening mutiple kelas.

Tuladha antarmuka ing kode Jawa

interface Human {
	public void struggle();
	public void protect();
}

interface Vulcan {
	int angleOfPointyEars;
	public void turnOffEmotions(boolean isOn);
	public void telepathy();
}
Sampeyan bisa ngleksanakake luwih saka siji antarmuka
The Spock class implements Human and Vulcan {
public void struggle() {
System.out.println("I am struggling...");
}
	public void protect() {
System.out.println("You are under my protection!);
}
public void turnOffEmotions(boolean isOn){
If (isOn) {
System.out.println("I am turning off my emotions.");
isOn= !isOn;
}
}
	public void telepathy() {
System.out.println("Connecting to your brain...");
}

}
Kanggo siswa wiwitan, sing nyakup kabeh konsep utama pemrograman berorientasi obyek ing Jawa. Saliyane 4 prinsip OOP utama, Jawa uga nduweni asosiasi, agregasi, lan komposisi. Sampeyan bisa nelpon "prinsip OOP tambahan". Padha pantes artikel kapisah dhewe.
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar