Tugas Algorita dan pemograman C (Domain dan tipe)
Disusun Oleh
Muhammad Rizqi Hidayatullah
34115773
Min
GG
u
|
Pokok
Bahasan
|
Sub
Bahasan pokok
|
Teknik
pebelajaran
|
Media
pebelajaran
|
Tugas
|
Referensi
|
VI
|
Domain dan Tipe
|
- Konsep nilai, domain, dan tipe
- Kategori Domain
- Teori Elemen-Elemen Domain
- Domain Produk
- Domain Sum
- Domain Fungsi
- Domain Power
- Domain
Terdefinisi Rekursif
- Sistem Tipe
- Tipe Checking
- Tipe Ekuivalensi
- Nama Ekuivalensi
- Struktural
Ekuivalensi
- Tipe Inferensi
- Tipe Deklarasi
- Polimorfisme
- Kelengkapan Tipe
TIK :
-
Mahasiswa dapat
mengenali konsep nilai, domain dan tipe
-
Mahasiswa dapat
mengidentifikasi kategori domain berdasarkan contoh yang diberikan
-
Mahasiswa dapat
memberi contoh domain bentukan (compound) dari sum, produk, dll
-
Mahasiswa dapat
menjelaskan kembali apa yang dimaksud dengan sistem typedan mengetahui
bagaimana proses pengecekan type
|
Dosen memberi pengenalan, mahasiswa
eksplorasi
|
OHP dan Papan Tulis
|
Membuat Makalah mengenai nilai, domain
dan tipe
|
1,2,3,,4 dan 5
|
Konsep Nilai, Domain, dan Type
Suatu
nilai (value) adalah hal apapun yang mungkin dapat dievaluasi, disimpan dalam
suatu struktur data, dikirimkan sebagai suatu argumentasi atau dikembalikan
lagi sebagai hasil.
Suatu
perhitungan adalah suatu urutan operasi yang diberlakukan untuk menghasilkan
suatu nilai. Dengan demikian nilai-nilai dan operasi adalah dasar perhitungan.
Dalam
matematika, kumpulan dari argumen-argumen dan hasil-hasil dari fungsi dikenal
dengan domain dan co-domain. Domain akan ditandai sebagai
kumpulan dari nilai-nilai yang dikirimkan sebagai argumen-argumen atau
dikembalikan sebagai hasil.
Nilai-nilai
kebenaran, karakter, integer, real, file, pointers, record, set, prosedur dan
abstrak fungsi, lingkungan, perintah dan definisi tidak lain bagian dari bahasa
pemrograman.
Suatu
domain adalah satu kumpulan elemen-elemen dan digabungkan dengan sekumpulan
operasi.
Kategori Domain
Dua
kategori domain, yaitu :
a. Primitive
Domain
Sifatnya
atomic
b. Compound
Domain
Kumpulan
dari nilai-nilai yang dibangun dari domain-domain pembangun satu atau domain
pembangun yang lain.
Teori Elemen-Elemen Domain
Ada
beberapa compound domain yang digunakan dalam computer sign, yaitu: array,
tupple, record, union, set, list, tree, file, relation, definition dan mapping.
Compound
domain dibangun oleh suatu domain pembangun. Suatu domain pembangun adalah :
·
Product
domain
·
Sum
domain
·
c.Function
domain
·
Power
domain
·
Recursive
domain
Product Domain
Domain-domain
yang dibangun oleh pembangun product domain disebut tuples dalam ML, record
dalam Cobol, Pascal dan ADA, struktur dalam C dan C++. Bentuk product domain
adalah dasar dari database relational dan pemrograman logic.
Pada
kasus biner, product domain pembangun, x, membangun domain A x B dari domain A
dan B.
Jika
a adalah elemen dari A dan b adalah suatu elemen dari B maka (a,b) adalah suatu
elemen dari A x B.
A X B = {(a,b)| a in A, b in B}
Product
Domain : D0 x … x Dn
Assembly
operation: (a0,…,an) in D0 x…x Dn where ai in Di and
D0 x…x
Dn = {(a0,…an) | ai in Di}
Disassembly
operation: (a0,…,an) | i = ai for 0 <= i <= n
Domain
produk disebut “Cartesian” atau “Cross” produk. Dalam Pascal disebut record,
sedangkan dalam C disebut suatu struktur.
Sum Domain
Domain-domain
yang dibangun oleh pembangun sum domain disebut varian record dalam Pascal dan
ADA, Unions dalam Algol-68, Constructor dalam ML.
Dalam
kasus biner, sum domain pembangun,+, membangun domain A + B dari domain A dan
B.
Jika
a adalah elemen dari A dan b adalah elemen dari B maka (A,a) dan (B,b) adalah
unsur-unsur A + B
A + B = {(A,a) | a in A} union
{(B,b) | b in B}
Dimana
A dan B disebut tags dan digunakan untuk membedakan pendukung elemen A dan
pendukung elemen B.
Sum
domain disebut juga disjoint union atau co-product domain. Didalam Pascal
disebut record varian dan dalam C disebut suatu struktur.
Sum
domain : D0 +…+ Dn
Assembly
operations: (Di, di) in D0 +…+ Dn and D0 +…+ Dn =
unioni = 0 n {(Di,d) | d in Di}
Disassembly
operations: Di(Di,di) = di
Function Domain
Domain-domain
yang dibangun oleh pembangun function domain disebut fungsi di dalam Haskell,
prosedur di dalam Modula-3 dan proses dalam SR.
Pembangun
function domain membentuk domain A à B dari domain A dan B. domain
A à B terdiri dari semua fungsi A ke B. A disebut domain dan B
disebut co-domain.
(lamda
x.e) adalah suatu elemen di A à B dimana e adalah suatu ungkapan yang
berisi kejadian dari suatu identifier x, dimana a adalah nilai A merubah
kejadian x di dalam e, nilai e[a:x] menghasilkan B.
Function
Domain : A à B
Assembly
operation: (lamda x.E) in A à B where for all a in A, E[x:a] is a
unique value in B
Disassembly
operation: (g a) in B, for g in A à b and a in A
Power Domain
Teori
set yang menyediakan suatu notasi untuk uraian perhitungan. setL adalah suatu
bahasa pemrograman yang didasarkan pada kumpulan (set) dan digunakan untuk
menyediakan compiler ADA. Pascal menyediakan operasi set union dan
intersection.
Kumpulan
dari semua subset dari set adalah power set digambarkan sebagai berikut:
PS =
{ s | s is a subset of S}
Subtypes
dan subranges adalah contoh dari pembangun power set.
Beberapa
bahasa menyediakan mekanisme untuk dekomposisi suatu jenis ke dalam subtypes.
Enumerasi adalah elemen dari subtype yang lainnya adalah subranges.
Power
domain membangun suatu domain dari elemen-elemen set. Untuk domain A, pembangun
power domain P() menciptakan domain P(A), suatu kumpulan yang anggotanya adalah
subset dari A.
Power
Domain : PD
Assembly
operations: ø in PD, {a} in PD for a in D, and Si union Sj in PD for Si, Sj in
PD
Recursively Defined Domain
Recursively
defined domain adalah domain yang didefinisikan dari bentuk
D : … D …
Definisi
disebut Recursively sebab nama domain “recurs” pada sisi kanan dari definisi.
Recursively defined domain tergantung pada abstrak karena nama domain adalah
suatu bagian penting dari definisi domain.
Lebih
dari satu set boleh mencukupi suatu recursively defined. Bagaimanapun, mungkin
saja ditunjukkan bahwa suatu recursively defined selalu mempunyai solusi
terkecil. Solusi terkecil adalah suatu subset solusi yang lain.
Limit
Construction
D0 =
null
Di+1 =
e[D:Di] for i = 0,…
D
= limi à infty Di
Type System
Presentase
besar kesalahan di dalam program adalah dalam kaitan dengan operasi ke object
jenis yang bertentangan. Type system telah dikembangkan untuk membantu
programmer dalam pendeteksian kesalahan.
Suatu
type system adalah satu set aturan untuk mendefinisikan jenis dan menghubungkan
suatu type dengan ekspresi dalam bahasa. Suatu type system menolak suatu
ekspresi jika tidak menghubungkan suatu type dengan ekspresi. Type checking
boleh berjalan pada waktu kompilasi atau waktu berjalan atau kedua-duanya.
Jika
kesalahan diharapkan untuk dideteksi pada waktu kompilasi maka suatu static
type checking system diperlukan. Satu pendekatan ke static type checking
memerlukan programmer untuk menetapkan type masing-masing obyek di dalam
program.
Ini
mengizinkan compiler untuk melaksanakan type checking sebelum pelaksanaan
program dan ini adalah pendekatan yang diambil oleh bahasa seperti Pascal, ADA,
C++ dan Java.
Jika
pendeteksian kesalahan diharapkan untuk ditunda sampai waktu pelaksanaan, maka
dinamic type checking diperlukan.
Di
dalam dinamic type checking, masing-masing nilai data berlabel dengan type
informasi sehingga lingkungan waktu berjalan dapat memeriksa kecocokan type dan
mungkin melaksanakan konversi type jika diperlukan. Bahasa program Lisp,
Scheme dan Small-Talk adalah contoh dari bahasa dynamic type.
Type Checking
Suatu
bahasa disebut :
· Untyped
jika tidak ada type abstrak yang berlaku
· Strong
type jika menyelenggarakan type abstrak (operasi mungkin diterapkan hanya untuk
type object yang sesuai)
· Type
static jika type ekspresi masing-masing dapat ditentukan dari teks program
· Type
dynamic jika penentuan type beberapa ekspresi tergantung pada perilaku waktu
berjalan program.
Keuntungan
dari bahasa Untyped adalah fleksibilitas mereka. Programmer mempunyai kendali
penuh atas bagaimana suatu nilai data digunakan tetapi harus mengasumsikan
tanggung jawab penuh untuk mendeteksi aplikasi operasi ke type object yang
tidak cocok/bertentangan.
Strong
type membantu untuk memastikan portabilitas dan keamanan kode dan sering
memerlukan programmer dengan tegas menggambarkan type masing-masing object di
dalam suatu program. Ini penting juga dalam kumpulan untuk pemilihan
operasi yang sesuai dan untuk optimisasi.
Static
Type secara luas dikenal sebagai kebutuhan untuk produksi software yang dapat
dipercaya dan aman. Type static dipilih ketika efisiensi di dalam waktu
pelaksanaan adalah penting dan kompilator pendukung digunakan untuk mendukung
rancang bangun software berjalan.
Dynamic
type checking menyiratkan bahwa type dicek pada waktu pelaksanaan dan bahwa
tiap-tiap nilai berlabel untuk mengidentifikasi typenya dalam rangka membuat
type checking mungkin. Hukuman untuk dynamic type checking adalah biaya waktu
dan ruang tambahan.
Type Equivalence (Kesamaan Jenis)
Dua
type tak dikenal (satuan object) adalah sama jika mereka berisi elemen-elemen
yang sama. Yang sama tidak bisa dikatakan type nama mereka yang dulu, maka
tidak diperlukan untuk memisah type union. Kapan type dinamai, ada dua
pendekatan utama untuk menentukan apakah dua type sama.
Name Equivalence (Kesamaan Nama)
Di
dalam name equivalence dua type adalah sama jika mereka mempunyai nama yang
sama. Type diberi nama berbeda diperlakukan berbeda dan tidak bisa secara
kebetulan dicampur hanya karena struktur mereka secara kebetulan adalah sama.
Name equivalence perlu definisi type untuk global.
Structural Equivalence (Kesamaan
Struktural)
Di
dalam structural equivalence, nama type diabaikan dan elemen-elemen type
dibandingkan untuk persamaan. Adalah mungkin bahwa dua type logic yang berbeda
boleh menjadi kebetulan yang sama dan dapat dicampur.
Definisi
type tidak diperlukan untuk menjadi global. Structural equivalence adalah
penting di dalam distribusi pemrograman, dimana program terpisah harus
mengkomunikasikan type data.
Definisi
N.1:
Dua
type T, T’ adalah name equivalence iff T dan T’ adalah nama yang sama.
Dua
type T, T’ adalah structural equivalence iff T dan T’ memiliki satuan nilai
yang sama.
Tiga
aturan berikut yang digunakan untuk menentukan jika dua type adalah structural
equivalence :
a. Suatu
nama type sama secara struktur dengan dirinya sendiri
b. Dua
type yang sama secara struktur jika mereka dibentuk dengan menerapkan type
pembangun yang sama (secara berulang) ke type structural equivalence.
c. Setelah
suatu deklarasi type, type n = T, nama type n secara structural setara dengan
T.
Type Inference (Jenis Kesimpulan)
Type
inference adalah masalah yang umum dalam menjelmakan untyped atau sintaksis
type parsial ke dalam terminologi yang baik.
Deklarasi
tetap Pascal adalah suatu contoh type inference, typa nama adalah kesimpulan
dari type yang tetap. Dalam Pascal untuk pengulangan type index pengulangan
dapat ditarik kesimpulan dari type recursively defined dan dengan begitu indeks
pengulangan harus suatu variabel lokal dari pengulangan.
Bahasa
pemrograman Miranda dan Haskell adalah type static dan menyediakan strong type
inference system sehingga seorang programmer tidak perlu mendeklarasikan type
apapun. Bahasa juga mengizinkan para programmer untuk menyediakan
spesifikasi type eksplisit.
Suatu
type checking harus mampu :
a. Menentukan
jika suatu program adalah type yang baik dan
b. Jika
program adalah type yang baik, tentukan type ekspresi manapun di dalam program
Type Declaration (Jenis Deklarasi)
Bahkan
bahasa yang menyediakan suatu type inference system mengizinkan para programmer
untuk membuat deklarasi type eksplisit. Sekalipun compiler dapat dengan tepat
menyimpulkan type, pembaca manusia mungkin harus meneliti beberapa halaman kode
untuk menentukan type suatu fungsi.
Kesalahan
kecil oleh programmer dapat menyebabkan compiler mengeluarkan pemberitahuan
kesalahan atau untuk menyimpulkan suatu type yang berbeda dibanding yang
diharapkan. Karena pertimbangan ini adalah praktek pemrograman yang baik dengan
tegas menyatakan type atas semua kecuali kasus yang paling nyata.
Polymorphism (Polimorfisme)
Suatu
type system adalah monomorphic jika masing-masing konstanta, variabel,
parameter, dan hasil fungsi mempunyai suatu type unik. Type checking suatu
system monomorphic adalah type secara langsung. Tetapi system type
monomorphic semata-mata tidak memuaskan untuk penulisan software yang bisa
dipakai kembali.
System
yang sepenuhnya monomorphic jarang. Kebanyakan bahasa pemrograman berisi
beberapa operator atau prosedur yang mengizinkan argumentasi lebih dari satu
type.
Definisi
N.2 :
Monomorphism :
tiap-tiap konstanta, variabel, parameter, fungsi dan operator mempunyai suatu
type unik.
Pemuatan
lebih mengacu pada penggunaan dari sintaksis pengenal tunggal untuk
mengacu pada beberapa operasi berbeda yang dibedakan oleh type dan jumlah
argumentasi pada operasi.
Polymorphism :
suatu operator, fungsi atau prosedur yang mempunyai suatu keluarga type yang
terkait dan berorientasi secara seragam atas argumentasinya dengan mengabaikan
type.
Suatu
operasi polymorphic adalah yang dapat berlaku untuk type yang berbeda
tetapi berhubungan dengan argumentasi.
Suatu
type system adalah polymorphic jika abstrak beroperasi secara seragam pada
argumentasi suatu keluarga type terkait.
Polymorphism
type ini kadang-kadang disebut parametric polymorphism.
Type
Completeness (Jenis Kelengkapan)
Prinsip type ini, tidak ada operasi yang dapat berlaku
semaunya, terbatas yang berhubungan dengan nilai type.
Komentar
Posting Komentar