Pengertian Ajaib Dan Interface Pada Pemograman Java

Kali ini saya membahas kelas Shape dengan subclass Rectangle, Oval, dan RoundRect yang mewakili jenis bentuk tertentu. Masing-masing kelas meliputi metode redraw (). Metode redraw () di kelas Rectangle menggambar persegi panjang. Metode redraw () di kelas Oval menarik oval. Metode redraw () di kelas RoundRect menggambar persegi panjang bulat. Apa metode redraw () yang ada di kelas Shape? Bagaimana seharusnya itu didefinisikan?

Jawabannya mungkin mengejutkan: Kita harus membiarkannya kosong! Faktanya yaitu bahwa Shape kelas mewakili gagasan ajaib sebuah bentuk, dan tidak ada cara untuk menarik benda semacam itu. Hanya bentuk beton tertentu ibarat persegi panjang dan oval yang sanggup digambar. Jadi, mengapa harus ada metode redraw () di kelas Shape? Nah, itu harus ada di sana, atau akan ilegal untuk menyebutnya dalam metode setColor () kelas Shape, dan akan menjadi ilegal untuk menulis "oneShape.redraw ();", di mana satuShape yaitu variabel tipe Bentuk.

Namun demikian versi redraw () di kelas Shape tidak akan pernah disebut. Sebenarnya, jikalau Anda memikirkannya, tidak akan pernah ada alasan untuk membangun objek tipe Shape yang sebenarnya! Anda sanggup mempunyai variabel tipe Shape, namun objek yang mereka lihat akan selalu termasuk dalam salah satu subclass Shape. Kami menyampaikan bahwa Shape yaitu kelas abstrak. Kelas ajaib yaitu salah satu yang tidak dipakai untuk membangun objek, namun hanya sebagai dasar pembuatan subclass. Kelas ajaib hanya ada untuk mengekspresikan sifat umum semua subclassnya.

Demikian pula, kita sanggup menyampaikan bahwa metode redraw () di kelas Shape yaitu metode abstrak, sebab tidak pernah dimaksudkan untuk dipanggil. Sebenarnya, tidak ada yang sanggup dilakukan - setiap penggambaran ulang yang sebetulnya dilakukan dengan metode redraw () di subclass Shape. Metode redraw () di Shape harus ada di sana. Tapi hanya ada yang sanggup memberi tahu komputer bahwa semua Shape mengerti pesan redrawnya. Sebagai metode abstrak, ia hanya ada untuk memilih antarmuka umum semua versi beton positif redraw () di subclass Shape. Tidak ada alasan untuk redraw ajaib () di kelas Shape untuk mengandung isyarat sama sekali.

Metode bentuk dan redraw () secara semantik abstrak. Anda juga sanggup memberi tahu komputer, secara sintaktis, bahwa mereka ajaib dengan menambahkan pengubah "abstrak" ke definisi mereka. Untuk metode abstrak, blok isyarat yang memberi penerapan metode biasa digantikan oleh titik koma. Implementasi harus disediakan untuk metode ajaib dalam subclass konkret kelas abstrak. Inilah kelas Shape yang akan terlihat ibarat kelas abstrak:

abstract class Shape {                    Color color;   // color of shape.                                                   void setColor(Color newColor) {                  // method to change the color of the shape               color = newColor; // change value of instance variable               redraw(); // redraw shape, which will appear in new color            }                        abstract void redraw();                  // abstract method -- must be redefined in                   // concrete subclasses             . . .          // more instance variables and methods         } 
 
 
Setelah Anda melaksanakan ini, menjadi ilegal untuk mencoba menciptakan objek 
tipe Shape sebenarnya,dan komputer akan melaporkan kesalahan jikalau Anda mencoba melakukannya.
Di Java, setiap kelas yang Anda nyatakan mempunyai superclass. Jika Anda 
tidak memilih superclass, maka superclass secara otomatis diambil menjadi 
Object, sebuah kelas yang telah ditentukan yang merupakan pecahan dari 
paket java.lang. (Objek kelas itu sendiri tidak mempunyai superclass, 
tapi satu-satunya kelas yang mempunyai properti ini.) Jadi,
 
                            class myClass { . . .
is exactly equivalent to
class myClass extends Object { . . .

Setiap kelas lainnya, secara eksklusif atau tidak langsung, merupakan subkelas dari Objek. Ini berarti bahwa setiap objek, termasuk dalam kelas apapun, sanggup ditugaskan ke variabel tipe Object. Objek kelas mewakili sifat yang sangat umum yang dimiliki oleh semua objek, termasuk dalam kelas manapun. Objek yaitu kelas yang paling abstrak!Kelas Objek benar-benar menemukan penggunaan dalam beberapa perkara di mana objek dari jenis yang sangat umum dimanipulasi. Sebagai contoh, java mempunyai kelas standar, java.util.Vector, yang mewakili daftar Objects. (Kelas Vector ada dalam paket java.util Jika Anda ingin memakai kelas ini dalam agenda yang Anda tulis, biasanya Anda akan memakai pernyataan impor untuk memungkinkannya memakai nama pendek, Vector, alih-alih nama lengkap, Lihat pecahan 2.6 untuk diskusi ihwal paket dan impor.) Kelas Vector sangat mudah, sebab Vektor sanggup menyimpan sejumlah objek, dan itu akan tumbuh, bila perlu, sebab benda ditambahkan ke dalamnya. Karena item dalam daftar yaitu tipe Object, daftar sebetulnya sanggup menyimpan objek dari jenis apa pun.

Sebuah agenda yang ingin melacak banyak sekali Bentuk yang telah digambar di layar sanggup menyimpan bentuk-bentuk itu di dalam sebuah Vektor. Anggaplah bahwa Vector diberi nama listOfShapes. Sebuah bentuk, satuShape, sanggup ditambahkan ke tamat daftar dengan memanggil metode teladan "listOfShapes.addElement (oneShape);". Bentuknya sanggup dihapus dari daftar dengan "listOfShapes.removeElement (oneShape);". Jumlah bentuk dalam daftar diberikan oleh fungsi "listOfShapes.size ()".) Dan mungkin untuk mengambil objek ke-i dari daftar dengan memanggil fungsi "listOfShapes.elementAt (i)". (Item dalam daftar diberi nomor dari 0 hingga listOfShapes.size () - 1. Namun, perhatikan bahwa metode ini mengembalikan Objek, bukan Bentuk (Tentu saja, orang-orang yang menulis kelas Vektor bahkan tidak tahu ihwal Bentuk !) Karena Anda tahu bahwa item dalam daftar sebetulnya yaitu Bentuk dan bukan hanya Objek, Anda sanggup mengetikkan Objek yang dikembalikan oleh listOfShapes.elementAt (i) menjadi nilai tipe Shape :

Shape s = (Shape)listOfShapes.elementAt(i);


Mungkin mempunyai kegunaan untuk melihat applet yang benar-benar memakai kelas Shape ajaib dan Vector untuk menyimpan daftar bentuk:
Jika Anda mengklik salah satu tombol di sepanjang pecahan bawah applet ini, sebuah bentuk akan ditambahkan ke layar di sudut kiri atas applet. Warna bentuknya diberikan oleh "Choice menu" di kanan bawah. Begitu bentuknya ada di layar, Anda sanggup menyeretnya dengan mouse. Sebuah bentuk akan mempertahankan tatanan front-to-back yang sama sehubungan dengan bentuk lain di layar, bahkan dikala Anda menyeretnya. Namun, Anda sanggup memindahkan bentuk di depan semua bentuk lainnya jikalau Anda menekan tombol shift dikala Anda mengkliknya.

Dalam applet ini, satu-satunya dikala ketika kelas sebetulnya dari bentuk yang dipakai yaitu dikala bentuk itu ditambahkan ke layar. Begitu bentuknya telah diciptakan, ia dimanipulasi seluruhnya sebagai bentuk abstrak. Rutinitas yang menerapkan menyeret, misalnya, hanya bekerja dengan variabel tipe Shape. Saat Shape diseret, rutinitas menyeret memanggil metode menggambar Shape berulang-ulang. Shape bertanggung jawab untuk menggambar dirinya dengan benar. Jika saya ingin menambahkan tipe bentuk gres ke agenda ini, saya akan memilih subkelas gres Shape, menambahkan tombol lain ke applet, dan memprogram tombol untuk menambahkan jenis bentuk yang benar ke layar. Tidak ada perubahan lain dalam pemrograman yang diperlukan.


Anda mungkin ingin melihat isyarat sumber untuk applet ini, ShapeDraw.java, meskipun Anda tidak sanggup memahami semuanya dikala ini. Bahkan definisi kelas bentuk agak berbeda dari yang saya jelaskan di pecahan ini. (Misalnya, metode draw () yang dipakai pada applet mempunyai parameter tipe Graphics. Parameter ini diharapkan sebab cara Java menangani semua gambar.) Saya akan kembali ke teladan ini di pecahan berikutnya ketika Anda tahu lebih banyak ihwal applet. . Namun, tetap layak untuk melihat definisi kelas Shape dan subkelasnya dalam isyarat sumber untuk applet. Anda juga sanggup menyidik bagaimana Vector dipakai untuk menyimpan daftar bentuk di layar.



Interfaces

Beberapa bahasa pemrograman berorientasi objek, ibarat C ++, memungkinkan sebuah kelas memperpanjang dua atau lebih superclasses. Ini disebut multiple inheritance. Dalam gambaran di bawah ini, misalnya, kelas E ditunjukkan mempunyai kelas A dan kelas B sebagai superclass langsung, sedangkan kelas F mempunyai tiga superclass langsung.


Beberapa warisan semacam itu tidak diperbolehkan di Java. Perancang Java ingin semoga bahasa tetap sederhana, dan merasa bahwa manfaat multiple inheritance tidak sebanding dengan biaya dalam kompleksitas yang meningkat. Namun, Java memang mempunyai fitur yang sanggup dipakai untuk mencapai banyak tujuan yang sama ibarat multiple inheritance: interface.

Kami telah menemukan istilah "antarmuka" sebelumnya, sehubungan dengan kotak hitam pada umumnya dan subrutin pada khususnya. Antar muka subrutin terdiri dari nama subrutin, jenis kembaliannya, dan jumlah dan jenis parameternya. Ini yaitu isu yang perlu diketahui jikalau Anda ingin memanggil subrutin. Sebuah subrutin juga mempunyai implementasi: blok isyarat yang mendefinisikannya dan yang dihukum dikala subrutin dipanggil.

Di Java, Interface yaitu kata yang dicadangkan dengan makna tambahan. Sebuah "antarmuka" di Java terdiri dari satu set antarmuka subrutin, tanpa implementasi yang terkait. Kelas sanggup mengimplementasikan antarmuka dengan menyediakan implementasi untuk masing-masing subrutin yang ditentukan oleh antarmuka. (Antarmuka juga sanggup meliputi definisi konstanta - yaitu, variabel dinyatakan sebagai static final. Konstanta ada di sana sebagai fasilitas untuk memberi nama yang berarti untuk jumlah tertentu.) Berikut yaitu teladan antarmuka Java yang sangat sederhana:

public interface Drawable {           public void draw();        }
 
 
Ini terlihat ibarat definisi kelas, kecuali bahwa penerapan metode draw () 
dihilangkan. Kelas yang mengimplementasikan antarmuka Gambar harus memberikan
implementasi untuk metode ini. Tentu saja, itu juga sanggup termasuk
metode dan variabel lain. Sebagai contoh,
 
 
 class Line implements Drawable {             public void draw() {                 . . . // do something -- presumably, draw a line             }             . . . // other methods and variables          }
 
 
Sementara kelas hanya sanggup memperpanjang satu kelas lainnya, ia sanggup 
mengimplementasikan sejumlah antarmuka. Sebenarnya, kelas sanggup memperluas 
kelas lain dan menerapkan satu atau lebih antarmuka. Jadi, kita sanggup 
memiliki hal-hal seperti
 
class FilledCircle extends Circle                                  implements Drawable, Fillable {            . . .         }
 
Maksudnya semua ini adalah, meski antarmuka bukan kelas, 
itu yaitu sesuatu yang sangat mirip. Antarmuka sangat 
mirip kelas abstrak, yaitu kelas yang tidak sanggup dipakai 
untuk membangun objek, namun sanggup dipakai sebagai basis 
untuk membangun kelas lainnya. Subrutin dalam sebuah antarmuka 
adalah metode abstrak, yang harus diimplementasikan di kelas 
beton manapun yang mengimplementasikan antarmuka. Dan ibarat 
kelas abstrak, meskipun Anda tidak sanggup membangun sebuah objek 
dari sebuah antarmuka, Anda sanggup mendeklarasikan sebuah variabel 
yang jenisnya diberikan oleh antarmuka. Misalnya, jikalau Drawable
adalah sebuah antarmuka, dan jikalau Line and FilledCircle yaitu 
kelas yang mengimplementasikan Drawable, Anda sanggup mengatakan:
 
 
 Drawable figure = new Line();  // variable of type Drawable, referring                                       //   to an object of class Line        . . .    // do some stuff with figure        figure.draw();   // calls draw() method from class Line        figure = new FilledCircle();   // now, figure refers to an object                                       //   of class FilledCircle        figure.draw();   // calls draw() method from class FilledCircle
 
 
Variabel tipe Drawable sanggup merujuk ke objek dari kelas manapun yang mengimplementasikan 
antarmuka Drawable. Sebuah pernyataan ibarat 
figure.draw (), di atas, yaitu legal sebab 
setiap kelas tersebut mempunyai metode draw (). Perhatikan bahwa tipe yaitu sesuatu yang sanggup 
digunakan untuk mendeklarasikan variabel. Jenis 
juga sanggup dipakai untuk memilih jenis 
parameter dalam subrutin, atau jenis fungsi kembali.
Di Java, tipe sanggup berupa kelas, antarmuka, atau satu 
dari delapan tipe primitif bawaan. Inilah satu-satunya 
kemungkinan. Dari jumlah tersebut, hanya kelas yang sanggup 
digunakan untuk membangun objek baru.
Anda mustahil perlu menulis antarmuka Anda 
sendiri hingga Anda hingga pada titik penulisan agenda yang 
cukup kompleks. Namun, ada beberapa antarmuka yang dipakai 
dengan cara yang penting dalam paket standar Java. 
 
 
 
Sumber Referensi : http://www.dcs.bbk.ac.uk/ mirkin/sp109/javanotes/c4/s3.html
 
 
 

Belum ada Komentar untuk "Pengertian Ajaib Dan Interface Pada Pemograman Java"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel