En tant qu'exercice d'apprentissage (je ne suis pas à l'école - juste un vieil homme essayant d'apprendre quelque chose de nouveau), j'essaie d'écrire une simulation de porte logique qui incorpore le retard de propagation. L'utilisateur doit également pouvoir regrouper les portes pour créer des objets de niveau supérieur.
Je veux appliquer des modèles de conception à mon problème, mais j'ai du mal.
Je lis les modèles de conception Head First et je vois que le modèle de commande est un bon moyen de simuler des impulsions électriques à travers un circuit avec un retard. Je vois également que le motif composite est un bon moyen de simuler des unités imbriquées. Je ne sais juste pas comment mélanger les deux.
En d'autres termes, en parcourant mes portes, je vois que la porte «x» devrait se déclencher. Il a un retard de 15 nanosecondes, donc je crée une commande avec un horodatage de 15 ns à partir du temps de jeu actuel. Où est le répartiteur? Dans l'exemple du dîner, la commande étant l '«Ordre», la serveuse et le cuisinier envoient chacun la commande et ont la possibilité d'introduire un délai. Si j'ai une porte «composite», a-t-elle aussi son propre répartiteur? Dois-je utiliser un Singleton pour gérer la file d'attente?
J'ai lu ce que j'ai pu trouver, mais j'ai encore besoin d'un coup de pouce dans la bonne direction:
la source
Réponses:
Vous voudrez peut-être regarder un exemple de programmation dans Scala , car ils ont un simulateur qui fait ce que vous essayez de faire en Java:
http://www.cs.helsinki.fi/u/wikla/OTS/Sisalto/examples/html/ch30.html#sec6
En examinant leur approche, vous découvrirez peut-être comment modifier votre programme pour obtenir le comportement souhaité.
Vous avez mentionné que vous ne pouvez pas l'ajouter facilement, alors pourquoi ne pas expliquer quelle est votre approche et quelle est la difficulté que vous rencontrez, afin que les gens puissent vous faire des suggestions que vous n'avez peut-être pas envisagées.
Comme mentionné, les modèles de conception sont des moyens de parler de ce que fait votre code, en abrégé, mais l'idée d'essayer de forcer les modèles de conception semble simplement être une mauvaise idée.
Fondamentalement, un retard de propagation ne devrait pas être difficile.
Vous pouvez avoir une classe de base qui est
Gate
, et en elle mettre un délai.Toutes les portes s'étendent à partir de cela et définissent le retard réel.
Maintenant, lorsque vous suivez un signal, dans une porte, ce thread peut dormir pendant le délai simulé, mais cela signifie également que vous devez mapper le temps réel à votre temps simulé, car votre simulateur sera plus lent qu'un vrai système serait.
Si vous trouvez que vous avez trop de threads, alors mettez-les simplement dans une liste triée, par la suivante en haut, et lorsque vous vous arrêtez, mettez simplement le temps de retard et sur chaque boucle, le simulateur choisira ceux qui sont maintenant prêts , effectuez l'action suivante, puis le délai suivant se produit.
Ce serait similaire à une boucle de jeu.
la source
Ensuite, vous n'utilisez pas le modèle de commande.
Cher dieu non. L'intérêt du motif composite est que vous pouvez fournir un objet composite à un emplacement qui n'attend qu'un seul objet. Cela vous permet de composer le comportement d'une manière saine.
Sûrement pas. Vous n'avez qu'un seul cuisinier et une seule serveuse dans le monde entier? N'ont-ils qu'une seule cuisine?
Le mélange de la commande et du motif composite est assez simple. Vous avez une interface qui représente une commande. Chaque commande concrète peut remplacer (ou autrement la satisfaire dans des langages sans héritage) cette interface pour fournir un certain comportement. Votre retard est un de ces comportements simples.
Le modèle composite fournit deux (ou plus) objets / comportements derrière une seule interface. L'utilisation la plus simple pour cet exemple serait une commande composite qui prend deux autres commandes, puis lorsqu'elle est invitée à s'exécuter, déclenche les deux commandes stockées. De cette façon, vous pouvez prendre votre commande «delay» isolée et toute autre commande arbitraire pour créer une commande retardée.
la source