Jika menyangkut desain OO yang bagus, buatlah tetap sederhana

Seorang mantan murid saya pernah mengatakan pernyataan yang tidak masuk akal, "Saya tidak mungkin melakukan desain berorientasi objek (OO); Saya tidak punya uang!" Menelisik lebih jauh, ternyata dalam benaknya, desain OO membutuhkan sebuah produk bernama Rational Rose yang pada saat itu harganya sekitar 500.00 per kursi. Dalam pikirannya, tanpa Mawar Rasional, desain tidak mungkin. Sayangnya, omong kosong semacam ini tersebar luas; terlalu banyak orang yang menganggap OO adalah proses berteknologi tinggi yang membutuhkan perangkat berteknologi tinggi. Dalam praktiknya, alat dengan harga selangit tidak digunakan di rak (atau sangat jarang digunakan).

Dengan mengingat hal itu, dalam artikel ini saya membahas berbagai alat desain OO, cara kerjanya, dan mengapa menurut saya alat tersebut tidak berguna. Saya juga menjelaskan cara saya bekerja, dan apa yang terbukti berguna (setidaknya bagi saya; Anda boleh tidak setuju).

Alat tidak memandu Anda melalui proses tersebut

Setiap desain OO sukses yang saya hasilkan telah mengikuti proses yang kira-kira sama:

  • Pelajari tentang domain masalah (akuntansi, perencanaan pelajaran, dll.)
  • Kembangkan, dalam konsultasi yang erat dengan pengguna langsung, pernyataan masalah yang menjelaskan masalah pengguna secara mendalam, serta solusi tingkat domain apa pun. Dokumen ini tidak menjelaskan program komputer.
  • Lakukan analisis kasus penggunaan formal , di mana saya menentukan tugas yang diperlukan untuk menyelesaikan masalah pengguna, sekali lagi, bekerja sama dengan pengguna akhir yang sebenarnya. Biasanya saya membuat diagram aktivitas UML (Unified Modeling Language) untuk setiap kasus penggunaan nontrivial. (UML adalah representasi simbolis dari perangkat lunak sebagai gambar.)
  • Mulailah membangun model dinamis yang menunjukkan objek dalam sistem, dan pesan yang dikirim objek tersebut satu sama lain, sementara kasus penggunaan tertentu sedang diperagakan. Saya menggunakan diagram urutan UML untuk tujuan ini.
  • Saya secara bersamaan menangkap informasi yang berguna pada diagram model statis . Catatan: Saya tidak pernah melakukan model statis (diagram kelas) terlebih dahulu. Saya telah membuang terlalu banyak model statis yang ternyata tidak berguna begitu saya mulai membuat model dinamis. Saya tidak lagi mau membuang waktu yang diperlukan untuk melakukan model statis dalam ruang hampa.
  • Langkah-langkah yang disebutkan di atas biasanya menghasilkan dua atau tiga kasus penggunaan, setelah itu saya mulai membuat kode, memperbaiki model jika perlu.
  • Terakhir, saya mengerjakan kasus penggunaan lain seperti yang dijelaskan, memfaktorkan ulang desain dan kode yang diperlukan untuk mengakomodasi kasus baru.

Tidak ada alat desain saat ini yang memandu Anda melalui proses ini. Untuk sebagian besar, mereka adalah program menggambar dengan harga tinggi yang tidak bekerja dengan baik, bahkan sebagai alat menggambar. (Rational Rose, yang saya anggap salah satu yang paling tidak mampu, bahkan tidak mendukung semua UML.)

Rekayasa perjalanan pulang pergi adalah proses yang pada dasarnya cacat

Tidak hanya alat ini tidak bekerja dengan baik, satu-satunya trik yang dilakukan alat ini - menghasilkan kode - tidak ada gunanya. Hampir semua alat desain OO mengikuti gagasan teknik bolak- balik di mana Anda memulai dalam alat desain dengan menentukan desain Anda dalam UML. Anda membuat dua set diagram penting: model statis yang menunjukkan kelas-kelas dalam desain, hubungannya satu sama lain, dan metode yang dikandungnya; dan model dinamis, yang merupakan tumpukan diagram yang menunjukkan objek dalam sistem yang melakukan berbagai tugas pada waktu proses.

Setelah Anda menyelesaikan model, Anda menekan tombol ajaib, dan alat tersebut menghasilkan kode. Namun, kode yang dihasilkan alat tidak terlalu bagus karena dua alasan: Pertama, di banyak alat, kerangka untuk definisi kelas dibuat, tetapi metode ini hanyalah rintisan kosong - model dinamis diabaikan. Kedua, tidak ada alat yang sepenuhnya mendukung UML, terutama karena tidak ada yang bisa. UML adalah bahasa tersendiri, yang mendorong improvisasi, dan sebagian besar konten desain yang sebenarnya diekspresikan dalam komentar yang biasanya diabaikan oleh alat desain.

Akibatnya, Anda meretas kode yang dihasilkan (sebagian besar toko benar-benar meretasnya). Dalam beberapa minggu, kode biasanya memiliki sedikit atau tidak ada hubungannya dengan desain aslinya. Faktanya, Anda secara efektif membuang desain Anda dan jatuh kembali ke sindrom WHISKEY (Mengapa belum ada yang "koding"?). Bertahun-tahun program yang gagal membuktikan kepada saya bahwa pengkodean tanpa desain meningkatkan waktu pengembangan secara keseluruhan setidaknya tiga faktor, dan menghasilkan banyak kode buggier.

Sekarang sampai pada proses pulang-pergi: Anda membuka alat Anda, menekan tombol ajaib, dan mengimpor kode, secara teoritis membangun kembali desain sehingga mencerminkan keadaan kode yang sebenarnya. Namun, rekayasa balik seperti itu tidak berhasil. Alat tersebut biasanya membuat diagram kelas baru, tetapi tidak pernah memperbarui model dinamis. Karena model dinamis adalah pusat dari proses tersebut, desain Anda sekarang tidak berguna kecuali Anda kembali dan memperbaruinya dengan tangan, sesuatu yang jarang dilakukan.

Dengan risiko terulang kembali, proses bolak-balik mendorong pemrogram untuk mengabaikan desain sepenuhnya dan hanya kode, kemudian merekayasa balik kode menjadi gambar sesekali. Dalam situasi ini, bagaimanapun, programmer tidak mendesain; mereka meretas kode, lalu membuat gambar dari kekacauan yang dihasilkan. Peretasan tidak sama dengan desain.

Meskipun desain memang merupakan proses berulang (desain berubah seiring perkembangan kode), Anda harus memulai iterasi dengan memodifikasi desain terlebih dahulu, kemudian memfaktorkan ulang kode untuk mencerminkan desain baru. Untuk melakukan ini, Anda harus dapat menentukan seluruh produk perangkat lunak di dalam alat (saat Anda menekan tombol ajaib, program yang berfungsi penuh akan menjadi keluaran) dan prosesnya akan menjadi satu arah tanpa rekayasa balik. mekanisme.

Alat CASE

Alat CASE (rekayasa perangkat lunak berbantuan komputer) seperti Rational Rose biasanya menempatkan rekayasa bolak-balik sebagai inti produk. Namun, karena teknik bolak-balik tidak berguna, banyak pengembang menggunakan alat tersebut sebagai program menggambar yang mahal. Dari alat yang tersedia, saya pikir ada tiga yang patut dipertimbangkan (meskipun saya tidak menggunakan satupun):

  • Alat ArgoUML sumber terbuka gratis, yang ditulis di Java, melakukan pekerjaan diagram UML yang cukup baik. Versi terbaru bahkan mencoba memandu Anda melalui proses tersebut (dengan kesuksesan marjinal sejauh ini, tetapi ini awal yang baik).
  • GDPro Embarcadero, sebelumnya didistribusikan oleh Advanced Software, menawarkan dukungan yang baik untuk grup yang mengerjakan satu desain software, tetapi juga memiliki kekurangan di departemen ini. Misalnya, seorang desainer tidak dapat memeriksa diagram model dinamis saat mengunci kelas yang terkait dengan objek pada model dinamis secara otomatis.
  • TogetherSoft's Together ControlCenter menghindari masalah perjalanan mundur dengan tidak melakukannya. Kode dan desain muncul di layar secara bersamaan, dan ketika Anda mengubahnya, yang lain berubah secara otomatis. Bersama ControlCenter tidak mendukung kelompok pemrogram dengan baik.
  • Saya juga harus menyebutkan Microsoft Visio secara singkat. Visio adalah program menggambar yang memang mendukung UML, tetapi dukungannya meniru UI Rational Rose yang menyedihkan. Berbagai templat gambar untuk bentuk UML di Visio bekerja lebih baik daripada dukungan UML bawaan, termasuk satu di bagian "Pernak-pernik" di Situs Web saya.

Jadi, jika menurut saya alat ini sangat buruk, apa yang harus saya gunakan? Sejauh ini, alat desain OO yang paling produktif adalah papan tulis (ruangan dengan papan tulis dari dinding ke dinding, dari lantai ke langit-langit sangat ideal) dan bantalan Post-it seukuran flip-chart, lembaran yang dapat Anda lepas dan lepas. menempel di dinding. Saya telah menggunakan ini untuk merancang proyek penting dengan kesuksesan besar. Selain itu, mengerjakan papan tulis menghabiskan lebih sedikit waktu daripada bergulat dengan alat KASUS OO.

Satu-satunya kesulitan dengan pendekatan papan tulis adalah menangkap informasi di papan tulis. Papan tulis yang dicetak memang ada, tetapi harganya mahal, tidak rapi, dan terlalu kecil. Satu produk perangkat keras rapi yang melacak pergerakan pena melintasi papan tulis dan menangkap goresan pena di komputer. Papan tulis lain berfungsi seperti tablet digitizer raksasa. Namun, solusi ini terbukti terlalu membatasi; Desain berlangsung serentak di papan tulis di beberapa kantor, di atas serbet, di sobekan kertas, dan sebagainya. Anda tidak dapat membawa papan tulis cetak seberat 300 pon ke kafe setempat.

Jadi apa yang berhasil

Jadi apa yang harus dilakukan seorang ibu? Bagaimana Anda menangkap artefak ini untuk mengarsipkannya di dalam komputer sehingga mereka akan membuat dokumentasi yang wajar sebagaimana aslinya, tanpa harus mentransfernya ke program menggambar?

Solusinya:

  1. Kamera digital
  2. Produk perangkat lunak luar biasa yang disebut Foto Papan Tulis dari Pixid

Sayangnya, foto digital sering kali menghasilkan gambar yang tidak memuaskan untuk dokumentasi. Untuk mengimbanginya, Foto Papan Tulis mengubah gambar digital menjadi sesuatu yang berguna. Gambar benar-benar bernilai ribuan kata, di sini. Gambar 1 menunjukkan foto digital khas papan tulis.

Gambar 2 mengilustrasikan contoh lain.

Gambar 3 menunjukkan bagaimana Whiteboard Photo mengubah Gambar 1.

Dan inilah tampilan Gambar 2 setelah Whiteboard Photo melakukan keajaibannya.

Seperti yang ditunjukkan gambar, perbedaannya luar biasa. Untuk mengubah gambar asli menjadi versi yang dibersihkan, saya cukup menekan Ctrl-L. Perangkat lunak secara otomatis menemukan batas papan tulis, mengoreksi distorsi yang disebabkan oleh pengambilan gambar dari suatu sudut (diperlukan untuk menghindari silau dari flash), memilih garis desain, dan menggambarnya. Semua produk yang dibutuhkan untuk mencapai kesempurnaan adalah pengenalan tulisan tangan, tapi saya tergelitik merah jambu dengan apa adanya. Sekarang saya dapat menghasilkan gambar berkualitas dokumentasi langsung dari papan tulis asli, tanpa membuang waktu berjam-jam memasukkan gambar tersebut ke dalam alasan yang tidak tepat untuk alat CASE.

Jaga agar tetap sederhana

Menurut pengalaman saya, saat berhubungan dengan desain OO, alat berteknologi rendah bekerja paling baik. Memang, mereka lebih cepat, lebih mudah digunakan, dan bekerja dengan baik di lingkungan kolaboratif. Sejauh ini, saya telah menemukan bahwa kombinasi papan tulis, kamera digital, dan Foto Papan Tulis menawarkan metode terbaik untuk memasukkan desain program ke dalam mesin.

Allen Holub menyediakan layanan konsultasi, pelatihan, dan pendampingan dalam desain OO, proses OO, dan pemrograman Java. Dia secara teratur menyajikan lokakarya desain OO intensif bagi mereka yang tertarik untuk mengembangkan keterampilan OO mereka dengan cepat. (Temukan informasi lebih lanjut di //www.holub.com.) Allen telah bekerja di industri komputer sejak 1979, terakhir sebagai chief technology officer di NetReliance, Inc. Dia dipublikasikan secara luas di majalah (Dr.Dobb's Journal, Programmers Journal, Byte, dan MSJ, antara lain). Allen memiliki delapan buku untuk kreditnya, yang terbaru - Taming Java Threads (APpress, 2000; ISBN: 1893115100) - mencakup perangkap dan perangkap penguliran Java. Dia mengajar desain OO dan Java untuk University of California, Berkeley Extension (sejak 1982).

Pelajari lebih lanjut tentang topik ini

  • Untuk alat desain ArgoUML open source gratis, buka

    //argouml.tigris.org/

  • GDPro Embarcadero dapat ditemukan di

    //www.embarcadero.com

  • Anda akan menemukan informasi lebih lanjut tentang TogetherSoft's Together ControlCenter di

    //www.togethersoft.com

  • Beranda Microsoft Visio

    //www.microsoft.com/office/visio/default.htm

  • Pergi ke halaman produk Pixid Whiteboard Photo untuk informasi lebih lanjut tentang alat yang menarik ini

    //www.pixid.com/home.html

  • Situs web Allen Holub menampilkan halaman "Goodies", di mana Anda akan menemukan tip desain OO, aturan praktis pemrograman, dan catatan dari beberapa pembicaraan Allen

    //www.holub.com/goodies/goodies.html

  • JavaWorld 's Object-Oriented Design and Programming Index menampilkan banyak artikel yang membahas desain

    //www.javaworld.com/channel_content/jw-oop-index.shtml

  • Anda akan menemukan ulasan produk yang lebih besar di JavaWorld 's Product Ulasan Index

    //www.javaworld.com/news-reviews/jw-nr-product-reviews.shtml

  • Baca lebih lanjut komentar di JavaWorld 's Indeks Commentary

    //www.javaworld.com/news-reviews/jw-nr-commentary.shtml

  • Untuk tip dan tutorial yang mencakup pola desain, alat pengembangan, penyesuaian kinerja, keamanan, pengujian, dan lainnya, daftar ke buletin Java Terapan kami

    //www.javaworld.com/subscribe

  • Bicaralah dalam diskusi Teori & Praktik Pemrograman kami

    //forums.idg.net/[email protected]@.ee6b806

  • Anda akan menemukan banyak artikel terkait TI dari publikasi saudara kita di .net

Artikel ini, "Jika berhubungan dengan desain OO yang bagus, buatlah tetap sederhana" awalnya diterbitkan oleh JavaWorld.