From 9cbe2e337a67e08667f1520e1181820249c1a85a Mon Sep 17 00:00:00 2001 From: gwen Date: Fri, 17 Mar 2017 11:33:14 +0100 Subject: [PATCH] =?UTF-8?q?d=C3=A9but=20du=20cours=20d'algorithmique=20pou?= =?UTF-8?q?r=20le=20CESI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- algorithmique/cours/Makefile | 216 ++++++++++++++++ algorithmique/cours/_static/cesi.jpg | Bin 0 -> 60367 bytes algorithmique/cours/conf.py | 355 +++++++++++++++++++++++++++ algorithmique/cours/fondement.txt | 99 ++++++++ algorithmique/cours/index.txt | 30 +++ algorithmique/cours/langage.txt | 220 +++++++++++++++++ algorithmique/cours/modularite.txt | 51 ++++ 7 files changed, 971 insertions(+) create mode 100644 algorithmique/cours/Makefile create mode 100644 algorithmique/cours/_static/cesi.jpg create mode 100644 algorithmique/cours/conf.py create mode 100644 algorithmique/cours/fondement.txt create mode 100644 algorithmique/cours/index.txt create mode 100644 algorithmique/cours/langage.txt create mode 100644 algorithmique/cours/modularite.txt diff --git a/algorithmique/cours/Makefile b/algorithmique/cours/Makefile new file mode 100644 index 0000000..8b94f17 --- /dev/null +++ b/algorithmique/cours/Makefile @@ -0,0 +1,216 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Algorithmique.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Algorithmique.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/Algorithmique" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Algorithmique" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/algorithmique/cours/_static/cesi.jpg b/algorithmique/cours/_static/cesi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dafbe55de24691c42c68b12402a75d4f863000ee GIT binary patch literal 60367 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 literal 0 HcmV?d00001 diff --git a/algorithmique/cours/conf.py b/algorithmique/cours/conf.py new file mode 100644 index 0000000..b607f02 --- /dev/null +++ b/algorithmique/cours/conf.py @@ -0,0 +1,355 @@ +# -*- coding: utf-8 -*- +# +# Algorithmique documentation build configuration file, created by +# sphinx-quickstart on Thu Mar 16 16:07:00 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.pngmath', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# source_suffix = ['.rst', '.md'] +source_suffix = '.txt' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Algorithmique' +copyright = u'2017, Gwen' +author = u'Gwen' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'1' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'fr' + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +default_role = 'literal' + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (relative to this directory) to use as a favicon of +# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +html_show_sphinx = False + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +html_show_copyright = False + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +#html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +#html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +#html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Algorithmiquedoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +'papersize': 'a4paper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', + +# Latex figure (float) alignment +#'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'Algorithmique.tex', u'Cours d\'algorithmique', + u'promotion GMSI B3', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +latex_logo = '_static/cesi.jpg' + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +latex_use_parts = True + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = False + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'algorithmique', u'Algorithmique Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'Algorithmique', u'Algorithmique Documentation', + author, 'Algorithmique', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False + + +# -- Options for Epub output ---------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project +epub_author = author +epub_publisher = author +epub_copyright = copyright + +# The basename for the epub file. It defaults to the project name. +#epub_basename = project + +# The HTML theme for the epub output. Since the default themes are not +# optimized for small screen space, using the same theme for HTML and epub +# output is usually not wise. This defaults to 'epub', a theme designed to save +# visual space. +#epub_theme = 'epub' + +# The language of the text. It defaults to the language option +# or 'en' if the language is not set. +#epub_language = '' + +# The scheme of the identifier. Typical schemes are ISBN or URL. +#epub_scheme = '' + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +#epub_identifier = '' + +# A unique identification for the text. +#epub_uid = '' + +# A tuple containing the cover image and cover page html template filenames. +#epub_cover = () + +# A sequence of (type, uri, title) tuples for the guide element of content.opf. +#epub_guide = () + +# HTML files that should be inserted before the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_pre_files = [] + +# HTML files that should be inserted after the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_post_files = [] + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + +# The depth of the table of contents in toc.ncx. +#epub_tocdepth = 3 + +# Allow duplicate toc entries. +#epub_tocdup = True + +# Choose between 'default' and 'includehidden'. +#epub_tocscope = 'default' + +# Fix unsupported image types using the Pillow. +#epub_fix_images = False + +# Scale large images. +#epub_max_image_width = 0 + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#epub_show_urls = 'inline' + +# If false, no index is generated. +#epub_use_index = True diff --git a/algorithmique/cours/fondement.txt b/algorithmique/cours/fondement.txt new file mode 100644 index 0000000..6346eb4 --- /dev/null +++ b/algorithmique/cours/fondement.txt @@ -0,0 +1,99 @@ +Présentation de l'art de programmer +==================================== + +Le processus d'abstraction +-------------------------- + +Débuter en programmation n'est pas une chose aisée. Aujourd'hui, la tendance est au +"bas niveau". Souvent, on se jette dans le grand bain : + +- soit en s'approchant au maximum de la machine (admin système et réseau, noyau + linux, langage C) + +- soit en faisant du dev web côté backend, ce qui ramène à une administration réseau + de bas niveau (microservices, monde nodeJS/javascript, etc...) + +Soit on suit un cursus scolaire traditionnel qui commence souvent par une +explication du fonctionnement d'une machine abstraite de bas niveau, puis en +allant de plus en plus haut, mais étant sous-entendu qu'il faut rester connecté au +bas niveau (comprendre comment ça se passe derrière la scène). + +Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus +rapidement en mettant les mains dans le cambouis, ce qui vrai bien sûr. Mais cela +sous-entend qu'un développeur doit rester le nez dans le guidon, ou au moins qu'il +se doit d'être un expert du système dans lequel il évolue (connaissance du système +d'exploitation, binding avec le C, du ramasse miette (garbage collector), +interaction avec les différentes librairies, gestion et optimisation de la mémoire, +architecture par microservices, threads...) + +L'approche algorithmique consiste en exactement le contraire : elle commence par se +placer du côté de l'esprit humain et de ses capacités de compréhension et +d'abstraction. + +Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective +des langages à partir des paradigmes de rationalisation de la penseée (modules, +objects, généricité, polymorphisme paramétrique...) et d'un outil de communication +avec la machine qu'on appelle compilateur (dont la description est en dehors de +l'objectif de ce cours). + +La tendance générale de l'évolution des languages est de se libérer de ces +contraintes de bas niveau, un peu comme en sciences physiques où les lois physiques +dépendent de l'échelle d'en dessous (du niveau microscopique/quantique) mais qu'à +l'échelle du dessus, on n'a pas affaire à des effets de bas niveau (pas d'effets +quantiques à un niveau macroscopique en général). Ce processus d'évolution est vrai +aussi dans le monde de la technique informatique lui-même (modèle OSI, comment est +construite une trame IP, indépendances de chaque couche (transport, payload) entre +elles). Même la tendance système est à la virtualisation qui accentue encore la +tendance à s'affranchir du bas niveau (le niveau système), le séparer nettement du +haut niveau (le niveau applicatif). + +Il apparaît régulièrement de nouveaux langages. Comment s'orienter ? Quel(s) +langage(s) choisir pour un projet de développement ? Au delà de leurs disparités, la +conception et la genèse de chacun d'eux procèdent d'une motivation partagée : la +volonté d'abstraire. + +- **s'abstraire de la machine** : un langage de programmation permet de + négliger l'aspect *mécanique* de l'ordinateur. On oublie le modèle du + microprocesseur, jusqu'au système d'exploitation sur lequel sera exécuté + le programme. + +- **abstraire les erreurs** : Il s'agit ici de garantir la sûreté d'exécution; un + programme ne doit pas se terminer brutalement ou devenir incohérent en cas d'erreur. + Un des moyens pour y parvenir est le typage des programmes et la mise + en oeuvre d'un mécanisme d'exceptions. + +- **abstraire le mode opératoire** : Il s'agit de choisir une représentation, un + paradigme d'implémentation qui est indépendant du domaine considéré (paradigme + objet, modulaire, générique, composants...) + +- **abstraire les composants** : Les langages de programmation donnent la + possibilité de découper une application en différents composants logiciels, plus ou + moins indépendants et autonomes. La modularité permet une structuration de plus haut + niveau de l'ensemble d'une application complexe. Les langages à objets constituent + une autre approche de la réutilisabilité permettant la réalisation très rapide de + prototypes. + +Détails des niveaux d'abstraction par rapport à la machine +----------------------------------------------------------- + +L'extrème déploiement des langages (plusieurs milliers de langages différents) +est dû au succès de l'ordinateur. + +- **niveau 0** : le langage machine. Illisible, c'est une suite d'optcode. + impossible de coder dans ce langage. + +- **niveau 1** : langage d'assemblage. Il reste très dépendant de la machine + et aujourd'hui il est rare d'en faire, sauf si on code un bootloader par exemple, + la gestion de l'accès à la mémoire est en réel (le mode protégé n'apparaît que après). + Il faut gérer les ressources,le langage est très optimisé mais presque impossible + à maintenir et rendre générique. Aujourd'hui plus personne ne code en assembleur. + +- **niveau 2** : langages dits de **bas niveau** : (exemple : le C, le C++) + indépendance par rapport à la machine, grande structuration mais très verbeux + +- **niveau 3** : langages dits de **haut niveau** : le raisonnement dans ces + langages ne dépent plus de la machine, et ils implémentent des paradigmes de + programmation indépendant de l'état de la mémoire de l'ordinateur, + ils sont indépendant même du système d'exploitation. + + diff --git a/algorithmique/cours/index.txt b/algorithmique/cours/index.txt new file mode 100644 index 0000000..6c75413 --- /dev/null +++ b/algorithmique/cours/index.txt @@ -0,0 +1,30 @@ +.. Algorithmique documentation master file, created by + sphinx-quickstart on Thu Mar 16 16:07:00 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Introduction à l'algorithmique +================================ + +Contents: + +.. toctree:: + :maxdepth: 2 + + fondement + langage + modularite + + +.. algorithmique + + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/algorithmique/cours/langage.txt b/algorithmique/cours/langage.txt new file mode 100644 index 0000000..526a543 --- /dev/null +++ b/algorithmique/cours/langage.txt @@ -0,0 +1,220 @@ +Les langages de programmation +============================= + +Approche historique et chronologique +------------------------------------- + +- début des langages vers les années 1950 (A0, Fortran(impératif), + Lisp(impératif et fonctionnel), Cobol) +- années 60 : Simula (classes), CPL (compilation séparée) +- années 70 : C (référence du langage impératif de bas niveau), Pascal + (procédures), Smalltalk (programmation orientée objects), Prolog + (programmation logique), Scheme (programmation fonctionnelle pure), Modula, + C++, Ada, Turbo Pascal, Common Lisp, Eiffel (programmation par contrats) +- années 80 : ML, CAML (langages fonctionnels) +- années 90 : Perl, Python, Ruby (languages de scripting multi-paradigmes) + Haskell (fonctionnel pur), Lua, Delphi, Java (orienté objet, machine + virtuelle), PHP (impératif, dédié au web), Erlang (fonctionnel+ + programmation concurrente), javascript (orienté web, objets par + prototypage), OCaml (multi-paradigme, fortement typé, orienté sécurité, + programmation générique, fonctionnelle et objets, modulaire et fonctorielle) +- 2009 : go (google, compilé, typage statique, objets par prototypage, + prgrammation concurrente), Rust (fondation mozilla, multiparadigme, programmation concurrente) + +Les langages actuellement les plus utilisés dans le monde de l'entreprise sont : + +- javascript/NodeJS (70% du code dans le dépôt github) mais victime de son + succès (chaos complet des librairies) +- le go est de plus en plus utilisé, c'est **le** langage qui monte + actuellement +- Python, Ruby, lua, autres langages de scripting (de plus en plus utilisés) +- PHP, Java (stagnants) +- C, C++ (de moins en moins utilisés) + +Approche par typologie des langages +----------------------------------- + +- **A0 (1954)** : possibilité de découpage de programmes en + sous-programmes ; + +- **ALGOL (1958)** : concept de bloc de code (pas forcément nommé) et d'imbrication + de blocs de code ; + +- **C (1971)** : syntaxe claire et simple, programme fortement structuré ; + +- **C (1980)** : le **code objet**, qui consiste à essayer de faire fonctionner + un seul jeu d'instructions sur des machines différentes. Avant, le code + d'assemblage dépendait du processeur, donc il n'y avait pas un seul et unique + jeu d'instructions ; + +- **1980** : déploiement et succès des langages à objets ; + +- **1983** : turbo pascal (Borland) qui fut le tournant du C, + propose un IDE (Environnement de Développement Intégré). + aujourd'hui le turbo pascal a pratiquement disparu mais pas totalement, + il est soutenu par une communauté open source autour de **Lazarus** ; + +- **depuis les années 90** : deux grands groupes de langages. Les langages à + objets, et les langages fonctionnels. Les deux mondes s'interpénètrent (les + avancées actuelles du web, les microservices (Erlang, Haskell), + viennent du monde fonctionnel, le NoSQL, etc). + Les grandes avancées architecturales (système d'exploitation, linux, etc...) + viennent du monde de l'impératif. + + +Approches par modèles de programmation +-------------------------------------- + +- **le mécanisme d'exceptions** : il est possible de rompre l'exécution normale d'un + programme à un endroit et de la reprendre à un autre endroit du programme prévu à + cet effet. Ce mécanisme permet de gérer les situations exceptionnelles. + +- **le paradigme impératif** : les entrées-sorties, les modifications physiques de + valeurs et les structures de contrôle itératives sont possibles. + +- **le paradigme fonctionnel** : manipule les fonctions comme étant des valeurs du + langage. Celles-ci peuvent être utilisées en tant que paramètres d'autres fonctions + ou être retournées comme résultat d'un appel de fonction. + +- **le paradigme objet** : La représentation du programme colle à la réalité en + reproduisant des entités relativement proches des objets réel. Attention, le piège + est de croire qu'il s'agit *du* paradigme universel puisqu'il reproduit en miroir le + réel. **C'est en fait un processus d'abstraction comme un autre**. + +Sûreté du langage, typage +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Tri par ordre de sûreté croissant : + +0. typage très faible (presque inexistant aujourd'hui) : 42 == "42" == 42.0... +1. typage dynamique faible : (javascript) (possibilité de changer le prototype + d'un objet pendant l'éxécution du programme, c'est la fête on peut faire + n'importe quoi) +2. typage dynamique fort inféré par le comportement (behavior, duck typing) + (python, ruby, PHP) Le contenu de la variable détermine le choix du typage + `var = 0 -> type int` +3. typage statique déclaré fort (Java) + `int var = 0 ;` (pas mal mais super lourd, pas **agile** du tout) +4. langages à types statiques muni d'un moteur d'inférence de types (Ocaml) + sûreté d'exécution, agilité, sécurité. + + +La syntaxe, la lisibilité +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Importance de la lisibilité (notamment par rapport aux méthodes agiles). + +- courte (python) +- verbeuse (C) +- l'importance des mots clef du langage +- délimiteur de phrase, de blocs (parenthèses, accolades, tabulations, blocs...) + +Langages compilés ou interprétés ? +----------------------------------- + +- **le typage statique** : la vérification de la compatibilité entre les types des + paramètres formels et des paramètres d'appel est effectuée au moment de la + compilation du programme. Dès lors, il n'est pas nécessaire de faire ces + vérifications durant l'exécution du programme ce qui accroît son efficacité. En + outre, la vérification de type permet d'éliminer la plupart des erreurs introduites + par maladresse ou étourderie et contribue à la sûreté de l'exécution. + +- **le typage dynamique** : la vérification de la compatibilité entre les types des + paramètres formels et des paramètres d'appel est effectuée au moment de l'exécution + ou de l'appel à certaines parties de codes du programme. + +- **le polymorphisme paramétrique** : une fonction ou un objet qui n'explore pas la + totalité de la structure d'un de ses arguments accepte que celui-ci ait un type non + entièrement déterminé. Ce paramètre est alors dit polymorphe. Cette particularité + permet de développer un code générique utilisable pour des structures de données + différentes tant que la représentation exacte de cette structure n'a pas besoin + d'être connue par le code en question. L'algorithme de typage est à même de faire + cette distinction. + +- **l'inférence de types** : le programmeur n'a besoin de donner aucune information + de type à l'intérieur de son programme. Le langage se charge seul de déduire du code + le type le plus général des expressions et des déclarations qui y figurent. Cette + inférence est effectuée conjointement à la vérification, lors de la compilation du + programme. + +Les grands paradigmes de programmation +--------------------------------------- + +Le paradigme des objets +~~~~~~~~~~~~~~~~~~~~~~~ + +- 1962 (SIMULA) : premières notions de classes ; + +Pui, une dizaine d'années plus tard : + +- C++ : intégration des classes pour le C ; +- turbo pascal : intégration des classes pour le pascal ; + +Tous les langages actuels ont intégré des traits objets mais de manière très +différentes : + +- perl (1987) +- python (1991) +- Ruby (1993) + +- L'implémentation des objets en python est très proche des notions initiales de + classes issues du Smaltalk et présente une tentative très intéressante + d'unification des objets et des types depuis python 2.2 ; + +- Java (1995) : très grosse réussite industrielle en surfant sur la vague de la + programmation objet, et des machines virtuelles, mais en fait et avec le recul, + doté d'un support objet lourd et alambiqué. + Le monde Java est lourd, avec des outils consommant beaucoup de mémoire et + qui ne satisfont pas à la règle du KISS (Keep It Simple, Stupid) ; + + +Les supports objets sont riches et variés, + +- objets obligatoirement construits pas des classes (Java, C++, ...) +- objets sans définition de classes (javascript, Ocaml, go, rust) +- langages à attributs (python) +- langages ou le type des objets est défini par leur classe (python, ruby) +- langages ou le type des objets est différent du type de leur classe (Ocaml) +- objets sans classes mais construits par des prototypes (javascript) +- construction d'objets possibles objets sans classe du tout (Ocaml) +- encapsulation des attributs des objets (Java, Ocaml, C++, PHP) +- pas d'encapsulation des attributs (python, ruby, javascript...) + +Le paradigme impératif +~~~~~~~~~~~~~~~~~~~~~~ + +Un programme est une suite d'états de la mémoire de l'ordinateur, +c'est la suite logique des machines de Turing. +La plupart des programmeur aujourd'hui raisonnent suivant ce paradigme, +et ont une très faible visibilité par rapport aux autres paradigmes existants. +Seuls les programmeurs cultivés sont aujourd'hui capable de raisonner +suivant différents paradigmes, ce sont des programmeurs chevronnés et +cultivés. + +Le paradigme fonctionnel +~~~~~~~~~~~~~~~~~~~~~~~~ + +La notion de fonction que possède sous une forme ou une autre la plupart des +langages est empruntée aux mathématiques et non à l'électronique. D'une manière +générale, les langages substituent des modèles formels aux conceptions purement +calculatoires. Ils y gagnent en expressivité. Certains langages fondent leur +paradigme de programmation sur l'abstraction entrée-traitement-sortie, donc sur le +**mathème fonctionnel** et pas sur la boite noire électronique. La fonction +mathématique apporte un niveau opératoire dans le traitement de l'information. + + +Approche par fonctionnalités +---------------------------- + +Plusieurs domaines de l'informatique on proposé/imposé des méthodologies, +des manières de faire. Ces modèles de programmation on fortement influencé +en retour les langages. On reconnaît aujourd'hui : + +- Le modèle client-serveur +- Le modèle de programmation concurrente (exécution de processus légers, threads) : +- Le modèle de développement d'une application de bureau (MVC, ergonomie d'interface) +- Le modèle de développement web (communiquer sur le réseau Internet, API + REST, microservices...) +- Le modèle de programmation système et réseau +- le modèle **Dev Ops** et les méthodes de développement virtualisés +- les langages présentant des **fonctionnalités agiles** diff --git a/algorithmique/cours/modularite.txt b/algorithmique/cours/modularite.txt new file mode 100644 index 0000000..9947bfe --- /dev/null +++ b/algorithmique/cours/modularite.txt @@ -0,0 +1,51 @@ +La programmation modulaire +========================== + +Structuration d'un programme +----------------------------- + +La réalisation d'applications importantes oblige le programmeur ou l'équipe de +développement à se poser des questions d'organisation et de structuration. +Aujourd'hui, on dispose de deux grands modèles d'organisation dont les avantages et les +particularités sont distincts. + +La modularité +~~~~~~~~~~~~~ + +Les données et les traitements sont regroupés au sein d'une même entité à deux +facettes : d'un côté le code proprement dit, de l'autre son interface. La +communication entre modules s'effectue via leur interface. La description d'un +type peut être masquée en n'apparaissant pas dans l'interface du module. Ces +types de données abstraits facilitent les modifications d'implantation à +l'intérieur d'un module sans affecter les autres modules qui s'en servent. De +plus, les modules peuvent être paramétrés par d'autres modules augmentant +ainsi leur réutilisabilité. + +Le paradigme objet +~~~~~~~~~~~~~~~~~~ + +Les descriptions des traitements et des données sont regroupées dans des +entités appelées **classes**; un objet est une instance (valeur) d'une classe. +La communication entre objets est réalisée par envoi de message, l'objet +receveur détermine à l'exécution (liaison retardée) le traitement +correspondant au message. En cela, la programmation objet est dirigée par +les données. La structuration d'un programme provient des relations entre +classes, en particulier l'héritage permet de définir une classe par extension +d'une autre. + +Comparaison entre les deux paradigmes +------------------------------------- + +Il y a dualité entre ces deux modèles. + +- On ne peut pas augmenter les composants d'un type dans un module (pas + d'extensibilité des données), mais on peut ajouter de nouveaux traitements + (extensibilité des traitements) sur ces données. + +- En objet, on peut ajouter des sous-classes à une classe (extensibilité des + données) pour traiter des nouveaux cas, mais on ne peut pas ajouter de nouveaux + traitements visibles de la classe ancêtre (pas d'extensibilité des traitements). + +**La combinaison des deux paradigmes offre de nouvelles extensibilités pour les +traitements et les données.** +