Rumah >Java >javaTutorial >Memecahkan OOP dalam Java: PIE yang Anda Inginkan Sekeping
Dalam siaran ini, kami akan meneroka empat tiang asas Pengaturcaraan Berorientasikan Objek (OOP) dalam Java. Prinsip teras ini membantu kod struktur menjadi modular, boleh digunakan semula dan boleh diselenggara. Siaran ini berfungsi sebagai pengenalan, dengan penyertaan yang akan datang menyelam lebih mendalam ke dalam setiap konsep dengan perbincangan dan contoh yang bernuansa.
Untuk memudahkan ingatan, gunakan akronim “A PIE”: Abstraksi, Polymorphism, Iwarisan , dan Ekapsulasi.
Java sering digambarkan sebagai bahasa berorientasikan objek, tetapi ia bukan berorientasikan objek 100%. Mengapa? Walaupun kebanyakan elemen dalam Java berkisar pada objek (seperti kelas, objek dan kaedah), ia juga menggunakan jenis primitif (seperti int, boolean dan double), iaitu bukan objek.
Mengekalkan jenis primitif dalam Java ialah pilihan reka bentuk yang disengajakan. Inilah sebabnya:
Kecekapan Memori: Jenis primitif mengambil kurang memori berbanding objek objek mereka (seperti Integer atau Boolean).
Peningkatan Prestasi: Operasi pada primitif adalah lebih pantas kerana ia mengelakkan overhed penciptaan objek dan pengurusan rujukan.
Kemudahan: Jenis primitif menjadikan kod lebih bersih dalam kes mudah, terutamanya apabila berurusan dengan operasi aritmetik dan logik.
Ringkasnya, Java mencapai keseimbangan dengan menyediakan primitif untuk prestasi dan kecekapan ingatan sambil turut menawarkan Kelas Pembungkus (seperti Integer) apabila anda perlu menganggap nilai ini sebagai objek.
Abstraksi bermaksud menyembunyikan logik dalaman dan mendedahkan hanya ciri penting kepada pengguna. Ia membolehkan pengguna berinteraksi dengan objek pada tahap tinggi tanpa perlu risau tentang kerumitan asas. Anggap ia sebagai menggunakan ATM—anda hanya perlu memasukkan jumlah untuk mengeluarkan, tanpa mengetahui cara ATM berinteraksi dengan bank anda untuk memproses transaksi.
Di Java, kelas abstrak dan antara muka membantu mencapai abstraksi dengan mentakrifkan kaedah penting dan meninggalkan butiran dalaman sama ada kepada kelas anak atau dalam kelas induk tetapi tersembunyi daripada pengguna.
abstract class Payment { // A method with concrete logic, hidden from the user. private void authenticate() { System.out.println("Authenticating payment..."); } // Abstract method that child classes must implement. abstract void processPayment(double amount); // Public method exposing only the necessary details. public void makePayment(double amount) { authenticate(); // Hidden complexity processPayment(amount); // Exposed to child classes System.out.println("Payment completed."); } } // Concrete class implementing the abstract method. class CreditCardPayment extends Payment { @Override void processPayment(double amount) { System.out.println("Processing credit card payment of ₹" + amount); } } public class TestAbstraction { public static void main(String[] args) { Payment payment = new CreditCardPayment(); // Polymorphism in action. payment.makePayment(1000.00); // Only high-level interaction. } }
Di manakah kerumitan itu tersembunyi?
Bagaimanakah kelas abstrak membantu?
Apakah yang pengguna lihat?
Polimorfisme membenarkan objek berkelakuan berbeza dalam situasi berbeza. Java menyokong dua jenis polimorfisme:
1. Polimorfisme Masa Kompilasi (Pembebanan Kaedah): Dicapai dengan mentakrifkan berbilang kaedah dengan nama yang sama tetapi parameter berbeza.
abstract class Payment { // A method with concrete logic, hidden from the user. private void authenticate() { System.out.println("Authenticating payment..."); } // Abstract method that child classes must implement. abstract void processPayment(double amount); // Public method exposing only the necessary details. public void makePayment(double amount) { authenticate(); // Hidden complexity processPayment(amount); // Exposed to child classes System.out.println("Payment completed."); } } // Concrete class implementing the abstract method. class CreditCardPayment extends Payment { @Override void processPayment(double amount) { System.out.println("Processing credit card payment of ₹" + amount); } } public class TestAbstraction { public static void main(String[] args) { Payment payment = new CreditCardPayment(); // Polymorphism in action. payment.makePayment(1000.00); // Only high-level interaction. } }
2. Polimorfisme Masa Jalan (Penggantian Kaedah): Dicapai apabila subkelas menyediakan pelaksanaan khusus kaedah yang diisytiharkan dalam kelas induk.
class Calculator { // Compile-time polymorphism (Overloading) int add(int a, int b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } public static void main(String[] args) { Calculator calc = new Calculator(); System.out.println(calc.add(2, 3)); // Output: 5 System.out.println(calc.add(2, 3, 4)); // Output: 9 } }
Polimorfisme Masa Kompilasi ditunjukkan dengan melebihkan kaedah add() manakala Polimorfisme Masa Jalanan ditunjukkan dengan mengatasi kaedah bunyi().
Kaedah bunyi() berkelakuan berbeza berdasarkan jenis objek. Walaupun haiwan adalah daripada jenis Haiwan, pada masa jalan, kaedah ganti dalam Anjing dilaksanakan.
Warisan membolehkan kelas (anak) menggunakan semula sifat dan tingkah laku kelas (ibu bapa) yang lain. Ini menggalakkan kebolehgunaan semula kod dan mewujudkan hubungan IS-A antara kelas. Java tidak menyokong warisan berbilang melalui kelas untuk mengelakkan kekaburan tetapi membenarkannya melalui antara muka.
class Animal { void sound() { System.out.println("Animals make sounds."); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks."); } } public class TestPolymorphism { public static void main(String[] args) { Animal animal = new Dog(); // Runtime polymorphism animal.sound(); // Output: Dog barks } }
Dalam contoh ini:
Anjing mewarisi daripada Haiwan, bermakna anjing itu boleh makan dan menyalak.
Ini menunjukkan penggunaan semula kod—kami tidak perlu menulis semula kaedah eat() untuk kelas Dog.
Encapsulation bermaksud menggabungkan data (medan) dan kaedah yang memanipulasinya ke dalam satu unit (kelas). Ia juga memastikan data-menyembunyikan dengan menjadikan medan peribadi dan mendedahkannya melalui pengambil dan penetap.
abstract class Payment { // A method with concrete logic, hidden from the user. private void authenticate() { System.out.println("Authenticating payment..."); } // Abstract method that child classes must implement. abstract void processPayment(double amount); // Public method exposing only the necessary details. public void makePayment(double amount) { authenticate(); // Hidden complexity processPayment(amount); // Exposed to child classes System.out.println("Payment completed."); } } // Concrete class implementing the abstract method. class CreditCardPayment extends Payment { @Override void processPayment(double amount) { System.out.println("Processing credit card payment of ₹" + amount); } } public class TestAbstraction { public static void main(String[] args) { Payment payment = new CreditCardPayment(); // Polymorphism in action. payment.makePayment(1000.00); // Only high-level interaction. } }
Medan nama adalah peribadi, bermakna ia tidak boleh diakses terus dari luar kelas.
Akses disediakan melalui pengambil dan penetap awam, menguatkuasakan menyembunyikan data.
Prinsip OOP Java—Abstraksi, Polimorfisme, Warisan dan Enkapsulasi—membentuk asas untuk menulis kod modular, boleh diselenggara dan cekap. Dengan konsep ini di tangan, anda akan lebih bersedia untuk mereka bentuk dan memahami sistem yang kompleks.
Dalam siaran yang akan datang, kami akan menyelami lebih mendalam setiap prinsip ini dengan contoh yang lebih bernuansa, amalan terbaik dan petua tertumpu pada temu duga. Nantikan!
Atas ialah kandungan terperinci Memecahkan OOP dalam Java: PIE yang Anda Inginkan Sekeping. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!