| FazBrowse Wikipedia Viewer | Main Page | | |
| Viewing: https://id.wikipedia.org/wiki/Program_komputer |
Program komputer adalah urutan atau sekumpulan instruksi dalam suatu bahasa pemrograman yang harus dijalankan oleh komputer. Program komputer merupakan salah satu komponen perangkat lunak, yang juga mencakup dokumentasi dan komponen tak berwujud lainnya.
Program komputer dalam bentuk yang dapat dibaca manusia disebut kode sumber. Kode sumber memerlukan program komputer lain untuk menjalankannya karena komputer hanya dapat menjalankan instruksi mesin aslinya. Oleh karena itu, kode sumber dapat diterjemahkan menjadi instruksi mesin menggunakan kompilator yang ditulis untuk bahasa tersebut. (Program dalam bahasa rakitan diterjemahkan menggunakan assembler.) Berkas yang dihasilkan disebut berkas dapat dieksekusi. Sebagai alternatif, kode sumber dapat dijalankan di dalam interpreter yang ditulis untuk bahasa tersebut.
Jika berkas dapat dieksekusi diminta untuk dijalankan, sistem operasi memuatnya ke dalam memori dan memulai sebuah proses. Unit pemrosesan pusat kemudian akan segera beralih ke proses tersebut sehingga dapat mengambil, mendekode, lalu menjalankan setiap instruksi mesin.
Jika kode sumber diminta untuk dijalankan, sistem operasi memuat interpreter yang sesuai ke dalam memori dan memulai sebuah proses. Interpreter kemudian memuat kode sumber ke dalam memori untuk menerjemahkan dan menjalankan setiap pernyataan. Menjalankan kode sumber lebih lambat daripada menjalankan berkas dapat dieksekusi. Selain itu, interpreter harus terpasang pada komputer.
Bahasa imperatif menentukan algoritma berurutan menggunakan deklarasi, ekspresi, dan pernyataan:
FORTRAN (1958) diperkenalkan sebagai "The IBM Mathematical FORmula TRANslating system". Bahasa ini dirancang untuk perhitungan ilmiah, tanpa fasilitas penanganan string. Selain deklarasi, ekspresi, dan pernyataan, bahasa ini mendukung:
Bahasa ini berhasil karena:
Namun, vendor non-IBM juga menulis kompilator Fortran, tetapi dengan sintaks yang kemungkinan gagal dikompilasi oleh kompilator IBM. American National Standards Institute (ANSI) mengembangkan standar Fortran pertama pada 1966. Pada 1978, Fortran 77 menjadi standar hingga 1991. Fortran 90 mendukung:
COBOL (1959) merupakan singkatan dari "COmmon Business Oriented Language". Fortran memanipulasi simbol. Segera disadari bahwa simbol tidak harus berupa angka, sehingga string diperkenalkan. Departemen Pertahanan Amerika Serikat memengaruhi pengembangan COBOL, dengan Grace Hopper sebagai salah satu kontributor utama. Pernyataannya menyerupai bahasa Inggris dan bersifat panjang. Tujuannya adalah merancang bahasa agar manajer dapat membaca program. Namun, kurangnya pernyataan terstruktur menghambat tujuan tersebut.
Pengembangan COBOL dikendalikan secara ketat, sehingga tidak muncul dialek-dialek yang memerlukan standar ANSI. Akibatnya, COBOL tidak mengalami perubahan selama 15 tahun hingga 1974. Versi tahun 1990-an memang membuat perubahan penting, seperti pemrograman berorientasi objek.
ALGOL (1960) merupakan singkatan dari "ALGOrithmic Language". Bahasa ini memiliki pengaruh besar terhadap desain bahasa pemrograman. Dikembangkan oleh komite ahli bahasa pemrograman dari Eropa dan Amerika, bahasa ini menggunakan notasi matematika standar serta memiliki desain yang mudah dibaca dan terstruktur. Algol merupakan bahasa pertama yang mendefinisikan sintaksnya menggunakan bentuk Backus–Naur. Hal ini menghasilkan kompilator terarah sintaks. Bahasa ini menambahkan fitur seperti:
Keturunan langsung Algol mencakup Pascal, Modula-2, Ada, Delphi dan Oberon pada satu cabang. Pada cabang lainnya, keturunannya mencakup C, C++ dan Java.
BASIC (1964) merupakan singkatan dari "Beginner's All-Purpose Symbolic Instruction Code". Bahasa ini dikembangkan di Dartmouth College agar semua mahasiswanya dapat mempelajarinya. Jika seorang mahasiswa tidak melanjutkan ke bahasa yang lebih kuat, ia tetap akan mengingat Basic. Sebuah interpreter Basic dipasang pada komputer mikro yang diproduksi pada akhir 1970-an. Seiring pertumbuhan industri komputer mikro, bahasa tersebut juga berkembang.
Basic memelopori sesi interaktif. Bahasa ini menyediakan perintah sistem operasi di dalam lingkungannya:
Namun, sintaks Basic terlalu sederhana untuk program berukuran besar. Dialek-dialek terbaru menambahkan struktur dan ekstensi berorientasi objek. Microsoft Visual Basic masih banyak digunakan dan menghasilkan antarmuka pengguna grafis.
Bahasa pemrograman C (1973) mendapatkan namanya karena bahasa BCPL digantikan oleh B, dan AT&T Bell Labs menyebut versi berikutnya "C". Tujuannya adalah menulis UNIX sistem operasi. C merupakan bahasa yang relatif kecil sehingga memudahkan penulisan kompilator. Pertumbuhannya mengikuti perkembangan perangkat keras pada 1980-an. Pertumbuhannya juga disebabkan oleh fasilitas yang dimilikinya dari bahasa rakitan, tetapi menggunakan sintaks tingkat tinggi. Bahasa ini menambahkan fitur-fitur tingkat lanjut seperti:
C memungkinkan pemrogram mengendalikan wilayah memori tempat data disimpan. Variabel global dan variabel statis memerlukan jumlah siklus clock paling sedikit untuk disimpan. Stack digunakan secara otomatis untuk deklarasi variabel standar. Memori heap dikembalikan ke variabel pointer dari fungsi malloc().
Dalam terminologi berorientasi objek, tipe data abstrak disebut kelas. Namun, kelas hanyalah definisi; tidak ada memori yang dialokasikan. Ketika memori dialokasikan untuk suatu kelas dan diikat ke sebuah pengenal, kelas tersebut disebut objek.
C++ (1985) awalnya disebut "C with Classes". Bahasa ini dirancang untuk memperluas kemampuan C dengan menambahkan fasilitas berorientasi objek dari bahasa Simula. Sebuah kelas C++ mengenkapsulasi item data yang berkaitan bersama fungsi-fungsi yang memanipulasinya.
Bahasa imperatif berorientasi objek berkembang dengan menggabungkan kebutuhan akan kelas dan kebutuhan akan pemrograman fungsional yang aman. Sebuah fungsi dalam bahasa berorientasi objek ditetapkan ke suatu kelas. Fungsi yang ditetapkan tersebut kemudian disebut metode, fungsi anggota, atau operasi. Pemrograman berorientasi objek adalah pelaksanaan operasi terhadap objek.
C++ mendukung sintaks untuk memodelkan hubungan subset/superset. Dalam teori himpunan, sebuah elemen dari subset mewarisi semua atribut yang terdapat dalam superset. Sebagai contoh, seorang siswa adalah seseorang. Oleh karena itu, himpunan siswa merupakan subset dari himpunan orang. Akibatnya, siswa mewarisi semua atribut yang umum bagi semua orang. Selain itu, siswa memiliki atribut unik yang tidak dimiliki orang lain. C++ memodelkan hubungan subset/superset menggunakan pewarisan.
Ruang nama C++ menyediakan konteks ketika terjadi konflik nama. Nama kelas dan nama fungsi dapat digandakan dalam berkas kode sumber lain atau pustaka pihak ketiga. Untuk membungkus nama kelas dan nama fungsi dalam blok ruang nama, gunakan kata kunci namespace. Kata kunci tersebut diikuti oleh sebuah pengenal, dan bloknya diapit tanda kurung.
Untuk membuat instans kelas atau menjalankan fungsi yang berada dalam ruang nama, awali nama kelas atau fungsi dengan nama ruang nama yang diikuti dua titik dua. Sebagai contoh, foo::bar() menunjukkan fungsi bar() yang berada dalam ruang nama foo. Alternatifnya, jalankan direktif using yang diikuti nama ruang nama. Setelah itu, semua nama kelas dan fungsi dapat diakses tanpa awalan dua titik dua.
// Grade.cpp // Pernyataan "export module" memungkinkan program lain "mengimpor" modul bernama 'wikipedia.examples.Grade' exportmodulewikipedia.examples.Grade; // Deklarasikan ruang nama 'wikipedia::examples' namespacewikipedia::examples{ // Definisikan kelas "Grade" // Pernyataan "export" memungkinkan modul lain mengakses kelas ini exportclassGrade{ private: // Variabel kelas "letter" bertipe char charletter; public: // Konstruktor explicitGrade(charletter): letter{letter}{} // Operasi anggota chargetLetter()const{ returnletter; } }; }Sebuah fungsi konstruktor memiliki nama yang sama dengan nama kelas. Fungsi tersebut dijalankan ketika sebuah objek dari suatu kelas dideklarasikan.
Berikut adalah modul untuk kelas Person dalam aplikasi yang memodelkan sebuah sekolah:
Keluaran:
Bahasa imperatif memiliki satu kritik utama: menetapkan sebuah ekspresi ke variabel non-lokal dapat menghasilkan efek samping yang tidak diinginkan. Bahasa deklaratif umumnya menghilangkan pernyataan penugasan dan alur kontrol. Bahasa tersebut mendeskripsikan apa yang harus dihitung, bukan bagaimana menghitungnya. Dua kategori luas bahasa deklaratif adalah bahasa fungsional dan bahasa logika.
Prinsip di balik bahasa fungsional adalah menggunakan kalkulus lambda sebagai panduan untuk semantik yang terdefinisi dengan baik. Dalam matematika, fungsi adalah aturan yang memetakan elemen dari sebuah ekspresi ke suatu rentang nilai. Perhatikan fungsi berikut:
times_10(x) = 10 * x
Ekspresi 10 * x dipetakan oleh fungsi times_10() ke suatu rentang nilai. Salah satu nilai tersebut adalah 20. Hal ini terjadi ketika x bernilai 2. Jadi, penerapan fungsi tersebut secara matematis ditulis sebagai:
times_10(2) = 20
Kompilator bahasa fungsional tidak akan menyimpan nilai ini dalam variabel. Sebaliknya, kompilator akan mendorong nilai tersebut ke stack komputer sebelum mengatur program counter kembali ke fungsi pemanggil. Fungsi pemanggil kemudian akan mengeluarkan nilai tersebut dari stack.
Bahasa imperatif juga mendukung fungsi. Oleh karena itu, pemrograman fungsional dapat dicapai dalam bahasa imperatif jika pemrogram menggunakan disiplin tertentu. Namun, bahasa fungsional akan memaksakan disiplin tersebut kepada pemrogram melalui sintaksnya. Bahasa fungsional memiliki sintaks yang disesuaikan untuk menekankan apa yang dilakukan.
Sebuah program fungsional dikembangkan dengan sekumpulan fungsi primitif yang diikuti oleh satu fungsi penggerak. Perhatikan cuplikan berikut:
ML tidak berorientasi pada penggunaan tanda kurung seperti Lisp. Berikut adalah penerapan times_10():
times_10 2Fungsi tersebut mengembalikan "billows_fire(X) :- is_a_dragon(X).
2) Suatu makhluk menyemburkan api jika salah satu induknya menyemburkan api:
5) Norberta adalah seekor naga, dan Puff adalah seekor makhluk. Norberta adalah ibu dari Puff.
Penerapan praktis Prolog adalah representasi pengetahuan dan pemecahan masalah dalam kecerdasan buatan.
Pemrograman berorientasi objek adalah metode pemrograman untuk menjalankan operasi (fungsi) pada objek. Gagasan dasarnya adalah mengelompokkan karakteristik suatu fenomena ke dalam sebuah wadah objek dan memberikan nama kepada wadah tersebut. Operasi pada fenomena tersebut juga dikelompokkan ke dalam wadah. Pemrograman berorientasi objek berkembang dengan menggabungkan kebutuhan akan wadah dan kebutuhan akan pemrograman fungsional yang aman. Metode pemrograman ini tidak harus terbatas pada bahasa berorientasi objek. Dalam bahasa berorientasi objek, wadah objek disebut kelas. Dalam bahasa yang tidak berorientasi objek, sebuah struktur data (yang juga dikenal sebagai rekaman) dapat menjadi wadah objek. Untuk mengubah struktur data menjadi wadah objek, operasi perlu ditulis secara khusus untuk struktur tersebut. Struktur yang dihasilkan disebut tipe data abstrak. Namun, pewarisan tidak tersedia. Meskipun demikian, kekurangan ini dapat diatasi.
Berikut adalah berkas header C untuk tipe data Grade dalam aplikasi yang memodelkan sebuah sekolah:
Berikut adalah berkas sumber C untuk tipe data Person dalam aplikasi yang memodelkan sebuah sekolah:
Berikut adalah berkas header C untuk tipe data Student dalam aplikasi yang memodelkan sebuah sekolah:
Strategi formal untuk membangun objek berorientasi objek adalah:
Sebagai contoh:
Sintaks sebuah program komputer adalah daftar aturan produksi yang membentuk tata bahasanya. Tata bahasa sebuah bahasa pemrograman menempatkan deklarasi, ekspresi, dan pernyataan secara benar. Yang melengkapi sintaks suatu bahasa adalah semantiknya. Semantik menjelaskan makna yang melekat pada berbagai konstruksi sintaksis. Suatu konstruksi sintaksis mungkin memerlukan deskripsi semantik karena sebuah aturan produksi dapat memiliki interpretasi yang tidak valid. Selain itu, bahasa yang berbeda mungkin memiliki sintaks yang sama; namun, perilakunya dapat berbeda.
Sintaks sebuah bahasa dijelaskan secara formal dengan mencantumkan aturan produksi. Sementara sintaks bahasa alami sangat rumit, suatu subset bahasa Inggris dapat memiliki daftar aturan produksi berikut:
Kata-kata yang dicetak tebal dikenal sebagai nonterminal. Kata-kata dalam 'tanda kutip tunggal' dikenal sebagai terminal.
Dari daftar aturan produksi ini, kalimat lengkap dapat dibentuk menggunakan serangkaian penggantian. Prosesnya adalah mengganti nonterminal dengan nonterminal atau terminal yang valid. Proses penggantian diulangi hingga hanya tersisa terminal. Salah satu kalimat yang valid adalah:
Namun, kombinasi lain menghasilkan kalimat yang tidak valid:
Oleh karena itu, diperlukan semantik untuk menjelaskan makna aktivitas eat dengan benar.
Salah satu metode untuk mencantumkan aturan produksi disebut Backus–Naur form (BNF). BNF menjelaskan sintaks suatu bahasa dan BNF sendiri memiliki sintaks. Definisi rekursif ini merupakan contoh metabahasa. Sintaks BNF mencakup:
Dengan menggunakan BNF, suatu subset bahasa Inggris dapat memiliki daftar aturan produksi berikut:
Dengan menggunakan BNF, sebuah bilangan bulat bertanda memiliki daftar aturan produksi berikut:
Perhatikan aturan produksi rekursif:
Hal ini memungkinkan jumlah kemungkinan yang tidak terbatas. Oleh karena itu, diperlukan semantik untuk menjelaskan batas jumlah digit.
Perhatikan kemungkinan adanya nol di depan dalam aturan produksi:
Oleh karena itu, diperlukan semantik untuk menjelaskan bahwa nol di depan harus diabaikan.
Terdapat dua metode formal untuk menjelaskan semantik, yaitu semantik denotasional dan semantik aksiomatik.
Rekayasa perangkat lunak adalah berbagai teknik untuk menghasilkan program komputer yang berkualitas. Pemrograman komputer adalah proses menulis atau menyunting kode sumber. Dalam lingkungan formal, seorang analis sistem akan mengumpulkan informasi dari para manajer mengenai seluruh proses organisasi yang akan diotomatisasi. Profesional ini kemudian menyiapkan rencana terperinci untuk sistem baru atau sistem yang dimodifikasi. Rencana tersebut analog dengan cetak biru seorang arsitek.
Analis sistem bertujuan menyampaikan informasi yang tepat kepada orang yang tepat pada waktu yang tepat. Faktor-faktor penting untuk mencapai tujuan ini adalah:
Pencapaian tujuan kinerja harus diseimbangkan dengan seluruh biaya, termasuk:
Penerapan proses pengembangan sistem akan mengurangi dampak aksioma: semakin terlambat suatu kesalahan terdeteksi dalam proses, semakin mahal biaya untuk memperbaikinya.
Model air terjun adalah penerapan suatu proses pengembangan sistem. Sebagaimana tersirat dari nama air terjun, fase-fase dasarnya saling tumpang tindih:
Seorang pemrogram komputer adalah spesialis yang bertanggung jawab untuk menulis atau memodifikasi kode sumber guna menerapkan rencana terperinci. Tim pemrograman kemungkinan diperlukan karena sebagian besar sistem terlalu besar untuk diselesaikan oleh satu pemrogram saja. Namun, menambahkan pemrogram ke suatu proyek belum tentu memperpendek waktu penyelesaian. Sebaliknya, hal tersebut dapat menurunkan kualitas sistem. Agar efektif, modul program perlu didefinisikan dan didistribusikan kepada anggota tim. Selain itu, anggota tim harus berinteraksi satu sama lain dengan cara yang bermakna dan efektif.
Pemrogram komputer dapat melakukan pemrograman dalam skala kecil: pemrograman di dalam satu modul. Kemungkinan besar sebuah modul akan menjalankan modul yang terdapat dalam berkas kode sumber lainnya. Oleh karena itu, pemrogram komputer dapat melakukan pemrograman dalam skala besar: memprogram modul agar dapat saling terhubung secara efektif. Pemrograman dalam skala besar mencakup kontribusi terhadap application programming interface (API).
Pemrograman modular adalah teknik untuk menyempurnakan program bahasa imperatif. Program yang disempurnakan dapat mengurangi ukuran perangkat lunak, memisahkan tanggung jawab, dan dengan demikian mengurangi penuaan perangkat lunak. Sebuah modul program adalah rangkaian pernyataan yang dibatasi di dalam sebuah blok dan secara bersama-sama diidentifikasi dengan sebuah nama. Modul memiliki fungsi, konteks, dan logika:
Nama modul harus terlebih dahulu diturunkan dari fungsinya, kemudian dari konteksnya. Logika tidak boleh menjadi bagian dari nama. Sebagai contoh, function compute_square_root( x ) atau function compute_square_root_integer( i : integer ) merupakan nama modul yang sesuai. Namun, function compute_square_root_by_division( x ) tidak sesuai.
Derajat interaksi di dalam sebuah modul adalah tingkat kohesi-nya. Kohesi merupakan penilaian terhadap hubungan antara nama modul dan fungsinya. Derajat interaksi antar modul adalah tingkat kopling. Kopling merupakan penilaian terhadap hubungan antara konteks modul dan elemen-elemen yang dikenai operasi.
Tingkat kohesi dari yang terburuk hingga yang terbaik adalah:
Tingkat kopling dari yang terburuk hingga yang terbaik adalah:
Analisis aliran data adalah metode desain yang digunakan untuk mencapai modul dengan kohesi fungsional dan kopling data. Masukan untuk metode ini adalah diagram aliran data. Diagram aliran data adalah sekumpulan oval yang mewakili modul. Nama setiap modul ditampilkan di dalam ovalnya. Modul dapat berada pada tingkat yang dapat dieksekusi atau tingkat fungsi.
Diagram tersebut juga memiliki panah yang menghubungkan modul satu sama lain. Panah yang menunjuk ke dalam modul mewakili sekumpulan masukan. Setiap modul seharusnya hanya memiliki satu panah yang keluar darinya untuk mewakili objek keluaran tunggalnya. (Secara opsional, panah pengecualian tambahan dapat keluar.) Sebuah rangkaian oval berbentuk rantai daisy akan menyampaikan keseluruhan algoritma. Modul masukan harus mengawali diagram. Modul masukan harus terhubung ke modul transformasi. Modul transformasi harus terhubung ke modul keluaran.
Program komputer dapat dikategorikan berdasarkan fungsi. Kategori fungsional utama adalah perangkat lunak aplikasi dan perangkat lunak sistem. Perangkat lunak sistem mencakup sistem operasi, yang menghubungkan perangkat keras komputer dengan perangkat lunak aplikasi. Tujuan sistem operasi adalah menyediakan lingkungan tempat perangkat lunak aplikasi dapat dijalankan secara nyaman dan efisien. Baik perangkat lunak aplikasi maupun perangkat lunak sistem menjalankan program utilitas. Pada tingkat perangkat keras, sebuah program mikrokode mengendalikan rangkaian di seluruh unit pemrosesan pusat.
Sebuah program mikrokode adalah interpreter tingkat paling bawah yang mengendalikan datapath komputer yang digerakkan oleh perangkat lunak. (Kemajuan dalam perangkat keras telah memindahkan operasi ini ke rangkaian eksekusi perangkat keras.) Instruksi mikrokode memungkinkan pemrogram lebih mudah mengimplementasikan tingkat logika digital—perangkat keras komputer yang sebenarnya. Tingkat logika digital merupakan batas antara ilmu komputer dan teknik komputer.
Sebuah gerbang logika adalah transistor kecil yang dapat menghasilkan salah satu dari dua sinyal: hidup atau mati.
Kelima gerbang ini membentuk blok pembangun aljabar biner—fungsi logika digital komputer.
Instruksi mikrokode adalah mnemonik yang dapat digunakan pemrogram untuk menjalankan fungsi logika digital alih-alih membentuknya dalam aljabar biner. Instruksi tersebut disimpan dalam penyimpanan kontrol CPU. Instruksi tingkat perangkat keras ini memindahkan data di seluruh jalur data.
Siklus instruksi mikro dimulai ketika microsequencer menggunakan penghitung program mikronya untuk mengambil instruksi mesin berikutnya dari memori akses acak. Langkah berikutnya adalah mendekode instruksi mesin dengan memilih jalur keluaran yang tepat menuju modul perangkat keras. Langkah terakhir adalah mengeksekusi instruksi menggunakan kumpulan gerbang pada modul perangkat keras.
Instruksi untuk melakukan aritmetika diteruskan melalui unit logika aritmetika (ALU). ALU memiliki rangkaian untuk melakukan operasi dasar guna menjumlahkan, menggeser, dan membandingkan bilangan bulat. Dengan menggabungkan dan mengulang operasi dasar melalui ALU, CPU menjalankan operasi aritmetika yang kompleks.
Instruksi mikrokode memindahkan data antara CPU dan pengendali memori. Instruksi mikrokode pengendali memori memanipulasi dua register. Register alamat memori digunakan untuk mengakses alamat setiap sel memori. Register data memori digunakan untuk menetapkan dan membaca isi setiap sel.
| View original on Wikipedia | Back | FazBrowse Home |