Rumah > Java > javaTutorial > teks badan

Memecahkan OOP dalam Java: PIE yang Anda Inginkan Sekeping

Susan Sarandon
Lepaskan: 2024-10-28 11:38:02
asal
985 orang telah melayarinya

Cracking OOP in Java: A PIE You’ll Want a Slice Of

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.


Apakah Maksudnya Berorientasikan Objek?

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.


1. Abstraksi: Menyembunyikan Butiran Yang Tidak Diperlukan

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.

Contoh:

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.
    }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Penjelasan:

  • Di manakah kerumitan itu tersembunyi?

    • Kaedah authenticate() mewakili logik dalaman (cth., pengesahan pengguna, penyulitan) yang peribadi dan tersembunyi daripada kedua-dua kelas anak dan pengguna.
    • Kaedah makePayment() ialah satu-satunya kaedah awam yang tersedia kepada pengguna, menyediakan cara mudah untuk berinteraksi dengan sistem pembayaran.
  • Bagaimanakah kelas abstrak membantu?

    • Ia memaksa kelas kanak-kanak (seperti CreditCardPayment) untuk melaksanakan logik teras (processPayment()), tetapi kelas kanak-kanak tidak perlu tahu tentang logik pengesahan —ia dikendalikan dalam kelas induk.
  • Apakah yang pengguna lihat?

    • Dari perspektif pengguna, mereka hanya berinteraksi dengan makePayment()—mereka tidak mengambil berat tentang pengesahan atau cara pembayaran kad kredit berfungsi secara dalaman.

2. Polimorfisme: Tindakan Sama, Bentuk Berbeza

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.

Contoh:

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.
    }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

2. Polimorfisme Masa Jalan (Penggantian Kaedah): Dicapai apabila subkelas menyediakan pelaksanaan khusus kaedah yang diisytiharkan dalam kelas induk.

Contoh:

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
    }
}

Salin selepas log masuk

Penjelasan:

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.


3. Warisan: Kebolehgunaan Semula Kod melalui Hubungan Ibu Bapa-Anak

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.

Contoh:

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
    }
}
Salin selepas log masuk

Penjelasan:

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.


4. Encapsulation: Melindungi Data dengan Kawalan Akses

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.

Contoh:

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.
    }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Penjelasan:

  • Medan nama adalah peribadi, bermakna ia tidak boleh diakses terus dari luar kelas.

  • Akses disediakan melalui pengambil dan penetap awam, menguatkuasakan menyembunyikan data.


Kesimpulan

Prinsip OOP JavaAbstraksi, 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!


Catatan Berkaitan

  • Asas Java

  • Keperluan Temuduga Tatasusunan

  • Java Memory Essentials

  • Java Keywords Essentials

  • Kerangka Kerja Koleksi Penting

Selamat Pengekodan!

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!