„Rendszermodellezés” változatai közötti eltérés
→A szorgalmi időszakban: ZH pontszámok |
→Házi feladat: Tiltott elemk frissítve |
||
| 94. sor: | 94. sor: | ||
*Egy sakkórát utánozó programot kell elkészíteni, mindenkinek különböző tulajdonságokkal. A házi feladat kiírása, és technikai segédlet elérhető a [https://inf.mit.bme.hu/edu/courses/remo/hazifeladat tárgyhonlapon]. | *Egy sakkórát utánozó programot kell elkészíteni, mindenkinek különböző tulajdonságokkal. A házi feladat kiírása, és technikai segédlet elérhető a [https://inf.mit.bme.hu/edu/courses/remo/hazifeladat tárgyhonlapon]. | ||
*Leggyakoribb hiba: olyan állapotátmenet használata, amik nem is valódiak, mert az átmenet nem egy esemény bekövetkezésekor történik meg. *Lehetséges, hogy amire mi gondolunk, az egy esemény, de modellezési szempontból másként kell értelmezni ezt a fogalmat. | *Leggyakoribb hiba: olyan állapotátmenet használata, amik nem is valódiak, mert az átmenet nem egy esemény bekövetkezésekor történik meg. *Lehetséges, hogy amire mi gondolunk, az egy esemény, de modellezési szempontból másként kell értelmezni ezt a fogalmat. 5 ilyen elem van tiltva: | ||
**<code>always</code> | **<code>always</code> | ||
**<code>oncycle</code> | **<code>oncycle</code> | ||
**Olyan nyíl (állapotátmenet), amire nincs semmi írva (nincs őrfeltétel, mindig lefut). | **Olyan nyíl (állapotátmenet), amire nincs semmi írva (nincs őrfeltétel, mindig lefut). | ||
*Ha a modelledben ezeket használod, az oldal nem fogja elfogadni a házidat. | **<code>after 0s</code> / <code>after 0ms</code> / <code>every 0s</code> stb. A modell szempontjából ezek is feltétel nélküli átmenetek. | ||
**'''[trigger && feltétel]''' kiváltó esemény, ezeket egy [trigger]-re és egy choice-ra kell szétbontani. | |||
*Ha a modelledben ezeket használod, az oldal nem fogja elfogadni a házidat. A hiba megoldása: | |||
[[File:Remo_modelltipusok_20160720.png|thumb|Szekvenciális programozásra hasonlító (balra), és helyes állapotalapú (jobbra) modellek]] | [[File:Remo_modelltipusok_20160720.png|thumb|Szekvenciális programozásra hasonlító (balra), és helyes állapotalapú (jobbra) modellek]] | ||
*Meg kell érteni az állapotalapú modellezés alapját. Sokan úgy próbálják felépíteni a modellt, mint egy C nyelvben írt programot, ahol egymás után hajtódnak végre a feladatok, és az állapot egy művelet végrehajtásának felel meg. Ez hibás gondolkozás, mert állapotmodellezésre van szükség, és nem folyamatmodellezésre! Eseményvezérelt felépítés kell. A kép oldalt illusztrálja a kettő közötti különbséget. A hagyományos programozási módszer használatával keletkezik egy olyan állapotátmenet, aminek nincs kiváltó eseménye. Az állapotalapú modellezésnél ilyet ne csináljunk, mert a ChangeSettings nem egy olyan állapot, ami tartósan jellemezné a modellünket, hiszem a <code>whiteMoves = true</code> művelet elvégzése után azonnal bekövetkezik egy újabb állapotváltás, így a ChangeSettings csak egy pillanatig, és nem egy valamekkora időegységig jellemezte a modellt. Ha viszont a műveleteket nem az állapot belsejébe írjuk, hanem egy hurokélre, akkor valójában nem történik állapotváltás (ugyan oda térünk vissza), a művelet mégis végrehajtódik! Többnyire igaz, hogy úgy kell megtervezni a modellt, hogy az élekre kerülnek a változók módosításai, az állapotokra pedig az, ami megjelenik a képernyőn, lásd a képet. Ez természetesen nem mindig van így, de ha eszerint próbálod meg megtervezni a modelled felépítését, kiküszöbölheted az üres élek problémáját. | *Meg kell érteni az állapotalapú modellezés alapját. Sokan úgy próbálják felépíteni a modellt, mint egy C nyelvben írt programot, ahol egymás után hajtódnak végre a feladatok, és az állapot egy művelet végrehajtásának felel meg. Ez hibás gondolkozás, mert állapotmodellezésre van szükség, és nem folyamatmodellezésre! Eseményvezérelt felépítés kell. A kép oldalt illusztrálja a kettő közötti különbséget. A hagyományos programozási módszer használatával keletkezik egy olyan állapotátmenet, aminek nincs kiváltó eseménye. Az állapotalapú modellezésnél ilyet ne csináljunk, mert a ChangeSettings nem egy olyan állapot, ami tartósan jellemezné a modellünket, hiszem a <code>whiteMoves = true</code> művelet elvégzése után azonnal bekövetkezik egy újabb állapotváltás, így a ChangeSettings csak egy pillanatig, és nem egy valamekkora időegységig jellemezte a modellt. Ha viszont a műveleteket nem az állapot belsejébe írjuk, hanem egy hurokélre, akkor valójában nem történik állapotváltás (ugyan oda térünk vissza), a művelet mégis végrehajtódik! Többnyire igaz, hogy úgy kell megtervezni a modellt, hogy az élekre kerülnek a változók módosításai, az állapotokra pedig az, ami megjelenik a képernyőn, lásd a képet. Ez természetesen nem mindig van így, de ha eszerint próbálod meg megtervezni a modelled felépítését, kiküszöbölheted az üres élek problémáját. | ||
*''Ha továbbra sem műküdik a programod, és nem érted, hogy mi a gond, látogasd meg a [http://q2a.inf.mit.bme.hu/rendszermodellez%C3%A9s Házi feladat fórum] oldalát, hátha már akadt másnak is hasonló problémája.'' | *''Ha továbbra sem műküdik a programod, és nem érted, hogy mi a gond, látogasd meg a [http://q2a.inf.mit.bme.hu/rendszermodellez%C3%A9s Házi feladat fórum] oldalát, hátha már akadt másnak is hasonló problémája.'' | ||