Berikut adalah jawaban untuk exercise chapter 10 e-book Software Engineering:
Fendy Chandra – 1601221420 – 44PFT
Fernando Giovanni – 1601221723 – 44PFT
1. The term component is sometimes a difficult one to define. First provide a generic definition, and then provide more explicit definitions for object-oriented and traditional software. Finally, pick three programming languages with which you are familiar and illustrate how each defines a component.
Jawab:
Secara umum, komponen dapat diartikan sebagai suatu blok modular yang berguna dalam membentuk sebuah software computer. Lebih detilnya, OMG Unified Modeling Language Specification mendefinisikan komponen sebagai bagian dari suatu sistem yang bersifat modular, bisa di-deploy, dan bisa di-replace yang mengenkapsulasi implementasi dan mengekspos interface-interface yang ada.
Jika kita menggunakan pendekatan berorientasi objek, sebuah komponen dapat disusun oleh berbagai class yang saling berkolaborasi. Setiap class yang ada pada komponen sudaj dielaborasikan untuk mencakup semua atribut dan operasi yang relevan dalam implementasinya. Sebagai bagian dari elaborasi desain, semua interface yang memungkinkan suatu class berkomunikasi dengan design class lainnya juga harus didefinisikan. Untuk bisa mencapai hal ini, kita sebagai seorang developer perlu memulai dengan requirement model dan mengelaborasi class-class analysis, serta class-class infrastructure.
Sementara itu, jika kita menggunakan pendekatan tradisional, maka suatu komponen dapat diartikan sebagai sebuah elemen fungsional dari sebuah program yang mencakup logika pemrosesan, struktur data internal yang dibutuhkan untuk mengimplementasikan logika pemrosesan, serta sebuah interface yang memungkinkan komponen itu untuk dipanggil dan data dapat dikirimkan kepadanya. Secara tradisional, komponen juga dapat disebut sebagai modul, yang terdiri dari 3 peran utama, yakni control component, problem domain component, dan infrastructure component.
Dari 3 bahasa pemrograman yang pernah saya pelajari (Java, C dan C++), konsep komponen diimplementasikan dalam fungsi-fungsi yang dibuat oleh user, dimana fungsi ini memampukan program untuk membuat program yang dibuat menjadi lebih modular dan juga menjadi salah satu fitur terpenting yang menyusun aplikasi yang dibuat dari ketiga bahasa pemrograman tersebut.
2. Why are control components necessary in traditional software and generally not required n object-oriented software?
Jawab:
Pada pemrograman software tradisional, control components berguna untuk mengkoordinasikan pemanggilan problem domain component yang ada didalam program tersebut. Hal ini diperlukan karena dalam pemrograman tradisional tidak ada konsep enkapsulasi, sehingga berbagai fungsi-fungsi yang secara logis bekerja terhadap struktur data yang sama terpisah-pisah satu sama lainnya, sehingga membentuk apa yang disebut oleh problem domain component (yang dipanggil oleh control component). Control component sangat diperlukan untuk memanggil fungsi-fungsi ini sehingga program dapat melayani permintaan user secara baik dan optimal.
Disisi lain, pemrograman berorientasi objek sudah mempunyai konsep enkapsulasi, sehingga semua struktur data yang berkaitan dan fungsi-fungsi yang bekerja terhadapnya sudah berada pada satu kesatuan, sehingga untuk melakukan pemanggilan terhadap fungsi-fungsi tersebut dapat langsung dilakukan dengan cara-cara biasa, sehingga developer tidak perlu menyediakan control component untuk memanggil fungsi-fungsi tersebut.
3. Descibe the OCP in your own words. Why is it important to create abstractions that serve an interface between components?
Jawab:
Open-Closed Principle (OCP) adalah salah satu prinsip dasar dalam mendesain program pada component-level design yang menganjurkan bahwa sebuah model harus bersifat terbuka (open) untuk perluasan (ekstensi) tetapi tertutup (closed) terhadap modifikasi. Maksudnya, kita harus menspesifikasikan komponen yang akan kita buat sedemikian rupa sehingga kita dapat mengestensifikasinya tanpa harus melakukan modifikasi-modifikasi internal terhadap kode itu sendiri. Ekstensifikasi yang perlu dilakukan sendiri harusnya masih berada pada domain fungsional yang sama dengan rencana awalnya. Untuk itum kita perlu membuat sebuah abstraksi.
Kita perlu membuat sebuah abstraksi sebai interface antar komponen karena kita ingin memenuhi prinsip OCP, dan untuk memudahkan kita dalam memenuhi prinsip ini, kita perlu membuat sebuah abstraksi. Dengan abstraksi, kita dapat mengetahui hubungan antar komponen yang ada, sehingga memudahkan kita mengeksten komponen-komponen yang ada tanpa harus melakukan modifikasi-modifikasi yang mendasar terhadap komponen yang sudah ada.
4. Describe DIP in your own words. What might happen if a designer depends too heavily on concretions?
Jawab:
Dependency Inversion Principle (DIP) adalah salah satu prinsip dasar dalam mendesain program pada component-level design yang menganjurkan bahwa kita sebagai seorang developer perlu untuk melakukan semua kegiatan pemrograman kita berdasarkan abstraksi yang sudah dibuat, tidak berdasarkan konkresi. Jika kita terlalu bergantung kepada konkresi (komponen lain yang sudah ada/konkrit), maka kita akan sulit mengekstensifikasikan program kita, karena kita hanya terpaku pada satu komponen, bukan kepada keseluruhan sistem yang akan kita bangun.
5. Select three components that you have developed recently and assess the types of cohesion that each exhibits. If you had to define the primary benefit of high cohesion, what would it be?
Jawab:
Berhubung saya belum pernah melakukan pemrograman aplikasi yang bersifat konkret (sejauh ini hanya pemrograman untuk pertanyaan-pertanyaan yang ada di lab/kelas), maka saya tidak dapat memberikan contoh pemrograman tersebut. Sebagai gantinya saya akan mencoba menjelaskan mengenai cohesion.
Cohesion dapat diartikan sebagai aspek “single-minded” dari sebuah komponen. Semakin tinggi tingkatan cohesion dalam suatu komponen, artinya setiap aspek penyusun dari komponen ini dapat bekerja bersama-sama untuk mencapai satu tujuan tunggal (tidak bekerja sendiri-sendiri untuk tujuan yang berbeda-beda).
Dengan adanya high cohesion cenderung mudah diimplementasikan, di tes, serta di-maintain karena setiap komponen sudah mempunyai tujuan yang jelas dan kita akan dapat mudah men-debug program jika terjadi error terhadap task tertentu (karena kita sudah tahu pasti komponen mana yang berperan melakukan task tersebut).
6. Select three components that you have developed recently and assess the type of coupling that each exhibits. If you had to define the primary benefit of low coupling, what would it be?
Jawab:
Berhubung saya belum pernah melakukan pemrograman aplikasi yang bersifat konkret (sejauh ini hanya pemrograman untuk pertanyaan-pertanyaan yang ada di lab/kelas), maka saya tidak dapat memberikan contoh pemrograman tersebut. Sebagai gantinya saya akan mencoba menjelaskan mengenai coupling.
Couping adalah suatu ukuran kuantitatif mengenai derajat keterhubungan suatu class dengan class lainnya. Jika suatu class/component semakin terhubung dengan class/component lainnya, maka dapat dikatakan bahwa coupling diantara kedua class/komponen tersebut semakin meningkat. Program yang baik seharusnya memiliki coupling yang rendah.
Salah satu keuntungan dari membuat program dengan low coupling adalah komponen-komponen yang ada didalamnya menjadi semakin independen satu sama lainnya, sehingga jika terjadi error dalam suatu task, kita tidak terlalu repot mengecek beberapa class yang berhubungan dengan task tersebut, melainkan hanya perlu memperhatikan beberapa/hanya satu komponen saja.
7. Is it reasonable to say that problem domain components should never exhibit external coupling? If you agree, what types of component would exhibit external coupling?
Jawab:
External coupling terjadi ketika sebuah komponen berkomunikasi/berkolaborasi dengan komponen infrastruktur. Coupling ini sebaiknya dibatasi pemakaiannya meskipun sebenarnya cukup perlu digunakan.
Menurut saya, untuk beranggapan bahwa sebuah problem domain component tidak boleh melakukan external coupling sama sekali kurang bijaksana, karena adakalanya kita perlu memberikan akses kepada problem domain component untuk bisa mengakses infrastructure component, terutama untuk menjalankan task-task yang bersifat vital. Meski begitu, penggunaan external coupling memang perlu sangat dibatasi karena dapat sangat berpengaruh terhadap reliabilitas software yang kita buat.
8. Develop (1) an elaborated design class, (2) interface description, (3) activity diagram for one of the operation within the class, and (4) a detailed statechart diagram for one of the SafeHome classes that we have discussed in earlier chapters.
Jawab:
To be updated
9. Are stepwise refinement and refactoring the same thing? If not, how do they differ?
Jawab:
Stepwise refinement adalah sebuah strategi desain top-down yang diusulkan oleh Niklaus Wirth, yang berisi usulan bahwa sebuah program dikembangkan dengan cara me-refine level dari procedural detail yang ada secara berkelanjutan (suksesif). Sementara itu, refactoring adalah sebuah teknik reorganisasi yang menyederhanakan kode dari suatu komponen tanpa mengubah fungsi/behaviornya. Jadi, pada dasarnya stepwise refinement dan refactoring sama-sama berperan untuk mempermudah seorang developer dalam mengembangkan program yang sedang dibuatnya, tetapi keduanya memiliki cara pandang yang berbeda dalam mencapainya. Stepwise refinement memungkinkan seorang developer untuk meningkatkan kualitas program yang dibuatnya dengan cara memperbaiki sedikit demi sedikit setiap kali kita selesai meng-update sebuah komponen, sementara refactoring lebih focus untuk melakukan suatu perubahan terhadap sistem software secara lebih mendasar, meskipun sama-sama tidak mengakibatkan perubahan behavior external dari suatu program.
10. What is a WebApp component?
Jawab:
WebApp component adalah bagian dari suatu sistem WebApp yang bersifat modular, bisa di-deploy, dan bisa di-replace yang mengenkapsulasi implementasi dan mengekspos interface-interface yang ada. Adapun WebApp component design berfokus pada 2 hal yang penting yakni content dan fungsionalitas dari suatu Web-based system. Dalam mendesain komponen dari WebApps, kita juga perlu menerapkan prinsip-prinsip dan guideline-guideline dalam component-level design.
11. Select a small portion of an existing program (approximately 50-75 source lines). Isolate the structured programming constructs by drawing boxes around them in the source code. Does the program excerpt have constructs that violate the structured programming philosophy? If so, redesign the code to make it conform to structured programming constructs. If not, what do you notice about the boxes that you have drawn?
Jawab:
To be updated
12. All modern programming languages implement the structured programming constructs. Provide example of three programming languages.
Jawab:
To be updated
13. Select a small coded component and represent it using (1) an activity diagram, (2) a flowchart, (3) a decision table, and (4) PDL.
Jawab:
To be updated
14. Why is “chunking“ important during the component-level design review process?
Jawab:
Chunking adalah sebuah cara dimana seorang developer me-review komponen yang sudah di-desainnya dengan menggunakan sejumlah tertentu konstruksi-konstruksi logis yang juga berperan terhadap proses pemahaman manusia. Pada proses ini, seorang developer tidak membaca kode yang ada secara mentah-mentah (line by line), melainkan memperhatikan pola-pola (chunks of codes) berupa elemen procedural dari suatu modul.
Dengan ditemukannya pola-pola seperti ini, maka pemahaman yang diperoleh oleh developer yang me-review akan meningkat karena dia sudah siap menemui pola-pola logis tersebut. Inilah mengapa chunking menjadi penting dalam melakukan review pada component-level design.
Backlink: