Zaman gecikmesini simüle etmek için 'Komut' ve 'Kompozit' i nasıl birleştiririm?


9

Bir öğrenme egzersizi olarak (okulda değilim - sadece yeni bir şey öğrenmeye çalışan yaşlı bir adam), yayılma gecikmesini içeren bir mantık kapısı simülasyonu yazmaya çalışıyorum. Kullanıcı ayrıca üst düzey nesneler oluşturmak için kapıları birlikte gruplayabilmelidir.

Sorunuma tasarım kalıpları uygulamak istiyorum, ama zor anlar yaşıyorum.

Önce Baş Tasarım Desenlerini okuyorum ve Komut paterninin gecikmeli bir devreden elektriksel darbeleri simüle etmenin iyi bir yolu olduğunu görüyorum. Ayrıca, Kompozit desenin iç içe birimleri simüle etmek için iyi bir yol olduğunu görüyorum. İkisini nasıl karıştıracağımı bilmiyorum.

Başka bir deyişle, kapılarım arasında dolaşırken, 'x' kapısının ateş etmesi gerektiğini görüyorum. 15 nanosaniye gecikmesi var, bu yüzden geçerli oyun zamanından 15 ns zaman damgası ile bir komut oluşturuyorum. Sevk görevlisi nerede? Lokanta örneğinde, komut 'Sipariş' olmakla birlikte, garson ve aşçı her biri komutu gönderir ve gecikme yapma seçeneğine sahiptir. 'Kompozit' bir kapım varsa kendi dağıtım programına da sahip mi? Kuyruğu yönetmek için bir Singleton kullanmam gerekir mi?

Ne bulabileceğimi okudum, ama yine de doğru yönde bir itmeye ihtiyacım var:


9
Desenler araçlardır. Bir çekiç ve tornavida almaz ve bir ev inşa edeceğimi düşünmez. Bunun yerine, bir ev inşa etmeye başlayın ve bir çekiçin işi daha kolay hale getireceğini anlayın.

Soruma tam olarak cevap vermiyor. Mesajları kapıdan kapıya geçiren büyük bir Java uygulamam var. Ancak, yayılma gecikmesini dahil etmeye çalışıyorum ve uygulama tasarımımın kolayca başaramadığını görüyorum. Tasarım modellerinin yardımcı olabileceğini umuyordum ...
Neil Mussett

4
Cron gibi, ancak 'gerçek' zaman olmadan , ayrı olay simülasyonu arıyorsunuz . Bunu derleyin ve sonra bir kompoziti çözüme sokmanın bir yolunu aramak yerine "ah, ben burada bir kompozit yapıyorum - bunu nasıl yapacağımı biliyorum" tanıyorum.

1
Özellikle, ACM Ağustos 1977, Cilt 20, Sayı 8'in İletişiminden Simülasyon Olay Seti için Verimli Bir Veri Yapısı oldukça yararlı bulabilirsiniz (bu başlık için bir google araması bir pdf çekmelidir - bağlantı vermekte sorun yaşıyorum it) - dizinlenmiş bir liste üzerinde önemli ölçüde geliştirilmiş veri yapısının uygulanması kavramından geçer.

1
İşte citeseerx'te barındırılan ACM kağıdına bir bağlantı.
Frank

Yanıtlar:


1

Java'da yapmaya çalıştığınız şeyi yapan bir simülatöre sahip oldukları için Scala'da Programlama'dan bir örneğe bakmak isteyebilirsiniz :

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

Yaklaşımlarına bakarak, istediğiniz davranışı elde etmek için programınızı nasıl değiştireceğinizi bulabilirsiniz.

Kolayca ekleyemeyeceğinizden bahsettiniz, bu yüzden neden yaklaşımınızın ne olduğunu ve karşılaştığınız zorluğun ne olduğunu açıklamıyorsunuz, böylece insanlar size düşünmediğiniz bazı öneriler verebilir.

Daha önce de belirtildiği gibi, tasarım kalıpları bir kısayol olarak kodunuzun ne yaptığından bahsetmenin yollarıdır, ancak tasarım kalıplarını zorlamaya çalışmak fikri kötü bir fikir gibi görünmektedir.

Temel olarak bir yayılma gecikmesi zor olmamalıdır.

Temel bir sınıfınız olabilir Gateve ona geciktirebilirsiniz.

Tüm kapılar bundan uzar ve gerçek gecikmeyi ayarlar.

Şimdi, bir sinyali takip ederken, bir kapıdayken, bu iplik simüle edilen gecikme için uyuyabilir, ancak bu aynı zamanda simülatörünüz gerçek bir sistemden daha yavaş olacağı için gerçek zamanı simüle edilen zamanınıza eşlemeniz gerektiği anlamına gelir. olabilir.

Çok fazla iş parçacığına sahip olduğunuzu fark ederseniz, sıralı bir listeye koyun, bir sonraki üste geçin ve duraklattığınızda, gecikmenin bittiği zamanı koyun ve her döngüde simülatör şimdi hazır olanları seçecektir , sonraki eylemi yapın ve sonraki gecikme gerçekleşir.

Bu bir oyun döngüsüne benzer.


0

Başka bir deyişle, kapılarım arasında dolaşırken, 'x' kapısının ateş etmesi gerektiğini görüyorum.

O zaman komut desenini kullanmıyorsunuz.

'Kompozit' bir kapım varsa kendi dağıtım programına da sahip mi?

Sevgili tanrım hayır. Bileşik desenin tüm noktası, yalnızca bir nesne bekleyen bir konuma bileşik bir nesne sağlayabilmenizdir. Bu, davranışı akılcı bir şekilde oluşturmanıza izin verir.

Kuyruğu yönetmek için bir Singleton kullanmam gerekir mi?

Asla. Tüm dünyada sadece bir aşçı ve bir garson var mı? Sadece bir mutfağı var mı?

Komut ve kompozit kalıbı karıştırmak oldukça basittir. Bir komutu temsil eden bazı arayüzünüz var. Her somut komut, bazı davranışlar sağlamak için arabirimi geçersiz kılabilir (veya kalıtım dışı dillerde başka şekilde tatmin edebilir). Gecikmeniz böyle basit bir davranıştır.

Bileşik desen, tek bir arabirimin arkasında iki (veya daha fazla) nesne / davranış sağlar. Bu örnek için en basit kullanım, diğer iki komutu alan bir bileşik komut olacaktır ve daha sonra çalıştırılması söylendiğinde, depolanan iki komutu tetikler. Bu şekilde, gecikmiş bir komut oluşturmak için yalıtılmış 'gecikme' komutunuzu ve diğer rastgele komutlarınızı alabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.