ITInnovDesign
Latest Posts:

Qu'est Ce Qu'un Logiciel(Software)
Qu'est Ce Qu'un Logiciel(Software)

Qu’est ce qu’un logiciel ?

Ceci est un extrait de l’un de mes livres en preparation pour l’approche au developement des logiciels dans les ecoles primaires et le premier cycle du secondaire car en tant que ingenieur informaticien amoureux du developpement des logiciels, je reste convaincu qu’il faut s’y mettre dès le bas age si jamais on veut inculper la chose informatique dans le DNA des tout petits (comme il est d’ailleur le cas pour l’apprentissage des langues naturelles), ces manuels seront également destinés aux enseignants des écoles primaires et du premier cycle des lycées et collèges. L’extrait fait partir d’un des manuels du premier cycle du secondaire (6ème jusqu’en 3ème)

Au fait qu’est ce qu’un logiciel?

Un ordinateur est une boite pleine de circuit électronique qui au fait ne servirait absolument à rien sans l’esistence d’un logiciel ou de plusieurs logiciels, un programme informatique ou logiciel est une suite d’instruction que l’ordinateur peut executer et c’est le devoir d’un developpeur informatique d’écrire ces programmes en utilisant des languages de programmation.

la plupart des applications présentes dans notre ordinateur comme par exemple un navigateur web, le logiciel de traitement de données comme microsoft word ou un client de messagerie comme Microsoft outlook ne peuvent en aucun cas communiquer directement avec le systeme materiel (hardware) donc est fait notre ordinateur, elles ont besoin d’une autre application dediée à cette tache qui les permet de le faire, cette application s’appelle “le systeme d’exploitation ( en abregé OS qui veut dire operating systhem en anglais)”. Windows et Linux sont deux exemples de systeme d’exploitation que l’on rencontre couramment. Le but principal d’un OS est de s’occuper au quotidien de la communication entre les applications présentes dans notre ordinateurs et ses differents peripheries comme par exemple le processeur (CPU), la mémoire, le disque dure, les imprimantes etc.. pour reuissir dans cette mission, l’OS a besoin d’un type de programme specifique chargé uniquement pour communiquer avec une peripherie particulière, ce programme s’appelle “device drivers (driver materiel)

le shema simplifié de l’architecture d’un ordinateur peut etre résumé comme dans l’image suivante:

En règle génerale, les developpeurs s’occupent de la conception des applications(logiciels), du system d’exploitation(OS) ainsi que les drivers mais la catégorie la plus en vu chez les developpeurs sont les applications. Les programmes que nous developpeurs écrivons communiqueront avec le kernel du system d’exploitation qui est en fait le coeur de l’OS. Le system d’exploitation s’occupera de la communication directe avec la peripherie correspondante, la chose la plus importante en tant que developpeur c’est que nous pourront communiquer avec toutes ses peripherie sans connaitre leur fonctionnement interne par exemple sans savoir le type de souris que l’utilisateur detient ou bien sans connaitre comment on envois une chaine de caractere à l’imprimante etc.. dans ces cas le system d’exploitation utilisera le driver de la souris ou de l’imprimante pour communiquer avec ces peripheries et envoyer des comamndes que nous imposons à partir de notre application.

si nous voulons ecrire par exemple une application qui imprime sur l’écrean de notre ordinateur la phrase “Apprendre à programmer c’est merveilleux”, on a plus ou moins la sequence suivante:

le texte ne va pas apparaitre magiquement à l’écran, il va suivre un chemin qu’il vaut la peine de le savoir et connaitre si on veut devenir un bon developpeur. Pour la petite histoire en 1945, un mathematicien americain John Von Neumann, à creer un document de 101 page qui decrit l’architecture d’un ordinateur et son mode de fonctionnement qui definit 4 composantes nécessaires pour l’architecture d’un ordinateur:

  1. Une unité de traitement composée d’une unité arithmetique et logique et des registres utilisés par l’unité de traitement.
  2. Une unité de contrôle qui contient un registre d’instruction et un compteur de programme. Ceux-ci sont utilisés pour exécuter des programmes.
  3. Une mémoire qui stocke des données et des instructions. Cette mémoire est volatile, ce qui signifie que son contenu sera effacé lors de la mise hors tension ou du redémarrage de l’ordinateur (la mémoire RAM).
  4. Un Stockage de masse externe. Il s’agit d’un stockage de longue durée pour les programmes et les données qui peut également être conservé après le redémarrage d’un ordinateur(le disque dure)
  5. Des Mécanismes d’entrée et de sortie. Aujourd’hui, il s’agit généralement d’un clavier, d’une souris et d’un moniteur.

Tous ces concepts exceptés le stockage de masse externe entrent en jeux pour l’affichage du texte dans l’exemple ci dessus.

Au fait, l’ordinateur ne peut comprendre qu’une et une seule chose, à savoir le code machine. Le code machine est un ensemble de valeurs numériques que l’ordinateur interprète comme des instructions différentes. L’ordinateur ne fonctionne qu’avec des nombres sous forme binaire, également appelée base 2, et c’est pourquoi on entend souvent dire qu’un ordinateur ne comprend que les zéros et les uns.

Pour comprendre les différentes bases, considérons combien de chiffres ils ont. Dans notre vie quotidienne, nous utilisons le système décimal, appelé base 10, car nous avons 10 chiffres, de 0 à 9 (nous supposons que la raison en est que nous avons commencé à compter sur nos doigts). Dans le système binaire de base 2, nous n’avons que deux chiffres, 0 et 1. En base 16, le système hexadécimal, nous avons 16 chiffres. Comme nous n’avons que des chiffres de 0 à 9, nous devons utiliser des lettres du système hexadécimal pour représenter les valeurs entre 10 et 15. Ces lettres sont de A à F. Nous faisons cela parce que nous devons comprendre la différence entre les chiffres et les nombres: un chiffre est un symbole unique représentant une valeur, tandis qu’un nombre est une séquence d’un ou plusieurs chiffres. Ainsi, par exemple, on peut parler du chiffre 7, mais pas du chiffre 12 (car il s’agit d’un nombre composé de 2 chiffres). Dans le système hexadécimal, nous devons représenter 16 valeurs; par conséquent, nous avons besoin de 16 chiffres. Puisque nous n’avons que 10 chiffres dans notre système décimal, nous devons utiliser autre chose. Dans ce cas, ce sont les lettres A à F.

Le tableau suivant montre une illustration de ce qui vient d’etre expliquer dans les lignes précédentes

Comment fonctionne un logiciel (ou une application ou un proramme informatique)?

Si nous reguardons notre environnement en tant que etre humain, on remarque immediatement que tous les outils crés par l’homme nous aident pour le travail physique, avec l’arrivée de l’ordinateur, l’homme a enfin inventé aussi un outils qui l’aide dans le travail mentale.

Lors de la planification de la conception d’une telle machine, les inventeurs ont découvert qu’elle devait effectuer quatre tâches différentes. L’ordinateur aurait besoin de prendre des données en entrée, de stocker ces données, de traiter les données, puis de produire un résultat.

Ces quattre taches sont communes à tous les ordinateurs et voyons le en detail:

  1. Nous pouvons fournir des données d’entrée(input) à l’ordinateur de plusieurs manières par exemple par le clavier, une souris, des commandes vocales et des écrans tactiles.
  2. Les données d’entrée sont immediatement transmit à une peripherie de stockage de donnée dans le cas écheant la memoire interne communément appellée RAM.
  3. L’unité centrale de traitement de données (le processeur ou le CPU), recupère ces données de la mémoire vive et y effectue des opérations.
  4. Le resultat des opérations effectuées par la CPU est ensuite stocker de nouveau dans la mémoire avant d’etre acheminer vers les peripheries de sortie(output).

Tout comme différents appareils peuvent être utilisés pour envoyer une entrée à l’ordinateur, la sortie peut également être sous différentes formes, et nous pouvons utiliser divers appareils pour présenter le résultat, comme du texte à une imprimante, de la musique via les haut-parleurs ou une vidéo, une peripherie de sortie peut aussi etre une peripherie d’entrée pour un autre ordinateur. L’image ci après décrit de manière grossomodo le flux de traitement de donnée dans un ordinateur:

Comprendre le system binaire

Pourquoi les ordinateurs ne fonctionnent-ils qu’avec des zéros et des uns? Pourquoi ne peuvent-ils pas travailler directement avec du texte ou des images, par exemple? l’ordinateur étant essentiellement composé de circuit électronique, il est assez facile de construire des circuits qui peuvent représenter deux états. Si vous avez un fil électrique, vous pouvez y faire passer de l’électricité ou non donc présence ou non de l’électricité. Le flux ou pas de l’électricité pourrait représenter plusieurs choses, telles que en marche(On) ou en arrêt(Off)vrai ou faux, ou zéro ou un. Pensons à ces deux états comme zéro et un pour le moment, avec zéro qui signifit pas de présence du courant électrique et un symbolisant que nous avons un flux. Si nous pouvons desservir ces deux états, nous pourrions ajouter plus de fils électrique et, ce faisant, avoir plus de zéros et de uns.

Mais que pourrions-nous faire de tous ces zéros et uns? Eh bien, la réponse est que nous pouvons faire presque tout. Par exemple, avec seulement des zéros et des uns, nous pouvons représenter n’importe quel entier en utilisant le système numérique binaire. Essayons de le comprendre plus en profondeur.

Pour comprendre les nombres binaires, commençons par voir ce qui se passe avec le système décimal. Le système décimal est basé sur 10 chiffres, allant de 0 à 9. Lorsque nous comptons, nous parcourons ces chiffres jusqu’à atteindre 9. Une fois le chiffre 9 atteind, nous n’avons plus de nombre, on recommence donc de nouveau à partir de 0 mais cette fois en y ajoutant le chiffre 1 devant ce qui fait le nombre 10. Ensuite, nous continuons jusqu’à ce que nous obtenons le nombre 19, puis on repart de 0 et on part du chiffre 2 pour obtenir le nombre 20 ainsi de suite jusqu’à la fin.

On peut aussi utiliser une autre approche pour essayer de déchiffrer les différents systèmes numériques à savoir essayer de penser à la valeur qu’une position représente. Prenons un exemple. Le nombre 414 a le chiffre 4 à deux endroits, mais leur position leur donne deux valeurs différentes. Si nous partons de la droite et nous nous déplaçons vers la gauche, nous pouvons dire que nous prenons le premier chiffre, 4, et le multiplions par 1. Ensuite, nous prenons le deuxième chiffre, 1, et le multiplions par 10. Enfin, nous prenons le dernier chiffre, 4, et multipliez-le par 100. Si nous nous déplaçons de droite à gauche, chaque étape vaut 10 fois plus que l’étape précédente. Jetez un œil à ce calcul représenté dans le tableau suivant:

Si l’on utilise le système binaire, on peut faire la meme chose mais cette fois ci en utilisant seulement les chiffres 0 et 1 , nous commençons à partir de 0 ensuite 1 et là on a finit avec les chiffres présents dans le sytème binaire, on recommence donc avec 0 avec le 1 devant, compter en système binaire revient à faire ceci:

0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, ainsi de suite

En ce qui concerne les valeurs de chaque position pour les nombres binaires, cela fonctionne comme avec les nombres décimaux. Cependant, la valeur de chaque position n’est pas multipliée par 10 mais par 2. Nous multiplions le premier chiffre par 1, le deuxième chiffre par 2, le troisième chiffre par 4, etc. Pour simplifier les choses, nous pourrions dire que le chiffre 1 dans une position particulière signifie que le nombre représentant cette position fera partie de la valeur finale, et 0 signifie qu’il n’en fera pas partit. Jetez un coup d’œil à ce tableau pour le nombre binaire 11010100:

comme on peut imaginer, dans ce tableau, nous avons des 1 aux positions represetées par 128,64,16,4 , tous les nombres qui vont de paire avec le chiffre 0 doivent etre simplement omis dans le calcul donc en definitif le nombre binaire 11010100 en decimale correspond à 212

Si nous voulons convertir un nombre décimal, disons 27, en binaire, nous commençons par penser jusqu’où nous pouvons aller dans la séquence des valeurs de position: 1, 2, 4, 8, 16, etc. Quel est le plus grand de ceux que nous pouvons trouver qui est inférieur ou égal à 27? La réponse est 16, donc le premier 1 de ce nombre binaire sera à cette position. Sur toutes les positions avant 16, on peut insérer 0

Nous soustrayons ensuite 16 de 27 et obtenons 11 et répétons le processus avec cette valeur. La plus grande valeur inférieure ou égale à 11 est 8:

Nous soustrayons 8 de 11 et obtenons 3. La valeur suivante, 4, est supérieure à 3, nous insérons donc un 0 à cette position:

Comme nous n’avons pas encore inséré de 1, nous conservons la valeur de 3 et essayons de trouver une valeur qui lui convient. Le suivant, 2, est inférieur ou égal à 3, nous insérons donc un 1 ici, puis soustrayons 2 de 3 et obtenons 1:

on repete avec la meme procedure jusqu’à atteindre le chiffre 0:

Nous savons dès maintenant que le nombre decimal 27 sera 11011 en nombre binaire. Nous pouvons ignorer les zéros non significatifs.

Quand nous avons un seul chiffre binaire, on l’appelle un bit, et si nous les plaçons dans des groupes de 8 bits, nous les appelons un byte (octet). Un octet peut contenir des valeurs entre 0 et 255. En effet, un 1 dans toutes les positions (11111111) sera 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255.

En utilisant beaucoup de zéros et de uns, l’ordinateur peut représenter n’importe quel nombre sous forme binaire, et s’il peut représenter des nombres, il peut également servir à d’autres choses, comme du texte.

Comprendre les caractères ASCII e Unicode

Si vous attribuez une valeur numérique à chaque lettre de l’alphabet française, vous pouvez représenter du texte avec des nombres. On pourrait, par exemple, dire que A = 1, B = 2, etc. L’ordinateur n’utilise pas ces valeurs pour les lettres, mais à la place, il peut utiliser quelque chose qui s’appelle la table ASCII ou une autre représentation appelée Unicode. Il n’est pas important de comprendre exactement comment ils fonctionnent; la seule chose que nous devons comprendre est qu’un nombre peut représenter chaque caractère. Ce numéro peut ensuite être recherché en utilisant la table ASCII ou Unicode.

La table ASCII utilise un octet pour représenter différents caractères. Le tableau commence par des caractères non imprimables(comme par exemple caractere aller sur une nouvelle ligne, Tab etc..). Finalement, il atteint les caractères de l’alphabet . Ainsi, A, par exemple, est 65, B est 66, et ainsi de suite.
255 caractères ne nous mèneront pas loin car nous avons beaucoup d’alphabets différents à travers le monde et nous voulons également représenter d’autres symboles. C’est pourquoi nous avons également Unicode. Son mappage avec des caractères individuels n’est pas aussi direct que dans la table ASCII, mais tout ce que nous devons savoir maintenant, c’est qu’avec lui, nous pouvons utiliser des nombres pour représenter des caractères.

Comment representer les autres formats de données?

Nous avons appris à représenter du texte en binaire, mais qu’en est-il des choses autres que le texte et les nombres? Et les images? Et la vidéo? Et le son?

Les images sont constituées de pixels et trois valeurs, RVB, représentent chaque pixel. Ces valeurs indiquent à l’ordinateur la quantité de rouge, de vert et de bleu d’un pixel:

Une vidéo n’est rien de plus qu’une sequence d’images, donc chaque frame est une image; par conséquent, il peut être représenté de la même manière.

Une forme d’onde peut représenter un son. Chaque sommet et chaque vallée peuvent être un nombre:

Algèbre boléenne

(je preferes dans ce paragraphe faire les calculs en maintenant les syntaxes en langue anglaise True=vraie; False=Faux, AND=ET; OR=OU; NOT=PAS exprime la negation)

George Boole, qui a vécu entre 1815 et 1864, était un mathématicien anglais autodidacte et l’inventeur de la logique booléenne, qui est à la base du fonctionnement de tous nos ordinateurs.

La logique booléenne, parfois appelée algèbre booléenne, est une forme de mathématiques qui ne fonctionne qu’avec deux valeurs: vrai et faux. Il définit également trois opérations que nous pouvons effectuer sur ces deux valeurs: AND, OR et NOT.

NOT est la plus simple de ces opérations car il ne fait que changer la valeur, donc pas vrai est faux et non faux est vrai. Par exemple, si je dis: «Il pleut aujourd’hui», cette affirmation peut être vraie ou fausse. C’est vrai s’il pleut et faux s’il ne l’est pas. Si je dis plutôt: «Il ne pleut PAS aujourd’hui», alors la déclaration sera vraie s’il ne pleut pas et fausse s’il le fait.

AND prend deux instructions qui peuvent être vraies ou fausses et les évalue en une seule valeur. Le résultat sera vrai si les deux valeurs entrantes sont vraies et fausses dans toutes les autres situations. Si je dis: «Il pleut aujourd’hui ET j’ai un parapluie bleu», l’affirmation ne sera vraie que si les deux parties sont vraies, c’est-à-dire s’il pleut réellement et que mon parapluie est en fait bleu. Cependant, s’il pleut mais que mon parapluie est rose, ce que je dis sera faux, même si la moitié était vrai.

OR fonctionne sur deux parties, tout comme AND, mais maintenant, une seule des deux doit être vraie pour que l’énoncé soit vrai. Si je dis: «Aujourd’hui, j’irai à la plage OU j’irai en ville», alors l’affirmation sera vraie que j’aille à la plage ou en ville, et aussi si j’arrive à faire les deux.

Nous pouvons illustrer le fonctionnement de ces trois opérations dans ce qu’on appelle une table de vérité. Une table de vérité est un moyen de décrire comment une entrée des valeurs vraie et fausse est transformée par une opération. L’entrée est souvent appelée P si nous n’avons qu’une seule valeur d’entrée, ou P et Q si nous en avons deux. Le résultat est affiché dans la dernière colonne.

Pour AND, la table de vérité ressemble à ceci si P et Q sont l’entrée:

idem pour le Or

Comme vous pouvez le voir, la seule façon dont une opération AND peut être vraie est si les deux parties sont vraies, et le seul moment où OR peut être faux est si les deux parties sont fausses.

Lorsque Claude Shannon, mathématicien et ingénieur électricien américain, a publié sa thèse de maîtrise en 1937 sur le thème “A Symbolic Analysis of Relay and Switching Circuits”, il a basé son travail sur les idées de Boole. À partir des idées de Shannon, la logique booléenne a fait son chemin dans nos ordinateurs modernes car, à l’aide des opérations simples définies par Boole, nous pourrions transformer n’importe quelle valeur qui peut être dans l’un des deux états suivants: vrai ou faux, activé(On) ou désactivé(Off), ou, dans le cas des nombres binaires, un ou zéro.

Nous pouvons accomplir ces opérations à l’aide de transistors. Il n’est pas nécessaire pour nous d’entrer dans les détails du fonctionnement d’un transistor , il suffit de savoir qu’il peut être utilisé pour représenter vrai / fauxmarche / arrêt ou 0/1. Nous pouvons ensuite connecter plusieurs transistors dans différentes configurations pour accomplir des opérations telles que AND, OR et NOT. Ces combinaisons sont appelées portes(gate en anglais), nous aurons donc un groupe de transistors appelé une porte ET, une qui est appelée une porte OU et une qui est appelée une porte NON. Ces portes peuvent ensuite être connectées davantage pour construire des circuits qui peuvent additionner, soustraire, multiplier et diviser. Nous avons maintenant construit une machine qui peut représenter à la fois des nombres et ces opérations de base. Nous l’avons fait en utilisant uniquement des nombres, et tous ces nombres seront en binaire, nous avons donc une machine qui ne fonctionne qu’avec des zéros et des uns: l’ordinateur.

Le Code Machine ou le language natif de l’ordinateur

Maintenant que nous avons des circuits qui peuvent effectuer certaines opérations de base sur les nombres, et que nous avons des données sous forme de nombres, nous pouvons commencer à écrire des programmes qui effectueront des opérations sur les données. Nous pouvons le faire avec la seule chose que l’ordinateur comprend: le code machine. Comme les nombres peuvent tout représenter, les instructions que nous donnons à l’ordinateur ne seront — oui, c’est vrai — que des nombres.

Chaque type de processeur a un ensemble d’instructions spécifique. C’est pourquoi un programme écrit pour un Mac ne peut pas fonctionner sur un PC sous Windows, par exemple. Ainsi, les instructions peuvent être du code machine. Le code machine a plusieurs opérations, appelées opcodes. Les opérations peuvent être des éléments tels que AND, OR, ADD, etc. Chaque opcode a un numéro unique. Par exemple, AND pourrait avoir une valeur d’opcode de 1, et OR pourrait avoir une valeur d’opcode de 9.

Le processeur a également plusieurs registres. Un registre est une petite zone mémoire, parfois appelée lieu de stockage de données, où le processeur peut stocker les données avec lesquelles il travaille actuellement. Avant d’exécuter une opération, nous devrons déplacer les données que nous voulons en entrée de l’opération, de la mémoire, dans certains de ces registres. Le résultat de l’opération, la sortie, est également stocké dans un registre. En réalité, les choses sont un peu plus compliquées que cela, donc nous n’entrerons pas dans les details, il faut juste avoir une idée de comment se passent les choses.

Nous pouvons maintenant rappeler l’image des quatre opérations communes à tous les ordinateurs: entrée, stockage, processus et sortie. Nous obtenons d’abord une entrée, et elle ira à la mémoire de l’ordinateur pour le stockage. Le processeur le récupérera ensuite à partir de ses registres et effectuera des opérations dessus, qui est la partie processus donc de traitement des données. Lorsque nous aurons le résultat des opérations, il retournera dans la mémoire pour pouvoir ensuite être envoyé vers la sortie.

Une façon d’écrire ces instructions consiste à utiliser quelque chose appelé “Language d’assemblage(Assembly language en anglais)” . C’est une manière d’écrire un programme où nous utilisons des abréviations à trois lettres pour les opcodes et avons des noms pour les registres. En faisant cela, il sera plus facile de lire et de comprendre les instructions que nous donnons. Nous pouvons alors utiliser un programme capable de traduire le code d’assemblage en code machine.

le “Assembly language” est le premier langage de programmation que nous rencontrons, il ressemble plus ou moins à ceci:

Ici, nous déplaçons (mov) la valeur de 14 dans l’un des registres, appelé eax, puis nous déplaçons la valeur de 10 dans un autre registre, appelé ebx. Nous effectuons alors l’opération d’ajout sur le contenu de ces deux registres. Le résultat sera réécrit dans un registre; peut-être que eax sera réutilisé pour cela.

Si l’opération de déplacement a un opcode de 136 et que l’opération d’ajout a un opcode de 1, nous pouvons utiliser ces valeurs avec les représentations numériques des registres pour avoir tout cela dans un format numérique uniquement. Et, comme nous le savons, tout ce qui est numérique peut être représenté sous forme binaire, c’est-à-dire avec des zéros et des uns.

N’oubliez pas que les instructions que nous vous donnerons seront différentes en fonction du processeur et du système d’exploitation que nous utilisons. Ce qui suit est un exemple de ce à quoi le code machine peut ressembler pour un programme imprimant le texte “ Hello, World! à l’écran sur un ordinateur utilisant le système d’exploitation Linux:

En regardant ce programme, nous pouvons écrire les nombres au format binaire ou décimal si nous le voulons. Cependant, pour faciliter la lecture, nous utilisons souvent des nombres hexadécimaux car nous pouvons alors utiliser moins de chiffres. Par exemple, 15 au format décimal (deux chiffres) est 1111 (quatre chiffres) en binaire, mais seulement F (un chiffre) en hexadécimal. Il est simplement plus compact — c’est la seule raison pour laquelle nous faisons cela.

Ne vous inquiétez pas si vous ne comprenez rien au programme de code machine. Il n’est pas censé être lisible pour les humains; cependant, pour l’ordinateur, tout cela a du sens.

Pour simplifier l’ecriture du code machine, on a invente les language de programmation qui sont appelés language de haut niveau et donc plus facile à manipuler pour les etres humains, ce sera l’objet du prochain chapitre.

Voilà j’esperes que cette bref introduction sera utile pour plus d’une personne meme neophyte en matière de developpement pour se faire une idée de ce qu’un developpeur fait au quotidien, si vous avez aimé alors partagez.


Author: admin
17.08.2022, 21:47
Category: Coding
Comments: 1
Views: 438
-

Share

Comments (1)
Bernard
Bernard Guest

Merci pour cet article, très bien éclairé

10.08.2022, 12:39


Leave A Comment
processing...