Konsep Pengaturcaraan Berorientasikan Objek di Jawa

1. Gambaran keseluruhan

Dalam artikel ini, kita akan melihat konsep Pemrograman Berorientasikan Objek (OOP) di Jawa. Kami akan membincangkan kelas, objek, abstraksi, enkapsulasi, pewarisan, dan polimorfisme .

2. Kelas

Kelas adalah titik permulaan semua objek, dan kami mungkin menganggapnya sebagai templat untuk membuat objek. Kelas biasanya mengandungi medan anggota, kaedah ahli, dan kaedah pembina khas.

Kami akan menggunakan konstruktor untuk membuat objek kelas:

public class Car { // member fields private String type; private String model; private String color; private int speed; // constructor public Car(String type, String model, String color) { this.type = type; this.model = model; this.color = color; } // member methods public int increaseSpeed(int increment) { this.speed = this.speed + increment; return this.speed; } // ... }

Perhatikan bahawa kelas mungkin mempunyai lebih daripada satu pembina. Kita boleh membaca lebih lanjut mengenai kelas dalam artikel kelas kita.

3. Objek

Objek dibuat dari kelas dan dipanggil contoh kelas. Kami membuat objek dari kelas menggunakan konstruktornya:

Car veyron = new Car("Bugatti", "Veyron", "crimson"); Car corvette = new Car("Chevrolet", "Corvette", "black"); 

Di sini, kami telah mencipta dua contoh kelas Car. Baca lebih lanjut mengenai mereka dalam artikel objek kami.

4. Pengabstrakan

Abstraksi menyembunyikan kerumitan pelaksanaan dan memperlihatkan antara muka yang lebih sederhana.

Sekiranya kita memikirkan komputer biasa, seseorang hanya dapat melihat antara muka luaran, yang paling penting untuk berinteraksi dengannya, sementara cip dan litar dalaman tersembunyi dari pengguna.

Dalam OOP, abstraksi bermaksud menyembunyikan perincian pelaksanaan program yang kompleks, hanya memperlihatkan API yang diperlukan untuk menggunakan implementasi. Di Jawa, kita mencapai abstraksi dengan menggunakan antaramuka dan kelas abstrak.

Kita boleh membaca lebih lanjut mengenai abstraksi di kelas abstrak dan artikel antara muka kita.

5. Enkapsulasi

Encapsulation menyembunyikan keadaan atau perwakilan dalaman objek dari pengguna API dan menyediakan kaedah yang dapat diakses secara terbuka yang terikat pada objek untuk akses baca-tulis. Ini memungkinkan untuk menyembunyikan maklumat tertentu dan mengawal akses ke pelaksanaan dalaman.

Contohnya, medan ahli dalam kelas disembunyikan daripada kelas lain, dan medan ahli dapat diakses menggunakan kaedah ahli. Salah satu cara untuk melakukannya adalah menjadikan semua bidang data peribadi dan hanya dapat diakses dengan menggunakan kaedah anggota awam :

public class Car { // ... private int speed; public int getSpeed() { return color; } public void setSpeed(int speed) { this.speed = speed; } // ... }

Di sini, kecepatan medan dikemas dengan menggunakan pengubah akses peribadi , dan hanya dapat diakses menggunakan metode getSpeed ​​() dan setSpeed ​​() umum . Kita boleh membaca lebih lanjut mengenai pengubah akses dalam artikel pengubah akses kami.

6. Warisan

Pewarisan adalah mekanisme yang membolehkan satu kelas memperoleh semua harta dari kelas lain dengan mewarisi kelas. Kami memanggil kelas mewarisi kelas anak dan kelas warisan sebagai kelas superclass atau ibu bapa.

Di Java, kami melakukan ini dengan memperluas kelas induk. Oleh itu, kelas anak mendapat semua harta dari ibu bapa:

public class Car extends Vehicle { //... }

Apabila kita melanjutkan kelas, kita membentuk hubungan IS-A. The Car IS-A Kenderaan . Jadi, ia mempunyai semua ciri Kenderaan .

Kita mungkin bertanya, mengapa kita memerlukan warisan ? Untuk menjawabnya, mari kita pertimbangkan pengeluar kenderaan yang mengeluarkan pelbagai jenis kenderaan, seperti kereta, bas, trem, dan trak.

Untuk memudahkan kerja, kita dapat menggabungkan ciri dan sifat umum dari semua jenis kenderaan ke dalam modul (kelas untuk Java). Dan kita boleh membiarkan setiap jenis mewarisi dan menggunakan semula sifat tersebut:

public class Vehicle { private int wheels; private String model; public void start() { // the process of starting the vehicle } public void stop() { // process to stop the vehicle } public void honk() { // produces a default honk } }

Kereta jenis kenderaan kini akan diwarisi dari kelas Kenderaan induk :

public class Car extends Vehicle { private int numberOfGears; public void openDoors() { // process to open the doors } }

Java menyokong warisan tunggal dan warisan bertingkat. Ini bermaksud kelas tidak boleh dilanjutkan dari lebih dari satu kelas secara langsung, tetapi boleh menggunakan hierarki:

public class ArmoredCar extends Car { private boolean bulletProofWindows; public void remoteStartCar() { // this vehicle can be started by using a remote control } }

Di sini, ArmouredCar memperluas Car , dan Car memperluas Vehicle . Jadi, ArmouredCar mewarisi harta dari Kereta dan Kenderaan .

Walaupun kami mewarisi dari kelas induk, pembangun juga dapat mengganti pelaksanaan kaedah dari ibu bapa. Ini dikenali sebagai kaedah mengatasi.

Dalam contoh kelas Kenderaan kami di atas , terdapat kaedah honk () . The Car kelas melanjutkan Kenderaan kelas boleh mengatasi kaedah ini dan melaksanakan dengan cara yang ia mahu untuk menghasilkan membunyikan yang:

public class Car extends Vehicle { //... @Override public void honk() { // produces car-specific honk } }

Perhatikan bahawa ini juga disebut polimorfisme runtime, seperti yang dijelaskan di bahagian seterusnya. Kita dapat membaca lebih lanjut mengenai warisan dalam artikel warisan dan pewarisan dan komposisi Java kita.

7. Polimorfisme

Polimorfisme adalah kemampuan bahasa OOP untuk memproses data secara berbeza bergantung pada jenis inputnya. Di Jawa, ini dapat menjadi nama metode yang sama dengan tanda tangan kaedah yang berbeza dan melakukan fungsi yang berbeda:

public class TextFile extends GenericFile { //... public String read() { return this.getContent() .toString(); } public String read(int limit) { return this.getContent() .toString() .substring(0, limit); } public String read(int start, int stop) { return this.getContent() .toString() .substring(start, stop); } }

Dalam contoh ini, kita dapat melihat bahawa kaedah membaca () mempunyai tiga bentuk yang berbeza dengan fungsi yang berbeza. Polimorfisme jenis ini adalah polimorfisme statik atau masa kompilasi dan juga disebut kaedah overloading

Terdapat juga polimorfisme runtime atau dinamik, di mana kelas anak mengatasi kaedah ibu bapa :

public class GenericFile { private String name; //... public String getFileInfo() { return "Generic File Impl"; } }

Kelas kanak-kanak dapat melanjutkan kelas GenericFile dan mengatasi kaedah getFileInfo () :

public class ImageFile extends GenericFile { private int height; private int width; //... getters and setters public String getFileInfo() { return "Image File Impl"; } }

Baca lebih lanjut mengenai polimorfisme dalam polimorfisme kami di artikel Java.

8. Kesimpulannya

Dalam artikel ini, kami belajar mengenai konsep asas asas OOP dengan Java.

Contoh kod dalam artikel ini boleh didapati di Github.