Section courante

A propos

Section administrative du site

 Langage  Elément  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Notion de typage
Types scalaires
Structure statique
Types abstraits
Structures dynamiques
Structures dynamiques linéaires non-récursives (les fichiers)
Structures récursives linéaires
Structures récursives non linéaires
Structures de données simples
Structures adressables par leur contenu
Ramasse-miettes (Garbage Collection)
Liste symétrique
Pile
File d'attente circulaire
Arbre
Évaluation d'expression («Infix to Postfix»)
Évaluation d'expression (par remplacement)
Recherche dichotomique (recherche binaire ou recherche logarithmique)
Table haché (Hash Table)
Préface
Notes légal
Dictionnaire
Recherche

Notion de typage

On entend par «typage», l'association d'un type à un objet (souvent une variable), d'un ensemble de valeurs supportées (ou possible) ou d'une liste d'opérations applicable sur ces valeurs. L'idée dernière cette notion, s'est qu'il faut intégré une forme de conformité afin que le langage de programmation est la possibilité de vérifier que les valeurs fournies ont le même sens pour tous (qu'ils sont compatibles avec l'opération) et que l'opération ne rentre pas en contradiction avec la réaction doit avoir ce type d'opération. Par exemple, si vous faites 1 + 1, vous vous attendez à avoir 2 comme réponse et non pas 10 ! Ainsi, le typage doit être pareil pour tous !

Différence de typage

Les langages de programmation n'ayant pas de type, aussi appelé non-typé, désigne essentiellement les langages machine, soit un ensemble de valeurs de type entières correspondant à un ensemble d'instructions de machine précise. Le langage machine est soit utilisé directement sur les puces électroniques (par les manufacturiers) ou les machines virtuelles. Ainsi, dans le domaine de l'éducation, scientifique, du gouvernement ou du commerce, ils ne sont pas utilisés.

De leur côté, les langages de programmation assembleurs, toujours directement associés avec les caractéristiques physiques du microprocesseur ou du jeu d'instructions d'une machine virtuel, offrent la possibilité d'associer des mnémoniques aux différentes opérations pouvant être effectuées. A ce niveau, nous avons encore un typage très faible, puisqu'il est par exemple possible de déclarer des constantes de nombre entier dans différentes bases, des constantes de caractère, des constantes de chaine de caractères et des constantes de nombre réel. Il n'existe pourtant aucun contrôle lorsqu'on parle de la correspondance entre le type de la constante et l'opération à effectuer. Par exemple, le caractère «A» pourrait être perçu aussi bien comme le chiffre 65, que comme la valeur booléenne vraie.

Pour les langages de programmation détachée de la machine, il y a trois lignes de pensées, le typage est fort, le typage moyen ou le typage faible. Le typage fort est fortement incrusté dans les langages de programmation comme le Pascal, le C, le C# et le Java par exemple. Le typage moyen est présent dans des langages de programmation comme BASIC et Fortran. Le typage faible est présent dans des langages de programmation comme LISP, PROLOG, PHP, Perl. Durant la période des années 1965 à 1995, la tendance s'alignait vers le typage fort, comme par avec l'Algol (1968), Pascal (1971), Modula-2 (1980) et l'Ada (1980), Java (1995), mais après cette période et l'arrivée de l'INTERNET, l'intérêt pour les typages faibles et les typages moyens est revenu à la hausse. La raison pour laquelle le typage fort était préconisé résidait dans le fait qu'il était presque toujours compilé et qu'ainsi il était possible de déceler de nombreuses erreurs avant l'exécution du programme. De plus, à l'occasion, il permet de déceler des incohérences.

Contrôle de typage

Le contrôle de typage est un mécanisme dans les langages de programmation garantissant que les opérations effectuées sur des variables sont compatibles avec les types de données associés. Il existe deux approches principales pour vérifier si deux types sont équivalents ou compatibles : l'équivalence de nom et l'équivalence de structure. Chaque langage de programmation implémente ces approches de manière différente, ce qui influe sur la rigueur du typage et la sécurité du programme.

Équivalence de nom

L'équivalence de nom repose sur l'idée que deux types sont considérés comme équivalents uniquement s'ils ont été explicitement déclarés sous le même nom. Cela signifie que même si deux types ont des structures identiques, ils ne seront pas considérés comme compatibles s'ils portent des noms différents. Cette approche est plus stricte et garantit que les développeurs ne confondent pas des types de données similaires, mais conceptuellement différents.

Voici un exemple en Pascal :

  1. Type
  2.  TPerson=Record
  3.   Name:String;
  4.   Age:Integer;
  5.  End;
  6.   
  7.  TEmployee=Record
  8.   Name:String;
  9.   Age:Integer;
  10.  End;

Dans ce cas, bien que TPerson et TEmployee aient exactement la même structure (deux champs Name et Age), ils ne seront pas considérés comme équivalents sous le principe de l'équivalence de nom.

Équivalence de structure

L'équivalence de structure se concentre sur la composition interne des types. Deux types sont considérés comme équivalents s'ils ont la même structure, c'est-à-dire qu'ils contiennent les mêmes champs ou composantes dans le même ordre et avec les mêmes types de données. Ici, le nom du type n'est pas important tant que les structures sont identiques.

Voici un exemple en langage de programmation C (utilisant parfois l'équivalence de structure) :

  1. struct Person {
  2.     char* name;
  3.     int age;
  4. };
  5.  
  6. struct Employee {
  7.     char* name;
  8.     int age;
  9. };

En langage de programmation C, struct Person et struct Employee pourraient être considérés comme équivalents dans certains contextes car leurs structures sont identiques, même si leurs noms diffèrent. Cette approche offre plus de flexibilité au programmeur, mais elle peut également introduire des risques si des types semblant similaires mais ayant des usages différents sont confondus.

Cas de quelques langages d'usage courant

Les langages de programmation populaires adoptent différentes stratégies de contrôle de typage en fonction de leurs objectifs et de leur conception :

Nomenclature

La nomenclature fait référence à l'ensemble des règles, des conventions et des principes utilisés pour nommer et classifier les différents types de données dans un programme. Ces conventions sont cruciales pour maintenir une organisation claire et cohérente des données, permettant une compréhension rapide et efficace du code par les développeurs.

La nomenclature dans la notion de types se concentre principalement sur la manière dont les types de données, qu'ils soient primitifs ou complexes, sont nommés et organisés dans le code. Cela inclut la création de types de données personnalisés (comme les structures, les classes ou les énumérations) et leur utilisation cohérente. Une bonne nomenclature permet non seulement de rendre le code lisible, mais aussi de minimiser les erreurs liées à une mauvaise utilisation des types de données.

Rôle et importance de la nomenclature dans les types

Exemples de nomenclature des types en Pascal :

  1. Type
  2.  TPerson=Record
  3.   FirstName:String;
  4.   LastName:String;
  5.   Age:Integer;
  6.  End;

En résumé, la nomenclature dans la notion de types est essentielle pour s'assurer que les structures de données soient faciles à comprendre, à utiliser et à maintenir. Elle contribue à une bonne lisibilité du code et à une gestion efficace des erreurs de types dans les programmes.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Samedi, le 8 avril 2017