Pengaturcaraan berstruktur

**Pengaturcaraan berstruktur** boleh dilihat sebagai sebahagian daripada pengaturcaraan bertatacara, dan merupakan salah satu paradigma yang utama dalam pengaturcaraan komputer.

Daripada sejarahnya, beberapa teknik (metodologi) berstruktur yang berbeza telah dihasilkan bagi menulis sebuah atur cara berstruktur. Dua daripada teknik yang biasa digunakan ialah:
* Pengaturcaraan berstruktur Jackson, yang berdasarkan konsep penggunaan struktur data dalam aturcara
* Pengaturcaraan berstruktur Dijkstra, yang berdasarkan konsep memecahkan atur cara kepada pecahan, di mana setiap pecahan dengan jalan masuk (point of entry) dan jalan keluar. 

Apabila membicarakan tentang pengaturcaraan berstruktur, biasanya konsep pengaturcaraan berstruktur Dijkstra dimaksudkan. Rencana ini menerangkan tentang konsep ini.

Sememangnya tidak mustahil mengamalkan pengaturcaraan berstruktur dalam apa jua bahasa pengaturcaraan bertatacara, walau bagaimanapun sejak 1970-an apabila teknik pengaturcaraan berstruktur mula menarik minat ramai, kebanyakan bahasa pengaturcaraan bertatacara telah memasukkan ciri-ciri untuk menggalakan pengaturcaraaan berstruktur. Sebahagian daripada bahasa pengaturcaraan berstruktur yang terkenal adalah:
* Pascal
* Ada

Apabila pecahan kod adalah kecil, pengaturcaraan berstruktur biasanya menggalakkan struktur aliran atur cara berhirarki yang mudah. Ini boleh didapati dalam kebanyakan bahasa pengaturcaraaan yang moden, dengan hanya menggunakan binaan struktur 'gelung', biasanya dinamakan "while", "repeat", atau "for". Biasanya digalakkan agar setiap gelung mempunyai hanya satu jalan masuk dan satu jalan keluar. Terdapat beberapa bahasa pengaturcaraan yang mengguna konsep ini.

Terdapat pemikiran alternatif terhadap struktur gelung. Donald Knuth menekankan penggunaan carta alir yang boleh dilakarkan dengan kesemua cabang depannya dilukis ke bahagian kiri kod, manakala kesemua cabang depan dilukis ke bahagian kanan, dan tiada cabang yang bertindih sesama sendiri dalam perwakilan (representation) tersebut. Kebanyakan daripada ilmu dalam pengkompil dan teori graf menggunakan lakaran ini, dengan membenarkan hanya carta alir yang boleh dikurangkan.

Penulis kod perlu memecahkan kod yang besar kepada kaedah-kaedah pendek (dipanggil *fungsi*, atau *tatacara* dalam sesetengah bahasa pengaturcaraan) yang cukup kecil agar mudah difahami. Secara amnya, atur cara perlu menggunakan pemboleh ubah global yang terhad; fungsi-fungsi bawahan (subrutin) perlu menggunakan pemboleh ubah setempat (local variable) dan menerima argumen samaada menerusi nilai atau rujukan. Teknik ini membantu agar pecahan kod kecil yang tersisih, lebih mudah difahami, tanpa memahami keseluruhan atur cara sekaligus.

Pengaturcaraan Berstruktur biasanya dikaitkan dengan rekabentuk yang mengguna *pendekatan atas-bawah*. Dengan pendekatan ini, pengaturcara memetakan struktur yang besar dalam atur cara ke bentuk operasi kecil, seterunya melaksanakannya dan menguji operasi-operasi kecil tersebut, dan akhirnya menggabungkan kepada keseluruhan atur cara.

Dalam penghujung abad ke-20, pengatur cara mencipta paradigma baru, berdasarkan pengaturcaraan berstruktur secara longgar. Ia menggunakan konsep pengaturcaraan berstruktur tetapi berupaya pergi lebih jauh dengan menyediakan struktur untuk data, dan juga aliran atur cara. Salah satu contoh adalah pengaturcaraan berorientasi objek, (bagaimanapun terdapat juga variasi pengaturcaraan berorientasi objek yang bukan jenis bertatacara).

Bahasa pengaturcaraan bukan berstruktur menakrif aliran kawalan dengan penggunaan arahan GOTO yang mengalihkan perlaksaan kepada label tertentu di dalam kod. Bahasa pengaturcaraan berstruktur menyediakan konstruktur (seperti "if-then-else", "unless", "while", "until", dan "for") untuk menghasilkan pelbagai variasi gelung, dan perlaksanaan cabang bersyarat. Bahasa Pengaturcaraan Berstruktur juga menyediakan arahan GOTO untuk mengurangkan persarangan(nesting) struktur *if* yang berlebihan, dan bagi menangani situasi tertentu.

Secara tegasnya, dalam bahasa pengaturcaraan berstruktur, apa jua struktur kod hanya perlu satu jalan masuk dan jalan keluar. Namun kebanyakan bahasa berstruktur seperti C membenarkan jalan keluar yang banyak (seperti "continue", "break", dan "return"), keadaan ini boleh memberi merupakan kebaikan, dan juga keburukan dalam membaca atur cara.

## Lihat juga
* Bahasa Pengaturcaraan