do IT differently ( 0.8.0 ) |
« Innovation is this amazing intersection between someone’s imagination and the reality in which they live » (Ron Johnson) |
Comme indiqué sur son logo,
"do:IT"
est un langage de description basé sur la notation JSON pour favoriser sa réutilisation et son introspection par d'autres outils.
Dans cette vocation descriptive, le langage "do:IT" est un langage naturel de description d'algorithme (LDA : Langage de Description d'Algorithme). Prenons les descriptions classiques ci-dessous : Contrairement au LDA, les descriptions en "do:IT" sont exécutables mais ne nécessitent pas de génération de code. En plus, "do:IT" introduit des comportements à chaque flow, ex : trace, monitoring, parallélisme, sécurité, etc. |
En prenant une instruction "curl" : |
On peut brancher des comportements en amont "flw:before" et en aval "flw:after" de l'appel de module : |
Ou poser un contrôle d'erreur "flw:catch" : |
En prenant la section ci-dessous : Puis on la transforme en section parallelisable, sans l'activer, "parallel NONE" : |
En mode "parallel JOIN", on aura : |
En mode "parallel concurrent FIRST", c'est à dire qu'une fois une instruction est aboutie "FIRST",
les autres seront annulés ou interrompues : |
Reprenons le type d'objet 'ACTOR' que nous avons dans la section 'Object-oriented Programming'.
Il dispose de 3 attributs : Et d'une fonction 'sayHello'. |
Exemple - N°1 :
Créons une instance d'object de type 'ACTOR' dans la variable 'iron-man'. Pour appeler la méthode 'sayHello', nous disposons de 3 possibilités : Les 3 possibilités donnent le même résultat : -> Hey 'Tony STARK' ! You have 'J.A.R.V.i.S' ! |
Exemple - N°2 :
En invoquant la nouvelle fonction référencée par l'attribut 'sayHello' de l'object 'iron-man', on a le résultat ci-dessous : -> Hello 'Tony STARK' ( by 'J.A.R.V.i.S' ) ! |
Exemple - N°3 :
Les 3 cas ci-dessous montrent les possibilités d'attachement dynamique d'une fonction à une instance d'objet quelconque : On a successivement les résultats suivants : Case-1 : Call type function using another object instance ( MAP ) -> Hey 'Rivo RASOLOFOMANANA' ! You have 'G.E.R.R.i.X' ! Case-2 : Function object using any object instance ( MAP ) -> Hello 'Rivo RASOLOFOMANANA' ( by 'G.E.R.R.i.X' ) ! Case-3 : Function object using any object instance ( ACTOR ) -> Hello 'Tony STARK' ( by 'J.A.R.V.i.S' ) ! |
Avec les 6 objets présentés (S1, S2, S3, S4, S5 et S6), de formes géométriques différentes, on doit calculer leur espace d'occupation rectangulaire.
Supposons que cet espace rectangulaire de l'ensemble est représenté par S : Pour faire simple, l'approche serait d'évaluer l'espace géométriques rectangulaire occupé par chaque objet (rectangle, cercle ou autre) en évaluant les attributs suivants : Ainsi on pourra évaluer l'espace S, avec le MIN (xTop, yTop) et MAX (xBottom, yBottom). |
Pour les objets rectangulaires, l'évaluation de x, y, width et height est évidente.
On peut garder le type "RECT" : |
Pour les cerles, l'évaluation de x, y, width et height nécessite une évaluation à partir du centre et du rayon (radius).
Dans ce cas, nous allons créer des attributs évalués : |
Soit le Socle qui implémente de manière générique le pattern
et l'Usage ne fait que configurer. |
Soit le Socle qui spécifie et articule le pattern
et l'Usage implémente ses spécificités. |
Element | Type(s) | Description |
FILE:RECEIVE | FLOW | Flow de réception de fichier :
|
File Filter | EVALUATION | Plugin de filtre de sélection de fichier dans le FILE:STORE |
File Validation | EVALUATION | Plugin de validation de fichier |
on Accepted File | FLOW | Plugin d'instruction à exécuter pour chaque fichier validé (cf. FILE:SEQ) |
on Rejected File | FLOW | Plugin d'instruction à exécuter pour chaque fichier rejeté (cf. REJECT:SEQ) |