Laporan Akhir PLC

Laporan Akhir

Programming Language Concept

Daftar Anggota Kelompok 6

NAMA NIM LINK MENUJU BLOG
JOVI ANDREAS 2001536365 joviandreas.blog.binusian.org
EDGAR WIJAYA 2001538515 edgar268.blog.binusian.org
FARRELL HANSEL 2001537052 farrellhansel.blog.binusian.org
HERMAN 2001538420 rustickey.blog.binusian.org
WILLIAM 2001536320 william042.blog.binusian.org

 

 

 

 

TOPIK 1 : SYNTAX AND SEMANTICS

 

Syntax adalah aturan menulis “kalimat” suatu program agar mampu dimengerti dengan benar oleh bahasa pemrograman.

 

Masalah umum dalam syntax :

  • Kalimat (sentences) adalah sebuah deret kata dari beberapa alphabet
  • Bahasa (Language) adalah kumpulan kalimat
  • Lexeme adalah tingkat terendah dari bahasa syntactic (contoh : sum, begin)
  • Token adalah kategori Lexeme (contoh : identifier)

Contoh syntax :

class Input

{

static void Main()

{

int var1, var2;

Console.WriteLine(“Program Penjumlahan”);

Console.WriteLine();

Console.Write(“Masukkan angka pertama: ”);

var1 = int.Parse(Console.ReadLine());

Console.Write(“Masukkan angka kedua: ”);

var2 = int.Parse(Console.ReadLine());

Console.WriteLine();

Console.WriteLine(“Jumlahnya adalah {0}.”, var1 + var2);

}

}

//ini adalah komentar

/*

Ini juga komentar baris ganda, untuk menulis body suatu kelas harus di awali dengan ‘{‘ dan diakhir dengan ‘}’

*/

 

Semantics adalah arti dari sebuah kalimat

Berbeda dengan bahasa sehari-hari yang sering memiliki lebih dari satu arti (ambigu), ‘kalimat’ dalam bahasa Pemrograman pasti hanya punya 1 arti.

Contoh grammar :

<program> ® <stmts>

<stmts> ® <stmt> | <stmt> ; <stmts>

<stmt> ® <var> = <expr>

<var> ® a | b | c | d

<expr> ® <term> + <term> | <term> – <term>

<term> ® <var> | const

 

Contoh Derrivation :

<program> => <stmts> => <stmt>

=> <var> = <expr>

=> a = <expr>

=> a = <term> + <term>

=> a = <var> + <term>

=> a = b + <term>

=> a = b + const

 

TOPIK 2 : NAMES, BINDINGS, AND SCOPES

 

NAMES

Identifier adalah suatu pengenal atau pengidentifikasi yang kita deklarasikan, dapat berupa : name (nama variable, konstanta fungsi,, kelas, template maupun fungsi

Untuk membuat nama identifier (name), ada beberapa syarat :

  1. Case Sensitive
  2. Nama identifier bisa terdiri dari satu atau beberapa karakter yang terdiri dari angka (0 – 9), huruf (A – Z, a – z), dollar ($), garis-bawah/underscore(_).
  3. Penamaan identifier harus dimulai dengan huruf, underscore(_), atau karakter dollar ($). Tidak boleh dimulai dengan angka. Simbol-simbol operator seperti (*), (+), (/), (-) tidak boleh digunakan.
  4. Tidak boleh menggunakan spasi.
  5. Tidak diperbolehkan menggunakan Kata-kata keyword dalam bahasa pemrograman (misalnya: public, class, static, dsb).
  6. Panjang nama identifier tidak dibatasi.

 

BINDINGS

Bindings adalah menyambungkan satu variable dengan source lain agar mudah di akses dan tidak perlu ketik ulang method lagi

Contoh dari bindings adalah menghubungkan suatu variabel dengan data dari database, XML, dsb.

Jenis – Jenis Bindings :

  • Early Binding/Static Binding

terjadi saat compile time. Kelebihannya adalah efisiensi, lebih cepat karena fungsi telah dipanggil saat compile time.

Contoh : method overloading

  • Late Binding/Dynamic Binding

terjadi saat runtime. Kelebihan Dynamic Binding adalah fleksbilitas.

 

 

Scope

Scope adalah ruang lingkup, Scope dari suatu variable menentukan bagian apa dalam program anda yang dapat mengakses variable tersebut

Contoh :

class Contact

{

public int age;

public void F()

{

age = 18;

}

public void G()

{

int age;

age = 21;

}

}

Sebagai contoh, di dalam class Contact mempunyai field yang bernama age, field tersebut dapat diakses oleh seluruh anggota dalam class Contact tersebut, pada method G, scope nya overlap/ketimpa, karena ada variabel baru yang dideklarasi dengan nama yang sama,  jadi ketika anda memanggil age dalam fungsi G, anda sebenarnya sedang memanggil variabel yang dideklarasi dalam method G tersebut.

Block Scope :

  • Kita bisa melakukan looping pada scopes (nested scope)
  • Variable yang dideklarasikan di dalam sebuah statement dengan kurung kurawal akan memiliki block scope

Contoh :

int sum = 0;

for(int i = 1; i <= 10; i++){

Console.WriteLine(“This is number” + sum);

}

Console.WriteLine(“The sum is ” + sum);

Note :

  • sum bisa diakses sebelum, selama dan setelah loop
  • i hanya bisa diakses selama masih loop

 

TOPIK 3 : DATA TYPES

 

Array

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

Array dapat di deklarasikan dalam beberapa format yaitu :

  • Single dimensional arrays
  • Multi dimensional arrays
  • Array of arrays

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

Koleksi yang tidak diperintah dari elemen data yang diindeks oleh jumlah yang sama dari nilai nilai yang disebut kunci.

Arrax Indexing

Indexing(atau subscripting) adalah sebuah pemetaan dari indeks ke elemen array_name (index_value_list) an element.

Tuple types

Sebuah tuple merupaka struktur data yang memiliki karateristik angka dan mempunyai urutan dari sebuah elemen.

Tuple types umumnya digunakan dalam 4 fungsi :

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

Type checking dibagi dua yaitu :

  • Static type checking
  • Dynamic type checking

 

 

 

Union

 

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

Pointer, 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.

 

Karateristik reference types :

  • Data reference typetidak disimpan pada stack, namun disimpan pada heapHeap ini digunakan oleh Garbage Collector untuk melakukan alokasi memori secara dinamis.

 

  • Dua atau lebih variabel dengan tipe reference type dapat menunjuk ke satu objek yang sama dalam heap,

 

  • memungkinkan operasi pada satu variabel mempengaruhi objek yang ditunjuk oleh variabel-variabel yang lain.

 

  • Pada umumnya reference typeslebih besar dan lebih lambat daripada value types

 

 

 

Bahasa pemrograman dengan Strong type dan Weak type Programming Language

 

Strong Type Progamming 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# :

 

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;

 

Weak Type 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

 

 

TOPIK 4 EXPRESSION AND ASSIGNMENT STATEMENTS

 

Ekspresi merupakan dasar dalam mengimplementasikan arti dari suatu komputasi dalam Bahasa pemrograman. Suatu ekspresi harus dituliskan sesuai dengan urutan. Suatu ekspresi terdiri dari operator dan operand. Ekspresi aritmatika adalah suatu ekspresi yang terdiri dari operator, operand, parentheses(scope), dan pemanggilan fungsi.

 

Terdapat 3 jenis operator dalam suatu ekspresi aritmatika, yaitu:

  1. Unary operator – ekspresi yang hanya memiliki 1 operand. Contoh i++, j–
  2. Binary operator – ekspresi yang memiliki 2 operand. Contoh a = b, c > d
  3. Ternary operator – ekspresi yang memiliki 3 operand. Contoh a = b + c

Suatu ekspresi di dalam Bahasa pemrograman C# akan dieksekusi terlebih dahulu oleh compiler menurut urutan yang sudah ditetapkan, yaitu:

  1. Parentheses(pernyataan yang terdapat di dalam scope)
  2. Unary operator
  3. **(pointer to pointer)
  4. *, /, %
  5. +, –
  6. Bitwise operator(<<, >>)
  7. Relational operator(<, >, <=, >=)
  8. Equality(==, !=)

Contoh ekspresi:

a = (b+c)*d

Pada contoh tersebut, yang akan dieksekusi terlebih dahulu adalah pernyataan di dalam scope yaitu (b + c), kemudian akan dikalikan dengan d.

Dalam Bahasa pemrograman C# juga dikenal Conditional expressions yaitu sebuah ekspresi yang menentukan statement yang akan dieksekusi sesuai dengan kondisinya.

Contoh:

If(Boolean expression)
statement1;
else statement2;

Ekspresi tersebut dapat diartikan sebagai berikut: Jika ekspresi boolean bernilai benar(pada kondisi sekarang), maka yang akan dieksekusi adalah statement1, namun jika bernilai salah, maka yang akan dieksekusi adalah statement2.

Ekspresi pada contoh diatas juga dapat ditulis sebagai berikut:

Boolean expression ? statement1 : statement2

Overloaded operator adalah suatu operator yang sudah dideklarasikan dengan tipe data tertentu, namun akan diganti dengan tipe data lainnya. Metode yang dapat digunakan pada Bahasa pemrograman C# adalah dengan cara casting.

Contoh:

Static void Main(string[] args)
{
double d=3.142;
int i;

i = (int) d;
Console.WriteLine(i);
Console.ReadLine();
}

Pada contoh di atas, terdapat overloaded operator yaitu terhadap variable d dimana pada variable tersebut dilakukan casting sehingga tipe datanya berubah dari double menjadi integer.

Terdapat 2 macam konversi dari tipe data, yaitu:

  1. Narrowing Conversion yaitu konversi tipe data dimana hasil konversi tipe datanya tidak dapat memuat seluruh nilai tipe data sebelumnya. Contohnya konversi float ke integer dimana beberapa nilai float tidak dapat dimuat pada tipe data integer seperti 3.45 pada tipe data integer akan dianggap sebagai 3.
  2. Widening Conversion yaitu konversi tipe data dimana hasil konversi tipe datanya dapat memuat seluruh nilai tipe data sebelumnya. Contohnya konversi integer ke float dimana semua nilai pada integer dapat dimuat pada tipe data float.

Unary assignment operator adalah suatu operasi yang hanya melibatkan sebuah operand(Contoh i++)

Terdapat 4 jenis operasi, yaitu:

  1. Pre-increment(++i) – menambah nilai i kemudian mengeksekusi statement setelahnya
  2. Pre-decrement(–i) – mengurangi nilai i kemudian mengeksekusi statement setelahnya
  3. Post-increment(i++) – mengeksekusi statement setelahnya lalu menambahkan nilai i
  4. Post-decrement(i–) – mengeksekusi statement setelahnya lalu mengurangi nilai i


 

TOPIK 5 : CONTROL STRUCTURE STATEMENTS

 

Control Structure adalah sebuah pernyataan yang mengontrol pernyataan mana yang akan dieksekusi. Control Structure dibagi menjadi 2 sub topik yaitu Selection Statement dan Iterative Statement.

Selection Statement

digunakan jika terdapat 2 atau lebih jalur yang akan dieksekusi menurut kondisi tertentu. Di dalam Bahasa pemrograman C#, kita dapat menggunakan if untuk melakukan selection. Terdapat 2 macam selection statements yaitu, two way selectors dan multiple way selectors.

Contoh.

If (a>b)
{
Console.WriteLine(“a melebihi b”);
}
else Console.WriteLine(“a tidak melebihi b”);

Contoh di atas merupakan contoh two way selectors, dimana terdapat 2 jalur untuk dieksekusi yang akan dipilih sesuai dengan kondisi.

Di dalam selection statement, juga dikenal nesting selectors yaitu adanya pernyataan seleksi di dalam suatu pernyataan seleksi(if di dalam if).

Contoh:

if (sum == 0) {
if (count == 0)
result = 0;
}
else result = 1;

Pada contoh diatas, result akan bernilai 0 jika sum bernilai 0 dan count juga bernilai 0. Jika sum tidak bernilai 0, maka result akan bernilai 1.

Multiple way selection adalah seleksi yang dapat memilih lebih dari 2 jalur untuk dieksekusi. Dalam bahasa pemrograman C#, kita dapat menggunakan switch case untuk melakukan multiple way selection. Pada setiap segmen, harus diakhiri dengan break atau go to, namun tidak setiap case harus diakhiri dengan break. Tipe data yang digunakan pada switch harus sama dengan tipe data yang digunakan peda setiap casenya.

Contoh.

static void Main(string[] args)

{

char grade = ‘B’;

 

switch (grade)

{

case ‘A’:

Console.WriteLine(“Excellent!”);

break;

case ‘B’:

case ‘C’:

Console.WriteLine(“Well done”);

break;

case ‘D’:

Console.WriteLine(“You passed”);

break;

case ‘E’:

case ‘F’:

Console.WriteLine(“Better try again”);

break;

default:

Console.WriteLine(“Invalid grade”);

break;

}

Console.WriteLine(“Your grade is  {0}”, grade);

Console.ReadLine();

}

 

Pada contoh diatas, tipe data pada case sama dengan tipe data pada switch yaitu char. Hasil yang akan muncul adalah “Well Done”, karena gradenya adalah B, sedangkan pada case B, tidak ada pernyataan dan tidak ada pula break sehingga compiler akan terus mengeksekusi hingga terdapat break.

 

 

 

Itterative Statements

Iterative statements adalah suatu statement yang dieksekusi secara berulang sampai kondisi tertentu sudah dipenuhi. Pada bahasa pemrograman C#, kita dapat menggunakan for, while, atau do-while dalam menjalankan looping.

Contoh:

static void Main(string[]args){
for(i=0;i<5;i++){
Console.WriteLine(“Nilai i adalah {0}“, i);
}
Console.ReadLine();
}

 

Pada contoh di atas, statement di dalam for akan dijalankan selama kondisinya benar. Statement yang berwarna merah adalah kondisi awal, statement yang berwarna hijau adalah kondisi akhir dimana jika kondisi tersebut bernilai salah, maka loop akan selesai, dan statement yang berwarna oranye berisi increment atau decrement.

Di dalam looping bisa juga diberikan statement break, sehingga dapat menghentikan loop pada kondisi tertentu, dengan cara menambahkan if ke dalam statement di dalam for.

 

 

TOPIK 6 : SUBPROGRAMS

Definisi Subprograms :

 

  • Subprograms (atau subroutines) – Kumpulan perintah untuk menjalankan suatu perintah.
  • Dapat dideklarasikan di suatu program, kelas, atau library.
  • Dapat menerima argument sebagai input, dan dapat mengembalikan (return) suatu nilai.
  • Di C# subprogram disebut sebagai method.

Kegunaan Subprograms :

 

  • Modular code – Kode yang sama dapat digunakan berulang-ulang.
  • Konsisten dan mudah untuk di bugfix.
  • Dapat digunakan/dipanggil oleh program lain.
  • Menganjurkan penulisan kode yang bersih dan mudah dibaca.

Method

Contoh Method :

 

 

Parameter

merupakan variabel dan tipe data yang dimasukkan ke dalam sebuah method scope. (disebut function dalam bahasa C)

Pemrograman C# akan membentuk parameter saat memulai menjalankan method dan menghapusnya saat mengakhiri method.

 

Perbedaan Pass by Value dengan Pass by Reference :

  1. Pass by Valuemengirimkan parameter berdasarkan nilai variabel asalnya yang akan dihubungkan terhadap paramater fungsi pemanggil.
  2. Pass by Referencemengirimkan parameter berdasarkan alamat dari nilai tertentu, maka dari itu bila ada nilai yang dirubah dari alamat asalnya maka akan terjadi perubahan juga terhadap nilai parameter yang di panggil.

 

 

TOPIK 7 : ABSTRACT DATA TYPES

ADT (Abstract Data Type) adalah suatu tipe data buatan pengguna (user-defined data type) yang memiliki semantik yang serupa. ADT dapat berupa tipe data dasar namun diberi nama baru atau berupa kumpulan tipe data berbeda yang diberi nama baru.

 

Implementasi dari ADT harus menyediakan cara tertentu untuk merepresentasikan unsur tipe data (seperti matrix) dan cara untuk mengimplementasikan operasi -operasi matrix. Secara tipikal, kita akan mendeskripsikan operasi-operasi pada ADT dengan algoritma (logika berfikir) tertentu. Algoritma ini biasanya berupa urutan instruksi yang menspesifikasi secara tepat bagaimana operasi-operasi akan dilakukan/dieksekusi oleh komputer.

Pada dasarnya, ADT adalah tipe data tertentu yang didefinisikan oleh pemrogram untuk kemudahan pemrograman serta untuk mengakomodasi tipe-tipe data yang tidak secara spesifik diakomodasi oleh bahasa pemrograman yang digunakan. Maka, secara informal dapat dinyatakan bahwa ADT adalah :

  1. Tipe data abstrak ADT pertama kali ditemukan oleh para ilmuan komputer utuk memisahkan struktur penyimpanan dari perilaku tipe data yang abstrak seperti misalnya, Tumpukan(Stack) serta antrian(Queue). Seperti kita duga, pemrogram tidak perlu tahu bagaimana Tumpukan(Stack) perubahan inplementasi ADT tidak mengubah program yang menggunakannya secara keseluruhan, dengan catatan bahwa interface ADT tersebut dengan ‘dunia luar’ tetap dipertahankan.
  2. Pemakaian dan pembuatan ADT dapat dilakukan secara terpisah. yang perlu dibicarakan antara pembuat dan pengguna ADT adalah interface ADT yang bersangkutan.
  3. ADT merupakan sarana pengembangan sistem yang bersifat modular, memungkinkan suatu sistem dikembangkan oleh beberapa orang anggota tim kerja dimana masing-masing anggota tim bisa melakukan bagiannya sendiri-sendiri dengan tetap mempertahankan keterpaduannya dengan anggota tim yang lain.

Dalam hal ini perlu dibedakan antara pengertian struktur data dan ADT. Struktur data hanya memperlihatkan bagaimana data-data di organisir, sedangkan ADT bercakupan lebih luas, yaitu memuat/mengemas struktur data tertentu sekaligus dengan operasi-operasi yang dapat dilakukan pada struktur data tersebut. Dengan demikian, definisi umum tentang ADT di atas dapat diperluas sebagai berikut :

Implementasi ADT={Struktur Data(Operasi-operasi yang Dapat Dilakukan Terhadap Struktur Data)}

Contoh ADT dalam bahasa C# :

public abstract class Shape

{

public abstract void Paint(Graphics g, Rectangle r);

//ini adalah method abstract

}

public class Ellipse: Shape

{

public override void Paint(Graphics g, Rectangle r) {

g.DrawEllipse(r);

}

}

public class Box: Shape

{

public override void Paint(Graphics g, Rectangle r) {

g.DrawRect(r);

}

}

 

Keterangan :

 

Kelas “Shape” didefinisikan dalam tipe asbstract, dimana fungsi tersebut berguna untuk menggambar sebuah bentuk. Kelas “Shape” dijadikan abstract karena kita belum mengetahui bentuk apa yang akan di gambar. Dengan kata lain, belum ada implementasi yang berarti. Untuk menggambar “Shape” maka kita harus membuat implementasi dari “Shape”. Dalam contoh di atas, implementasi tersebut adalah “Ellipse” dan “Box”. Keduanya merupakan iheritance atau turunan (disebut juga ‘child’) dari kelas parent mereka yakni “Shape”. Kedua anak ini mengimplementasikan kembali Method “Paint”. Pengimplementasian kembali ini disebut “Overriding”.

Syarat dari Overriding :

  • Memuat lebih dari satu kelas, teridiri dari satu kelas parent dan kelas – kelas child-nya
  • Nama method dengan seisi parameter dari kelas child, harus sama dengan method kelas parent
  • Implementasi atau definisi dari sebuah method tersebut harus berbeda dengan method yang berada di kelas parent

 

Selain Overriding, di dalam Object Oriented Programming dikenal juga istilah Overloading.

Syarad dari Overloading :

  • Memuat satu kelas saja, bila lebih dari satu kelas, tidak disebut sebagai overloading
  • Nama method harus sama satu dengan yang lain
  • Parameter harus berbeda dari segi :
    • Jumlah

contoh :

int tambah(int x, int y){

return x+y;

}

 

int tambah(int x, int y, int z){

return x+y+z;

}

 

  • Tipe data

contoh :

 

void cetak(int x){

Console.WriteLine(“{0}”,x);

}

 

void cetak(string x){

Console.WriteLine(“{0}”,x);

}

 

  • Urutan tipe data

contoh :

 

void cetak(String x, int y){

Console.WriteLine(“Nama : {0}, Umur : {1}”,x, y);

}

 

void cetak(int x, string y){

Console.WriteLine(“Nama : {1}, Umur : {0}”,x, y);

}

 

 

TOPIK 8 : OBJECT ORIENTED PROGRAMMING

Di dunia pemrograman modern sekarang ini, Object Oriented Programming adalah metode pemrograman yang sangat populer. Banyak sekali bahasa pemrograman yang berorientasi pada objek (misalnya C++, Java, C#).

Pemrograman Berorientasi Objek merupakan pemrograman yang berorientasi kepada objek, dimana semua data dan fungsi dibungkus dalam class-class atau object-object. Setiap objek dapat menerima pesan, memproses data, mengirim, menyimpan dan memanipulasi data. Beberapa objek berinteraksi dengan saling memberikan informasi satu terhadap yang lainnya.

Masing – masing objek harus berisikan informasi mengenai dirinya sendiri dan dapat dihubungkan dengan objek yang lain. Pemrograman berorientasi objek berbeda dengan pemrograman prosedural yang hanya menggunakan satu halaman kebawah untuk mengerjakan banyak perintah atau statement block.

Paradigma Pemrograman Berorientasi Objek ini telah menggantikan teknik pemrograman berbasis prosedur. Perbedaan antara Pemrograman Prosedural dengan Object Oriented Programming sebagai berikut,

Procedural :

  • Urutan dari atas ke bawah / sebaliknya
  • Pemrograman terstruktur
  • Terfokus pada algoritma dan alur program
  • Mengidentifikasi pekerjaan

Object Oriented :

  • Tidak berurut namun berdasarkan model objek
  • Menyembunyikan bagaimana objek tersebut melakkukan pekerjaannya
  • Terfokus pada apa yang objek lakukan
  • Mengidentifikasi sifat program

Dalam konsep OOP (Object Oriented Programming) dikenal beberapa istilah umum :

  1. Attribute/State/ Properties/Field

Atribut dari sebuah kelas adalah variabel global yang dimiliki sebuah kelas, Atribut dapat memiliki access modifier private, public maupun protected.

  • Private :           Kelas lain tidak dapat mengaksesnya secara langsung
  • Public :           Dapat diakses secara langsung oleh kelas manapun
  • Protected :           Hanya dapat diakses secara langsung oleh kelas itu       sendiri dan turunannya (inheritance).

Karakteristik Atribut

 

Dalam class, atribut disebut sebagai variabel. Atribut dapat membedakan antara satu object dengan object yang lain. Sebagai contoh, pada class : mahasiswa, terdapat object mahasiswa si A, dan object mahasiswa si B.

 

Yang membedakan antara object si A dan si B adalah NIM-nya (Nomor Induk Mahasiswa) yang merupakan atribut dari objek tersebut. Pada atribut, terdapat pula dua istilah variabel, yaitu Instance Variabel dan Class Variable.

  • Instance Variabel : tiap object memiliki instance variabel dan                                   menyimpan nilainya  sendiri – sendiri.
  • Class Variabel : atribut yang dimiliki oleh semua object yang berasal dari class yang sama, serta semua object memiliki nilai class variabel yang sama. atribut yang dimiliki object dari class yang sama.
  1. Method

 

Method adalah fungsi atau prosedur yang dibuat oleh seorang programmer didalam suatu Class. Pada sebuah method di dalam sebuah kelas juga memiliki izin akses (access modifier) seperti halnya atribut pada kelas, izin akses itu antara lain private, public dan protected yang memiliki arti sama pada izin akses atribut.

 

Sebuah kelas boleh memiliki lebih dari satu method dengan nama yang sama asalkan memiliki parameter masukan yang berbeda sehingga kompiler atau interpreter dapat mengenali method mana yang dipanggil.   Hal ini dinamakan overloading.

 

Di dalam sebuah kelas, terdapat juga yang disebut sebagai method atau atribut statis yang memiliki kata kunci static (method yang dapat diakses secara berbagi dengan semua objek lain tanpa harus membuat objek yang memiliki method statis tadi dengan proses new) namun sebuah method statis hanya dapat mengakses atribut atau method lain di dalam kelas yang membungkusnya yang juga bersifat statis. Method statis biasanya diimplementasikan untuk method main.

 

Karakteristik Method

 

Didalam suatu class, behavior / sifat disimpan dalam bentuk Method. Method merupakan serangkaian statemen / perintah dalam suatu class yang menghandle task tertentu. Method merupakan hal-hal yang bisa dilakukan oleh object dari suatu class. Method didefinisikan pada class akan tetapi dipanggil melalui object.

 

Method memiliki peranan diantaranya :

  • Merubah nilai atribut dari suatu object,
  • Menerima informasi dari object lain, dan
  • Mengirim informasi ke obyek lain untuk melakukan suatu task (cara obyek berkomunikasi dengan obyek lain adalah dengan menggunakan method).

 

  1. Class

 

Merupakan model yang berisi kumpulan attribute dan method dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh class manusia memiliki attribute berat, tinggi, usia kemudian memiliki method makan, minum, tidur. Sebuah class merupakan dasar dari modularitas dan struktur dalam pemrograman berorientasi object.

 

Definisi dan Gambaran Umum Class

 

Class didefinisikan sebagai sebuah blueprint (denah) yang mendefiniskan variabel-variabel dan metode-metode yang umum untuk semua objek dari jumlah jenis tertentu. Sebuah kelas menyerupai sebuah struktur yang merupakan tipe data sendiri, misalkan tipe data titik yang terdiri dari koordinat x dan y.

 

Perbedaan sebuah kelas dengan sebuah struktur adalah sebuah kelas dapat berdiri sendiri dan dapat digunakan untuk berbagai keperluan kelas-kelas yang lain, sedangkan sebuah struktur tidak dapat berdiri sendiri. Sebuah kelas lebih fleksibel untuk digunakan oleh kelas lain tanpa harus membongkar kode program utama, sedangkan jika digunakan struktur maka kode program harus dibongkar unuk disalin bagian strukturnya ke kode program utama yang lain.

 

Pemahaman singkatnya :

  • Class merupakan pola / template yang menggambarkan kumpulan object yang mempunyai sifat dan perilaku yang sama.
  • Class merupakan struktur data dari object (blueprint dari sebuah object), dan proses pembuatan object dari sebuah class disebut juga dengan instantiation.
  • Class merupakan definisi data dan fungsi dari suatu hal (benda, konsep, dll).
  • Di dalam class dideklarasikan variabel dan method yang dimiliki oleh obyek
  1. Object

Object merupakan sesuatu yang memiliki identitas (nama), pada umumnya juga memiliki data tentang dirinya maupun object lain dan mempunyai kemampuan untuk melakukan sesuatu dan bisa bekerja sama dengan objek lainnya. Pada dasarnya semua benda yang ada di dunia dapat dianggap sebagai sebuah object. Rumah, mobil, sepeda motor, meja, dan komputer merupakan contoh-contoh object yang ada di dunia nyata. Object adalah implementasi dari class. Secara sederhananya, dapat dikatakan terdiri dari properti (atribut) dan method.

Pemahaman singkatnya :

  • Objek merupakan sebuah objek khusus yang digunakan untuk mengakses anggota objek (atribut atau method) dari dalam objek itu sendiri.
  • Apabila terdapat variabel lain yang memiliki nama yang sama dengan nama atribut di dalam objek, “this” dapat digunakan untuk merujuk ke atribut objek.

Karakteristik Object

Setiap object memiliki dua karakteristik yang utama, yaitu atribut dan behavior. Atribut merupakan status object dan behavior merupakan tingkah laku dari object tersebut.

Contoh Objek Sepeda :

  • Sepeda memiliki atribut ( state ) : pedal, roda, jeruji, dan warna.
  • Sepeda memiliki tingkah laku ( behaviour ) : kecepatannya menaik, kecepatannya menurun, dan perpindahan gigi sepeda.

Dalam pengembangan perangkat lunak berorientasi objek, objek dalam perangkat lunak akan menyimpan state-nya dalam variabel dan menyimpan informasi tingkah laku ( behaviour ) dalam method-method atau fungsi-fungsi/prosedur.

  1. Abstraction

Adalah suatu cara untuk melihat suatu object dalam bentuk yang lebih sederhana. Sebagai contoh kita tidak melihat sebuah mobil sebagai ribuan komponen elektronik, sistem mekanik dengan empat buah ban, jok, stir kemudi dan sebagainya. Dengan Abstraction, suatu sistem yang kompleks dapat dipandang sebagai kumpulan subsistem-subsistem yang lebih sederhana, seperti halnya mobil merupakan suatu sistem yang terdiri atas berbagai subsistem, seperti subsistem kemudi, subsistem pengereman dan sebagainya.

 

Abstraksi merupakan kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan.

 

Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.

 

  1. Encapsulation

Merupakan suatu mekanisme untuk menyembunyikan atau memproteksi suatu proses dari kemungkinan interferensi atau penyalahgunaan dari luar sistem dan sekaligus menyederhanakan penggunaan sistem tersebut.

 

Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak. Hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.

 

  1. Inheritance

Merupakan konsep mewariskan attribute dan method yang dimiliki oleh sebuah class kepada class turunannya. Dengan konsep ini class yang dibuat cukup mendefinisikan attribute dan method yang spesifik didalamnya, sedangkan attribute dan method yang lebih umum akan didapatkan dari class yang menjadi induknya.

 

Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada.Objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)

 

  1. Polymorphism

Merupakan konsep yang memungkinkan digunakannya suatu interface yang sama untuk memerintah suatu object agar melakukan suatu tindakan yang mungkin secara prinsip sama tetapi secara proses berbeda.

 

Model data berorientasi objek disebut dapat memberi fleksibilitas yang lebih, kemudahan mengubah program dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya selain itu pendekatan OOP lebih mudah dikembangkan dan dirawat.

 

Polimorfisme melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan, dengan metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesan tersebut dikirim.

 

Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.

 

 

TOPIK 9 : CONCURENCY

Concurrency adalah sebuah istilah programming dimana lebih dari satu proses sedang berjalan bersamaan dengan proses lain. Proses – proses yang sedang berjalan ini dapat berinteraksi dengan satu sama lain (bergantung dan berkomunikasi dengan proses-proses tersebut), atau berdiri sendiri sendiri (independen dari proses-proses lain).

Dalam C#, nama proses-proses ini disebut sebagai sebuah Thread. Sebuah Thread dapat dideclare dengan menurunkannya dari System.Threading.Thread, dan memanggil fungsi-fungsi dari System.Threading.Monitor. Thread adalah bagian integral dalam perwujudan concurrency dalam C#.

Synchronization, liveliness, dan deadlock

Sinkronisasi adalah proses pengaturan jalannya beberapa proses pada saat yang bersamaan. Tujuan utamanya adalah menghindari terjadinya inkonsitensi data karena pengaksesan oleh beberapa proses yang berbeda, serta untuk mengatur urutan jalannya proses-proses sehingga dapat berjalan dengan lancar dan terhindar dari deadlock dan starvation.

Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi. Dalam C# terdapat keyword lock untuk membuat sebuah block dimana code didalam block ini hanya dapat diakses oleh satu Thread pada suatu saat (mutual exclusion). Statement lock didentukan berdasarkan suatu monitor(dalam hal ini, monitor yang digunakan adalah sebuah lock object).

 

 

 

 

 

 

 

 

 

Disini, objek thisLock digunakan sebagai lock object, dimana dalam block ini dapat dijalankan statement statement yang diinginkan.

 

            Liveliness adalah suatu sifat abstrak dimana sebuah thread dapat mencapai akhir code, dalam kata lain thread tersebut dapat menyelesaikan semua instruksi yang seharusnya diselesaikan. Dalam suatu lingkungan dimana concurrency sangat kuat, liveliness semua thread semakin sulit untuk dipertahankan. Jika semua thread dalam suatu lingkungan yang concurrent kehilangan livelinessnya, atau dalam kata lain tidak dapet menyelesaikan semua instruksinya, maka kejadian tersebut dinamakan deadlock.

Sebuah deadlock dapat terjadi jika satu thread menunggu thread lainnya, dan thread lainnya juga menunggu thread tersebut, dan seterusnya, sehingga semua thread menunggu satu sama lain untuk menyelesaikan tugasnya. Namun, karena semuanya menunggu, tidak ada yang dapat menyelesaikan tugas mereka, sehingga mereka akan terus menunggu. Hal ini dapat terjadi pada program yang ketataan thread controlnya kurang baik.

Thread Control dalam C#

Dalam C#, ada berbagai cara untuk mengoperasikan sebuah Thread, yang berada dalam class Monitior atau class Thread. Ada Start, Wait, Pulse/PulseAll, Sleep, Yield, Suspend, Resume, Interrupt, Join, dan Abort.

 

 

Sesuai namanya, Start memerintahkan suatu thread untuk dimulai. Entry point dari suatu thread diekspresikan dengan pertama membuat suatu objek reference dari ThreadStart yang parameternya berisi method yang ingin dijadikan sebagai entry point, kemudian baru dibuatlah objek threadnya. Dalam code diatas, CallToChildThread menjadi entry point childThread.

 

Dalam thread control, Wait, Sleep, Suspend, dan Yield digunakan untuk memberhentikan suatu thread selama waktu tertentu, atau sampai thread tersebut dibangunkan oleh thread lain. Sleep memberhentikan suatu thread dalam panjang millisecond, Yield “menyerahkan” privilegenya dalam menggunakan satu CPU cycle, Suspend memberhentikan thread tersebut sementara berdasarkan thread yang memanggil method Suspend, dan Wait memerintahkan suatu thread untuk menunggu berdasarkan suatu lock object sampai diPulse kembali.

 

Biasanya dianjurkan untuk menggunakan Wait daripada Yield atau Suspend jika ingin mengpause sebuah Thread. Ini karena  penggunaan yield sebagai pause dapat menggunakan jumlah CPU cycles yang tinggi, sehingga performa menjadi tidak optimal. Untuk Suspend, karena thread yang disuspend tidak dapet diinterrupt/diganggu, maka akan lebih mudah terjadi situasi dimana suatu thread tidak dapat diresume, sehingga terjadi yang namanya deadlock, karena suatu Thread hanya dapat diresume oleh thread yang memanggilnya untuk Suspend.

Pulse(All), Interrupt, dan Resume digunakan untuk melanjutkan atau merubah jalur (flow) dari suatu thread. Pulse/PulseAll digunakan dalam suatu lock block untuk membangunkan satu atau semua thread yang menunggu pada lock tersebut. Resume memanggil suatu thread yang telah diSuspend. Yang terakhir, Interrupt digunakan untuk memberhentikan suatu thread (jika ada catch ThreadInterruptedException) dan menjalankan code dalam block catch tersebut.

 

Lalu ada method Join, method ini akan memanggil suatu thread dari thread lain. Pada thread lain ini, eksekusi thread akan berhenti, dan thread yang dipanggil akan mulai. Thread lain ini hanya akan melanjutkan eksekusinya saat thread yang terpanggil sudah selesai. Eksekusi thread akan mulai lagi, pada barisan code setelah method join dipanggil.

 

 

 

Output dari program Thread tersebut. Disini, Thread1 dimulai terlebih dahulu, namun, saat Thread2 dijoinkan, Thread1 langsung menunggu sampai Thread2 selesai. Saat Thread2 selesai, Thread1 kembali berjalan.

 

 

 

Yang terakhir adalah Abort. Abort digunakan untuk mem”bunuh” atau mengakhiri sebuah Thread secara paksa sebelum thread tersebut sampai ke akhir codenya. Method ini sudah terdeprecate dan sebaiknya tidak digunakan jika kita ingin mengakhiri sebuah Thread, karena dapat terjadi banyak skenario dimana exception ThreadAbortException dapat dithrow dimanapun dan kapanpun. Mungkin bisa, setiap kali suatu thread diabort, exception tersebut dapat dicatch, namun itu akan memperburuk dan memperumit suatu code yang seharusnya sederhana. Yang membuatnya lebih fatal lagi, ThreadAbortException ini tidak mengakibatkan program untuk tutup jika terjadi, sehingga program akan tetap berjalan, dan Thread tersebut tidak terabort.

Oleh karena itu, C# menyarankan penggunaan suatu flag daripada pemanggilan Abort. Maksud dari penggunaan flag ini ialah penggunaan suatu variable sebagai flag yang menentukan jika thread tersebut masih bisa berjalan apa tidak.

 

 

TOPIK 10 : EXCEPTION HANDLING AND EVENT HANDLING

Sebuah exception adalah masalah yang terjadi jika ada sesuatu yang mengubah alur eksekusi program dengan drastis, umumnya berupa error-error yang terjadi saat runtime. Saat terjadi sebuah exception, program akan terhenti secara abnormal atau secara tiba tiba. Ini adalah hal yang biasanya programmer ingin hindari, karena dapat menyebabkan data corruption jika exception terjadi saat penulisan/pembacaan file.

Dalam C#, semua exception merupakan subtype dari kelas System.Exception. Exception dapat terjadi karena banyak hal, beberapanya termasuk, tapi tidak terbatas oleh:

  • Pemasukkan input yang tidak sesuai (program meminta integer, pengguna memasukkan string)

ArgumentException

  • File yang dicari tidak ditemukan

FileNotFoundException

  • Pengaksesan elemen diluar ukuran array atau arraylist

IndexOutOfRangeException

  • Penglakuan operasi aritmatika yang illegal (seperti pembagian dengan nol)

DivideByZeroException

  • Mengakses suatu nilai variable yang bernilai null

NullReferenceException

Dalam C# tidak terdapat checked exceptions, yaitu exceptions yang sudah terdeteksi pada compile time dan wajib dikurungi dalam block try catch.

Exception Handling dalam C#

Exception handling adalah proses mengatasi suatu exception yang terjadi saat runtime, sehingga exception tersebut tidak mengakibatkan suatu error yang parah. Dalam C#, exception handling diimplementasikan dengan dua cara, yakni try catch finally, dan throw.

Cara pertama, try dan catch, menggunakan kedua statement tersebut dalam C#. Sesuai namanya, statement block try berarti program tersebut akan mencoba statement-statement yang terdapat dalam block try tersebut, dan mengecek exception apapun yang terjadi saat pengeksekusian statement. Selanjutnya, jika dalam try terjadi sebuah exception, program akan menuju ke block catch, yang akan “menangkap” exception tersebut, dan menjalankan code didalam block catch tersebut. finally biasanya digunakan untuk mengfinalisasikan aksi setelah block try dan catch. Block finally akan selalu terjalan walaupun tidak terjadi suatu exception.

Contoh bagian program yang mengimplementasikan fitur exception handling dalam C#, dengan metode try, catch, dan finally.

 

Pada contoh code tersebut, program ingin membuka file text yang bernama “test.txt”. StreamReader akan dipakai dalam program ini untuk membaca file tersebut. Pertama, program akan memasuki block try dan mencoba untuk membaca file tersebut. Jika terjadi suatu exception, seperti file yang tidak ditemukan, atau isi yang dibaca tidak sesuai spesifikasi, maka program akan langsung berhenti dan masuk kedalam block catch dan kemudian mencetak sebuah error message. Program kemudian memasuki block finally. Di block ini, program pertama mengecek bahwa file ada (!= null), dan jika ada, maka file akan diclose agar dapat diakses oleh program lain, atau agar tidak terjadi read/write yang tidak diinginkan.

Dalam code ini, jika seluruh file dapat dibaca tanpa error, maka program hanya akan langsung lompat kedalam block finally dan kemudian menutup file tersebut.

 

Didalam C#, user juga dapat membuat exception mereka sendiri dengan menggunakan keyword throw. Walaupun biasanya tidak perlu dilakukan, ini memberikan fleksibilitas yang cukup kepada para developers jika mereka ingin membuat exception-exception yang terspesialisasi untuk program mereka. Contoh pembuatan suatu exception dengan throw adalah sebagai berikut.

 

 

Pada potongan program diatas, developer telah membuat class yang bernama TempIsZeroException yang diturunkan dari class Exception. Dalam class ini terdapat constructor yang menerima parameter message, ini yang akan menjadi pesan yang akan diprint di console. Lalu dibuat lagi sebuah class Temperature yang memiliki fungsi showTemp. Dalam showTemp ini, jika temperature bernilai nol, maka program akan mengthrow object dari TempIsZeroException dengan pesan “Zero Temperature found”. Jika tidak nol, maka temperaturenya akan dicetak pada console.

Cara menggunakan exception buatan baru ini adalah dengan membuat object temp dari Temperature, dan memanggil method showTemp. Karena nilai temperature masih nol, maka method showTemp mengthrow TempIsZeroException, yang kemudian akan diterima oleh block catch.

Output program.

 

 

TOPIK 11 : FUNCTIONAL PROGRAMMING

Functional programming adalah salah satu style dalam membuat struktur dan elemen dalam program komputer(programming paradigm). Contoh style lainnya seperti OOP(object oriented programming) , procedural programming(imperative), dan modular programming.

 

Style yang digunakan functional programming adalah membuat program dengan struktur pembangun utamanya adalah function. Atau lebih spesifiknya function murni (pure function).

Konsep dalam Functional Programming

Functional Programming memiliki beberapa konsep yang menjadi ciri khasnya yaitu:

 

  1. Pure Function

Atau disebut juga function murni adalah function yang tidak mengakibatkan efek samping(side effect) . Efek samping di sini artinya function yang digunakan tidak mengubah nilai variable di luar scoop function, tidak mengandung perintah input maupun output. Function yang digunakan hanya untuk mengembalikan atau me-return nilai function tersebut.

 

Kelebihan:

  • Return function value yang konsisten, independen, dan dapat direproduksi.
  • Sistem dimana program hanya akan mengecek argument yang dipakai di dalam function, jika argument yang tidak valid (contoh: 2/0) tidak termasuk dalam function maka program tidak akan error. (Laziness dalam Bahasa C# digunakan dengan menggunakan keyword Lazy).

Contoh: print length([2+1, 3*2, 1/0, 5-4])

Code di atas tidak akan error jika menggunakan konsep laziness, dan menghasilkan angka 4, tetapi pada programming paradigm yang tidak memakai konsep laziness code tersebut error karena mengandung pembagian degan 0.

  • Referential Transparancy. Ekspresi dikatakan referentially transparan jika menghasilkan output yang sama saat dimasukkan input yang sama.

 

Dari code di atas yang merupakan pure function adalah sum, sedangkan function multiply memiliki side effect seperti melakukan output di dalamnya.

 

  1. Immutability

Adalah konsep dimana variable yang sudah memiliki nilai tidak dapat dirubah nilainya, function tidak mengubah nilai dari variable tetapi hanya mengeluarkan output sesuai dengan input.

 

  1. Recursion

Functional programming dalam menggunakan looping atau iterasi hanya dapat dilakukan dengan menggunakan function recursive, ini dikarenakan looping menggunakan for

 

Saat menggunakan iterasi menggunakan for dalam c# pada contoh di atas nilai a sudah di set ke 0 dan saat melakukan looping nilai ini terus berubah hal inilah yang disebut mutasi, sedangkan functional programming tidak memperbolehkan mutasi sehingga hanya dapat menggunakan function recursive.

 

  1. High Order Function.

Adalah konsep yang menggunakan function sebagai argument untuk function lain, atau sebagai return value pada function lain.

 

Contoh di atas menunjukkan high order function pada function sum, function ini menerima function lain sebagai argument dan juga mengembalikan(me-return) value dengan function

  1. Currying

adalah teknik mengubah function yang menggunakan beberapa argumen menjadi sekumpulan metode terurut yang  masing-masing hanya menggunakan  satu argumen.

Pada contoh di atas terlihat perbedaan saat pembuatan function Multiply, function Multiply yang dibuat dalam bentuk curry dapat digunakan sebagai value pada suatu variable, dengan penggunaan function seperti ini maka function akan lebih dinamis dan mempermudah saat kita ingin menggunakan perkerjaan sejenis.

 

 

TOPIK 12 : LOGICAL PROGRAMMING LANGUAGE

Logic Programming adalah salah satu programming paradigm, yang menulis program sebagai sekumpulan aturan logical, bukan sebagai sekumpulan  perintah pemograman untuk dijalankan.

 

C# tidak men-suport Logical Programming Language, salah satu Bahasa yang murni mengimplementasi konsep Logical Programming Language adalah Prolog

 

Name Symbol Example Meaning
negation Ø Ø a not a
conjunction Ç a Ç b a and b
disjunction È a È b a or b
equivalence º a º b a is equivalent to b
implication É

Ì

a É b

a Ì b

a implies b

b implies a

Logic menggunakan simbol-simbol logika matematika

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contoh konsep dalam Logical Programming Language seperti berikut

 

 

Dalam konsep modus ponen

 

 

Resolusi adalah procedure inference untuk first order logic,
Setiap kalimat yang terkandung oleh KB dapat diturunkan dengan resolusi

 

 

 

Contoh di atas adalah contoh dari Logic programming language menggunakan Bahasa pemograman prolog.

 

 

 

 

 

 

 

 

Sources :

 

 

Artikel HTTP

Sabtu, 10 September 2016, HIMTI(Himpunan Mahasiswa Teknik Informatika) Bina Nusantara mengadakan acara kebersamaan yang disebut HTTP(Himti Togetherness and Top Performance). Acara HTTP ini diperuntukkan kepada mahasiswa baru School of Computer Science Bina Nusantara sebagai suatu acara yang dapat mempererat hubungan antara sesama mahasiswa Computer Science. Acara ini diadakan di Gedung BPPT II di Jalan M. H. Thamrin No. 8, Jakarta Pusat.

HTTP kali ini mengangkat tema “Passion, Inovation, and Togetherness”. Banyak sekali hal yang bisa didapat dari acara ini, mulai dari adanya seminar PBC(Pengenalan Bahasa C) yang diadakan sebelum acara HTTP untuk membekali para mahasiswa dalam mempelajari bahasa C. Dalam acaranya, ada juga banyak hal menarik, ada performa dari Peanut Butter Band yang anggotanya merupakan anggota HIMTI, performa Adam Siqdon yang membawakan beberapa lagu, game berhadiah, makan siang tentunya, talk show dengan mahasiswa HIMTI, drama musikal komedi, dance performance, dan terakhir adalah guest star yaitu DJ Angelo dan Major Lazer. Tidak hanya sampai disitu, HIMTI juga memberikan HIMTI Kit yang dapat membekali para mahasiswa dalam kehidupan perkuliahannya.

Sekian artikel HTTP saya, terima kasih sudah membaca 😀