Que feriez-vous si votre client vous demandait de ne pas utiliser de programmation orientée objet?


31

J'écris un programme pour simuler l' activité des fourmis dans une grille (PDF). La fourmi peut se déplacer, ramasser des objets et les faire tomber.

Le problème est que l'action des fourmis et les positions de chaque fourmi peuvent être suivies par les attributs de classe facilement (et nous pouvons facilement créer de nombreuses instances de telles fourmis) mon client a déclaré que, comme il avait une formation en programmation fonctionnelle, il aimerait simulation à effectuer à l'aide d'une programmation fonctionnelle.

Pour être clair, les mots originaux du client sont "pas de classe" seulement, mais pas "programmation fonctionnelle". Je suppose donc qu'il ne veut pas dire programmation fonctionnelle et je peux le faire impérativement. De plus, je n'ai aucune expérience préalable en programmation fonctionnelle.

Cependant, je pense qu'il est bénéfique de se concentrer sur cette question concernant en particulier une exigence de programmation fonctionnelle plutôt que simplement «le faire impérativement».

Comment géreriez-vous cette situation? Souhaitez-vous essayer de persuader votre client que l'utilisation de la programmation orientée objet est beaucoup plus propre, essayer de suivre ce dont il a besoin et lui donner un code de mauvaise qualité, ou faire autre chose?


9
Une chose qui pourrait changer d'avis, c'est si le coût de cette opération est plus élevé (si vous maîtrisez mieux les langages OO qu'un langage de programmation fonctionnel).
Holger

Il pourrait être intéressant de comparer le code de simulation de fourmi de Rich Hickey ( gist.github.com/1093917 ) - dans Clojure si fondamentalement fonctionnel bien que la simulation ait été principalement conçue pour démontrer l'utilisation de STM.
mikera

13
Commentateurs: Ne laissez pas de réponse ici dans les commentaires. Écrivez votre propre réponse. Les commentaires ne sont pas un lieu de discussion pour les différentes réponses possibles à la question: présentez votre suggestion comme réponse ou amenez-la à discuter pour la développer en premier.

6
Je voulais juste m'assurer que vous avez vu le point de N3dst4 que la «programmation fonctionnelle» est une discipline de programmation particulière. Une programmation qui n'est pas orientée objet est généralement décrite comme une "programmation procédurale".
DJClayworth

1
Pourquoi pensez-vous qu'une implémentation orientée objet serait "beaucoup plus propre"? Ce sera probablement beaucoup moins lisible qu'une solution fonctionnelle appropriée.
SK-logic

Réponses:


201

Le code orienté objet n'est pas par définition plus propre, et inversement le code non OO n'est pas par définition merdique. Bien qu'il semble y avoir un mappage orienté objet assez évident pour ce problème particulier, je vous suggère d'essayer l'approche de programmation fonctionnelle de toute façon. Donnez-lui votre meilleur coup, essayez de résoudre le problème dans le meilleur style de programmation fonctionnel que vous pouvez rassembler, et vous pourriez juste apprendre quelque chose que vous ne vous attendiez pas.


83
+1 pour "vous pourriez juste apprendre quelque chose à quoi vous ne vous attendiez pas"!
Kenneth

2
De plus, la programmation orientée données permet d'excellentes performances car elle est compatible avec le cache et est mieux implémentée dans des ensembles de fonctions traitant des blocs de données. Cela semble parfait pour le problème sur lequel vous travaillez. Je ne sais pas comment cela s'applique à la programmation fonctionnelle, mais je suppose que cela aide plus que ça fait mal.
Klaim

8
+1 pour "vous pourriez juste apprendre quelque chose à quoi vous ne vous attendiez pas!", MAIS: si l'OP n'a pas beaucoup d'expérience en programmation fonctionnelle et que le client attend une solution bonne et bon marché, il serait plutôt risqué de plonger dans un nouvelle façon de résoudre les problèmes.
mort

3
@mort - Dans ce cas, le client veut quelque chose de précis, on dirait qu'il en sait suffisamment pour savoir ce qu'il veut, donc si la personne qu'il a embauchée ne peut pas le faire, c'est son problème. Je suppose que ce que je dis est le fait que le client veut quelque chose de "bon et pas cher" et qu'il a engagé la mauvaise personne qui ne peut pas fournir cela, c'est la faute du client, pas la faute de l'auteur, il ne sait pas comment fournir un service bon marché et bonne solution de programmation fonctionnelle à ce problème. L'un d'eux vaut la peine que l'auteur essaie de fournir ce que le client veut, car il n'y a aucune raison technique de ne pas le faire.
Ramhound

2
Nulle part dans la question, le PO n'a prononcé les mots "bon et pas cher". Le désir pourrait être «rapide et bon» (sur les trois: rapide, bon, bon marché). Tout cela n'est pas pertinent, sans guide OP, car les "Spécifications" disent "Utiliser la programmation fonctionnelle".
WernerCD

68

Vous mentionnez que le client avait l'habitude de programmer dans un langage fonctionnel, il a peut-être une raison pour laquelle il vous demande d'écrire le code dans un style fonctionnel. Tu devrais lui demander pourquoi .

Peut-être qu'il a l'intention de garder le code et de le maintenir lui-même plus tard.

De plus, je ne pense pas que les deux choix soient de le faire à la manière OO ou d'écrire du code merdique comme vous l'avez mentionné. Bien sûr, écrire du code fonctionnel dans un exemple comme celui-ci pourrait être plus difficile, surtout si vous n'avez qu'une expérience dans les langages orientés objet, mais si le client est prêt à attendre un peu plus longtemps pour que vous vous familiarisiez avec le style fonctionnel, il ne le ferait pas '' t mal de lui demander cela.

Je lui demanderais pourquoi il veut le code dans un style fonctionnel et si le temps n'est pas vraiment un problème, je demanderais quelques jours supplémentaires pour se familiariser avec la programmation fonctionnelle. (hourra pour être payé pour apprendre!)

Si tout le reste échoue, expliquez qu'il vous faudrait beaucoup moins de temps pour le faire dans un style OO.


@downvoter donneriez-vous des commentaires?
Thanos Papathanasiou

3
Je comprends que la notation tl; dr vaut un downvote, pour certains
Indépendant

1
Y a-t-il quelque chose dans la FAQ ou les pages d'aide où que ce soit réprimandant l'utilisation de "tl; dr"? Ou est-ce juste des utilisateurs voyous qui ne l'aiment pas? Il me semble que l'ajout d'un résumé succinct d'une réponse ne peut être qu'une bonne chose, donc je ne peux pas imaginer pourquoi cela serait considéré comme méritant un downvote.
Ben Lee

1
@Bratch Je pensais que la notation tl; dr était pour l'utilisateur qui essayait de lire ma réponse. Cela signifie que même si vous sautez tout le reste, si vous venez de lire ceci, vous obtenez l'essentiel de la réponse. Que voulez-vous dire par ce que vous dites?
Thanos Papathanasiou

1
Certains d'entre nous, les personnes âgées, n'ont aucune idée de ce que signifie tl; dr (je l'ai cherché mais pourquoi quelqu'un utiliserait-il un tel non-sens cryptique?)
HLGEM

55

Savez-vous que la programmation fonctionnelle ne signifie pas seulement "programmation sans classes"?

Voir l'article Wikipedia à ce sujet pour le schéma complet, mais en bref ...

En informatique, la programmation fonctionnelle est un paradigme de programmation qui traite le calcul comme l'évaluation de fonctions mathématiques et évite les données d'état et mutables. Il met l'accent sur l'application des fonctions, contrairement au style de programmation impératif, qui met l'accent sur les changements d'état.

La programmation fonctionnelle est un paradigme de programmation, tout comme OO est un paradigme de programmation.

Si votre arrière-plan est en OO, je peux voir comment vous voudriez que toutes vos fourmis soient des objets. D'un autre côté, si vous simulez une ferme de fourmis avec des millions de fourmis, l'OO et la transmission de messages peuvent devenir inefficaces.

Heureusement pour vous, Python dispose d'excellents outils de programmation fonctionnelle (le plus important étant que les fonctions sont des objets de première classe.)

HOWTO de programmation fonctionnelle Python


+1 pour poing this out. Cela devrait vraiment être clarifié dans la question.
Bratch

Saviez-vous que vous pouvez avoir des langages à la fois OO et fonctionnels? Ce sont deux principes d'organisation qui sont en fait largement orthogonaux l'un à l'autre. Certes, de nombreux langages OO sont également des langages impératifs structurés, mais il n'y a aucune base théorique pour les coupler fortement.
Donal Fellows

@DonalFellows Absolument, c'est un bon point que les deux ne s'excluent pas du tout. Python (car la question était à l'origine étiquetée Python) est impératif, orienté objet et fonctionnel, selon votre position lorsque vous la regardez. Et ailleurs sur cette page, quelqu'un mentionne OCaml, qui est OO et fonctionnel.
N3dst4

22

Expliquez à votre client que s'il veut une programmation fonctionnelle, il devrait embaucher quelqu'un qui se spécialise dans ce domaine. La programmation fonctionnelle est très différente de la POO, et vous vous tromperez si vous pensez que vous pouvez facilement la récupérer et fournir une solution complexe de haute qualité.


Se mettre d'accord. C'est juste du bon sens appliqué.
Monsieur Smith

1
Le problème est que, d'un point de vue commercial, il n'est pas toujours facile d'admettre votre manque de connaissances au client ("Vous devriez plutôt engager quelqu'un qui connaît la programmation fonctionnelle"). Il est plus facile de prétendre que la POO est meilleure, simplement parce que vous la connaissez. Moins honnête , mais plus facile.
Andres F.

@Andres F: Gérer une nouvelle langue (et un nouveau paradigme) n'est pas du tout facile. Tôt ou tard, le client doit reconsidérer le problème. Mieux tôt que tard.
Monsieur Smith,

4
@ Monsieur Smith: Je suis entièrement d'accord avec vous. Je dis simplement que ce genre d'honnêteté du fournisseur (c'est-à-dire du programmeur) n'est pas toujours à venir. Essentiellement, vous dites au client d'embaucher quelqu'un d'autre, ce qui a tout son sens dans le monde, mais est néanmoins douloureux.
Andres F.

13

Il y a une idée fausse commune selon laquelle "OO" est complètement contraire à "fonctionnel". Ces choses peuvent très bien aller de pair. Dans votre exemple, je suppose qu'un "Ant" peut être modélisé ainsi qu'un type de données abstrait, qui peut être directement implémenté à l'aide de classes et d'objets. Les transitions entre les "états Ant" peuvent être modélisées naturellement à l'aide de fonctions, ce qui vous conduira à une approche fonctionnelle dans la mesure où votre classe "Ant" est un type immuable.

Et sachez que les "objets" peuvent être échangés par le concept fonctionnel d'une fermeture, puisque les objets sont les fermetures du pauvre sont les objets du pauvre sont les ... ;-):

https://stackoverflow.com/questions/2497801/closures-are-poor-mans-objects-and-vice-versa-what-does-this-mean

https://stackoverflow.com/questions/501023/closures-and-objects


+1 La programmation fonctionnelle et la POO sont des concepts orthogonaux. Regardez OCaml, Scala, Clojure, python pour les langages qui peuvent gérer les deux.
rds

Ces deux liens valent à eux seuls un vote positif ...
Wayne Werner

8

Après en avoir discuté avec le client, s'il le veut toujours à sa façon, soit vous faites un travail professionnel, soit si vous ne le pouvez pas, vous ne prenez pas le contrat ou ne trouvez pas de solution.

Produire du "code merdique" simplement parce que vous n'êtes pas d'accord serait très peu professionnel.


8
  1. Pourquoi supposons-nous tous que le client connaît la différence entre la programmation fonctionnelle et impérative? Beaucoup de gens ne connaissent pas les noms ou les spécificités des paradigmes de programmation non OO et échangeront facilement des termes comme "procédural" "impératif" et "fonctionnel".

  2. Ne marchez pas comme les autres vous disent de marcher à moins que vous ne croyiez que vous devriez marcher de cette façon. Par conséquent, si vous ne croyez pas que la programmation fonctionnelle est appropriée, ne vous préparez pas à échouer ou à entreprendre un projet sans enthousiasme.

  3. Si le client écrit la spécification, implémentez-la, sinon vous écrivez la spécification et implémentez votre spécification.

  4. La meilleure stratégie pour influencer les décisions des clients est de rendre l'option indésirable beaucoup plus chère. Cela fonctionne à chaque fois.

  5. Si vous êtes l'expert (par rapport au client), vous devriez pouvoir le persuader.

  6. Afin de vraiment savoir si le client a un point valide, vous devez acquérir plus d'expérience avec la programmation fonctionnelle, soit pour pouvoir l'abattre en toute confiance, soit pour réaliser que votre parti pris pour l'OO est dû à votre inexpérience.

  7. Pourquoi ne pas procéder dans les deux sens, laissez ensuite le client voir les deux implémentations et décidez quelle est la plus facile à maintenir. Il vous suffit de prendre en compte tout cela dans les estimations de votre projet afin que vous puissiez profiter de la courbe d'apprentissage pendant que vous êtes payé.


+1 pour "Pourquoi supposons-nous tous que le client connaît la différence entre la programmation fonctionnelle et impérative?". Le client peut signifier quelque chose comme «Je ne veux pas que ce soit répétitif, alors décomposez tout en fonctions», ce qui est du bon sens pour les développeurs. Un client peut ne pas penser que c'est du bon sens, alors il vous le dit.
AlexWebr

1
+1, en réalité, le client n'a aucune idée de ce qu'est une programmation fonctionnelle, elle est motivée par les derniers mots à la mode ou parce qu'elle l'a fait il y a vingt ans et se considère toujours comme technique.
Type anonyme

5

Avant de continuer, je m'assurerais que vous parliez tous les deux de la même chose. Vous pourriez lui demander quand le logiciel est «orienté objet» pour lui. Sine, il a dit que ce n'était pas son expertise principale lui-même, il se peut qu'il ait une idée biaisée.

Par exemple, de nombreuses personnes pourraient envisager

class C {
public:
  C();
  void f( int );
  void g();
};

être une approche orientée objet classique, mais

struct C;
void construct( C ** );
void f( C *obj, int arg);
void g( C *obj );

pas (même si les deux sont également orientés objet en ce qui concerne la définition classique de "données avec les fonctions qui les opèrent").


2
Pourquoi discuter de la signification précise de la POO? Il serait préférable de se demander pourquoi le client pense que sa simulation est mieux adaptée à la programmation fonctionnelle. Le client a peut-être raison ... Je doute sérieusement que par "fonctionnel" il voulait dire votre deuxième exemple C, ou qu'il confondait "fonctionnel" avec "impératif".
Andres F.

@Andres F.: Je n'ai pas prétendu que par «fonctionnel» il voulait dire mon deuxième exemple C. Je soulignais simplement que certaines personnes considèrent que c'est de la POO alors que d'autres ne le pensent pas. Donc, avant de commencer un argument, il serait bon d'éviter tout malentendu. Peut-être qu'il n'y a pas de désaccord en premier lieu. Peut-être que le patron, puisqu'il a dit qu'il n'était pas familier avec OOP lui-même, suppose que OOP a certaines propriétés (tout comme l'OP a supposé que la programmation fonctionnelle avait certaines propriétés).
Frerich Raabe

Strictement, je ne considérerais pas ce dernier comme une POO car la méthode d'appel / envoi de message n'est pas routée via l'objet. C'est une caractéristique clé de la POO.
Donal Fellows du

5

Souhaitez-vous essayer de persuader votre client que l'utilisation de la programmation orientée objet est beaucoup plus propre?

Je pense que vous devez vous renseigner davantage sur les paradigmes de programmation. Le code programmé orienté objet n'est pas nécessairement plus propre, et en fait, il n'est pas universellement applicable. En outre, un bon codeur orienté objet sait faire du bon travail en utilisant un procédural / modulaire (avec les paradigmes fonctionnels et déclaratifs, c'est un peu plus difficile, mais il ne devrait pas être trop difficile pour un bon programmeur d'arriver - via la lecture et la déduction - vers une solution FP / déclarative acceptable.)

Vous ne pouvez presque jamais, je le répète, vous ne pouvez presque pas avoir une bonne compréhension du moment et de la façon d'utiliser l'orientation d'objet sans avoir une bonne compréhension de la programmation procédurale et modulaire. OO est bien plus que la simple déclaration de classes et de hiérarchies d'héritage.

Ou essayez-vous de suivre ce dont il a besoin et de lui donner un code merdique?

Si vous ne pouvez pas écrire du bon code de manière procédurale, je doute que vous puissiez écrire du bon code d'une manière orientée objet. Période. Je n'essaie pas de juger ici, mais cela doit être affirmé.

L'orientation objet est une extension de la programmation procédurale et modulaire. L'orientation objet vous fournit simplement des outils qui, lorsqu'ils sont utilisés de manière appropriée, vous offrent de meilleurs mécanismes pour gérer les problèmes d'encapsulation, de couplage, de cohésion et de réutilisation / extensibilité du code.

Mais tous ces problèmes ne sont pas inhérents et uniques à OO. Ils existent dans le code procédural / modulaire (et dans d'autres paradigmes d'ailleurs). C'est le type de problèmes de complexité qui, à la base, est indépendant du paradigme. Si vous ne pouvez pas les manipuler sans colle OO, il est peu probable que vous puissiez les manipuler avec.

=========

Revenons à votre question initiale, à savoir s'il faut essayer de convaincre votre client. Ça dépend. Comme l'a dit l'affiche Sean McMillan, si le client essaie simplement de micro-gérer l'effort de développement d'un programme (lire, politique de bureau), éloignez-vous. Les gens qui font des projets de sabotage pour blâmer quelqu'un d'autre ou pour pousser un programme particulier. Vous ne voulez pas vous impliquer là-dedans.

OTH, il pourrait y avoir d'autres raisons pour une telle exigence. De nombreuses boutiques intégrées, pour le bien ou pour le mal, choisissent de mettre beaucoup de contraintes sur ce que vous pouvez faire avec C ++ (pas de méthodes virtuelles, pas d'exceptions, par exemple.) Parfois, cela se fait de manière agressive. D'autres fois, il existe des raisons techniques valables de le faire.

Vous devez donc comprendre pourquoi le client veut éviter le code OO. Et si vous pouvez supposer qu'il n'y a pas d'agenda politique (pas de drapeaux rouges), alors vous devriez faire la chose professionnelle à faire, qui est simplement de faire le code procédural / modulaire, et de faire du bon travail.

Il n'y a vraiment aucune excuse pour fournir du code merdique, indépendamment du paradigme de programmation. Si vous ne pouvez pas produire de code acceptable avec un seul paradigme, vous ne pouvez certainement pas produire de code acceptable en général.


3

Vous mélangez les structures de données et la programmation orientée objet (une confusion courante dans ce monde infesté d'OO)

Si tout ce que vous avez à faire est de "suivre les attributs des données" dans une structure de données et de les modifier, alors presque toutes les langues créées après les années 70 auront un bon support, OO ou non.

Les choses qui sont plus faciles à faire en OO sont les mouches à papier

  • Héritage basé sur les classes (il est facile de créer une nouvelle classe qui prétend être une ancienne)
  • Polymorphisme basé sur les classes (il est facile d'ajouter de nouveaux types de fourmis à la simulation par la suite)

Si vous n'avez pas un besoin urgent de l'un d'entre eux, alors fondamentalement, tout paradigme de programmation devrait résoudre ce problème sans trop de problèmes.


J'ajouterais que tout langage de programmation fonctionnel prenant en charge le polymorphisme devrait faciliter l'écriture d'un style orienté objet ou pseudo-objet qui vous permet d'ajouter facilement de nouveaux types de fourmis.
Marcin

@Marcin: il est vrai que les langages FP modernes sont assez puissants. Je voulais juste souligner la distinction entre data-structurs / ADTs et OO
hugomg

Mais OO n'est en réalité que des ADT et une répartition de méthode contrôlée par objet. Tout le reste s'appuie sur cela. (Eh bien, souvent le seul contrôle par l'objet sur la répartition est par le type de l'objet, mais c'est un raffinement.)
Donal Fellows

3

mon client a dit que, comme il avait une formation en programmation fonctionnelle, il aimerait que la simulation soit faite en utilisant la programmation fonctionnelle.

(Ceci est encore un autre exemple d'un problème social confondu avec un problème technique / de conception.)

Il y a deux possibilités ici:

  1. Votre client s'attend à être en mesure de prendre le code que vous avez écrit et d'adapter ou de le maintenir lui-même après avoir fini de l'écrire. Si oui, vous devriez en savoir beaucoup plus sur le "style maison" - fonctionnel vs OO n'est que la pointe de l'iceberg. Vous devrez soit vous limiter à un style de programmation que votre client comprend, soit vous devrez éduquer votre client dans les styles que vous préférez. (Une fois, on m'a demandé de créer une application Web avec CGI, sans utiliser de modèles ou de bibliothèques car le client pourrait vouloir apporter des modifications.)

  2. Votre client essaie de contrôler le développement en raison d'un programme. C'est un sac plein de folie dont vous ne voulez rien avoir à faire. Si vous fournissez vraiment un logiciel "clé en main", le client ne devrait pas se soucier s'il est fait de hamsters qui roulent, tant qu'il fait le travail de manière fiable. Vous permettre d'être microgéré de cette façon, c'est simplement demander de la douleur.

C'est à vous de décider dans quelle situation vous vous trouvez et d'agir en conséquence.


3

Umm ... suis-je le seul ici à penser "c'est évidemment un travail / une mission de test"? .

Premièrement, la mission elle-même est de nature "académique" (simuler un aspect du comportement des fourmis).

Deuxièmement - une demande d'implémentation d'exigences utilisant (ou évitant) un paradigme de programmation très spécifique sent le «client» qui peut lire le code et faire de telles affirmations.

Si tel est le cas, vous feriez mieux de faire ce qui vous est demandé - ce sera une expérience d'apprentissage plutôt agréable et si vous pouvez le faire, vous apprendrez beaucoup dans le processus ...

Si ce n'est pas le cas, vous devez en effet vous-même et / ou le client demander le raisonnement sur la mission. Si le raisonnement est solide, faites-le - vous apprendrez et vous serez meilleur en tant que programmeur pour l'expérience. Qui sait - vous pourriez même apprendre à aimer le style fonctionnel par rapport à OO.

Si l'explication manque, alors tous les paris sont désactivés .. Je ne peux pas vous recommander quoi faire.

Vous voudrez peut-être essayer de mettre en œuvre les exigences dans un langage / style fonctionnel ou vous pouvez refuser poliment l'offre si vous sentez quelque chose de louche.

L'essentiel est - une fois que vous comprenez la motivation derrière les exigences, la ligne de conduite appropriée devient évidente.

EDIT: Après avoir regardé en diagonale le PDF référencé, les algorithmes décrits ici semblent sûrement être un bon ajustement pour le style fonctionnel plutôt que OO


2

Il y a plusieurs bons aspects dans leur demande d'utilisation de la programmation fonctionnelle:

  1. Vous avez un client, c'est toujours bon signe
  2. Le client s'attend à ce que vous soyez très bon dans ce que vous faites. C'est pourquoi ils demandent une programmation fonctionnelle. Votre organisation commerciale fait donc du bon travail ou vous demandez des prix très élevés pour vos services.
  3. L'organisation cliente a des gens qui savent que la programmation fonctionnelle est une bonne chose et sera importante à l'avenir

Mais il y a aussi des signes alarmants:

  1. Vous ne semblez pas prêt à l'implémenter dans la programmation fonctionnelle. Vous êtes déjà légèrement dépassé dans vos compétences et ne pouvez pas suivre les changements.
  2. Ou le client s'attend à ce que vous soyez un meilleur programmeur que vous ne l'êtes vraiment. Cela signifie que vous devrez peut-être rétrograder leurs exigences jusqu'à ce que vous puissiez le faire correctement.

-1 pour l'hypothèse implicite que FP est meilleur que OOP.
Russell Borogove

@ tp1 1) Vous supposez que le client est techniquement plus intelligent que le programmeur, ce qui n'est pas le cas puisque le client n'est que le client. 2) La PF est plus ancienne que la POO et bien qu'elle soit beaucoup pressée ces derniers temps, il n'y a rien de mal avec la POO et vous n'avez pas besoin d'oublier d'utiliser la PF 3) FP fait de vous un meilleur programmeur, ce n'est vrai qu'au cas par cas et dans ce cas, cela ne semble pas être vrai.
Joe Tyman

@ Joe Tyman: Eh bien, il faut supposer que les gens ne sont pas stupides, sinon les clients sont partis en un instant. Je n'essayais pas de dire oop est mauvais ou pire, mais au lieu de cela, supposer que la fonctionnalité pourrait être une exigence déraisonnable dans cette situation - peut-être que le client ne connaît pas les compétences des programmeurs, ou pire, essayer de forcer les programmeurs à changer de technologie.
tp1

@Joe Tyman: En outre, le pire des scénarios que j'avais en tête était que les clients avaient vraiment besoin de personnes capables de faire de la programmation fonctionnelle avancée comme la théorie des catégories, et ils essayaient de trouver une équipe qui pouvait le faire - c'est pourquoi la demande pour eux pourrait être déraisonnable.
tp1

1

Appuyant sur les réponses ci-dessus que peut-être OO n'est pas la meilleure solution, auquel cas le client peut avoir un point.

Jetez un œil au défi AI qui modélise certains des comportements détaillés dans la question ici http://aichallenge.org , puis jetez un œil à la variété des packages de démarrage - http://aichallenge.org/starter_packages.php/ most sont des langues que je ne placerais pas dans le paradigme OO.


1

Vous n'avez rien écrit sur le langage de programmation, qui est probablement la chose la plus importante là-bas. La différence entre la POO et la programmation fonctionnelle n'est pas seulement la façon dont le code est organisé, mais le langage lui-même. Quand une concurrence élevée est le cas, le langage fonctionnel Erlang est utilisé, et il a un avantage très élevé par exemple sur Java (il est utilisé par exemple par le chat Facebook). La solution OOP peut simplement échouer en raison de problèmes de performances.

Le client ici est l'université, donc la langue n'est pas seulement un problème de performance / configuration, le code peut également être utilisé pour un travail didactique avec des étudiants ou pour ses propres recherches. Donc, «persuader» le client de choisir un autre paradigme n'est pas, à mon avis, applicable ici. C'est soit vous pouvez vous charger de la tâche soit vous ne pouvez pas (et donc, vous ne devriez pas prendre ce projet).


0

Le client dit "sauter", votre réponse est: __ _ ?

Pour moi, je tenterais de convaincre si cela avait du sens (nouveau projet), mais j'ai également un client avec une application VB6 de 10 ans pour laquelle je fais des mises à niveau de temps en temps ... ne vais pas les convaincre de


techniquement, bien que l'application VB6 soit correcte, c'est presque OO, et si cela fonctionne bien sur le système d'exploitation actuel, pourquoi «mettre à niveau» vers .NET. Cela n'a de sens que si vous souhaitez profiter de nouvelles fonctionnalités.
Type anonyme

Oui, mais avez-vous essayé d'utiliser vb6 récemment? c'est tellement douloureux;)
boomhauer

Ouaip. Nous en utilisons beaucoup pour maintenir les applications existantes qui n'ont pas encore reçu de budget pour une mise à jour vers java ou .net. C'est douloureux (par rapport à un IDE moderne) mais c'est aussi relatif. Comme toute langue (y compris les scripts) une fois que vous maîtrisez bien votre définition de la douleur devient beaucoup plus subjective.
Type anonyme

0

«Examinez un peu» votre client (de manière non conflictuelle):

Le client connaît-il réellement la différence entre la POO et la programmation fonctionnelle? Les préoccupations / demandes du client sont-elles légitimes?

Si «oui»: si vous êtes qualifié, faites ce qu'ils veulent et prenez votre argent. Si vous n'êtes pas qualifié, dites-le-lui et laissez-le décider quoi faire.

Sinon: hi-tail, il outta là!


0
double dist(Point p1, Point p2) 
{
  //return distance
}

Cette fonction est fonctionnelle tant qu'elle ne lit / n'écrit rien en dehors de la fonction. Si la fonction touchait une variable de classe, elle ne serait plus "fonctionnelle". L'avantage du style fonctionnel est qu'il n'y a plus de bogues dus à un état changeant ou invalide. Une grande quantité de fonctions ne sont que des formules mathématiques. C'est la programmation fonctionnelle en bref.

BTW, vous pouvez combiner un style fonctionnel dans une conception basée sur un objet ou orientée. Par exemple, les deux variables "Point" sont des objets avec état. Et la fonction est toujours fonctionnelle! Yay!!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.