ANALISIS KEBUTUHAN DAN SPESIFIKASI
N.1: Basis Data: Sistem manajemen basis data yang tersedia gratis di domain publik harus digunakan
4.5 SPESIFIKASI ALJABAR
Dalam teknik spesifikasi aljabar, kelas objek atau tipe ditentukan dalam hal hubungan yang ada antara operasi yang didefinisikan pada tipe itu. Ini pertama kali diperkenalkan oleh Guttag [1980,1985] dalam spesifikasi tipe data abstrak. Berbagai notasi spesifikasi aljabar telah berkembang, termasuk yang didasarkan pada bahasa OBJ dan Larch.
Pada dasarnya, spesifikasi aljabar mendefinisikan sistem sebagai aljabar heterogen.
Aljabar heterogen adalah kumpulan himpunan yang berbeda di mana beberapa operasi didefinisikan. Aljabar tradisional adalah homogen. Sebuah aljabar homogen terdiri dari satu set dan beberapa operasi yang didefinisikan dalam set ini; misalnya { I, +, -, *, / }. Sebaliknya, string alfabet S bersama-sama dengan operasi penggabungan dan panjang {S, I , con, len}, bukanlah aljabar homogen, karena rentang operasi panjang adalah himpunan bilangan bulat.
Setiap himpunan simbol dalam aljabar heterogen disebut semacam aljabar. Untuk mendefinisikan aljabar heterogen, selain mendefinisikan jenisnya, kita perlu menentukan operasi yang terlibat, tanda tangannya, dan domain serta rentangnya. Menggunakan spesifikasi aljabar, saya mendefinisikan arti dari satu set prosedur antarmuka dengan menggunakan persamaan. Spesifikasi aljabar biasanya disajikan dalam empat bagian.
Tipe bagian: Di bagian ini, jenis (atau tipe data) yang digunakan ditentukan.
Bagian pengecualian: Bagian ini memberikan nama kondisi luar biasa yang mungkin terjadi ketika operasi yang berbeda dilakukan. Kondisi pengecualian ini digunakan di bagian selanjutnya dari spesifikasi aljabar.
Bagian sintaks: Bagian ini mendefinisikan tanda tangan dari prosedur antarmuka.
Kumpulan set yang membentuk domain input dari operator dan pengurutan di mana output dihasilkan disebut tanda tangan operator. Misalnya, PUSH mengambil tumpukan dan elemen sebagai inputnya dan mengembalikan tumpukan baru yang telah dibuat.
Bagian persamaan: Bagian ini memberikan seperangkat aturan penulisan ulang (atau persamaan) yang mendefinisikan arti dari prosedur antarmuka dalam hal satu sama lain.
Secara umum, bagian ini diperbolehkan berisi ekspresi kondisional.
Dengan konvensi, setiap persamaan secara implisit dikuantifikasi secara universal atas semua kemungkinan nilai variabel. Ini berarti bahwa persamaan berlaku untuk semua kemungkinan nilai variabel. Nama yang tidak disebutkan di bagian sintaks seperti r atau e adalah variabel. Langkah pertama dalam mendefinisikan spesifikasi aljabar adalah mengidentifikasi himpunan operasi yang diperlukan. Setelah mengidentifikasi operator yang diperlukan, akan sangat membantu untuk mengklasifikasikan mereka sebagai operator konstruktor dasar, operator konstruktor tambahan, operator inspektur dasar, atau operator inspeksi tambahan. Definisi dari kategori operator tersebut adalah sebagai berikut:
Operator konstruksi dasar: Operator ini digunakan untuk membuat atau memodifikasi entitas dari suatu tipe. Operator konstruksi dasar sangat penting untuk menghasilkan semua elemen yang mungkin dari tipe yang ditentukan. Misalnya, 'buat' dan 'tambahkan' adalah operator konstruksi dasar dalam Contoh 4.13. Operator konstruksi tambahan: Ini adalah operator konstruksi selain operator konstruksi dasar. Misalnya, operator 'remove' dalam Contoh 4.13 adalah operator konstruksi tambahan, karena bahkan tanpa menggunakan 'remove' dimungkinkan untuk menghasilkan semua nilai dari tipe yang ditentukan.
Operator inspeksi dasar: Operator ini mengevaluasi atribut suatu tipe tanpa memodifikasinya, misalnya eval, get, dll. Misalkan S adalah himpunan operator yang
jangkauannya bukan tipe data yang ditentukan—ini adalah operator inspeksi. Himpunan operator dasar S1 adalah himpunan bagian dari S , sehingga setiap operator dari S -S 1 dapat dinyatakan dalam operator dari S 1.
Operator inspeksi tambahan: Ini adalah operator inspeksi yang bukan inspektur dasar.
Cara sederhana untuk menentukan apakah operator adalah konstruktor (dasar atau ekstra) atau inspektur (dasar atau ekstra) adalah dengan memeriksa ekspresi sintaks untuk operator.
Jika tipe yang ditentukan muncul di sisi kanan ekspresi maka itu adalah konstruktor, jika tidak, itu adalah operator inspeksi. Misalnya, dalam Contoh 4.13, create adalah konstruktor karena titik muncul di sisi kanan ekspresi dan titik adalah tipe data yang ditentukan. Namun, xcoord adalah operator inspeksi karena tidak mengubah tipe titik.
Aturan praktis yang baik saat menulis spesifikasi aljabar, adalah pertama -tama menetapkan mana yang merupakan konstruktor (dasar dan tambahan) dan operator inspeksi (dasar dan tambahan). Kemudian tuliskan aksioma untuk komposisi setiap operator konstruksi dasar di atas setiap operator inspeksi dasar dan operator konstruktor tambahan. Juga, tuliskan aksioma untuk masing-masing inspektur tambahan dalam kaitannya dengan inspektur dasar.
Jadi, jika ada m1 konstruktor dasar, m2 konstruktor tambahan, n1 inspektur dasar, a n d n2 inspektur tambahan, kita harus memiliki aksioma m1 × (m2 + n1) + n2. Namun, harus dicatat dengan jelas bahwa aksioma m1 × (m2 + n1) + n2 ini adalah minimum yang diperlukan dan banyak lagi aksioma mungkin diperlukan untuk melengkapi spesifikasi. Menggunakan seperangkat aturan penulisan ulang yang lengkap, dimungkinkan untuk menyederhanakan urutan operasi sewenang-wenang pada prosedur antarmuka.
Saat mengembangkan aturan penulisan ulang, orang yang berbeda dapat menghasilkan set persamaan yang berbeda. Namun, saat mengembangkan persamaan, kita harus berhati-hati bahwa persamaan harus dapat menangani semua komposisi operator yang berarti, dan mereka harus memiliki sifat terminasi dan terminasi yang unik. Kedua properti aturan penulisan ulang ini dibahas nanti di bagian ini.
Contoh 4.13 Mari kita tentukan titik tipe data yang mendukung operasi create, xcoord, ycoord, isequal; di mana operasi memiliki arti yang biasa.
Jenis:
mendefinisikan titik
menggunakan boolean, integer Sintaksis:
1. buat : integer × integer→point 2. xcoord : titik→bilangan bulat 3. ycoord : titik→bilangan bulat 4. sama : titik × titik→boolean Persamaan:
1. xcoord(crreate(x, y)) = x 2. ycoord(create(x, y)) = y
3. same(create(x1, y1), buat(x2, y2)) = ((x1 = x2)dan(y1 = y2))
Dalam contoh ini, kita hanya memiliki satu konstruktor dasar (buat), dan tiga pemeriksa dasar (xcoord, ycoord, dan isequal). Oleh karena itu, kita hanya memiliki 3 persamaan. Aturan penulisan ulang memungkinkan Anda menentukan arti dari setiap urutan panggilan pada jenis titik. Perhatikan ekspresi berikut: isequal (create e (xcoord (create(2, 3)), 5),create (ycoord (create(2, 3)), 5)). Dengan menerapkan aturan penulisan ulang 1, Anda dapat menyederhanakan ekspresi yang diberikan sebagai isequal (create (2, 5), create (ycoord (create(2, 3)), 5)). Dengan menggunakan aturan penulisan ulang 2, Anda dapat
menyederhanakan ini lebih lanjut sebagai sama (buat (2, 5), buat (3, 5)). Ini salah dengan menulis ulang aturan 3.
Sifat spesifikasi aljabar
Tiga sifat penting yang harus dimiliki setiap spesifikasi aljabar adalah:
Kelengkapan: Properti ini memastikan bahwa dengan menggunakan persamaan, harus dimungkinkan untuk mengurangi urutan operasi sembarang pada prosedur antarmuka.
Ketika persamaan tidak lengkap, pada beberapa langkah selama proses reduksi, kita mungkin tidak dapat mereduksi ekspresi yang sampai pada langkah tersebut dengan menggunakan salah satu persamaan. Tidak ada prosedur sederhana untuk memastikan bahwa spesifikasi aljabar sudah lengkap.
Properti terminasi terbatas: Properti ini pada dasarnya menjawab pertanyaan berikut:
Apakah aplikasi aturan penulisan ulang ke ekspresi arbitrer yang melibatkan prosedur antarmuka selalu berakhir? Untuk persamaan aljabar arbitrer, konvergensi (terminasi hingga) tidak dapat diputuskan. Namun, jika sisi kanan dari setiap aturan penulisan ulang memiliki istilah yang lebih sedikit daripada sisi kiri, maka proses penulisan ulang harus dihentikan.
Properti terminasi unik: Properti ini menunjukkan apakah penerapan aturan penulisan ulang dalam urutan yang berbeda selalu menghasilkan jawaban yang sama. Pada dasarnya, untuk menentukan properti ini, jawaban atas pertanyaan berikut perlu diperiksa—Dapatkah semua urutan pilihan yang mungkin dalam penerapan aturan penulisan ulang ke ekspresi arbitrer yang melibatkan prosedur antarmuka selalu memberikan jawaban yang sama?
Memeriksa properti terminasi unik adalah masalah yang sangat sulit.
Contoh 4.14 Mari kita tentukan antrian FIFO yang mendukung operasi create, append, remove, first, dan isempty; di mana operasi memiliki arti yang biasa.
Jenis:
mendefinisikan antrian
menggunakan boolean, elemen Pengecualian:
arus bawah, tidak ada nilai Sintaksis:
1. buat :ϕ→antrian
2. tambahkan : antrian × elemen → antrian 3. delete : antrian → antrian + {underf low}
4. fisrst : antrian → elemen + {novalue}
5. empty : antrian → boolean Persamaan:
1. empty(create()) = benar 2. empty(add(q, e)) = f alse 3. first(create()) = tidak bernilai
4. f pertama(tambahkan(q, e)) = jika kosong(q) maka e lain pertama(q) 5. delete(create()) = underf rendah
6. delete(add(q, e)) = jika kosong(q) lalu buat( ) lain tambahkan(hapus(q), e) Dalam contoh ini, kita memiliki dua operator konstruksi dasar (buat dan tambahkan).
Kita memiliki satu operator konstruksi tambahan (hapus). Remove sebagai operator konstruksi tambahan karena semua nilai antrian dapat direalisasikan, bahkan tanpa operator hapus. Kita memiliki dua inspektur dasar (pertama dan kosong). Oleh karena itu kita memiliki 2 × 3 = 6 persamaan.
Fungsi Bantu
Kadang-kadang saat menentukan sistem, seseorang perlu memperkenalkan fungsi tambahan bukan bagian dari sistem untuk mendefinisikan arti dari beberapa prosedur antarmuka. Ini disebut fungsi bantu. Berikut ini, kita membahas contoh di mana menjadi perlu untuk menggunakan fungsi bantu untuk dapat menentukan sistem.
Contoh 4.15 Mari kita tentukan antrian FIFO terbatas yang memiliki ukuran maksimum MaxSize dan mendukung operasi buat, tambahkan, hapus, pertama, dan kosong; di mana operasi memiliki arti yang biasa.
Jenis:
mendefinisikan antrian
menggunakan boolean, elemen, integer Pengecualian:
underflow, novalue, overflow Sintaksis:
1. buat :ϕ→antrian
2. tambahkan : antrian × elemen → antrian + {overf low}
3. ukuran : antrian → bilangan bulat 4. hapus : antrian → antrian + {underf low}
5. pertama : antrian → elemen + {novalue}
6. kosong : antrian → boolean Persamaan:
1. first(CREATE()) = tidak bernilai
2. first(append(q,e)) = if size(q)= MaxSize lalu overflow else i f isempty(q) maka e else first(q)
3. delete(CREATE()) = underf rendah
4. delete(add(q, e)) = jika kosong(q) lalu buat() else. if size(q) = M axS ize lalu overf low else append(remove(q), e)
5. size(create()) = 0
6. size(append(q, e)) = if size(q) = M axS ize maka overf low else size(q) + 1 7. isempty(q) = if (size(q) = 0) maka true elsef alse
Dalam contoh ini, kita menggunakan ukuran fungsi tambahan untuk memungkinkan kita dalam menentukan bahwa selama menambahkan elemen, overflow mungkin terjadi jika ukuran antrian melebihi MaxSize. Namun, setelah ada ukuran fungsi bantu, kita dapat menemukan bahwa operator kosong tidak lagi dapat dianggap sebagai pemeriksa dasar karena kosong dapat dinyatakan dalam ukuran. Sehingga, aksioma untuk operator issmpty yang digunakan dalam Contoh 4.15 dihapus, dan sebagai gantinya kita dapat menggunakan aksioma untuk menyatakan isempty dalam hal ukuran. Dua aksioma untuk menyatakan ukuran dalam hal operator konstruksi dasar juga ditambahkan (membuat dan menambahkan).
Spesifikasi Terstruktur
Mengembangkan spesifikasi aljabar memakan waktu. Oleh karena itu upaya telah dilakukan untuk menemukan cara untuk memudahkan tugas mengembangkan spesifikasi aljabar. Berikut ini adalah beberapa teknik yang telah berhasil digunakan untuk mengurangi upaya dalam menulis spesifikasi.
Spesifikasi inkremental: Ide di balik spesifikasi inkremental adalah pertama-tama mengembangkan spesifikasi tipe sederhana dan kemudian menentukan tipe yang lebih kompleks dengan menggunakan spesifikasi tipe sederhana.
Spesifikasi Instansiasi: Ini melibatkan mengambil spesifikasi yang ada yang telah dikembangkan menggunakan parameter generik dan instantiating dengan beberapa jenis lain.
Pro dan Kontra spesifikasi aljabar
Spesifikasi aljabar memiliki dasar matematika yang kuat dan dapat dipandang sebagai aljabar heterogen. Oleh karena itu, mereka tidak ambigu dan tepat. Menggunakan spesifikasi aljabar, efek dari sembarang urutan operasi yang melibatkan prosedur antarmuka dapat dipelajari secara otomatis. Kelemahan utama dari spesifikasi aljabar adalah bahwa mereka tidak dapat menangani efek samping. Oleh karena itu, spesifikasi aljabar sulit untuk diintegrasikan dengan bahasa pemrograman biasa. Juga, spesifikasi aljabar sulit dipahami.