Au départ, la programmation des systèmes réactifs s'est basée sur des implémentation physique. Mais du fait de la complexité croissante des applications, les solutions logicielles se sont développées. En laissant de côté la programmation bas niveau ( en langage assembleur), on peut distinguer deux types d'approches :
Par conséquent, et toujours selon [14], en regard à ses deux approches et à leurs principales propriétés, un utilisateur a le choix soit entre une approche déterministe, soit entre un approche asynchrone permettant le parallélisme.
Cependant, selon nous, il existe une autre approche qui réconcilie la programmation déterministe et la programmation concurrente. Cette approche permet la spécification, la conception et l'implémentation des systèmes réactifs et permet de programmer dans un langage de haut-niveau intégrant le parallélisme, tout en bénéficiant du déterminisme et de bonnes performances à l'exécution, cette approche est l'approche synchrone. C'est cette approche que nous allons aborder dans le paragraphe suivant 4.2, et nous focaliserons notre attention sur le langage ESTEREL qui nous paraît être le bon candidat pour utiliser cette approche synchrone dans notre contexte.