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:
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);
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 toclass 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 sanggupmengimplementasikan sejumlah antarmuka. Sebenarnya, kelas sanggup memperluaskelas lain dan menerapkan satu atau lebih antarmuka. Jadi, kita sanggupmemiliki hal-hal seperticlass FilledCircle extends Circle implements Drawable, Fillable { . . . }Maksudnya semua ini adalah, meski antarmuka bukan kelas,itu yaitu sesuatu yang sangat mirip. Antarmuka sangatmirip kelas abstrak, yaitu kelas yang tidak sanggup dipakaiuntuk membangun objek, namun sanggup dipakai sebagai basisuntuk membangun kelas lainnya. Subrutin dalam sebuah antarmukaadalah metode abstrak, yang harus diimplementasikan di kelasbeton manapun yang mengimplementasikan antarmuka. Dan ibaratkelas abstrak, meskipun Anda tidak sanggup membangun sebuah objekdari sebuah antarmuka, Anda sanggup mendeklarasikan sebuah variabelyang jenisnya diberikan oleh antarmuka. Misalnya, jikalau Drawableadalah sebuah antarmuka, dan jikalau Line and FilledCircle yaitukelas 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 FilledCircleVariabel tipe Drawable sanggup merujuk ke objek dari kelas manapun yang mengimplementasikanantarmuka Drawable. Sebuah pernyataan ibaratfigure.draw (), di atas, yaitu legal sebabsetiap kelas tersebut mempunyai metode draw (). Perhatikan bahwa tipe yaitu sesuatu yang sanggupdigunakan untuk mendeklarasikan variabel. Jenisjuga sanggup dipakai untuk memilih jenisparameter dalam subrutin, atau jenis fungsi kembali.Di Java, tipe sanggup berupa kelas, antarmuka, atau satudari delapan tipe primitif bawaan. Inilah satu-satunyakemungkinan. Dari jumlah tersebut, hanya kelas yang sanggupdigunakan untuk membangun objek baru.Anda mustahil perlu menulis antarmuka Andasendiri hingga Anda hingga pada titik penulisan agenda yangcukup kompleks. Namun, ada beberapa antarmuka yang dipakaidengan 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