The Codest
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Industries
    • Fintech et banque
    • E-commerce
    • Adtech
    • Santé (Healthtech)
    • Fabrication
    • Logistique
    • Automobile
    • IOT
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
Flèche arrière RETOUR
2016-09-10
Développement de logiciels

AVOIR OU ÊTRE ?

Katarzyna Jaruga

Lors de l'apprentissage de la programmation orientée objet, et après avoir maîtrisé les bases des objets, des champs et des méthodes, on passe la plupart du temps sur l'héritage. L'héritage signifie que nous acquérons une partie de l'implémentation d'une classe de base. Il suffit de créer une sous-classe d'une classe de base pour hériter de tous les champs et méthodes non privés.

Une voiture et un avion sont des véhicules, il est donc évident que ces deux classes doivent être développées à partir de leur classe de base commune appelée Véhicule. Il s'agit d'un exemple académique typique, mais en décidant de lier ces classes avec la relation d'héritage, nous devons être conscients de certaines conséquences.

Fig. 1 Mise en œuvre de la relation d'héritage.

Dans ce cas, les classes sont étroitement liées les unes aux autres, ce qui signifie que les modifications du comportement de chaque classe peuvent être apportées en modifiant la classe de base. code. Cela peut être un avantage comme un inconvénient - cela dépend du type de comportement que nous attendons. Si l'héritage est appliqué au mauvais moment, le processus d'ajout d'une nouvelle fonction peut se heurter à des difficultés de mise en œuvre parce qu'elle ne correspondra pas au modèle de classe créé. Nous devrons choisir entre la duplication du code et la réorganisation de notre modèle, ce qui peut prendre beaucoup de temps. Nous pouvons qualifier le code qui exécute la relation d'héritage d'"ouvert-fermé", ce qui signifie qu'il est ouvert aux extensions mais fermé aux modifications. En supposant que la classe Véhicule contienne un fonctionnement général et défini du moteur de chaque véhicule, si nous voulons ajouter un modèle de véhicule sans moteur (par exemple, un vélo) à notre hiérarchie de classes, nous devrons apporter de sérieuses modifications à nos classes.

classe Véhicule
  def start_engine
  end

  def stop_engine
  end
end

classe Plane < Véhicule
  def move
    start_engine
    ...
    stop_engine
  fin
fin

Composition

Si nous ne sommes intéressés que par une partie du comportement de la classe existante, une bonne alternative à l'héritage est d'utiliser la composition. Au lieu de créer des sous-classes qui héritent de tous les comportements (ceux dont nous avons besoin et ceux dont nous n'avons pas besoin du tout), nous pouvons isoler les fonctions dont nous avons besoin et équiper nos objets de références à ces fonctions. De cette manière, nous abandonnons l'idée que l'objet est un type de un objet de base, en faveur de l'affirmation selon laquelle il contient seulement certaines parties de ses propriétés.

Fig. 2 Utilisation de la composition

En suivant cette approche, nous pouvons isoler le code responsable du fonctionnement du moteur dans la classe autonome appelée Moteur et n'y faire référence que dans les classes qui représentent les véhicules dotés d'un moteur. L'isolation des fonctions grâce à la composition simplifiera la structure de la classe Véhicule et renforcera l'encapsulation des classes individuelles. Désormais, la seule façon pour les véhicules d'avoir un effet sur le moteur est d'utiliser son interface publique, car ils n'auront plus d'informations sur son implémentation. De plus, cela permettra d'utiliser différents types de moteurs dans différents véhicules, et même de les échanger pendant que le programme est en cours d'exécution. Bien sûr, l'utilisation de la composition n'est pas sans faille - nous créons un ensemble de classes faiblement connectées, qui peut être facilement étendu et qui est ouvert à la modification. Mais, en même temps, chaque classe est connectée à de nombreuses autres classes et doit disposer d'informations concernant leurs interfaces.

classe Véhicule
fin

classe Moteur
  def start
  end

  def stop
  end
fin

classe Plane < Véhicule
  def initialize
    @engine = Engine.new
  end

  def move
    @engine.start
    @engine.stop
  end

  def change_engine(new_engine)
    @engine = new_engine
  end
end

Le choix

Les deux approches décrites ont des avantages et des inconvénients, alors comment choisir entre elles ? L'héritage est une spécialisation, il est donc préférable de ne l'appliquer qu'aux problèmes dans lesquels il existe des relations de type "is-a" - nous avons donc affaire à la véritable hiérarchie des types. Étant donné que l'héritage lie étroitement les classes entre elles, nous devrions toujours nous demander s'il convient ou non d'utiliser la composition. La composition doit être appliquée aux problèmes dans lesquels il existe des relations de type "has-a" - la classe a donc de nombreuses parties, mais elle est quelque chose de plus qu'un ensemble de classes. Un avion est composé d'éléments, mais seul, il est quelque chose de plus - il a des capacités supplémentaires, telles que le vol. Si l'on poursuit cet exemple, les pièces individuelles peuvent se présenter sous différentes variantes spécialisées, et c'est alors le bon moment pour utiliser l'héritage.

L'héritage comme la composition ne sont que des outils que les programmeurs ont à leur disposition, donc choisir le bon outil pour un problème particulier demande de l'expérience. Alors, pratiquons et apprenons de nos erreurs 🙂 .

Articles connexes

Développement de logiciels

Construire des applications web à l'épreuve du temps : les conseils de l'équipe d'experts de The Codest

Découvrez comment The Codest excelle dans la création d'applications web évolutives et interactives à l'aide de technologies de pointe, offrant une expérience utilisateur transparente sur toutes les plateformes. Découvrez comment notre expertise favorise la transformation numérique et la...

LE CODEST
Développement de logiciels

Les 10 premières entreprises de développement de logiciels basées en Lettonie

Découvrez les principales sociétés de développement de logiciels en Lettonie et leurs solutions innovantes dans notre dernier article. Découvrez comment ces leaders de la technologie peuvent vous aider à développer votre entreprise.

thecodest
Solutions pour les entreprises et les grandes entreprises

L'essentiel du développement de logiciels Java : Un guide pour une externalisation réussie

Explorez ce guide essentiel sur le développement réussi de logiciels Java outsourcing pour améliorer l'efficacité, accéder à l'expertise et assurer la réussite des projets avec The Codest.

thecodest
Développement de logiciels

Le guide ultime de l'externalisation en Pologne

L'essor de outsourcing en Pologne est dû aux progrès économiques, éducatifs et technologiques, qui favorisent la croissance des technologies de l'information et un climat propice aux entreprises.

TheCodest
Solutions pour les entreprises et les grandes entreprises

Le guide complet des outils et techniques d'audit informatique

Les audits informatiques garantissent la sécurité, l'efficacité et la conformité des systèmes. Pour en savoir plus sur leur importance, lisez l'article complet.

The Codest
Jakub Jakubowicz CTO & Co-Fondateur

Abonnez-vous à notre base de connaissances et restez au courant de l'expertise du secteur des technologies de l'information.

    A propos de nous

    The Codest - Entreprise internationale de développement de logiciels avec des centres technologiques en Pologne.

    Royaume-Uni - Siège

    • Bureau 303B, 182-184 High Street North E6 2JA
      Londres, Angleterre

    Pologne - Les pôles technologiques locaux

    • Parc de bureaux Fabryczna, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsovie, Pologne

      The Codest

    • Accueil
    • A propos de nous
    • Services
    • Études de cas
    • Savoir comment
    • Carrières
    • Dictionnaire

      Services

    • Conseil consultatif
    • Développement de logiciels
    • Développement backend
    • Développement frontal
    • Staff Augmentation
    • Développeurs backend
    • Ingénieurs en informatique dématérialisée
    • Ingénieurs des données
    • Autres
    • Ingénieurs AQ

      Ressources

    • Faits et mythes concernant la coopération avec un partenaire externe de développement de logiciels
    • Des États-Unis à l'Europe : Pourquoi les startups américaines décident-elles de se délocaliser en Europe ?
    • Comparaison des pôles de développement Tech Offshore : Tech Offshore Europe (Pologne), ASEAN (Philippines), Eurasie (Turquie)
    • Quels sont les principaux défis des CTO et des DSI ?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Conditions d'utilisation du site web

    Copyright © 2025 par The Codest. Tous droits réservés.

    fr_FRFrench
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek fr_FRFrench