pemrograman tingkat tinggi - elearning … tingkat tinggi pemrograman tingkat tinggi merupakan...

16
PEMROGRAMAN TINGKAT TINGGI

Upload: buianh

Post on 27-May-2018

237 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

PEMROGRAMAN TINGKAT

TINGGI

Page 2: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

PEMROGRAMANTINGKATTINGGI

Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem,subsistem, serta komponen sistem utama. Pada tingkat ini tujuan programer adalahuntuk merealisasikan disain sistem dalam bagian-bagian program yang secarajelas sesuai. Adalah self contained, dan secara logis independen. BAgian pertamamembicarakan aturan-aturan untuk menulis modul program C dalam mendapatkanmodularisasi yang baik. Prinsip ini digambarkan dengan contoh yang banyakdalam bagian berikutnya. Bagian terakhir membahas ukuran modul serta membahasstandard kompleksitas.

6.1. IMPLEMENTASIMODULDALAMC

Disain tingkat tinggi atau arsitektur mengarahkan pada tingkat tinggi. Disaintingkat tinggi menunjukkan struktur disain suatu program. Modul-modul yangmenyusun suatu program, bersama dengan organisasi mereka menunjukkan strukturimplementasi program. Struktur implementasi hendaknya menunjukkan strukturdisain; idealnya struktur implementasi dan desain hams sama idealnya. Strukturimplementasi dapat berbeda dengan struktur desain karena beberapa alasan.Pertama. struktur desain mungkin tidak berisikan rincian yang banyak sebagaimanastruktur implementasi. Hal ini khususnya benar pada bagian sistem yang standardseperti penganalisa fleksikal, atau _modul yang menggunakan berbagai macamtipe data abstrak yang umum seperti stack atau antrian. Kedua struktur implementasidapat berisiskan beberapa modul yang berhubungan dengan modul tunggal dalamstruktur desain. Bagian dari sistem yang secara logis membentuk unit, mungkindapat diimplementasikan ke beberapa modul untuk mengatur ukuran dankompleksitas, meningkatkan kemudahan pengujian, dan sebagainya. Bila strukturimplementasi dibuang dari struktur disain maka disain tersebut hendaknya hamsdikerjakan untuk membuat mereka lebih sederhana. modul lebih kecil. Namundemikian rincian praktis sering memaksa struktur implementasi secara ringkasberbeda dengan struktur disain dalam banyak sistem.

Kita hendaknya dapat membuat modul implementasi dengan menggunakandisain sistem pengatur kriteria modularisasi yang mencakup prinsip-prinsip kohesi,penggandaan, dan penyembunyian informasi (lihat bab 3). Sebagai tambahan

108

Page 3: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

modul implementasi memiliki keterbatasan karena adanya batasan kompleksitasserta ukuran. Modul implementasi hendaknya tidak berisikan jumlah yang melebihidar jumlah NCSL maksimum dan tidak boleh melebihi maksimum tertentu. Kitaakari membahas ukuran dan standard kompleksitas. Dalam program C modulimplementasi merupakan file yang dapat dikompile. Oleh karena mereka memiliki

. ekstensi dari ".c" pada UNIX sertabeberapa sistemlainnya,modul-modulsepertiini disebut dot-c file. Mereka juga dapat berisikan modul yang dapat dikompile.Fungsi C dapat dianggap sebagai modul dengan tingkat abstraksi yang berbedameskipunbahwa hal inibersifatreguler,kita memesanistilahmodul untuk modulcompile.

6.1.1 KENDALl AKSES OBYEK PROGRAM

Penyembunyian informasi dan pemisahan gabungan modul tergantung padakendali akses ke fungsi, variable, dan tipe data. Bahasa-bahasa pemrogramansebelumnya seperti FORTRAN dan COBOL hanya memiliki sedikit mekanismeuntuk kendali akses obyek program; bahasa pemrograman modem sepertiModular dan Ada memiliki banyak mekanisme untuk kendali akses. Bahasapemrograman C berada diantara kedua ekstrim tersebut: C memiliki beberapamekanisme kendali akses tetapi tidak menuntut serta tidak menyarankan programeruntuk menggunakannya. Cara untuk mempelajari mengendalikan akses terhadapobyek program dalam C tergantung pada kita sendiri, dan kita hams melakukannyadengan disiplin.

Kendali akses terhadap obyek program didasarkan pada aturan dan teknikcakupan untuk menggunakan nama ekstemal, file header, dan parameter fungsi.Kita akan membahasnya satu per satu.

Aturan cakupan ( Scope rules ). Aturan cakupan C nampak sepertiaturan cakupan pada bahasa terstruktur blok lainnya, namun aturan tersebut lebihrumit karena preprosessor dan cara pendefinisian cakupan untuk namadideklarasikan diluar fungsi. Aturan cakupan C yang paling penting adalah :

. Definisimacropreprosessormemilikicakupanyangdiperluasdari#difinekeakhir modul compile, atau ke #Under pertama yang akan menangguhkandefinisi terse but. Sebagai contoh cakupan dari definisi macroMAX_ARRAY_SIZE pada baris 40 dalam file sumber diperluas dari baris40 sampai pada akhir file.

. Nama-nama non-preprosessor yang dideklarasikan diluar fungsi disebutsebagai non local scope. Non local scope ini diperluas dari daerah deklarasi

109

Page 4: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

nama sampai ke akhir modul compile. Sebagai contoh, bila buffer_sizedideklarasikan diluar fungsi pada baris 25 dalam suatu file, kemudian cakupandari deklarasi ini diperluas dari baris 25 sampai ke akhir file. Nama-namadengan non-local scope (cakupan non-Iokal) dapat nampakjelas diluar modulcompile tempat nama-nama tersebut dideklarasikan-kita akan membahasnyasecara rinei pada waktu yang akan datang.

. Nama-nama non-preprosessoryang dideklarasikan sebagai parameter for-mal, atau pada awal suatu blok, disebut sebagai local scope (cakupan local).Cakupan lokal ini diperluas dari tempat deklarasi nama keakhir fungsi ataublok dimana terdapat deklarasi tersebut. Sebagai contoh, bila buffer_sizemerupakan parameter fungsi maka cakupan buffer size akan diperluas daritempat deklarasinya sampai pada tanda kurung pada akhir fungsi.

Suatu deklarasi bersifat visible pada daerah tertentu dalam cakupannya apabilapenggabungan yang dibuat oleh deklarasi tersebut berjumlah banyak pada tempatitu. Dekalrasi dapat disembunyikan (hidden) oleh deklarasi yang lain pada namayang sama antara deklarasi asli dan tempat penggunaan nama tersebut. Hal inisama seperti dalam bahasa terstruktur blok lain.

Cakupan memberikan cara untuk membuat blok terhadap akses pada obyekprogram. Oleh karena akses ke obyek program hendaknya dilakukan biladiperlukan, deklarasi sebaiknya memiliki cakupan yang terkecil. Dalam prakteknya,hal ini berarti bahwa kita hendaknya menghindari non-Iokal (yaitu deklarasi diluarfungsi) untuk menggunakan deklarasi lokal. Kita bahkan dapat mendeklarasikannama-nama dalam blok yang terdalam tempat mereka muncul, denganmendeklarasikan variable dalam blok nested dalam. Meskipun hal ini bersifatumum dalam bahasa terstruktur blok lainnya, banyak programer tidak mengetahuibahwa kita dapat melakukannya dalam C, dan sedikit programer yang melakukanhal tersebut.

Oleh karena cakupan lokal dan cakupan definisi macro preprosessor diperluasdari tempat deklarasi atau defmisi ke akhir file sumber, deklarasi non-Iokal dandefinisi macro dapat terjadi pada file untuk membatasi cakupannya. Sekali lagi,hal ini merupakan praktek yang baik tetapi jarang digunakan dalammasyarakatpemakai C ; sebagian besar programer menggunakan konvensi ini bahwa definisimacro dan deklarasi tingkat tinggi muncul dekat dengan awal file sumber C.Keputusan untuk menggunakan konvensi ini hendaknya memperhatikan pula haldiatas.

110

Page 5: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

Kita hendaknya juga menghindari penyembunyian deklarasi dengan deklarasipenyela (intervening) dari nama yang sama. Pembaca cenderung akan bingungbila nama yang sarna digunakan dalam modul compile yang sama pula.

Nama-nama eksternaI. Cakupan indentifir C terbatas pada modul compiledimana identifir tersebut dideklarasikan. Nama suatu fungsi atau variable dapatdibuat sebagai nama ekstemal. Nama-nama ekstemal dalam dua modul atau lebii'dihubungkan, sehingga mereka menunjuk hal yang Sama dalam masing-masingmodul compile. Hak ini secara efektif memperluas cakupan deklarasi didalambatas modul compile dan juga merupakan cara variable global dibuat dalam C.Nama-nama secara eksplisit dibuat ekstemal dengan mendeklarasikan extern,dan nama-nama fllngsi serta variable lokal adalah ekstemal yang disebabkan olehdefaolt. Mekanisme defaolt dapat dihentikan, dan nama-nama dibuat khusus bagimodul compile mereka, dengan mendeklarasikannya sebagai static. Nama-namafungsi dan variable non-Iokal hendaknya selalu dideklarasikan sebagai statickecuali bila mereka harns berada diluar modul. Fungsi sering harns dapat diaksessecara eksternal ; variable non-Iokal jarang demikian, maka variable model inihendaknya dideklarasikan static.

Nama-nama ekstemal memiliki beberapa deklarasi, namun hanya satudeklarasi pendefinisian. Compiler, penghubung (linker), dan pembaca programharns dapat memberitahukan deklarasi yang merupakan deklarasi pendefinisian.Masalah ini penting khususnya bagi variable ekstemal, karena tidak terdapat carastandard untuk membedakan deklarasi pendefinisian bagi variable. Praktek terbaikuntuk sebaian besar compiler serta masyarakat adalah sebagai pcrikut : Dalamdeklarasi pendefmisian, hapuskanlah keyword extern dari deklarasi tersebut. Untukvariable; merupakan hal yang baik bila kita memberikan pemula (initializer),karena initializer dipakai oleh beberapa compiler untuk mengidentifikasikandeklarasi pendifinisian. Dalam deklarasi non-pendefinisian gunakanlah selalukeywaord ektern.

Aturan ini dapat memberikan mekanisme yang baik untuk mengendalikanakses pada fungsi dan variable non-Iokal dalam C. Nama khusus non-Iokaldideklarasikan static; nama-nama yang dihubungkan pada obyek non-Iokal publikdideklarasikan extern; nama-nama obyek yang didefinisikan publik secara lokaltidak dideklarasikan baik dalam static maupun dalam extern. Ringkasan darimekanisme ini terdapat dalam tabel 6.1.

111

Page 6: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

-...................I.ii!................................................................................

112

Kendali Akses untuk Fungsi Varibale Non-Lokal.

.1::11111111118111.1.!

..........

!.!II~II~!.!IIIIII!!...!illl.I:.I!IIIII.IIIIIII_..;;.t.:.:::::::;:::;:.:::::::.:;:.:.;.:.:.;.;.;.;.;.;.;.:::::::::::::::::::::::::::::::.;.:;:;:::.:.:.:.:.:.:.:.:.:.;.;.:.:.:.:.:.:.;.:.;.;.....

Static

Static extern

Khusus

Publik

File yang aktif

Dilain tempat

File Header. Sejauh ini kita telah membahastentangcara-cara pembatasan'kembali (restricting) akses kedalam obyek program pada beberapa file kode sumber.File header e merupakan file kode sumber, secara konvensional memiliki ekstensi

".h," dan sering disebut file titik h (dot-h file) dan dipakai dalam modul compilee dengan menggunakan direktis #incIud preprosessor. File header mempunyaidua keuntungan bagi pemakaian informasi bersama-sama diantara modulcompile. Yang pertama, file ini meyakinkan bahwa file sumber memiliki informasiyang sarna tepat. Sebagai contoh, bila definisi tipe dan macro serta deklarasiextern muncul dalam file header yang umum daripada dalam file kode sumbermasing-masing secara terpisah maka tidak akan ada kemungkinan bahwa filesumber tersebut akan menggunakan definisi atau deklarasi yang tidak konsisten.Kedua, dengan menempatkan definisi dan deklarasi yang umum dalam file headerdapat membuat pengembangan, perawatan serta penempatan lebih mudah danlebih sedikit tetjadi kesalahan karena kita hanya perlu membuat perubahan dalamsatu tempat.

Parameter dan nilai fungsi. eara terakhir untuk mengeodalikan aksesobyek dalam e adalah dengan parameter fungsi dan nilai kembali. Parameterfungsi dan nilai kembali merupakan alternatif yang lebih baik bagi variableeksternal-yaitu data hendaknya dikirimkan dalam parameter fungsi atau dengannilai kembali, bukan dalam variable eksternal. Hal ini benar meskipun bilaparameter hanya dikirimkan melalui fungsi ke fungsi lainnya. Struktur data dapatdisembunyikan dengan lebih baik bila nilai dikirimkan sebagai parameter fungsi.Hal ini akan membantu dalam memisahkan modul dan menyembunyikan informasi.Akses akan lebih disiplin bila dikendalikan melalui fungsi. Variable eksternaldapat diubah atau dibaca pada setiap saat oleh komponen program manapun. Bilaakses dikontrol melalui fungsi, maka variable hanya dapat dibaca atau diubahdengan fungsi khusus yang dapat memeriksa operasi ini. Akhirnya kode yangmembatasi komunikasi data ke parameter dan nilai fungsi akan lebih baik, danreliable karena dapat menghindari side effect. Bila pemrograman dalam model

Page 7: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

orientasi obyek, maka akses ke nilai sederhanapun dapat terbatas pada fungsi.Fungsi akses khusus diapakai menset dan mengambil nilai dari variable khususlpribadi. Kita memberikan contoh dari metode ini kemudian.

6.1.2 ORGANI5A51 DAN 151MODUL

Modul compile berisikan fungsi C dan struktur data. Kode sumber untukkeseluruhanprogramC dapat berupa modulcompuletunggal,bila compilerdapatmenanganinya. Untuk program-program yang kecil-misalnya beberapa ratusbaris-maka praktek seperti ini dapat digunakan.Sebagaianbesar program yangsebenamya jauh lebih besar sehingga tidak dapat dimasukkan kedalam sebuahmodul compiletunggal secarakeseluruhan.Meskipunbila hal ini dapat dilakukannamun tidaklah baik. Mengirimkan kode sumber dalam beberapa modul akanmenyembunyikaninformasi,rnemisahkangabunganmodul,sertamembuatstrukturprogram jelas. Lebih lanjut bila sebuah program beberapa file sumber, makahanya bagian-bagianprogram tersebut yang harns dicompilekembali bila terjadiperubahan-perubahan.Pengujianakan lebihmudahapabilaprogram-programdapatdiuji dalam bagian-bagiankecil. Hal ini disarankanbila kode ditempatkandalammodul-modul yang berbeda. Akhimya penggunaan kembali disarankan karenamodul yang berisikan dirinya sendiri dapat dipakai dengan lebih mudah padaaplikasi-aplikasi lainnya.

Beberapa programer melakukanpraktek pembagiankode kedalam beberapafile secara ekstrim, dengan menempatkantiap fungsi dalam seb!Jahfile sumberyang berbeda. Hal seperti ini merupakan praktek pemrogramiWyang tidak baikpula. Modul compile hendaknyamengelompokkankode menurut prinsi~prinsipmodularisasiyang menunjukkanstrukturdisainprogramsertamembantupembacamemahami struktur implementasiprogram. Hal ini tidak dapat kita lakukan bilasetiap fungsi berada dalam file yang berbeda. Juga. bila setiap fungsi beradadalam file yang berbeda kita tidak dapat memiliki variable dan fungsi khusus,yang membatasi kemungkinan untuk mengambalikan akses ke obyek programsertauntuk menyembunyikaninformasi.Akhimyaprogramdenganukuran sedangpun dapat menimbulkanmasalah menejemenfile bila setiap fungsi berada dalamsumbemya masing-masing. .

Kepututsan tentang kode apa yang harns ditempatkandalam modul tertentu(yaitu tentang strukturimplementasi)harns didasarkanpada strukturdisain sistem,pada prinsip modularisasi seperti penyembunyian informasi, kohesi danpenggandaan(coupling),sertapadaprinsip-prinsipprakmatiktentangkekomplekandan ukuran modul maksimum.

113

Page 8: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

Kita dapat membagi isi modul compile kedalam 6 katagori besar :

. File header dimasukkan kedalam modul compile oleh preprosessor direktif#include.

. Oeklarasitentangvariabledan fungsipublikyang diimport,didefinisikandalam modul compile tertentu lainnya,namun diakses dalam modul compileyang aktif.

. Oeklarasitentangobyekprogramkhusus.Katagoriini mencakupdefinisimacro, definisi tipe, variable static serta deklarasi fungsi static nondefining.

. OeklaraSipendefinisian fungsi static khusus.

. Oeklarasi variable eksport publik. Oeklarasi pendefinisian fungsi eksport.

Secara konvensional file header yang tercakup didaftar terlebih dahulu dalammodul compile. Oeklarasi fungsi dan variable publik yang diimport dari modullain kemudian diikuti oleh deklarasi obyek program khusus dan publik. Hal initidak memperhatikan apakah obyek publik atau obyek program berada terlebihdahulu, selama pengelompokan tersebut konsisten. Oeklarasi fungsi pendeklarasianmuncul terakhif, dikelompokkan bersama-sama sebagai hal yang kh~sus (privat).Pemesanan fungsi menunjl;lkkan kecenderungan pada penyajian bottom-up atautop-down. Oleh karena fungsi khusus hanya dapat diakses dari modul compilemaka mereka biasanya dipanggil oleh fungsi publik bukan fungsi lainnya sehinggamereka lebih dekat dengan dasar dari hirarki fungsi. Metode top-dowan ataubottom-up hendaknya juga tercermin dalam pemesanan fungsi pada masing-masingkelompok.

Oeklarasi nondifining pada fungsi khusus hendaknya muncul dekat denganbagian atas modul compile sehingga memberikan kepada pembaca sebuah katalogtentang definisi fungsi yang datang serta memberi tahu compiler tentang argumendan tipe kembali fungsi (bila prototipe fungsi didukung) sehingga dapat dilakukanpengujian tipe dan pengubahan data secara benar.

114

Page 9: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

6.2 CONTOHMODULARISASIC

Pada bagian ini kita menyajikan contoh yang menggambarkan pemrogramantingkat tinggi yang baile. Contoh ini merupakan implementasi di tipe data abstrakdari ccount. Contoh ini mirip dengan contoh-contoh lainnya dalam berbagaibuku yang membahas teknik untuk mengimplementasi tipe data abstrak. Contohkita merupakan implementasi tipe data abstrak yang disebut count list. Daftar iniberisikan jumlah dan nama-nama fungsi record dari CSL, dan NCSL untukfungsi-fungsi yang dianalisa oleh ccount. Sebagai tipe data abstrak, daftar ccountdiset secara tersusun dari tiga bagian yang berisikan string karakter dan dua nilailong.

Intervis untuk tipe data daftar ccount berisikan empat fungsi serta nama tipedata. Tipe data daftar jumlah ini disebut counClist. Keempat fungsi dalam tipedata tersebut adalah sebagai berikut :

. Create_List-fungsi voidyangmengambilpointerke sebuahvariabledaftarjumlah sertamengisinyadenganjumlahdaftarkosongyangbarn.

. Is_Empty_List-fungsi int yangmenggunakandaftarcountQumlah)karenaargumennyahanyaTRUE (satu)bila daftar tersebutkosongdan FALSE(nol)bila daftartersebuttidaklahkosong.

. Append_Element-fungsi void yang menambahkanelemen ke akhir daftarjumlah. Fungsi ini menggunakanempat argumen: Pointer ke daftar jumlah(count), buffer string, dan dua nilao long. Fungsi ini membentuk elemendaftar dari tiga yang berisikanstringdan dua bilangan,serta menambahannyakedalam daftar jumlah. Elemen daftar tersebut berisikan salinan stringnyasendiri.

. Delete_Element-fungsi void yang menghapus elemen dari head Qudul)daftar jumlah. Fungsi ini menggunakanempat argumen : Pointer ke daftarjumlah, buffer string serta dua pointer untuk variable long. Fungsi inimenghapus tiga (triple) pada judul daftar, menyalin bagian string dari tigatersebut kedalam argumen buffer string serta menempatkan nilai long daritriple kedalam argumen long. Bila daftar jumlah kosong fungsi akanmengembalikan tanpa mengubah argumennya.

115

Page 10: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

Banyak fungsi lainsepertifungsidestruksidaftar,rutinpenyisipdaftar lainnyaserta rutin penghapus, rutin panjang daftar dll dapat ditambahkan kedalam tipedata ini, tetapi mereka tidak diperlukan untuk implementasi ccount kita.

File header untuk modul daftar jumlah, yang disebut list.h terdapat dalamfile dimana daftar jumlah dipakai. File ini berisikan deklarasi tipe data daftarjumlah counClist, dan deklarasiekstemaluntukempatfungsiyangdibahasdimuka.Berikut ini adalah versi file tersebut yang diringkas (lihat apendiks B untukmelihat kode sumber secara keseluruhan.

/******************************** list.h * ******* *************** *** ****** **

Purpose: Header for count list abstract data type module.

..f

1* *.* Public Data Type ********************************/

typedef struct count_struct .count_list; f. pointer to linked list of counts · f

1* Public Routines *******************************/

extern

extern

extern

extern

int Is_Empty_List ( count_list list );

void Create_List ( count_list .list );

void Append_Element ( count_list .list, char .name, long cst, .long NCSL );

void Delete_Element ( count_list .list, char .name, long *CSL,long *NCSL);

'else

extern int Is_Empty_List(); f*

extern void Create_List () ; f *

extern void Append_Element () ; f *

extern void Delete_Element (); f*

check whether a count list is empty * f

crea~e a new count list * fadd an element to the tail of a list * f

remove an element from the head of a list *t

'endif

Terdapat beberapa point yang perlu diperhatikan tentang file header ini.Pertama perhatikan bahwa counClist merupakan tipe yang didefinisikan sebagaipointer terstruktur. Definisi struktur tersebut disimpan dalam list.c, file tempattipe data abstrak. diimplementasikan.

Akan nampak aneh bila terdapat dua set dua deklarasi fungsi. Persyaratandari ccount menyatakan bahwa software harns ditempatkan serta diuji paling

116

Page 11: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

tidak dalam tiga sistem. Kita menggunakan workstation Sun yang menggunakanSunOS, VAX yang menggunakan sistem UNIX V, dan micro komputer kompatiblePC yang menggunakan DOS sebagai tiga sistem kita. Compiler pada PC adalahANSI C compatible, tetapi compiler tersebut pada sistem lain tidak compatible.Oleh karena kita hams m,eletakkan sistem tersebut, maka kita membuat mekanisme

peletakan kedalam implementasi tersebut. Prototipe fungsi ANSI C serta deklarasisebelumnya tercakup, dan preprosessor ini digunakan untuk memilih diantaramereka, tergantung apakah simbul_STDC_ didetinisikan atau tidak. Deklarasi

sebelumnya didetinisikan dengan nilai yang bukan nol dalam compiler ANSI.File header ini menunjukkan cara untuk membuat tipe data abstrak yang terdapatpada bagian lain dari sebuah prograrri. Apabila rekanan dari modul daftar jurnlahingin menggunakan pelayanannya, maka hanya diperlukan untuk mencantumkanfile header ini agar mendapatkan deklarasi fungsi serta detinisi tipe data yangdiperlukan. Konstanta atau macro lain diperlukan, hal ini juga telah ditulis kedalamfile header tersebut.

Sebagian besar implementasi tipe data daftar jurnlah termasuk dalam modulcompile list.c. File ini terlalu panjang untuk dicantumkan disini (lihat apendik B),tetapi bagian berikut menggambarkan pembahasan kita (banyak penjelasan yangtelah dihapus untuk menghemat tempat) :.

/****************************** list.c ~*******************************

Purpose: Provide count list manipulation routines.

**/

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#ifdef _STDC_# include <stdlib.h>#endif

#include "ccount.h"

#include "list.h"

#include "error.h"

/* program-wide definitions */

/* header for this module */

/* error functions and messages */

/*************** Private Definitions and Declarations ***************

117

Page 12: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

struct count_struct

char *name;

long CSL,

NCSL;

count_list next;

};

/* an element of a count list */

/* function whose lines are counted */

/* commentary source lines counter */

/ noncommentary source lines counter /

/* link to next count struct */

/*********************** Declared Functions **************************

#ifdef _STDC_

static count_list Create_Node( char *name, long CSL, long NCSL );

static void Destroy_Node( count_list ptr );

#else

static count_list Create_Node( /* char *name, long CSL, long NCSL */ );

static void Destroy_Node( /* count_list ptr */ );

#endif

/************************** Private Routines *************************

/*FN********************************************************************

Destroy_Node ( ptr )

Returns: void

Purpose: Free the space for an unneeded list node.

**/

static void

Destroy_Node( ptr )

count_list ptr; /* in: node to be deleted */

/* Free the space for the name field and the node itself */

if (NULL != ptr)

{

if ( NULL != ptr >name ) free ( ptr >name );

ptr >next = NULL;

free ( (char *)ptr );}

118

Page 13: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

} /* Destroy_Node */

/ * * * * * * * * * * * * * * * ***** Public Routines * * * * * * * * * * * * * * * ** * * * *

/*FN***********************************************************

list )

Returns: int -- TRUE if the list is ercpty, FAISE otherwise.

Purpose: See if a count list is empty.**/

int

Is_Empty_List( list )count_listlist; /* in: linked list of counts to check */

return ( NULL == list );

File-fileyang tercakup pertama kali didaftar dalam modul ini. File headerprogram besar, ccount.h, dan file header untuk file aktif, list.h, tercakup. Fileheader untuk modul pelaporan kesalahan error.h juga tercakup karenakesalahan-kesalahan dapat dilaporkan oleh modul ini. Deklarasi dan detinisikhusus didaftar kemudian, selanjutnyadeklarasi nondetining dar. fungsi khusus.Fungsi umum dan khusus didetinisikan berikutnya yang mengikuti modelpenyajian bottom-up. Akses kedalam fungsi khusus Destroy_Node dibatasiuntuk mencakup modul dengan mendeklarasikannya sebagai static. Meskipunfungsi publik Is_Empty _Li~t dideklarasikansebagai extern dalam list.h, fungsiini dideklarasikan tanpa keyword extern bila dia didefinisikan, yangmenunjukkan deklarasi fungsi mana yang merupakan deklarasi pendetinisian.

119

Page 14: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

6.3STANDARDKOMPLEKS/TASDANUKURANMODUL

Sebagaimana yang dijelaskan modul hendaknya tidak terlalu kompleks dantidak terlalu besar. Namun sayangnya, batas atas yang baik untuk ukuran modulatau kekomplekan tidak diketahui. Kita temukan bahwa modul cenderung akanmenjadi buruk bilamana mereka telah berkembang melebihi lima atau enam ratusNCSL, sehingga kitta menyarankan bahwa 500 NCSL merupakan ukuran modulcompiler target. Kadang-kadang sasaran ini harns diubah untuk menyembunyikaninformasi, meningkatkan kohesi, atau mengurangi penggandaan. Biasanya hal inidapat dengan mudah dicapai dalam sistem yang modularisasikan dengan baik danmemiliki disain ~ang baik pula.

Fungsi hendaknya jauh lebih kecil daripada moduI. Beberapa orangberpendapat bahwa fungsi he~daknya dapat cocok secara keseluruhan padasatuhalaman output printer sehingga kita tidak harns membolak-balikkan kertas. Iniberarti bahwa fungsi tersebut termasuk penjelasan yang umum, hendaknya berisikantidak lebih dari 20 atau 30 NCSL. Kita lebih menyukai ukuran fungsi maksimumtarget 60 NCSL dalam praktek pengkodean kita, hal ini sesuai dengan saran-sarandalam berbagai buku.

Kompleksitas mengukur, seperti metrik kompleksitas siklomatik McCabe,dipakai oleh bebrapa programer C untuk memantau kekomplekan kode mereka.

. Sedangkan programer lain menggunakan aturan-aturan sebagai berikut.:

. Janganteinpatkan(nest)lebihdari kedalamantujuhdeep.

. Jangangunakanekspresibooleandengankomponenlebihdari empat.

. Jangantempatkanekspresikondisionallebihdari dua deep.

. Hindaripointerke pointer.

. Faktorkanlahdeklaratorkompleksdenganmenggunakandefinisitipe.

Meskipun aturan ini membantu determinan utama dari kompleksitasnampaknya merupakan ukuran program yang lengkap, sehingga kemungkinancara yang terbaik untuk mengendalikankompleksitas adalah dengan membatasiukuran. Contoh produk software kita ccount memberikanjumlah ukuran yangdapat dipakai untuk memantau kesesuaian modul dan standard ukuran fungsi.Sebagai contoh, dengan menjaIankan ccount pada modul daftar jumlah yangdibahas pada bagian sebelumnya menghasilkanoutput sebagai berikut :

120

Page 15: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat

lisLc Thu Aug 11 16:39:46 1988

Function CSL NCSL----------------------------------------------------

CSL/NCSL

Create_Node

Destroy_Node

Is_Empty_List

Create_List

Append_Element

Delete_Element

external

total

21

11

9

9

15

20

31

.116

17

11

6

6

17

16

22

95

'1.24

1.00

1.50

1.50

0.88

1.25

1.41

1.22

Fungsi-fungsi ini akan baik bila dibawah target maksimum 60 NCSL, danpada 116 NCSL akan baik pula bila dibawah ukuran modul maksimum target500 NCSL. Bila modul telah melebihi 500 NCSL, kita mungkin hamsmemodularisasikankembali untuk membuat beberapa modul yang lebih keeil.Bila fungsitelah melebihi60 NCSLkitahendaknyamelihatfungsitersebutkembaliuntuk mencari kemungkinan apakah fungsi tersebut dapat dibagi kedalamfungsi-fungsi yang lebih keeil. .

6.4 KESIMPULAN

Bab ini serta dua bab sebelumnya membahas berbagai aturan praktekpemrograman C yang baik. Sebagian besar aturan praktek pengkodean yangdibahas dalam bab ini serta dua boo sebelumnya terdapat dalam apendiks D.

Agar efektif aturan praktek perlu diikuti dan dikodekan oleh tim proyek.Konsekuensinya sebaiknya kita menggunakan standard pengkodean untukperawatan dan pengembangan.Sebagaicontoh serta ringkasan dari pembahasankita, kita telah menulis dokumen standard pengkodean untuk mengatur tahappengkodean pada implementasiccount. Standard ini tercakupdalam apendiks A.

121

Page 16: PEMROGRAMAN TINGKAT TINGGI - Elearning … TINGKAT TINGGI Pemrograman tingkat tinggi merupakan pemrograman pada tingkat sistem, subsistem, serta komponen sistem utama. Pada tingkat