La programmation est le processus de développement de solutionsTâches dynamiques "en direct" sous forme de constructions de code rigides, de données, de fonctions et d'algorithmes. Une procédure pour former une syntaxe stricte à partir d'une sémantique non définie. Les vrais problèmes sont un gros problème bien connu dans le sens de l'algorithmisation: pour parvenir à la solution souhaitée, le problème doit être placé dans des constructions syntaxiques précises.
La POO a tenté à deux reprises de briser cet ancien concept de programmation, mais les entraves du style classique de codage de données et d'algorithmes sont toujours fortes.
Niveau et qualifications
L'informatique a commencé avec l'informatique, maisla vitesse à laquelle s'accélère le mouvement dans le domaine du traitement de l'information n'est pas encore assez élevée pour que la programmation classique devienne impossible et cesse d'exister.
Il est également objectif que le développeur n'insiste pas et que le client n'ait pas besoin d'une vraie solution à de vrais problèmes. Les deux côtés sont habitués à être limités par les outils disponibles et les capacités familières.
Les formes de polymorphisme POO, les idées d'encapsulation de code et l'héritage de propriétés (méthodes) relèvent du domaine de la programmation, mais pas du domaine du problème en cours de résolution.
Exemple concret - bibliothèquePHPOffice / PHPWord. Pour l'utiliser, vous avez besoin des qualifications d'un développeur, vous devez créer votre propre système d'objets, mais le niveau actuel du client (les exigences du client) est une composition triviale, que le programmeur remplace avec son développement (sinon les exigences ne peuvent pas être satisfaites). Une situation comme celle-ci:
Dans ce cas, l'utilisation de la bibliothèque est une tâchele formatage des documents, par exemple un diplôme ou une thèse, doit être formalisé conformément à la norme. Le client a présenté ses exigences et le programmeur est allé beaucoup plus loin.
Le document a été entièrement analysé, assemblé dans le format requis, travaillé avec des tableaux de n'importe quel niveau d'imbrication, fusionné et scindé des cellules, imprimé dans n'importe quelle direction, etc.
Polymorphisme et POO
Il n'y a pas de meilleure définition du polymorphisme que de se référer à l'histoire du développement de l'idée de programmation orientée objet, si populaire aujourd'hui, si souvent utilisée, mais non réalisé en substance jusqu'à présent.
Chaque auteur a son propre concept du début et de l'essence de la POO. Pour tout lecteur attentif, ce concept est correct et objectif. Mais à ce jour, tout le monde n'accepte que trois positions comme axiome inconditionnel:
- encapsulation;
- polymorphisme;
- héritage.
Certains ajoutent plus: l'abstraction, et le plus souvent celle-ci, et même le point principal, est utilisée comme base pour décrire l'essence de la POO.
Ainsi, les opinions sur la POO sont polymorphes: elles décrivent une chose, sont conçues de différentes manières ou, à l'inverse, décrivent des choses différentes, mais sont basées sur quatre positions identiques.
Le début démocratique n'est pas typique de la régioninformatique, mais il faut lui donner son dû: la combinaison et la coexistence de nombreuses opinions sur la même chose est un véritable polymorphisme en action.
Définitions populaires du polymorphisme
La POO est la prochaine étape du développement des technologies de l'information. Rares sont ceux qui discutent de cela, mais ses axiomes et ses dispositions de base sont si différents en termes de sémantique qu'ils ne méritent pas d'attention en dehors de leur totalité.
- Le polymorphisme en programmation est la capacité de fournir la même interface pour différentes formes de base (types de données).
- Le polymorphisme est la capacité des objets à avoir différentes implémentations.
- Le polymorphisme est la capacité d'une fonction ...
- Classique (du créateur de C / C ++): "une interface - plusieurs implémentations".
- Le polymorphisme paramétrique implique ...
- Polymorphisme - la position de la théorie des types ...
- L'abstraction est impossible sans encapsulation et héritage, tout comme le polymorphisme est impossible sans héritage ...
Nous pouvons convenir que tout cela renvoie à la même chose: mais la forme d'expression de la pensée, l'essence et le contenu ne se ressemblent pas. Mais il y a encore quelque chose en commun.
Entité: développeur - client
Le développement de logiciels classiques impliquedisponibilité d'un programmeur et des tâches (client, client). Le programmeur examine le problème, le formalise et crée le code qui mène à la solution. Le client nie la totalité ou une partie seulement de ce qui est proposé, soulignant les défauts, et le programmeur refait son travail.
Un tel cycle du processus de résolution du problème suggère que deux entités complètement différentes sont clairement combinées ici:
- l'ordinateur ne peut pas résoudre le problème par lui-même;
- un programme est nécessaire pour que l'ordinateur «comprenne» et «résolve» le problème.
La tâche est la sphère de compétence du client, le programme estc'est un algorithme pour «l'adaptation» d'une tâche aux capacités d'un ordinateur - la sphère de compétence du programmeur. Le rôle de ce dernier est «d'adapter» l'ordinateur aux exigences de la tâche, et c'est superflu!
Offres de programmation orientée objet abstrait loin... Il y a des objets - c'est la sphère du client; il y al'implémentation des objets est du domaine du programmeur. Pas de communication «technologique» entre le client et le développeur. L'idée est cardinale, non mise en œuvre à ce jour, mais quelque chose fonctionne déjà régulièrement.
Fenêtres, boutons et autres objets
Histoire de la technologie Air Art, Object Magazine,Turbo Vision, Graph Vision est déjà de l'histoire. Peu de gens se souviennent de ces implémentations de POO, elles ne sont pratiquement pas utilisées et oubliées, mais l'interface de la fenêtre Windows est familière à des millions d'utilisateurs, et les objets en PHP, JavaScript et d'autres langages des technologies Internet sont utilisés par des centaines de milliers de développeurs de code, et des millions de visiteurs des ressources Web les connaissent.
C'est probablement la seule manière correcte, selonquelle POO était censée développer: encapsulation, héritage, polymorphisme pour le développeur, mais pas pour l'utilisateur. Il est caractéristique que cette position ait été la principale dans le développement de la conception visuelle (interface) des logiciels Windows, des applications telles que Turbo Vision et Graph Vision.
Le concept derrière les produitsAir Art Technology et Object Magazine étaient très différents. Ici, l'objet abstrait était le tout premier ancêtre de la structure de l'information; il encapsulait le code de traitement de l'information au niveau abstrait. Les objets de fenêtres, boutons, éléments de design visuel étaient ici secondaires.
Dans la première version (Windows & etc.) le paradigme POO: l'encapsulation, l'héritage, le polymorphisme ont été désignés au niveau d'un ancêtre abstrait, et l'implémentation du code s'est formée au niveau de chaque descendant spécifique le long de la branche d'héritage selon la structure et le contenu souhaités.
Dans la seconde version (Air Art Technology etObject Magazine) le niveau de l'objet abstrait est important. Ce qu'un descendant particulier aura n'est pas le but, l'essentiel est que sa branche d'héritage satisfasse aux exigences de tous les parents jusqu'à l'abstraction racine.
Objet et système d'objets: algorithme
Un concept orienté objet idéal ne peut manipuler que des objets et des systèmes d'objets.
Dans les langages de programmation modernes, sousun objet (classe) est généralement compris comme une description d'un objet et une instance d'un objet.De plus, afin d'utiliser la description d'un objet, les langages permettent au programmeur de travailler avec des objets statiques, tandis qu'un objet dynamique est une instance d'une description, avec son propre contenu et sa structure uniques, mais en utilisant les mêmes méthodes (propriétés) descriptions.
La pratique actuelle relie le concept d'objet àun outil, c'est-à-dire un langage de programmation, une interface, un accès à une base de données, une connexion réseau, mais il n'y a rien qui indique les intérêts du client, le problème étant résolu.
Ceci est idéal pour une POO simple: le polymorphisme permet de faire notamment divers éléments de conception, mais de les gérer avec le même code. Mais il ne s'agit pas ici des objets du problème, qui n'est pas du tout considéré comme un sujet d'analyse orientée objet.
Les programmeurs ont adopté la POO comme outil pouraméliorant la qualité et la productivité de leur travail, mais n'ont pas concédé une seule goutte de «leur territoire» au client. Les concepts de base de la POO - encapsulation, héritage, polymorphisme - sont restés dans le domaine du développement, et n'ont pas été transplantés dans le champ du problème.
Objet et système d'objets: problème et solution
Ordinateur - programmeur - tâche. Le lien du milieu est superflu. Idéalement, il ne devrait y avoir que deux contours relativement dépendants: (ordinateur - programmeur) - tâche. Autrement dit, un utilisateur, un client ou un visiteur dispose d'un outil pour résoudre son problème. Le client ne se soucie pas de la manière dont l'outil est mis en œuvre.
Idéalement, il s’agit simplement d’un ordinateur capable decomprendre ce que veut le client et faire ce qu'il veut. À quoi cela ressemblera: un programme local ou un site Web accessible via un navigateur, un programme spécial pour le traitement de l'information distribuée, un système d'information pour le client - peu importe.
Il est essentiel qu'entre la tâche et l'ordinateur, il n'y ait paslien superflu, mais le premier est compris et résolu par le second. Pour atteindre cet objectif, l'ordinateur et le client doivent être liés par un système d'objets, et la signification, la structure et le contenu de chaque objet sont déterminés par le client, et les méthodes et propriétés des objets sont mises en œuvre par le programmeur.
Idéal lorsque le travail du client est de créerle système d'objets dont il a besoin et le travail sur la mise en œuvre des méthodes et propriétés de ces objets sont séparés dans le temps. Plus l'implémentation du système objet (le programmeur) est éloignée de son contenu sémantique (le client), meilleur est le processus.
Rien ne dérange le client et le programmeurinteragir dans le processus de résolution d'un problème, mais une séparation claire de la sémantique est importante. Chacun doit faire ce qu'il veut, le programmeur n'est pas obligé de maîtriser la portée de la tâche, et le client ne doit pas comprendre le code, et plus encore, les parties ne doivent pas se donner des conseils qui ne les concernent pas.
Programmation traditionnelle et objet
Les postulats de base de la POO: l'encapsulation, l'héritage, le polymorphisme sous la forme sous laquelle ils sont devenus familiers et demandés, conduisent à une amélioration notable de la qualité et de la fiabilité du code, accélèrent considérablement le travail du programmeur et ont beaucoup d'autres qualités positives.
Mais les choses sont toujours là: la programmation classique n'est pas inférieure à ses positions, et de nombreuses idées orientées objet sont implémentées par du code classique.
Cependant, les idées de POO et de récursivité ont conduit à unel'influence sur la syntaxe des opérateurs de syntaxe classique, sur la logique de construction de code régulier qui n'a rien à voir avec le style d'écriture et de pensée orienté objet.
Les listes et les files d'attente ont changé, il y avait un conceptdu premier et du dernier élément du tableau, des boucles "pour chaque" sont apparues et des variantes de référence de dénomination, d'utilisation et d'exécution sont devenues encore plus demandées qu'auparavant.
En fait, le fait même que les variables aient perduson visage «clair» (le type d'une variable peut changer selon les besoins, et il n'est pas nécessaire de décrire une variable) dit que les classiques, en fait, sont depuis longtemps orientés objet et ont reconnu les principes de base de la POO: encapsulation, héritage, polymorphisme comme des idées qui ont essentiel.
Ce qui est au cœur : un objet ou un système
L'abstraction comme position conceptuelle de baseLa POO, quel que soit l'endroit où se situe le domaine de responsabilité (mise en œuvre) de l'objet - au niveau du premier objet abstrait ou au niveau d'un descendant spécifique - laisse la question ouverte : par où tout commencer, à partir de l'objet ou du système ?
Si nous mettons un objet comme base, alors il ne sera jamaisdeviendra un système, puisque le système sera en lui, et lui-même deviendra l'image rigide d'un commencement très concret. Ici se posent des problèmes d'abstraction : l'objet initial fixe précisément l'essentiel du problème à résoudre, c'est-à-dire qu'il n'est plus transférable à un autre problème.
Si on se base sur un système d'objets, alorsun système de systèmes est obtenu. Il est difficile d'imaginer par rapport à une tâche spécifique, et par où commencer le développement est également difficile à comprendre. Dans l'ensemble, le polymorphisme POO avec ses différences dans les entités, les formes d'implémentation, le nombre de paramètres réels dans les fonctions donne représentation sur le système qui se trouve au début, comme :
- sur les options pour résoudre le problème (par exemple, un menu);
- sur les conditions initiales (application du problème dans différentes conditions, données) ;
- sur les modes de fonctionnement (test, réglage, travail).
Mais ceci et ainsi de suite ne donnent aucune raison de mettre un système d'objets comme base pour résoudre le problème. Il suffit souvent de définir un seul objet de départ.
L'histoire du processus de résolution de problèmes
Les principes les plus importants de la POO : polymorphisme et abstraction - prioriser l'objet initial en tant que système d'objets. Dans une dispute sur qui devrait venir en premier, la poule ou l'œuf, la poule gagne.
Il ne fait aucun doute que tout doitcommencer avec un objet abstrait, pas un système d'objets. Mais si nous prenons en compte le facteur temps et l'appliquons au niveau de chaque objet, en commençant par le tout premier abstrait, alors l'idée contradictoire de mettre à la fois l'objet et le système au début de la solution est la seulement raisonnable.
Si le concept de programmation classique dansAu cours de la résolution du problème, il modifie des données, le contenu de la base de données, modifie des fichiers, etc., puis dans le concept de polymorphisme POO, l'encapsulation et le facteur temps modifient le contenu, la structure et les propriétés du système d'objets de le problème étant résolu.
Le programmeur POO est le moins intéressé parle concept d'un fichier, d'une base de données, d'un algorithme - ce sont des détails, ici le programmeur pense en objets, mais les objets existent dans le temps et changent au cours de la réalisation de l'objectif souhaité.
Ainsi, au commencement il y a un objet en tant que systèmeobjets et la logique de ce système - l'échelle de temps : démarrer une tâche, former le premier objet, saisir ou collecter des données, former l'objet suivant, mais rien n'empêche le premier objet de passer à la solution suivante.
Chaque niveau d'objets agit commeun système d'objets indépendant, c'est-à-dire un objet, mais dans le contexte du processus qui a commencé et de la valeur du temps, c'est un système d'objets à l'échelle du temps. Pour une implémentation complète de la POO, le polymorphisme, l'héritage et le facteur temps fournissent ensemble la dynamique du premier, c'est-à-dire qu'un objet peut non seulement changer dans le temps, mais aussi générer des objets qui ne sont pas fournis par le développeur, générés par l'exécution de la tâche au cours du processus, conçu par le client.
Exemple de polymorphisme POO réel
La complexité des tâches que la POO peut effectuer n'est pascomparable à celui disponible pour la version classique des programmes d'écriture. Bien sûr, il est toujours possible de résoudre n'importe quel problème de la manière habituelle, mais la question de savoir combien cela "coûtera" en temps et en efforts rend souvent le résultat inutile.
La bibliothèque a été récemment développéePHPOffice / PHPWord, mais pour utiliser ses capacités, vous devez presque toujours créer votre propre système d'objets. Par exemple, un simple fichier *.docx :
est une archive zip de nombreux fichiers etdossiers au format Office Open XML (OpenXML, OOXML). Chaque fichier est écrit dans des balises XML, et lors de l'ajout, de la modification et de la suppression d'éléments de lettres, de mots, de tableaux, de listes, etc., le contenu des fichiers commence à représenter une séquence de balises qui ne contiennent pas toujours des éléments complets, souvent un élément est écrit avec de nombreuses balises.
Si vous imaginez ce fichier comme une séquence de balises, vous obtenez une image intéressante :
Il est facile de voir que le premier et unique paragraphele document est représenté par de nombreuses balises. Quant au tableau et aux tableaux qui y sont intégrés, le volume de la description de tous les éléments est imperceptible, mais est accessible à une application orientée objet.
En fait, dans la figure, le vert est un testsortie de balise, jaune - paramètres et type de balise, beige - contenu. Les objets créés sont orientés vers le traitement mécanique. Seules les opérations d'ouverture d'un fichier document, de formatage et d'écriture deviennent accessibles à une personne.
La solution est simple et pratique, mais la mise en œuvre se concentre davantage sur un ordinateur que sur une personne, en raison de l'essentiel des fonctionnalités réalisées et des relations complexes entre les objets.
L'état de la zone OOP
Développement de systèmes de gestion de site, technologiesmise en place et gestion de serveurs, expérience dans le développement de sites dynamiques a rendu la programmation orientée objet accessible à tous. Le problème est de savoir comment changer votre façon de penser et vous habituer à penser au niveau des objets, et non dans le contexte d'un code exécutable séquentiellement.
Transition généralement de la programmation classiqueà orienté objet prend deux à trois mois, mais les coûts sont remboursés avec intérêts. Le potentiel des langages de programmation modernes, principalement PHP et JavaScript, satisfera le développeur le plus sophistiqué.
POO moderne - polymorphisme, héritage etla possibilité de former des propriétés d'objets est pratique et pratique, la syntaxe des langages et des outils auxiliaires offrent un confort de travail et une efficacité du code.
Objet Idée Perspectives
Combien de temps durera la programmation classique ?et comment la POO se développera est difficile à dire. Apparemment, les développeurs des outils ne prévoient pas de considérer le contexte du consommateur (utilisateur, client).
La boîte à outils OOP - polymorphisme, héritage, encapsulation et abstraction - est orientée développeur.
Systèmes d'information modernes et ressources Webs'efforcer de refléter la réalité, assurer le fonctionnement des objets réels et créer un environnement pour leur fonctionnement, si simple qu'il sera accessible à un consommateur loin de la programmation, complètement immergé dans sa sphère de compétence.