JavaRush /Blog Jawa /Random-JV /Antarmuka ing Jawa

Antarmuka ing Jawa

Diterbitake ing grup
Hello! 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 saka urip saben dina yaiku remot kontrol TV. Iki nyambungake rong obyek, wong lan TV, lan nindakake tugas sing beda: munggah utawa mudhun volume, ngganti saluran, nguripake utawa mateni TV. Siji sisih (wong) kudu ngakses antarmuka (pencet tombol remot kontrol) kanggo sisih liyane kanggo nindakake tumindak. Contone, kanggo TV ngalih saluran menyang sabanjure. Ing kasus iki, pangguna ora perlu ngerti piranti TV lan carane proses ngganti saluran dileksanakake ing njero. Napa kita butuh antarmuka ing Jawa - 1Kabeh pangguna duwe akses menyang antarmuka . Tugas utama yaiku entuk asil sing dikarepake. Apa hubungane karo pemrograman lan Jawa? Langsung :) Nggawe antarmuka meh padha karo nggawe kelas biasa, mung tinimbang tembung classkita nemtokake tembung kasebut interface. Ayo goleki antarmuka Java sing paling gampang lan ngerteni cara kerjane lan apa sing dibutuhake:
public interface Swimmable  {

     public void swim();
}
Kita nggawe antarmuka Swimmablesing bisa nglangi . Iki kaya remot kontrol kita, sing nduweni siji "tombol": cara kasebut swim() "nglangi". Kepiye carane nggunakake " remote kontrol " iki? Kanggo maksud iki cara, i.e. tombol ing remot kontrol kita kudu dipun ginakaken. Kanggo nggunakake antarmuka, cara kasebut kudu ditindakake dening sawetara kelas program kita. Ayo gawe kelas sing obyeke cocog karo deskripsi "bisa nglangi." Contone, kelas bebek cocok Duck:
public class Duck implements Swimmable {

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

    public static void main(String[] args) {

        Duck duck = new Duck();
        duck.swim();
    }
}
Apa sing kita deleng ing kene? Kelas Duckdigandhengake karo antarmuka Swimmablenggunakake tembung kunci implements. Yen sampeyan ngelingi, kita nggunakake mekanisme sing padha kanggo nyambungake rong kelas ing warisan, mung ana tembung " ngluwihi ". " public class Duck implements Swimmable" bisa diterjemahake kanthi harfiah kanggo kajelasan: "kelas umum Duckngetrapake antarmuka Swimmable." Iki tegese kelas sing ana gandhengane karo antarmuka kudu ngetrapake kabeh cara. Wigati dicathet: ing kelas kita, Duckkaya ing antarmuka , Swimmableana metode swim(), lan ing njero ana sawetara logika. Iki minangka syarat wajib. Yen kita mung nulis " public class Duck implements Swimmable" lan ora nggawe cara swim()ing kelas Duck, compiler bakal menehi kesalahan: Bebek ora abstrak lan ora nglangi cara abstrak nglangi () ing Swimmable Apa iki kelakon? Yen kita nerangake kesalahan nggunakake conto TV, pranyata kita menehi wong remot kontrol karo tombol "ganti saluran" saka TV sing ora ngerti carane ngganti saluran. Ing jalur iki, pencet tombol sing dikarepake, ora bakal bisa. Kontrol remot dhewe ora ngganti saluran: mung menehi sinyal menyang TV, sing ana proses rumit kanggo ngganti saluran kasebut. Semono uga bebek kita: kudu bisa nglangi supaya bisa diakses nganggo antarmuka Swimmable. Yen dheweke ora ngerti carane nindakake iki, antarmuka Swimmableora bakal nyambung loro-lorone - wong lan program. Wong ora bakal bisa nggunakake cara swim()kanggo nggawe obyek Ducking program ngambang. Saiki sampeyan wis ndeleng luwih cetha kanggo apa antarmuka. Antarmuka nggambarake prilaku sing kudu diduweni dening kelas sing ngetrapake antarmuka kasebut. "Prilaku" minangka kumpulan metode. Yen kita pengin nggawe macem-macem utusan, cara paling gampang kanggo nindakake iki yaiku nggawe antarmuka Messenger. Apa sing kudu ditindakake utusan? Ing wangun simplified, nampa lan ngirim pesen.
public interface Messenger{

     public void sendMessage();

     public void getMessage();
}
Lan saiki kita mung bisa nggawe kelas utusan kanthi ngetrapake antarmuka iki. Compiler dhewe bakal "meksa" kita ngleksanakake ing kelas. Telegram:
public class Telegram implements Messenger {

    public void sendMessage() {

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

     public void getMessage() {
         System.out.println("Reading the message in Telegram!");
     }
}
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 message to Viber!");
    }

     public void getMessage() {
         System.out.println("Reading a message in Viber!");
     }
}
Apa keuntungan sing diwenehake iki? Sing paling penting yaiku kopling longgar. Mbayangno yen kita ngrancang program sing bakal ngumpulake data pelanggan. Kelas Clientkudu duwe lapangan sing nuduhake utusan sing digunakake klien. Tanpa antarmuka bakal katon aneh:
public class Client {

    private WhatsApp whatsApp;
    private Telegram telegram;
    private Viber viber;
}
Kita nggawe telung lapangan, nanging klien bisa duwe mung siji utusan. Kita mung ora ngerti sing endi. Lan supaya ora ditinggalake tanpa komunikasi karo klien, sampeyan kudu "push" kabeh opsi sing bisa ditindakake menyang kelas. Pranyata metu sing siji utawa loro mau bakal tansah ana null, lan padha ora perlu ing kabeh kanggo program bisa. Nanging, luwih becik nggunakake antarmuka kita:
public class Client {

    private Messenger messenger;
}
Iki minangka conto "kopling longgar"! Tinimbang nemtokake kelas utusan tartamtu ing kelas kasebut Client, kita mung nyebutake yen klien duwe utusan. Endi sing bakal ditemtokake sajrone program kasebut. Nanging kenapa kita butuh antarmuka kanggo iki? Yagene padha ditambahake ing basa kasebut? Pitakonan sing apik lan bener! Hasil sing padha bisa digayuh nggunakake warisan biasa, ta? Kelas kasebut Messengerminangka kelas induk, lan Viber, Telegramlan WhatsAppminangka ahli waris. Pancen, bisa ditindakake. Nanging ana siji nyekel. Kaya sing wis dimangerteni, ora ana warisan pirang-pirang ing Jawa. Nanging ana sawetara implementasine saka antarmuka. Kelas bisa ngleksanakake akeh antarmuka sing disenengi. Mbayangno yen kita duwe kelas Smartphonesing duwe lapangan Application- aplikasi sing diinstal ing smartphone.
public class Smartphone {

    private Application application;
}
Aplikasi lan utusan, mesthi, padha, nanging isih beda. Messenger bisa dadi seluler lan desktop, dene Aplikasi minangka aplikasi seluler. Dadi, yen kita nggunakake warisan, kita ora bakal bisa nambah obyek Telegrammenyang kelas Smartphone. Sawise kabeh, kelas Telegramora bisa warisan saka Applicationlan saka Messenger! Lan kita wis ngatur kanggo warisan saka Messenger, lan nambah menyang kelas ing wangun iki Client. Nanging kelas Telegrambisa gampang ngleksanakake loro antarmuka! Mulane, ing kelas Clientkita bisa ngleksanakake obyek Telegramminangka Messenger, lan ing kelas Smartphoneminangka Application. Mangkene carane ditindakake:
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 bisa nggunakake kelas Telegramsing dikarepake. Nang endi wae dheweke bakal tumindak ing peran Application, nang endi wae ing peran Messenger. Sampeyan bisa uga wis ngerteni manawa metode ing antarmuka tansah "kosong", yaiku, ora ana implementasine. Alesan kanggo iki prasaja: antarmuka nggambarake prilaku, ora ngleksanakake. "Kabeh obyek saka kelas sing ngleksanakake antarmuka Swimmablekudu bisa ngambang": iku kabeh antarmuka marang kita. Carane persis iwak, bebek utawa jaran bakal nglangi ana pitakonan kanggo kelas Fish, Ducklan Horse, lan ora kanggo antarmuka. Kaya ngganti saluran minangka tugas saka TV. Remot mung menehi tombol kanggo nindakake. Nanging, Java8 duwe tambahan sing menarik - metode standar. Contone, antarmuka sampeyan duwe 10 cara. 9 diimplementasikake kanthi beda ing kelas sing beda-beda, nanging siji dileksanakake padha ing kabeh. Sadurunge, sadurunge rilis Java8, metode ing antarmuka ora ana implementasine: kompiler langsung nggawe kesalahan. Saiki sampeyan bisa nindakake kaya iki:
public interface Swimmable {

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

   public void eat();

   public void run();
}
Nggunakake tembung kunci default, kita wis nggawe metode ing antarmuka kanthi implementasi standar. Kita kudu ngetrapake rong cara liyane, eat()lan run(), awake dhewe ing kabeh kelas sing bakal ngetrapake Swimmable. Ora perlu nindakake iki kanthi cara swim(): implementasine bakal padha ing kabeh kelas. Miturut cara, sampeyan wis ketemu antarmuka luwih saka sapisan ing tugas kepungkur, sanajan sampeyan ora sok dong mirsani iku dhewe :) Punika conto ketok: Napa kita butuh antarmuka ing Jawa - 2Sampeyan makarya karo antarmuka Listlan Set! Luwih tepate, kanthi implementasine - ArrayList, LinkedList, HashSetlan liya-liyane. Diagram sing padha nuduhake conto nalika siji kelas ngetrapake sawetara antarmuka bebarengan. Contone, LinkedListiku ngleksanakake antarmuka Listlan Deque(kaping pindho antrian). Sampeyan uga menowo antarmuka Map, utawa rodo, karo implementasine - HashMap. Miturut cara, ing diagram iki sampeyan bisa ndeleng siji fitur: antarmuka bisa dipun warisaken saka saben liyane. Antarmuka SortedMapdiwarisake saka Map, lan Dequediwarisake saka antrian Queue. Iki perlu yen sampeyan pengin nuduhake sambungan antarane antarmuka, nanging siji antarmuka minangka versi lengkap liyane. Ayo katon ing conto karo antarmuka Queue- antrian. Kita durung ngliwati koleksi kasebut Queue, nanging cukup prasaja lan disusun kaya garis biasa ing toko. Sampeyan bisa nambah unsur mung kanggo mburi antrian, lan njupuk adoh mung saka awal. Ing tataran tartamtu, pangembang mbutuhake versi antrian sing ditambahi supaya unsur bisa ditambah lan ditampa saka loro-lorone. Iki minangka antarmuka digawe Deque- antrian rong arah. Isine kabeh cara antrian biasa, amarga iku "tiyang sepah" saka antrian loro-lorone, nanging cara anyar wis ditambahake.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION