JavaRush /Blog Jawa /Random-JV /Polimorfisme ing basa Jawa

Polimorfisme ing basa Jawa

Diterbitake ing grup
Pitakonan babagan OOP minangka bagean integral saka wawancara teknis kanggo posisi pangembang Java ing perusahaan IT. Ing artikel iki kita bakal ngomong babagan salah sawijining prinsip OOP - polimorfisme. Kita bakal fokus ing aspek sing asring ditakoni sajrone wawancara, lan uga menehi conto cilik kanggo gamblang.

Apa polimorfisme?

Polimorfisme minangka kemampuan program kanggo nggunakake obyek kanthi antarmuka sing padha tanpa informasi babagan jinis tartamtu saka obyek iki. Yen sampeyan njawab pitakonan apa polimorfisme kanthi cara iki, sampeyan bakal dijaluk nerangake apa sing sampeyan maksud. Sawise maneh, tanpa takon akeh pitakonan tambahan, sijine kabeh supaya interviewer.

Polimorfisme ing basa Jawa nalika wawancara - 1
Kita bisa miwiti kanthi kasunyatan manawa pendekatan OOP melu mbangun program Jawa adhedhasar interaksi obyek sing adhedhasar kelas. Kelas minangka gambar sing wis ditulis (template) miturut obyek ing program sing bakal digawe. Kajaba iku, kelas mesthi duwe jinis tartamtu, sing, kanthi gaya pemrograman sing apik, "nyritakake" tujuane kanthi jenenge. Salajengipun, saged dipunmangertosi bilih awit Jawa minangka basa ingkang diketik kanthi kuat, kode program tansah kedah nunjukaken jinis obyek nalika mratelakaken variabel. Tambah iki yen ngetik ketat nambah safety kode lan linuwih program lan ngijini sampeyan kanggo nyegah kesalahan incompatibility jinis (contone, nyoba kanggo dibagi senar dening nomer) ing tataran kompilasi. Mesthine, kompiler kudu "ngerti" jinis sing diumumake - iki bisa dadi kelas saka JDK utawa sing digawe dhewe. Wigati dimangerteni kanggo wawancara yen nalika nggarap kode program, kita bisa nggunakake ora mung obyek saka jinis sing ditugasake nalika ngumumake, nanging uga turunane. Iki minangka titik penting: kita bisa nganggep akeh jinis kaya mung siji (anggere jinis kasebut asale saka jinis dhasar). Iki uga tegese, sawise ngumumake variabel saka jinis superclass, kita bisa nemtokake nilai salah sawijining turunane. Pewawancara bakal seneng yen sampeyan menehi conto. Pilih sawetara obyek sing bisa umum (basa) kanggo klompok obyek lan oleh warisan saperangan saka kelas saka. Kelas dhasar:
public class Dancer {
    private String name;
    private int age;

    public Dancer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void dance() {
        System.out.println(toString() + "I dance like everyone else.");
    }

    @Override
    public String toString() {
        return "Я " + name + ", to me " + age + " years. " ;
    }
}
Ing turunan, ganti metode kelas dasar:
public class ElectricBoogieDancer extends Dancer {
    public ElectricBoogieDancer(String name, int age) {
        super(name, age);
    }
// overriding the base class method
    @Override
    public void dance() {
        System.out.println( toString() + "I dance electric boogie!");
    }
}

public class BreakDankDancer extends Dancer{

    public BreakDankDancer(String name, int age) {
        super(name, age);
    }
// overriding the base class method
    @Override
    public void dance(){
        System.out.println(toString() + "I'm breakdancing!");
    }
}
Conto polimorfisme ing Jawa lan panggunaan obyek ing program:
public class Main {

    public static void main(String[] args) {
        Dancer dancer = new Dancer("Anton", 18);

        Dancer breakDanceDancer = new BreakDankDancer("Alexei", 19);// upcast to base type
        Dancer electricBoogieDancer = new ElectricBoogieDancer("Igor", 20); // upcast to base type

        List<Dancer> discotheque = Arrays.asList(dancer, breakDanceDancer, electricBoogieDancer);
        for (Dancer d : discotheque) {
            d.dance();// polymorphic method call
        }
    }
}
mainTampilake ing kode metode apa sing ana ing baris:
Dancer breakDanceDancer = new BreakDankDancer("Alexei", 19);
Dancer electricBoogieDancer = new ElectricBoogieDancer("Igor", 20);
Kita ngumumake variabel jinis superclass lan menehi nilai salah sawijining keturunan. Paling kamungkinan, sampeyan bakal ditakoni kok compiler ora bakal sambat babagan mismatch antarane jinis diumumake ing sisih kiwa lan tengen tandha assignment, amarga Jawa wis kenceng ngetik. Nerangake yen konversi jinis munggah bisa digunakake ing kene - referensi kanggo obyek diinterpretasikake minangka referensi kanggo kelas dhasar. Menapa malih, kompiler, nalika nemoni konstruksi kasebut ing kode kasebut, nindakake iki kanthi otomatis lan implisit. Adhedhasar kode conto, bisa ditampilake sing jinis kelas diumumake ing sisih kiwa tandha assignment Dancerwis sawetara wangun (jinis) ngumumaké ing sisih tengen BreakDankDancer, ElectricBoogieDancer. Saben formulir bisa duwe prilaku unik dhewe kanggo fungsi umum sing ditetepake ing metode superclass dance. Yaiku, metode sing diumumake ing superclass bisa ditindakake kanthi beda ing turunane. Ing kasus iki, kita dealing karo cara overriding, lan iki persis apa nggawe macem-macem formulir (prilaku). Sampeyan bisa ndeleng iki kanthi mbukak kode cara utama kanggo eksekusi: Program output Aku Anton, Aku 18 taun. Aku nari kaya wong liya. Aku Alexey, aku 19 taun. Aku breakdance! Aku Igor, umurku 20 taun. Aku nari boogie listrik! Yen kita ora nggunakake overriding ing turunan, banjur kita ora bakal beda prilaku. BreakDankDancerContone, yen kita ElectricBoogieDancermenehi komentar cara kanggo kelas kita dance, output program bakal kaya mangkene: Aku Anton, umurku 18 taun. Aku nari kaya wong liya. Aku Alexey, aku 19 taun. Aku nari kaya wong liya. Aku Igor, umurku 20 taun. Aku nari kaya wong liya. lan iki tegese ora ana gunane nggawe BreakDankDancerkelas anyar ElectricBoogieDancer. Apa, persis, prinsip polimorfisme Jawa? Ngendi didhelikake nggunakake obyek ing program tanpa ngerti jinis tartamtu? Ing conto kita, iki minangka cara nelpon d.dance()ing obyek dsaka jinis Dancer. Polymorphism Java tegese program ora perlu ngerti apa jinis obyek BreakDankDancerutawa obyek ElectricBoogieDancer. Ingkang utama inggih menika turunan saking kelas Dancer. Lan yen kita ngomong babagan turunan, kudu dielingake yen pusaka ing Jawa ora mung extends, nanging uga implements. Saiki iki wektu kanggo ngelingi yen Jawa ora ndhukung macem-macem warisan - saben jinis bisa duwe siji wong tuwa (superclass) lan nomer turunane tanpa watesan (subclass). Mulane, antarmuka digunakake kanggo nambah sawetara fungsi kanggo kelas. Antarmuka nyuda kopling obyek menyang wong tuwa dibandhingake karo warisan lan digunakake kanthi wiyar. Ing Jawa, antarmuka minangka jinis referensi, mula program bisa nyatakake jinis kasebut minangka variabel saka jinis antarmuka. Iki wektu sing apik kanggo menehi conto. Ayo nggawe antarmuka:
public interface Swim {
    void swim();
}
Kanggo gamblang, ayo njupuk obyek sing beda lan ora ana hubungane lan ngleksanakake antarmuka ing:
public class Human implements Swim {
    private String name;
    private int age;

    public Human(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public void swim() {
        System.out.println(toString()+"I swim with an inflatable ring.");
    }

    @Override
    public String toString() {
        return "Я " + name + ", to me " + age + " years. ";
    }

}

public class Fish implements Swim{
    private String name;

    public Fish(String name) {
        this.name = name;
    }

    @Override
    public void swim() {
        System.out.println("I'm a fish " + name + ". I swim by moving my fins.");

    }

public class UBoat implements Swim {

    private int speed;

    public UBoat(int speed) {
        this.speed = speed;
    }

    @Override
    public void swim() {
        System.out.println("The submarine is sailing, rotating the propellers, at a speed" + speed + " knots.");
    }
}
cara main:
public class Main {

    public static void main(String[] args) {
        Swim human = new Human("Anton", 6);
        Swim fish = new Fish("whale");
        Swim boat = new UBoat(25);

        List<Swim> swimmers = Arrays.asList(human, fish, boat);
        for (Swim s : swimmers) {
            s.swim();
        }
    }
}
Asil nglakokake metode polimorfik sing ditetepake ing antarmuka ngidini kita ndeleng bedane prilaku jinis sing ngetrapake antarmuka kasebut. Padha kalebu asil sing beda saka eksekusi metode swim. Sawise sinau conto kita, interviewer bisa takon apa, nalika nglakokaké kode sakamain
for (Swim s : swimmers) {
            s.swim();
}
Apa metode sing ditetepake ing kelas kasebut diarani obyek kita? Kepiye carane milih implementasine metode sing dikarepake nalika nglakokake program? Kanggo njawab pitakonan kasebut, kita kudu ngomong babagan ikatan pungkasan (dinamis). Kanthi naleni tegese nggawe sambungan antarane telpon metode lan implementasine tartamtu ing kelas. Ateges, kode nemtokake endi saka telung cara sing ditetepake ing kelas sing bakal dieksekusi. Java minangka standar nggunakake ikatan pungkasan (ing runtime tinimbang ing wektu kompilasi, kaya sing ditindakake ing binding awal). Iki tegese nalika ngumpulake kode
for (Swim s : swimmers) {
            s.swim();
}
compiler durung ngerti kang kelas kode saka Human, Fishutawa apa Uboatiku bakal kaleksanan ing swim. Iki bakal ditemtokake mung nalika program dieksekusi amarga mekanisme pengiriman dinamis - mriksa jinis obyek sajrone eksekusi program lan milih implementasine metode sing dikarepake kanggo jinis iki. Yen sampeyan takon carane iki dileksanakake, sampeyan bisa njawab sing nalika loading lan initializing obyek, JVM mbangun tabel ing memori, lan ing wong digandhengake variabel karo nilai, lan obyek karo cara. Kajaba iku, yen obyek diwarisake utawa ngleksanakake antarmuka, anane metode sing ditindhes ing kelas kasebut dicenthang dhisik. Yen ana, padha disambungake menyang jinis iki, yen ora, cara ditelusuri sing ditetepake ing kelas siji tingkat sing luwih dhuwur (ing tiyang sepah) lan ing munggah kanggo ROOT ing hirarki multi-tingkat. Ngomong babagan polimorfisme ing OOP lan implementasine ing kode program, kita nyathet yen praktik sing apik nggunakake deskripsi abstrak kanggo nemtokake kelas dhasar nggunakake kelas abstrak lan uga antarmuka. Praktek iki adhedhasar panggunaan abstraksi - ngisolasi prilaku lan sifat umum lan dilebokake ing kelas abstrak, utawa mung ngisolasi prilaku umum - supaya kita nggawe antarmuka. Mbangun lan ngrancang hierarki obyek adhedhasar antarmuka lan warisan kelas minangka prasyarat kanggo netepi prinsip polimorfisme OOP. Babagan masalah polimorfisme lan inovasi ing Jawa, kita bisa nyebutake yen nalika nggawe kelas abstrak lan antarmuka, diwiwiti karo Java 8, bisa nulis implementasine standar metode abstrak ing kelas dhasar nggunakake tembung kunci default. Tuladhane:
public interface Swim {
    default void swim() {
        System.out.println("Just floating");
    }
}
Kadhangkala dheweke bisa takon babagan syarat kanggo ngumumake metode ing kelas dhasar supaya prinsip polimorfisme ora dilanggar. Kabeh iku prasaja: cara iki ora kudu statis , pribadi lan final . Pribadi ndadekake cara mung kasedhiya ing kelas, lan sampeyan ora bisa ngalahake ing turunan. Statis ndadekake metode kasebut minangka properti kelas, dudu obyek, saengga metode superclass bakal diarani. Final bakal nggawe cara ora bisa diganti lan didhelikake saka ahli waris.

Apa polymorphism menehi kita ing Jawa?

Pitakonan babagan apa sing disedhiyakake saka polimorfisme bakal uga muncul. Ing kene sampeyan bisa mangsuli kanthi ringkes, tanpa mlebu ing suket:
  1. Ngidini sampeyan ngganti implementasine obyek. Iki adhedhasar tes.
  2. Nyedhiyakake expandability program - dadi luwih gampang kanggo nggawe dhasar kanggo mangsa. Nambahake jinis anyar adhedhasar sing wis ana minangka cara sing paling umum kanggo nggedhekake fungsi program sing ditulis nganggo gaya OOP.
  3. Ngidini sampeyan nggabungake obyek kanthi jinis utawa prilaku sing umum dadi siji koleksi utawa susunan lan ngapusi kanthi seragam (kaya ing conto kita, nggawe saben wong nari - cara danceutawa nglangi - cara swim).
  4. Keluwesan nalika nggawe jinis anyar: sampeyan bisa milih kanggo ngleksanakake cara saka wong tuwa utawa ngilangi ing bocah.

Tembung perpisahan kanggo lelungan

Prinsip polimorfisme minangka topik sing penting lan wiyar. Isine meh setengah saka OOP Jawa lan bagean apik saka dhasar basa. Sampeyan ora bakal bisa lolos karo netepake prinsip iki ing wawancara. Ora ngerti utawa salah pangerten babagan iki kemungkinan bakal mungkasi wawancara. Mulane, aja kesed mriksa kawruh sadurunge tes lan refresh yen perlu.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION