Maison Problème commun Quels sont les trois éléments de la programmation orientée objet ?

Quels sont les trois éléments de la programmation orientée objet ?

Jul 10, 2020 am 10:28 AM
面向对象

Les trois éléments de la programmation orientée objet sont l'encapsulation, l'héritage et le polymorphisme. L'encapsulation signifie que les choses sont abstraites en classes, exposant les interfaces externes et masquant l'implémentation et les données internes ; le polymorphisme signifie qu'un objet parent peut être défini comme égal à une ou plusieurs technologies d'objets enfants ; .

Quels sont les trois éléments de la programmation orientée objet ?

Les trois éléments de la programmation orientée objet sont l'encapsulation, l'héritage et le polymorphisme

Les cinq éléments de base de Principes de programmation orientée objet : principe de responsabilité unique, principe d'ouverture et de fermeture, principe de substitution de Liskov, principe d'inversion de dépendance, principe d'abstraction d'interface

Encapsulation

L'encapsulation consiste à faire abstraction des choses dans les classes et les interfaces externes Expose, masque l'implémentation et les données internes.

Héritage

Une caractéristique majeure des langages de programmation orientée objet (POO) est « l'héritage ». L'héritage fait référence à la possibilité d'utiliser toutes les fonctionnalités d'une classe existante et de l'étendre sans avoir à réécrire la classe d'origine.

Les nouvelles classes créées par héritage sont appelées « sous-classes » ou « classes dérivées ».

La classe héritée est appelée « classe de base », « classe parent » ou « super classe ».

Le processus d'héritage est le processus du général au spécial.

Pour obtenir l'héritage, vous pouvez y parvenir via « Héritage » et « Composition ».

Dans certains langages POO, une sous-classe peut hériter de plusieurs classes de base. Mais en général, une sous-classe ne peut avoir qu'une seule classe de base. Pour obtenir un héritage multiple, cela peut être réalisé via un héritage multiniveau.

Il existe trois façons d'implémenter le concept d'héritage : l'héritage d'implémentation, l'héritage d'interface et l'héritage visuel.

L'héritage d'implémentation fait référence à la possibilité d'utiliser les propriétés et les méthodes d'une classe de base sans codage supplémentaire ;

L'héritage d'interface fait référence à la possibilité d'utiliser uniquement les noms de propriétés et de méthodes, mais des sous-classes. doit fournir des implémentations ;

L'héritage visuel fait référence à la capacité d'un sous-formulaire (classe) à utiliser l'apparence et le code d'implémentation du formulaire de base (classe).

Lorsque vous envisagez d'utiliser l'héritage, une chose à noter est que la relation entre deux classes doit être une relation « appartient à ». Par exemple, Employee est une personne et Manager est également une personne, les deux classes peuvent donc hériter de la classe Person. Mais la classe Leg ne peut pas hériter de la classe Person car la jambe n’est pas une personne.

Les classes abstraites définissent uniquement les propriétés et méthodes générales qui seront créées par les sous-classes. Lors de la création de classes abstraites, utilisez le mot-clé Interface au lieu de Class.

Le paradigme de développement OO est à peu près le suivant : diviser les objets → classes abstraites → organiser les classes en structures hiérarchiques (héritage et synthèse) → utiliser des classes et des instances pour concevoir et mettre en œuvre plusieurs étapes.

Polymorphisme

Le polymorphisme est une technique qui vous permet de définir un objet parent pour qu'il soit égal à un ou plusieurs de ses objets enfants après affectation, l'objet parent peut opérer de différentes manières en fonction des caractéristiques de l'objet enfant qui lui est actuellement attribué. Pour faire simple, cela tient en une phrase : Il est permis d’attribuer un pointeur d’un type de sous-classe à un pointeur d’un type de classe parent.

Il existe deux manières d'implémenter le polymorphisme : l'écrasement et la surcharge.

L'écrasement fait référence à la pratique des sous-classes redéfinissant les fonctions virtuelles des classes parentes.

La surcharge signifie que plusieurs fonctions portant le même nom sont autorisées à exister, mais les listes de paramètres de ces fonctions sont différentes (peut-être que le nombre de paramètres est différent, les types de paramètres sont différents ou les deux sont différents).

En fait, le concept de surcharge n'appartient pas à la "programmation orientée objet". La mise en œuvre de la surcharge est la suivante : le compilateur modifie les noms des fonctions du même nom en fonction de différentes listes de paramètres des fonctions, et puis ces fonctions du même nom deviennent des fonctions différentes (du moins en ce qui concerne le compilateur).

Par exemple, il existe deux fonctions portant le même nom : function func(p:integer):integer; et function func(p:string):integer;. Alors le nom de la fonction modifié par le compilateur peut ressembler à ceci : int_func, str_func.

Les appels à ces deux fonctions ont été déterminés entre les compilateurs et sont statiques (rappelez-vous : ils sont statiques). En d’autres termes, leurs adresses sont liées au moment de la compilation (liaison anticipée), donc la surcharge n’a rien à voir avec le polymorphisme ! Ce qui est réellement lié au polymorphisme, c'est « l'écrasement ».

Lorsqu'une sous-classe redéfinit la fonction virtuelle de la classe parent, le pointeur de la classe parent de manière dynamique (rappelez-vous : il est dynamique !) appelle la fonction appartenant à la sous-classe en fonction des différents pointeurs de sous-classe qui lui sont attribués, par exemple. un appel de fonction ne peut pas être déterminé lors de la compilation (l'adresse de la fonction virtuelle de la sous-classe appelée ne peut pas être donnée).

Par conséquent, l'adresse d'une telle fonction est liée au moment de l'exécution (liaison tardive). La conclusion est la suivante : la surcharge n'est qu'une fonctionnalité du langage et n'a rien à voir avec le polymorphisme ou l'orientation objet ! Pour citer Bruce Eckel : "Ne soyez pas stupide, si ce n'est pas une liaison tardive, ce n'est pas polymorphe."

Alors, quel est le rôle du polymorphisme ? Nous savons que l'encapsulation peut masquer les détails d'implémentation et rendre le code modulaire ; l'héritage peut étendre les modules de code existants (classes)

Leur objectif est la réutilisation du code ; Le polymorphisme consiste à réaliser une autre réutilisation d'interface à des fins ! La fonction du polymorphisme est de garantir l'appel correct lors de l'utilisation d'un certain attribut d'une instance de n'importe quelle classe dans « l'arbre généalogique » lorsque la classe hérite et dérive.

Pour plus de connaissances connexes, veuillez visiter le Site Web PHP chinois ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Jul 20, 2023 pm 10:36 PM

Comment utiliser le langage Go pour implémenter une programmation événementielle orientée objet Introduction : Le paradigme de programmation orientée objet est largement utilisé dans le développement de logiciels, et la programmation événementielle est un modèle de programmation courant qui réalise le flux du programme à travers le déclenchement et le traitement de contrôle des événements. Cet article présentera comment implémenter une programmation événementielle orientée objet à l'aide du langage Go et fournira des exemples de code. 1. Le concept de programmation événementielle La programmation événementielle est un modèle de programmation basé sur des événements et des messages, qui transfère le contrôle du flux du programme au déclenchement et au traitement des événements. en mode événementiel

Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Sep 23, 2023 am 09:37 AM

L'annotation @JsonIdentityInfo est utilisée lorsqu'un objet a une relation parent-enfant dans la bibliothèque Jackson. L'annotation @JsonIdentityInfo est utilisée pour indiquer l'identité de l'objet lors de la sérialisation et de la désérialisation. ObjectIdGenerators.PropertyGenerator est une classe d'espace réservé abstraite utilisée pour représenter les situations dans lesquelles l'identifiant d'objet à utiliser provient d'une propriété POJO. Syntaxe@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

Explorez la programmation orientée objet dans Go Explorez la programmation orientée objet dans Go Apr 04, 2024 am 10:39 AM

Le langage Go prend en charge la programmation orientée objet via la définition de type et l'association de méthodes. Il ne prend pas en charge l'héritage traditionnel, mais est mis en œuvre par composition. Les interfaces assurent la cohérence entre les types et permettent de définir des méthodes abstraites. Des cas pratiques montrent comment utiliser la POO pour gérer les informations client, notamment la création, l'obtention, la mise à jour et la suppression d'opérations client.

Analyse du modèle Flyweight dans la programmation orientée objet PHP Analyse du modèle Flyweight dans la programmation orientée objet PHP Aug 14, 2023 pm 05:25 PM

Analyse du modèle Flyweight dans la programmation orientée objet PHP Dans la programmation orientée objet, le modèle de conception est une méthode de conception logicielle couramment utilisée, qui peut améliorer la lisibilité, la maintenabilité et l'évolutivité du code. Le modèle Flyweight est l’un des modèles de conception qui réduit la surcharge de mémoire en partageant des objets. Cet article explique comment utiliser le mode poids mouche en PHP pour améliorer les performances du programme. Qu’est-ce que le mode poids mouche ? Le modèle de poids mouche est un modèle de conception structurelle dont le but est de partager le même objet entre différents objets.

Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Jun 05, 2024 pm 09:39 PM

Les meilleures pratiques de POO en PHP incluent les conventions de dénomination, les interfaces et les classes abstraites, l'héritage et le polymorphisme, ainsi que l'injection de dépendances. Les cas pratiques incluent : l'utilisation du mode entrepôt pour gérer les données et l'utilisation du mode stratégie pour mettre en œuvre le tri.

Analyse des fonctionnalités orientées objet du langage Go Analyse des fonctionnalités orientées objet du langage Go Apr 04, 2024 am 11:18 AM

Le langage Go prend en charge la programmation orientée objet, définissant des objets via des structures, définissant des méthodes à l'aide de récepteurs de pointeurs et implémentant le polymorphisme via des interfaces. Les fonctionnalités orientées objet assurent la réutilisation, la maintenabilité et l'encapsulation du code dans le langage Go, mais il existe également des limitations telles que le manque de concepts traditionnels de classes et d'héritage et de conversions de signatures de méthodes.

Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Mar 19, 2024 pm 02:51 PM

Il n'y a pas de concept de classe au sens traditionnel dans Golang (langage Go), mais il fournit un type de données appelé structure, à travers lequel des fonctionnalités orientées objet similaires aux classes peuvent être obtenues. Dans cet article, nous expliquerons comment utiliser les structures pour implémenter des fonctionnalités orientées objet et fournirons des exemples de code concrets. Définition et utilisation des structures Examinons d'abord la définition et l'utilisation des structures. Dans Golang, les structures peuvent être définies via le mot-clé type, puis utilisées si nécessaire. Les structures peuvent contenir des attributs

Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Jun 05, 2024 pm 08:50 PM

En maîtrisant le suivi de l'état des objets, la définition de points d'arrêt, le suivi des exceptions et l'utilisation de l'extension xdebug, vous pouvez déboguer efficacement le code de programmation orienté objet PHP. 1. Suivez l'état de l'objet : utilisez var_dump() et print_r() pour afficher les attributs de l'objet et les valeurs des méthodes. 2. Définir un point d'arrêt : définissez un point d'arrêt dans l'environnement de développement et le débogueur se mettra en pause lorsque l'exécution atteint le point d'arrêt, ce qui facilitera la vérification de l'état de l'objet. 3. Tracez les exceptions : utilisez les blocs try-catch et getTraceAsString() pour obtenir la trace de la pile et le message lorsque l'exception se produit. 4. Utilisez le débogueur : La fonction xdebug_var_dump() peut inspecter le contenu des variables pendant l'exécution du code.