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 ; .
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!