Logo: Marc Harnist

Index des pages de la catégorie "Lexicon"

API(Application Programming Interface)
Le 11/04/2018
Auteur: Marc L. Harnist

Extrait:

En informatique, une interface de programmation applicative (souvent désignée par le terme API pour application programming interface) est un ensemble normalisé de classes, de méthodes ou de fonctions qui sert de façade par laquelle un logiciel offre des services à d'autres logiciels. Elle est" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

En informatique, une interface de programmation applicative (souvent désignée par le terme API pour application programming interface) est un ensemble normalisé de classes, de méthodes ou de fonctions qui sert de façade par laquelle un logiciel offre des services à d'autres logiciels. Elle est offerte par une bibliothèque logicielle ou un service web, le plus souvent accompagnée d'une description qui spécifie comment des programmes consommateurs peuvent se servir des fonctionnalités du programme fournisseur.

Dans l'industrie contemporaine du logiciel, les applications informatiques se servent de nombreuses interfaces de programmation, la programmation se fait en réutilisant des briques de fonctionnalités fournies par des logiciels tiers. Cette construction par assemblage nécessite pour le programmeur de connaître la manière d’interagir avec les autres logiciels, qui dépend de leur interface de programmation. Le programmeur n'a pas besoin de connaître les détails de la logique interne du logiciel tiers, et celle-ci n'est généralement pas documentée par le fournisseur.

Des logiciels tels que les systèmes d'exploitation, les systèmes de gestion de base de données, les langages de programmation, ou les serveurs d'applications comportent une interface de programmation.

Source: wikipedia

Abstract: les classes abstraites (en français)
Le 20/03/2018
Auteur: Marc

Extrait:

bloquer la création d'un objet à partir de la classe parente:
abstract class Vehicule{} // on ne peut pas créer un objet de la classe véhicule. Uniquement des classes enfants: bateau, vélocypède...

Fonctions abstract
public abstract function demarrer(); // ici, dan" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

bloquer la création d'un objet à partir de la classe parente:
abstract class Vehicule{} // on ne peut pas créer un objet de la classe véhicule. Uniquement des classes enfants: bateau, vélocypède...

Fonctions abstract
public abstract function demarrer(); // ici, dans la classe parente on exige que les classes enfants implémentent cette fonction (elle doivent la posséder et l'utiliser)

En java: on définie une méthode abstraite dans un classe abstraite pour expliquer que la méthode sera définie dans la classe enfant.
On ne peut pas instancier une classe abstraite. Il faut instancier la classe fille.


Apple exigeant pour les vidéos mobile-first
Le 12/06/2018
Auteur: Marc L. Harnist

Extrait:

Pour les vidéos:
Les iPhone, iPad et iPod ne reconnaissent à l'heure actuelle que le format H.264 (fichier.mp4)… et uniquement si celui-ci apparaît en premier dans la liste ! Je vous recommande donc d'indiquer le format H.264 en premier pour assurer une compatibilité maximale.
" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Pour les vidéos:
Les iPhone, iPad et iPod ne reconnaissent à l'heure actuelle que le format H.264 (fichier.mp4)… et uniquement si celui-ci apparaît en premier dans la liste ! Je vous recommande donc d'indiquer le format H.264 en premier pour assurer une compatibilité maximale.

< video controls poster="sintel.jpg" width="600">
< source src="sintel.mp4">
< source src="sintel.webm">
< source src="sintel.ogv">
< /video>

Il existe plusieurs formats audio et vidéo. Il faut notamment connaître :
- pour l'audio : MP3 et Ogg Vorbis ;
- pour la vidéo : H.264, Ogg Theora et WebM.

Aucun format n'est reconnu par l'ensemble des navigateurs : il faut proposer différentes versions de sa musique ou de sa vidéo pour satisfaire tous les navigateurs.

Arbre
Le 11/04/2018
Auteur: Marc L. Harnist

Extrait:

Une page Web est un ensemble de balises imbriquées. Vous pouvez le représenter sous une forme hiérarchique appelée un arbre . L' < html> élément configure votre document en HTML et contient deux sous-éléments, < head>et < body>qui eux-mêmes contiennent plusieurs sous-éléments.??
" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Une page Web est un ensemble de balises imbriquées. Vous pouvez le représenter sous une forme hiérarchique appelée un arbre . L' < html> élément configure votre document en HTML et contient deux sous-éléments, < head>et < body>qui eux-mêmes contiennent plusieurs sous-éléments.??
Chaque entité de l'arbre est appelée un nœud.

Caster en Java: cast = conversion
Le 09/07/2018
Auteur: Marc L. Harnist

Les variables en java ont un type: int, double, string... On peut convertir une variable vers un autre type: double en int par exemple. Ce type de conversion s'appelle une « conversion d'ajustement », ou cast de variable." (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Collection en Java
Le 09/07/2018
Auteur: Marc L. Harnist

Extrait:

Java (et donc Eclipse) contient des classes qui permettent de lister et lire des données plus simplement qu'en tableaux (array)
Source
Une collection perm" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Java (et donc Eclipse) contient des classes qui permettent de lister et lire des données plus simplement qu'en tableaux (array)
Source
Une collection permet de stocker un nombre variable d'objets.
Il y a principalement trois types de collection : les List, les Set et les Map.
Chaque type a ses avantages et ses inconvénients.
Les Collection stockent des objets alors que les Map stockent un couple clé - valeur.
Pour insérez fréquemment des données en milieu de liste, utilisez une LinkedList.
Pour rechercher ou accéder à une valeur via une clé de recherche, optez pour une collection de type Map.
Pour une grande quantité de données à traiter, tournez-vous vers une liste de type Set.

Voir les notes sur les collections en java.

Core
Le 12/04/2018
Auteur: Marc L. Harnist

Core c'est le coeur: noyau. En symfony: coeur.
" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Diagramme de class
Le 19/03/2018

Extrait:

Source: Terence de Sylvan

Plan avec de cases, des flèches, de interactions entre les méthodes et les attributs des classe: un objet possède, envoie, publie, fait, ces actions sont notées sur des flêches qui vont d'une case ou d'un cadre à l'autre.
0.. 1 : l'objet peut avo" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Source: Terence de Sylvan

Plan avec de cases, des flèches, de interactions entre les méthodes et les attributs des classe: un objet possède, envoie, publie, fait, ces actions sont notées sur des flêches qui vont d'une case ou d'un cadre à l'autre.
0.. 1 : l'objet peut avoir 0 ou 1 attribut
0.. * : optionnel et à l'infini

Dom; DOM (Document Object Model)
Le 11/04/2018
Auteur: Marc L. Harnist

Document Object Model . Le DOM définit la structure d'une page et un moyen d'interagir avec elle. Cela signifie que c'est une interface de programmation, ou API (Application Programming Interface)!" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Encapsulation
Le 06/07/2018
Auteur: Marc L. Harnist

Extrait:

En POO, les classes, les attributs et les méthodes bénéficient de niveaux d'accessibilité, qui indiquent dans quelles circonstances on peut accéder à ces éléments.

Il y a quatre niveaux avec trois mots-clés : private, protected et public. La quatrième : rien n'est spécifi" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

En POO, les classes, les attributs et les méthodes bénéficient de niveaux d'accessibilité, qui indiquent dans quelles circonstances on peut accéder à ces éléments.

Il y a quatre niveaux avec trois mots-clés : private, protected et public. La quatrième : rien n'est spécifié: (comportement par défaut).
encapsulation.jpg

Enum mot clef pour énumération en Java
Le 06/07/2018
Auteur: Marc L. Harnist

Voir le cours sur Java" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Généricité
Le 09/07/2018
Auteur: Marc L. Harnist

Extrait:

En java, permet de définir le type d'un objet: nombre ou chaîne de manière dynamique.
On ne voit pas trop l'intérêt. Mais bon, il fallait le savoir.
En programmation, la généricité (ou programmation générique), consiste à définir des algorithmes identiques opérant sur des " (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

En java, permet de définir le type d'un objet: nombre ou chaîne de manière dynamique.
On ne voit pas trop l'intérêt. Mais bon, il fallait le savoir.
En programmation, la généricité (ou programmation générique), consiste à définir des algorithmes identiques opérant sur des données de types différents.

Cours sur OPC

Héritage: __construct avec classe parent
Le 19/03/2018

Les héritages de classes permettent d'éviter les doublons.

Pour demander de construire un objet avec la classe parente:
public function __construct(){
parent::__construct();
}

" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Héritages de classes
Le 20/03/2018

Extends permet d'utiliser les méthodes d'une autre classe.
class Bateau extends Vehicule: l'objet créé dans bateau hérite des fonctions de la classe Vehicule." (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

IDE
Le 11/06/2018
Auteur: Marc L. Harnist

Extrait:

Integrated Development Environment: IDE

Un environnement de développement intégré ( IDE ) est une application logicielle qui fournit des outils complets aux programmeurs pour le développement de logiciels . Un IDE se compose normalement d'un éditeur de code source , d' outils d'a" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Integrated Development Environment: IDE

Un environnement de développement intégré ( IDE ) est une application logicielle qui fournit des outils complets aux programmeurs pour le développement de logiciels . Un IDE se compose normalement d'un éditeur de code source , d' outils d'automatisation de génération et d'un débogueur . La plupart des IDE modernes ont un code intelligent . Certains IDE, tels que NetBeans et Eclipse , contiennent un compilateur.

Interface: les classes interfaces (voir aussi: abstraite)
Le 06/07/2018
Auteur: Marc L. Harnist

Extrait:

Une interface est une classe abstraite dont toutes les méthodes sont abstraites et dont tous les attributs sont constants. (Constantes).
Depuis Java 8, elle ne sont plus obligatoirement toutes abstraites. On peut maintenant y définir des méthodes statiqu" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Une interface est une classe abstraite dont toutes les méthodes sont abstraites et dont tous les attributs sont constants. (Constantes).
Depuis Java 8, elle ne sont plus obligatoirement toutes abstraites. On peut maintenant y définir des méthodes statiques et une définition par défaut des méthodes.
C'est:
Liste de méthodes dont on donne seulement la signature
C'est comme un contrat: ce qu'on attend d'un objet
Peut être implémentée par une ou plusieurs classes qui doivent donner une implémentation pour chacune des méthodes annoncées (et éventuellement d'autres).
Une classe peut implémenter plusieurs interfaces (permettant un héritage multiple, en les séparant par des virgules après le mot (code) "implements").
Toutes les méthodes d'une interface sont implicitement abstraites.
Une interface n'a pas de constructeurs
Une interface ne peut avoir des champs mais uniquement statiques.
Une interface peut être étendue par une ou plusieurs interfaces.

List en java
Le 09/07/2018
Auteur: Marc L. Harnist

En java, une list (anglais) est une collection." (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Module
Le 06/04/2018
Auteur: Marc L. Harnist

Extrait:

Source: wikipedia


Un module désigne originellement un fichier de code de programmation ou un fichier de bibliothèque statique ou dynamique.

Pour reprendre l'image de la programmation objet, un module est une instance unique qui n'utilise pas d'héritage et ne " (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Source: wikipedia


Un module désigne originellement un fichier de code de programmation ou un fichier de bibliothèque statique ou dynamique.

Pour reprendre l'image de la programmation objet, un module est une instance unique qui n'utilise pas d'héritage et ne contient aucun module fils. Chaque module peut exporter ou importer certains symboles comme des variables, des fonctions ou des classes. Les modules peuvent se regrouper en package (espace de noms) éventuellement hiérarchique.

Dans l'histoire de la programmation, la programmation modulaire succède à la programmation procédurale et donnera naissance à la programmation orientée objet.

Typiquement quand on parle de programmation modulaire on parle du C qui a utilisé, en premier lieu, ce principe pour scinder la compilation de projet. Dans ce cas, un module est identifié par un fichier de déclaration (en-têtes ou prototypes) et un fichier de description (définition ou code). On n'est plus obligé de recompiler l'ensemble d'un programme lorsque seuls quelques modules sont modifiés. Les fonctions et variables déclarées dans le fichier de déclaration sont publiques et peuvent être utilisées par n'importe quel autre module, il s'agit de l'interface du module. Les fonctions et variables déclarées dans le fichier de description sont privées et ne peuvent être utilisées que par ce module particulier.

En Java, on n'utilise généralement pas le terme de module, mais certains compilateurs permettent de déclarer plusieurs classes successives (sans imbrication) dans un même fichier. On peut alors considérer un fichier de code Java comme un module contenant un ensemble de classes.

Noeud
Le 11/04/2018
Auteur: Marc L. Harnist

Extrait:

Une page Web est un ensemble de balises imbriquées. Vous pouvez le représenter sous une forme hiérarchique appelée un arbre . L' < html> élément configure votre document en HTML et contient deux sous-éléments, < head>et < body>qui eux-mêmes contiennent plusieurs sous-éléments.??
" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Une page Web est un ensemble de balises imbriquées. Vous pouvez le représenter sous une forme hiérarchique appelée un arbre . L' < html> élément configure votre document en HTML et contient deux sous-éléments, < head>et < body>qui eux-mêmes contiennent plusieurs sous-éléments.??
Chaque entité de l'arbre est appelée un nœud . Il existe deux types de nœuds:

Ceux qui correspondent aux éléments HTML aiment < body> ou < p>. Ces nœuds peuvent avoir des sous-nœuds appelés enfants.

Ceux qui correspondent au contenu textuel de la page. Ces nœuds n'ont pas d'enfants.

Chaque objet a une propriété appelée nodeType qui indique son type. La valeur de cette propriété est document.ELEMENT_NODE pour un noeud "element" (également connu sous le nom de balise HTML) et document.TEXT_NODE pour un noeud de texte.

Protected vs private en POO
Le 20/03/2018
Auteur: Marc

private: données réservées à la classe
protected: données non publiques mais partagées avec les classes enfants (extend)" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Role (html élément)
Le 11/10/2018
Auteur: Marc L. Harnist

Extrait:

Pour le web, l'attribut role s'utilise dans le cadre d'ARIA : http://fr.wikipedia.org/wiki/Accessible_Rich_Internet_Applications
Il permet de décrire le ... rôle des éléments. En français pas technique, ça " (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Pour le web, l'attribut role s'utilise dans le cadre d'ARIA : http://fr.wikipedia.org/wiki/Accessible_Rich_Internet_Applications
Il permet de décrire le ... rôle des éléments. En français pas technique, ça permet de décrire : "cette liste c'est la navigation, ce formulaire c'est la recherche, ce tableau indigeste est une application et chaque composant en est décrit, ce champ est obligatoire, ..." et bien plus : "tel élément a été mis à jour depuis que la page a été chargée" est une info utile pour un non-voyant qui arrivé à la fin de la page ne saura jamais que la page a changé vers le début (idem pour un mal-voyant qui zoome sur une partie de l'écran).
Modifié par Felipe (03 Jun 2010 - 17:30)

Source: forum.alsacreations.com

Self
Le 20/03/2018
Auteur: Marc

Extrait:

class Voiture{

private $couleur;
private $poids = 2.186;

protected $cle = "Marc";
protected $estDemarre = False;
protected $estArrete = False;

const MARQUE = "BMW"; // comment créer une constante. On peut l'appeler n'importe o" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

class Voiture{

private $couleur;
private $poids = 2.186;

protected $cle = "Marc";
protected $estDemarre = False;
protected $estArrete = False;

const MARQUE = "BMW"; // comment créer une constante. On peut l'appeler n'importe où avec: echo Voiture::

protected static $nbVoituresCrees = 0;//variable de classe.

public function __construct(){

// self cherche une variable dans la classe elle-même en cours
self::$nbVoituresCrees++; // self remplace: Voiture::$nbVoituresCrees++; ou static::$nbVoituresCrees
$this->numero = self::$nbVoituresCrees;
echo "Voiture numéro " . $this->numero."créée.";
}

Serialiser
Le 10/07/2018
Auteur: Marc L. Harnist

Extrait:

Sauvegarder un objet. Exemple en java avec la package natif "Serializable"
//Package à importer
import java.io.Serializable;

public class Game implements Serializable{
private String nom, style;
private double prix;

public Game(String" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Sauvegarder un objet. Exemple en java avec la package natif "Serializable"
//Package à importer
import java.io.Serializable;

public class Game implements Serializable{
private String nom, style;
private double prix;

public Game(String nom, String style, double prix) {
this.nom = nom;
this.style = style;
this.prix = prix;
}

public String toString(){
return "Nom du jeu : " + this.nom + "\n
Style de jeu : " + this.style + "\n
Prix du jeu : " + this.prix + "\n";
}
}

Static
Le 20/03/2018
Auteur: Marc

Extrait:

Une classe, comme un objet, peut avoir ses attributs. On utilise "static" pour les définir.
Exemple: protected static $compteur = 0; ou public static $compteur = 0; ou private static $compteur=0;
On accède à l'attribut de la classe grâce à ::
Exemple: $this->id = static::$c" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Une classe, comme un objet, peut avoir ses attributs. On utilise "static" pour les définir.
Exemple: protected static $compteur = 0; ou public static $compteur = 0; ou private static $compteur=0;
On accède à l'attribut de la classe grâce à ::
Exemple: $this->id = static::$compteur;


Dans la classe ci-dessous on peut remplacer self par static:

class Voiture{

private $couleur;
private $poids = 2.186;

protected $cle = "Marc";
protected $estDemarre = False;
protected $estArrete = False;

const MARQUE = "BMW"; // comment créer une constante. On peut l'appeler n'importe où avec: echo Voiture::

protected static $nbVoituresCrees = 0;//variable de classe.

public function __construct(){

// self cherche une variable dans la classe elle-même en cours
self::$nbVoituresCrees++; // self remplace: Voiture::$nbVoituresCrees++; ou static::$nbVoituresCrees
$this->numero = self::$nbVoituresCrees;
echo "Voiture numéro " . $this->numero."créée.";
}
Ce qui donne:
// self cherche une variable dans la classe elle-même en cours
static::$nbVoituresCrees++; // static remplace: Voiture::$nbVoituresCrees++;
$this->numero = static::$nbVoituresCrees;

Symfony sur GitHub
Le 19/03/2018
Auteur: Marc L. Harnist

Extrait:

Source: GitHub

Symfony is a PHP framework for web applications and a set of reusable PHP components. Symfony is used by thousands of web applications (including BlaBlaCar.com and Spotify.com) and most of the popula" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Source: GitHub

Symfony is a PHP framework for web applications and a set of reusable PHP components. Symfony is used by thousands of web applications (including BlaBlaCar.com and Spotify.com) and most of the popular PHP projects (including Drupal and Magento).

Symfony est un framework PHP pour les applications web et un ensemble de composants PHP réutilisables. Symfony est utilisé par des milliers d'applications Web (y compris BlaBlaCar.com et Spotify.com) et la plupart des projets PHP populaires (y compris Drupal et Magento).

Symfony sémantique et les versions ou "Sémantic versioning"!
Le 19/03/2018
Auteur: Marc L. Harnist

Extrait:

Source: https://semver.org/

tic Versioning 2.0.0
Récapitulatif
Avec un numéro de version MAJOR.MINOR.PATCH, incrémentez la

version : MAJOR lorsque vous effectuez des modifications d'API incompatibles, la
version MINOR lorsque vous ajoutez des" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Source: https://semver.org/

tic Versioning 2.0.0
Récapitulatif
Avec un numéro de version MAJOR.MINOR.PATCH, incrémentez la

version : MAJOR lorsque vous effectuez des modifications d'API incompatibles, la
version MINOR lorsque vous ajoutez des fonctionnalités de manière rétrocompatible (rétrocompatible: En parlant d’un matériel ou logiciel, signifie qu’il prend en charge le même ensemble d’instructions, de services (ou de périphériques) qu’un système plus ancien.) et la
version PATCH lorsque vous effectuez des versions rétrocompatibles. corrections de bugs.
Des étiquettes supplémentaires pour les métadonnées de version préliminaire et de compilation sont disponibles en tant qu'extensions du format MAJOR.MINOR.PATCH.

Introduction
Dans le monde de la gestion de logiciels, il existe un endroit redoutable appelé «enfer de dépendance». Plus votre système grandit et plus vous intégrez de paquets dans votre logiciel, plus vous avez de chance de vous retrouver un jour dans cette fosse de désespoir. .

Dans les systèmes avec de nombreuses dépendances, la libération de nouvelles versions de paquet peut rapidement devenir un cauchemar. Si les spécifications de dépendance sont trop strictes, vous risquez de perdre la version (l'impossibilité de mettre à niveau un paquet sans avoir à libérer de nouvelles versions de chaque paquet dépendant). Si les dépendances sont spécifiées trop lâchement, vous serez inévitablement mordu par la promiscuité de la version (en supposant la compatibilité avec plus de versions futures que ce qui est raisonnable). L'enfer des dépendances est l'endroit où vous êtes lorsque le verrouillage de la version et / ou la promiscuité de la version vous empêchent de faire avancer votre projet facilement et en toute sécurité.

Pour résoudre ce problème, je propose un ensemble de règles et d'exigences qui dictent la façon dont les numéros de version sont attribués et incrémentés. Ces règles sont basées, mais pas nécessairement limitées, sur les pratiques courantes répandues préexistantes utilisées dans les logiciels fermés et ouverts. Pour que ce système fonctionne, vous devez d'abord déclarer une API publique. Cela peut consister en une documentation ou être appliqué par le code lui-même. Peu importe, il est important que cette API soit claire et précise. Une fois que vous avez identifié votre API publique, vous lui communiquez des modifications avec des incréments spécifiques à votre numéro de version. Considérons un format de version de XYZ (Major.Minor.Patch). Les correctifs de bogues n'ayant aucune incidence sur l'API incrémentent la version du correctif, les ajouts / modifications d'API rétrocompatibles incrémentent la version mineure et les modifications d'API incompatibles vers l'arrière incrémentent la version majeure.

J'appelle ce système "Version sémantique". Sous ce schéma, les numéros de version et la manière dont ils changent transmettent une signification au code sous-jacent et ce qui a été modifié d'une version à l'autre.

Spécification de versionnement sémantique (SemVer)
Les mots clés «DOIT», «NE DOIT PAS», «OBLIGATOIRE», «DEVRAIT», «NE DOIT PAS», «DEVRAIT», «NE DEVRAIT PAS», «RECOMMANDÉ», «MAI» et « FACULTATIF "dans ce document doivent être interprétés comme décrit dans RFC 2119. Le

logiciel utilisant la version sémantique DOIT déclarer une API publique. Cette API pourrait être déclarée dans le code lui-même ou exister strictement dans la documentation. Cependant, c'est fait, il devrait être précis et complet.

Un numéro de version normal DOIT prendre la forme XYZ où X, Y et Z sont des entiers non négatifs, et NE DOIT PAS contenir de zéros en tête. X est la version majeure, Y est la version mineure et Z est la version du correctif. Chaque élément DOIT augmenter numériquement. Par exemple: 1.9.0 -> 1.10.0 -> 1.11.0.

Une fois qu'un paquetage versionné a été publié, le contenu de cette version NE DOIT PAS être modifié. Toute modification DOIT être publiée en tant que nouvelle version.

La version majeure zéro (0.yz) est pour le développement initial. Tout peut changer à tout moment. L'API publique ne doit pas être considérée comme stable.

La version 1.0.0 définit l'API publique. La manière dont le numéro de version est incrémenté après cette version dépend de cette API publique et de la façon dont elle change.

La version du correctif Z (xyZ | x> 0) DOIT être incrémentée si seules les corrections de bogues rétrocompatibles sont introduites. Une correction de bogue est définie comme une modification interne qui corrige un comportement incorrect.

La version mineure Y (xYz | x> 0) DOIT être incrémentée si une nouvelle fonctionnalité rétrocompatible est introduite dans l'API publique. Il DOIT être incrémenté si une fonctionnalité d'API publique est marquée comme obsolète. Il PEUT être incrémenté si de nouvelles fonctionnalités substantielles ou améliorations sont introduites dans le code privé. Il PEUT inclure des changements de niveau de patch. La version du correctif DOIT être réinitialisée à 0 lorsque la version mineure est incrémentée.

La version majeure X (Xyz | X> 0) DOIT être incrémentée si des modifications incompatibles vers l'arrière sont introduites dans l'API publique. Il PEUT inclure des modifications de niveau mineur et correctif. La version patch et mineure DOIT être réinitialisée à 0 lorsque la version majeure est incrémentée.

Une version préliminaire peut être désignée en ajoutant un trait d'union et une série d'identifiants séparés par des points immédiatement après la version du correctif. Les identificateurs DOIVENT comprendre uniquement des caractères alphanumériques ASCII et un trait d'union [0-9A-Za-z-]. Les identifiants NE DOIVENT PAS être vides. Les identificateurs numériques NE DOIVENT PAS inclure de zéros en tête. Les versions préliminaires ont une priorité inférieure à la version normale associée. Une version préliminaire indique que la version est instable et peut ne pas satisfaire aux exigences de compatibilité prévues, comme indiqué par sa version normale associée. Exemples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.

Construire des métadonnées PEUT être noté en ajoutant un signe plus et une série d'identifiants séparés par des points immédiatement après le patch ou la version préliminaire. Les identificateurs DOIVENT comprendre uniquement des caractères alphanumériques ASCII et un trait d'union [0-9A-Za-z-]. Les identifiants NE DOIVENT PAS être vides. Les métadonnées de construction DEVRAIENT être ignorées lors de la détermination de la priorité des versions. Ainsi, deux versions qui ne diffèrent que par les métadonnées de construction ont la même priorité. Exemples: 1.0.0-alpha + 001, 1.0.0 + 20130313144700, 1.0.0-beta + exp.sha.5114f85.

La préséance fait référence à la façon dont les versions sont comparées les unes aux autres lorsqu'elles sont commandées. La priorité DOIT être calculée en séparant la version en identificateurs majeurs, mineurs, de correctifs et de versions préliminaires dans cet ordre (les métadonnées de construction ne sont pas prioritaires). La priorité est déterminée par la première différence lors de la comparaison de chacun de ces identificateurs de gauche à droite: Les versions majeure, mineure et de correctif sont toujours comparées numériquement. Exemple: 1.0.0 <2.0.0 <2.1.0 <2.1.1. Lorsque majeur, mineur et correctif sont égaux, une version préliminaire a une priorité inférieure à une version normale. Exemple: 1.0.0-alpha <1.0.0. La préséance pour deux versions préliminaires avec la même version majeure, mineure et patch DOIT être déterminée en comparant chaque identifiant séparé par un point de gauche à droite jusqu'à ce qu'une différence soit trouvée comme suit: les identifiants constitués uniquement de chiffres sont comparés numériquement et les identifiants avec des lettres ou des tirets sont comparés lexiquement dans l'ordre de tri ASCII. Les identificateurs numériques ont toujours une priorité inférieure aux identificateurs non numériques. Un plus grand ensemble de champs de pré-lancement a une priorité supérieure à un ensemble plus petit, si tous les identificateurs précédents sont égaux. Exemple: 1.0.0-alpha <1.0.0-alpha.1 <1.0.0-alpha.beta <1.0.0-beta <1.0.0-beta.2 <1.0.0-beta.11 <1.0.0- rc.1 <1.0.0.

Pourquoi utiliser le versioning sémantique?
Ce n'est pas une idée nouvelle ou révolutionnaire. En fait, vous faites probablement déjà quelque chose de proche. Le problème est que "fermer" n'est pas assez bon. Sans conformité à une sorte de spécification formelle, les numéros de version sont essentiellement inutiles pour la gestion des dépendances. En donnant un nom et une définition claire aux idées ci-dessus, il devient facile de communiquer vos intentions aux utilisateurs de votre logiciel. Une fois ces intentions claires, des spécifications de dépendance flexibles (mais pas trop flexibles) peuvent enfin être établies.

Un exemple simple montrera comment le Versioning Sémantique peut faire de l'enfer de dépendance une chose du passé. Considérons une bibliothèque appelée «Firetruck». Elle nécessite un package de version sémantique nommé «Ladder». Au moment de la création de Firetruck, Ladder est à la version 3.1.0. Puisque Firetruck utilise certaines fonctionnalités qui ont été introduites pour la première fois en 3.1.0, vous pouvez spécifier en toute sécurité que la dépendance Ladder est supérieure ou égale à 3.1.0 mais inférieure à 4.0.0. Maintenant, lorsque les versions 3.1.1 et 3.2.0 de Ladder deviennent disponibles, vous pouvez les publier sur votre système de gestion des paquets et savoir qu'elles seront compatibles avec les logiciels dépendants existants.

En tant que développeur responsable, vous voudrez bien sûr vérifier que toutes les mises à niveau de paquets fonctionnent comme annoncé. Le monde réel est un endroit désordonné; il n'y a rien que nous puissions faire à ce sujet mais soyez vigilant. Ce que vous pouvez faire est de laisser Semantic Versioning vous fournir une manière saine de libérer et de mettre à jour les paquets sans avoir à lancer de nouvelles versions de paquets dépendants, vous épargnant ainsi du temps et des soucis.

Si tout cela semble souhaitable, tout ce que vous devez faire pour commencer à utiliser le Versioning Semantic est de déclarer que vous le faites et de suivre les règles. Lien vers ce site Web à partir de votre fichier README afin que les autres connaissent les règles et puissent en bénéficier.

FAQ
Comment dois-je faire face aux révisions de la phase de développement initial de 0.yz?
La chose la plus simple à faire est de démarrer votre version de développement initiale à 0.1.0, puis d'incrémenter la version mineure pour chaque version suivante.

Comment savoir quand lancer 1.0.0?
Si votre logiciel est utilisé en production, il devrait probablement déjà être 1.0.0. Si vous avez une API stable dont les utilisateurs dépendent, vous devriez être 1.0.0. Si vous vous souciez beaucoup de la rétrocompatibilité, vous devriez probablement déjà être 1.0.0.

Cela ne décourage-t-il pas le développement rapide et l'itération rapide?
La version majeure zéro est tout au sujet du développement rapide. Si vous changez l'API tous les jours, vous devriez toujours être dans la version 0.yz ou dans une branche de développement distincte travaillant sur la prochaine version majeure.

Si même les plus infimes modifications vers l'API publique vers l'arrière requièrent une bosse de version majeure, ne finirai-je pas à la version 42.0.0 très rapidement?
C'est une question de développement responsable et de prospective. Les modifications incompatibles ne doivent pas être introduites à la légère pour les logiciels qui ont beaucoup de code dépendant. Le coût qui doit être engagé pour la mise à niveau peut être important. Avoir à modifier des versions majeures pour libérer des modifications incompatibles signifie que vous réfléchirez à l'impact de vos modifications et évaluerez le rapport coût / bénéfice impliqué.

Documenter l'ensemble de l'API publique, c'est trop de travail!
Il est de votre responsabilité en tant que développeur professionnel de documenter correctement un logiciel destiné à être utilisé par d'autres. La gestion de la complexité logicielle est un élément extrêmement important pour maintenir un projet efficace, ce qui est difficile à faire si personne ne sait comment utiliser votre logiciel ou quelles méthodes peuvent être appelées en toute sécurité. À long terme, Semantic Versioning, et l'insistance sur une API publique bien définie peut assurer le bon fonctionnement de tout le monde.

Que dois-je faire si je libère accidentellement un changement incompatible vers l'arrière en tant que version mineure?
Dès que vous réalisez que vous avez enfreint la spécification de gestion des versions sémantiques, résolvez le problème et publiez une nouvelle version mineure qui corrige le problème et restaure la rétrocompatibilité. Même dans ces circonstances, il est inacceptable de modifier les versions versionnées. Si c'est approprié, documentez la version fautive et informez vos utilisateurs du problème afin qu'ils soient au courant de la version fautive.

Que dois-je faire si je mets à jour mes propres dépendances sans changer l'API publique?
Cela serait considéré comme compatible car il n'affecte pas l'API publique. Un logiciel qui dépend explicitement des mêmes dépendances que votre paquet devrait avoir ses propres spécifications de dépendance et l'auteur remarquera tout conflit. Déterminer si la modification est un niveau de correctif ou une modification de niveau mineur dépend de la mise à jour de vos dépendances afin de corriger un bug ou d'introduire de nouvelles fonctionnalités. Je m'attendrais généralement à du code supplémentaire pour cette dernière instance, auquel cas il s'agit évidemment d'un incrément de niveau mineur.

Que se passe-t-il si je modifie par inadvertance l'API publique d'une manière qui n'est pas compatible avec le changement de numéro de version (ie le code introduit de manière incorrecte un changement majeur dans une version de correctif)?
Utilisez votre meilleur jugement. Si vous avez un public énorme qui sera radicalement affecté en modifiant le comportement en fonction de ce que l'API publique voulait, il est préférable d'effectuer une version majeure, même si le correctif peut être considéré comme une version de correctif. Rappelez-vous, la gestion de version sémantique consiste à transmettre le sens par la façon dont le numéro de version change. Si ces modifications sont importantes pour vos utilisateurs, utilisez le numéro de version pour les informer.

Comment devrais-je gérer les fonctionnalités de dépréciation?
La dépréciation des fonctionnalités existantes est une partie normale du développement logiciel et est souvent requise pour progresser. Lorsque vous désapprouvez une partie de votre API publique, vous devez faire deux choses: (1) mettre à jour votre documentation pour informer les utilisateurs de la modification, (2) émettre une nouvelle version mineure avec la dépréciation en place. Avant de supprimer complètement la fonctionnalité dans une nouvelle version majeure, il doit y avoir au moins une version mineure qui contient la dépréciation afin que les utilisateurs puissent effectuer une transition en douceur vers la nouvelle API.

Est-ce que semver a une limite de taille sur la chaîne de version?
Non, mais faites preuve de jugement. Une chaîne de version de 255 caractères est probablement trop lourde, par exemple. En outre, les systèmes spécifiques peuvent imposer leurs propres limites sur la taille de la chaîne.

Sur
La spécification de versionnement sémantique est écrite par Tom Preston-Werner, inventeur de Gravatars et cofondateur de GitHub.

Si vous souhaitez laisser un commentaire, veuillez ouvrir un numéro sur GitHub.

Licence
Creative Commons - CC BY 3.0



Wildcard ou ? L'opérateur qui indique que tous les types d'objets sont acceptés
Le 09/07/2018
Auteur: Marc L. Harnist

Extrait:

Wildcard ou ? L'opérateur qui indique que tous les types d'objets sont acceptés. Attention: le code est bloqué en lecture seule pour éviter les bugs. L'utilité du wildcard est surtout de permettre de retrouver le polymorphisme avec les collections.

La méthode ci-dessous autori" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Wildcard ou ? L'opérateur qui indique que tous les types d'objets sont acceptés. Attention: le code est bloqué en lecture seule pour éviter les bugs. L'utilité du wildcard est surtout de permettre de retrouver le polymorphisme avec les collections.

La méthode ci-dessous autorise n'importe quel objet de type list dont Voiture est la superclasse (class mère)
static void affiche(Li t< ? extends Voiture > list){
for(Voiture v : list)
System.out.print(v.toString());
}

Zend Technologie
Le 19/01/2018

Extrait:

Société qui a développé et professionnalisé le langage web PHP (Hypertext PreProcessor, à l'origine Personal Home Page) à partir de la version PHP3. Php a été inventé par l'Israëlien Rasmus Lerdorf en 1994 à partir d'un langage C en voulant publier des articles stockés dans la base de d" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Société qui a développé et professionnalisé le langage web PHP (Hypertext PreProcessor, à l'origine Personal Home Page) à partir de la version PHP3. Php a été inventé par l'Israëlien Rasmus Lerdorf en 1994 à partir d'un langage C en voulant publier des articles stockés dans la base de données de son ordinateur. Zend Technologie est dirigée par Andy Gutmans. Son cofondateur, Zeev Suraski a inventé le paamayin nekudotaïm (:: le double double point) de l'hébreu parlé nekudo, point, et paam, fois. (La terminaison aim est un dual). Source: Wikipedia...

Zend Technologie
Le 19/01/2018

Extrait:

Société qui a développé et professionnalisé le langage web PHP (Hypertext PreProcessor, à l'origine Personal Home Page) à partir de la version PHP3. Php a été inventé par l'Israëlien Rasmus Lerdorf en 1994 à partir d'un langage C en voulant publier des articles stockés dans la base de d" (Pour ouvrir l'article dans une nouvelle fenêtre, cliquez sur le titre)

Texte entier

Société qui a développé et professionnalisé le langage web PHP (Hypertext PreProcessor, à l'origine Personal Home Page) à partir de la version PHP3. Php a été inventé par l'Israëlien Rasmus Lerdorf en 1994 à partir d'un langage C en voulant publier des articles stockés dans la base de données de son ordinateur. Zend Technologie est dirigée par Andy Gutmans. Son cofondateur, Zeev Suraski a inventé le paamayin nekudotaïm (:: le double double point) de l'hébreu parlé nekudo, point, et paam, fois. (La terminaison aim est un dual). Source: Wikipedia