U
G
A
S
LOGIKA DAN ALGORITMA
Pemograman Berorientasi Object atau dalam bahasa inggris lebih dikenal dengan
Object Oriented Programming (OOP) adalah sebuah paradigma dalam pemograman
yang menyelesaikan masalah program dengan menyediakan objek-objek(terdiri dari
beberapa attribute dan method) yang saling berkaitan dan disusun kedalam satu
kelompok atau yang disebut dengan class. Nantinya objek-objek tersebut akan
saling berinteraksi untuk menyelasaikan masalah program yang rumit.
dan
Konsep diatas mungkin akan lebih mudah dipahami apabila kita melihat contoh
nyata dalam kehidupan. Misalkan saat anda duduk dibangku sekolah, anda pasti
ditempatkan dalam satu kelas yang berisikan siswa lainnya yang sama dengan anda.
Kita dapat menyimpulkan bahwa kelas itu sama dengan class yang kita gunakan
dalam OOP dan siswa-siswi yang berada dalam kelas tersebut sama dengan objek-
objek yang ada didalam class itu juga.
Untuk memahami topik ini dengan sedikit lebih baik, terdapat beberapa istilah
ataupun konsep dasar yang dapat dipahami dengan sedikit penjelasan dan
contohnya. Konsep-konsep tersebut adalah :
Encapsulation
Inheritance
Saat membuat objek-objek dalam sebuah class, mungkin kita sering menemukan
sifat yang sama antar objek dan menulisnya berulang kali sebanyak objek yang
memiliki sifat tersebut. Hal itu tentu terlalu merepotkan dan memerlukan waktu
yang lebih lama. Oleh karena itu terdapat suatu konsep dalam OOP yang mampu
membantu kita dalam mengatasi masalah tersebut. Inheritance merupakan
hubungan antara dua objek atau lebih dimana akan terdapat sebuah objek utama
yang mewariskan attribute atau method yang dimilikinya kepada objek lain, baik
itu keseluruhan atau sebagian.
Misalkan saat kita membuat sebuah sistem informasi kampus yang akan diakses
oleh Dosen dan Mahasiswa. Kedua objek tersebut pasti memiliki attribut yang sama
seperti nama, umur, alamat, dan lainnya. Untuk menghindari penulisan ulang ketiga
attribut tersebut disetiap objek, ada baiknya kita membuat objek baru yang mampu
menyimpan ketiga attribute tersebut dan nantinya akan diwariskan kepada objek
Dosen dan Mahasiswa seperti gambar disamping. Lalu bagaimana objek Person
mengetahui apakah objek Dosen atau objek Mahasiswa yang mengaksesnya? Untuk
menghindari kebingungan saat diakses maka Objek Dosen dan Mahasiswa memiliki
attribute pembeda yang didefinisikan dalam masing-masing objek yaitu IdDosen
dan NIM mahasiswa. Pengaksesan ini juga erat kaitannya
dengan Polymorphism dimana sebuah objek yang diakses menggunakan konsep
inheritance juga memiliki attribute-attribute pembeda untuk mengedintifikasi setiap
objek tersebut.
Abstraction
Abstraction adalah konsep dimana terdapat berbagai objek yang sejenis, namun
pada saat memiliki impelementasi yang berbeda-beda. Kita dapat mengambil
sebuah objek dari contoh sebelumnya seperti objek Dosen. Dosen memiliki
kepentingan yang berbeda terhadap matakuliah yang tersedia dalam satu semester
akademik, namun sistem akan selalu mengenali objek Dosen sebagai suatu entitas
yang sama walaupun memiliki kepentingan yang berbeda-beda.
Composition
Composition adalah konsep dimana sebuah class terdiri dari beberapa bagian objek
yang terpisah dan memiliki fungsi yang berbeda-beda. Contoh paling mudah untuk
kita pahami adalah kembali pada contoh pertama. Tubuh manusia disusun oleh
beberapa class seperti tangan, kaki, kepala dan sebagainya. Class tangan terdiri dari
beberapa objek seperti Jari, Siku, dan Lengan. Kumpulan dari beberapa objek akan
membangun sebuah class dan kumpulan dari beberapa class akan membangun
sebuah program yang kita inginkan.
Fungsional
def increment(a):
return a + 1
Pada contoh lain, pemrograman fungsional tidak melakukan iterasi dalam struktur
data seperti list, stack dan lain-lain. Untuk melakukan iterasi terhadap data, teknik
yang digunakan biasanya dengan fungsi map() dan reduce().
Cara kerjanya, fungsi map() berguna mengumpulkan item sebagai elemen baru dan
disimpan dalam koleksi kosong. Fungsi map() melakukan iterasi untuk setiap
koleksi dan menyimpan setiap nilai dalam koleksi baru yang kemudian
dikembalikan sebagai koleksi baru.
print squares
Apa saja sih keuntungan yang disediakan pemrograman fungsional? Ini dia.
Pemrograman Konkuren
Sebuah sistem komputer harus menangani beberapa program (task) yang harus
dieksekusi bersama dalam sebuah lingkungan(baik mono atau multi prosesor).
Pada pemrograman konkuren, kita tidak lagi berpikir sekuensial, melainkan harus
menangani komunikasi dan sinkronisasi antar program.
Alasan Pemilihan Pemrograman Konkuren bagi Pemrogram
Lebih memahami tentang arsitektur komputer
Design compiler
Beberapa permasalahan sebagian besar dipecahkan dengan menggunakan
co-operating proses
Mengurangi waktu pengerjaan/pelaksanaan proses
Perbedaan Operasi secara Sekuensial dan Konkuren
Operasi Sekuensial Operasi Konkuren
- O ─ O – -- O ─ O ─ O ─ O → -- │ │ -- > - O ─ O –
X= 5 X=A*B+C
Y= 3 * X + 4 Y=3*A+7
Bahasa Pemrograman Konkuren Java, C#, Erlang, Occam, Limbo, SR, Ada
Sifat-sifat Konkurensi
Sinkronisasi Dua buah proses dikatakan berkomunikasi jika aksi dari sebuah
proses sepenuhnya mendahului proses berikutnya. Sinkronisasi berhubungan
dengan komunikasi.
Nondeterministic Sebuah program dikatakan non-deterministic bila memiliki
lebih dari satu evaluasi strategi yang memungkinkan dan bebeda, yang
memberikan hasil-hasil yang berbeda.
Mutual Exclusion Sebuah proses kadang membutuhkan akses yang eksklusif
terhadap sumber daya. Misalnya ketika sebuah proses memperbaiki struktur data,
tidak ada proses lain yang mengakses data yang sama
pemrograman deklaratif
Sebagai contoh:
Dalam bahasa fungsional murni , seperti Haskell , semua fungsi tanpa efek
samping , dan perubahan status hanya direpresentasikan sebagai fungsi yang
mengubah keadaan, yang secara eksplisit direpresentasikan sebagai objek kelas
pertama dalam program. Meskipun bahasa fungsional murni adalah non-imperatif,
mereka sering menyediakan fasilitas untuk menggambarkan efek fungsi sebagai
serangkaian langkah. Bahasa fungsional lainnya, seperti Lisp , OCaml dan Erlang ,
mendukung campuran pemrograman prosedural dan fungsional.
Beberapa bahasa pemrograman logis , seperti Prolog , dan bahasa query basis
data , seperti SQL , sementara pada prinsipnya deklaratif, juga mendukung gaya
pemrograman prosedural.
Menentukan Bilangan Genap atau Ganjil
Deskripsi :
Algoritma :
Read Bilangan
Else
Endif
Logikanya : sama seperti kita akan menukarkan 1 gelas air susu dengan 1 gelas air
kopi kita anggap gelas A berisi air susu dan gelas B berisi air kopi, gelas yang
mula mula berisi air susu ingin menjadi air kopi dan juga sebaliknya gelas yang
mula mula berisi kopi ingin menjadi berisikan air susu.
Untuk menukarkannya tentu kita membutuhkan gelas tambahan sebagai
penampung salah satu air yang akan ditukar, kita anggap gelas C yang akan
menampung sementara. Benar begitu kan ? Kalo tidak ada gelas tambaha mau
bagaimana hayoh tuh nukerinnya ? :D
program pertukaranduavariabel;
{ I.S. : mengubah variabel angka 1 menjadi variabel angka 2 dan variabel angka 2
menjadi variabel angka 1 }
{ F.S. : menampilkan output angka 1 dan angka 2 yang bertukar dengan variabel
bantuan }
uses crt;
var
angka1,angka2,temp : integer;
begin
{ memasukan variabel angka yang mau ditukar }
writeln('Pertukaran Angka');
writeln('----------------');
write('Masukan Angka ke-1 = ');readln(angka1);
write('Masukan Angka ke-2 = ');readln(angka2);
writeln;
{ proses Pertukaran }
angka1 := angka1;
angka2 := angka2;
temp := angka1;
angka1 := angka2;
angka2 := temp;
{ menampilkan hasil pertukaran angka }
writeln('Angka ke-1 menjadi = ',angka1);
write('Angka ke-2 menjadi = ',angka2);
readln;
end.
Tampilan program :
menukar_tiga_buah_bilangan_bulat
{ I.S. : user memasukan nilai x,y dan z dengan bilangan bulat }
{ F.S. : menampilkan hasil pertukaran tempat x,y,z menjadi y,z,x }
Kamus :
x,y,z,temp : integer
Algoritma :
Input(x)
Input(y)
Input(z)
x ←x
y ← y
z ← z
temp ← x {temp sebagai variable bantuan}
x ← y
y ← z
z ← temp
Output('Nilai x menjadi = ',x)
Output('Nilai y menjadi = ',y)
Output('Nilai z menjadi = ',z)
#include <iostream>
#include <string>
string nama;
string alamat;
string nim;
string jurusan;
cout<<"Nama : ";
getline (cin, nama);
cout<<"Alamat : ";
cout<<"NIK : ";
cout<<"Jurusan : ";
cout<<endl;
cout<<"DATA MAHASISWA"<<endl;
cout<<"------------------------------"<<endl;
cout<<"Nama : "<<nama<<endl;
cout<<"Alamat : "<<alamat<<endl;
cout<<"NIK : "<<nim<<endl;
cout<<"Jurusan : "<<jurusan<<endl;
}
Hasil Ouput
Penjelasan:
Pada program ini kita membuat 4 variabel yaitu nama, alamat,nim, jurusan
semuanya bertipe string.
Program akan meminta pengguna untuk memasukan setiap nilai dan akan disimpan
pada masing-masing variabel. Nilai yang dimasukan kita menggunakan
perintah getline. Apa itu perintah getline ?
Perintah getline sejatinya sama dengan perintah cin yang berfungsi sebagai
perintah masukan (input). Mungkin kalian sering menggunakan perintah cin saat
ingin input data (saat program running). walaupun kedua perintah tersebut pada
dasarnya sama namun terdapat perbedaan loh dari keduanya.
Artikel lainnya : Contoh program C++ sederhana
Jika kalian perhatikan fungsi cin mempunyai kelemahan dimana perintah ini akan
menganggap karakter kosong (spasi) sebagai akhir dari sebuah inputan, sehingga
tidak jarang ketika kita ingin mengetikan lebih dari 1 kata maka fungsi cin akan
menggangap inputan berakhir saat kata pertama lalu spasi kita ketikan. Dengan
demikian fungsi cin hanya dapat menampung satu kata saja tanpa spasi. Berbeda
dengan fungsi getline dimana fungsi ini dapat menampung lebih dari satu kata.