Programmation Orientée Objet en Python
  • Back to Main Website
  • Home
  • Introduction: Histoire et Concepts
    • Introduction: Histoire et Concepts
    • Histoire de la programmation
    • Première Structuration des données
    • Naissance de la POO
    • Python: tout n’est qu’objet
    • Python : Simplicité des objets et performance sous-jacente
    • Classes en Python : Concepts fondamentaux

    • Travaux Pratiques
    • Construire sa propre Liste
    • Construire son propre DataFrame
  • Encapsulation, Héritage, Composition et Dunder
    • Encapsulation, Heritage, Composition et Dunder
    • Encapsulation en Python
    • Héritage en Python : Concept et intérêt
    • Héritage vs Composition
    • Méthodes Dunder en Python
    • Python call Method: A Fun Exploration

    • Travaux Pratiques
    • TP: Heritage avec le pricing d’option
    • TP : Ajouter des méthodes dunder à DataFrameSimple
    • TP : Étendre la classe Liste avec des méthodes dunder
    • TP: Dunder Method with Tensor for Automatic Differentiation
  • Polymorphisme et Surcharge
    • Polymorphisme et Surcharge
    • Polymorphism in Object-Oriented Programming
    • Polymorphism in Python: Function Overloading and Type Checking
    • Class Creation: Standard vs type()
    • Type Hinting, Typing Module, and Linters in Python
    • Abstract Classes
    • Protocol Classes

    • Travaux Pratiques
    • TP
  • Decorators
    • Design Patterns
    • The decorator pattern
    • Decorator Practically
    • Built-in Decorators and Standard Library Decorators in Python
    • Practical Decorators in Python Libraries

    • Travaux Pratiques
    • TP: Monte Carlo Option Pricing with Decorators
    • TP: Optimizing Heston Model Monte Carlo Simulation
  • Project Management and Packaging
    • Project and Package
    • Organizing Python Projects
    • Understanding imports
    • Python Package Management and Virtual Environments
    • Unit Testing in Python

    • Travaux Pratiques
    • TP: Creating a Linear Regression Package
  • Design Patterns
    • OOP Design Patterns
    • Python-Specific Design Patterns
    • Creation Design Patterns
    • Structural Design Patterns
    • Behavioral Design Pattern

    • Travaux Pratiques
    • TP
  • Sujets de Projets possibles
    • Projets
    • Projets POO - 2024-2025
  • Code source
  1. Histoire de la programmation
  • Introduction: Histoire et Concepts
  • Histoire de la programmation
  • Première Structuration des données
  • Naissance de la POO
  • Python: tout n’est qu’objet
  • Python : Simplicité des objets et performance sous-jacente
  • Classes en Python : Concepts fondamentaux
  • Travaux Pratiques
    • Construire sa propre Liste
    • Construire son propre DataFrame

On this page

  • Histoire, évolution et concepts clés des langages de programmation
    • 1. L’ère du langage machine et de l’assembleur
      • 1.1 Le langage machine
      • 1.2 L’avènement de l’assembleur
    • 2. L’émergence des langages de haut niveau
      • 2.1 FORTRAN (FORmula TRANslation)
      • 2.2 COBOL (COmmon Business-Oriented Language)
    • 3. Caractéristiques de la programmation procédurale
      • Avantages :
      • Limites :

Histoire de la programmation

Cours
Introduction
Du binaire à la POO
Author

Remi Genet

Published

2024-10-21

Histoire, évolution et concepts clés des langages de programmation


1. L’ère du langage machine et de l’assembleur

1.1 Le langage machine

Les premiers ordinateurs étaient programmés directement en langage machine, c’est-à-dire en code binaire. Cette méthode présentait plusieurs caractéristiques :

  • Complexité extrême : Les programmeurs devaient écrire des séquences de 0 et de 1 pour chaque instruction.
  • Spécificité au matériel : Chaque type de processeur avait son propre jeu d’instructions en langage machine.
  • Difficulté de maintenance : Le code était pratiquement illisible pour les humains, rendant les corrections et les mises à jour très difficiles.

Exemple simplifié d’addition en langage machine (fictif) :

10110000 01100011 00000001  // Charger la valeur du registre 1 dans l'accumulateur
10110001 01100011 00000010  // Ajouter la valeur du registre 2 à l'accumulateur
10110010 01100011 00000011  // Stocker le résultat dans le registre 3

1.2 L’avènement de l’assembleur

Pour faciliter la programmation, le langage assembleur a été développé. Il présentait plusieurs avantages :

  • Lisibilité améliorée : Utilisation de mnémoniques (ADD, MOV, JMP) au lieu de codes binaires.
  • Correspondance directe : Chaque instruction assembleur correspondait généralement à une instruction en langage machine.
  • Introduction des étiquettes : Permettait de nommer des points dans le programme, facilitant les sauts et les boucles.

Exemple du même calcul en assembleur (syntaxe simplifiée) :

LOAD R1    ; Charger la valeur du registre 1 dans l'accumulateur
ADD R2     ; Ajouter la valeur du registre 2 à l'accumulateur
STORE R3   ; Stocker le résultat dans le registre 3

2. L’émergence des langages de haut niveau

2.1 FORTRAN (FORmula TRANslation)

Développé par IBM en 1957, FORTRAN a révolutionné la programmation :

  • Premier langage de haut niveau largement adopté
  • Conçu pour les calculs scientifiques et l’ingénierie
  • Introduction de concepts comme les boucles et les fonctions

Exemple de calcul d’intérêt composé en FORTRAN :

PROGRAM INTERET_COMPOSE
    REAL PRINCIPAL, TAUX, MONTANT
    INTEGER ANNEES, I

    PRINT *, 'Entrez le principal, le taux (en decimal) et les annees:'
    READ *, PRINCIPAL, TAUX, ANNEES

    MONTANT = PRINCIPAL
    DO I = 1, ANNEES
        MONTANT = MONTANT * (1 + TAUX)
    END DO

    PRINT *, 'Montant final:', MONTANT
END PROGRAM INTERET_COMPOSE

2.2 COBOL (COmmon Business-Oriented Language)

Créé en 1959, COBOL visait les applications commerciales :

  • Syntaxe proche de l’anglais pour faciliter la compréhension
  • Gestion efficace des fichiers et des données structurées
  • Largement utilisé dans les systèmes bancaires et financiers

Exemple simplifié de calcul de salaire en COBOL :

IDENTIFICATION DIVISION.
PROGRAM-ID. CALCUL-SALAIRE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT EMPLOYE-FICHIER ASSIGN TO "employes.dat"
        ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD EMPLOYE-FICHIER.
01 EMPLOYE-ENREG.
    05 EMP-NOM PIC X(20).
    05 EMP-HEURES PIC 9(3).
    05 EMP-TAUX PIC 9(3)V99.

WORKING-STORAGE SECTION.
01 WS-SALAIRE PIC 9(5)V99.
01 WS-EOF PIC A(1).

PROCEDURE DIVISION.
MAIN-PROCEDURE.
    OPEN INPUT EMPLOYE-FICHIER
    PERFORM UNTIL WS-EOF = 'Y'
        READ EMPLOYE-FICHIER
            AT END
                MOVE 'Y' TO WS-EOF
            NOT AT END
                PERFORM CALCUL-AFFICHAGE
        END-READ
    END-PERFORM
    CLOSE EMPLOYE-FICHIER
    STOP RUN.

CALCUL-AFFICHAGE.
    COMPUTE WS-SALAIRE = EMP-HEURES * EMP-TAUX
    DISPLAY EMP-NOM " Salaire: $" WS-SALAIRE.

3. Caractéristiques de la programmation procédurale

La programmation procédurale, illustrée par ces langages, se caractérise par :

  • Séquence d’instructions : Le programme est une suite d’étapes à exécuter.
  • Procédures et fonctions : Le code est organisé en blocs réutilisables.
  • Variables globales et locales : Gestion de l’état du programme.
  • Flux de contrôle linéaire : Utilisation de structures comme les boucles et les conditions.

Avantages :

  • Simplicité relative par rapport au langage machine
  • Possibilité de créer des programmes complexes
  • Facilité d’apprentissage pour les débutants

Limites :

  • Difficulté à gérer des projets très larges
  • Risque élevé d’effets de bord avec les variables globales
  • Manque de représentation naturelle pour certains problèmes du monde réel

Cette approche a dominé la programmation pendant plusieurs décennies, posant les bases pour l’évolution future vers des paradigmes plus avancés, notamment la programmation orientée objet.

Back to top
Introduction: Histoire et Concepts
Première Structuration des données

Programmation Orienté Object en Python, Rémi Genet.
Licence
Code source disponible sur Github

 

Site construit avec et Quarto
Inspiration pour la mise en forme du site ici
Code source disponible sur GitHub