C# – Control Structures, Subprograms,ADT,OOP,Concurrency,Exception & Event Handling, Programming Functional and Prolog

Hello 🙂

Ini kelompok kami 🙂 jangan lupa kunjungi blog mereka juga.

Kelompok 9

Martandy : martandy.blog.binusian.org

Kevin Yulias : kevinyou.blog.binusian.org

Eric Khantino Sunardi : ricz97.blog.binusian.org

Gabriellyan Catheline Sanger : gcathelines.blog.binusian.org


 

Control Structure

Struktur Program

Control Structure adalah struktur kendali dari sebuah program. Struktur program tersebut terdiri dari:
1. Sequential (berurutan): adalah struktur kendali default, dimana statement dalam suatu program dijalankan satu per satu secara berurutan.
2. Selection (percabangan): adalah struktur kendali dimana terdapat lebih dari satu pilihan.
3. Iteration (perulangan): struktur pemograman yang akan dilakukan terus menerus jika suatu kondisi terpenuhi.

Selection
Selection Statement terbagi menjadi 2 jenis yaitu:
1. Two-selection structure

Dapat digunakan dengan 2 cara, yaitu:
a. If-else
Terdapat 1 kondisi dan terdapat 2 pernyataan yaitu if dan else. Bila kondisi bernilai benar maka pernyataan if yang dijalankan, jika bernilai salah maka pernyataan else yang dijalankan.

Bentuk umum:

if(kondisi)
{
Statement;
}
else
{
Statement;
}

Contoh kode:

b. Inline conditional operator ?:
Kondisi ini harus mengevaluasi TRUE atau FALSE. Jika kondisi TRUE, first_expression dievaluasi dan menjadi hasilnya. Jika kondisi adalah FALSE, second_expression dievaluasi dan menjadi hasilnya. Hanya satu dari dua ekspresi dievaluasi.

Bentuk umum:
Kondisi ? first_expression : second_expression;

2. Multiple-selection structure

Dapat digunakan dengan 2 cara, yaitu:
1. If-else if
Terdapat lebih dari 2 kondisi dan terdapat pernyataan sesuai banyaknya kondisi tersebut. Statement yang akan dijalankan adalah statement yang berada di dalam kondisi yang sesuai.

Bentuk umum:

if(kondisi1)
{
Statement;
}
else if(kondisi2)
{
Statement;
}
else //opsional
{
Statement;
}
Contoh kode:

2. Switch statement
Switch statement digunakan ketika program kita ingin melakukan pengecekan untuk beberapa kemungkinan nilai dari suatu variabel.

Iteration
Iteration statement terbagi menjadi 3, yaitu:
1. For dan foreach
For digunakan untuk menuliskan jenis pengulangan yang banyaknya sudah pasti atau telah diketahui sebelumnya.

Bentuk umum:

for ( [pendahuluan] ; [kondisi]; [iterasi] )
{
[perintah]
}

Contoh kode:

Foreach juga merupakan salah satu perulangan yang ada didalam C#. Foreach digunakan apabila kita ingin melakukan perulangan pada elemen-elemen pada suatu array tanpa kita perlu menspesifikasikan batas atas larik yang bersangkutan.

Bentuk umum:

int[] a = {masukkan angka array};
foreach (int i in a)
{
(Masukkan logic yang ingin anda masukkan)
}

Contoh kode:

string[] club = {“juve”,”inter”,”milan”};
foreach (string c in club ) {
Console.WriteLine(c);
};

2. While
While akan berulang mengeksekusi suatu statement selama kondisi yang diberikan adalah benar.

Bentuk umum:

while(condition)
{
statement(s);
}

Contoh kode:

3. Do-While
Berbeda dengan While yang mengecek kondisi loop pada awal looping Do-While mengecek kondisi pada akhir dari loop. Karena kondisi muncul di akhir loop, maka statement dalam loop akan dieksekusi sekali sebelum kondisi itu dicek. Jika kondisi benar, maka akan kembali ke do dan statement akan dieksekusi lagi sampai kondisinya adalah salah.
Bentuk umum:

do
{
statement(s);
} while ( condition );
Contoh kode:

Terdapat satu bentuk penulisan yang mengkombinasikan beberapa statements yaitu nested statement. Nested statement adalah penggunaan selection/iteration statement didalam sebuah selection/iteration statement lainnya.

Contoh kode:

Kode diatas adalah contoh nested if, dimana terdapat suatu if di dalam if lainnya.


Subprograms

Apa itu Subprogram

Subprogram adalah urutan instruksi program yang diperintahkan untuk melakukan tugas spesifik dan menjadi konsep bahasa pemrograman yang paling banyak dipakai.
Subprogram bisa disebut :
• Subroutine
• Procedure
• Function
• Routine
• Method

Dalam bahasa C# SUBPROGRAM biasanya
memakai istilah : Function.

Fundamental Subprogram

Ada 2 fasilitas abstraksi mendasar dapat dimasukkan dalam bahasa pemrograman: Proses Abstraksi dan Abstraksi Data.
Proses Abstraksi
• Ditekankan dari Hari-hari Awal
Data Abstraksi
• Ditekankan pada era 1980-an

Dasar dari Subprograms memiliki karakteristik seperti :
• Setiap Subprograms memiliki satu titik masuk
• Hanya ada satu eksekusi subprogram yang bisa dilakukan kapan saja
• Pengontrolan selalu mengembalikan panggilan atau perintah ketika eksekusi subprogram di batalkan.

Untuk Memanggil Subprogram, kita cukup menuliskan namanya dari :
• Kurung Pembuka
• Parameter
• Kurung Penutup

Closures
Closure adalah serangkaian kode yang bisa dieksekusi belakangan, namun dia tetap berada pada tempat pertama dia dibuat.
Closure tetap bisa menggunakan local variabel dari metode yang membuatnya bahkan setelah metode tersebut telah selesai dieksekusi.

Biasanya diimplementasikan di C# dengan Metode Anonymous dan Lambda Expressions.

Coroutine
Coroutine adalah sebuah fungsi yang bisa menghentikan sebentar (Pause) dan melanjutkan kembali (Resume) sebuah eksekusi di tempat tertentu.

Generic Subprogram
• Mengambil parameter dari tipe yang berbeda aktivasi.
• Overloaded subprogram memberikan ad hoc polymorphism.

class MyClass {
public static T DoIt(T p1) {

}
}
// call DoIt without specifying the generic parameter:
int myInt=MyClass.DoIt(17); // calls DoIt
string myStr = MyClass.DoIt(‘apples’); // calls DoIt

Operator Overloading
Keyword operator dalam C# mendeklarasi suatu fungsi yang menenetukan apa arti sebuah symbol operator ketika di terapkan/digunakan pada sebuah instance (variable, method dll.) sebuah Class.

Dengan ini, kita memberi operator tersebut lebih dari satu fungsi/arti, atau yang disebut dengan “Overload”. Compiler bisa membedakan fungsi/arti beda dari sebuah operator dengan mengecek tipe operan.

public static Box operator+ (Arguments/Paramenters)
{
//Statement
}
Local Referencing Environment

Variable yang di definisikan didalam subprogram disebut local variable. Local variable bisa berupa static atau stack dynamic

Advantages of using stack dynamic:
• Support fungsi rekursi/pengulangan.
• Penyimpanan untuk variable local dibagi antara subprogram

Kerugian menggunakan stack dynamic adalah:
• Waktu Alokasi/dealokasi
• Subprogram tidak history-sensitive

Keuntungan menggunakan Static variable:
o Variable local static bisa diakses dengan lebih cepat.
o Tidak ada run-time overhead (Penambahan waktu extra) untuk alokasi dan dealokasi
o Subprogram bisa menjadi history sensitive

Kerugian menggunakan Static variable:
o Tidak support rekursi/pengulangan
o Penyimpanan tidak bisa dibagi dengan variable local dari subprogram yang tidak aktif

Overloaded Subprogram
• Satu nama dipakai beberapa subprogram
• Subprogram yang memiliki nama yang sama
• Parameter yang membedakan antar subprogram
• Overloading dilakukan pada bahasa pemrograman berorientasi objek.

Parameter That are subprograms
• Fungsi tidak bisa pass sebagai parameters, tetapi pointer menuju fungsi dapat pass.
• Tipe pointer merupakan protocal dari sebuah fungsi.
• Jadi parameters bisa mengecek berdasarkan tipe data.
Referencing Environment
• Shallow binding: The environment of the call statement that enacts the pass subprogram
• Deep binding: The environment of the definition of the passed subprogram
• Ad hoc binding: The environment of the call statement that passed the subprogram

Parameter Passing Method
Melewatkan actual parameter sebagai formal parameter pada subprogram. Metode passing parameter ada 2:

• Call-by-Value
Nilai dari actual parameter dilewatkan ke formal parameter
Ex:
Procedure Subprog(a : integer; b integer);
begin
a: = a + 2;
b: = b – 1;
End
Var q,w : integer;
begin
q: = 5;
w: = 4;
Subprog(q,w);
writeln(q);
writeln(w);
End

• Call-by-Reference
Alamat dari actual parameter dilewatkan ke formal parameter
Ex :
Procedure Subprog(var a : integer; var b integer);
begin
a := a + 2;
b := b – 1;
End
Var q,w : integer;
begin
q := 5;
w := 4;
Subprog(q,w);
writeln(q);
writeln(w);


 

Abstract Data Types

Encapsulation
Enkapsulasi adalah pembungkus, pembungkus disini dimaksudkan untuk menjaga suatu proses program agar tidak dapat diakses secara sembarangan atau di intervensi oleh program lain. Konsep enkapsulasi sangat penting dilakukan untuk menjaga kebutuhan program agar dapat diakses sewaktu-waktu, sekaligus menjaga program tersebut.

Dalam kehidupan sehari hari enkapsulasi dapat dimisalkan sebagai arus listrik pada generator, dan sistem perputaran generator untuk menghasilkan arus listrik. Kerja arus listrik tidak mempengaruhi kerja dari sistem perputaran generator, begitu pula sebaliknya. Karena didalam arus listrik tersebut, kita tidak perlu mengetahui bagaimana kinerja sistem perputaran generator, apakah generator berputar kebelakang atau ke depan atau bahkan serong. Begitu pula dalam sistem perputaran generator, kita tidak perlu tahu bagaimana arus listrik, apakah menyala atau tidak.
Begitulah konsep kerja dari enkapsulasi, dia akan melindungi sebuah program dari akses ataupun intervensi dari program lain yang mempengaruhinya. Hal ini sangat menjaga keutuhan program yang telah dibuat dengan konsep dan rencana yang sudah ditentukan dari awal.
Encapsulation bisa dilakukan dengan menggunakan access modifier.
Ada beberapa Access Modifiers yang digunakan dalam C#, yaitu :
1. Public : Bisa diakses dari berbagai kode di program.
2. Private : Hanya bisa diakses oleh anggota dari kelas yang sama.
3. Protected : Hanya bisa diakses oleh anggota dari kelas yang sama dan turunannya.
4. Internal : Hanya bisa diakses oleh kumpulan yang sama.
5. Protected Internal : Hanya bisa diakses oleh kumpulan yang sama dan turunannya.
Naming Encapsulations
Mengapa memberi nama encapsulation sangat penting dalam mengembangkan aplikasi besar?
– Untuk merapikan/organisir program menjadi logical units untuk kompilasi. Ini memperboleh bagian-bagian program untuk kompilasi kembali settelah perubahan yang terisolasi. Ada encapsulation tipe lain yang dibutuhkan untuk membangun program besar
– Untuk menyembunyikan nilai struktur object data dalam class, biar tidak bisa secara langsung oleh yang lain
– Setiap library bisa membuat nama encapsulation mereka sendiri untuk tidak konflik dengan nama yang telah didefinisikan di library lain atau dalam kode.
– Beberapa koleksi kode bisa dimasukkan dalam satu encapsulation yang sama, meskipun mereka disimpan pada tempat yang berbeda.
Data Abstraction
Sebuah Data Abstrak adalah sebuah data yang ditetapkan pengguna dimana bisa terpenuhi apabila memenuhi 2 kondisi :
• Representasi dari objek-objek tipe ini tersembunyi dari unit program yang menggunakan objek ini, jadi hanya operasi yang memungkinkan yang didukung dalam tipe Representasi dari objek-objek tipe ini tersembunyi dari unit program yang menggunakan objek ini, jadi hanya operasi yang memungkinkan yang didukung dalam tipe definitif
• Deklarasi dari Tipe dan Protokol dari pengoperasian pada tipe di objek karena terdapat sebuah unit sintatic. Program Unit lainnya diperbolehkan menciptakan variabel dari tipe Deklarasi dari Tipe dan Protokol dari pengoperasian pada tipe di objek karena terdapat sebuah unit sintatic. Program Unit lainnya diperbolehkan menciptakan variabel dari tipe terdefinisi.
Mengapa Data Abstraction
• Kehandalan dari menyembunyikan data representasi, Kode Pengguna tidak bisa diakses oleh objek secara langsung dari jenis atau tergantung pada representasi, megizinkan pengguna merubah representasi tanpa mengubah / mempengaruhi kode pengguna tersebut
• Mengurangi Kode dan Variabel dimana para programmer mesti sadar
• Konflik nama lebih minim
• Menyediakan Metode dari Organisasi Program
• Aids modifiability (segala sesuatu yang berkaitan dengan struktur data adalah bersama-sama)
• Kompilasi Terpisah


Object Oriented Programming

Pengertian OOP (Object Oriented Programming)
Object Oriented Programming(OOP)adalah sebuah pendekatan untuk pengembangan /development suatu software dimana dalam struktur software tersebut didasarkan kepada interaksi object dalam penyelesaian suatu proses/tugas. Interaksi tersebut mengambil form dari pesan-pesan dan mengirimkannya kembali antar object tersebut. Object akan merespon pesan tersebut menjadi sebuah tindakan /action atau metode.

Mengapa menggunakan OOP?
Mengapa OOP dibangun dalam sebuah paradigma yang luas untuk menyelesaikan masalah bisnis? Bahasa prosedural mengatur program dalam mode barisan linier yang bekerja dari atas ke bawah. Dengan kata lain, program adalah kumpulan dari tahapan yang dijalankan setelah yang lain berjalan. Programming tipe ini bekerja dengan baik untuk program kecil yang berisi code relative sedikit, tetapi pada saat program menjadi besar, mereka cenderung susah untuk di-manage dan di-debug. Dalam usaha untuk me-manage program, struktur programming diperkenalkan cara untuk mem-break down code-code tersebut melalui functions dan procedures.
Konsep OOP (Object Oriented Programming)
1. Kelas Abstrak (Class Abstraksi)
2. Enkapsulasi (encapsulation)
3. Pewarisan (Inheritance)
4. Polimorfisme (polymorphism)

1. Kelas Abstrak (Class Abstraksi)
• Kelas merupakan deskripsi abstrak informasi dan tingkah laku dari sekumpulan data.
• Kelas dapat diilustrasikan sebagai suatu cetak biru(blueprint) atau prototipe yang digunakan untuk menciptakan objek.
• Kelas merupakan tipe data bagi objek yang mengenkapsulasi data dan operasi pada data dalam suatu unit tunggal.
• Kelas mendefinisikan suatu struktur yang terdiri atas data kelas (data field), prosedur atau fungsi (method), dan sifat kelas (property).

2. Enkapsulasi (encapsulation)
• Istilah enkapsulasi sebenarnya adalah kombinasi data dan fungsionalitas dalam sebuah unit tunggal sebagai bentuk untuk menyembunyikan detail informasi.
• Proses enkapsulasi memudahkan kita untuk menggunakan sebuah objek dari suatu kelas karena kita tidak perlu mengetahui segala hal secara rinci.
• Enkapsulasi menekankan pada antarmuka suatu kelas, atau dengan kata lain bagaimana menggunakan objek kelas tertentu.
• Contoh: kelas mobil menyediakan antarmuka fungsi untuk menjalankan mobil tersebut, tanpa kita perlu tahu komposisi bahan bakar, udara dan kalor yang diperlukan untuk proses tersebut.
3. Pewarisan (Inheritance)
• Kita dapat mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada.
• Penurunan sifat ini bisa dilakukan secara bertingkattingkat, sehingga semakin ke bawah kelas tersebut menjadi semakin spesifik.
• Sub kelas memungkinkan kita untuk melakukan spesifikasi detail dan perilaku khusus dari kelas supernya.
• Dengan konsep pewarisan, seorang programmer dapat menggunakan kode yang telah ditulisnya pada kelas super berulang kali pada kelas-kelas turunannya tanpa harus menulis ulang semua kodekode itu.
4. Polimorfisme (polymorphism)
• Polimorfisme merupakan kemampuan objekobjek yang berbeda kelas namun terkait dalam pewarisan untuk merespon secara berbeda terhadap suatu pesan yang sama.
• Polimorfisme juga dapat dikatakan kemampuan sebuah objek untuk memutuskan method mana yang akan diterapkan padanya, tergantung letak objek tersebut pada jenjang pewarisan.
• Method overriding.
• Method name overloading.
Karakteristik OOP (Object Oriented Programming)
• Semua adalah objek.
• Komputasi dilakukan dengan komunikasi antar objek. Setiap objek berkomunikasi dengan objek yang lain melalui pengiriman dan penerimaan pesan.
• Sebuah pesan merupakan permintaan atas sekumpulan aksi dengan semua argumen yang diperlukan untuk menyelesaikan suatu tugas tertentu.
• Setiap objek memiliki memori sendiri, yang dapat terdiri dari objek-objek lainnya.
• Setiap objek adalah wakil atau representasi dari suatu kelas. Sebuah kelas dapat mewakili sekelompok objek yang sama.
• Kelas merupakan kumpulan tingkah laku yang berkaitan dengan suatu objek. Jadi, semua objek yang merupakan wakil dari kelas yang sama dapat melakukan aksi yang sama pula.
• Kelas-kelas diorganisasikan ke dalam struktur pohon yang berakar tunggal, yang dinamakan dengan jenjang pewarisan (inheritance hierarchy).
• Setiap objek pada umumnya memiliki tiga sifat, yaitu keadaan, operasi dan identitas objek.
• Operasi merupakan tindakan yang dapat dilakukan oleh sebuah objek.
• Keadaan objek merupakan koleksi dari seluruh informasi yang dimiliki oleh objek pada suatu saat.
• Informasi yang terkandung pada objek tersebut pada akhirnya memberikan identitas khusus yang membedakan suatu objek dengan objek lainnya.
Contoh Program

class Kendaraan{
int posisi1;
int kecepatan;
int posisi2;
int pergerakan;
int getPosisi1(){
return posisi1;
}
void setPosisi1(int theposisi1){
posisi1 = theposisi1;
}
int getKecepatan(){
return kecepatan;
}
void setKecepatan(int thekecepatan){
kecepatan = thekecepatan;
}

posisi2 bergerak(){
int jarak;
int waktu;
posisi2 = getKecepatan * waktu;
}
}
class Mobil extends Kendaraan{
}
class KendaraanTestDrive{
Mobil avanza = new Mobil;
avanza.setPosisi1(30);
avanza.setKecepatan(45);
avans


Concurrency

Tingkatan Concurrency
Concurrency bisa terjadi pada 4 Tingkatan :
– Tingkatan Instruksi Mesin
– Tingkatan Bahasa Pernyataan yang Tinggi
– Tingkatan Unit
– Tingkatan Program

Karena tidak ada masalah bahasa dalam concurrency instruction dan tingkatan concurrency program, mereka tidak dialamatkan disini.

Sebuah perintah atau proses atau thread adalah sebuah unit program yang bisa dieksekusi konkuren dengan unit program lainnya

Tugas berbeda dari subprogram biasa dalam :
• Sebuah perintah bisa secara implisit dimulai
• Ketika sebuah unit program memulai eksekusi dari penugasan, maka itu tidak dihentikan
• Ketika Eksekusi Perintah selesai, control mungkin tidak kembali ke panggilan awal

Biasanya Perintah dikerjakan bersama-sama.

Dua Tipe Pengategorian Perintah
• Tugas Berat mengeksekusi didalam masing-masing ruang alamatnya
• Tugas Ringan menjalankan didalam ruang alamat yang sama, namun lebih efisien
• Sebuah perintah bersifat memisahkan jika tidak berkomunikasi dengan atau mempengaruhi dari eksekusi dari tugas lain dalam program apapun caranya.

Penugasan Sinkronisasi
Sebuah Mekanisme yang bisa mengatur dari yang diminta dari tugas yang dieksekusi
Ada 2 Jenis Sinkronisasi :
• Cooperation synchronization : Task A harus menunggu Task B untuk menyelesaikan beberapa kegiatan spesifik sebelum Task A bisa melanjutkan eksekusinya.
Contoh : Masalah Producer-Konsumer
• Competition synchronization : 2 Task atau lebih harus menggunakan beberapa sumber yang tidak bisa digunakan secara bersamaan.
Contoh : Sebuah Konter Bersama
Komunikasi Penugasan diperlukan untuk sinkronisasi, yang didukung oleh :
• Variable Nonlokal Bersama
• Banyak Parameter
• Pesan Passing

Penjadwalan / Scheduler
Menyediakan Sinkronisasi yang membutuhkan sebuah mekanisme untuk menunda eksekusi tugas
Kontrol Tugas Eksekusi di jaga oleh sebuah program yang disebut Scheduler, yang memetakan eksekusi tugas ke prosesor yang tersedia.

Serikat Eksekusi Penugasan / Task Execution Scheduler
• New – sudah dibentuk namun belum dimulai
• Ready – Sudah siap dijalankan namun belum juga dijalankan (karena tidak tersedia prosesor)
• Running
• Blocked – sudah dijalankan, namun tidak bisa dilanjutkan (Biasanya menunggu beberapa event yang terjadi)
• Dead – Tidak lagi berfungsi dalam bentuk apapun

Liveness and Deadlock
Liveness adalah sebuah karakteristik dimana sebuah unit program bisa atau tidak memiliki Kode Sequential dimana unit tersebut akan menyelesaikan eksekusinya
Dalam Lingkungan Bersamaan, sebuah Tugas bisa dengan mudahnya kehilangan livenessnya
Jika semua tugas dalam lingkungan bersamaan bisa hilang livenessnya, maka itu disebut deadlock.

Design Issues for Concurrency / Isi Design untuk Concurrency memperhatikan beberapa hal, yakni :
• Kompetisi dan Kooperasi sinkronisasi ( Hal yang Paling Penting)
• Mengontrol Penjadwalan Tugas
• Bagaimana sebuah aplikasi bisa mempengaruhi penjadwalan Tugas
• Bagaimana dan Kapan Tugas-Tugas dimulai dan dieksekusi
• Bagaimana dan kapan ketika Tugas dibentuk
Methods of Providing Synchronization / Methode Pendukung Sinkronisasi :
• Semaphores / Tiang Sinyal
• Monitors
• Message Passing

Menurut Dijkstra pada 1965,
Sebuah Semaphore adalah Sebuah Struktur Data yang terdapat sebuah konter dan antrian untuk menyimpan tugas Deskriptor
Tugas Deskriptor adalah sebuah struktur Data yang menyimpan semua informasi relevan mengenai eksekusi tugas
Semaphores bisa digunakan untuk mengimplementasi perlindungan pada kode yang bisa diakses berbagi dengan struktur data
Semaphores hanya memiliki 2 Operasi, Wait/Menunggu dan Release/Melepas (Biasanya disebut P dan V oleh Dijkstra)
Semaphores bisa digunakan untuk mendukung sinkronisasi baik Sinkronisasi Competition dan Sinkronisasi Cooperation

Cooperation Synchronization with Semaphores / Sinkronisasi Kooperatif dengan Semaphores
Contohnya : Buffer Bergantian
Buffer diimplementasikan sebagai sebuah ADT dengan operasi DEPOSIT dan FETCH sebagai satu-satunya cara untuk mengakses The Buffer.
Menggunakan 2 Semaphores untuk Koperatif, yakni emptyspots dan fullspots.
Konter The Semaphore biasanya digunakan untuk menyimpan angka-angka pada empty spots dan full spots pada The Buffer
DEPOSIT pertama harus mengecek emptyspots untuk melihat apa ada ruang dalam The Buffer
• Jika Ada ruang, maka konter emptyspots dikurangi dan nilai dimasukkan
• Jika Tidak Ada Ruang, maka Pemanggil/TheCaller disimpan dalam antrian emptyspots
• Ketika DEPOSIT sudah selesai, maka kenaikkannya harus di konter fullspots
FETCH harus dicek fullspots untuk melihat apa ada nilainya
• Jika terdapat fullspot, maka konter fullspots dikurangi dan nilai dihilangkan
• Jika tidak ada nilai pada The Buffer, maka Pemanggil mesti diletakkan dalam antrian fullspots
• Ketika FETCH sudah selesai, kenaikkannya terdapat pada emptyspots
Pengoperasikan dari FETCH dan DEPOSIT dalam The Semaphores dapat terwujud meskipun terdapat 2 Operasi Semaphore yang disebut Wait/Menunggu dan Release/Lakukan

 

Competition Synchronization with Semaphores / Kompetitif Sinkronisasi pada Semaphores
Pada Semaphore ketiga, Named Access/Access Bernama, biasanya digunakan untuk mengontrol akses (Pada Sinkronisasi Kompetitif)
• Konter Access hanya bisa bernilai 0 dan 1
• Semaphore ini biasanya disebut binary semaphore
Biasanya pada wait dan release pastinya bersifat atomic
Evaluation of Semaphores / Evaluasi Semaphores
• Penyalahgunaan semaphores bisa menyebabkan kegagalan dalam Sinkronisasi Cooperation, seperti The Buffer akan meluap jika menunggu fullspots yang tersisa.
• Penyalahgunaan Semaphores bisa menyebabkan kegagalan dalam Sinkronisasi Competition, seperti program akan deadlock jika pelepasan akses masih tersisa
Competition Synchronization / Sinkronisasi Kompetitif
Data yang dibagi adalah penduduk dalam monitor (Dibandingkan sebagai unit klien)
Semua akses penduduk dalam monitor berlaku berdasarkan :
• Implementasi monitor dijamin akses sinkronisasinya hanya dengan mengizinkan 1 akses dalam satu waktu.
• Pemanggilan prosedur monitor adalah hal implisit bergilir jika monitor sibuk saatnya dipanggil

Cooperation Synchronization / SInkronisasi Kooperatif
Kooperasi antara Proses masih dalam sebuah penugasan programming
• Seorang Programer mesti menjamin bahwa sebuah buffer yang dibagi tidak mengalami kekurangan atau kelimpahan dalam mengurus pembagian data

Seorang Programmer mesti bisa memikirkan alur jalan proses dari Subprogram yang mereka buat dengan alur seperti dibawah ini :
Message Passing
Message Passing adalah sebuah model umum untuk concurrency.
• Dia menjadi model baik semaphores dan monitors
• Tidak hanya untuk SInkronisasi Competition
Ide Utama : Komunikasi penugasan seperti melihat seorang dokter, yang kebanyakkannya dia menunggu Anda atau Anda menunggu dia, namun ketika kalian berdua siap, kalian tetap bersama atau bertemu/Rendezvous
Dibawah ini adalah cara kerja Rendezvous

Message Passing: Server/Actor Tasks
Sebuah tugas yang memiliki klausa accept, tapi tidak ada kode adalah sebuah server penugasan/Server Task (Contoh diatas adalah sebuah server task)
Sebuah Tugas tanpa klausa accept, disebut sebuah actor task/penugasan acting
Kondisi : – Sebuah actor task bisa mengirim pesan ke task lainnya
– Seorang pengirim mesti tahu entry name pada receiver, namun bukan vice versa
(Asimetrik)
Multiple Entry Points / Banyak Titik Masuk
Tugas-Tugas bisa memiliki lebih dari satu titik masuk / entry point
dengan kondisi :
• Spesifikasi tugas memiliki sebuah entry klausa/clause untuk masing-masingnya
• Pada badan tugas memiliki sebuah accept clause/klausa untuk setiap entry clause, yang diletakkan dalam sebuah select clause, yang terdapat dalam sebuah loop

Cooperation Synchronization with Message Passing / Sinkronisasi Kooperatif dengan Message Passing
• Provided by Guarded accept clauses
when not Full(Buffer) =>
accept Deposit (New_Value) do

end
• An accept clause with a with a when clause is either open or closed
– A clause whose guard is true is called open
– A clause whose guard is false is called closed
– A clause without a guard is always open
Didukung oleh perlindungan accept clauses
when not Full(Buffer) =>
accept Deposit (New_Value) do

end
Sebuah Accept clause dengan sebuah dengan sebuah/when clause antara dibuka atau ditutup dengan kriteria :
• Sebuah Clause yang dilindungi adalah benar maka dipanggil Open
• Sebuah Clause yang dilindungi adalah salah maka dipanggil Closed
• Sebuah Clause tanpa dilindungi adalah selalu terbuka

Message Passing Priorities / Prioritas Message Passing
• The priority of any task can be set with the pragma Priority
pragma Priority (static expression);
• The priority of a task applies to it only when it is in the task ready queue

Prioritas dalam segala tugas bisa disetel dengan pragma Prioritas
pragma Priority (static expression);
Prioritas dari sebuah pengaplikasian tugas hanya bisa ketika tugas siap diantri pengerjaannya


Exception Handling dan Event Handling

Exception Handling
Exception adalah setiap kejadian yang tidak biasa, yang salah atau tidak, yang terdeteksi oleh perangkat keras atau perangkat lunak dan yang mungkin memerlukan pengolahan khusus. Pengolahan khusus yang mungkin diperlukan saat pengecualian terdeteksi disebut Exception Handling. Proses ini dilakukan oleh unit kode atau segmen yang disebut exception handler.

Alasan dibuat adanya exception handling adalah karena dalam Bahasa yang memiliki exception handling, program diperbolehkan untuk “menjebak” beberapa pengecualian, sehingga memberikan kemungkinan memperbaiki masalah dan program tersebut dapat tetap berjalan, sedangkan pada Bahasa pemrograman yang tidak memiliki fitur exception handling control kan pergi ke sistem operasi, di mana pesan ditampilkan dan kemudian menghentikan jalannya program tersebut.
Built-in Exception Handling memiliki beberapa kelebihan , yaitu:
1. Error detection code membuat program menjadi berantakan.
2. Exception handler mendorong programmer untuk mempertimbangkan banyak kemungkinan kesalahan.
3. Exception propagation memperbolehkan penggunaan ulang dari kode exception handling.
Gambar Exception Handling Control Flow

Event Handling
Event adalah pemberitahuan bahwa sesuatu yang spesifik telah terjadi, seperti klik mouse. Event Handling adalah suatu metode untuk menangani sebuah event/aksi yang diberikan pengguna kepada suatu komponen GUI. Event Handler adalah segmen kode yang dieksekusi sebagai respons dari sebuah event.

Exception Handling dan Event Handling pada C#

Exception dalam C# digunakan untuk mengindikasikan terjadinya error pada sebuah aplikasi yang sedang digunakan. Pada aplikasi yang menggunakan .NET Framework, ketika terjadi error maka program tersebut secara otomatis akan menampilkan Exception. Contohnya ketika membuat suatu program pembagian dengan pembagi berupa 0. Karena angka tidak dapat dibagi dengan 0, maka program akan menampilkan Exception.

Error yang tidak di-handle akan membuat pengguna aplikasi kebingungan dengan pesan yang bersifat cryptic seperti itu, terlebih lagi terkadang pesan yang ditampilkan mungkin dapat digunakan seorang hacker untuk meretas aplikasi kita.

Ada beberapa properti yang disediakan class Exception dan turunannya. Pesan yang ditampilkan tersebut biasanya menggunakan properti Message dan StackTrace, dapat dilihat pada output program sebelumnya.
Disinilah Exception Handling digunakan. Kita dapat menampilkan pesan yang user-friendly ketika terjadi error dengan menggunakan kerangka try – catch – finally. Berikut merupakan format try – catch –finally pada C#:Ketika terjadi error pada salah satu baris kode pada blok try, maka program akan langsung “lompat” ke blok catch dan sisa kode yang terdapat pada blok try tidak dieksekusi. Pada blok catch ini kita dapat menampilkan pesan akibat error yang di-throw dari blok try, dan pada blok finally digunakkan untuk untuk membersihkan tindakan yang dilakukan dalam blok try. Seperti pada program di bawah ini
Pada C# tidak ada statement throw, dimana throw ada exception yang di deklarasikan secara eksplisit.
C# merupakan salah satu Bahasa .NET dan memiliki 2 pendekatan yaitu Windows Forms dan Windows Presentation Foundation. Berikut merupakan ketentuan-ketentuan event handling pada C#:
• Aplikasi merupakan subclass dari kelas Form (defined in System.Windows.Forms).
• Tidak perlu untuk membuat bingkai atau panel untuk menempatkan komponen GUI.
• Objek Label digunakan untuk menempatkan teks dalam window.
• Radio buttons are objects of the RadioButton class.
• Komponen diposisikan dengan menetapkan objek Point baru ke Lokasi komponen
private RadioButton plain = new RadioButton();
plain.Location = new Point(100, 300);
plain.Text = ″Plain″;
controls.Add(plain);
• Semua event handler pada C# memiliki protokol yang sama, return type-nya adalah void dan dua parameter yang terdiri dari dari jenis object and EventArgs.
• Penamaan Event handler bebas.
• Radio button di test dengan Boolean Checked property dari button tersebut.
private void rb_CheckedChanged (object o,EventArgs e)
{
if (plain.Checked) …

}
• Untuk membuat sebuah event, kita harus membuat objek EventHandler object baru dan ditambahkan ke delegais event yang telah didefinisikan sebelumnya.
• Ketika sebuah radio button berubah dari unchecked menjadi checked, the CheckedChanged event terjadi.
• Jika handler dinamakan rb_CheckedChanged, kita dapat memasukannya ke radio button dengan nama plain dengan cara:
plain.CheckedChanged +=
new EventHandler (rb_CheckedChanged);

Berikut merupakan contoh kode event handling pada C#:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace OOP_praktikumForm
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
//event Handler
void BtnLihatClick(object sender, EventArgs e)
{
MessageBox.Show(“Nama Anda “+textBox1.Text+”\t\nAlamat Anda = “+textBox2.Text);
}
}
}
Gambar output rangkaian kode event handling di atas.


 

Functional Programming dalam C#

Apa itu Functional Programming
Berlainan sekali dengan paradigma prosedural, program fungsional harus diolah lebih dari program prosedural (oleh pemroses bahasanya), karena itu salah satu keberatan adalah kinerja dan efisiensinya. Karena itu, dalam bahasa pemrograman fungsional, program adalah fungsi hasil komposisi dari fungsi-fungsi lain, apakah fungsi itu dasar atau hasil komposisi dari fungsi dasar. Bahasa pemrograman fungsional memperoleh hasil dengan cara mengaplikasikan fungsi terhadap argumen atau parameternya,yang juga dapat berupa fungsi.

Bahasa pemrograman fungsional menonjol dalam kemampuan struktur datanya. Karena bahasa ini tidak dibatasi oleh variabel yang berasosiasi dengan lokasi memori, maka sebuah struktur data cukup ditangani sebagai sebuah nilai.

Mengapa Functional Programming?
Mengapa kita menggunakan functional Programming?

– Singkat
Karena program cenderung lebih ringkas dibandingkan program terstruktur.

– Mudah dimengerti
Program fungsional seringkali lebih mudah untuk dimengerti, contohnya quicksort, tidak terlalu diperlukan pengetahuan mengenai quicksort.

– Tidak ada tumpukan memori
Tidak ada kemungkinan memperlakukan integer sebagai pointer, atau dilanjutkan dengan pointer null.

– Manajemen memori yang terintegrasi
Kebanyakan program rumit perlu mengalokasikan memori dinamis dari tumpukan (heap). Setiap bahasa fungsional memudahkan pemrogram dari beban manajemen penyimpanan tersebut. Penyimpanan dialokasikandan diinisialisaikan secara implisit, dan diselamatkan secara otomatis oleh kolektor sampah.

Functional Programming pada C#
Functional programming dalam C# sering kali di campur dengan Object Oriented Programming. Dalam C#, kamu bisa menggunakan programming imperative menggunakan konsep OOP, tetapi anda juga bisa menggunakan programming deklaratif, dalam programming deklaratif, kamu menggunakan cara yang lebih descriptive untuk mendefinisikan apa yang kamu mau dan bukan cara kamu ingin melakukan sesuatu.
Tipe Function

Dalam functional programming pada C#, kita bias mendefinisi function generic atau delegate. Delegate dikenal sebagai definisi function prototype dimana mendefinisikan function.

Contoh definisi delegate
delegate double MyFunction(double x);
Delegate ini mendefinisikan sebuah prototype function yang mempunyai argument double dan mengembalikan nilai double. Tipe delegate ini cocok dengan banyak fungsi trigonometric, logaritma, exponent, polynomial, dan fungsi lainnya. Contohnya, kamu bias mendefinisikan variable fungsi yang berisi fungsi matematika, dan menjalankannya via suatu variable fungsi, dan masukkan hasil dalam variable yang lain, contohnya
MyFunction f = Math.Sin;
double y = f(4); //y=sin(4)
f = Math.Exp;
y = f(4); //y=exp(4)

Lambda Expressions

Lambda expression Delegate
() => 3 delegate(){ return 3; }
() => DateTime.Now delegate(){ return DateTime.Now; };
(x) => x+1 delegate(int x){ return x+1; }
x => Math.Log(x+1)-1 delegate(int x){ return Math.Log(x+1)-1; }
(x, y) => x+y delegate(int x, int y){ return x+y;}
(x, y) => x+y delegate(string x, string y){ return x+y;}
Lambda harus ada bagian untuk definisi nama argument, jika lambda expresson tidak mempunyai parameter, harus digantti dengan buka kurung dan tutup kurung (), Jika hanya ada satu parameter dalam list, kurung tidak diperlukan. Setelah simbol =>, kamu harus memasukkan expression yang akan di kembalikan
Lambda expression sama dengan function regular (Delegate), tetapi mereka lebih cocok ketika kamu membuat function yang singkat. Selain itu, kelebihannya adalah kamu tidak harus mendefinisikan tipe parameter secara eksplisit. Pada contoh diatas, lambda expression (x,y) => x+y bias digunakan untuk menambah angka, tetapi juga bisa digunakan untuk menyatukan string.
Perbedaan Functional Programming dan Imperative Programming

A. Imperative Programming
Pemrograman Imperatif adalah paradigma pemrograman yang mempunyai karakteristik berupa status dan insruksi/perintah untuk mengubah status program. Status diwakili oleh variabel sedangkan instruksi diwakili oleh statemen.
Pemrograman Imperatif merupakan paradigma pemrograman paling tua. Pada model ini, program dan variabelnya disimpan bersama, dan program terdiri atas perintah-perintah yang membentuk perhitungan, penyimpanan nilai ke variabel, membaca input, menghasilkan output, atau mengarahkan kontrol dari deret instruksi dalam program. Abstraksi prosedural membentuk blok untuk imperative programming, misalnya penugasan (assignment), pengulangan (loop), sekuensial, pernyataan kondisi, dan penanganan pengecualian (exception handling). Bahasa Pemrograman yang masuk ke dalam paradigma ini antara lain Cobol, Fortran, C, Ada, dan Perl. Pemrograman Imperatif mendefinisikan urutan dari perintah untuk komputer agar bisa dieksekusi.

2.A Ciri-ciri pemrograman imperatif
1. Adanya instruksi/command/perintah/kalimat-kalimat perintah
contoh : GOTO 10

2. Adanya status yang berubah
contoh : dengan adanya perintah GOTO 10 maka status program akan loncat
mengerjakan statemen yang ada di line number 10

2.B Variabel dan Penugasan
Variabel adalah identifier/pengenal yang berisi data yang dapat berubah-ubah nilainya di dalam program.Penugasan(Assigment) adalah suatu aksi yang menyebabkan peletakkan atau pemberian suatu nilai di suatu lokasi atau variabel.

B. Functional Programming
Functional programming adalah paradigma programming yang melakukan komputasi sebagai evaluasi dari mathematical functions dan menghindari keadaan (state) dan perubahan (mutable) data. Penekanan aplikasi daari functions, sangat kontras dengan gaya imperative programming, yang menekannkan perubahan keadaan (state)
Functional programming, dan khususnya pemrograman fungsional murni, adalah upaya untuk mengurangi atau menghilangkanefek samping, maka dianggap deklarative.
Functional programming juga digunakan dalam industry domain-specific programming language seperti R (statistics), Matematika (simbolik matematika), J and K (financial analysis), dan XSLT (XML). Widespread declarative domain spesific languages seperti SQL dan Lex/Yacc, menggunakan beberapa element dari functional progrmmaing, khususnya dalam menjauhkan perubahan nilai. Spreadsheets dapat juga ditampilkan sebagai functional programming language.


Logic Programming Languages

LOGIC PROGRAMMING

• PROBLEM SOLVING = PROBLEM DESCRIPTION + LOGICAL DEDUCTIONS
Bagaimana kita dapat memiliki kemampuan membuat logika deduksi? Idealnya, kita memberitahukan kepada komputer ‘apa’ yang kita ingin kerjakan, bukan ‘bagaimana’ cara mengerjakannya.
Bahasa Pemrograman Imperative vs Deklarative
• Pada bahasa pemrograman imperative, contohnya Java, Pascal, C++), kita memberitahu komputer ‘bagaimana/how’ cara menyelesaikan masalah, misalnya cetak A, kalikan A dan B…dsb.

• Pada bahasa pemrograman deklarative (contohnya Prolog), kita mendeklarasikan ‘apa/what’ permasalahannya dan komputer yang akan memecahkan masalah nya .

Pengenalan Prolog
• Prolog adalah bahasa pemrograman pertama yang murni menggunakan bahasa pemrograman deklarative • Prolog kependekan dari ‘Programmation en Logique.

• Pertama kali diperkenalkan tahun 1970 oleh Robert Kowalski dan Maarten van Emden, Alain Colmerauer , selanjutnya diimplementasikan oleh David Warren.

• Pada saat kita menuliskan program dalam bahasa prolog, artinya kita menuliskan pengetahuan kita mengenai suatu masalah, kita membuat model dari suatu masalah • Prolog secara luas dipergunakan untuk pemodelan sistem (contoh prototipe perangkat lunak, desain sirkuit) dan untuk banyak aplikasi intelegensi buatan seperti Expert System dan Natural Language Processing.
Konsep Prolog
• Program Prolog terdiri dari sekumpulan clauses
• Setiap clause dapat berupa fakta atau aturan (fact or rule)
• Contoh clauses : ‘
Facts : male(philip).
female(anne).
parent(philip,anne).
Rules :
father(X,Y) : – parent(X,Y), male(X).
ancestor(X,Y) : – parent(X,Y).
ancestor(X,Y) : – ancestor(X,Z), parent(Z,Y).

Terms (Terminologi/Istilah)
 Sebuah terms mewakili suatu objek atau kelas dari objek yang akan dibahas .

 Objek dapat berupa :

– konstanta, yang dapat berupa :
Angka : 37, 12.4, -5
String : ‘helo world’, ‘Pete’
Atom : philip, monkey

– variabel : X, Person
– compound term : tanggal (May, 1, 2004)

Facts (Fakta)
 Fakta mewakili satu unit informasi yang diasumsikan bernilai benar • Kadangkala suatu fakta terdiri dari beberapa istilah atau merupakan suatu daftar istilah male(philip). parent(philip,anne).

 Rules (Aturan-aturan)

 Suatu aturan mewakili beragam kondisi (‘this is true if this is true’) need_umbrella :- its_raining.
father(X,Y) :- parent(X,Y), male(X).

IF AND
 Secara umum aturan adalah suatu ekspresi dengan bentuk :
A :- B1, B2,…,Bn dimana A dan B1, B2, …Bn adalah formula atomik A adalah head (kepala) dari aturan B1, B2, …., Bn adalah body (tubuh) dari aturan
Variabel :
Penulisannya dengan huruf besar atau underscores (contoh : X, TimeTable, _24).
Semua yang dimulai dengan huruf besar pada prolog adalah variabel (kecuali dalam tanda petik “) .
• Suatu clause merupakan statemen prolog, contohnya fakta atau aturan (fact or rule)
• Semua clause pada prolog harus diakhiri dengan tanda titik (dot)
• Penggunaan program prolog dilakukan melalui query
contoh :
? –parent(philip, anne).
? –border(wales,scotland).

Interpreter pada Prolog akan merespon : Yes or No Semua query harus diakhiri tanda titik (dot).¬¬¬

Query
Query dapat terdiri dari variabel-variabel : ?- parent(philip, who).
interpreter prolog akan memberikan respon melalui nilai2 yang terdapat pada variabel sehingga query akan menjadi benar (jika ada), kalau tidak ada jawaban yang benar, maka akan direspon dengan no.

 


KESIMPULAN
C# adalah bahasa pemrograman yang sangat berguna untuk mengembangkan aplikasi desktop. C# mempunyai banyak kelebihan dan juga kekurangan, yang sudah kami jelaskan dilaporan ini.

C# adalah bahasa pemrograman yang diciptakan oleh Microsoft (dikembangkan dibawah kepemimpinan Anders Hejlsberg yang notabene juga telah menciptakan berbagai macam bahasa pemrograman termasuk Borland Turbo C++ dan Borland Delphi). Bahasa C# juga telah di standarisasi secara internasional oleh ECMA.

Kenapa Menggunakan C#?
• Sederhana
• Modern
• Object-Oriented Language
• Powerful dan Flexibel
• Efisien
• Modular
• Akan Populer ke depannya


 

DAFTAR PUSTAKA

Encapsulation in C# programming (2016) Available at: https://www.programtopia.net/csharp/docs/encapsulation-access-modifiers (Accessed: 24 November 2016).

Aan, R. (2012) Dasar Pemrograman C#. Available at: https://ajenkmhy93.wordpress.com/alpro-2/dasar-pemrograman-c/ (Accessed: 24 November 2016).

Microsoft (2015) Strings (C# programming guide). Available at: https://msdn.microsoft.com/en-us/library/ms228362.aspx (Accessed: 24 November 2016).

Microsoft (2016) Lists. Available at: https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx (Accessed: 24 November 2016).

Relational operators (2016) Available at: https://msdn.microsoft.com/en-us/library/aa711633(v=vs.71).aspx (Accessed: 24 November 2016).

C# – while loops (2016) Available at: https://www.tutorialspoint.com/csharp/csharp_while_loop.htm (Accessed: 24 November 2016).

C# – do…While loop (2016) Available at: https://www.tutorialspoint.com/csharp/csharp_do_while_loop.htm (Accessed: 24 November 2016).

What are ‘closures’ in .NET? (2016) Available at: http://stackoverflow.com/questions/428617/what-are-closures-in-net (Accessed: 24 November 2016).

Unity – manual: Coroutines (2016) Available at: https://docs.unity3d.com/Manual/Coroutines.html (Accessed: 24 November 2016).

Encapsulation in C# programming (2016) Available at: https://www.programtopia.net/csharp/docs/encapsulation-access-modifiers (Accessed: 24 November 2016).

Rahmat, H. (2012) Sequence, Looping and selection structure. Available at: http://harsyahrahmat.blogspot.co.id/2012/12/sequence-looping-and-selection-structure.html (Accessed: 26 November 2016).

Microsoft (2015) Casting and type conversions (C# programming guide). Available at: https://msdn.microsoft.com/en-us/library/ms173105.aspx (Accessed: 26 November 2016).

Overloadable operators (2015) (C# programming guide). Available at: https://msdn.microsoft.com/en-us/library/8edha89s.aspx (Accessed: 24 November 2016).

Mayo, J. (2016) Lesson 18: Overloading operators. Available at: http://csharp-station.com/Tutorial/CSharp/Lesson18 (Accessed: 24 November 2016).

Blok dan Subprogram (2009). Available at: https://kbp13uksw.wordpress.com/2009/07/03/blok-dan-subprogram/ (Accessed: 27 November 2016).

Subprograms (2014). Available at: http://www.slideshare.net/baran19901990/08-subprograms (Accessed: 26 November 2016).

Overloaded & generic Subprograms (no date) Available at: http://mail.boone-co-wings.org/ciss445/ch9/07overload.html (Accessed: 26 November 2016).

CHAPTER 8 (no date) Available at: http://groups.engin.umd.umich.edu/CIS/course.des/cis400/maxim/lectures/chp8.htm (Accessed: 27 November 2016).

net-tutorials (no date) Functions – the complete C# Tutorial. Available at: http://csharp.net-tutorials.com/basics/functions/ (Accessed: 27 November 2016).

Subroutines in C# (2016) Available at: http://stackoverflow.com/questions/6309742/subroutines-in-c-sharp (Accessed: 27 November 2016).

Concepts of Encapsulation and abstraction (C#) (2016) Available at: http://www.completecsharptutorial.com/basic/understanding-concepts (Accessed: 10 December 2016).

C# access Specifiers (2016) Available at: http://www.completecsharptutorial.com/basic/access-specifiers (Accessed: 10 December 2016).

Functional programming (2016) in Wikipedia. Available at: https://en.wikipedia.org/wiki/Functional_programming (Accessed: 10 December 2016).

Popovic, J. (2012) Functional programming in C#. Available at: https://www.codeproject.com/articles/375166/functional-programming-in-csharp (Accessed: 10 December 2016).

Sebesta, R.W. (2012) Concepts of programming languages (10th edition). 10th edn. Boston, MA: Addison-Wesley Educational Publishers.

Programming language implementation (2016) in Wikipedia. Available at: https://en.wikipedia.org/wiki/Programming_language_implementation (Accessed: 8 December 2016).

Arliansyah, A. (1988) Azhary Arliansyah: C# – exception handling. Available at: http://arliansyahazhary.blogspot.co.id/2015/07/c-exception-handling.html (Accessed: 13 December 2016).

aahme D, R. (2013) Form dan event Handler di java C# dan C++. Available at: http://calonpresident.blogspot.co.id/2012/05/kuliah-oop-form-dan-event-handler.html (Accessed: 13 December 2016).

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>