JavaRush /Java Blog /Random-ID /Prinsip OOP

Prinsip OOP

Dipublikasikan di grup Random-ID
Halo! Pernahkah Anda bertanya-tanya mengapa Java didesain seperti itu? Dalam artian Anda membuat kelas, berdasarkan kelas tersebut - objek, kelas memiliki metode, dll. Tetapi mengapa struktur bahasanya sedemikian rupa sehingga program terdiri dari kelas dan objek, dan bukan sesuatu yang lain? Mengapa konsep “objek” diciptakan dan dikedepankan? Apakah semua bahasa bekerja dengan cara ini dan, jika tidak, apa manfaatnya bagi Java? Seperti yang Anda lihat, ada banyak sekali pertanyaan :) Mari kita coba menjawabnya masing-masing dalam kuliah hari ini.

Prinsip OOP:

  1. Warisan
  2. Abstraksi
  3. Enkapsulasi
  4. Polimorfisme

Apa itu pemrograman berorientasi objek (OOP)

Tentu saja, Java terdiri dari objek dan kelas karena suatu alasan. Ini bukan kemauan penciptanya, atau bahkan penemuan mereka. Masih banyak bahasa lain yang berbasis objek. Bahasa pertama disebut Simula, dan ditemukan pada tahun 1960-an di Norwegia. Simula antara lain memperkenalkan konsep “ kelas ” dan “ metode ”. Prinsip pemrograman berorientasi objek - 2
Kristen Nygaard dan Ole Johan Dahl - pencipta Simula
Tampaknya Simula adalah bahasa kuno menurut standar pemrograman, tetapi hubungan “keluarga” mereka dengan Java dapat dilihat dengan mata telanjang. Kemungkinan besar, Anda dapat dengan mudah membaca kode yang tertulis di dalamnya dan menjelaskan secara umum apa fungsinya :)
Begin
  Class Rectangle (Width, Height); Real Width, Height;

   Begin
      Real Area, Perimeter;

      Procedure Update;
      Begin
        Area := Width * Height;
              OutText("Rectangle is updating, Area = "); OutFix(Area,2,8); OutImage;
        Perimeter := 2*(Width + Height);
              OutText("Rectangle is updating, Perimeter = "); OutFix(Perimeter,2,8); OutImage;
      End of Update;

      Update;
      OutText("Rectangle created: "); OutFix(Width,2,6);
      OutFix(Height,2,6); OutImage;
   End of Rectangle;

       Rectangle Class ColouredRectangle (Color); Text Color;

  Begin
      OutText("ColouredRectangle created, color = "); OutText(Color);
      OutImage;
        End of ColouredRectangle;


         Ref(Rectangle) Cr;
   Cr :- New ColouredRectangle(10, 20, "Green");
End;
Contoh kode diambil dari artikel Simula - 50 tahun OOP . Seperti yang Anda lihat, Java dan nenek moyangnya tidak jauh berbeda satu sama lain :) Hal ini disebabkan kemunculan Simula menandai lahirnya konsep baru - pemrograman berorientasi objek. Wikipedia memberikan definisi OOP sebagai berikut: Pemrograman berorientasi objek (OOP) adalah metodologi pemrograman yang didasarkan pada representasi program sebagai kumpulan objek, yang masing-masing merupakan turunan dari kelas tertentu, dan kelas-kelas tersebut membentuk hierarki warisan. Menurut saya, ini sangat sukses. Anda baru saja mulai belajar Java, tetapi hampir tidak ada kata-kata di dalamnya yang asing bagi Anda :) Saat ini, OOP adalah metodologi pemrograman yang paling umum. Selain Java, prinsip OOP digunakan dalam banyak bahasa populer yang mungkin pernah Anda dengar. Ini adalah C++ (secara aktif digunakan oleh pengembang game komputer), Objective-C dan Swift (mereka menulis program untuk perangkat Apple), Python (paling diminati dalam pembelajaran mesin), PHP (salah satu bahasa pengembangan web paling populer), JavaScript (lebih sederhananya katakan apa yang tidak mereka lakukan) dan banyak lainnya. Sebenarnya apa saja “prinsip” OOP tersebut? Mari kita ceritakan lebih detail.

Prinsip OOP

Ini adalah dasar-dasarnya. 4 fitur utama yang bersama-sama membentuk paradigma pemrograman berorientasi objek. Memahami mereka adalah kunci untuk menjadi seorang programmer yang sukses. Prinsip pemrograman berorientasi objek - 3

Prinsip 1. Warisan

Kabar baiknya adalah Anda sudah familiar dengan beberapa prinsip OOP! :) Kami telah menemukan warisan beberapa kali dalam perkuliahan, dan kami punya waktu untuk mengerjakannya. Warisan 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. Mengapa warisan diperlukan dan apa manfaatnya? Pertama-tama, penggunaan kembali kode. Bidang dan metode yang dijelaskan di kelas induk dapat digunakan di kelas turunannya. Jika semua jenis mobil memiliki 10 bidang umum dan 5 metode yang identik, Anda hanya perlu memasukkannya ke dalam kelas induk Auto. Anda dapat menggunakannya di kelas turunan tanpa masalah. Keuntungan yang kuat: baik secara kuantitatif (lebih sedikit kode) dan, sebagai hasilnya, secara kualitatif (kelas menjadi lebih sederhana). Pada saat yang sama, mekanisme pewarisan sangat fleksibel, dan Anda dapat menambahkan fungsionalitas yang hilang di turunan secara terpisah (beberapa bidang atau perilaku khusus untuk kelas tertentu). Secara umum, seperti dalam kehidupan biasa: kita semua mirip dengan orang tua kita dalam beberapa hal, tetapi berbeda dari mereka dalam beberapa hal :)

Prinsip 2. Abstraksi

Ini adalah prinsip yang sangat sederhana. Abstraksi berarti menonjolkan ciri-ciri utama dan paling signifikan dari suatu objek dan sebaliknya - membuang ciri-ciri sekunder yang tidak penting. Mari kita tidak menemukan kembali roda dan mengingat contoh dari ceramah lama tentang kelas. Katakanlah kita membuat lemari arsip karyawan perusahaan. Untuk membuat objek karyawan, kami menulis sebuah kelas Employee. Karakteristik apa yang penting untuk dijelaskan dalam arsip perusahaan? Nama lengkap, tanggal lahir, nomor jaminan sosial, nomor identifikasi pajak. Namun kecil kemungkinannya dalam kartu jenis ini kita membutuhkan tinggi badan, warna mata, dan warna rambutnya. Perusahaan tidak memerlukan informasi tentang karyawan tersebut. Oleh karena itu, untuk kelas Employeekita akan mengatur variabel String name, int age, int socialInsuranceNumberdan int taxNumber, dan kita akan mengabaikan informasi yang tidak diperlukan bagi kita, seperti warna mata, dan mengabstraksikannya. Namun jika kita membuat katalog foto model untuk sebuah agensi, situasinya berubah drastis. Untuk menggambarkan seorang model fesyen, tinggi badan, warna mata dan warna rambut sangat penting bagi kami, namun nomor NPWP tidak diperlukan. Oleh karena itu, di kelas Modelkita membuat variabel String height, String hair, String eyes.

Prinsip 3: Enkapsulasi

Kami sudah menemukannya. Enkapsulasi di Java berarti membatasi akses ke data dan kemampuan untuk mengubahnya. Seperti yang Anda lihat, ini didasarkan pada kata “kapsul”. Dalam “kapsul” ini kami menyembunyikan beberapa data penting bagi kami yang tidak ingin diubah oleh siapa pun. Contoh sederhana dari kehidupan. Anda memiliki nama depan dan belakang. Semua orang yang Anda kenal mengenal mereka. Namun mereka tidak memiliki akses untuk mengubah nama depan dan belakang Anda. Proses ini, bisa dikatakan, “dirangkum” di kantor paspor: Anda hanya dapat mengubah nama depan dan belakang Anda di sana, dan hanya Anda yang dapat melakukannya. “Pengguna” lain memiliki akses hanya baca ke nama depan dan belakang Anda :) Contoh lainnya adalah uang di apartemen Anda. Membiarkannya terlihat jelas di tengah ruangan bukanlah ide yang baik. Setiap “pengguna” (orang yang datang ke rumah Anda) akan dapat mengubah jumlah uang Anda, mis. jemput mereka. Lebih baik merangkumnya dalam brankas. Hanya Anda yang memiliki akses dan hanya dengan kode khusus. Contoh nyata enkapsulasi yang telah Anda kerjakan adalah pengubah akses ( private, publicdll.) dan pengambil-penyetel. Jika bidang agekelas Cattidak dienkapsulasi, siapa pun dapat menulis:
Cat.age = -1000;
Dan mekanisme enkapsulasi memungkinkan kita untuk melindungi bidang agedengan metode penyetel, di mana kita dapat memeriksa bahwa usia tidak boleh berupa angka negatif.

Prinsip 4. Polimorfisme

Polimorfisme adalah kemampuan untuk memperlakukan beberapa tipe seolah-olah mereka adalah tipe yang sama. Dalam hal ini, perilaku objek akan berbeda bergantung pada tipenya. Kedengarannya agak rumit? Mari kita cari tahu sekarang. Mari kita ambil contoh paling sederhana - binatang. Mari kita buat kelas Animaldengan satu metode - voice(), dan dua turunannya - Catdan Dog.
public class Animal {

   public void voice() {

       System.out.println("Voice!");
   }
}

public class Dog extends Animal {


   @Override
   public void voice() {
       System.out.println("Bow-wow!");
   }
}

public class Cat extends Animal {

   @Override
   public void voice() {
       System.out.println("Meow!");
   }
}
Sekarang mari kita coba membuat tautan Animaldan menetapkannya sebagai objek Dog.
public class Main {

   public static void main(String[] args) {

       Animal dog = new Dog();
       dog.voice();
   }
}
Menurut Anda metode mana yang akan dipanggil? Animal.voice()atau Dog.voice()? Metode kelasnya akan disebut Dog: Guk-guk! Kami membuat referensi Animal, tetapi objek berperilaku seperti itu Dog. Jika perlu, dia bisa bertingkah laku seperti kucing, kuda, atau binatang lainnya. Hal utama adalah menetapkan referensi tipe umum Animalke objek kelas turunan tertentu. Hal ini masuk akal, karena semua anjing adalah binatang. Inilah yang kami maksud ketika kami mengatakan “objek akan berperilaku berbeda tergantung pada jenisnya.” Jika kita membuat objek Cat-
public static void main(String[] args) {

   Animal cat = new Cat();
   cat.voice();
}
metode ini voice()akan menampilkan "Meong!" Apa yang dimaksud dengan “kemampuan untuk bekerja dengan beberapa tipe seolah-olah mereka adalah tipe yang sama”? Caranya juga cukup mudah. Bayangkan kita sedang membuat salon tata rambut untuk hewan. Salon rambut kita harus bisa memotong semua hewan, jadi kita akan membuat metode shear()(“memotong”) dengan parameter Animal– hewan yang akan kita potong.
public class AnimalBarbershop {

   public void shear(Animal animal) {

       System.out.println("The haircut is ready!");
   }
}
Dan sekarang kita bisa meneruskan shearobjek Catdan objek ke metode ini Dog!
public static void main(String[] args) {

   Cat cat = new Cat();
   Dog dog = new Dog();

   AnimalBarbershop barbershop = new AnimalBarbershop();

   barbershop.shear(cat);
   barbershop.shear(dog);
}
Berikut ini contoh yang jelas: kelas AnimalBarbershopbekerja dengan tipe Catseolah- Dogolah tipenya sama. Pada saat yang sama, mereka mempunyai perilaku Catyang berbeda Dog: mereka menggunakan suara mereka secara berbeda.

Alasan munculnya OOP

Mengapa konsep pemrograman baru ini - OOP - muncul ? Pemrogram memiliki alat yang berfungsi: bahasa prosedural, misalnya. Apa yang mendorong mereka untuk menciptakan sesuatu yang baru secara fundamental? Pertama-tama, rumitnya tugas yang mereka hadapi. Jika 60 tahun yang lalu tugas seorang programmer terlihat seperti “menghitung persamaan matematika ini dan itu”, sekarang mungkin terdengar seperti “mengimplementasikan 7 akhiran yang berbeda untuk game STALKER tergantung pada keputusan apa yang dibuat pengguna pada momen game A, B, C, D , E, F dan kombinasi solusi ini." Tugas-tugas tersebut, seperti yang Anda lihat, jelas menjadi lebih kompleks selama beberapa dekade terakhir. Ini berarti tipe data menjadi lebih kompleks. Ini adalah alasan lain munculnya OOP. Contoh persamaan dapat dengan mudah diselesaikan menggunakan primitif biasa; tidak diperlukan objek di sini. Namun akan sulit untuk menggambarkan masalah di akhir permainan tanpa menggunakan beberapa kelas yang telah Anda temukan. Tetapi pada saat yang sama, cukup mudah untuk menggambarkannya dalam kelas dan objek: kita jelas membutuhkan kelas Game, kelas Stalker, kelas Ending, kelas Keputusan Pemain, kelas Game Moment, dan seterusnya. Artinya, bahkan tanpa memulai memecahkan suatu masalah, kita dapat dengan mudah membayangkan “sketsa” solusinya di kepala kita. Kompleksitas permasalahan yang semakin meningkat memaksa programmer untuk membagi permasalahan menjadi beberapa bagian. Namun dalam pemrograman prosedural hal ini tidak mudah. Dan sering kali program tersebut merupakan “pohon” dari sekumpulan cabang dengan semua opsi yang memungkinkan untuk pengoperasiannya. Tergantung pada kondisi tertentu, program dijalankan di satu cabang atau cabang lainnya. Untuk program kecil, opsi ini nyaman, tetapi membagi tugas besar menjadi beberapa bagian sangatlah sulit. Kebutuhan inilah yang menjadi alasan lain munculnya OOP. Konsep ini memberi pemrogram kemampuan untuk membagi suatu program menjadi sekumpulan “modul” kelas, yang masing-masing melakukan bagian tugasnya sendiri. Semua objek, berinteraksi satu sama lain, membentuk kerja program kita. Selain itu, kode yang kita tulis dapat digunakan kembali di tempat lain dalam program, sehingga juga menghemat banyak waktu.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION