Ce tome a ouvert le moteur pièce par pièce. Voici la chaîne entière, dans un seul programme : les constantes d'un poste de survie, une fonction de contrôle, une boucle de surveillance, une décision, un bloc d'essai et la transmission des mesures au visualiseur.
t09c11-a.cake?! --- constantes du poste de survie P-3 ---
=: o2Initial=21.0%
=: consommation=0.9%
=: seuilO2=17.0%
?! --- controle ---
<@: etat(o2 %double) %string {
=$ (o2<seuilO2) {
return "ALERTE"%
}
return "NOMINAL"%
} %
?! --- surveillance sur dix cycles ---
=: o2=o2Initial%
$$ (cycle=0; cycle<10; cycle++) {
Cake.emit(cycle, o2, 0, cycle)%
=$ (etat(o2)=="ALERTE") {
|> "Cycle " + Cake.toString(cycle) + " : O2 " + Cake.format("{0:F1}", o2) + " %, activation de la reserve"%
$!%
}
:+ o2=0-consommation%
}
?! --- journal ---
!{
Cake.writeFile("p3.log", "sequence terminee")%
!} (e) {
|> "Journal refuse par le bac a sable, conserve en memoire"%
}
Cycle 5 : O2 16.5 %, activation de la reserve Journal refuse par le bac a sable, conserve en memoire [6 point(s) transmis au visualiseur par Cake.emit]
<projet nom="t09c11-a" package="com.unibool.script" type="Library">
<classe nom="Root" visibilite="Public">
<methode nom="main" retour="void" visibilite="Public">
<bloc>
<declaration nom="o2Initial" type="var" valeur="21.0"/>
<declaration nom="consommation" type="var" valeur="0.9"/>
<declaration nom="seuilO2" type="var" valeur="17.0"/>
<declaration nom="o2" type="var" valeur="o2Initial"/>
<pour init="cycle=0" condition="cycle<10" increment="cycle++">
<bloc>
<code-brut><![CDATA[Cake.emit(cycle,o2,0,cycle)%]]></code-brut>
<si condition="etat(o2)=="ALERTE"">
<alors>
<bloc>
<appel methode="println" args=""Cycle " + Cake.toString(cycle) + " : O2 " + Cake.format("{0:F1}", o2) + " %, activation de la reserve""/>
<code-brut><![CDATA[break]]></code-brut>
</bloc>
</alors>
</si>
<affectation cible="o2" valeur="o2 + 0 - consommation"/>
</bloc>
</pour>
<essai>
<corps>
<bloc>
<code-brut><![CDATA[Cake.writeFile("p3.log", "sequence terminee")%]]></code-brut>
</bloc>
</corps>
<attraper exception="Exception" variable="e">
<bloc>
<appel methode="println" args=""Journal refuse par le bac a sable, conserve en memoire""/>
</bloc>
</attraper>
</essai>
</bloc>
</methode>
<methode nom="etat" retour="string" visibilite="Public">
<parametre nom="o2" type="double"/>
<bloc>
<si condition="o2<seuilO2">
<alors>
<bloc>
<code-brut><![CDATA[return"ALERTE"%]]></code-brut>
</bloc>
</alors>
</si>
<retour-stmt valeur=""NOMINAL""/>
</bloc>
</methode>
</classe>
</projet=: déclarations · =$ flux · $$ flux · |> entrées/sorties · $! flux · :+ déclarations · !{ erreurs · !} erreurs · bibliothèque : Cake.emit, Cake.toString, Cake.format, Cake.writeFile25855bda8ea75ff2 (reproductible : cake hash t09c11-a.cake)L'ingénierie pratique CAKE© tient en une exigence : ce qui est écrit doit avoir été exécuté, et ce qui a été exécuté doit pouvoir être retrouvé.
Le tome 10 examine la sécurité et l'intégrité des architectures, en s'appuyant sur les mécanismes réels décrits ici.