Atteindre l'héritage d'implémentation de type Mixin: module Ruby, interface Java, trait PHP

Aperçu

--Introduction d'exemple de code qui réalise Mixin sans utiliser la fonction d'héritage de classe générale.

Qu'est-ce que Mixin (Mix-in)?

C'est une fonction qui vous permet de prendre le relais et d'utiliser une certaine fonction qui a été implémentée, telle que la fonction d'héritage de classe du langage de programmation. Certains langages de programmation implémentent Mixin sans utiliser les fonctionnalités courantes d'héritage de classe.

Mixin - Wikipedia

mixin est une classe dans un langage de programmation orienté objet qui fournit des fonctions en étant héritées par des sous-classes et n'est pas destinée à fonctionner indépendamment.

Trait est un concept similaire à Mixin.

Trate \ -Wikipedia

Un trait est un concept en programmation informatique, un ensemble de méthodes utilisées comme modèle conceptuel simple pour la programmation structurellement orientée objet.

Les traits sont similaires aux mix-ins, mais les mix-ins vous permettent de synthétiser des méthodes uniquement par des opérations d'héritage, tandis que les traits vous permettent de synthétiser des méthodes de plus de manières, y compris des ajouts symétriques, des exclusions de méthodes et des alias. Le trait est également différent de l'interface en ce qu'il donne la mise en œuvre ainsi que la spécification de type de la méthode au moment de la synthèse.

Atteindre Mixin avec le module Ruby

Dans Ruby, vous pouvez implémenter Mixin en utilisant module.

Introduction \ (Ruby 2 \ .6 \ .0 )

Ruby n'a intentionnellement pas d'héritage multiple compte tenu du fait que l'héritage multiple est une source de complexité, mais les modules peuvent être utilisés pour partager des implémentations dans la hiérarchie de classes. Cette fonctionnalité est appelée "Mix-in".

Exemple de code

module Printer

  #Contenu de sortie
  def print
    #Du côté de la classe@Lire et générer la variable de contenu
    puts "#{@content}"
  end
end

class Message

  #Module d'imprimante mixte-dans
  include Printer

  def initialize(content)
    @content = content
  end
end

#La classe de message mélange le module d'imprimante-Parce que c'est dans
#Vous pouvez utiliser la méthode d'impression
m = Message.new('Hello, world')
m.print

Environnement de contrôle de fonctionnement et résultat de l'exécution

$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]

$ ruby mixin.rb 
Hello, world

Atteindre Mixin avec le trait PHP

En PHP, les traits peuvent être utilisés pour implémenter Mixin.

PHP: Trate \ -Manual

PHP 5.4.0 et les versions ultérieures ont introduit un mécanisme appelé «traits» pour réutiliser le code. Tray est l'un des mécanismes de réutilisation du code dans un seul langage d'héritage comme PHP. Les traits sont conçus pour réduire les contraintes de l'héritage unique et permettre à plusieurs méthodes d'être réutilisées dans des classes indépendantes dans différentes hiérarchies de classes. La syntaxe combinée des traits et des classes réduit la complexité et évite également les problèmes courants associés à l'héritage multiple et au Mixin. Un trait est similaire à une classe, mais un trait sert uniquement à regrouper certaines caractéristiques. Vous ne pouvez pas créer une instance du trait lui-même. L'ajout de fonctionnalités à l'héritage à l'ancienne vous permet de configurer le comportement horizontalement. En d'autres termes, vous pouvez ajouter des membres de classe sans hériter.

Exemple de code

<?php

trait Printer {

  /**
   *Renvoie le contenu.
   * @return string Chaîne de contenu
   */
  abstract protected function getContent();

  /**
   *Contenu de sortie.
   */
  public function print() {
    echo $this->getContent(), "\n";
  }
}

class Message {

  #Mélanger le trait d'imprimante-dans
  use Printer;

  private $content;

  /**
   *constructeur.
   * @param string $content content string
   */
  public function __construct(string $content) {
    $this->content = $content;
  }

  /**
   *Renvoie le contenu.
   * @return string Chaîne de contenu
   */
  protected function getContent() {
    return $this->content;
  }
}

#La classe de message mélange le trait d'imprimante-Parce que c'est dans
#Vous pouvez utiliser la méthode d'impression
$m = new Message('Hello, world');
$m->print();

Environnement de contrôle de fonctionnement et résultat de l'exécution

$ php --version
PHP 7.3.7 (cli) (built: Jul  5 2019 12:44:05) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.7, Copyright (c) 1999-2018, by Zend Technologies

$ php mixin.php 
Hello, world

Réalisez Mixin avec l'interface Java

En Java, Mixin peut être réalisé en utilisant la méthode d'interface par défaut.

Evolving Java Interface (Java Magazine Vol.37 JANVIER / FÉVRIER 2018)

La méthode par défaut est le corps de la méthode, c'est-à-dire la méthode de l'interface qui a l'implémentation par défaut. La méthode par défaut est définie en préfixant la signature de méthode avec le modificateur par défaut et contient le corps complet de la méthode.

Exemple de code

interface Printer {

  /**
   *Renvoie le contenu.
   * @retourner la chaîne de contenu
   */
  String getContent();

  /**
   *Contenu de sortie.
   */
  default void print() {
    //De la méthode getContent implémentée côté classe
    //Obtenez du contenu et des résultats
    System.out.println(getContent());
  }
}
//Interface d'imprimante Mix-dans
public class Message implements Printer {

  private String content;

  /**
   *constructeur.
   * @chaîne de contenu de contenu param
   */
  public Message(String content) {
    this.content = content;
  }

  /**
   *Renvoie le contenu.
   * @retourner la chaîne de contenu
   */
  @Override
  public String getContent() {
    return content;
  }

  public static void main(String[] args) {
    //La classe de message mélange l'interface de l'imprimante-Parce que c'est dans
    //Vous pouvez utiliser la méthode d'impression
    Message m = new Message("Hello, world");
    m.print();
  }
}

Environnement de contrôle de fonctionnement et résultat de l'exécution

$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

$ javac Printer.java Message.java 

$ java Message
Hello, world

Recommended Posts

Atteindre l'héritage d'implémentation de type Mixin: module Ruby, interface Java, trait PHP
[ev3 × Java] Interface, implémentation et héritage (traitement événementiel)
Résumé d'héritage avancé, interface -java
Héritage de l'interface de l'historique d'apprentissage JAVA
Différences d'écriture en Ruby, PHP, Java, JS
Obtenez un cryptage compatible OpenSSL avec Java / PHP