Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme...

Post on 22-Sep-2020

8 views 0 download

Transcript of Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme...

Chapitre 1: IntroductionINF3135 — Construction et maintenance de logiciels

Alexandre Blondin Massé

Université du Québec à Montréal

Automne 2019

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 1 / 56

Plan1 Présentation du cours

2 Environnement Unix

3 Environnement de développement

4 Le langage C

5 Les Makefiles

6 Logiciel de contrôle de versions

7 Langage de balisage léger

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 2 / 56

Présentation du cours

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 3 / 56

Informations générales

• Trimestre: Automne 2019• Titre du cours: Construction et maintenance de logiciels• Sigle: INF3135• Département: Informatique• Enseignant: Alexandre Blondin Massé• Courriel: blondin_masse.alexandre@uqam.ca• Site personnel: http://lacim.uqam.ca/~blondin• Bureau: PK-4525• Coordonnateur: Alexandre Blondin Massé• Site du cours: http://lacim.uqam.ca/~blondin/fr/inf3135• Plan de cours: cliquer ici

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 4 / 56

Description officielle (site de l’UQAM):« Notions de base de la programmation procédurale et impérative enlangage C sous environnement Unix/Linux (définition et déclaration,portée et durée de vie, fichier d’interface, structures de contrôle, unitésde programme et passage des paramètres, macros, compilation condi-tionnelle). Décomposition en modules et caractéristiques facilitant lesmodifications (cohésion et couplage, encapsulation et dissimulation del’information, décomposition fonctionnelle). Style de programmation(conventions, documentation interne, gabarits). Déboggage de pro-grammes (erreurs typiques, traces, outils). Assertions et conceptionpar contrats. Tests (unitaires, intégration, d’acceptation, boîte noirevs. boîte blanche, mesures de couverture, outils d’exécution automa-tique des tests). Évaluation et amélioration des performances (pro-fils d’exécution, améliorations asymptotiques vs. optimisations, outils).Techniques et outils de base pour la gestion de la configuration. Sys-tème de contrôle de version. »

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 5 / 56

Objectifs du cours

• Maîtriser davantage le développement dans un environnementUnix

• Apprendre les bases du langage C• Documenter convenablement un projet écrit en C• Gérer automatiquement la construction d’un programme C• Gérer adéquatement l’historique d’un programme• Apporter des modifications à un système développé par

d’autres personnes• Apprendre à utiliser des bibliothèques C• Fournir une couverture de tests d’un programme• Mettre en place des mécanismes d’intégration continue• Travailler en équipe sur la construction d’un projet écrit en C

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 6 / 56

Modalités d’évaluation

Travaux pratiques (50%)• TP1 (seul): initiation au langage C (15%)• TP2 (seul): maintenance d’un programme (15%)• TP3 (équipe): construction d’un programme (20%)

Examens (50%)• 1 examen intra (25%)• 1 examen final (25%)

Double seuilVous devez obtenir une moyenne d’au moins 50% dans les travauxpratiques et dans les examens pour réussir le cours

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 7 / 56

Références

Contenu du cours• The C Programming Language, de Kernighan et Ritchie

(disponible à la coop)• Manuel d’utilisation de Git: disponible en ligne• Documentation de Make: disponible en ligne• Documentation de Markdown: documentation officielle et

spécialisation pour GitLab

Politiques de l’UQAM• Règlement 18 sur la tricherie et l’intégrité académique (plagiat):

http://r18.uqam.ca/.• Politique 16 contre le harcèlement sexuel: document pdf.

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 8 / 56

Environnement Unix

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 9 / 56

Terminal et shell

• Terminal = interface• Shell = interpréteur de commandes• Outils essentiels de l’informaticien• Agit comme intermédiaire entre

→ l’utilisateur,→ le système de fichiers et→ les applications• Particulièrement utile pour des connexions à distance

INF1070 Util. et admin. des systèmes informatiques• Introduit comme cours obligatoire à l’automne 2018• Répond à un besoin des enseignants, des étudiants et de

l’industrie

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 10 / 56

Commandes de base• echo — afficher un message• ls — lister le contenu du répertoire• cat — afficher un fichier• cd — changer de répertoire• cd .. — revenir au répertoire parent• exit — fermer le shell

$ lsREADME.md src doc$ cat README.md# Travail pratique 1 [...]$ cd src$ lstp1.c$ cat tp1.c#include <stdio.h> [...]$ exit

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 11 / 56

Comment trouver de l’information?Approche traditionnelle de l’informaticien

• Google• Wikipedia• StackOverflow• Enseignant• Démonstrateur• L’association étudiante (AGEEI)

Approche efficace de l’unixienLe man$ man ls$ man date$ man intro$ man man

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 12 / 56

Afficher le contenu de fichiers• head — Affiche les première lignes• tail — Affiche les dernières lignes• less (et more) — Affiche le fichier page par page• tac — Affiche un fichier en commençant par la dernière ligne• rev — Inverse chacune des lignes affichée• wc — Affiche le nombre de lignes, mots et octets

# Afficher le nombre de lignes$ wc -l /usr/share/common -licenses/GPL -3674 /usr/share/common-licenses/GPL-3

# Afficher les 2 premières lignes$ head -n 2 /usr/share/common -licenses/GPL -3

GNU GENERAL PUBLIC LICENSEVersion 3, 29 June 2007

# Ouvrir le fichier avec un paginateur$ less /usr/share/common -licenses/GPL -3

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 13 / 56

Répertoires et chemins• tree — affiche l’arborescence d’un répertoire• pwd — affiche le chemin du répertoire courant• mv — déplace/renomme des fichiers (ou répertoires)• cp — copie (ou écrase) des fichiers• rm — supprime des fichiers• mkdir — crée des répertoires (vides)• rmdir — supprime des répertoires vides• grep — cherche les lignes correspondant à un motif dans un

fichier• find — rechercher des fichiers dans une hiérarchie de répertoires

QuestionComment supprimer un répertoire non vide?

$ rm -rf nom-du-repertoire

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 14 / 56

Répertoires et chemins• tree — affiche l’arborescence d’un répertoire• pwd — affiche le chemin du répertoire courant• mv — déplace/renomme des fichiers (ou répertoires)• cp — copie (ou écrase) des fichiers• rm — supprime des fichiers• mkdir — crée des répertoires (vides)• rmdir — supprime des répertoires vides• grep — cherche les lignes correspondant à un motif dans un

fichier• find — rechercher des fichiers dans une hiérarchie de répertoires

QuestionComment supprimer un répertoire non vide?$ rm -rf nom-du-repertoire

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 14 / 56

Droits et utilisateurs• chmod — modifie les droits d’un fichier (ou répertoire)• chown — modifie l’utilisateur propriétaire d’un fichier• chgrp — modifie le groupe propriétaire d’un fichier• sudo — exécute une commande sous un autre utilisateur• su — change d’utilisateur

# Rendre un script exécutable$ chmod +x nom-du-script

# Pour afficher entre autres les droits$ ls -l[...]

# Pour installer Pandoc$ sudo apt install pandoc[...]

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 15 / 56

Autres commandes utiles

• file — affiche le type de fichier• date — affiche et configure la date• touch — modifie l’horodatage d’un fichier ou crée un fichier

vide• stat — affiche différentes informations sur un fichier

$ dateFri Aug 30 17:33:16 EDT 2019

$ file 01-intro.pdf hello.c01-intro.pdf: PDF document, version 1.5hello.c: C source, ASCII text

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 16 / 56

Sortie standardLe résultat des commandes va sur la sortie standard

• Par défaut, la sortie standard est l’écran terminal• Mais le shell peut la rediriger vers un fichier

$ ls -l hello.txt > ls.out$ cat ls.out-rw-r--r-- 1 privat privat 460 aoû 15 20:23 hello.txt

Opérateurs shell de redirections: « > » et « >> »• « > f » écrit dans le fichier f depuis le début (écrase)• « >> f » écrit à la suite du fichier f (ajoute)• Dans les deux cas, si f n’existe pas, il est créé

$ echo uno > tata$ echo dos >> tata$ cat tataunodos

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 17 / 56

Sortie d’erreur standard

Les commandes distinguent deux sorties• la sortie standard pour les résultats normaux• la sortie d’erreur standard pour les messages d’erreurs et de

diagnostics$ ls -l hello.txt epic.fail > ls.outls: impossible d'accéder à 'epic.fail':Aucun fichier ou dossier de ce type$ cat ls.out-rw-r--r-- 1 privat privat 460 aoû 15 20:23 hello.txt

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 18 / 56

Redirection d’erreur standard

« 2> » (et « 2>> ») redirigent la sortie d’erreur standard vers unfichier$ ls -l hello.txt epic.fail > ls.out 2> ls.err$ cat ls.out-rw-r--r-- 1 privat privat 460 aoû 15 20:23 hello.txt$ cat ls.errls: impossible d'accéder à 'epic.fail':Aucun fichier ou dossier de ce type

Parfois, on préfère taire les erreurs:$ cat epic.failcat: epic.fail: No such file or directory$ cat epic.fail 2> /dev/null

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 19 / 56

L’entrée standard au clavier

L’entrée standard est l’entrée naturelle des commandes• Par défaut, l’entrée standard est le clavier du terminal• Les touches ctrl + D terminent l’entrée clavier

Prononcer « contrôle-dé », écrire « ^D »$ tacbonjourle monde^Dle mondebonjour

QuestionQuelle est la différence si on remplace tac par rev ?

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 20 / 56

Redirection en entrée« < » redirige l’entrée standard depuis un fichier$ cat < deux-lignes.txtUne première lignePuis la deuxième

$ tr eu .- < deux-lignes.txtUn. pr.mièr. lign.P-is la d.-xièm.

QuestionQue fait la commande tr?

RemarquePour le TP1 — et le reste du cours — vous devez bien comprendreles notions d’entrée et de sortie standards

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 21 / 56

Gestionnaire de paquets

• Tâche courante: installer des logiciels/bibliothèques• Gestion des dépendances entre paquets est complexe• Solution: utiliser un gestionnaire de paquets (en anglais,

package manager)• Exemples:

→ Aptitude (apt): Debian et ses dérivés→ Pacman (ArchLinux)→ RPM Package Manager (Red Hat, Fedora, CentOS)→ MacPorts (MacOS)→ Homebrew (MacOS), etc.

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 22 / 56

Système Unix

• Dans ce cours: vous devez travailler sous Unix• Mac OS: ça va pour le cours, mais attention aux différences• Windows: vous pouvez, mais doit fonctionner sur un système

Unix• Différentes solutions possibles:

→ Installez une distribution Linux en partition double ou commeunique système (Ubuntu, Linux Mint)

→ Installer une machine virtuelle (VirtualBox, VMWare)Attention

• La version actuelle de Linux Subsystem suffit pour le TP1,mais pas pour les deux autres.

• Mieux vaut en profiter dès le début pour s’habituer à Linux

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 23 / 56

Environnement de développement

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 24 / 56

Environnements de développement

• Outil de base d’un programmeur• En anglais, integrated development environment (IDE)• Quelques exemples:

• Pourtant, de nombreux programmeurs avancés préfèrent unsimple éditeur de texte. Pourquoi ?

• Certains plaident même que Unix est un EDD• Dans le cours, aucun environnement n’est imposé

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 25 / 56

Éditeurs de texteOffre très variée:

• Notepad/Notepad++ (Windows)• TextEdit (MacOS)• Gedit (Linux), souvent installé par défaut• SublimeText (multiplateforme)• Visual Studio Code• Emacs• Vi/Vim et ses dérivés (multiplateforme) → préféré

Maîtrise d’un éditeur de texte en ligne de commande nécessaire:• Pour bien utiliser Git lors de l’édition de dialogues (opérations

plus complexes, comme un rebasement interactif)• Pour modifier des fichiers distants• Dans tous les cas, assurez-vous que vos fichier sont enregistrés

au format UTF8A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 26 / 56

Vim• Un des plus anciens éditeurs de texte• En 2009, un sondage le plaçait comme l’éditeur de texte le plus

utilisé• Son ancêtre, vi, a été créé par Bill Joy en 1976• Le nom Vim vient de Vi iMproved• Multiplateforme (Linux, MacOS, Windows).

Caractéristiques• Très mature• Interaction directe avec le terminal• Installé par défaut avec plusieurs distributions Unix• Rapide, en particulier pour la programmation à distance• Hautement configurable• Orienté clavier (GVim permet une utilisation limitée de la

souris)• Courbe d’apprentissage difficile pour les débutantsA. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 27 / 56

Configuration• Fichier .vimrc dans les anciennes versions• Fichier .vim/vimrc dans les plus récentes

" Configuration de Vim-plugcall plug#begin('~/.vim/plugged ')

" ThèmesPlug 'michalbachowski/vim-wombat256mod 'Plug 'crusoexia/vim-monokai'Plug 'preocanin/greenwint '

[...]" Activation des numéros de ligneset number

" Gestion de l'expansion des tabulations (en espaces)" (voir :help expandtab)set tabstop=4 | set shiftwidth=4 | set expandtab[...]

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 28 / 56

Le langage C

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 29 / 56

Bref historique

• Années 70: Naissance du langage, créé par Ritchie etKernighan

→ Origine du langage fortement liée à celle d’Unix→ 90% du système Unix écrit en C• 1978: Publication du livre « The C Programming Language »,

par Kernighan et Ritchie• 1983: ANSI forme un comité pour normaliser le langage• 1989 Apparition de la norme ANSI-C• 1999: Révision du standard (ISO C99)• 2011: Révision du standard (ISO C11)

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 30 / 56

Caractéristiques du langage

• Bas niveau: près du langage machine, contrôle élevé de lamémoire, efficace

• Déclaratif: le type des variables doit être déclaré• Flexible: espacement, indentation• Structuré: organisé en blocs (accolades)• Modulaire: division en fichiers, compilation séparée• Flexible: peu de vérification, pointeurs typés mais non contrôlés• Spécifique: pour bien faire une tâche, adapté aux petits

programmes et aux bibliothèques• Portable: mais avec parfois un certain effort• Simple: spécification assez courte• Verbeux: il faut écrire beaucoup de code

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 31 / 56

Exemple

Fichier maj.c:#include <stdio.h>#include <ctype.h>

int main() {char c;while ((c = getchar()) != EOF) {

printf("%c", toupper(c));}return 0;

}

QuestionQue fait ce programme?

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 32 / 56

Compilation

• Édition du programme source: à l’aide d’un éditeur de texteou d’un environnement de développement

→ L’extension du fichier est .c• Compilation: traduction du langage C en langage machine

→ Indique les erreurs de syntaxe→ Ignore les fonctions et les bibliothèques invoquées→ Génère un fichier avec l’extension .o• Édition de liens (linking): Le code machine de différents

fichiers .o est assemblé pour former un fichier binaire→ Par défaut, l’extension est .out sous Unix→ L’extension est .exe sous Windows• Exécution du programme: en ligne de commande ou en

double-cliquant sur l’icône du fichier binaire.

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 33 / 56

Compilation « directe »• On peut combiner la compilation et l’édition des liens en une

seule commande:• Produit (par défaut) le fichier exécutable a.out

$ gcc maj.c$ ls -l a.out-rwxr-xr-x 1 ablondin ablondin 8392 Sep 3 07:33 a.out

• Puis on l’exécute:$ ./a.outLangage de balisage légerLANGAGE DE BALISAGE LéGER^C

• Pour nommer l’exécutable (par exemple maj):$ gcc -o maj maj.c

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 34 / 56

Compilation et édition des liens• Parfois, il est préférable de séparer la compilation et l’édition

des liens→ projets de plus grande envergure (TP2 et TP3)• On compile d’abord en langage machine chaque fichier

→ par défaut l’extension .c devient .o

$ gcc -c maj.c$ gcc -o maj.o -c maj.c # Équivalent

• Produit le fichier objet maj.o• Ensuite:

$ gcc -o maj maj.o

• Produit un fichier exécutable nommé maj• Exécution:

$ ./maj

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 35 / 56

Les Makefiles

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 36 / 56

Simplifier la compilation

On a vu un peu plus tôt la compilation en deux étapes pour créer unexécutable

• On compile le fichier .c en un fichier .o

$ gcc -c maj.c

• On lie les fichiers .o en un seul fichier exécutable$ gcc -o maj maj.o

• Problème: pénible de relancer la compilation chaque fois qu’onapporte une modification au fichier source

• Solution: utiliser un Makefile!

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 37 / 56

Makefiles

• Existent depuis la fin des années ’70• Gèrent les dépendances entre les différentes composantes d’un

programme• Automatisent la compilation en minimisant le nombre d’étapes• Malgré qu’ils soient archaïques, ils sont encore très utilisés (et

le seront sans doute pour très longtemps encore)• Certaines limitations des Makefiles sont corrigées par des outils

comme Autoconf et CMake (vu vers la fin du trimestre)• On préfére le nom Makefile (avec une majuscule) à makefile.

Pourquoi?

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 38 / 56

Exemple

• Exemple de Makefile minimal pour un programme C d’un seulfichier:

maj: maj.ogcc -o maj maj.o

maj.o: maj.cgcc -c maj.c

• La syntaxe est de la forme<cible >: <dépendances ><tab><commande>

• Le caractère <tab> est très important!

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 39 / 56

Invocation d’un Makefile

• Pour invoquer un Makefile, il suffit d’entrer$ makegcc -c exemple.cgcc -o exemple exemple.o

• Par défaut, les commandes sont affichées (possible de les fairetaire)

• Astuce: Comme Vim interagit directement avec le terminal, jem’assure que les caractères <leader>m (pour moi, c’est ,m)déclenchent la commande make en l’indiquant dans mon fichiervimrc

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 40 / 56

Logiciel de contrôle de versions

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 41 / 56

Logiciel de contrôle de versions

• Permet de stocker un ensemble de fichiers• Conserve en mémoire la chronologie de toutes les modifications

effectuées• Offre des services de partage des fichiers entre plusieurs

développeurs• Est utilisé pour conserver les différentes versions du code source

d’un projet• Permet également de gérer différentes branches dont les

évolutions sont temporairement indépendantes• Garantit dans une certaine mesure l’intégrité des fichiers, car il

est toujours possible de revenir en arrière

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 42 / 56

Liste de logiciels connus

Nom Type AccèsBazaar distribué libreBitKeeper distribué propriétaireCVS centralisé libreDarcs distribué libreGit distribué libreMercurial distribué libreSubversion centralisé libre

• Dans ce cours, nous utiliserons Git• Son utilisation est obligatoire, notamment pour la remise des

travaux

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 43 / 56

Naissance de Git

• 2002: Linus Torvalds utilises BitKeeper pour conserverl’historique de Linux

• 6 avril 2005: La version gratuite de BitKeeper est supprimée:Torvalds décide de créer son propre logiciel de contrôle deversion, Git

• 18 avril 2005: Git supporte l’opération de fusion de fichiers• 16 juin 2005: Git est officiellement utilisé pour conserver

l’historique de Linux• Fin juillet 2005: Junio Hamano devient le développeur

principal de Git

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 44 / 56

Commandes les plus courantes• Créer un nouveau projet: git init• Cloner un projet existant: git clone• Sauvegarder l’état courant du projet: git commit• Versionner un nouveau fichier: git add• Ajouter un fichier pour le prochain commit: git add• Consulter l’historique: git log• Récupérer des changements à distance: git pull• Téléverser des changements à distance: git push

Apprendre les commandes• Plusieurs commandes vues en laboratoire• Vous devrez aussi en apprendre par vous-même• Beaucoup d’options sont disponibles:

$ git remote --help

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 45 / 56

Configuration de Git• Se fait à l’aide d’un fichier texte• Généralement stocké dans le dossier home• Dans un fichier nommé .gitconfig

[user]name = Alexandre Blondin Masséemail = blondin_masse.alexandre@uqam.ca

[color]branch = autodiff = autointeractive = autostatus = auto

[alias]st = status -sco = checkoutci = commitbr = branch

[...]

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 46 / 56

Hébergement de dépôts Git

La plupart des commandes Git se font de façon locale• Chaque clone d’un dépôt est autonome• L’historique est purement local

Cependant, il est pratique de pouvoir partager nos modificationsPour cela, il existe des sites dédiés à l’hébergement de tels projets:

• Github• Bitbucket• GitLab

Dans ce cours, vous devrez utiliser le GitLab du départementd’informatique

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 47 / 56

Langage de balisage léger

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 48 / 56

Qu’est-ce que c’est?Définition (extraite de Wikipedia):

« Un langage de balisage léger est un type de langage debalisage utilisant une syntaxe simple, conçu pour être aisé àsaisir avec un éditeur de texte simple, et facile à lire dans saforme non formatée. »

Exemples:• Markdown,• ReStructuredText,• Asciidoc, etc.

Contre-exemples:• HTML, XML: pas légers!• YAML, JSON, légers, mais plutôt pour structurer des données

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 49 / 56

Markdown• 2004: créé par John Gruber avec Aaron Swartz• Peu modifié ensuite par les auteurs originaux• Extension de fichier: .md ou .markdown• Peut facilement être transformé en HTML ou en PDF

→ grâce notamment au programme Pandoc• Supporté sur plusieurs plateformes ou forums• Pas de standardisation formelle• Possibilité d’enchasser du HTML

→ Attention! éviter s’il existe un équivalent Markdown!Plusieurs variantes (flavors)

• Multimarkdown, qui est une extension• GitHub Flavored Markdown, d’abord développé pour GitHub• GitLab Flavored Markdown, développé pour GitLab

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 50 / 56

Formatage (1/2)

• Emphase (balise <em> en HTML): étoiles simples *mot* ousoulignés simples _mot_

• Emphase forte (balise <strong>): étoiles doubles **mot**• Souligner: soulignés doubles __mot__• Bout de code (balise <code>): apostrophes inversées `mot`• Bloc de code: trois apostrophes inversées

```cint main() {

return 0;}```

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 51 / 56

Formatage (2/2)

• Bloc de code (sans langage associé): indenter de 4 espacesBout de texte qui apparaîtra comme du codePour des extraits de fichiers texte, par exemple

• Citation (balise <blockquote>): commencer par >

> Extrait d'une conversation qu'on souhaite commenter> Peut être sur plusieurs lignes

• Paragraphes (balise <p>): il suffit de laisser une ligne videPremier paragraphe

Deuxième paragraphe

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 52 / 56

Listes• Liste non ordonnée (balise <ul>): étoiles ou tirets

* Premier élément* Deuxième

* Élément imbriqué (au moins 4 espaces)* Troisième

• Liste ordonnée (balise <ol>): chiffre suivi d’un point1. Premier élément2. Deuxième élément3. Troisième élément

• Liste à cocher: crochets avec x optionnel- [ ] Finir TP1- [ ] Relire notes de cours- [x] Se reposer

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 53 / 56

Titres• Permet de structurer un document Markdown (balises <h1> à

<h6>)# Travail pratique 1

## Description

## Auteurs

## Exemples

### Exemple 1

### Exemple 2

• Attention de ne pas mettre trop de titres• Ajuster la profondeur selon la taille du document

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 54 / 56

Liens

• Pour insérer un hyperlien:[texte](lien relatif ou absolu)

• Pour insérer une image:![texte](lien relatif ou absolu vers l'image)

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 55 / 56

Mathématiques

• Supporté dans certaines variantes• Exemple: GitLab Flavored Markdown• Dans le texte: un dollar suivi d’une apostrophe inversée• Bloc mathématique: comme pour le code, avec le mot math

Dans le texte, c'est comme ça: $`(x + 1, y - 2)`$.

Pour un bloc mathématique

```mathf(x,y) = x^2 + y^2 - 1```

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 56 / 56