Paradigme orienté objet

Le paradigme orienté objet (OO) a pris sa forme à partir du concept initial d'une nouvelle approche de programmation, tandis que l'intérêt pour les méthodes de conception et d'analyse est venu beaucoup plus tard. Le paradigme d'analyse et de conception OO est le résultat logique de l'adoption généralisée des langages de programmation OO.

  • Le premier langage orienté objet était Simula (Simulation de systèmes réels) qui a été développé en 1960 par des chercheurs du Norwegian Computing Center.

  • En 1970, Alan Kay et son groupe de recherche chez Xerox PARC a créé un ordinateur personnel nommé Dynabook et le premier langage de programmation orienté objet pur (OOPL) - Smalltalk, pour la programmation du Dynabook.

  • Dans les années 1980, Grady Boocha publié un article intitulé Object Oriented Design qui présentait principalement un design pour le langage de programmation Ada. Dans les éditions suivantes, il a étendu ses idées à une méthode complète de conception orientée objet.

  • Dans les années 1990, Coad incorporé des idées de comportement aux méthodes orientées objet.

Les autres innovations importantes sont les techniques de modélisation d'objets (OMT) par James Rum Baugh et génie logiciel orienté objet (OOSE) par Ivar Jacobson.

Introduction au paradigme OO

Le paradigme OO est une méthodologie importante pour le développement de tout logiciel. La plupart des styles ou modèles d'architecture tels que le tuyau et le filtre, le référentiel de données et les composants peuvent être implémentés à l'aide de ce paradigme.

Concepts de base et terminologies des systèmes orientés objet -

Objet

Un objet est un élément du monde réel dans un environnement orienté objet qui peut avoir une existence physique ou conceptuelle. Chaque objet a -

  • Identité qui le distingue des autres objets du système.

  • État qui détermine les propriétés caractéristiques d'un objet ainsi que les valeurs des propriétés que contient l'objet.

  • Comportement qui représente les activités visibles de l'extérieur effectuées par un objet en termes de changements dans son état.

Les objets peuvent être modélisés en fonction des besoins de l'application. Un objet peut avoir une existence physique, comme un client, une voiture, etc. ou une existence conceptuelle immatérielle, comme un projet, un processus, etc.

Classe

Une classe représente une collection d'objets ayant les mêmes propriétés caractéristiques qui présentent un comportement commun. Il donne le plan ou la description des objets qui peuvent être créés à partir de celui-ci. La création d'un objet en tant que membre d'une classe est appelée instanciation. Ainsi, un objet est uninstance d'une classe.

Les constituants d'une classe sont -

  • Un ensemble d'attributs pour les objets qui doivent être instanciés à partir de la classe. En général, les différents objets d'une classe ont des différences dans les valeurs des attributs. Les attributs sont souvent appelés données de classe.

  • Un ensemble d'opérations qui décrivent le comportement des objets de la classe. Les opérations sont également appelées fonctions ou méthodes.

Example

Considérons une classe simple, Circle, qui représente le cercle de la figure géométrique dans un espace bidimensionnel. Les attributs de cette classe peuvent être identifiés comme suit -

  • x – coord, pour désigner la coordonnée x du centre
  • coordonnée y, pour désigner la coordonnée y du centre
  • a, pour désigner le rayon du cercle

Certaines de ses opérations peuvent être définies comme suit -

  • findArea (), une méthode pour calculer la surface
  • findCircumference (), une méthode pour calculer la circonférence
  • scale (), une méthode pour augmenter ou diminuer le rayon

Encapsulation

L'encapsulation est le processus de liaison des attributs et des méthodes ensemble au sein d'une classe. Grâce à l'encapsulation, les détails internes d'une classe peuvent être cachés de l'extérieur. Il permet d'accéder aux éléments de la classe de l'extérieur uniquement via l'interface fournie par la classe.

Polymorphisme

Le polymorphisme est à l'origine un mot grec qui signifie la capacité de prendre plusieurs formes. Dans le paradigme orienté objet, le polymorphisme implique l'utilisation d'opérations de différentes manières, selon les instances sur lesquelles elles opèrent. Le polymorphisme permet aux objets avec différentes structures internes d'avoir une interface externe commune. Le polymorphisme est particulièrement efficace lors de la mise en œuvre de l'héritage.

Example

Considérons deux classes, Circle et Square, chacune avec une méthode findArea (). Bien que le nom et le but des méthodes dans les classes soient les mêmes, l'implémentation interne, c'est-à-dire la procédure de calcul d'une aire, est différente pour chaque classe. Lorsqu'un objet de la classe Circle appelle sa méthode findArea (), l'opération recherche la zone du cercle sans aucun conflit avec la méthode findArea () de la classe Square.

Relationships

Afin de décrire un système, la spécification dynamique (comportementale) et statique (logique) d'un système doit être fournie. La spécification dynamique décrit les relations entre les objets, par exemple la transmission de messages. Et la spécification statique décrit les relations entre les classes, par exemple l'agrégation, l'association et l'héritage.

Message passant

Toute application nécessite un certain nombre d'objets interagissant de manière harmonieuse. Les objets d'un système peuvent communiquer entre eux en utilisant la transmission de messages. Supposons qu'un système ait deux objets - obj1 et obj2. L'objet obj1 envoie un message à l'objet obj2, si obj1 veut que obj2 exécute l'une de ses méthodes.

Composition ou agrégation

L'agrégation ou la composition est une relation entre les classes par laquelle une classe peut être constituée de toute combinaison d'objets d'autres classes. Il permet aux objets d'être placés directement dans le corps d'autres classes. L'agrégation est appelée relation «partie-de» ou «a-une», avec la capacité de naviguer du tout à ses parties. Un objet agrégé est un objet composé d'un ou plusieurs autres objets.

Association

L'association est un groupe de liens ayant une structure et un comportement communs. L'association décrit la relation entre les objets d'une ou de plusieurs classes. Un lien peut être défini comme une instance d'une association. Le Degré d'une association indique le nombre de classes impliquées dans une connexion. Le degré peut être unaire, binaire ou ternaire.

  • Une relation unaire relie des objets de la même classe.
  • Une relation binaire relie des objets de deux classes.
  • Une relation ternaire relie des objets de trois classes ou plus.

Héritage

C'est un mécanisme qui permet de créer de nouvelles classes à partir de classes existantes en étendant et en affinant ses capacités. Les classes existantes sont appelées les classes de base / classes parentes / super-classes, et les nouvelles classes sont appelées les classes dérivées / classes enfants / sous-classes.

La sous-classe peut hériter ou dériver les attributs et méthodes de la ou des super-classes à condition que la super-classe le permette. En outre, la sous-classe peut ajouter ses propres attributs et méthodes et peut modifier n'importe laquelle des méthodes de super-classe. L'héritage définit une relation «est - une».

Example

A partir d'une classe de mammifères, un certain nombre de classes peuvent être dérivées telles que l'homme, le chat, le chien, la vache, etc. Les humains, les chats, les chiens et les vaches ont tous les caractéristiques distinctes des mammifères. De plus, chacun a ses propres caractéristiques. On peut dire qu'une vache «est - un» mammifère.

Analyse OO

Dans la phase d'analyse orientée objet du développement logiciel, les exigences du système sont déterminées, les classes sont identifiées et les relations entre les classes sont reconnues. Le but de l'analyse OO est de comprendre le domaine d'application et les exigences spécifiques du système. Le résultat de cette phase est la spécification des exigences et l'analyse initiale de la structure logique et de la faisabilité d'un système.

Les trois techniques d'analyse utilisées conjointement pour l'analyse orientée objet sont la modélisation d'objets, la modélisation dynamique et la modélisation fonctionnelle.

Modélisation d'objets

La modélisation d'objets développe la structure statique du système logiciel en termes d'objets. Il identifie les objets, les classes dans lesquelles les objets peuvent être regroupés et les relations entre les objets. Il identifie également les principaux attributs et opérations qui caractérisent chaque classe.

Le processus de modélisation d'objets peut être visualisé dans les étapes suivantes -

  • Identifiez les objets et regroupez-les en classes
  • Identifier les relations entre les classes
  • Créer un diagramme de modèle d'objet utilisateur
  • Définir les attributs d'un objet utilisateur
  • Définir les opérations à effectuer sur les classes

Modélisation dynamique

Une fois le comportement statique du système analysé, son comportement par rapport au temps et aux changements externes doit être examiné. C'est le but de la modélisation dynamique.

La modélisation dynamique peut être définie comme «une manière de décrire comment un objet individuel répond aux événements, soit des événements internes déclenchés par d'autres objets, soit des événements externes déclenchés par le monde extérieur.

Le processus de modélisation dynamique peut être visualisé dans les étapes suivantes -

  • Identifier les états de chaque objet
  • Identifier les événements et analyser l'applicabilité des actions
  • Construire un diagramme de modèle dynamique, comprenant des diagrammes de transition d'état
  • Exprimer chaque état en termes d'attributs d'objet
  • Valider les diagrammes état-transition dessinés

Modélisation fonctionnelle

La modélisation fonctionnelle est le dernier composant de l'analyse orientée objet. Le modèle fonctionnel montre les processus exécutés dans un objet et la manière dont les données changent à mesure qu'elles se déplacent entre les méthodes. Il spécifie le sens des opérations d'une modélisation d'objet et des actions d'une modélisation dynamique. Le modèle fonctionnel correspond au diagramme de flux de données de l'analyse structurée traditionnelle.

Le processus de modélisation fonctionnelle peut être visualisé dans les étapes suivantes -

  • Identifier toutes les entrées et sorties
  • Construire des diagrammes de flux de données montrant les dépendances fonctionnelles
  • Énoncez le but de chaque fonction
  • Identifier les contraintes
  • Spécifier les critères d'optimisation

Conception orientée objet

Après la phase d'analyse, le modèle conceptuel est développé en un modèle orienté objet utilisant la conception orientée objet (OOD). Dans OOD, les concepts indépendants de la technologie dans le modèle d'analyse sont mappés sur des classes d'implémentation, les contraintes sont identifiées et les interfaces sont conçues, ce qui donne un modèle pour le domaine de la solution. L'objectif principal de la conception OO est de développer l'architecture structurelle d'un système.

Les étapes de la conception orientée objet peuvent être identifiées comme suit:

  • Définition du contexte du système
  • Conception de l'architecture du système
  • Identification des objets dans le système
  • Construction de modèles de conception
  • Spécification des interfaces d'objets

La conception OO peut être divisée en deux étapes: la conception conceptuelle et la conception détaillée.

Conceptual design

Dans cette étape, toutes les classes nécessaires à la construction du système sont identifiées. De plus, des responsabilités spécifiques sont attribuées à chaque classe. Le diagramme de classes est utilisé pour clarifier les relations entre les classes, et le diagramme d'interaction est utilisé pour montrer le flux des événements. Il est également connu sous le nom dehigh-level design.

Detailed design

Dans cette étape, les attributs et les opérations sont attribués à chaque classe en fonction de leur diagramme d'interaction. Des diagrammes de machine d'état sont développés pour décrire les détails supplémentaires de la conception. Il est également connu sous le nom delow-level design.

Principes de conception

Voici les principaux principes de conception -

Principle of Decoupling

Il est difficile de maintenir un système avec un ensemble de classes hautement interdépendantes, car la modification d'une classe peut entraîner des mises à jour en cascade d'autres classes. Dans une conception OO, le couplage étroit peut être éliminé en introduisant de nouvelles classes ou l'héritage.

Ensuring Cohesion

Une classe cohésive exécute un ensemble de fonctions étroitement liées. Un manque de cohésion signifie - une classe remplit des fonctions indépendantes, même si cela n'affecte pas le fonctionnement de l'ensemble du système. Cela rend toute la structure du logiciel difficile à gérer, à développer, à maintenir et à modifier.

Open-closed Principle

Selon ce principe, un système doit pouvoir s'étendre pour répondre aux nouvelles exigences. L'implémentation existante et le code du système ne doivent pas être modifiés à la suite d'une extension du système. De plus, les directives suivantes doivent être suivies en principe ouvert-fermé -

  • Pour chaque classe concrète, une interface et des implémentations distinctes doivent être maintenues.

  • Dans un environnement multithread, gardez les attributs privés.

  • Minimisez l'utilisation de variables globales et de variables de classe.