CodeGym /Blog Jawa /Acak /Napa Kita Perlu Antarmuka ing Jawa
John Squirrels
tingkat
San Francisco

Napa Kita Perlu Antarmuka ing Jawa

Diterbitake ing grup
Hi! Dina iki kita bakal ngomong babagan konsep penting ing Jawa: antarmuka. Tembung kasebut mbokmenawa wis akrab karo sampeyan. Contone, umume program komputer lan game duwe antarmuka. Ing pangertèn sing wiyar, antarmuka minangka jinis 'remote control' sing nyambungake rong pihak sing sesambungan. Conto prasaja antarmuka ing saben dinten yaiku remot kontrol TV. Iki nyambungake rong obyek - wong lan TV - lan nindakake tugas sing beda-beda: nguripake munggah utawa mudhun volume, ngalih saluran, lan nguripake utawa mateni TV. Siji pihak (wong) kudu ngakses antarmuka (pencet tombol ing remot kontrol) kanggo nimbulaké pihak liya kanggo nindakake tumindak. Contone, kanggo ngganti TV menyang saluran sabanjure. Apa maneh, pangguna ora t kudu ngerti carane TV diatur utawa carane proses ngganti saluran dileksanakake internal. Siji-sijine sing bisa diakses pangguna yaiku antarmuka. Tujuan utama yaiku kanggo entuk asil sing dikarepake. Apa hubungane karo pemrograman lan Jawa? Kabeh :) Nggawe antarmuka meh padha karo nggawe kelas biasa, nanging nggunakake tembung kasebutkelas , kita nuduhake antarmuka tembung . Ayo goleki antarmuka Jawa sing paling gampang, deleng cara kerjane, lan kenapa kita butuh:

public interface CanSwim {

     public void swim();
}
Kita wis nggawe antarmuka CanSwim . Iku dicokot kaya remot kontrol kita, nanging karo siji 'tombol': cara nglangi () . Nanging kepiye carane nggunakake pengontrol remot iki? Kanggo nindakake iki, kita kudu ngetrapake cara, yaiku tombol remot kontrol. Kanggo nggunakake antarmuka, sawetara kelas ing program kita kudu ngetrapake metode kasebut. Ayo nggawe kelas sing obyek 'bisa nglangi'. Contone, kelas Duck pas:

public class Duck implements CanSwim {

    public void swim() {
        System.out.println("Duck, swim!");
    }

    public static void main(String[] args) {

        Duck duck = new Duck();
        duck.swim();
    }
}
"Apa kita ndeleng kene? Kelas Duck wis 'digandhengake' karo antarmuka CanSwim dening ngleksanakake keyword. Sampeyan bisa uga kelingan sing kita digunakake mekanisme padha kanggo nggandhengake rong kelas liwat warisan, nanging ing kasus sing kita digunakake tembung ngluwihi. Kanggo kajelasan lengkap, kita bisa nerjemahake ' kelas umum Duck ngleksanakake CanSwim ' secara harfiah minangka: ' Kelas Duck umum ngleksanakake antarmuka CanSwim ' Iki tegese kelas gadhah antarmuka kudu ngleksanakake kabeh cara sawijining Cathetan: Duckkelas kita, kaya antarmuka CanSwim, wis swim()cara, lan ngandhut sawetara logika. Iki minangka syarat wajib. Yen kita mung nulispublic class Duck implements CanSwimtanpa nggawe swim()cara ing Duckkelas, compiler bakal menehi kita kesalahan: Bebek ora abstrak lan ora ngalahake cara abstrak nglangi () ing CanSwim Apa? Yagene iki kedadeyan? Yen nerangake kesalahan nggunakake conto TV, iku bakal kaya ngulungake wong remot kontrol TV karo tombol 'ngganti saluran' sing ora bisa ngganti saluran. Sampeyan bisa mencet tombol kaya sing dikarepake, nanging ora bisa. Kontrol remot ora ngganti saluran dhewe: mung ngirim sinyal menyang TV, sing nindakake proses ganti saluran sing rumit. Lan uga karo bebek kita: kudu ngerti carane nglangi supaya bisa diarani nggunakake antarmuka CanSwim. Yen ora ngerti carane, ingCanSwimantarmuka ora nyambung loro pihak - wong lan program. Wong kasebut ora bakal bisa nggunakake swim()cara kanggo nglangi Ducking program kasebut. Saiki sampeyan ngerti luwih cetha kanggo apa antarmuka. Antarmuka njlèntrèhaké prilaku sing kelas ngleksanakake antarmuka kudu duwe. 'Prilaku' minangka kumpulan metode. Yen kita pengin nggawe sawetara utusan, sing paling gampang yaiku nggawe antarmuka Messenger. Apa sing dibutuhake saben utusan? Ing tingkat dhasar, dheweke kudu bisa nampa lan ngirim pesen.

public interface Messenger{

     public void sendMessage();

     public void getMessage();
}
Saiki kita mung bisa nggawe kelas utusan sing ngetrapake antarmuka sing cocog. Compiler dhewe bakal 'meksa' kita ngleksanakake ing kelas kita. Telegram:

public class Telegram implements Messenger {

    public void sendMessage() {

        System.out.println("Sending a Telegram message!");
    }

     public void getMessage() {
         System.out.println("Receiving a Telegram message!");
     }
}
WhatsApp:

public class WhatsApp implements Messenger {

    public void sendMessage() {

        System.out.println("Sending a WhatsApp message!");
    }

     public void getMessage() {
         System.out.println("Reading a WhatsApp message!");
     }
}
Viber:

public class Viber implements Messenger {

    public void sendMessage() {

        System.out.println("Sending a Viber message!");
    }

     public void getMessage() {
         System.out.println("Receiving a Viber message!");
     }
}
Apa kaluwihan iki nyedhiyakake? Sing paling penting yaiku kopling longgar. Bayangake yen kita lagi ngrancang program sing bakal ngumpulake data klien. Kelas kasebut Clientmbutuhake lapangan kanggo nuduhake utusan tartamtu sing digunakake klien. Tanpa antarmuka, iki bakal katon aneh:

public class Client {

    private WhatsApp whatsApp;
    private Telegram telegram;
    private Viber viber;
}
Kita nggawe telung lapangan, nanging klien mung bisa duwe siji utusan. Kita mung ora ngerti sing endi. Dadi kita kudu nambah saben kemungkinan kanggo kelas supaya bisa komunikasi karo klien. Pranyata metu sing siji utawa loro bakal tansah null, tanggung unneeded dening program. Luwih becik nggunakake antarmuka kita tinimbang:

public class Client {

    private Messenger messenger;
}
Iki minangka conto kopling longgar! Tinimbang nemtokake kelas utusan tartamtu ing Clientkelas kasebut, kita mung nuduhake yen klien duwe utusan. Kang siji persis bakal ditemtokake nalika program mlaku. Nanging kenapa kita butuh antarmuka kanggo iki? Kenapa malah ditambahake ing basa kasebut? Iku pitakonan sing apik - lan pitakonan sing bener! Apa kita ora bisa entuk asil sing padha nggunakake warisan biasa? Kelas Messengerminangka wong tuwa, lan Viber, Telegram, lan WhatsAppminangka bocah. Pancen, iku bisa. Nanging ana siji snag. Kaya sing wis dingerteni, Jawa ora duwe warisan pirang-pirang. Nanging ana dhukungan kanggo macem-macem antarmuka. Kelas bisa ngetrapake akeh antarmuka sing dikarepake. Bayangake yen kita duwe Smartphonekelas sing duweApplapangan, sing nuduhake app sing diinstal ing smartphone.

public class Smartphone {

    private App app;
}
Mesthine, app lan messenger padha, nanging isih beda. Bisa uga ana versi seluler lan desktop saka utusan, nanging App khusus nggambarake aplikasi seluler. Mangkene kesepakatan - yen kita nggunakake warisan, kita ora bakal bisa nambah Telegramobyek menyang Smartphonekelas. Sawise kabeh, Telegramkelas ora bisa bebarengan warisan Applan Messenger! Lan kita wis nggawe warisan Messengerlan ditambahake menyang Clientkelas. Nanging Telegramkelas bisa gampang ngleksanakake loro antarmuka! Mulane, kita bisa menehi Clientkelas Telegramobyek minangka Messenger, lan kita bisa menehi menyang Smartphonekelas minangka App. Mangkene carane sampeyan nindakake:

public class Telegram implements Application, Messenger {

    // ...methods
}

public class Client {

    private Messenger messenger;

    public Client() {
        this.messenger = new Telegram();
    }
}


public class Smartphone {

    private Application application;

    public Smartphone() {
        this.application = new Telegram();
    }
}
Saiki kita nggunakake Telegramkelas sing dikarepake. Ing sawetara panggonan, tumindak minangka App. Ing panggonan liyane, iku tumindak minangka Messenger. Sampeyan mesthi wis ngerteni manawa metode antarmuka tansah 'kosong', yaiku ora ana implementasine. Alesan kanggo iki prasaja: antarmuka nggambarake prilaku, nanging ora ngleksanakake. 'Kabeh obyek sing ngleksanakake CanSwimantarmuka kudu bisa nglangi': iku kabeh sing antarmuka marang kita. Cara tartamtu sing nglangi iwak, bebek, lan jaran iku pitakonan kanggo Fish, Duck, lanHorsekelas, ora antarmuka. Kaya ngganti saluran minangka tugas kanggo TV. Remot mung menehi tombol kanggo iki. Nanging, tambahan menarik muncul ing Java 8 - cara standar. Contone, antarmuka sampeyan duwe 10 cara. 9 saka wong-wong mau duwe implementasine beda ing macem-macem kelas, nanging siji dileksanakake padha kanggo kabeh. Sadurunge, sadurunge Java 8, metode antarmuka ora ana implementasine: kompiler langsung menehi kesalahan. Saiki sampeyan bisa nindakake kaya iki:

public interface CanSwim {

   public default void swim() {
       System.out.println("Swim!");
   }

   public void eat();

   public void run();
}
Nggunakake defaulttembung kunci, kita wis nggawe cara antarmuka kanthi implementasi standar. Kita kudu nyedhiyakake implementasine dhewe kanggo rong cara liyane - eat()lan run()- ing kabeh kelas sing ngetrapake CanSwim. Kita ora perlu nindakake iki kanthi swim()cara: implementasine bakal padha ing saben kelas. Ngomong-ngomong, sampeyan wis nemokake antarmuka ing tugas kepungkur, sanajan sampeyan ora ngerti :) Iki conto sing jelas: Napa antarmuka dibutuhake ing Jawa - 2Sampeyan wis nggarap antarmuka Listlan Set! Luwih tepate, sampeyan wis kerjo karo implementasine — ArrayList, LinkedList, HashSet, etc. Diagram padha cetha menehi conto ngendi siji kelas ngleksanakake sawetara antarmuka ing wektu sing padha. Contone, LinkedListngleksanakake ListlanDeque(antrian pindho) antarmuka. Sampeyan wis kenal karo Mapantarmuka, utawa luwih, karo HashMapimplementasine. Miturut cara, diagram iki nggambarake fitur: antarmuka bisa warisan antarmuka liyane. Antarmuka SortedMapmarisi Map, nalika Dequemarisi Queue. Iki perlu yen sampeyan pengin nuduhake hubungan antarane antarmuka, ngendi siji antarmuka minangka versi lengkap liyane. Ayo nimbang conto karo Queueantarmuka. Kita durung mriksaQueues, nanging rada prasaja lan dianggo kaya antrian biasa, utawa baris, ing toko. Sampeyan mung bisa nambah item ing mburi antrian, lan mung bisa njupuk saka awal. Ing sawetara titik, pangembang mbutuhake versi antrian sing ditingkatake supaya bisa nambah lan njupuk item ing ujung loro. Dadi dheweke nggawe Dequeantarmuka, yaiku antrian kaping pindho. Wis kabeh cara saka antrian biasa. Sawise kabeh, iku wong tuwa saka antrian pindho, nanging uga nambah cara anyar.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION