CodeGym /Java Blog /Acak /Prinsip OOP
John Squirrels
Level 41
San Francisco

Prinsip OOP

Dipublikasikan di grup Acak
Hai! Dalam pelajaran hari ini, kita akan berbicara tentang Prinsip Pemrograman Berorientasi Objek. Pernahkah Anda bertanya-tanya mengapa Java dirancang persis seperti itu? Maksud saya, Anda mendeklarasikan kelas dan membuat objek berdasarkan kelas, kelas memiliki metode, dll. Tetapi mengapa bahasanya terstruktur sehingga program terdiri dari kelas dan objek, dan bukan yang lain? Mengapa konsep "objek" ditemukan dan diletakkan di garis depan? Apakah semua bahasa dirancang seperti ini? Jika tidak, keuntungan apa yang diberikannya pada Java? Seperti yang Anda lihat, ada banyak pertanyaan :) Mari kita coba menjawabnya masing-masing dalam pelajaran hari ini.

Apa itu pemrograman berorientasi objek (OOP)?

Tentu saja, Java tidak terdiri dari objek dan kelas hanya untuk bersenang-senang. Mereka bukanlah kehendak pencipta Java, dan bahkan bukan penemuan mereka. Ada banyak bahasa lain berdasarkan objek. Bahasa seperti pertama disebut "Simula". Itu ditemukan kembali pada 1960-an di Norwegia. Terlebih lagi, konsep "kelas" dan "metode" muncul di Simula. Menurut standar pengembangan perangkat lunak, "Simula" tampak seperti bahasa kuno, tetapi siapa pun dapat melihat "kemiripan keluarganya" dengan Java. Prinsip Pemrograman Berorientasi Objek - 1Anda mungkin dapat dengan mudah membaca kode yang ditulis dalam bahasa ini dan menjelaskan secara garis besar 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;
Kode contoh kode ini diambil dari "Simula - 50 years of OOP" oleh Weekly-geekly. Seperti yang Anda lihat, Java tidak jauh berbeda dari kakeknya :) Ini karena kemunculan Simula menandai lahirnya konsep baru: pemrograman berorientasi objek. Wikipedia mendefinisikan OOP seperti ini: "Pemrograman Berorientasi Objek (OOP) adalah paradigma pemrograman berdasarkan konsep "objek", yang dapat berisi data, dalam bentuk bidang (sering dikenal sebagai atribut), dan kode, dalam bentuk prosedur (sering dikenal sebagai metode). Menurut pendapat saya, ini adalah definisi yang sangat bagus. Belum lama ini Anda mulai mempelajari Java, tetapi definisi ini mungkin tidak mengandung kata yang tidak Anda ketahui :) Hari ini OOP adalah metodologi pemrograman yang paling umum. Selain di Jawa, Prinsip OOP digunakan dalam banyak bahasa populer yang mungkin pernah Anda dengar. Misalnya, C++ (aktif digunakan dalam pengembangan game), Objective-C dan Swift (digunakan untuk menulis program untuk perangkat Apple), Python (paling populer dalam pembelajaran mesin), PHP (salah satu bahasa pengembangan web terpopuler), JavaScript ( lebih mudah untuk mengatakan apa yang tidak digunakan) dan banyak lainnya. Jadi, apa saja prinsip-prinsip OOP? Kami akan memberi tahu Anda secara detail. apa prinsip-prinsip OOP sih? Kami akan memberi tahu Anda secara detail. apa prinsip-prinsip OOP sih? Kami akan memberi tahu Anda secara detail.

Prinsip OOP

Ini adalah dasar dari yayasan. 4 fitur utama yang bersama-sama membentuk paradigma pemrograman berorientasi objek. Memahami mereka sangat penting untuk menjadi programmer yang sukses.

Prinsip 1. Warisan

Kabar baik: Anda sudah mengetahui beberapa prinsip OOP! :) Kami telah menemukan warisan beberapa kali dalam pelajaran, dan kami berhasil menggunakannya. Warisan adalah mekanisme yang memungkinkan Anda mendeskripsikan kelas baru berdasarkan kelas (induk) yang sudah ada. Dengan demikian, kelas baru meminjam properti dan fungsionalitas kelas induk. Untuk apa warisan dan keuntungan apa yang diberikannya? Yang terpenting, penggunaan kembali kode. Bidang dan metode yang dideklarasikan di kelas induk dapat digunakan di kelas turunan. Jika semua jenis mobil memiliki 10 bidang umum dan 5 metode identik, Anda hanya perlu memindahkannya ke Otomatiskelas induk. Anda dapat menggunakannya di kelas keturunan tanpa masalah. Keuntungan yang solid: baik kuantitatif (lebih sedikit kode) dan, sebagai hasilnya, kualitatif (kelas menjadi lebih sederhana). Selain itu, pewarisan sangat fleksibel — Anda dapat menambahkan fungsi tulis terpisah yang hilang dari turunan (beberapa bidang atau perilaku yang khusus untuk kelas tertentu). Secara umum, seperti dalam kehidupan nyata, kita semua agak mirip dengan orang tua kita, tetapi juga berbeda dari mereka :)

Prinsip 2. Abstraksi

Ini adalah prinsip yang sangat sederhana. Abstraksi berarti mengidentifikasi karakteristik utama, paling signifikan dari sesuatu, sekaligus membuang apa pun yang kecil dan tidak penting. Tidak perlu menemukan kembali roda. Mari kita ingat contoh dari pelajaran lama tentang kelas. Misalkan kita sedang membuat sistem pengarsipan untuk karyawan perusahaan. Untuk membuat objek "karyawan", kami telah menulis kelas Karyawan . Karakteristik apa yang penting untuk menggambarkannya dalam sistem pengarsipan perusahaan? Nama, tanggal lahir, SSN, dan ID karyawan. Tapi sepertinya kita tidak membutuhkan tinggi badan, warna mata, atau warna rambut karyawan untuk jenis rekaman ini. Perusahaan tidak membutuhkan informasi seperti itu tentang seorang karyawan. Jadi, di kelas Karyawan , kami mendeklarasikan variabel berikut:, int usia , int SocialSecurityNumber , dan int Id karyawan . Dan kami mengabstraksi informasi yang tidak perlu seperti warna mata. Namun, jika kami membuat sistem pengarsipan untuk agensi model, situasinya berubah drastis. Tinggi model, warna mata, dan warna rambut adalah karakteristik penting, tetapi SSN-nya sama sekali tidak relevan bagi kami. Jadi, di kelas Model , kami membuat variabel berikut: Tinggi string , Rambut string , Mata string .

Prinsip 3. Enkapsulasi

Kami sudah mengalami ini. Di Jawa, enkapsulasi berarti membatasi kemampuan untuk membaca dan mengubah data. Seperti yang Anda lihat, istilah ini didasarkan pada kata "kapsul". Kami akan menggunakan "kapsul" untuk menyembunyikan beberapa data penting yang tidak ingin diubah oleh orang lain. Inilah contoh sederhana dari kehidupan nyata. Anda memiliki nama depan dan nama belakang. Semua temanmu mengenal mereka. Tetapi mereka tidak memiliki kemampuan untuk mengubah nama depan atau belakang Anda. Kami dapat mengatakan bahwa proses untuk melakukan itu "dirangkum" oleh sistem pengadilan: Anda dapat mengubah nama belakang Anda hanya melalui panitera, dan hanya Anda yang dapat melakukannya. "Pengguna" lain memiliki akses "hanya baca" ke nama depan dan belakang Anda :) Contoh ilustrasi lainnya adalah uang tunai yang disimpan di rumah. Membiarkannya terlihat jelas di tengah kamar Anda bukanlah ide yang baik. Setiap "pengguna" (orang yang datang ke rumah Anda) akan dapat mengubah jumlah uang Anda, yaitu mereka dapat mengambil uang Anda. Akan lebih baik untuk merangkumnya dalam brankas. Maka akses hanya akan tersedia untuk Anda dan hanya dengan menggunakan kode khusus. Contoh nyata enkapsulasi yang telah Anda gunakan adalah pengubah akses (pribadi, publik, dll.), serta penyetel dan pengambil. Jika Anda tidak merangkum fileBidang usia kelas kucing , lalu siapa pun dapat menulis:

Cat.age = -1000;
Mekanisme enkapsulasi memungkinkan kita melindungi bidang usia dengan metode penyetel, di mana kita dapat memastikan bahwa usia tidak dapat disetel ke angka negatif.

Prinsip 4. Polimorfisme

Polimorfisme adalah kemampuan untuk bekerja dengan beberapa jenis seolah-olah mereka adalah jenis yang sama. Selain itu, perilaku objek akan berbeda tergantung pada jenisnya. Apakah itu terdengar rumit? Mari kita pahami sekarang. Ambil contoh paling sederhana: hewan. Buat kelas Animal dengan metode speak() tunggal , dan dua subclass — Cat dan Dog .

public class Animal {

   public void speak() {
      
       System.out.println("Hello!");
   }
}

public class Dog extends Animal {
  
   @Override
   public void speak() {
       System.out.println ("Woof-woof!");
   }
}

public class Cat extends Animal {

   @Override
   public void speak() {
       System.out.println("Meow!");
   }
}
Sekarang kita akan mencoba mendeklarasikan variabel referensi Hewan dan menugaskan objek Anjing ke dalamnya.

public class Main {

   public static void main(String[] args) {

       Animal dog = new Dog();
       dog.speak();
   }
}
Menurut Anda metode apa yang akan dipanggil? Animal.speak() atau Dog.speak() ? Metode di kelas Anjing akan dipanggil: Woof-woof! Kami membuat referensi Hewan , tetapi objeknya berperilaku seperti Anjing . Jika perlu, ia bisa berperilaku seperti kucing, kuda, atau binatang lain. Yang penting adalah menugaskan subkelas tertentu ke variabel referensi Hewan umum . Ini masuk akal, karena semua anjing adalah binatang. Itulah yang kami pikirkan ketika kami mengatakan "perilaku objek akan berbeda tergantung pada jenisnya." Jika kita membuat objek Cat ...

public static void main(String[] args) {

   Animal cat = new Cat();
   cat.speak();
}
metode speak () akan menampilkan "Meow!" Tapi apa yang kami maksud dengan 'kemampuan untuk bekerja dengan beberapa tipe seolah-olah mereka adalah tipe yang sama'? Ini juga cukup mudah. Bayangkan kita membuat tempat pangkas rambut untuk hewan. Tempat pangkas rambut kita harus dapat memangkas hewan apa pun, jadi kita membuat metode trim() dengan parameter Hewan (hewan yang dipotong).

public class AnimalBarbershop {

   public void trim(Animal animal) {

       System.out.println("The haircut is done!"); 
   }
}
Dan sekarang kita bisa meneruskan objek Kucing dan Anjing ke metode trim() !

public static void main(String[] args) {

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

   AnimalBarbershop barbershop = new AnimalBarbershop();

   barbershop.trim(cat);
   barbershop.trim(dog);
}
Dan inilah contoh yang jelas: kelas AnimalBarbershop bekerja dengan tipe Kucing dan Anjing seolah-olah mereka adalah tipe yang sama. Pada saat yang sama, Kucing dan Anjing memiliki perilaku yang berbeda: mereka masing-masing berbicara dengan cara yang berbeda.

Mengapa kita membutuhkan OOP?

Mengapa OOP pernah muncul sebagai konsep pemrograman baru? Pemrogram memiliki alat yang berfungsi, seperti bahasa prosedural. Apa yang mendorong mereka untuk menemukan sesuatu yang baru secara fundamental? Di atas segalanya, kompleksitas tugas yang mereka hadapi. Jika 60 tahun yang lalu tugas pemrogram adalah seperti "mengevaluasi beberapa ekspresi matematika", sekarang bisa menjadi seperti "menerapkan 7 akhiran yang berbeda untuk game STALKER, tergantung pada kombinasi keputusan pemain yang dibuat pada titik A, B, C, DE , dan F dalam game." Seperti yang Anda lihat, tugas-tugas tersebut jelas menjadi lebih rumit selama beberapa dekade terakhir. Dan akibatnya, tipe data menjadi lebih rumit. Ini adalah alasan lain mengapa OOP muncul. Ekspresi matematis dapat dievaluasi dengan mudah menggunakan primitif biasa. Tidak ada objek yang dibutuhkan di sini. Tetapi tugas dengan akhiran game akan sulit untuk dijelaskan bahkan tanpa menggunakan kelas khusus. Yang mengatakan, cukup mudah untuk menggambarkannya menggunakan kelas dan objek. Tentunya, kita membutuhkan beberapa kelas: Game, Stalker, Ending, PlayerDecision, GameEvent, dan seterusnya. Dengan kata lain, bahkan tanpa mulai menyelesaikan masalah, kita dapat dengan mudah "membuat sketsa" solusi di kepala kita. Meningkatnya kompleksitas tugas memaksa pemrogram untuk membaginya menjadi beberapa bagian. Tapi ini tidak mudah dilakukan dalam pemrograman prosedural. Dan cukup sering sebuah program seperti pohon dengan banyak cabang yang mewakili semua kemungkinan jalur eksekusi. Bergantung pada kondisi tertentu, satu cabang program atau lainnya dieksekusi. Untuk program kecil, ini nyaman, tetapi sangat sulit untuk membagi masalah besar menjadi beberapa bagian. Ini adalah alasan lain munculnya OOP. Paradigma ini memberi programmer kemampuan untuk membagi program menjadi sekumpulan "modul" (kelas), yang masing-masing melakukan bagian pekerjaannya sendiri. Dengan berinteraksi satu sama lain, semua objek menyelesaikan pekerjaan program kita. Selain itu, kami dapat menggunakan kembali kode kami di tempat lain dalam program, yang juga menghemat banyak waktu.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION