1. Pegasus

Ayo goleki luwih jero babagan prinsip katelu OOP : warisan . Iki minangka topik sing menarik banget sing bakal sampeyan gunakake. Kanggo sing ora ngerti, pemrograman ora bisa dibedakake karo sihir. Dadi ayo miwiti nganggo analogi sing menarik ...;

Sebutake sampeyan minangka penyihir sing pengin nggawe jaran mabur. Ing tangan siji, sampeyan bisa nyoba conjuring pegasus. Nanging amarga pegasi ora ana ing alam, iki bakal angel banget. Sampeyan kudu nindakake akeh dhewe. Luwih gampang njupuk jaran lan nggawe swiwine.

Ing pemrograman, proses iki diarani "warisan". Upaminipun sampeyan kudu nulis kelas banget Komplek. Butuh dangu kanggo nulis kode saka ngeruk lan banjur nyoba kabeh kanggo dangu kanggo nggoleki kasalahan. Kok lunga dalan sing angel? Iku luwih apik kanggo ndeleng apa kelas kuwi wis ana.

Upaminipun sampeyan nemokake kelas kang cara ngleksanakake 80% saka fungsi sing perlu. Apa sing bakal ditindakake sabanjure? Sampeyan mung bisa nyalin kode menyang kelas sampeyan. Nanging solusi iki duwe sawetara kekurangan:

  1. Kelas sing sampeyan temokake bisa uga wis dikompilasi dadi bytecode, lan sampeyan ora bisa ngakses kode sumber.
  2. Kode sumber saka kelas kasedhiya, nanging sampeyan bisa kanggo perusahaan sing bisa digugat kanggo saperangan milyar kanggo nggunakake malah 6 baris kode wong liya. Banjur majikan sampeyan bakal nuntut sampeyan.
  3. Duplikasi kode sing ora perlu. Kajaba iku, yen penulis kelas eksternal nemokake bug kasebut lan ndandani, sampeyan isih bakal duwe bug kasebut.

Ana solusi sing luwih elegan, lan ora mbutuhake akses legal menyang kode kelas asli. Ing Jawa, sampeyan mung bisa nyatakake kelas kasebut minangka induk kelas sampeyan. Iki bakal padha karo nambah kode kanggo kelas kasebut menyang kode sampeyan dhewe. Kelas sampeyan bakal weruh kabeh data lan kabeh metode kelas induk. Contone, sampeyan bisa nindakake iki: kita oleh warisan "jaran" banjur nambah "swiwi" kanggo njaluk "pegasus"


2. Kelas dhasar umum

Warisan uga bisa digunakake kanggo tujuan liyane. Contone, sampeyan duwe sepuluh kelas sing meh padha. Padha duwe data lan cara sing padha. Sampeyan bisa nggawe kelas dhasar khusus, mindhah data (lan cara sing gegandhengan) menyang kelas dhasar iki, lan nyatakake sepuluh kelas kasebut minangka turunan. Ing tembung liya, ing saben kelas nuduhake yen kelas induke yaiku kelas dasar iki.

Kaya kaluwihan abstraksi sing dicethakaké mung ing sadawane enkapsulasi sisih, uga kaluwihan warisan tambah akeh nalika nggunakake polimorfisme. Nanging sampeyan bakal sinau babagan iki mengko. Dina iki kita bakal nliti sawetara conto nggunakake warisan.

Bêsik catur

Upamane kita nulis program sing main catur karo pangguna manungsa. Mulane, kita butuh kelas kanggo makili potongan kasebut. Apa kelas sing bakal padha?

Yen sampeyan wis tau main catur, jawaban sing jelas yaiku Raja, Ratu, Uskup, Ksatria, Rook lan Pawn.

Nanging kelas kasebut isih kudu nyimpen informasi babagan saben bagean. Contone, koordinat x lan y, lan nilai potongan kasebut. Sawise kabeh, sawetara potongan luwih aji tinimbang liyane.

Kajaba iku, potongan-potongan kasebut beda-beda, tegese kelas bakal ngetrapake prilaku sing beda. Mangkene carane sampeyan bisa nemtokake minangka kelas:

class King
{
   int x;
   int y;
   int worth;

   void kingMove()
   {
     // Code that decides
     // how to move
     // the king
   }
}
class Queen
{
   int x;
   int y;
   int worth;

   void queenMove()
   {
     // Code that decides
     // how to move
     // the queen
   }
}
class Rook
{
   int x;
   int y;
   int worth;

   void rookMove()
   {
     // Code that decides
     // how to move
     // the rook
   }
}
class Knight
{
   int x;
   int y;
   int worth;

   void knightMove()
   {
     // Code that decides
     // how to move
     // the knight
   }
}
class Bishop
{
   int x;
   int y;
   int worth;

   void bishopMove()
   {
     // Code that decides
     // how to move
     // the bishop
   }
}
class Pawn
{
   int x;
   int y;
   int worth;

   void pawnMove()
   {
     // Code that decides
     // how to move
     // the pawn
   }
}

Iki minangka gambaran primitif banget babagan potongan catur.

Kelas dhasar umum

Lan ing kene sampeyan bisa nggunakake warisan kanggo nyuda jumlah kode. Kita bisa nggawa cara lan data umum menyang kelas umum. Kita bakal nelpon ChessItem. Ora ana gunane nggawe obyek saka ChessItem class, amarga kelas kasebut ora cocog karo potongan catur . Sing jarene, kelas kasebut bakal migunani banget:

class King extends ChessItem
{
   void kingMove()
   {
     // Code that decides
     // how to move the king
   }
}
class Queen extends ChessItem
{
   void queenMove()
   {
     // Code that decides
     // how to move the queen
   }
}
class Rook extends ChessItem
{
   void rookMove()
   {
     // Code that decides
     // how to move the rook
   }
}
class ChessItem
{
   int x;
   int y;
   int worth;
}
class Knight extends ChessItem
{
   void knightMove()
   {
     // Code that decides
     // how to move the knight
   }
}
class Bishop extends ChessItem
{
   void bishopMove()
   {
     // Code that decides
     // how to move the bishop
   }
}
class Pawn extends ChessItem
{
   void pawnMove()
   {
     // Code that decides
     // how to move the pawn
   }
}

Iki minangka cara sing apik kanggo nyederhanakake kode kanggo obyek sing padha. Keuntungan utamane katon nalika ana ewonan obyek lan atusan kelas ing proyek kasebut. Dadi kelas induk (basis) sing dipilih kanthi bener ngidini sampeyan ora mung nyederhanakake logika, nanging uga nyuda kode kaping sepuluh.


3. Warisan kelas -extends

Dadi apa sing dibutuhake kanggo entuk warisan kelas? Kanggo siji kelas kanggo warisan liyane, sampeyan kudu nulis extendstembung kunci sawise deklarasi kelas anak banjur nulis jeneng kelas induk. Biasane katon kaya iki:

class Descendant extends Parent

Iki sing kudu ditulis nalika ngumumake kelas Keturunan. Miturut cara, kelas mung bisa warisan siji kelas.

Ing gambar, kita weruh yen sapi marisi babi, sing marisi pitik, sing marisi endhog. Mung siji wong tuwa! Warisan kuwi ora mesthi logis. Nanging yen sampeyan mung duwe babi lan sampeyan pancene butuh sapi, programer asring ora bisa nolak kepinginan kanggo nggawe sapi saka babi.

Jawa ora duwe warisan pirang-pirang: kelas ora bisa warisan rong kelas. Saben kelas mung bisa duwe siji kelas induk. Yen ora ana kelas induk sing ditemtokake, kelas induk yaiku Object.

Sing jarene, Jawa duwe macem-macem warisan antarmuka. Iki rada nyuda masalah. Kita bakal ngomong babagan antarmuka mengko, nanging saiki ayo terus njelajah warisan.