La programmation orientée objet au service du jumeau numérique 👨‍💻

world map on wall and laptop near cup and container

La programmation orientée objet (POO) n’est pas un concept nouveau. Théorisée dans les années 80, elle a vu sa formalisation et son essor dans les années 90. On la retrouve maintenant dans la plupart des langages de programmation d’assez haut niveau.

J’ai pu acquérir et développer une mentalité et des compétences (mindset et skillset) de développeur qui pense objet, en me frottant à différents langages (surtout C++ et python, mais aussi du C# et du JavaScript), dans le cadre de projets très variés d’informatique industrielle pour des systèmes de lecture automatique de plaque minéralogique, de traitement du signal, de système de mesure ferroviaire, de robotique, d’intelligence artificielle, d’application web et de jumeau numérique.

Tout cela me sert au quotidien dans mes missions de CTO pour Altametris.

Car oui, dans nos métiers très technologiques, les objets sont partout et penser objet permet de mieux comprendre et d’appréhender les sujets à traiter (en plus de savoir de quoi je parle quand je vous parle d’azure et de cloud ⬇️).

Mais qu’est ce qu’un objet en premier lieu?

Concrètement, un objet est une structure de données qui répond à un ensemble de messages. Cette structure de données définit son état tandis que l’ensemble des messages qu’il comprend décrit son comportement :

  • les données, ou champs, qui décrivent sa structure interne sont appelées ses attributs ;
  • l’ensemble des messages forme ce que l’on appelle l’interface de l’objet ; c’est seulement au travers de celle-ci que les objets interagissent entre eux. La réponse à la réception d’un message par un objet est appelée une méthode ; elle décrit quelle réponse doit être donnée au message.

Certains attributs et/ou méthodes (ou plus exactement leur représentation informatique) sont cachés : c’est le principe d’encapsulation. Ainsi, l’application peut modifier la structure interne des objets ou leurs méthodes associées sans avoir d’impact sur les utilisateurs de l’objet.

L’autre concept clés dans la POO objet est l’abstraction. Son objectif principal est de gérer la complexité en masquant les détails inutiles à l’utilisateur. Cela permet à l’utilisateur d’implémenter une logique plus complexe sans comprendre ni même penser à toute la complexité cachée.

L’abstraction est bien sûr un concept général que vous pouvez trouver dans le monde réel ainsi que dans la POO. Tous les objets du monde réel, comme votre voiture, ou votre maison, en masquant les détails internes fournissent une abstraction.

Abstraction et encapsulation facilitent beaucoup la gestion de la complexité en la divisant en petites parties. Dans le meilleur des cas, il est possible de les utiliser sans comprendre comment elles fournissent les fonctionnalités. Et cela permet de diviser la complexité d’un applicatif en parties contrôlables, maintenables et interprétables en toute agilité (souvenez vous le monolithe).

Les deux autres concepts fondamentaux de la POO sont le polymorphisme et l’héritage. Ce sont deux notions assez liées car elles permettent de fournir des interfaces uniques pour différents types de données tout en rendant le code réutilisable. Il faut savoir qu’ils existent, mais ce sont surtout des concepts techniques.

Principes des POO

Pour bien faire de la POO, on retrouve des grands principes comme :

  • SOLID. Abréviation de l’anglicisme Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion. Cinq principes qui, lorsqu’ils sont appliqués ensembles, rendront plus portables un programme et plus facile à entretenir à long terme .
  • DRY pour don’t repeat yourself. Éviter la redondance de code au sein d’une application afin de faciliter la maintenance, le test, le débogage et les évolutions. Lorsque le principe DRY est bien appliqué, la modification d’un élément d’un système ne change pas les autres éléments non liés logiquement. De plus, tous les éléments liés logiquement changent uniformément, de manière prévisible et restent synchronisés .
  • KISS pour Keep it simple, stupid. Pas pour dire qu’il ne faille pas réaliser des systèmes complexes, mais que pour y arriver, il faut toujours privilégier la simplicité dans la conception et que toute complexité non indispensable devrait être évitée dans toute la mesure du possible .

Ces principes s’appliquent à bien des domaines différents.

Ce que l’on notera aussi, et cela pourra être développé dans un prochain billet autour du devops, c’est que ces notions sont primordiales lorsque l’on applique des méthodes de gestion de projet de développement agile, comme à travers l’usage du framework scrum.

Au final, quand on doit concevoir, modéliser et surtout réaliser un système de gestion et de valorisation du patrimoine digital, architecturé en microservices, qui sont autant d’objets avec des états (stockage des données) et des interfaces (des API), la meilleure philosophie à adopter est celle de la POO et ses principes fondamentaux, pour peu que vous les maîtrisiez.

Sources

Un pas de plus dans le cloud 😶‍🌫️

view of cityscape

Dans mon billet précédent, je vous parlait de jumeau numérique, de BIM, d’industrie 4.0, de microservices et cloud.

Je l’ai évoqué sur mon compte LinkedIn, mais souvenez vous, le passage au cloud supprime le fardeau de la prise en charge de l’infrastructure informatique. J’ai en récemment fait (de nouveau) l’expérience avec un partenaire 🤦‍♂️.

Alors oui, c’est vrai, le constat que l’on peut faire aujourd’hui, par rapport à la décennie précédente, c’est que l’on ne sait plus réaliser et maintenir une infrastructure performante on-premise. Les technologies évoluent vite, les clients sont toujours plus exigeants et les applications toujours plus nombreuses. Impossible de faire face sans être une énorme structure déjà spécialisée dans l’IT.

Et surtout il faut se dire que le cloud public est un fabuleux accélérateur pour le développement d’applications métier et leur valorisation ! En effet, là ou avant il fallait dépenser des sommes folles en IT, attirer des talents juste pour designer, construire et maintenir une infrastructure qui puisse accueillir des applications, ces questions sont aujourd’hui caduques.

Bien sur il faut toujours des talents et le métier de l’IT existe et existera toujours.

Le TCO…

J’avais évoqué dans mon précédent billet que l’adoption d’un modèle de cloud public permet de se débarrasser de tout CAPEX ou profit de l’OPEX. Mais on peut aller beaucoup plus loin dans l’analyse, notamment en regardant le TCO (Total Cost of Ownership)  qui représente le coût global d’un bien ou d’un service tout au long de son cycle de vie. Cette méthode de calcul prend aussi bien en compte les coûts directs que les coûts indirects.

Microsoft Azure propose un outil dédié pour cela. Il permet d’estimer les coûts de migration de vos données et applications vers Azure et prévoir les économies potentielles en définissant des scénarios de charge de travail « classique » dans un datacenter on premise puis en adaptant un certain nombre d’hypothèses (taux horaire de vos techniciens IT, prix de l’électricité, etc.) vous pouvez vous faire une idée assez précise de ce que peux représenter une migration vers le cloud public ou bien tout simplement vous aider à bien choisir dès le début.

L’outil de calcul de TCO vous offre un certain nombre de graphique permettant de mieux comprendre la répartition des coûts

Evidemment, d’autres indicateurs sont à prendre en compte.

Mais pas que.

Toujours sur LinkedIn, j’offrais un petit exemple de la mise en place d’une service de transformation de données et de ce que cela peut représenter pour Altametris ⬇️(spoiler, il est question de vitesse de delivery, d’élasticité, de scalabilité et bien sur, d’agilité mais aussi de résilience et de taux de disponibilité).

Le SLA

Quand on parle de niveau de disponibilité, on atterrit sur la notion de SLA (service level agreement). Il faut voir cela comme un contrats qui décrit l’engagement du fournisseur de service cloud en matière de temps d’activité et de connectivité. Habituellement et selon le niveau de service, on parle en « nombre de 9 » c’est à dire des taux allant souvent de « two nine » (99%) à « five nine » (99.999%). Le tableau ci-dessous ⬇️ illustre ce que cela peut représente en temps (cumulé) par semaine / mois / an.

niveau de SLADowntime par semaineDowntime par moisDowntime par an
99%1.68 heures7.2 heures3.65 jours
99.9%10.1 minutes43.2 minutes8.76 heures
99.95%5 minutes21.6 minutes4.38 heures
99.99%1.01 minutes4.32 minutes52.56 minutes
99.999%6 secondes25.9 seconds5.26 minutes
La durée d’indisponibilité en fonction du niveau de SLA

Difficile d’imaginer ce genre de niveau de service dans une infrastructure on-premise sans faire exploser les coûts pour permettre d’atteindre cette objectif (plus de matériel, plus de personnel, des horaires décalés, jamais de coupure de courant, des mises à jour express, etc. )

La durabilité des données

Les données du patrimoine digital, numérique sont primordiales et ont une grande valeur pour les gestionnaires d’infrastructures. Il est absolument nécessaire d’en assurer l’intégrité à travers le temps. Les données doivent être stockées de manière redondante, idéalement dans plusieurs installations et sur plusieurs périphériques dans chacune d’elles. Des catastrophes naturelles, une erreur humaine ou des défaillances mécaniques ou électrique ne doivent pas entraîner de perte de données.

Les clouds providers comme Microsoft Azure offrent des services de stockage qui conservent toujours plusieurs copies des données afin qu’elles soient protégées contre des événements planifiés ou non, notamment des défaillances matérielles temporaires, des pannes de réseau ou de courant et des catastrophes naturelles majeures. La redondance garantit que le stockage répond à ces objectifs de disponibilité et de durabilité, même en cas de défaillance.

Les différentes options de redondance (LRS, ZRS, GRS chez Azure, les différents niveaux S3 chez Amazon) offrent une durabilité des données allant d’au moins 99,999999999 % (11 « neuf ») à  99,99999999999999 % (16 « neuf ») sur une année donnée. Mais qu’est ce que ça veut dire ?

Un niveau de durabilité de 11 « neuf » correspond à une perte moyenne annuelle de 0,000000001 % des objets stockés (un objet étant une unité fondamentale du stockage). Par exemple, si vous stockez l’équivalent de 10 000 000 d’objets (qui peuvent correspondre à autant de fichiers que vous voulez selon votre application), vous pouvez vous attendre à perdre en moyenne un objet unique une fois tous les 10 000 ans 😯. Je vous laisse faire le calcul dans le cas de 16 « neuf ».

Vous trouverez ci-dessous les différents schémas de redondance que propose Azure ⬇️.

Duplication locale : au sein du même datacenter, 3 copies
Duplication par zone : 1 copie dans 3 datacenters de la même zone géographique
Geo réplication : 6 copies, trois par datacenter dans deux régions différentes
Variation de la geo réplication avec une duplication par zone et locale, 6 copies, dans 4 datacenters différents dont un dans une autre région.

Il va sans dire que essayer d’arriver à ce niveau de durabilité des données sur une infrastructure on premise n’est pas possible car elle fait littéralement exploser les coûts de stockage quand elle n’est pas tout simplement impossible faute de locaux.

Haut niveau de disponibilité, forte durabilité des données sont autant d’avantages qui permettent de construire des applicatifs robustes pour des besoins métier exigeants, comme la gestion du patrimoine digital des gestionnaires d’infrastructures !

Mais ce n’est pas tout ! Dans un prochain billet, je vous présenterais d’autres avantages du cloud public, notamment sur des sujets de cybersécurité et de sécurisation des applications, avec le concept de contrôle d’accès basé sur les rôles (RBAC) et de défense en profondeur .

A bientôt !

Sources