JavaRush /Java Blog /Random-ID /Hubungan antar kelas. Warisan, komposisi dan agregasi

Hubungan antar kelas. Warisan, komposisi dan agregasi

Dipublikasikan di grup Random-ID
Halo! Hari ini kita akan melihat lebih dekat prinsip lain dari pemrograman berorientasi objek (OOP) - pewarisan. Pada saat yang sama, kita akan mempelajari jenis hubungan lain antar kelas - komposisi dan agregasi. Topik ini tidak akan sulit: Anda sudah sering menemukan pewarisan dan contohnya pada kuliah sebelumnya. Hari ini yang utama adalah mengkonsolidasikan pengetahuan Anda, melihat lebih dekat mekanisme pewarisan dan sekali lagi melihat contohnya :) Jadi, ayo!
Hubungan antar kelas.  Warisan, komposisi dan agregasi - 1

Warisan di Pulau Jawa dan Manfaatnya

Seperti yang mungkin Anda ingat, pewarisan adalah mekanisme yang memungkinkan Anda mendeskripsikan kelas baru berdasarkan kelas (induk) yang sudah ada. Dalam hal ini, properti dan fungsionalitas kelas induk dipinjam oleh kelas baru. Mari kita ingat contoh pewarisan pada kuliah 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);
   }
}
Ada program tertentu di mana kami bekerja dengan berbagai jenis mobil. Bahkan jika Anda bukan penggemar mobil, Anda mungkin tahu bahwa ada banyak sekali jenis mobil yang sama di dunia :) Oleh karena itu, kami memisahkan properti umum mobil ke dalam kelas induk umum - Car. Apa kesamaan yang dimiliki semua mobil, apa pun jenisnya? Setiap mobil memiliki tahun pembuatan, nama model, dan kecepatan maksimum. Kami menempatkan properti ini ke dalam bidang model, maxSpeed, yearOfManufacture. Mengenai perilaku, mobil apa pun dapat berakselerasi dan mengerem :) Kami mendefinisikan perilaku ini dalam metode gas()dan brake(). Apa manfaatnya bagi kita? Pertama-tama, mengurangi jumlah kode. Tentu saja, kita bisa melakukannya tanpa kelas induk. Namun karena setiap mobil harus mampu berakselerasi dan mengerem, kita harus menciptakan metode gas()di brake()kelasnya Truck, di kelasnya Sedan, di kelasnya F1Car, di kelasnya, Sportcardan di semua kelas mobil lainnya. Bayangkan berapa banyak kode tambahan yang akan kita tulis dalam kasus ini. Jangan lupa tentang bidang model, maxSpeed, dan yearOfManufacture: jika kita meninggalkan kelas induk, kita akan membuatnya di setiap kelas mesin! Hubungan antar kelas.  Warisan, komposisi dan agregasi - 2 Ketika kita memiliki beberapa lusin kelas mesin, jumlah kode yang berulang akan menjadi sangat serius. Memindahkan bidang dan metode umum (juga disebut “status” dan “perilaku”) ke dalam kelas induk akan memungkinkan kita menghemat banyak waktu dan ruang. Jika suatu jenis mesin tertentu mempunyai sifat atau metode yang hanya dimilikinya saja dan tidak terdapat pada jenis mesin lainnya, maka hal tersebut tidak menjadi masalah. Mereka selalu dapat dibuat di kelas turunan, terpisah dari kelas lainnya.

public class F1Car extends Car {

   public void pitStop() {
      
       //...only racing cars make pit stops
   }

   public static void main(String[] args) {
      
       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Ambil contoh kasus mobil balap Formula 1. Mereka, tidak seperti “kerabat” mereka, memiliki perilaku unik - dari waktu ke waktu mereka melakukan pit-stop. Ini tidak mengganggu kami. Kita telah menjelaskan perilaku umum di kelas induk Car, dan kita dapat menambahkan perilaku spesifik kelas anak di dalam kelas. Hubungan antar kelas.  Warisan, komposisi dan agregasi - 3 Ini juga berlaku untuk bidang: jika kelas anak memiliki properti unik, kita dapat dengan tenang mendeklarasikan bidang ini di dalamnya dan tidak perlu khawatir :) Kemampuan untuk menggunakan kembali kode adalah keuntungan utama dari warisan. Sangat penting bagi seorang programmer untuk tidak menulis kode dalam jumlah yang tidak perlu. Anda akan menemui hal ini lebih dari sekali dalam pekerjaan Anda. Harap diingat satu hal lagi yang sangat penting: tidak ada warisan berganda di Java. Setiap kelas mewarisi hanya satu kelas. Kita akan membicarakan alasannya secara lebih rinci di kuliah selanjutnya, tapi untuk saat ini ingatlah saja. Ini membedakan Java dari beberapa bahasa OOP lainnya. Misalnya, C++ memiliki banyak warisan. Semuanya kurang lebih jelas dengan warisan - mari kita lanjutkan.

Komposisi dan Agregasi

Kelas dan objek dapat dihubungkan satu sama lain. Pewarisan menggambarkan hubungan “is” (atau dalam bahasa Inggris “IS A”). Leo adalah Binatang. Hubungan ini dapat dengan mudah diungkapkan dengan menggunakan pewarisan, dimana Animalkelas akan menjadi induk dan Lionkelas akan menjadi anak. Namun, tidak semua hubungan di dunia digambarkan seperti ini. Misalnya, keyboard pasti terhubung ke komputer dengan cara tertentu, tapi itu bukan komputer . Tangan entah bagaimana terhubung dengan orang tersebut, tetapi mereka bukanlah orangnya. Dalam kasus ini, ini didasarkan pada jenis relasi yang berbeda: bukan “adalah”, tetapi “adalah bagian” (“HAS A”). Tangan bukanlah suatu pribadi, tetapi merupakan bagian dari seseorang. Keyboard bukanlah sebuah komputer, namun merupakan bagian dari komputer. Hubungan HAS A dapat dijelaskan dalam kode menggunakan mekanisme komposisi dan agregasi . Perbedaan di antara keduanya terletak pada “ketatnya” hubungan tersebut. Mari kita beri contoh sederhana: Kita punya milik kita sendiri Car- sebuah mobil. Setiap mobil memiliki mesin. Selain itu, setiap mobil memiliki penumpang di dalamnya. Apa perbedaan mendasar antara bidang Engine enginedan Passenger [] passengers? Jika sebuah mobil mempunyai penumpang di dalamnya А, bukan berarti tidak boleh ada penumpang di Bdalamnya C. Satu mobil mampu menampung beberapa penumpang. Selain itu, jika seluruh penumpang dikeluarkan dari mobil, fungsinya akan tetap senyap. Hubungan antara kelas Cardan massa penumpang Passenger [] passengerstidak terlalu ketat. Ini disebut agregasi . Ada artikel bagus tentang topik ini: Hubungan antar kelas (objek) . Ini memberikan contoh agregasi yang bagus. Katakanlah kita memiliki kelas Studentyang menunjukkan seorang siswa, dan sebuah kelas StudentsGroup(sekelompok siswa). Seorang siswa dapat menjadi anggota klub fisika, klub penggemar mahasiswa Star Wars, atau tim KVN. Komposisi adalah jenis komunikasi yang lebih ketat. Saat menggunakan komposisi, suatu objek tidak hanya merupakan bagian dari suatu objek, tetapi juga tidak dapat menjadi bagian dari objek lain yang bertipe sama. Contoh paling sederhana adalah mesin mobil. Mesin adalah bagian dari sebuah mobil, tetapi tidak dapat menjadi bagian dari mobil lain. Seperti yang Anda lihat, hubungan mereka jauh lebih ketat daripada hubungan Cardan Passengers. Hubungan antar kelas.  Warisan, komposisi dan agregasi - 4
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION