Langsung ke konten utama

Unggulan

Church-Turing Thesis dan Kaitannya dengan Bahasa Pemrograman - Tugas Otomata W14

Daftar Isi Pendahuluan Pengertian dan Konsep Rumusan Masalah Turing Equivalent dan Turing Complete Manfaat Turing Equivalent dan Turing Complete Contoh Bahasa yang Turing Complete dan Penjelasannya Contoh Bahasa yang Tidak Turing Complete dan Penjelasannya Kesimpulan Pendahuluan Dalam dunia ilmu komputer, pemahaman tentang batasan dan kemampuan komputasi adalah fundamental. Salah satu konsep paling mendasar yang membentuk landasan teori komputasi adalah Church-Turing Thesis. Tesis ini, meskipun bukan sebuah teorema yang dapat dibuktikan secara matematis, merupakan hipotesis kuat yang menghubungkan konsep intuitif dari "algoritma" atau "komputabilitas efektif" dengan model komputasi formal seperti Turing Machine. Dengan memahami Church-Turing Thesis, kita dapat menggali lebih dalam tentang apa yang dapat dilakukan oleh komputer dan, yang tak kalah penting, apa yang tidak dapat mereka lakukan. Esai ini akan membahas pengertian, rumusan mas...

Tugas Pertemuan 2 - Konsep Pemrograman Berorientasi Objek

 Pertemuan 2 - Konsep Pemrograman Berorientasi Objek

Semua contoh code terdapat di link ini

Kelas

Kelas adalah tipe data yang ditentukan pengguna. Kelas terdiri dari anggota data dan fungsi anggota, yang dapat diakses dan digunakan dengan membuat contoh kelas tersebut. Kelas mewakili serangkaian properti atau metode yang umum untuk semua objek dari satu tipe. Kelas seperti cetak biru untuk suatu objek.
Kelas terdiri atas 2 komponen berikut :

  1. Fields/Atribut adalah variabel yang dideklarasikan di dalam kelas dan digunakan untuk menyimpan data atau state dari objek. Setiap objek dari kelas tersebut akan memiliki salinan tersendiri dari fields ini. Dalam gambar di samping, kelas tersebut memiliki atribut model, harga, warna, dan tahun pembuatan.
  2. Methods/Metode adalah fungsi atau prosedur yang didefinisikan di dalam kelas untuk menentukan perilaku objek. Metode ini bisa mengakses dan memodifikasi fields, melakukan perhitungan, atau menjalankan logika tertentu.

Contoh : Link Source Code
Penjelasan Singkat:

  • Kelas : Mobil adalah cetak biru (blueprint) untuk objek yang akan dibuat. Kelas ini berisi atribut dan metode yang menggambarkan perilaku dan keadaan dari objek.
  • Atribut (Variabel Instance) : warna, merk, dan tahunProduksi adalah atribut yang menyimpan data atau keadaan dari objek yang dibuat dari kelas ini.
  • Konstruktor : Metode khusus Mobil digunakan untuk menginisialisasi objek saat pertama kali dibuat dengan nilai-nilai tertentu.
  • Metode : nyalakanMesin, matikanMesin, getWarna, dan setWarna adalah fungsi yang menggambarkan perilaku dari objek, seperti menyalakan mesin atau mengubah warna mobil.
  • Getter dan Setter : Digunakan untuk mengakses atau memodifikasi nilai atribut secara aman.


Objek

Objek adalah instansiasi nyata dari sebuah kelas. Ketika kelas didefinisikan, tidak ada ruang memori yang dialokasikan sampai sebuah objek dari kelas tersebut dibuat. Objek adalah entitas yang memiliki state (keadaan) dan behavior (perilaku), yang direpresentasikan oleh variabel dan metode yang didefinisikan dalam kelas.
Obyek terdiri atas 2 komponen berikut :

  1. Variabel dalam konteks OOP disebut sebagai fields atau instance variables. Mereka adalah komponen yang menyimpan data atau state dari objek. Setiap objek yang dibuat dari kelas memiliki salinan tersendiri dari variabel-variabel ini. Dalam gambar di samping, obyek tersebut memiliki variabel model : AAA, harga : 10K, warna : Orange, dan tahun pembuatan : 2015.
  2. Prosedur/Metods dalam OOP di Java disebut sebagai methods. Methods adalah fungsi atau prosedur yang mendefinisikan perilaku dari objek. Melalui metode, objek dapat melakukan tindakan atau memanipulasi data yang ada dalam variabelnya. Contoh, prosedur `nyalakanMesin()` digunakan untuk menyalakan mesin mobil. Ketika dipanggil, prosedur ini akan mencetak pesan "Mesin [model] dinyalakan." ke konsol

Contoh : Link Source Code

Penjelasan Singkat:

  • Atribut : String merk, String model, dan int tahun adalah contoh atribut yang dimiliki oleh kelas Mobil. Atribut ini merepresentasikan data atau properti dari sebuah objek.
  • Konstruktor : Mobil(String merk, String model, int tahun) adalah konstruktor yang digunakan untuk menginisialisasi objek dengan nilai-nilai awal saat objek dibuat.
  • Metode : nyalakanMesin() dan matikanMesin() adalah metode yang merepresentasikan perilaku atau tindakan yang dapat dilakukan oleh objek Mobil.
  • Objek : Mobil mobilku = new Mobil("Toyota", "Camry", 2021); adalah cara membuat objek baru dari kelas Mobil. Pada kode ini, objek mobilku dari kelas Mobil memiliki atribut merk, model, dan tahun, serta metode nyalakanMesin() dan matikanMesin() yang dapat digunakan untuk mengoperasikan objek tersebut.


Abstraksi

Objek merupakan blok penyusun Pemrograman Berorientasi Objek. Sebuah objek berisi beberapa properti dan metode. Abstraksi adalah konsep OOP yang menyembunyikan detail implementasi (properti dan metode) dan hanya menampilkan fungsionalitas penting kepada pengguna. Ini membantu dalam mengelola kompleksitas program dengan menyederhanakan interaksi dengan objek. Jenis-jenis abstaksi :

  1. Abstraksi Data berfokus pada penyembunyian detail implementasi dari data dan hanya menampilkan antarmuka yang diperlukan untuk berinteraksi dengan data tersebut. Ini melibatkan penyederhanaan representasi data dengan menyembunyikan bagaimana data tersebut disimpan atau diatur, dan hanya menampilkan apa yang perlu diketahui pengguna.
    Contoh dalam OOP: Misalnya, dalam sebuah kelas Mobil, kita bisa memiliki atribut seperti kecepatan dan bahanBakar. Abstraksi data memungkinkan kita untuk mengakses dan memanipulasi data ini melalui metode tertentu tanpa harus tahu bagaimana data ini diimplementasikan atau disimpan.
    Penyembunyian Detail: Pengguna kelas Mobil tidak perlu tahu bagaimana kecepatan dan bahanBakar disimpan atau dihitung; mereka hanya berinteraksi dengan metode getKecepatan() dan tambahKecepatan().

  2. Abstraksi proses berfokus pada penyederhanaan kompleksitas dalam cara suatu proses dilakukan. Ini mencakup penyembunyian detail implementasi dari metode atau fungsi yang menjalankan suatu proses, sehingga pengguna hanya perlu tahu apa yang dilakukan oleh metode tersebut, tanpa perlu tahu bagaimana metode itu bekerja secara internal.
    Contoh dalam OOP: Misalnya, kita memiliki metode nyalakanMesin() dalam kelas Mobil. Pengguna hanya perlu tahu bahwa metode ini menyalakan mesin, tanpa perlu tahu detail tentang bagaimana proses menyalakan mesin dilakukan.
    Penyembunyian Detail: Pengguna metode nyalakanMesin() tidak perlu tahu detail tentang bagaimana mesin dihidupkan secara teknis, seperti memeriksa sistem bahan bakar, sistem kelistrikan, dll.; mereka hanya perlu tahu bahwa mesin akan menyala ketika metode ini dipanggil.

Contoh : Link Source Code

Penjelasan Singkat:

  • Abstract Class (Mobil) : Kelas ini tidak dapat diinstansiasi secara langsung dan mengandung satu atau lebih metode abstrak. Kelas abstrak digunakan untuk mewakili konsep umum (seperti "Mobil").
  • Abstract Method (startEngine) : Ini adalah metode tanpa implementasi. Kelas yang mewarisi kelas abstrak harus memberikan implementasi untuk metode ini.
  • Subclass (Sedan) : Ini adalah kelas konkret yang mengimplementasikan metode abstrak dari kelas Mobil.
  • Main Method : Digunakan untuk menguji konsep abstraksi dengan membuat objek dari kelas Sedan dan memanggil metode yang ada. Dengan abstraksi, kita bisa menyembunyikan detail spesifik dari bagaimana mesin dinyalakan (startEngine), sehingga pengguna cukup tahu bahwa mobil bisa dinyalakan tanpa perlu tahu cara kerjanya.


Sifat - Sifat

Enkapsulasi

adalah salah satu konsep utama dalam pemrograman berorientasi objek (OOP). Enkapsulasi didefinisikan sebagai pembungkusan data di bawah satu unit. Enkapsulasi adalah proses menyembunyikan detail internal dari sebuah objek dan hanya memperlihatkan antarmuka (interface) yang diperlukan untuk berinteraksi dengan objek tersebut. Dengan enkapsulasi, data dan metode yang beroperasi pada data tersebut digabungkan menjadi satu unit, yaitu objek, dan akses ke data ini dibatasi menggunakan pengontrol akses (seperti private, protected, dan public).

Contoh : Link Source Code

Penjelasan Singkat:

  • Enkapsulasi adalah konsep OOP yang membungkus data (atribut) dan metode dalam satu unit, yaitu kelas, serta menyembunyikan detail implementasi dari luar kelas. Atribut merek dan kecepatan dalam contoh ini dideklarasikan sebagai private, sehingga hanya dapat diakses melalui metode getter dan setter yang bersifat public.
  • Dengan enkapsulasi, Anda dapat mengontrol bagaimana data dimodifikasi atau diakses. Misalnya, di dalam metode setKecepatan, ada validasi sederhana yang memastikan bahwa kecepatan hanya dapat diatur ke nilai yang positif. Ini membantu menjaga integritas data dan mencegah akses langsung yang bisa menyebabkan inkonsistensi.


Inheritance

Inheritance (pewarisan) adalah salah satu konsep fundamental dalam pemrograman berorientasi objek (Object-Oriented Programming atau OOP), termasuk di Java. Inheritance memungkinkan sebuah kelas (class) untuk mewarisi properti (fields/attributes) dan metode (methods) dari kelas lain. Dengan inheritance, kita dapat menciptakan hierarki antar kelas dan memfasilitasi reuse kode, yang berarti kita bisa menulis kode yang lebih modular dan terstruktur.
Berikut adalah penjelasan lebih detail mengenai inheritance di Java :

  1. Super Class (Parent Class/Base Class) : Kelas yang memberikan properti dan metode kepada kelas lain. Misalnya, kelas `Animal` bisa menjadi superclass yang menyediakan metode umum seperti move() atau eat().
  2. Sub Class (Child Class/Derived Class) : Kelas yang mewarisi dari superclass. Subclass bisa menggunakan semua properti dan metode yang ada di superclassnya, dan juga bisa menambahkan atau memodifikasi (override) metode tersebut. Misalnya, kelas `Dog` bisa menjadi subclass dari kelas `Animal` dan akan mewarisi metode move() dan eat().
Jenis-jenis Inheritance dalam Java :
  1. Single Inheritance : Sebuah subclass mewarisi dari satu superclass saja.
  2. Multilevel Inheritance : Sebuah subclass mewarisi dari kelas yang juga merupakan subclass dari kelas lain.
  3. Hierarchical Inheritance : Beberapa subclass mewarisi dari satu superclass.
  4. Hybrid Inheritance : Kombinasi dari dua atau lebih jenis inheritance di atas. Namun, Java tidak mendukung multiple inheritance (sebuah kelas memiliki lebih dari satu superclass) secara langsung untuk menghindari ambiguitas yang dikenal sebagai "Diamond Problem". Sebagai gantinya, Java menggunakan antarmuka (interfaces) untuk mengatasi masalah ini.

Contoh : Link Source Code

Penjelasan Singkat:

  • Pada contoh di atas, MobilSport adalah subclass yang mewarisi properti merk dan tahun, serta metode infoMobil() dari superclass Mobil.
  • MobilSport juga dapat memiliki properti atau metode tambahan, seperti kecepatanMaks dan infoMobilSport(), yang spesifik untuk subclass tersebut.


Polimorfisme

Polimorfisme memungkinkan objek untuk mengambil banyak bentuk. Ini berarti bahwa metode yang sama dapat memiliki perilaku yang berbeda berdasarkan objek yang memanggilnya. Dengan kata lain, polimorfisme memungkinkan kita untuk menggunakan antarmuka yang sama untuk objek yang berbeda dan merespons dengan cara yang spesifik terhadap objek tersebut.
Polimorfisme pada Java memiliki 2 macam yaitu diantaranya :

  1. Static Polymorphism (Polimorfisme statis).
  2. Dynamic Polymorphism (Polimorfisme dinamis).
Perbedaan keduanya terletak pada cara membuat polimorfisme. Polimorfisme statis menggunakan method overloading, sedangkan polimorfisme dinamis menggunakan method overriding.

1. Polimorfisme - Metode Overloading

Metode overloading terjadi pada sebuah class yang memiliki nama method yang sama tapi memiliki parameter dan tipe data yang berbeda. Intinya dalam sebuah class memiliki method yang sama, namun parameter dan tipe data yang berbeda. Tujuan dari method overloading yaitu memudahkan penggunaan atau pemanggilan method dengan fungsionalitas yang mirip. Overloading memungkinkan metode dengan nama yang sama untuk menangani berbagai tugas berdasarkan parameter yang diberikan. Kata kunci yang perlu diingat: “Dalam satu class”, “Nama method sama”, “Tipe data dan parameter beda”.
Aturan Method Overloading :

  • Nama method harus sama dengan method lainnya.
  • Parameter haruslah berbeda.
  • Return boleh sama, juga boleh berbeda.

Contoh : Link Source Code

Penjelasan Singkat:

  • Polimorfisme Statis : Terjadi pada saat compile-time dan disebut juga metode overloading
  • Metode Overloading : Dalam contoh ini, metode add di dalam kelas Calculator di-overload untuk menerima berbagai kombinasi tipe dan jumlah parameter yang berbeda.
  • Saat program dijalankan, metode yang dipanggil akan ditentukan berdasarkan jumlah dan tipe argumen yang diberikan saat pemanggilan.


2. Polimorfisme - Metode Overriding

Metode Overriding memungkinkan metode di subclass memiliki perilaku khusus yang berbeda dari superclassnya.
Aturan Method Overriding :

  • Mode akses overriding method harus sama atau lebih luas daripada override method.
  • Subclass hanya dapat dan boleh meng-override method superclass satu kali saja. Tidak boleh ada lebih dari satu method yang sama pada kelas.
  • Soal aturan hak akses, setiap subclass tidak boleh mempunyai hak akses method overriding yang ketat dibandingkan dengan hak akses method pada superclass ataupun parent class.

Contoh : Link Source Code

Penjelasan Singkat:

  • Polimorfisme Dinamis : Ini terjadi ketika metode yang dipanggil pada objek ditentukan saat runtime, bukan saat kompilasi. Dalam contoh ini, metode suara() dipanggil berdasarkan tipe objek yang sebenarnya (Anjing atau Kucing), meskipun referensi objek adalah dari tipe Hewan.
  • Metode Overriding : Kelas turunan (Anjing dan Kucing) mengoverride (menggantikan) implementasi metode suara() dari kelas induk Hewan, memberikan perilaku yang spesifik sesuai dengan tipe objeknya. Melalui polimorfisme dinamis, Java memungkinkan penggunaan metode yang sesuai dengan tipe objek yang sebenarnya, meskipun kita menggunakan referensi dari kelas induknya.


Komentar

Postingan Populer