Comme Oracle Corporation a introduit quelques constructions fonctionnelles dans Java SE 8, de nos jours, la plupart des interviewers sont intéressés à poser des questions sur la programmation fonctionnelle. En tant que développeur Java/Groovy/Scala ou tout développeur de programmation fonctionnelle, nous devrions apprendre les questions et réponses suivantes pour réussir les entretiens :
- Qu’est-ce que la programmation fonctionnelle ?
- Quels sont les « pour et contre » de la programmation fonctionnelle ?
- Quelles sont les différences entre la programmation fonctionnelle et la programmation impérative ?
- Quelles sont les différences entre la programmation fonctionnelle et la programmation orientée objet ?
- Quelles sont les différences entre la programmation fonctionnelle, la programmation impérative (IP) et la programmation orientée objet ?
- Quels sont les principaux avantages de la programmation fonctionnelle par rapport à la programmation impérative ou à la programmation orientée objet ?
- Quand utiliser la programmation fonctionnelle ?
- Quand utiliser la programmation orientée objet ?
- Quels sont les inconvénients de la POO ?
- Quels sont les inconvénients de l’héritage en POO ?
… Et plus encore
Dans cet article, nous allons discuter des trois paradigmes de programmation populaires un par un et répondre également aux questions ci-dessus :
- Programmation fonctionnelle (FP)
- Programmation impérative (IP)
- Programmation orientée objet (OOP)
Qu’est-ce que la programmation fonctionnelle?
En termes simples, la programmation fonctionnelle (FP) est l’un des paradigmes de programmation populaires, qui effectue des calculs comme des fonctions mathématiques sans changer l’état et muter les données. En programmation fonctionnelle, les fonctions sont des candidats de première classe. Nous écrivons des programmes en définissant un ensemble de fonctions et de données immuables. Exemples de langages FP : – Scala, Haskell, Erlang, etc., sont des langages FP populaires. Java SE 8 a également quelques constructions fonctionnelles (veuillez vous référer aux publications sur Java 8 pour plus de détails)
Quelles sont les caractéristiques de la FP?
Les langages de programmation fonctionnelle comme Scala ont les caractéristiques suivantes
- L’État n’existe pas.
Les programmes FP ne contiennent pas d’état. Cela signifie que toutes les données sont des données immuables et que les fonctions ne peuvent pas changer l’état.2. Faible importance de l’ordre d’exécution
En langages FP, nous écrivons des programmes avec un ensemble de fonctions indépendantes. Les fonctions contiennent un ensemble d’instructions. En FP, l’ordre d’exécution de ces fonctions n’a pas beaucoup d’importance car elles n’ont pas d’état et toutes les fonctions travaillent de manière indépendante. Même si nous changeons l’ordre d’exécution, elles produisent toujours les mêmes résultats.3. Modèle de programmation sans état
Tous les programmes FP utilisent des données et des fonctions immuables, qui ne peuvent pas modifier ces données. Cela signifie que les langages FP prennent en charge le modèle de programmation sans état.4. Les fonctions sont des citoyens de première classe
En langages FP, les fonctions sont des objets de première classe. Les fonctions sont des unités indépendantes, nous pouvons les exécuter dans n’importe quel ordre.5. Unités de manipulation principales
En langages FP, les unités de manipulation principales sont les fonctions et les structures de données car tous les programmes sont constitués en utilisant ces unités.6. Programmation modulaire
En langages FP, nous devons écrire des unités plus petites et indépendantes, appelées fonctions pures, pour prendre en charge le modèle de programmation sans état. Cela signifie que FP prend en charge une modularité meilleure que l’OOP.7. Fonctions d’ordre supérieur et évaluation paresseuse
Les langages de programmation fonctionnelle doivent prendre en charge des fonctions d’ordre supérieur et des fonctionnalités d’évaluation paresseuse.8. Contrôles de flux principaux
Les langages FP n’utilisent pas de contrôles de flux tels que les boucles For, Do…While, While…Loop, etc., et n’utilisent pas non plus d’instructions conditionnelles telles que If…Else ou les instructions Switch. Tous les langages FP écrivent des programmes en utilisant les éléments suivants:
- Fonctions
- Appels de fonction
- Appels de fonction avec Récursion
- Abstraction, Encapsulation, Héritage et PolymorphismeComme en POO, les langages FP prennent en charge les 4 concepts : Abstraction, Encapsulation, Héritage et Polymorphisme. Les langages FP prennent en charge l’Héritage avec des Classes de Types ou des Implicites. Ils prennent en charge le Polymorphisme à l’aide de Génériques. Il est également connu sous le nom de Polymorphisme Paramétrique.
Quel est le principal objectif de FP ?
Contrairement aux langages de POO, tous les programmes en langage FP se concentrent principalement sur « Ce que vous faites » ou « Ce qui doit être fait ». Ils se concentrent principalement sur les éléments suivants :
- Quelles informations sont désirées, c’est-à-dire les Entrées.
- Quelles transformations sont nécessaires, c’est-à-dire la Logique Réelle.
Cela signifie que FP se concentre principalement sur « Ce qui doit être fait ». Il ne se concentre pas beaucoup sur « Comment le faire ». C’est pourquoi nous pouvons écrire la Programmation Fonctionnelle comme une description du Domaine du Problème. C’est pourquoi, non seulement les Développeurs mais aussi d’autres personnes peuvent comprendre très facilement le code FP. Nous allons maintenant discuter des « Avantages et Inconvénients » de la Programmation Fonctionnelle.
Avantages de la programmation fonctionnelle?
Les langages de programmation fonctionnelle ont les avantages suivants ou bénéfices ou points positifs:
- Code sans bugs
Comme les langages de programmation fonctionnelle n’acceptent pas l’état, ils n’engendrent aucun effet secondaire, ce qui signifie que nous pouvons écrire un code sans erreurs, un code sans bugs ou un code moins sujet aux erreurs. – Programmation parallèle efficace
Comme les langages de programmation fonctionnelle n’ont pas d’état mutable, ils ne posent pas de problèmes de changement d’état. Cela signifie qu’ils n’utilisent que des données immuables. Ils utilisent des unités indépendantes pour écrire des programmes, à savoir des « fonctions ». Nous pouvons écrire des programmes parallèles ou concurrents très efficaces car ils s’exécutent indépendamment sans modifier l’état. – Meilleures performances
Comme les programmes fonctionnels sont composés de toutes les unités indépendantes, ils peuvent s’exécuter de manière parallèle ou concurrente. Pour cette raison, les applications fonctionnelles obtiennent de meilleures performances. – Meilleure encapsulation
Contrairement à la POO, la programmation fonctionnelle prend en charge une meilleure encapsulation avec des fonctions pures. Les fonctions pures signifient sans effets secondaires. – Prise en charge des fonctions imbriquées
Les fonctions imbriquées signifient composer des fonctions les unes dans les autres pour résoudre des problèmes. La programmation fonctionnelle prend en charge les fonctions imbriquées. – Augmentation de la réutilisabilité
Étant donné que les programmes fonctionnels sont constitués d’unités indépendantes, c’est-à-dire de « fonctions », nous pouvons les réutiliser très facilement. – Meilleure modularité
Dans les langages de programmation fonctionnelle, nous devons écrire des unités plus petites et indépendantes, appelées fonctions pures, pour prendre en charge le modèle de programmation sans état. Cela signifie que la programmation fonctionnelle prend en charge une meilleure modularité que la POO. – Évaluation paresseuse facile
Dans les langages de programmation fonctionnelle, il est très facile d’écrire une évaluation paresseuse. Ils prennent en charge des constructions fonctionnelles paresseuses telles que des listes paresseuses, des maps paresseuses, etc. – Amélioration de la lisibilité et de la maintenabilité
La programmation fonctionnelle (FP) améliore également la lisibilité et la maintenabilité car elle fonctionne de manière indépendante et ne modifie pas l’état. – Augmentation de la testabilité
Comme nous écrivons nos programmes FP en utilisant des unités indépendantes, c’est-à-dire des « fonctions », nous pouvons les tester unitairement très facilement. – Prise en charge de l’abstraction sur le comportement
Contrairement à la POO, la programmation fonctionnelle prend en charge à la fois « l’abstraction sur les données » et « l’abstraction sur le comportement ». Parce que le monde réel contient les deux. – Prise en charge de BigData
Comme la programmation fonctionnelle prend en charge la programmation parallèle et de meilleures performances, elle est très adaptée au développement d’applications BigData. – Code robuste et fiable
Comme la programmation fonctionnelle utilise des données immuables, nous pouvons développer facilement un code robuste et fiable en utilisant la FP.
Les inconvénients de la programmation fonctionnelle?
En dehors des grands avantages, les langages de programmation fonctionnelle ont également très peu ou négligeables inconvénients. Ils n’ont que les inconvénients suivants:
- Nécessite beaucoup de mémoire
La PF n’a pas d’état. Ils créent toujours de nouveaux objets pour effectuer des actions au lieu de modifier les objets existants. À cause de cela, les applications PF prennent beaucoup de mémoire.- Ne se concentre PAS sur la substitution de Liskov
Quels sont les principaux concepts de la programmation fonctionnelle?
Les concepts suivants sont des concepts majeurs et importants de la programmation fonctionnelle.
- Fonctions de première classe.
- Évaluation paresseuse.
- Fonctions d’ordre supérieur.
- Immutabilité (données non mutables).
- Modularité.
- Pas d’effets secondaires.
- Évaluation paresseuse.
- Appels de fonction récursifs.
Qu’est-ce que la programmation impérative?
La programmation impérative (IP) est l’un des paradigmes de programmation populaires qui exécute une séquence d’étapes/instructions/déclarations dans un certain ordre. Exemples de langages IP : – Java, C, C++ etc
Caractéristiques principales de la programmation impérative?
Tous les langages de programmation impérative (IP) peuvent contenir les caractéristiques suivantes :
- Séquence de déclarations.
- L’ordre d’exécution des déclarations est très important.
- Ils contiennent un état.
- Ils utilisent à la fois des données immuables et mutables.
- Ils peuvent changer d’état.
- Ils peuvent avoir des effets secondaires.
- Modèle de programmation étatique.
- Ils modifient directement l’état du programme.
- Ils représentent l’état avec des champs de données.
Qu’est-ce que la programmation orientée objet?
La Programmation Orientée Objet est un autre type de paradigme de programmation. Il représente tout comme un objet. Chaque objet contient des champs de données et des méthodes. Tous les programmes POO contiennent un état. Ils utilisent des données mutables et des structures de données. Comme en PF, nous pouvons écrire des programmes complets en utilisant des données immuables, mais cela n’impose pas cette règle. La Programmation Orientée Objet (POO) est un sur-ensemble de la Programmation Impérative. Elle suit toutes les caractéristiques de la PI avec quelques fonctionnalités supplémentaires. Ces fonctionnalités supplémentaires sont :
- Tout est un objet.
- Chaque objet contient des champs de données et des méthodes.
- Concepts de POO : Abstraction, Encapsulation, Héritage et Polymorphisme.
Contrairement aux langages de programmation fonctionnelle, les langages de POO sont principalement axés sur « Comment cela doit-il être fait ». Cela signifie que en tant que développeur, nous nous concentrons sur « Comment vous le faites ». De plus, la POO combine à la fois « Ce que vous faites » et « Comment vous le faites ». C’est pourquoi nous ne pouvons pas écrire de code concis et plus lisible. Seuls les développeurs peuvent comprendre le code, les autres personnes peuvent être plus confuses pour comprendre le code de l’application, ils ne peuvent pas le comprendre.
Quels sont les inconvénients de la Programmation Orientée Objet (POO) ?
Même si la POO résout de nombreux problèmes en temps réel, elle présente toujours les inconvénients suivants (comparé à la PF) :
- Elle ne prend pas en charge la réutilisabilité complète.
- Ce n’est pas pleinement modulaire.
- Il enfreint le concept d’encapsulation.
- L’héritage présente de nombreux inconvénients.
Principaux inconvénients de l’héritage :
- Rompt le principe d’encapsulation
- Plus le niveau d’héritage augmente, plus il est difficile de maintenir et de créer des objets.
Quand utiliser la programmation fonctionnelle ?
Nous devrions opter pour la programmation fonctionnelle (FP) dans les scénarios suivants :
- Lorsque nous allons effectuer de nombreuses opérations différentes sur des données fixes.
- En d’autres termes, lorsque nous avons peu de choses avec plus d’opérations.
Quand utiliser la programmation orientée objet ?
Nous devrions opter pour la programmation orientée objet (OOP) dans les scénarios suivants :
- Lorsque nous allons effectuer quelques opérations sur de nombreuses variantes différentes qui ont un comportement commun.
- En d’autres termes, lorsque nous avons plus de choses avec peu d’opérations.
REMARQUE :- Ici, les choses sont des objets du monde réel et les opérations sont des actions du monde réel. Par exemple, en Java, nous représentons ces choses du monde réel comme des « Classes » et les actions du monde réel comme des méthodes (opérations).
Différences entre FP et OOP(IP) ?
Functional Programming | OOP |
---|---|
Does not exist State | Exists State |
Uses Immutable data | Uses Mutable data |
It follows Declarative Programming Model | It follows Imperative Programming Model |
Stateless Programming Model | Stateful Programming Model |
Main Fcous on: “What you are doing” | Main focus on “How you are doing” |
Good for Parallel (Concurrency) Programming | Poor for Parallel (Concurrency) Programming |
Good for BigData processing and analysis | NOT Good for BigData processing and analysis |
Supports pure Encaspulation | It breaks Encaspulation concept |
Functions with No-Side Effects | Methods with Side Effects |
Functions are first-class citizens | Objects are first-class citizens |
Primary Manipulation Unit is “Function” | Primary Manipulation Unit is Objects(Instances of Classes) |
Flow Controls: Function calls, Function Calls with Recursion | Flow Controls: Loops, Conditional Statements |
It uses “Recursion” concept to iterate Collection Data. | It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java |
Order of execution is less importance. | Order of execution is must and very important. |
Supports both “Abstraction over Data” and “Abstraction over Behavior”. | Supports only “Abstraction over Data”. |
We use FP when we have few Things with more operations. | We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java. |
C’est tout sur trois paradigmes de programmation populaires. REMARQUE :- Je viens essentiellement de l’OOP, mais j’ai commencé à travailler sur le FP il y a seulement un an. Donc, si des experts en programmation fonctionnelle trouvent des erreurs dans ce message, veuillez me fournir vos précieuses contributions. N’hésitez pas à me laisser un commentaire si vous aimez mon message ou si vous avez des doutes ou des suggestions.