Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam eu est quis enim commodo aliquet. Vestibulum eleifend venenatis massa. Curabitur rutrum accumsan felis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus ut augue eu purus iaculis viverra. Maecenas vehicula dictum diam.

Read More

Laporan PLC

Kelompok 9

Eric Khantino Sunardi                                                    2001552362/Binusian 2020

DOSEN : Yanfi, S.Kom., M.T.I.

<D5065>

PILIHAN :
Programming Language Concept

PLC

 

 

KATA PENGANTAR

Puji syukur kehadirat Tuhan Yang Maha Esa yang telah memberikan kami berbagai macam nikmat, sehingga aktivitas hidup ini banyak diberikan keberkahan. Dengan kemurahan yang telah diberikan oleh Tuhan Yang Maha Esa sehingga kami bisa menyelesaikan makalah ini dengan baik.

Ucapan terima kasih tidak lupa kami haturkan kepada dosen dan teman-teman yang banyak membantu dalam penyusunan makalah ini. Kami menyadari di dalam penyusunan makalah ini masih jauh dari kesempurnaan. Masih banyak kekurangan yang harus diperbaiki, baik dari segi tata bahasa maupun dalam hal pengkonsolidasian.

Oleh karena itu kami meminta maaf atas ketidaksempurnaanya dan juga memohon kritik dan saran untuk kami agar bisa lebih baik lagi dalam membuat karya tulis ini.

Harapan kami mudah-mudahan apa yang kami susun ini bisa memberikan manfaat untuk diri kami sendiri,teman-teman, serta orang lain.


 

DAFTAR ISI

 

HALAMAN SAMPUL…………………………………………………………………………………………

KATA PENGANTAR………………………………………………………………………………………….

DAFTAR ISI……………………………………………………………………………………………………….

  1. PENDAHULUAN……………………………………………………………………………….
    • Mengapa C#………………………………………………………………………………………………
    • Tujuan………………………………………………………………………………………………………
    • Manfaat…………………………………………………………………………………………………….
  2. PEMBAHASAN………………………………………………………………………………….
    • Describing Syntax & Semantics…………………………………………………………………..
      • Pengertian Syntax & Semantics………………………………………………………………
      • Struktur Program & Sintaks Dasar………………………………………………………….
      • Variabel & Konstanta……………………………………………………………………………
      • Identifier……………………………………………………………………………………………..
      • Access Modifier……………………………………………………………………………………
      • Contoh Yang Benar………………………………………………………………………………

2.2  Names, Bindings and Scopes

2.2.1

2.2.2

2.2.3

2.2.4

 

2.4       Expressions & Assignment…………………………………………………………………….

  • Arithmetic Expressions
  • Assignment Statements…………………………………………………………………………
  • Mixed-Mode Assignment………………………………………………………………………
  • Overloaded Operators…………………………………………………………………………..
  • Relational and Boolean Expressions………………………………………………………..
  • Short-Circuit Evaluation………………………………………………………………………..
  • Type Conversions…………………………………………………………………………………

 

  • KESIMPULAN

DAFTAR PUSTAKA

LAMPIRAN

Lampiran 1 Informasi Anggota

PENDAHULUAN

1.1   Mengapa C#

Mengapa kami memilih C# ?

  • Dapat digunakan untuk aplikasi :
  1. Web-based application
  2. Mobile application
  • Modern

Fitur Exception handling, garbage collection,dll

  • Object Oriented

Encapsultaion, Inherinace, Polymorphism

  • Modular

Ditulis dengan pembagian class dan metode-metode

  • Tujuan

 

  • Manfaat

 

BAB I

Introduction

 

Wajar bagi siswa untuk bertanya-tanya bagaimana mereka akan mendapatkan keuntungan dari pembelajaran tentang Programming Language Concept. Berikut ini adalah manfaat mempelajari konsep bahasa pemrograman:

  1. Meningkatkan kemampuan mengekspresikan ide
  2. Agar memiliki background untuk memilih Bahasa pemrogramman yang sesuai
  3. Meningkatkan kemampuan untuk belajar Bahasa baru
  4. Memiliki pemahaman yang lebih baik
  5. Menggunakan Bahasa pemrogramman yang diketahui dengan lebih baik
  6. Peningkatan pengetahuan tentang komputasi

Ilmu komputer telah diterapkan dalam banyak sekali bidang, mulai dari mengendalikan pembangkit listrik tenaga nuklir hingga untuk menyediakan video game di ponsel. Karena memiliki kegunaan yang sangat luas, banyak bahasa pemrograman yang dibuat dengan tujuannya masing-masing. Pada bagian ini, kita membahas secara singkat beberapa aplikasi computer dalam beberapa bidang dan bahasa terkait:

  1. Scientific Applications (FORTRAN & ALGOL 60)
  2. Business Applications (COBOL)
  3. Artificial Intelligence (LISP & C)
  4. Systems Programming (C & C++)
  5. Web Software (HTML, PHP, and JavaScript)

Suatu Bahasa pemrograman juga memiliki kriteria evaluasi, dimana kriteria evaluasi tersebut merupakan suatu pembeda antara Bahasa satu dengan Bahasa lain dan menunjukkan kelebihan suatu Bahasa dibandingkan bahasa lain. Berikut adala kriteria evaluasi suatu Bahasa pemrograman:

  1. Readability

Merupakan kemudahan suatu program untuk dapat dibaca dan dipahami.
Contoh: goto statement dapat mengurangi readability karena mempersulit pembacaan suatu program.

  1. Writability

Kemampuan suatu Bahasa untuk dapat digunakan untuk program.

  1. Reliability

Performa sesuai dengan spesifikasinya.

  1. Cost

Jumlah dari semua harga.

Dalam perkembangannya, Bahasa pemrogramman memiliki beberapa faktor yang mempengaruhi desain dasar/awal Bahasa pemrogramman. Beberapa hal yang paling berpengaruh dalam desain Bahasa permrogramman adalah adalah computer architecture dan programming design methodologies.

  1. Computer Architecture

Arsitektur dasar komputer memiliki efek mendalam pada desain bahasa. Sebagian besar bahasa populer dari 50 tahun terakhir telah dirancang berdasar arsitektur komputer umum, yang disebut arsitektur von Neumann. Bahasa ini disebut Imperative Language.

 

Cara kerja Von Neumann architecture adalah sebagai berikut:

  1. Data dan program disimpan di dalam memori
  2. Memori terpisah dari CPU
  3. Instruksi dan data disalurkan dari memori ke CPU
  4. Basis Bahasa imperative:
  • Variabel -> Memory cell
  • Assignment statements -> Piping
  • Iterasi efisien

Gambar arsitektur von Neumann:

 

 

  1. Programming Design Methodologies

Metodologi pengembangan perangkat lunak baru (misalnya, pengembangan object-oriented software) menyebabkan paradigma pemrograman baru dan dengan penambahan-penambahan, menghasilkan bahasa pemrograman baru.

Pengaruh Programming Design Methodologies:

  • 1950-an dan awal 1960-an: aplikasi sederhana; khawatir tentang efisiensi mesin
  • Akhir 1960-an: Efisiensi Orang menjadi penting; dibaca, struktur kontrol yang lebih baik pemrograman terstruktur desain top-down dan perbaikan langkah-bijaksana
  • Akhir 1970-an: Proses berorientasi data berorientasi abstraksi data
  • 1980 Tengah: Pemrograman berorientasi obyek abstraksi Data + warisan + polimorfisme

 

 

 

Bahasa pemrograman sering dikategorikan ke dalam empat kategori yaitu: Imperative, Functional, Logic dan Markup/programming hybrid.

Programming language implementation adalah sebuah sistem untuk mengeksekusi program komputer. Ada 3 pendekatan umum dalam programming language implementation:

  1. Compilation

Menerjemahkan program tingkat tinggi (bahasa sumber) ke dalam kode mesin (machine language)

  • Kelebihan : eksekusi cepat.
  • Kekurangan :  penerjemahan lambat.

Proses kompilasi memiliki beberapa fase yaitu:

  • Analisis leksikal: mengkonversi karakter dalam program sumber ke unit leksikal
  • Analisis sintaks: mengubah unit leksikal menjadi parse tree yang mewakili struktur sintaksis program
  • Analisis Semantik: menghasilkan kode intermediate
  • Code generation: kode mesin yang dihasilkan

 

Gambar Proses Kompilasi

  1. Pure Interpretation

Berlawanan dengan proses Compilation, dengan pendekatan ini, program diinterpretasikan oleh program lain yang disebut interpreter, dengan tidak ada terjemahan.

  • Kelebihan : Implementasi program lebih mudah (run-time errors ditampilkan secara langsung).
  • Kekurangan : Eksekusi lebih lambat, membutuhkan lebih banyak memori.

Gambar Proses Pure Interpretation

  1. Hybrid Implementation Systems

Hybrid Implementation Systems merupakan gabungan antara compilers dan pure interpreters, cara kerjanya dengan menerjemahkan bahasa tingkat tinggi ke bahasa perantara yang memudahkan penafsiran.

  • Kelebihan: lebih cepat dari pure interpretation.

 

 

Gambar Proses Hybrid Implementation Systems

 

 

 

 

 

 

 

 

 

BAB II

Describing Syntax and Semantics

 

2.1.1 Pengertian Syntax & Semantics

SYNTAX”

Kumpulan aturan yang mendefinisikan suatu bentuk bahasa.

Contoh:

Sintaks kalimat dalam bahasa Indonesia: [Subjek] + [Predikat] + [dll]]

Saya makan [✓]

Saya nasi [X]

Saya makan nasi [✓]

 

Sintaks dalam C#:

Fungsi diawali dengan “_”

 

“SEMANTICS”

Menjelaskan arti dari program

Contoh:

Saya makan nasi [Sintaks ✓ Semantik ✓]

Saya minum nasi [Sintaks ✓ Semantik X ]

 

A=(A+B)*(C-D)

Perkalian dari hasil penjumlahan A+B dan C-D adalah A

 

2.1.2 Struktur Program & Sintaks Dasar

  • Setiap awal program C# harus menggunakan

using System;

  • Kode prog diawali dengan mendeklarasikan nama Class atau Namespace.
  • Seluruh aplikasi dibuka dengan tanda “{” dan ditutup dengan tanda “}”.
  • Aplikasi C# dibangun oleh satu atau beberapa fungsi yang diletakkan dalam sebuah Class.
  • Nama suatu fungsi harus diawali dengan huruf atau garis bawah (“_”), yang kemudian bisa diikuti oleh huruf, angka atau garis bawah.
  • Nama diakhiri dengan tanda kurung “()”.
  • Penamaan fungsi tidak boleh mengandung spasi.
  • Suatu fungsi harus diawali dengan “{” dan diakiri dengan “}”.
  • Nama fungsi utama yang digunakan dalam bahasa C# adalah “main”.
  • Setiap fungsi memiliki sifat fungsi, seperti public dan static.
  • Dalam sebuah fungsi, berisikan sekumpulan perintah, dimana perintah satu dengan yang lainnya akan dipisah atau diakhiri dengan tanda “;”.

 

2.1.3 Variabel & Konstanta

 

Variabel

Suatu pengenal yang digunakan untuk menyimpan suatu nilai.

  • Nilai dalam variabel dapat berubah-ubah selama proses pada program masih berlangsung.
  • Sebelum variabel digunakan, harus dideklarasikan terlebih dahulu, dengan format penulisan :

<data type><variable name>;

Contoh :

string kata;      string namaPelanggan = “Fandi”;

int angka;        int jumlahSemuaBarang;

 

Konstanta

Suatu nilai yang tidak berubah selama proses berlangsung.

  • Hanya satu definisi.
  • Sebelum konstanta digunakan, harus dideklarasikan terlebih dahulu,

 

dengan format penulisan :

const<data type><const name>;

Contoh :

const double PI = 3.142;

const string nama = “Adinda”;

2.1.4 Identifier (Aturan Penamaan)

– Variable

Menggunakan Camel Notation, yaitu huruf kecil (lowercase) pada huruf depan masing2 kata.

– Methods

Menggunakan Pascal Notation, yaitu huruf besar (Uppercase) pada huruf depan masing2 kata

– Class

Dapat menggunakan karakter Huruf, Angka, atau Garis bawah.Dengan ketentuan tidak boleh diawali dengan ‘Angka’ atau Spasi.

2.1.5 Access Modifier

Ada 3, yaitu :

  1. Public

type yang menggunakan access modifier ini membuat type tersebut bisa diakses tanpa pembatasan apapun

  1. Protected

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan dan turunan dari type yang bersangkutan.

  1. Private

Private merupakan access modifier yang paling secure. semua type yang dilabeli access modifier private membuat type tersebut tidak dapat diakses dari luar type yang bersangkutan.

2.1.6 Contoh Yang Benar

 

Contoh penulisan syntax dan semantics yang benar pada C#

 

using System;

public class Program

{

public static void Main(string[] args)

{

Console.WriteLine(“Hello, world!”);

 

for (int i = 0; i <= 5; i++) {

Console.WriteLine(“I love Programming”);

}

 

Console.WriteLine(AddTwoNumbers(2,3));

}

 

public static int AddTwoNumbers(int number1, int number2) {

return number1 + number2;

}

}

 

 

 

BAB III

Names, Binding, Scopes C#

 

2.2.1 Names

Names adalah : Sebuah String dari Karakter yang digunakan untuk mengidentifikasi sebuah program.

Ciri-Ciri Nama :

  • Memiliki Karakter Spesial;
  • Dalam Penulisannya bersifat Case-Sensitive (ita dapat ‎menggunakan karakter kapital (A sampai Z) dan huruf ordinal (a sampai z) sebagai nama variabel, tapi ‎memang harus ada konsistensi);
variabel1 = 3;

Variabel1 = 2;

variAbel1 = variabel1 + Variabel1;

 

variabel1, Variabel1, variAbel1àDalam C# TIDAK SAMA

Contoh :

 

 

 

 

 

  • Mendukung Kata-Kata Spesial;
  • Mendukung Karakter diluar Huruf Latin seperti Cyrillic, Arab, dan juga Yunani;
π = 3.14;

Ω = 4.13

Contoh :

 

 

Named Constants pada C# punya 2 jenis,yakni :

  • The values of const named Konstanta yang terikat Pada Waktu Kompilasi.
  • The values of readonly artinya Konstanta yang Terikat Secara Dinamis.

 

 

2.2.2 Binding

Binding adalah : Suatu Asosiasi yang seperti antara suatu atribut dan entity atau antara suatu operasi dan symbol.

 

Binding bisa terjadi karena beberapa hal, yakni :

  • Waktu Desain bahasa
  • Waktu Implementasi bahasa
  • Waktu Compile
  • Load time
  • Runtime

 

Binding dibagi menjadi Beberapa Jenis, yakni :

  • Early Binding/Static Binding

adalah : Event yang terjadi pada compile time. Compiler tau method apa yang harus di panggil saat compile time. Kelebihan Early Binding adalah efisiensi, lebih cepat, karena fungsi telah dipanggil saat compile time.

E.g. :Method call biasa, method overloading

 

  • Late Binding/Dynamic Binding

adalah : Event yang terjadi pada saat aplikasi dijalankan / runtime. Compiler tidak tahu method/fungsi apa yang harus di panggil sampai dengan aplikasi sudah di jalankan atau pada saat runtime. Late binding memungkinkan kamu untuk membuat aplikasi yang merespon terhadap event yang terjadi ketika aplikasi itu berjalan.Kelebihan Dynamic Binding adalah fleksiblitas.

E.g. :Method overriding.

 

 

 

 

 

2.2.3 Scope

Scope (Ditandai : {} ) adalah  suatu variabel yang menentukan bagian apa dalam program yang dapat mengakses variabel tersebut.

 

 

 

 

 

 

 

 

 

 

 

 

 

Pada pemrograman Bahasa C#, kita mengenal scope variable, yakni :

 

  • Block Scope

Variable yang didefinisikan di didalam { dan } akan berlaku di dalam {dan}.

Ini tentu akan membantu pemrograman karena tidak akan menganggu variable yang lain meskipun namanya sama. Block scope sangat membantu dalam looping terutama untuk for statement. Tetapi untuk kemudahan kita dalam membaca program kita sebaiknya menggunakan variabel yang berbeda meskipun kita tahu bahwa scope tersebut berada dalam block scope.

 

  • Method Scope

Variabel yang didefinisikan di dalam scope method atau function akan berlaku dalam method tersebut. Variabel dalam method scope tidak dapat diakses dari luar method.

 

 

  • Class Scope

Variable dalam class scope dapat diakses oleh method di seluruh class tersebut.Variable dalam class scope juga dapat dirancang dapat diakses oleh kelas turunannya atau dapat diakses di luar class tersebut.

 

Ada 2 Jenis Variabel dalam Scope, yakni :

  • Variabel Instance

– Dideklarasi di luar sebuah method

– Biasanya private

– Bisa diakses oleh semua method dalam class

 

  • Variabel Local

– Dideklarasi di dalam sebuah method

– Tidak ada modifier visibilitas

– Hanya bisa diakses di dalam method itu saja.

 

Lifetime Of Variable

Adalah seberapa lama variabel itu tetap ada.

  • Variabel lokal dan parameter formal (variabel yang terdapat pada suatu method) ada selama berjalannya sebuah metode

Setiap kali kita memanggil/menggunakan method, formal paramater dan variabel local akan tampil dengan value awalnya/fresh.

  • Variabel instanceakan ada selama sebuah objek itu ada.

Tetap ada sampai objeknya dipanggil kembali/garbage-collected.

Static Scope

Fungsinya :Untuk menghubungkan nama referensi ke variabel kita harus mencari deklarasinya

Step-nya :

  • Cari deklarasinya
  • Pertama dari lingkup yang kecil
  • Lalu ke lingkup yang lebih luas
  • Hingga namanya telah ditemukan

 

Block

Metode untuk membuat static scope dalam unit program

{ int temp;

temp = list[upper];

list[upper] = list[lower];

list[lower] = temp;

}

Contoh dari Blocks :

 

 

 

 

Global Scope

Scope global adalah deklarasi dari variabel diluar definisi yang menjelaskan variabel yang terdapat dalam fileyang berbeda. Variabel yang digunakan dalam scope global dapat juga disebut global variabel.

 

 

BAB IV

Data Types

 

  • Array

Array adalah suatu struktur data yang dapat menyimpan data dengan tipe yang sama dan diakses dengan menggunakan suatu indeks yang menunjukan suatu elemen didalam array tersebut.

 

Dalam pendeklarasian Array, C# mendukung single-dimensional arrays, multi-dimensional arrays (rectangular arrays) dan array-of-arrays.

 

Array dapat di deklarasi dalam format sebagai berikut :

Single-dimensional arrays:

int[] numbers;

int[] numbers = new int[5] {1, 2, 3, 4, 5};

string[] names = new string[3] {“Okie”, “Nega”, “Ralia”};

 

 

Multi-dimensional arrays:

string[,] names;

int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };

string[,] siblings = new string[2, 2] { {“Okie”,”Nega”}, {“Ralia”,”Ulvi”} };

 

 

Array-of-arrays (jagged):

byte[][] scores;

 

int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

atau int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; ARRAY ADALAH OBJECT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contoh deklarasi Array dalam C#

 

class TestArraysClass
{
static void Main()
{
// Declare a single-dimensional array
int[] array1 = new int[5];

// Declare and set array element values
int[] array2 = new int[] { 1, 3, 5, 7, 9 };

// Alternative syntax
int[] array3 = { 1, 2, 3, 4, 5, 6 };

// Declare a two dimensional array
int[,] multiDimensionalArray1 = new int[2, 3];

// Declare and set array element values
int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

// Declare a jagged array
int[][] jaggedArray = new int[6][];

// Set the values of the first array in the jagged array structure
jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
}
}

 

Assosiative Array

 

Array asosiatif adalah koleksi yang tidak diperintah dari elemen data yang diindeks oleh jumlah yang sama dari nilai-nilai yang disebut kunci.

Kunci User didefinisikan harus disimpan

 

Dimana sebuah Array tipikalnya berimplementasi sesuai banyak bentuk benda yang sama disimpan dalam suatu blok memori yang berdekatan

Sebuah assosiatif Array harus diimplementasikan melalui sebuah struktur data yang lebih kompleks, seperti sebuah Tabel Hash, Daftar, atau beberapa tipe pemetaannya.

 

 

 

 

 

Array Indexing

Indexing (or subscripting) adalah sebuah pemetaan dari indeks ke elemen array_name (index_value_list) ®  an elemen.

 

 

 

 

 

 

 

 

Gambar di atas merupakan visualisasi array, jadi sesuai dengan gambar diatas, array menghitung suatu elemen bukan dari 1, tetapi dari 0.

Pada gambar diatas, dapat kita simpulkan bahwa, elemen pertama atau elemen ke-nol dalam array tersebut adalah 3, elemen ke-satu mempunyai value 8, elemen ke-dua mempunyai value 1, dan seterusnya.

 

  • Tuple Types

Sebuah tuple merupakan struktur data yang memiliki karakteristik angka dan mempunyai urutan dari sebuah element.

 

Sebagai contoh dari tuple adalah struktur data yang terdiri dari 3 element yang digunakan untuk menyimpan sebuah identifier seperti nama seseorang di element pertama, tanggal di element kedua, dan pendapatan di element ke tiga.

Tuple types umumnya digunakan dalam 4 fungsi yaitu:

 

  • Untuk mewakili satu set data. Misalnya, sebuah tuple dapat mewakili sebuah database dan komponen – komponennya dapat mewakili masing-masing data individual dari record.

 

  • Untuk memberikan akses yang mudah dan dapat memanipulasi dari sebuah kumpulan data.

 

  • Untuk mengembalikan beberapa nilai dari sebuah metode tanpa menggunakan parameter out (dalam C #) atau parameter ByRef (dalam Visual Basic).

 

  • Untuk memberikan nilai ke dalam sebuah metode melalui sebuah single parameter. Sebagai contoh metode Thread.Start(Object) memiliki sebuah single parameter yang memungkinkan Anda menyediakan satu nilai ke dalam sebuah metode yang akan di eksekusi   pada saat startup. Jika Anda menyediakan Tuple <T1, T2, T3> objek sebagai metode argumen, Anda dapat menyediakan startup dengan tiga item dari data.

 

 

 

  • Type Checking

 

Proses verifikasi dan menegakkan kendala jenis-jenis pemeriksaan – dapat terjadi baik pada saat kompilasi (cek statis) atau pada saat run-time.  Jika spesifikasi bahasa memerlukan aturan pengetikan yang kuat (misalnya, kurang lebih memungkinkan konversi tipe otomatis yang tidak kehilangan informasi), salah satu dapat merujuk kepada proses seperti strong type, jika tidak, sebagai weak type. Istilah  tersebut biasanya tidak digunakan dalam arti yang ketat.

 

Type checking dibagi menjadi dua yaitu:

  • Static Type Checking
  • Dynamic Type Checking

 

 

  • Union Types

Union types merupakan sebuah nilai yang mungkin memiliki beberapa pernyataan atau format, ataupun merupakan sebuah struktur data yang terdiri dari sebuah variabel yang dapat memegang nilai tersebut. Beberapa bahasa pemrograman mendukung type data khusus .Dengan kata lain, definisi union types akan menentukan sejumlah nilai dari data primitif didalamnya. Misalnya,, “float atau integer panjang”. Berbeda dengan sebuah record (atau struktur), yang dapat didefinisikan untuk mengandung float dan integer; di union , hanya ada satu nilai pada waktu tertentu.

 

  • Pointers & References & Record Type

 

Pass by reference sendiri merupakan suatu method yang melewatkan alamat dari suatu variabel, bukan isi dari variabel.

Reference Type, nilai yang diacu oleh variable tersebut adalah alamat memori (32-bit atau 64-bit tergantung arsitektur), sedangkan datanya sendiri diletakkan pada lokasi terpisah (heap memory). Jika stack memory dianalogikan sebagai Desktop, membuat variabel jenis Value Type, sama dengan menaruh file di desktop, sedangkan membuat variabel Reference Type, sama dengan menaruhshortcut ke suatu file yang disimpan di suatu direktori.

Tidak ada alokasi memori secara manual menggunakan pointer (seperti pada bahasa pemrograman Java),

Record Type sedang di kembangkan oleh Microsoft dan akan di implementasikan pada versi C# Selanjutnya

 

 

Karakteristik Reference Types

Berikut ini adalah karakteristik dari reference types:

  • 1. Data reference type tidak disimpan pada stack, namun disimpan pada heap. Heap ini digunakan oleh Garbage Collector untuk melakukan alokasi memori secara dinamis.
  • 2. Dua atau lebih variabel dengan tipe reference type dapat menunjuk ke satu objek yang sama dalam heap,
  • 3. memungkinkan operasi pada satu variabel mempengaruhi objek yang ditunjuk oleh variabel-variabel yang lain.
  • Pada umumnya reference types lebih besar dan lebih lambat daripada value types

 

  • Primitive Data Types

 

Primitive data types adalah tipe data yang bisa dijadikan variable. Ini adalah beberapa tipe data yang dapat dijadikan variable pada Bahasa pemrograman C# :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Bahasa Pemrograman dengan Strong Type dan Weak Type
  1. Strong-Typed Programming Language

Strongly-typed programming language adalah bahasa pemrograman dimana setiap variabel memiliki tipe data yang spesifik dan variabelnya terikat pada suatu tipe data tertentu.

Contoh C#:

  1. int a = 5;
    int b = a + 2; //OKbool test = true;

    // Error. Operator ‘+’ cannot be applied to operands of type ‘int’ and ‘bool’.
    int c = a + test;

 

  1. Weak-Typed Programming Language

Weak Typing atau juga dikenal sebagai loose typng dan ini adalah kebalikan dari Strong-Typing, Weak Typing adalah aturan-aturan mengenai type conversion / konversi tipe data, dan biasanya dalam bahasa pemrograman Weak-Typed, anda dapat mengubah isi dari variable tipe A ke tipe B.

Contoh C:

int i = 10;

bool b = true;

printf(“%d” i + b); //Prints 11 karena true pada C = 1

 

 

  • User-defined Ordinal Types

An ordinal type adalah tipe dimana range dari nilai yang memungkinkan dapat dihubungkan/dihitung dengan bilangan bulat positif.

Contoh:
integer, char, boolean

 

Ada 2 macam contoh user-defined ordinal types:
1. Enumeration types
2. Subrange types

 

 

 

 

 

 

  • Character String Types

 

Pada C#, tipe data string dapat di deklarasikan sebagai berikut:

 

// Deklarasi tanpa inisialisasi
string message1;

// Inisialisasi ke null
string message2 = null;

// Inisialisasi sebagai string kosong
// Memakai konstan kosong dibanding yang liberal “”.
string message3 = System.String.Empty;

 

//Inisialisasi dengan regular string literal.
string oldPath = “c:\\Program Files\\Microsoft Visual Studio 8.0″;

// Inisialisasi dengan verbatim string literal.
string newPath = @”c:\Program Files\Microsoft Visual Studio 9.0”;

//Inisialisasi dengan regular string literal.
string oldPath = “c:\\Program Files\\Microsoft Visual Studio 8.0″;

// Inisialisasi dengan verbatim string literal.
string newPath = @”c:\Program Files\Microsoft Visual Studio 9.0”;

// Pakai const string supaya ‘message4’ tidak dipakai
// untuk menyimpan string value yang lainnya
const string message4 = “You can’t get rid of me!”;

// Hanya pakai String constructor ketika membuat

// sebuah string dari sebuah char*, char[], or sbyte*.

char[] letters = { ‘A’, ‘B’, ‘C’ };
string alphabet = new string(letters);

 

 

 

 

 

 

 

 

 

 

  • List Types

Meskipun array pada C# dapat menyimpan banyak nilai sekaligus, mereka tidak dapat mengubah ukurannya secara dinamis. Class-class collection pada C# mirip dengan Array, tetapi dapat diubah ukurannya secara dinamis. Ada banyak class yang tersedia Collections pada C#.

  1. List<T>()

Inisialisasi instance baru dari List <T> class yang kosong dan yang punya initial capacity default.

  1. List<T>(IEnumerable<T>)

Inisialisasi instance baru dari List<T> class yang memuat element copy dan memiliki kapasitas yang cukup untuk mengakomodasi jumlah element yang dicopy.

  1. List<T>(Int32)

Inisialisasi instance baru dari List<T>class yang kosong dan yang mempunyai initial capacity yang spesifik.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BAB V

Expressions & Assignment

 

2.4.1 Arithmetic Expressions: Operators

Operator Precedence Rule

Di dalam suatu operasi dapat terdapat banyak operator.Urutan eksekusi  dari operator-operator disebut juga operator precedence. Precedence yang lebih rendah akan dieksekusi  belakangan.

Postfix ()[] ->. ++– Left to right
Unary + – ! ~ ++ –(type)* & sizeof Right to left
Multiplicative * / % Left to right
Additive +– Left to right
Shift <<>> Left to right
Relational << = > = Left to right
Equality == ! = Left to right
Bitwise AND & Left to right
Bitwise XOR ^ Left to right
Bitwise OR | Left to right
Logical AND && Left to right
Logical OR || Left to right
Conditional $: Right to left
Assignment = += -= *= /= %= >>= <<= &= ^= |= Right to left
Comma , Left to right

 

Unary operator ada satu operand                               Binary operator ada dua operand

e.g. i++, i–, ++I, etc.​                                                    e.g. I + J, I – J, J * 2

Ternary operator ada 3 operand

Contoh ternary operator :

int input = Convert.ToInt32(Console.ReadLine()); string classify; ​

// if-else construction. ​

if (input > 0) classify = “positive”; else

classify = “negative”; ​

// ?: conditional operator.

classify = (input > 0) ? “positive” : “negative”; ​

 

 

 

2.4.2 Arithmetic Operators

 

Arithmetic operators digunakan untuk operasi aritmatika, seperti tambah, kurang, perkalian, pembagian, untuk list operator aritmatika yang di dukung oleh C# adalah sebagai berikut:

 

Operator Keterangan Contoh Hasil
+ Penjumlahan a + b 25
Pengurangan a – b 5
* Perkalian a * b 150
/ Pembagian a / b 1
% Modulus a % b 5
++ Increment a++ 16
Decrement a– 14
Minus -a -15

 

2.4.3  Assignment Operator

Operator ini digunakan untuk

memberi nilai suatu variabel  inivariabel  =5;

jadi inivariabel yang berada disebelah kiri merupakan variabel yang akan diisi dengan nilai 5 yang ada disebelah kanan

 

 

 

Compound Assignment Exprressions

Operator Keterangan Contoh Hasil
+= Penambahan dan Penugasan a += 30 45
-= Pengurangan dan penugasan a -= 3 12
*= Perkalian dan penugasan a *= 5 75
/= Pembagian dan penugasan a /= 5 3
%= Modulus dan penugasan a %= 6 3

2.4.4 Mixed Mode Assignment

Penugasan Pernyataan Bisa juga jadi mixed-mode,

Contohnya : int a = 2, b =3;

float c;

c = a / b ;

Pernyataan Perintah juga bisa di Mixed-Mode

C# hanya mengijinkan Pelebaran Tugas Coercions.

 

2.4.5 Overloaded Operators

Overloaded Operators merupakan fungsi yang memiliki karakter spesial.Keyword Operators biasanya di ikuti oleh simbol yang mendefinisikan operator tersebut.Sama seperti fungsi yang lainnya.  Sebuah operator juga memiliki sebuah return type dan parameter list.

Overloaded Operators digunakan untuk Mendefinisikan / menimpa fungsi operator yang lain.

Contoh :

public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}

2.4.6 Relational & Boolean Expression

 

Relational operators menentukan apakah suatu value lebih besar, lebih kecil, sama atau tidak  dengan value lain.

 

  • The ==operator cek apakah kedua operand sama.
  • The != operator cek apakah kedua operand tidak sama.
  • The <>operator cek apakah kedua operand tidak sama.
  • The <operator cek apakah operand pertama lebih kecil dari operand kedua.
  • The >operator cek apakah operand pertama lebih besar dari operand kedua.
  • The <=operator cek apakah operand pertama lebih kecil sama dengan operand kedua.
  • The >=operator cek apakah operand pertama lebih besar sama dengan operand kedua.

 

Boolean Expression

Boolean-expression adalah expression yang menampilkan hasil dari type bool.

if(input < 9)

{

// Input is less than 9.

System.Console.WriteLine(

“Tic-tac-toe has more than {0}” +

” maximum turns.”, input);

}

 

 

 

 

 

 

 

 

 

Boolean expressions muncul dalam adanya beberapa pernyataan.Karakteristik utamanya yaitu mereka selalu evaluasi apakah valuenya bernilai benar atau salah. Untuk input<9 supaya bisa dikatakan sebagai Boolean expression, harus berakhir dengan nilai bool. Compiler tidak akan menerima angka diatas 9 karena sudah ada perintah bahwa nilainya tidak lebih dari 9 sehingga akan dicek apakah value dari inputnya adalah lebih dari 9 atau tidak.

 

2.4.7 Short Circuit Evaluation

Sebuah Pernyataan yang menghasilkan determinan tanpa mengevaluasi semua pengoperan Operator dari “Dan/ATAU”.

(13*a) * (b/13–1)

Contoh :

 

Jika a adalah 0, maka tidak perlu evaluasi (b/13-1)

(a> 3 && b < 5 * d)

 

 

Jika a<=3, tidak perlu evaluasi b < 5*d

 

 

2.4.8 Type Conversions

 

  • Narrowing Conversion

 

Adalah mengkonversi objek menjadi jenis yang tidak bisa mencakup semua nilai-nilai dari tipe yang asli.

 

Contoh : float to int

 

  • Widening Conversion

 

Adalah sebuah objek diubah ke jenis yang dapat mencakup setidaknya perkiraan untuk semua nilai-nilai dari jenis aslinya.

 

Contoh : int to float

 

  • Type Conversions : Mixed Mode

 

Sebuah Pernyataan atau Expresi Mixed-Mode dimana satunya mengoperasikan tipe-tipe lain yang berbeda.Sebuah Coercion adalah sebuah jenis konversi Implisit.Coercion mengurangi keuntungan dari Manfaat Type Checking, yang akan berakibat menganggu keandalannya.Di Sisi lain, Coercion memberikan Fleksibilitas.

 

Contoh:

//answer akan menjadi 3.0 bukan 3.333333

//karena operandnya berupa integer

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BAB VI

Control Structure

 

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 Statement terbagi menjadi 2 jenis yaitu:

  1. Two-selection structure

 

Dapat digunakan dengan 2 cara, yaitu:

  1. 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:

 

 

 

 

 

 

  1. 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;

 

 

  1. 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:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Switch statement

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

 

 

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);

};

 

 

  1. While

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

 

 

Bentuk umum:

 

while(condition)

{

statement(s);

}

 

Contoh kode:

 

 

 

 

  1. 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.

 

 

BAB VII

Subprograms

 

5.1.1 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.​

 

5.1.2 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​

 

 

5.1.3 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. ​

 

5.1.4 Coroutine

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

 

5.1.5 Generic Subprogram

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

 

class MyClass {​
public static T DoIt<T>(T p1) {​
…​
}​
}​
// call DoIt without specifying the generic parameter:​
int myInt=MyClass.DoIt(17);             // calls DoIt<int>​
string myStr = MyClass.DoIt(‘apples’);  // calls DoIt<string>​

 

5.1.6 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​

} ​

 

 

 

5.1.7 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: ​

  • Variable local static bisa diakses dengan lebih cepat.​
  • Tidak ada run-time overhead (Penambahan waktu extra) untuk alokasi dan dealokasi​
  • Subprogram bisa menjadi history sensitive​

 

Kerugian menggunakan Static variable: ​

  • Tidak support rekursi/pengulangan​
  • Penyimpanan tidak bisa dibagi dengan variable local dari subprogram yang tidak aktif​

 

5.1.8 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.​

 

5.1.9 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. ​

 

 

5.1.10 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​

 

5.1.11 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); ​

End​

BAB VIII

Abstract Data Types

 

6.1 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.

 

 

 

 

 

 

 

6.2 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.

6.4 Data Abstraction

Sebuah Data Abstrak adalah sebuah data yang ditetapkan pengguna dimana bisa terpenuhi apabila memenuhi 2 kondisi : ​

  • Representasidariobjek-objektipeinitersembunyidari unit program yang menggunakanobjekini, jadihanyaoperasi yang memungkinkan  yang didukungdalamtipeRepresentasidariobjek-objek tipeinitersembunyidari unit program yang menggunakanobjekini, jadihanyaoperasi yang memungkinkan  yang didukungdalamtipedefinitif​
  • DeklarasidariTipedanProtokoldaripengoperasianpadatipe di objek karenaterdapat sebuah unit sintatic. Program Unit lainnyadiperbolehkanmenciptakanvariabeldaritipeDeklarasidariTipedanProtokoldaripengoperasianpada tipe di objek karenaterdapat sebuah unit sintatic. Program Unit lainnyadiperbolehkanmenciptakanvariabeldaritipeterdefinisi.​

6.5 Mengapa Data Abstraction

  • Kehandalandarimenyembunyikan data representasi, KodePengguna tidakbisadiaksesolehobjeksecara langsungdarijenisatautergantungpadarepresentasi, megizinkanpengguna merubahrepresentasitanpamengubah / mempengaruhikodepenggunatersebut​
  • MengurangiKodedanVariabeldimana para programmer mestisadar​
  • Konfliknamalebih minim
  • MenyediakanMetodedariOrganisasi Program​
  • Aids modifiability (segalasesuatu yang berkaitandenganstruktur data adalahbersama-sama)​
  • KompilasiTerpisah

 

 

BAB IX

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).
  1. 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.
  1. 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.
  1. 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);
avanza.bergerak();


BAB X

Concurrency

 

5.1 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

 

Tugasnya 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.

 

5.2 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

 

5.3 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

 

5.4 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

 

5.5 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

 

5.5.1 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

 

 

 

 

Wait and Release

 

wait(aSemaphore)

if aSemaphore’s counter > 0 then

decrement aSemaphore’s counter

else

put the caller in aSemaphore’s queue

attempt to transfer control to a ready task

— if the task ready queue is empty,

— deadlock occurs

end

release(aSemaphore)

if aSemaphore’s queue is empty then

increment aSemaphore’s counter

else

put the calling task in the task ready queue

transfer control to a task from aSemaphore’s queue

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Producer and Consumer Tasks

 

semaphore fullspots, emptyspots;

fullstops.count = 0;

emptyspots.count = BUFLEN;

task producer;

loop

— produce VALUE –-

wait (emptyspots); {wait for space}

DEPOSIT(VALUE);

release(fullspots); {increase filled}

end loop;

end producer;

task consumer;

loop

wait (fullspots);{wait till not empty}}

FETCH(VALUE);

release(emptyspots); {increase empty}

— consume VALUE –-

end loop;

end consumer;

 

 

 

 

 

 

 

 

 

5.5.2 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

5.5.3 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

 

5.5.4 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 :

 

 

 

 

 

 

 

 

 

5.6 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: 5.7 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)

 

 

 

 

 

 

 

 

 

 

 

 

5.8 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

 

Multiple Entry Point
task body Teller is

loop

        select

          accept Drive_Up(formal params) do

end Drive_Up;

or

          accept Walk_Up(formal params) do

end Walk_Up;

end select;

end loop;

end Teller;

 

 

 

Cooperation Synchronization with Message Passing / Sinkronisasi Kooperatif dengan Message Passing

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

 

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

 

 

 

BAB XI

Exception Handling dan Event Handling

 

  1. 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

 

 

  1. 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.

 

  1. 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:
    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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BAB XII

Functional Programming dalam C#

12.1 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.

 

12.2 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.

12.3 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.

12.4 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)

 

12.5 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.

 

 

 

 

12.5 Perbedaan Functional Programming dan Imperative Programming

 

  1. 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

 

  1. 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.

  1. 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.

 

 

BAB XIII

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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).

 

Ref <Subprogram>

 

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).

 

 

 

 

 

 

Lampiran 1

INFORMASI ANGGOTA

 

David                                                                             (2001571494)

Link blog :dchen.blog.binusian.org

 

Eric Khantino Sunardi                                                 (2001552362)

Link blog :ricz97.blog.binusian.org

 

Gabriellyan Catheline Sanger                                      (2001557703)

Link blog :gcathelines.blog.binusian.org

 

Kevin Yulias                                                                  (2001551403)

Link blog :kevinyou.blog.binusian.org

 

Martandy                                                                      (2001546416)

Link blog :martandy.blog.binusian.org

 

Filed under:Uncategorized

Leave a Reply