CodeGym /Java Blog /Acak /Hubungan antar kelas. Warisan, komposisi, dan agregasi
John Squirrels
Level 41
San Francisco

Hubungan antar kelas. Warisan, komposisi, dan agregasi

Dipublikasikan di grup Acak
Hai! Hari ini kita akan melihat lebih dekat satu prinsip Pemrograman Berorientasi Objek (OOP): Pewarisan. Kita juga akan mempelajari jenis hubungan antar class lainnya: komposisi dan agregasi. Hubungan antar kelas.  Warisan, komposisi, dan agregasi - 1Topik ini tidak akan sulit: Anda sudah sering menemukan pewarisan dan contoh pewarisan di pelajaran sebelumnya. Hari ini, hal utama adalah memperkuat pengetahuan Anda, memeriksa mekanisme pewarisan secara lebih rinci, dan sekali lagi menjalankan beberapa contoh. :) Baiklah, ayo pergi!

Warisan di Jawa dan kelebihannya

Seperti yang pasti Anda ingat, pewarisan adalah mekanisme yang memungkinkan Anda mendeskripsikan kelas baru berdasarkan kelas yang sudah ada (kelas induk). Dengan demikian, kelas baru meminjam properti dan fungsionalitas kelas induk. Mari kita ingat contoh pewarisan yang diberikan dalam pelajaran sebelumnya:

public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
Kami memiliki program tertentu yang melibatkan bekerja dengan berbagai jenis mobil. Meskipun Anda bukan penggemar mobil, Anda mungkin tahu bahwa ada banyak sekali jenis mobil di dunia. :) Oleh karena itu, kami akan memisahkan properti umum mobil menjadi kelas induk umum yang disebut Car. Jadi apa yang umum untuk semua mobil, terlepas dari jenisnya? Setiap mobil memiliki tahun pembuatan, nama model, dan kecepatan maksimum. Kami menempatkan properti ini ke dalam bidang model, maxSpeed, dan yearOfManufacture. Soal perilaku, mobil apa pun bisa berakselerasi dan melambat. :) Kami mendefinisikan perilaku ini di gas()danbrake()metode. Manfaat apa yang diberikan ini kepada kita? Pertama-tama, ini mengurangi jumlah kode. Tentu saja, kita bisa melakukannya tanpa kelas induk. Namun karena setiap mobil harus dapat berakselerasi dan melambat, kita harus membuat gas()metode brake()di kelas Truck, Sedan, F1Car, dan SportsCardi setiap kelas mobil lainnya. Bayangkan berapa banyak kode tambahan yang harus kita tulis. Dan jangan lupakan bidang model, maxSpeed, dan yearOfManufacture: jika kita menghapus kelas induk, kita harus membuatnya di setiap kelas mobil! Hubungan antar kelas.  Warisan, komposisi, dan agregasi - 2Saat kami memiliki beberapa lusin kelas mobil, jumlah kode duplikat menjadi sangat serius. Memindahkan bidang dan metode umum (juga disebut "status" dan "perilaku") ke kelas induk memungkinkan kita menghemat banyak waktu dan ruang. Jika beberapa jenis memiliki sifat atau metode unik yang tidak dimiliki jenis mobil lain, bukan masalah besar. Anda selalu dapat membuatnya di kelas keturunan, terpisah dari orang lain.

public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Mari kita lihat mobil balap Formula Satu sebagai contoh. Tidak seperti "kerabat" mereka, mereka memiliki perilaku yang unik - mereka berhenti dari waktu ke waktu. Ini tidak mengganggu kita. Kami telah menjelaskan perilaku umum di Carkelas induk, dan perilaku khusus dari kelas turunan dapat ditambahkan ke kelas tersebut. Hubungan antar kelas.  Warisan, komposisi, dan agregasi - 3Hal yang sama berlaku untuk bidang: jika kelas anak memiliki properti unik, kami dengan tenang mendeklarasikan bidang ini di dalam kelas anak dan berhenti khawatir. :) Kemampuan untuk menggunakan kembali kode adalah keuntungan utama dari pewarisan. Untuk pemrogram, sangat penting untuk tidak menulis kode tambahan. Anda akan menemukan ini berulang kali dalam pekerjaan Anda. Harap ingat hal lain yang penting: Java tidak memiliki banyak pewarisan. Setiap kelas mewarisi hanya satu kelas. Kami akan berbicara lebih banyak tentang alasan untuk ini di pelajaran selanjutnya. Untuk saat ini, ingat saja. Omong-omong, ini membuat Java berbeda dari beberapa bahasa OOP lainnya. Misalnya, C++ mendukung banyak pewarisan. Semuanya kurang lebih jelas dengan warisan. Ayo lanjutkan.

Komposisi dan agregasi

Kelas dan objek dapat dihubungkan bersama. Pewarisan menjelaskan hubungan "is-a". Seekor singa adalah binatang. Hubungan seperti itu dengan mudah diekspresikan menggunakan pewarisan, di mana Animalkelas induk dan Lionanak. Namun, tidak semua hubungan dijelaskan seperti ini. Misalnya, keyboard pasti berhubungan dengan komputer, tetapi bukan komputer . Tangan entah bagaimana berhubungan dengan seseorang, tetapi itu bukan manusia. Dalam kasus ini, kami memiliki jenis hubungan lain: bukan "is-a", tetapi "has-a". Tangan bukanlah seseorang, tetapi merupakan bagian dari seseorang. Keyboard bukanlah komputer, tetapi merupakan bagian dari komputer. Hubungan has-a dapat dijelaskan dalam kode menggunakan komposisi dan agregasi. Perbedaannya terletak pada "keketatan" hubungan tersebut. Mari kita berikan contoh sederhana: Kami memiliki kelas Car. Setiap mobil memiliki mesin. Selain itu, setiap mobil memiliki penumpang. Apa perbedaan mendasar antara bidang Engine enginedan Passenger[] passengers? Fakta bahwa penumpang Aduduk di dalam mobil tidak berarti penumpang Bdan Ctidak ada di dalam mobil. Sebuah mobil dapat menampung banyak penumpang. Apalagi jika semua penumpangnya keluar dari mobil, tetap bisa berfungsi dengan lancar. Hubungan antara Carkelas dan Passenger[] passengersarray kurang ketat. Itu disebut agregasi . Ini memberikan contoh agregasi yang bagus. Misalkan kita memiliki Studentkelas dan aStudentGroupkelas. Seorang siswa dapat bergabung dengan beberapa organisasi siswa: klub fisika, klub penggemar Star Wars, dan/atau klub komedi siswa. Komposisi adalah jenis hubungan yang lebih ketat. Saat menggunakan komposisi, suatu objek adalah bagian dari beberapa objek dan tidak dapat dimiliki oleh objek lain dengan jenis yang sama. Contoh paling sederhana adalah mesin mobil. Mesin adalah bagian dari mobil dan tidak dapat menjadi bagian dari mobil lain. Seperti yang Anda lihat, hubungan mereka jauh lebih ketat daripada hubungan antara Cardan Passengers. Hubungan antar kelas.  Warisan, komposisi, dan agregasi - 4
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION