Bagaimana saya menggabungkan 'Command' dan 'Composite' untuk mensimulasikan penundaan waktu?

9

Sebagai latihan belajar (saya tidak di sekolah - hanya seorang lelaki tua yang mencoba mempelajari sesuatu yang baru), saya mencoba untuk menulis simulasi gerbang logika yang menggabungkan penundaan propagasi. Pengguna juga harus dapat mengelompokkan gerbang bersama untuk membuat objek tingkat yang lebih tinggi.

Saya ingin menerapkan pola desain untuk masalah saya, tetapi saya mengalami kesulitan.

Saya membaca Head First Design Patterns , dan saya melihat bahwa pola Command adalah cara yang baik untuk mensimulasikan pulsa listrik melalui rangkaian dengan penundaan. Saya juga melihat bahwa pola Komposit adalah cara yang baik untuk mensimulasikan unit bersarang. Aku hanya tidak tahu bagaimana mencampur keduanya.

Dengan kata lain, ketika saya melewati gerbang saya, saya melihat bahwa gerbang 'x' akan menyala. Ini memiliki penundaan 15 nanosecond, jadi saya membuat perintah dengan cap waktu 15 ns dari waktu permainan saat ini. Di mana pengirimnya? Dalam contoh restoran, dengan perintah menjadi 'Pesanan', pelayan dan juru masak masing-masing mengirimkan perintah dan memiliki opsi untuk memperkenalkan penundaan. Jika saya memiliki gerbang 'komposit', apakah ia juga memiliki operator sendiri? Apakah saya perlu menggunakan Singleton untuk mengelola antrian?

Saya membaca apa yang bisa saya temukan, tetapi saya masih membutuhkan dorongan ke arah yang benar:

Neil Mussett
sumber
9
Pola adalah alat. Seseorang tidak mengambil palu dan obeng dan berpikir saya akan membangun rumah. Sebaliknya, mulailah membangun rumah dan menyadari di mana palu akan membuat pekerjaan lebih mudah.
Itu tidak persis menjawab pertanyaan saya. Saya sudah memiliki aplikasi Java yang besar, yang mengirimkan pesan dari gerbang ke gerbang. Namun, saya mencoba untuk memasukkan penundaan propagasi dan saya menemukan bahwa desain aplikasi saya tidak dapat dengan mudah mengatasinya. Saya berharap pola desain dapat membantu ...
Neil Mussett
4
Anda mencari simulasi acara diskrit - seperti cron tetapi tanpa waktu 'nyata'. Bangun ini dan kemudian kenali "oh, saya sedang membangun komposit di sini - saya tahu cara melakukannya" daripada pergi dan mencari cara untuk memasukkan komposit ke dalam solusi.
1
Secara khusus, Anda mungkin menemukan Struktur Data yang Efisien untuk Peristiwa Simulasi yang ditetapkan dari Komunikasi ACM Agustus 1977, Volume 20, Nomor 8 cukup berguna (pencarian google untuk judul ini harus menarik pdf - Saya mengalami masalah saat menghubungkan ke it) - ini melalui konsep penerapan struktur data yang secara signifikan ditingkatkan pada daftar yang diindeks.
1
Berikut ini tautan ke kertas ACM yang dihosting di citeseerx.
Frank

Jawaban:

1

Anda mungkin ingin melihat contoh dari Pemrograman di Scala , karena mereka memiliki simulator yang melakukan apa yang Anda coba lakukan di Jawa:

http://www.cs.helsinki.fi/u/wikla/OTS/Sisalto/examples/html/ch30.html#sec6

Dengan melihat pendekatan mereka, Anda dapat menemukan cara mengubah program Anda untuk mendapatkan perilaku yang Anda inginkan.

Anda menyebutkan bahwa Anda tidak dapat menambahkannya dengan mudah, jadi mengapa tidak menjelaskan apa pendekatan Anda, dan apa kesulitan yang Anda temui, sehingga orang dapat memberi Anda beberapa saran yang mungkin tidak Anda pertimbangkan.

Seperti yang disebutkan, pola desain adalah cara untuk berbicara tentang apa yang kode Anda lakukan, sebagai tulisan cepat, tetapi gagasan untuk mencoba memaksakan pola desain sepertinya adalah ide yang buruk.

Pada dasarnya penundaan propagasi seharusnya tidak sulit.

Anda dapat memiliki kelas dasar itu Gate, dan dia menunda.

Semua gerbang meluas dari ini, dan mengatur penundaan yang sebenarnya.

Sekarang, ketika Anda mengikuti sinyal, ketika di gerbang, utas itu mungkin tertunda untuk penundaan simulasi, tetapi ini juga berarti Anda perlu memetakan waktu nyata ke waktu simulasi Anda, karena simulator Anda akan lebih lambat daripada sistem nyata. akan menjadi.

Jika Anda menemukan bahwa Anda memiliki terlalu banyak utas, maka cukup masukkan ke dalam daftar yang disortir, dengan yang berikutnya di atas, dan ketika Anda berhenti, cukup taruh waktu penundaan dilakukan dan pada setiap loop simulator akan memilih yang sudah siap , lakukan tindakan selanjutnya, dan kemudian penundaan berikutnya terjadi.

Ini akan mirip dengan loop game.

James Black
sumber
0

Dengan kata lain, ketika saya melewati gerbang saya, saya melihat bahwa gerbang 'x' akan menyala.

Maka Anda tidak menggunakan pola perintah.

Jika saya memiliki gerbang 'komposit', apakah ia juga memiliki operator sendiri?

Ya tuhan tidak. Seluruh titik dari pola komposit adalah bahwa Anda dapat memasok objek komposit ke lokasi yang hanya mengharapkan satu objek. Ini memungkinkan Anda untuk menyusun perilaku dengan cara yang waras.

Apakah saya perlu menggunakan Singleton untuk mengelola antrian?

Tidak. Apakah Anda hanya memiliki satu juru masak dan satu pelayan di seluruh dunia? Apakah mereka hanya memiliki satu dapur?

Mencampur perintah dan pola komposit cukup mudah. Anda memiliki beberapa antarmuka yang mewakili perintah. Setiap perintah konkret dapat mengesampingkan (atau memenuhinya dalam bahasa non-pewarisan) antarmuka yang menyediakan beberapa perilaku. Penundaan Anda adalah salah satu perilaku sederhana tersebut.

Pola komposit menyediakan dua (atau lebih) objek / perilaku di balik satu antarmuka. Penggunaan paling sederhana untuk contoh ini adalah perintah gabungan yang mengambil dua perintah lain dan kemudian ketika disuruh mengeksekusi, memicu dua perintah yang tersimpan. Dengan cara ini Anda dapat mengambil perintah 'penundaan' Anda yang terisolasi dan perintah lain yang sewenang-wenang untuk membuat perintah yang tertunda.

Telastyn
sumber