Modul Pemrograman (Draft)
Modul Pemrograman (Draft)
DASAR-DASAR PEMROGRAMAN
Pengajar:
Teguh sasono
Mengetahui, Penulis,
Ketua KBK
Menyetujui,
Ketua Program Studi
Terima kasih
C. SILABUS SINGKAT
Tujuan utama dari matakuliah ini adalah membekali mahasiswa cara berpikir dan
pemecahan persoalan dalam paradigma pemrograman prosedural, serta membekali
mahasiswa dengan modul dasar dari algoritma yang sering dipakai dalam pemrograman.
Mahasiswa harus mampu membuat penyelesaian masalah pemrograman tanpa tergantung
pada bahasa pemrograman apapun, dan kemudian ia mampu untuk mengeksekusi
programnya dengan salah satu bahasa pemrograman prosedural yang sederhana. Mahasiswa
akan memakai bahasa pemrograman tersebut sebagai alat untuk mengeksekusi program
dengan mesin yang tersedia.
D. RENCANA KEGIATAN
Kuliah ini adalah merupakan kuliah pratek dengan dibagi dalam tiga sesi perkuliahan yakni
1. Pertama didahului dengan response praktikum yang berisi dasar algoritma. Serta
penjelasan praktis tentang pemahaman notasi algoritma tahap per tahap.
2. Kedua adalah melakukan tranlasi notasi algoritmik kedalam bahasa pemrograman yang
dipilih.
3. Ketiga adalah melakukan praktikum dengan menggunakan perangkat lunak aplikasi
Delphi untuk menuliskan teks program ke komputer.
Pada setiap bagian tersebut, akan didefinisikan dan dipakai nama, atau dituliskan komentar
dalam bahasa Indonesia. Komentar dalam bahasa Indonesia dituliskan di antara tanda
kurung kurawal. Teks yang tidak dituliskan di antara kurung kurawal buka dan tutup adalah
teks dalam notasi algoritmik.
Contoh teks algoritmik:
JUDUL
{Ini adalah teks dalam bahasa Indonesia untuk memudahkan pembacaan teks
algoritma}
KAMUS
ALGORITMA
{Pada bagian ini, semua teks yang tidak dituliskan di antara tanda kurung kurawal
buka dan kurung kurawal tutup harus dianggap sebagai notasi algoritmik}
Pembakuan ini diperlukan agar siswa terbiasa dengan penulisan nama dalam bahasa
pemrograman yang akan digunakan, terbiasa dengan aturan yang case sensitive atau
membedakan huruf besar dan huruf kecil dalam penamaan disamping melatih konsistensi
penulisannya.
1.3 Kamus
Kamus adalah bagian teks algoritma tempat mendefinisikan:
nama type,
nama konstanta,
nama informasi (variabel),
nama fungsi, sekaligus spesifikasinya
nama prosedur, sekaligus spesifikasinya
KAMUS
{Mengkonversi harga i yang bertype real menjadi harga ekivalen yang bertype
integer}
procedure INISIALISASI
{I.S. Sembarang
{I.S. sembarang
1.4 Algoritma
Algoritma adalah bagian teks algoritmik yang berisi instruksi atau pemanggilan aksi yang telah
didefinisikan. Komponen teks algoritmik dalam pemrograman prosedural dapat berupa:
Dalam program terdapat banyak type, secara umum dapat digolongkan menjadi dua: type dasar
merupakan type yang tersedia langsung dan siap pakai dalam program dan type bentukan yang
dapat diturunkan dari type dasar atau type bentukan lainnya. Kategori type dasar dalam bahasa
aras tinggi umumnya terdiri dari integer, real, character, dan Boolean, terkadang string.
Implementasi type tersebut dalam berbagai bahasa dapat sedikit berbeda. Akan dipelajari ketika
dijelaskan pada bahasa yang bersangkutan.
1 2 or and xor
Domain : Z
suksesor x adalah x + 1
predesesor x adalah x – 1
Contoh: suksesor 5 adalah 6; predesesor 5 adalah 4; predesesor -5 adalah -6
- Kurang integer
* Kali integer
/ Bagi real
^ pangkat integer
Domain : R
Konstanta : Angka mengandung titik (.) dan dapat dituliskan dengan E yang berarti
bilangan pangkat basis 10.
- Kurang real
* Kali real
/ Bagi real
^ pangkat real
Catatan :
2.1.4 Character
Nama : Character
2.1.5 string
Nama : String
2.1.6 Enumerasi
Type enumerasi adalah type yang definisi domainnya tidak menurut suatu aturan akan tetapi
dilakukandengan cara enumerasi, menyebutkan anggotanya satu per satu. Tipe ini sangat
diperlukan untuk menyebutkan himpunan nilai yang pasti. Karena disebutkan satu per satu cara
mengakses anggotanya dapat digunakan kata kunci:
Contoh:
Contoh:
Contoh-1:
{Type TPoint menyatakan koordinat titik (absis ada ordinat ) dalam sumbu kartesian}
type TPoint <x, y: real>
P: TPoint
Maka cara mengacu ke elemen-elemennya adalah dengan menggunakan tanda titik (.) berikut:
Nama : TPoint
Contoh-2:
{Type TJam menyatakan waktu jam dengan jam (hh), menit (mm), detik (dd)}
type TJam <hh: integer[0..23],
mm: integer[0..59],
ss: integer[0..59]>
Nama : TJam
Contoh-3:
type
{Type THari menyatakan enumerasi hari: siang (am) atau malam (pm)}
THari: (am, pm)
{Type TJam2 menyatakan waktu jam: jam (hh), menit (mm), detik (dd), hari (hari)}
TJam2 <hh: integer[0..11],
mm: integer[0..59],
ss: integer[0..59],
hari: THari>
Nama : TJam2
Harga suatu variabel bertype dapat dimanipulasi (diubah) dengan cara instruksi assignment atau
dibaca melalui piranti masukkan. Sedangkan harga suatu konstanta tidak dapat dimanipulasi dan
hanya memiliki harga yang tetap seperti yang didefenisikan dalam kamus.
Kamus
constant PI: integer=3.1415
type TPoint <x, y: real>
VarPI, KelilingLingkaran, Keliling: real
P1, P2: TPoint
Algoritma
VarPI← PI {harga konstanta PI diisikan ke VarPI}
KelilingLingkaran←PI*24. {harga ekspresi PI*24. diisikan ke KelilingLingkaran}
P1.x← KelilingLingkaran {harga KelilingLingkaran diisikan ke P1.x}
P1.y←5. {harga 5. Diisikan ke P1.y}
Dalam notasi algoritmik, tatacara penulisan aksi sekuensial ini dituliskan baris per baris. Pada
suatu algoritma, terkadang ada beberapa bagian aksi sekuensial yang tidak mempengaruhi hasil
akhir suatu algoritma. Kondisi ini dapat dituliskan dalam satu baris dengan tanda pemisah tiap
instruksi berupa semicolon (;)
Program AksiSekuen
{Contoh program aksi sekuensial}
Kamus:
P, L, T, Luas, Isi: real
LebihBesar: Boolean
Algoritma:
P←8.
L←4.5
Luas←P*L
input(T)
Isi←Luas*T
LebihBesar←Isi>Luas
output(Luas, Isi, LebihBesar)
Catatan: Aksi P←8 dan L←4.5 pada bagian Algoritma dapat dituliskan satu baris dengan tanda
pemisah titik-koma(;) berikut P←8; L←4.5
Untuk lebih mempermudahakan diberikan beberapa contoh aksi sekuensial berikut ini.
Contoh-1:
Permasalahan menuliskan “Hello world” ke piranti keluaran. Di sini diberikan dua solusi dan
pertimbangkan mana yang lebih baik menurut anda.
Program HelloWorld1
{Menuliskan “Hello world” ke piranti keluaran}
Kamus:
Algoritma:
output(“Hello world”)
Program HelloWorld2
{Menuliskan “Hello world” ke piranti keluaran}
Kamus:
Salam: string
Algoritma:
Salam←“Hello world”
output(Salam)
Menuliskan “Hello” diikuti dengan nama seseorang yang dimasukkan lewat piranti masukan.
Misalkan Nama seorang yang dimasukkan “Budi” maka keluarannya adalah: “Hello, Budi”. Di sini
juga diberikan dua solusi dan pertimbangkan mana yang lebih baik.
Program HelloSomeone1
{Menuliskan “Hello” dan diikuti nama seseorang yang berasal dari piranti masukan ke piranti
keluaran}
Kamus:
Someone: string
Algoritma:
Input(Someone)
output(“Hello, “, Someone)
Program HelloSomeone2
{Menuliskan “Hello” dan diikuti nama seseorang yang berasal dari piranti masukan ke piranti
keluaran}
Kamus:
Someone: string
Algoritma:
Input(Someone)
Someone←“Hello, “ & Someone
output(Someone)
Kondisi, yang berupa ekspresi yang mengasilkan nilai bitwise true atau false
Aksi yang akan dilaksanakan sesuai dengan keadaan kondisional yang dipenuhinya.
Untuk mengkonstruksi analisis kasus ini perlu dipahami semua domain kondisi yang
mungkin yang terkait dengan variasi aksinya. Ini perlu dilakukan agar tidak terjadi kesalahan
aksi yang tidak dikehendaki masuk dalam domain kondisi lainnya. Kadang domain kondisi
yang kompleks yaitu yang terkait dengan beberapa parameter keadaan kondisional, sering
dilakukan analisis dengan cara proses tabulasi antara kondisi dan aksi untuk
penyederhanaannya. Meskipun begitu tidak ada rumus baku yang menjadi pedoman untuk
menyelesaikan analisis kasus ini.
Notasi algoritmik secara umum untuk analisis kasus yang umum (banyak kasus):
depend on (NamaNama)
<kondisi-1> : <aksi-1>
<kondisi-2 > :<aksi-2>
<kondisi-3> : <aksi-3>
…
<kondisi-N> : <aksi-N>
dengan syarat :
kondisi-1,kondisi-2,kondisi-3, …, kondisi-N domain harganya [true, false]
kondisi-1,kondisi-2,kondisi-3, …, kondisi-N adalah ekspresi lojik/boolean yang
mengandung NamaNama sebagai operan.
kondisi-1 ∩ kondisi-2 ∩ kondisi-3 ∩ …, ∩ kondisi-N = Ø. Berarti semua kondisi disjoint,
tidak ada kasus yang sama tercakup pada dua buah kondisi.
kondisi-1 ∪ kondisi-2 ∪ kondisi-3 ∪ … ∪ kondisi-N berarti kondisi mencakup semua
kemungkinan
Jika hanya ada satu kasus yang mengakibatkan aksi, atau dua kasus komplementer, dapat
dipakai notasi sebagai berikut :
SATU KASUS:
if (kondisi) then
aksi
Jika kondisi benar aksi dilakukan dan jika kondisi salah tidak menjalankan apa-apa (kosong)
Fungsi dapat diibaratkan sebuah mesin yang mentransformasi/memetaan suatu nilai (dari
“domain”) ke nilai lain (dalam “range”). Secara algoritmik, sebuah fungsi akan menerima suatu
harga yang diberikan lewat parameter formal bertype tertentu (jika ada) dan menghasilkan satu
nilai sesuai dengan domain yang didefinisikan dalam spesifikasi fungsi. Perbedaan utama antara
prosedur dan fungsi adalah bahwa fungsi akan mengirimkan satu nilai sesuai dengan typenya. Jika
prosedur dipanggil dalam suatu aplikasi, ia hanya menjalankan teks programnya sendiri. Namun
jika suatu fungsi dipanggil suatu program, ia akan menjalankan fungsi tersebut dan mengirimkan
satu nilai ke program yang memanggilnya.
Dalam penulisannya, fungsi diberi nama, dan parameter formal yaitu harga masukan yang juga
diberi nama dan dijelaskan typenya. Fungsi harus didefinisikan dalam kamus.
Fungsi yang didefinisikan dapat “dipanggil” untuk dieksekusi lewat namanya, dan dengan
diberikan nilai parameter aktualnya.
Contoh Fungsi:
Fungsi f() adalah fungsi nilai keluaran random dari lemparan dadu, fungsi ini tanpa parameter dan
dapat didefinisikan sebagai:
Fungsi f(x) merupakan fungsi kuadrat dengan satu parameter x∈R, dalam matematika dapat
didefinisikan sebagai :
f(p, l, t) = p*l*t adalah fungsi isi balok dengan tiga parameter p, l, dan t > 0. Jika diberi harga p = 4,
l= 2, dan t=1 maka f(p, l, t) akan menghasilkan 8. Jika diberi harga p = 4, l= 3, dan t=2 maka f(p, l, t)
akan menghasilkan 24.
Kamus lokal:
{semua NAMA yang dipakai dalam algoritma/realisasi fungsi}
Algoritma:
{deretan instruksi algoritmik:
pemberian harga, input, output, analisis kasus, pengulangan}
{Pengiriman harga di akhir fungsi, harus sesuai dengan type hasil}
→ hasil
Dengan syarat:
list parameter input boleh tidak ada (kosong), dalam hal ini di fungsi tidak membutuhkan
apa-apa dari pemakainya untuk menghasilkan harga.
jika list parameter input (parameter formal) tidak kosong, minimal mengandung satu
nama, maka nama tersebut harus berupa nama informasi beserta typenya.
instruksi “terakhir” yang harus ada pada fungsi harus merupakan pengiriman harga yang
dihasilkan oleh fungsi (dituliskan seperti pada notasi di atas, dengan type hasil boleh type
dasar atau type bentukan). Type hasil boleh dinyatakan oleh suatu nama type. Dengan
catatan, bahwa instruksi “terakhir” belum tentu dituliskan pada baris terakhir, misalnya
jika hasil merupakan sebuah nilai yang dikirimkan berdasarkan analisis kasus.
Kamus:
{semua NAMA yang dipakai dalam algoritma}
function NamaFungsi (<list nama parameter formal/input>)→ <type hasil>
{Spesifikasi fungsi}
Algoritma:
{deretan instruksi pemberian harga, input, output, analisis kasus, pengulangan yg memakai
fungsi}
{Harga yang dihasilkan fungsi juga dapat dipakai dalam ekspresi}
nama ← NamaFungsi(<list parameter aktual>)
output(NamaFungsi(<list parameter aktual>)
Catatan:
Prosedur adalah sederetan instruksi algoritmik yang diberi nama, dan akan menghasilkan efek
neto yang terdefinisi, jika diperlukan efek neto ini dapat berupa aksi kosong.
Prosedur berparameter dirancang, agar sepotong kode yang sama ketika eksekusi dilakukan,
dapat dipakai untuk nama parameter yang bebeda-beda.
Nama parameter yang dituliskan pada definisi/spesifikasi prosedur disebut sebagai parameter
formal. Sedangkan parameter yang dituliskan pada pemanggilan prosedur disebut sebagai
parameter aktual.
Parameter formal adalah nama-nama variabel (list nama) yang dipakai dalam mendefinisikan
prosedur, dan membuat prosedur tersebut dapat dieksekusi dengan nama-nama yang berbeda
ketika dipanggil. Parameter formal adalah list nama yang akan dipakai pada prosedur, yang
nantinya akan diasosiasikan terhadap nama variabel lain pada saat pemanggilan. Sesuai dengan
ketentuan nilainya, ada tiga type parameter formal:
parameter Input, yaitu parameter yang diperlukan prosedur sebagai masukan untuk
melakukan aksi yang efektif.
parameter Output, yaitu parameter yang nilainya akan dihasilkan oleh prosedur. Hasil
nilai akan disimpan pada nama parameter Output ini.
parameter Input/Output, yaitu parameter yang nilainya diperlukan prosedur sebagai
masukan untuk melakukan aksi, dan pada akhir prosedur akan dihasilkan nilai yang baru.
Kamus lokal:
{semua NAMA yang dipakai dalam BADAN PROSEDUR}
Algoritma:
{ BADAN PROSEDUR }
{deretan instruksi pemberian harga, input, output, analisis kasus, pengulangan atau
prosedur}
dengan syarat :
Kamus:
{ semua NAMA yang dipakai dalam algoritma }
procedure NAMAPROSEDUR (Input/Output : <list-nama parameter formal>) {Spesifikasi : Initial
State, Final State}
Algoritma:
{Deretan instruksi assignment/pemberian harga, input, output, analisis kasus, pengulangan )
NAMAPROSEDUR (<list parameter aktual>)
dengan syarat :
pada waktu pemanggilan terjadilah asosiasi antara parameter formal dengan parameter
aktual sesuai dengan urutan penulisan dalam list-nama parameter formal.
list parameter aktual harus sama jumlah, urutan dan typenya dengan list parameter
formal.
list parameter aktual yang berupa Input dapat berupa nama informasi atau nama
konstanta/ekspresi yang telah terdefinisi dalam kamus atau konstanta; dapat juga berupa
harga konstanta, atau harga yang dihasilkan oleh suatu ekspresi atau fungsi.
list parameter aktual yang berupa Input/Output atau Output harus berupa nama
informasi. Jika didefinisikan sebagai Input, walaupun pernah diubah dalam badan
prosedur, isi dari nama yang dipakai pada parameter aktual tidak pernah berubah. Jika
didefinisikan sebagai parameter Output dan parameter aktual yang diasosiasikan
terhadapnya pernah diubah harganya dalam badan prosedur, isinya akan berubah.
Program TUKAR
{Program yang membaca dua buah harga x dan y, menuliskan, kemudian menukarnya, dan
menuliskan kembali nilai setelah pertukaran}
Kamus:
x,y: integer
procedure Tukar(Input/Output a,b: integer)
{Prosedur untuk menukar dua buah harga yang tersimpan dalam dua nama integer}
{I.S.: diberikan a=A dan b=B}
{F.S.: a=B dan b=A}
Algoritma:
input(x , y)
output(x, y)
Tukar(x, y)
output(x, y)
Algoritma:
Temp← a {Temp = a; a = a; b = b}
a← b {Temp = a; a = b; b = b}
b← Temp {Temp = a; a =b; b = a}
1. kondisi yang mengakibatkan pengulangan suatu saat berhenti, yang dinyatakan oleh
sebuah ekspresi logik baik secara eksplisit maupun implisit
2. badan pengulangan, yaitu aksi yang harus diulang selama kondisi yang ditentukan untuk
pengulangan masih dipenuhi
Pengulangan harus berhenti, ini yang harus dijamin oleh pemrogram. Pengulangan yang terus
menerus harus dapat dideteksi pemrogram bahkan sebelum program dieksekusi oleh mesin,
berdasarkan invariansi dari badan pengulangan tersebut.
Notasi pengulangan adalah salah satu notasi dasar dalam penulisan algoritma selain analisis
kasus. Namun notasi tersebut hanya akan ada artinya jika dikenakan terhadap skema tertentu.
Notasi pengulangan yang berdiri sendiri tidak ada artinya, bahkan menyesatkan karena pada
hakekatnya notasi pengulangan hanyalah merupakan sebagian dari skema pengulangan yang akan
dibahas pada bab-bab berikutnya.
1. banyaknya pengulangan,
2. kondisi berhenti
3. kondisi ulang
4. dua aksi
5. pencacah
Aksi akan diulang sebanyak n kali, dan bukan urusan pemrogram untuk mengelola pengulangan
tersebut. Dengan hanya menyebutkan pengulangan tersebut, pengulangan pasti akan berhenti
suatu saat.
Aksi akan dilakukan selama kondisi -pengulangan masih dipenuhi (bernilai true). Badan
pengulangan (Aksi) pada notasi ini mungkin tidak akan pernah dilakukan, karena sebelum
aksi yang pertama dieksekusi dilakukan test terhadap kondisi berhenti. Test terhadap
kondisi -pengulangan dilakukan setiap kali sebelum Aksi dilaksanakan. Pengulangan ini
berpotensi untuk menimbulkan aksi "kosong" (tidak pernah melakukan apa-apa karena pada
test yang pertama, kondisi -pengulangan tidak dipenuhi (bernilai false).
Pengulangan ini seolah-olah adalah "gabungan" antara bentuk pengulangan kedua dan ketiga.
Mekanisme yang dilakukan oleh pengulangan ini adalah dengan melakukan secara otomatis
Aksi-1 pada eksekusi yang pertama kemudian dilakukan test terhadap kondisi berhenti.
Tergantung kepada kondisi berhenti yang ditest:
Aksi-2 akan diaktifkan dan kemudian Aksi-1 yang berikutnya diulang, atau
pengulangan dihentikan karena efek neto dari Aksi-1 menghasilkan kondisi
berhenti.
Pengulangan ini berguna untuk kasus-kasus di mana Aksi-2 merupakan hal yang harus
dilakukan tergantung dari hasil Aksi-1.
nama- -pencacah harus suatu type yang terdefinisi suksesor dan predesesornya, setelah
pelaksanaan pengulangan selesai, harga yang tersimpan pada nama -pencacah tidak
terdefinisi : jika hendak dipakai, harus didefinisikan kembali
Aksi akan dilakukan dengan memperhitungkan harga-harga dari nama -pencacah yang
di"jelajahi", dipakai satu per satu secara berturutan. Dengan memakai pengulangan ini,
pemrogram tidak perlu melakukan operasi terhadap suksesor/predesesor karena setiap kali
selesai melakukan Aksi, otomatis mesin akan melakukan operasi untuk mendapatkan
suksesor dari harga yang sedang berlaku saat itu untuk nama.
Pengulangan otomatis berhenti setelah penjelajahan terhadap nama -pencacah sudah
mencakup semua harga yang terdefinisi dalam range harga. Harga yang tersimpan pada nama
-pencacah setelah pengulangan selesai dilaksanakan tidak terdefinisi, jika ingin dipakai harus
didefinisikan kembali.
Pengulangan ini biasanya dipakai jika harga yang tersimpan dalam nama -pencacah ingin
dimanfaatkan dalam Aksi, namum tidak boleh diubah karena akan mengacaukan urutan
eksekusi yang dilakukan.
Pada bahasa pemrograman yang dapat dieksekusi mesin, nilai dan perubahan nama-
pencacah dikontrol oleh pemroses bahasa. Harga yang tersimpan pada nama-pencacah
setelah pengulangan selesai dilaksanakan tidak terdefinisi, jika ingin dipakai harus
didefinisikan kembali.
Pesan kesalahan (Error) dari compiler dan linker ditampilkan dalam jendela khusus di bawah
editor teks program. Untuk mendapatkan Help dari kesalahan kompilasi dilakukan dengan
menyeleksinya dari daftar, kemudian menekan tombol F1.
8.4 IDE
Setelah Delphi dijalankan akan terdapat beberapa tool utama dalam IDE (Integrated Development
Environtment), yang meliputi menu, toolbar, palet komponen, Object Inspector, Object TreeView,
Code editor, Code Explorer, Project Manager, dan tool lainnya. Banyaknya kelengkapan dan
komponen tergantung dari edisi Delphi yang diinstal.
Object TreeView menampilkan
komponen yang digunakan secara Menu dan toolbar dapat mengakses host
bertingkat kelengkapan dan tool untuk membantu penulisan
aplikasi program.
hierarchical view of your components
'
Toolbar ini merupakan akses cepat untuk perintah/operasi yang sering digunakan dan hampir semua
perintah di toolbar terdapat dalam menu. Beberapa operasi memiliki shortcut tombol kunci.
Remove
Open file from View Toggle Name of saved Save current
New Save project project unit form/unit desktop layout desktop
8.4.2 Palet komponen, Form Designer, Object Inspector dan Object TreeView
Palet komponen, Form Designer, Object Inspector dan Object TreeView bekerjasama untuk
membangun antar muka suatu aplikasi. Palet komponen memiliki beberapa halaman tabulasi yang
didasarkan atas fungsi kelompoknya, misalkan halaman Standard, Additional, dan Win32 berisi
kendali jendela seperti kotak edit dan tombol up/ down; halaman Dialogs berisi kotak dialog yang
umum digunakan untuk operasi file seperti membuka atau menyimpan file.
Halaman palet komponen, dikelompokkan berdasarkan fungsinya Klik untuk halaman selanjutnya
Komponen-komponen
Setiap komponen memiliki atribut yang spesifik—properties (sifat), events (reaksi), dan methods—
yang dapat digunakan untuk mengendalikan aplikasi.
Setelah menempatkan komponen dalam formulir, (atau Form Designer), komponen dapat disusun
kembali disesuaikan dengan kebutuhannya. Dengan memanfaatkan Object Inspector, komponen
tersebut juga dapat diset property design-timenya, menciptakan event handler, dan memfilter
property dan event yang Nampak, menjadikan koneksi antara aplikasi yang tampak secara visual
dengan teks program yang akan dijalankan.
Object TreeView menampilkan hirarki komponen atau diagram pohon. Diagram pohon
disinkronkan dengan Object Inspector dan Form Designer, sehingga ketika terjadi perubahan fokus
dalam Object TreeView, maka keduanya, Object Inspector dan formulir, juga berubah fokus. Object
TreeView dapat digunakan untuk mengubah kaitan relationship komponen dengan lainnya.
Contohnya, jika dalam suatu formulir ditambahkan komponen panel dan check box, keduanya akan
setingkat. Jika dalam Object TreeView dilakukan proses drag check box ke atas icon panel, maka
check box akan menjadi anak (child) panel.
Untuk mengedit dan membuang objek dari Object Repository, pilih Tools | Repository atau klik
kanan dalam kotak dialog item yang baru dan pilih Properties.
Komponen yang
ditambahkan ke formulir
direfleksikan dalam teks
Teks program yang program
dibangkitkan.
Code completion Ketik nama klas dengan diikuti titik (.) untuk menampilkan
daftar properties, methods, dan events yang sesuai dengan
kals tersebut, pilih salah satut, dan tekan tombol Enter.
klas. Daftar tersebut akan secara otomatis memfilter dirinya sesuai dengan
huruf yang diketikkan,. Pilih item dalam daftar dan tekan tombol Enter
untukmenanmbahkannya dalam teks program.
Daftar tersebut dapat diurutkan dengan klik kanan dan klik Sort by
Name.
Simbol tooltip yang terlihat menunjukkan informasi deklarasi untuk beberapa identifier
dan muncul pada saat pointer tetikus melewatinya.
Tekan tombol Ctrl dan klik atau klik kanan dan klik
Find Declaration untuk loncat menuju definisi suatu
identifier.
Tombol toolbar—Property,
Master/Detail and Lookup—
untuk mendisain keterkaitan
antara komponen
Gambar 8.15 Penggunaan View As Text untuk menampilkan keterangan teks formulir ke editor
Sedangkan Project Browser meniti projek secara teliti. Browser menampilkan classes, units, dan
symbol global (types, properties, methods, variables, and routines) dalam suatu projek yang
dideklaraskan atau digunakan dalam tree diagram.
Objek menurunkan TComponent yang memiliki properties dan methods yang membolehkannya
diinstal dalam palet komponen dan ditambahkan dalam formulir Delphi atau data modules. Karena
komponen disisipkan dalam IDE, kita dapat memanfaatkan tool seperti Form Designer untuk
mengembangkan aplikasi dengan cepat.
Komponen adalah sangat encapsulated (terbungkus). Contohnya, buttons diprogram untuk
merespon klik tetikus dengan menyulut OnClick events. Jika digunakan control button, maka tidak
perlu lagi menuliskan teks program untuk menangani kejadian yang dibangkitkan ketika button
diklik; kita hanya bertanggung jawab terhadap logika aplikasi yang berjalan dalam merespon
kejadian klik itu sendiri.
Tombol Run
Dengan debugger terintegrasi, beberapa jendela debugging tersedia, meliputi Breakpoints, Call
Stack, Watches, Local Variables, Threads, Modules, CPU, and Event Log. Untuk menampilkan pilih
View | Debug Windows. Tidak semua tampilan debugger tersedia dalam semua edisi Delphi.
type yang telah didefinisikan sebelumnya (built-in); kompiler akan mengenali secara otomatis
tanpa perlu mendeklarasikannya. Hampir seluruh type yang terdokumentasi adalah jenis ini.
Beberapa type dibentuk dengan deklarasi, yaitu terd iri dari type yang didefinisikan-pengguna
dan type yang didefinisikan dari produk suatu kamus.
Type dapat dikelompokkan sebagai dasar atau generic. Range dan format type dasar memiliki
implementasi yang sama dalam objek Pascal dengan mengabaikan CPU dan system operasinya.
Sedangkan type generic merupakan platform khusus dan dapat berbeda implementasinya.
Hampir semua type adalah dasar, tetapi type integer, character, string, dan pointer adalah
generic. Ide bagus jika menggunakan type generic untuk memberikan kinerja dan portability
yang optimal. Kadang, merubah format type sederhana di dalam penyimpan dari implementasi
type generic ke selanjutnya menyebabkan masalah kompabilitas, contohnya streaming data
menjadi file.
Type dapat diklasifikasikan sebagai sederhana, terstruktur, pointer, procedural, atau varian.
Sebagai tambahan, type identifier sendiri dapat dipandang sebagai memiliki “type” tertentu
karena mereka dapat dilewatkan sebagai parameter ke suatu fungsi tertentu (seperti High, Low,
and SizeOf).
simple
ordinal
integer
character
Boolean
enumerated
subrange
real
string
structured
set
array
record
file
class
class reference
interface
pointer
procedural
variant
type identifier
Fungsi standar SizeOf dapat diterapkan pada semua variabel dan type. Fungsi tersebut
mengirimkan nilai integer yang menunjukkan jumlah memori (byte) yang digunakan untuk
Type integer dasar terdiri dari Shortint, Smallint, Longint, Int64, Byte, Word, dan Longword.
Dalam teks editor program tertulis nama program Project1 dengan jenis aplikasi console. Terdapat suatu
remark, yaitu teks yang berwarna hijau dalam tanda kurung kurawal buka dan tutup. Pada bagian ini
akan digantikan dengan instruksi program berikut:
Pada artikel ini saya tidak ingin menutup teori OOP, tetapi hanya menyarankan beberapa
aturan sederhana yang dapat membantu Anda memperbaiki struktur program Anda. Aturan-
aturan praktis harus dianggap sebagai saran, untuk diterapkan atau tidak tergantung pada jenis
aplikasi yang sebenarnya Anda sedang kembangkan. Saran saya hanya untuk menjaga mereka
dalam pikiran.
Prinsip kunci yang saya ingin menggarisbawahi adalah enkapsulasi. Kami ingin menciptakan
kelas yang fleksibel dan kuat, yang akan memungkinkan kita untuk mengubah pelaksanaan
nanti tanpa mempengaruhi sisa program. Ini bukan satu-satunya kriteria untuk OOP yang baik,
tapi mewakili yayasan, jadi jika aku benar-benar over-stress itu dalam artikel ini saya memiliki
beberapa alasan baik untuk melakukannya.
Akhirnya, untuk menggarisbawahi fakta bahwa prinsip-prinsip ini harus digunakan dalam
pekerjaan sehari-hari kita dengan kita semua programmer Delphi, aku akan fokus terutama
pada pengembangan bentuk, bahkan jika beberapa peraturan yang sama berlaku untuk
pengembangan komponen. Mereka yang menulis komponen harus mempertimbangkan OOP
dan kelas sebagai elemen pusat. Mereka yang menggunakan komponen pada kali lupa tentang
OOP: artikel ini dapat dianggap sebagai pengingat.
1
Marco Cantu, 20 RULES FOR OOP IN DELPHI, The Delphi Magazine, July 1999
Jika Anda berpikir tentang bentuk, Delphi berikut kelas satu ', satu unit' prinsip secara default,
yang tentu saja berguna. Ketika menambahkan bentuk non-kelas untuk proyek, membuat unit
terpisah baru.
Sangat penting untuk menggunakan nama deskriptif untuk komponen juga. Notasi yang paling
umum adalah dengan menggunakan huruf kecil beberapa huruf awal untuk jenis kelas, diikuti
oleh peran komponen, seperti dalam btnAdd atau editName. Sebenarnya ada banyak notasi
mirip gaya berikut ini dan ada benar-benar ada alasan untuk mengatakan salah satu dari
mereka adalah yang terbaik, terserah selera pribadi Anda.
public
constructor Create (Text: string); reintroduce; overload;
constructor TFormDialog.Create(Text: string);
begin
inherited Create (Application);
Edit1.Text := Text;
end;
Jika Anda memerlukan penyimpanan data tambahan untuk membentuk, tambahkan beberapa
bidang swasta untuk itu. Dalam hal ini setiap contoh formulir akan memiliki salinan sendiri dari
data.
Jika Anda tidak mengikuti aturan ini, Anda akan mendapatkan masalah ketika Anda membuat
beberapa contoh formulir.
Misalnya, bentuk utama dari sebuah program dapat memiliki field private mengacu pada
kotak dialog. Jelas aturan ini menjadi sangat penting jika Anda berencana membuat beberapa
contoh bentuk sekunder. Anda dapat menyimpan daftar dalam bidang bentuk utama, atau
hanya menggunakan array Form dari objek Screen global.
Saya berpikir bahwa menghapus objek bentuk global sangat berguna bagi pendatang baru
Delphi, yang kemudian tidak akan bingung antara kelas dan objek global lagi. Bahkan, setelah
obyek global telah dihapus, setiap referensi untuk kemudian akan berakibat pada kesalahan.
Anda juga harus menggunakan properti atau metode untuk menginisialisasi suatu bentuk
sekunder atau kotak dialog, dan untuk membaca keadaan akhir. inisialisasi juga dapat dilakukan
menggunakan konstruktor, seperti telah saya jelaskan.
Misalkan sekarang Anda mengubah antarmuka pengguna, mengganti komponen dengan yang
lain. Yang harus Anda lakukan adalah memperbaiki dan Set Dapatkan metode yang terkait
dengan properti itu, Anda tidak perlu memeriksa dan memodifikasi kode sumber dari semua
bentuk dan kelas yang merujuk pada komponen itu. Anda dapat melihat contoh pada gambar
12.2.
Gambar 12.2 Dapat ditambahkan satu properti ke formulir untuk menyatakan properti/sifat komponen
private
function GetText: String;
procedure SetText(const Value: String);
public
property Text: String read GetText write SetText;
function TFormDialog.GetText: String;
begin
Result := Edit1.Text;
end;
procedure TFormDialog.SetText(const Value: String);
begin
Edit1.Text := Value;
end;
Gambar 12.3 menunjukkan bagaimana Anda dapat mengekspos item dari listbox sebagai
properti array default formulir hosting.
Gambar 12.3 Definisi satu array property yang default di dalam formulir
type
TFormDialog = class(TForm)
private
ListItems: TListBox;
function GetItems(Index: Integer): string;
procedure SetItems(Index: Integer; const Value: string);
public
property Items[Index: Integer]: string read Get Items write SetItems; default;
end;
function TFormDialog.GetItems(Index: Integer): string;
begin
if Index >= ListItems.Items.Count then
raise Exception.Create('TFormDialog: Out of Range'); Result := ListItems.Items [Index];
end;
procedure TFormDialog.SetItems(Index: Integer; const Value: string);
begin
if Index >= ListItems.Items.Count then
raise Exception.Create('TFormDialog: Out of Range');
ListItems.Items [Index] := Value;
end;
Misalnya, Anda dapat menggambar langsung pada permukaan bentuk, mengatur nilai-nilai
beberapa properti, panggilan metode khusus, mengubah status dari komponen sekaligus, atau
kebakaran acara, jika tersedia.
Jika Delphi tempat semua komponen di bagian published, hal ini karena cara bidang ini
terikat pada komponen yang dibuat dari file DFM.. Ketika Anda menetapkan nama komponen
yang melekat secara otomatis VCL objek komponen untuk referensi di formulir. Ini hanya
mungkin jika referensi adalah published, karena Delphi menggunakan RTTI dan metode
TObject untuk melakukan ini.
Jika Anda ingin memahami informasi rinci, lihat gambar 12.4, yang memiliki kode metode
SetReference kelas TComponent, yang disebut oleh InsertComponent,
RemoveComponent dan SetName.
Gambar 12.4 Teks program VCL biasa untuk menyangkutkan suatu komponen kepada acuannya di dalam fromulir
pemilik
var
Field: ^TComponent;
begin
if FOwner <> nil then begin
Field := FOwner.FieldAddress(FName);
if Field <> nil then
if Enable then
Field^ := Self
else
Field^ := nil;
end;
end;
Setelah Anda mengetahui hal ini, Anda menyadari bahwa dengan memindahkan referensi
komponen dari published ke bagian private Anda kehilangan perilaku yang otomatis.
Untuk memperbaiki permasalahan, cukup membuatnya manual, dengan menambahkan kode
berikut ini untuk setiap komponen dalam event handler OnCreate dalam bentuk:
Operasi kedua harus Anda lakukan adalah mendaftar kelas komponen dalam sistem, sehingga
mereka RTTI informasi termasuk dalam program disusun dan dibuat mampu memanfaatkan-
panggilan ini bahkan ifit tidak diperlukan, sebagai tambahan untuk panggilan metode
RegisterClasses tidak berbahaya. Metode RegisterClasses biasanya ditambahkan
ke bagian inisialization unit hosting formulir:
RegisterClasses ([TEdit]);
Sang penyihir tidak Cally automati-tempat source code di lokasi yang tepat: Aku bekerja untuk
memperbaiki ini dan Anda dapat memeriksa website saya (www.marcocantu.com) untuk versi
terbaru.
bentuk warisan Visual memungkinkan Anda untuk berbagi perilaku umum dari berbagai
bentuk: Anda dapat memiliki metode umum, properti, pengendali event, komponen, sifat
komponen, komponen pengendali event, dan sebagainya.
terhadap enkapsulasi. The implementasi pemikiran-data yang dilindungi dibagi di antara semua
bentuk warisan, dan Anda mungkin harus memperbarui semua dari mereka dalam hal definisi
asli dari perubahan data.
Perhatikan bahwa jika Anda mengikuti aturan menyembunyikan komponen (Kaidah 14) bentuk
warisan tidak mungkin mengakses komponen swasta dari kelas dasar. Dalam bentuk warisan,
kode seperti t1.TextEdit: =''; tidak akan dikompilasi lagi. Aku dapat melihat ini tidak
mungkin menjadi sangat berguna, tapi setidaknya dalam teori itu harus dianggap sebagai hal
yang positif, tidak negatif. Jika Anda merasa ini terlalu banyak konsesi untuk enkapsulasi,
menyatakan referensi komponen di bagian dilindungi dari bentuk dasar.
SetText ('');
Sebenarnya, sebagai metode tersebut dipetakan ke properti, kami hanya bisa menulis:
Teks: ='';
Gambar 12.5 Fromulir dengan properties yang diimplementasikan dengan virtual methods
type
TFormDialog = class(TForm)
procedure FormCreate(Sender: TObject);
private
Edit1: TEdit;
protected
function GetText: String; virtual;
procedure SetText(const Value: String); virtual;
public
constructor Create (Text: string); reintroduce; overload;
property Text: String read GetText write SetText;
end;
Dalam bentuk yang diwarisi kini Anda dapat mengganti metode virtual SetText, untuk
menambahkan beberapa perilaku tambahan:
procedure TFormInherit.SetText(const Value: String);
begin
inherited SetText(Value);
if Value= ‘’‘then
Button1.Enabled:= False;
end;
Pada disk Anda juga akan menemukan paket dikompilasi versi draft pertama Form Wizard OOP,
tetapi Anda harus (mudah-mudahan) dapat menemukan versi yang lebih lengkap di website
saya.
Tentu saja ada aturan lain praktis Anda bisa datang dengan, karena saya belum mencoba untuk
masuk ke dalam memori dan penanganan masalah RTTI, yang begitu kompleks untuk pantas
artikel tertentu.
Kesimpulan saya adalah bahwa mengikuti aturan saya sudah disorot memiliki biaya, dalam hal
kode tambahan: itu adalah harga yang Anda harus membayar untuk mendapatkan program
yang lebih fleksibel dan kuat. Ini adalah harga pemrograman berorientasi obyek. Mari kita
berharap bahwa masa depan versi Delphi membantu kami mengurangi harga itu.