WikiLuc

Guest connection: login: Guest, password: anonymous

User Tools

Site Tools


dit:cours:prog1

Introduction aux concepts des langages de programmation

Les enseignants ne répondent qu'aux messages envoyés en utilisant la page Piazza

Le dépôt GIT du cours

La page dédiée aux projets


Mode d'évaluation

  • Projet 1 (fin-septembre): coefficient 1
  • Projet 2 (fin octobre): coefficient 2
  • Projet 3 (début décembre): coefficient 2
  • Devoir de synthèse sur table (mi-décembre): coefficient 2.5

Les projets sont évalués selon 3 critères

  • Qualité du travail: robustesse du code, solidité de la démonstration
  • Qualité de l'exposé: discours, planches, questions
  • Qualité du rapport: présentation, précision, discussion critique

Les notes de cours (Julie Parreaux, 2016-17)

L'examen de l'année dernière


Cours 14: La vie secrète des objets

Lundi 25 novembre

  • Organisation mémoire, représentation des classes et des objets
  • Cycle de vie des objets: création, copie, destruction
  • Primitives de base: new, delete
  • Méthodes spécifiques: construction, destruction, copie, affectation
  • Gestion mémoire: shared_ptr

Quelques exemples de programmes: gestion du tas, classe dynamique

Documentation C++
  • New: This header describes functions used to manage dynamic storage in C++.
  • Memory elements: This header defines general utilities to manage dynamic memory, shared_ptr, unique_ptr, weak_ptr.
La minute culture: fuites mémoire

In computer science, a memory leak occurs when a computer program incorrectly manages memory allocations. In object-oriented programming, a memory leak may happen when an object is stored in memory but cannot be accessed by the running code. A memory leak has symptoms similar to a number of other problems (see below) and generally can only be diagnosed by a programmer with access to the program. Because they can exhaust available system memory as an application runs, memory leaks are often the cause of or a contributing factor to software aging. Memory leak, Wikipedia

Quelques outils
  • gdb et son interface graphique ddd. Beaucoup de tutoriels sont disponibles: voir par exemple celui de Daniel Hirschkoff, en charge du cours Programmation à l'ENS Lyon.
  • Valgrind, la Rolls des outils d'analyse. Malheureusement très dépendant de la version du système, n'existe souvent pas encore pour les versions les plus récentes.
Tutoriels

Cours 13: Quel bel héritage, cette classe!

Lundi 19 novembre 2018

  • Héritage et visibilité
  • Virtualisation
  • Exceptions
  • Généricité
  • Compléments à étudier en TD
    • Compilation séparée
    • Éléments statiques, méthodes et attributs
    • reference & et move &&
    • Constructeurs, opérateurs d'affectation et destructeurs par défaut
Documentation C++
Bjarne Stroustrup

Le concepteur de C++ est aussi un grand communicant, ce qui a sans doute significativement contribué à la large adoption du langage. Son site personnel déborde d'informations. Vous y trouverez par exemple un grand nombre d'entretiens. Pour un exemple récent, voir Bjarne Stroustrup Discusses C++.

Il maintient une liste des principales questions qui ont été posées à propos de C++. Voir en particulier celles sur l'héritage.

  • Why are member functions not virtual by default?
  • Why don't we have virtual constructors?
  • What is a pure virtual function?
  • Why doesn't C++ have a final keyword?
  • Why doesn't C++ have a universal class Object?
  • Do we really need multiple inheritance?

Plus étonnant, il maintient aussi une liste des grandes applications développées en C++: Geant4, GCC, Google, Microsoft, etc.

Here is a list of systems, applications, and libraries that are completely or mostly written in C++. Naturally, this is not intended to be a complete list. In fact, I couldn't list a 1000th of all major C++ programs if I tried, and this list holds maybe 1000th of the ones I have heard of. It is a list of systems, applications, and libraries that a reader might have some familiarity with, that might give a novice an idea what is being done with C++, or that I simply thought “cool”. Bjarne Stroustrup, Applications


www.stroustrup.com_3rd_front.jpg

Cours 11+12: Quelle classe, ce type!

Lundi 5 novembre et lundi 12 novembre

Thème: une approche sémantique de la programmation objet, ou la programmation objet sans les langages orientés objet

  • Organisation et objectif du cours
  • Historique de la programmation objet
  • Classe et objet
  • Hello world!
  • Types de base, la classe string
  • Expressions, affectations, structures de contrôle
  • Conteneurs: vector
  • Fonctions, passage de paramètres par valeur
  • Pointeurs, passage de paramètres par adresse explicite
  • Exemple: la classe Complex
  • Classes: l'exemple des complexes
  • Membres internes, membres externes, visibilité, fonctions amies
  • Surcharge des opérateurs, opérateurs infixes
  • Le pointeur this
  • Références, passage de paramètre, qualificatif const
  • Compléments
    • Conception modulaire
    • Compilation séparée: make
La lecture de la semaine

l'histoire de C++ et la page Web de Bjarne Stroustrup

parasol.tamu.edu_bs_bjarne2.jpg

The C++ programming language has a history going back to 1979, when Bjarne Stroustrup was doing work for his Ph.D. thesis. One of the languages Stroustrup had the opportunity to work with was a language called Simula, which as the name implies is a language primarily designed for simulations. The Simula 67 language - which was the variant that Stroustrup worked with - is regarded as the first language to support the object-oriented programming paradigm. Stroustrup found that this paradigm was very useful for software development, however the Simula language was far too slow for practical use.

Shortly thereafter, he began work on “C with Classes”, which as the name implies was meant to be a superset of the C language. His goal was to add object-oriented programming into the C language, which was and still is a language well-respected for its portability without sacrificing speed or low-level functionality. His language included classes, basic inheritance, inlining, default function arguments, and strong type checking in addition to all the features of the C language.

[…] In mid-2011, the new C++ standard (dubbed C++11) was finished. The Boost library project made a considerable impact on the new standard, and some of the new modules were derived directly from the corresponding Boost libraries. Some of the new features included regular expression support (details on regular expressions may be found here), a comprehensive randomization library, a new C++ time library, atomics support, a standard threading library (which up until 2011 both C and C++ were lacking), a new for loop syntax providing functionality similar to foreach loops in certain other languages, the auto keyword, new container classes, better support for unions and array-initialization lists, and variadic templates.

Written by Albatross, History of C++

Retour vers le futur

Les discours de Turing Award de Thompson et Ritchie en 1983

  • Kenneth Lane Thompson: Reflections on Software Research, un article étonnamment d'actualité, même s'il a été écrit il y a plus de 30 ans.
  • Dennis MacAlistair Ritchie: Reflections on trustring trust. Probablement l'un des premiers articles sur la possibilité de fabrication de virus informatique. Lisez le début, mais essayez de trouver la solution tout seuls!

Cours 1-6: Caml

Voir la page dédiée.


Bibliographie

Langages de programmation

Measuring programming language popularity It is difficult to determine which programming languages are most widely used, and what usage means varies by context. One language may occupy the greater number of programmer hours, a different one have more lines of code, a third may utilize the most CPU time, and so on. Some languages are very popular for particular kinds of applications. For example, COBOL is still strong in the corporate data center, often on large mainframes; FORTRAN in engineering applications; C in embedded applications and operating systems; and other languages are regularly used to write many different kinds of applications.

C

C++


Outils, environnements de programmation, etc.

Ubuntu virtuel

Attention à bien installer le CD VBoxGuestAdditions.iso pour avoir accès aux fichiers de votre machine hôte de manière transparente.

Environnement de développement

  • Linux: Geany
  • Mac: Atom
  • Pour les pros: (Gnu) Emacs
  • Environnements intégrés: CLion (recommandé, gratuit pour les universitaires), Eclipse, etc.

Un site ressource sur les environnements de développement C++: la page Wikipedia sur les environnements de développement intégré (IDE)

Tous les projets sont corrigés sous Linux Ubuntu. C'est votre responsabilité que de vérifier que tout marche bien dans cet environnement si vous développez autrement.

C++

Documentation C++ de référence: https://en.cppreference.com/

What is the purpose of this site?

Our goal is to provide programmers with a complete online reference for the C and C++ languages and standard libraries, i.e. a more convenient version of the C and C++ standards.

The primary objective is to have a good specification of C and C++. That is, things that are implicitly clear to an experienced programmer should be omitted, or at least separated from the main description of a function, constant or class. A good place to demonstrate various use cases is the “example” section of each page. Rationale, implementation notes, domain specific documentation are preferred to be included in the “notes” section of each page. https://en.cppreference.com/

Tout le cours est construit sur le compilateur GNU g++ version 8 et les outils GNU standard: make, gdb, etc. Nous utiliserons aussi des outils avancés comme valgrind. L'environnement recommandé est Linux Ubuntu, mais vous pouvez tout à fait travailler sur Windows ou Mac.

dit/cours/prog1.txt · Last modified: 2018/12/05 18:37 by luc.bouge