La programmation orientée objet est-elle vraiment aussi importante que les entreprises qui l'emploient? [fermé]


55

Je termine juste ma maîtrise (en informatique) et postule à des emplois. J'ai remarqué que de nombreuses entreprises demandent spécifiquement une compréhension de l'orientation des objets. Les questions d'entretien les plus populaires portent sur l'héritage, le polymorphisme, les accesseurs, etc.

Est-ce que OO est vraiment crucial? J'ai même eu une entrevue pour un poste de programmeur en C et la moitié de l'interview était de OO.

Dans le monde réel, en développant des applications réelles, l'orientation objet est-elle presque toujours utilisée? Des caractéristiques clés telles que le polymorphisme sont-elles utilisées BEAUCOUP?

Je pense que ma question vient d'une de mes faiblesses. Bien que je connaisse OO, il semble que je ne puisse pas l'intégrer beaucoup dans mes programmes.


3
Cependant tout n'est pas perdu. Reconnaître qu'il y a un problème est la première étape pour le corriger :)
dévoré elysium

37
Il m'a fallu plusieurs années pour comprendre POURQUOI exactement OO est un concept utile. Je pouvais comprendre toutes les parties techniques, mais je ne trouvais rien de utile. Je suppose que cela provient en grande partie d'exemples stupides de chiens allongeant des mammifères et d'animaux ... Ce qui m'a ouvert les yeux, c'était un aperçu des modèles de conception OO, en particulier des modèles Listener (également appelé Observateur) et des modèles de stratégie
Mchl

1
Oui, ça l'est. Honnêtement.
quant_dev

6
Voir la réponse de Thorbjørn Ravn Andersen. Pour être un bon programmeur, vous devez connaître la modularité et la conception des API. Tous les programmeurs du secteur ne sont pas bons, mais la plupart utilisent la programmation orientée objet. Malheureusement, la combinaison de POO et de code non modulaire et d'API médiocres conduit à un logiciel de qualité médiocre, et vous verrez beaucoup de ce type de code au travail. À moins d'écrire beaucoup de code pendant votre temps libre, vous ne savez probablement pas grand chose de la POO "réelle". C'est bon, vous n'êtes pas seul dans cette position.
Joh

1
Ho oui il peut. Et croyez-moi, si vous avez la même compréhension de la POO que lorsque vous avez obtenu votre diplôme de maîtrise, vous ne savez probablement rien sur la POO.
deadalnix

Réponses:


84

La POO est un paradigme qui permet à votre programme de se développer sans devenir impossible à maintenir / à comprendre. C'est un point que les étudiants ne comprennent presque jamais car ils ne font que de petits projets d'une durée allant de deux semaines à deux mois tout au plus.

Cette courte période n'est pas suffisante pour définir clairement l'objectif de la programmation orientée objet, surtout si les participants au projet sont des débutants. Mais s’en tenir à une certaine modélisation est crucial pour les grands projets, je dirais> 50 000 lignes de code. La POO n'est pas la seule solution à ce problème, mais c'est la plus largement utilisée dans l'industrie.

C'est pourquoi les gens veulent que vous sachiez la programmation orientée objet.

J'ajouterais, par expérience, que presque tous les programmeurs débutants ont de graves défauts dans la modélisation et la programmation orientée objet. La plupart d'entre eux savent comment écrire des classes, en hériter et des choses basiques comme celles-là, mais ils ne pensent pas en "POO" et finissent par en abuser. C'est pourquoi tout recruteur sérieux examinera toujours quelles sont vos compétences dans le domaine de la programmation orientée objet.

Comme ces choses ne sont pas apprises à l’école, il existe tout simplement une énorme variation de connaissances entre différents candidats. Et soyons honnêtes: je ne pense pas qu'une personne connaissant mal OOP puisse travailler sur un grand projet, tout simplement parce que les développeurs principaux auraient plus de temps pour gérer ces personnes que de simplement écrire le code eux-mêmes.

Si vous ne pensez pas encore "POO", je vous suggérerais de lire quelques livres à ce sujet et de postuler dans une entreprise qui n'a pas vraiment de gros projets; pour vous habituer à ce que OOP continue à faire un travail utile pour votre employeur (et tant qu'il vous versera votre salaire, il vous sera utile également).

EDIT: ha, et j’ajouterais que j’avais déjà écrit le code OOP en C, même si ce n’est pas l’usage le plus courant du C, c’est possible avec de fortes connaissances. Vous devez juste construire vtables manuellement.

Et derrière la technique de la POO, quelque chose est caché: la conception de logiciels. La conception de logiciels est très utile, en C comme dans toutes les autres langues. De nombreux recruteurs vont tester vos compétences en matière de conception de logiciels, et la question de la programmation orientée objet y est bonne, mais la programmation orientée objet n'est pas la principale chose testée ici. C'est pourquoi vous avez ces questions même pour un travail en C.


2
Et oui .. comme je l'ai écrit dans un commentaire précédent, je pense que je dois travailler sur un projet plus vaste pour apprécier la POO :).
ale

5
Vous n'avez pas besoin de vtables pour être OOP. simplement utiliser structet les fonctions qui fonctionnent sur cette structure en C est OOP.
edA-qa mort-ora-y

2
@ edA-qa mort-ora-y struct ne vous donne pas la fonctionnalité POO. Polymorphisme? Inhéritance? Est-ce que cela signifie quelque chose pour vous? OK, alors, comment implémenter des fonctions virtuelles sans vtable?
deadalnix

2
@deadalnix: vous les implémentez de la même manière que .NET et Java font l'héritage multiple. Vous devez savoir que les premiers compilateurs C ++ n'étaient pas du tout des traducteurs, mais des traducteurs qui prenaient du code C ++ et le transformaient en code C qui était transmis à un compilateur C. Google "CFront".
gbjbaanb

3
Java et; NET ne font pas plusieurs héritages. Et oui, C ++ peut être traduit automatiquement en C, mais cela n'a aucun rapport avec le problème d'utilisation de vtable ou non. En fait, vous devez: vous ne pouvez pas implémenter de fonctions virtuelles sans vtable.
deadalnix

38

Le principal problème de la programmation informatique est la complexité de la gestion. Les programmes modernes peuvent en effet être très complexes, et cela ne semble qu’augmenter.

Une grande partie du travail effectué dans le génie logiciel de programmes informatiques non triviaux se concentre sur l’apprivoisement de la complexité et le rend accessible au plus grand nombre possible sans consacrer au préalable une vie entière à l’apprentissage.

Exemples:

  • Modularisation: Vous simplifiez conceptuellement les programmes en disposant des modules de code, chaque module ne connaissant qu'un peu les autres modules (au lieu de par exemple, un routage de dessin d'icône de souris étant autorisé à manipuler directement les tampons de la carte réseau).
  • API: elles donnent un chemin d'utilisation simple aux programmes complexes derrière les API. Lorsque vous ouvrez un fichier, le fait que les partages réseau soient gérés différemment d’un disque USB n’importe pas. L'API est la même.
  • Orientation d'objet. Cela vous permet de réutiliser le code existant et de le faire fonctionner de manière transparente avec le nouveau code que vous ajoutez, tout en masquant toute la complexité sous-jacente.

En d'autres termes, il est nécessaire de connaître de nombreuses astuces si vous souhaitez travailler sur des logiciels non triviaux, seuls ou (le plus souvent) avec d'autres.


7
J'aime que vous ayez fait la différence entre modularité, API et OO. Je pense qu'il y a une idée fausse largement répandue dans l'industrie du logiciel selon laquelle OO signifie toutes ces choses.
Joh

3
Même en sachant que OO n'est pas une exigence absolue, les paradigmes procéduraux et fonctionnels sont suffisants dans certains domaines (C ou Haskell). Vous devez encore apprendre la modularisation et la conception d’API.
Raynos

@Raynos, en C, vous avez des pointeurs de fonction qui vous permettent de faire explicitement ce que OO fait intrinsèquement. De même, Haskell utilise une correspondance de modèle pour faire explicitement ce que fait le compilateur, par exemple en Java.

@ThorbjornRavnAndersen c'est un peu une niche pour écrire en style OO C et Haskell. Je dis simplement que la réutilisation de code peut être faite dans le paradigme procédural et fonctionnel.
Raynos

3
@mathepic je ne dis pas qu'il faille écrire OO haskell (ou même s'il existe). Je disais que vous n'avez pas besoin de connaître OO. Il existe d'autres moyens de gérer la complexité (FP)
Raynos

14

Oui, principalement parce que les deux plates-formes de développement les plus populaires utilisées dans le développement commercial (Java et .NET) sont orientées objet et que, par conséquent, OO est très utilisé (y compris le polymorphisme, l'héritage et tout le reste).

Les entreprises ne se préoccupent pas spécifiquement de l'orientation des objets en tant que technologie - ce n'est pas une question d'idéologie, mais bien de ceux qui peuvent développer des solutions à leurs problèmes d'une manière qui correspond à leur stratégie informatique.

Mais je ne m'inquiéterais pas trop de sentir que c'est une faiblesse. Sans manquer de respect pour votre éducation, la plupart des gens dans le monde commercial ne voient pas les programmeurs quitter l'université (à quelque niveau que ce soit) comme un article fini. Il vous reste encore beaucoup à apprendre et c'est compris (probablement mieux par les entreprises que par les étudiants).


2
Vous devez vous appeler lorsque les entreprises ne s’intéressent pas à l’OB - les bonnes entreprises se préoccupent des bases de code réutilisables / gérables, et les modèles d’OA sont le moyen reconnu de le faire.
HorusKol

1
@HorusKol - Oui, malgré le fait que Perl, Cobol et Visual Basic aient tous connu un succès commercial, contrairement à Smalltalk. Vous avez raison, les entreprises aiment le code maintenable, mais ce n’est pas une exigence absolue, elles le pondéreront avec d’autres facteurs.
Jon Hopkins

Eh bien, Cobol était présent avant OO. Je ne peux pas commenter sur Smalltalk, mais j'imagine qu'il doit y avoir eu des problèmes s'il n'a pas été détecté.
HorusKol

1
@HorusKol - En réalité, Cobol et OO ont vu le jour à peu près à la même époque (fin des années 50), mais même si nous supposons qu'OO n'a vraiment commencé à s'implanter que dans les années 70 ou même les années 1980 (si vous attendez C ++), si c'est CE Un gros problème pour les entreprises, pourquoi ne l’a-t-il pas fait jusqu’à la fin des années 90 (avec Java). La réponse est qu'il existe des moyens d'avoir une base de code maintenable autre que OO - les entreprises se soucient du code maintenable, mais il existe plus d'une façon de traiter un chat et OO n'est pas la seule solution.
Jon Hopkins

C'est un peu bizarre d'appeler les plateformes elles-mêmes OO. Clojure n'est pas OO. Je suppose que Scala a quelques éléments OO, mais il est préférable de l’utiliser de manière fonctionnelle. F # est un peu la même affaire. écrire du code OO en F # est tout simplement sale.
Sara

7

Comme dans la vie réelle, la programmation dans la vie réelle diffère de celle en théorie.

Oui, si vous maintenez le paradigme OO raffiné et toujours au fond de votre esprit, vous pourrez mieux écrire un code gérable, compréhensible et facilement extensible.

Malheureusement, le monde réel a ceci:

  • contraintes de temps du projet
  • membres de l'équipe orientés vers la procédure
  • équipes localisées, plusieurs fournisseurs
  • code hérité n'ayant aucune orientation que ce soit
  • tant que cela fonctionne, quelques soucis sur la façon dont le code est écrit
  • même si le code ne fonctionne pas, la motivation est de le réparer, pas "OO", il
  • modules, limitations de plates-formes, frameworks qui ne vous permettent tout simplement pas de faire du bon OO

Dans un vrai travail, vous devez travailler avec les problèmes ci-dessus. Cela semble démoralisant. Mais, traitez cela comme un heads-up. Les entreprises qui embauchent accordent trop d’importance à l’OO lorsqu’elles embauchent. Il est facile de voir pourquoi. La seule façon de tester le candidat est de lui poser des questions sur la compréhension de OO. Et malheureusement, beaucoup de candidats se contentent d’aborder ces questions avant de se présenter pour une entrevue.

La vie réelle OO vient lentement. Cela aide si vous continuez à lire et continuez à l'améliorer au fil du temps.


6

J'ai eu à peu près le même sentiment lorsque j'ai terminé mon baccalauréat et un excellent livre qui m'a montré pourquoi et comment la POO est pertinente pour les applications du monde réel est Head First: Design Patterns . Je vous recommande sincèrement de jeter un coup d'oeil, il est écrit de manière vraiment amusante et explique de manière très pertinente pourquoi une approche POO est souhaitable pour travailler avec des systèmes à grande échelle et en constante évolution.


Glad je ne suis pas le seul! Merci .. Je vais jeter un oeil à ce livre :).
ale

6

Même pour certains emplois en C, vous devrez peut-être connaître la conception orientée objet (et y être probablement plus performant que si votre compilateur le faisait pour vous), comme en témoigne une série récente d'articles sur la conception orientée objet dans le noyau Linux. ( Partie 1 , partie 2 )

GTK + utilise également de nombreux modèles de conception orientés objet.


4

Je dois exprimer un certain désaccord avec cette notion selon laquelle OO est tout. On peut dire que OO vous permet de construire des villes, mais les programmes procéduraux sont les briques.

Pour donner ma réponse sous forme d'analogie, un général a besoin d'objets, le soldat a besoin de procédure. Une fois que vous avez suffisamment exploré OO, vous trouvez les procédures, et si c'est votre expertise et que vous êtes assez bon, ne vous inquiétez pas pour OO, car il est assez facile pour quelqu'un d'écrire ce code de jeu d'échecs OO:

-findBestMove
-makeBestMove
-waitForPlayerInput

mais alors quelqu'un doit écrire le code derrière -findBestMove et vous pouvez être sûr que ce n'est pas juste ceci:

foreach $move (@moves){
    $bestMove = ($move > $bestMove ? $move : $bestMove)
}
return $bestMove

Par contre, si vous ne savez pas comment lire le code OO, inquiétez-vous. Parce que vous pouvez être sûr (ou presque) que votre code va jouer avec des objets. À moins que vous ne travailliez sur l'héritage historique de 12 000 vars et de 1200 modules en ligne que je gère actuellement.


4

Jon Hopkins a écrit:

Oui, principalement parce que les deux plates-formes de développement les plus populaires utilisées dans le développement commercial (Java et .NET) sont orientées objet et que, par conséquent, OO est très utilisé (y compris le polymorphisme, l'héritage et tout le reste).

C’est à peu près ce que j’allais dire, mais ce n’est pas seulement Java et .Net, le C ++ est partout, Objective-C est partout dans OSX, tous les enfants cools pratiquent Ruby ou Python, et toutes ces choses et beaucoup d’autres plus se concentrent sur l'orientation des objets. Beaucoup de nouveaux langages sont multiparadigm, donc quelque chose comme F # est avant tout un langage fonctionnel, mais supporte aussi l'orientation objet. C'est partout, et avoir au moins un peu de compréhension est très utile. Ne vous inquiétez pas trop, car vous venez tout juste de terminer des cours universitaires, vous êtes donc prêt à apprendre le développement de code dans le monde réel :)


3

Je fais de la programmation depuis longtemps et je trouve que les concepts de OO sont utiles même lors de la programmation en C - même si, même si j'étais testé, je ne réussirais probablement pas à décrire ces concepts dans les moindres détails. À un moment donné, j'ai même créé un langage OO, bien que rudimentaire, pour me familiariser avec les concepts et trouver du plaisir dans OO sous un nouvel angle.

BTW, C ++ a fait un énorme et moche désordre de OO, alors que l’objectif C le fait bien.

En ce qui concerne les interviews, elles sont devenues un spectacle d'horreur - des deux côtés de la table. La plupart des personnes interrogées sont très effrayées par elles. La plupart des responsables du recrutement s’étonnent du nombre de personnes qui échouent même aux tests de programmation les plus élémentaires.

Cela dit, il existe actuellement dans l’industrie du logiciel d’énormes problèmes économiques qui ne connaissent rien et qui attendent pourtant le monde de futurs employés.


C ++ est un langage multi-paradigme mais gère assez bien OO .. non?
Nikko

1
Je dirais que le C ++ vous donne la possibilité de faire un énorme désordre. Si cela est fait correctement, sa beauté est sa simplicité.
Martin York

Sauter les bases donne toujours un désordre énorme. C ++ a juste beaucoup de bases que vous devez comprendre. C'est pourquoi il est possible d'utiliser C ++ pour les gros programmes. Il est nécessaire.
tp1

@Ponk: BTW, C ++ a créé un énorme gâchis d’OO, alors que l’objectif C le fait correctement. - Je n'ai pas essayé l'Objectif C, je n'ai donc aucune raison de douter de vous, mais où puis-je trouver un argument plus complet et plus convaincant à cet égard?
Jim G.

3

Apprendre la POO n'est pas aussi utile que l'apprentissage du développement de logiciels. Allez lire le code complet 2 .

Bien sûr, c’est un outil utile mais la POO elle-même est vraiment petite. En général, lorsque les entreprises et les recruteurs disent "POO", ils entendent par "développement de logiciels". Il est utilisé comme terme générique.

Les vrais recruteurs feront la différence entre savoir comment développer un logiciel et cocher la case "A 3 ans en" POO ".


Oui, dans ce contexte, la programmation orientée objet est semblable à une interface graphique, comme dans "vous avez besoin de 5 ans d'expérience dans l'interface graphique pour ce rôle".
gbjbaanb

1

La réponse est oui, comme plusieurs autres l'ont noté.

MAIS, si vous voulez travailler sur des piles de code spaghetti procédural non-OO, vous pouvez le trouver aussi. Je pense que vous préférerez le travail OO.

EDIT: Pardonnez mon cas de cynisme de gunslinger et de sens de l'humour. Comme Raynos l'a dit, ce n'est pas parce que quelque chose est OO que c'est bon. Une bonne application de OO demande un travail et des réflexions réels. le simple fait d'en avoir quelques exemples ne signifie pas automatiquement qu'une application est bien faite. Et inversement, je suis sûr que le code de procédure est bien écrit. Mon expérience dans les magasins d’informatique d’entreprise des années 90 et 2000 a montré que beaucoup de mauvais codes ont été écrits et existent probablement encore. Mais plus près de la question du PO, j'ai remarqué que les développeurs les plus intelligents optent pour plus de systèmes OO.


3
-1 pour impliquer que le code non-OO est spaghetti. et que OO fait du "pas spaghetti" par magie noire.
Raynos

@ Raynos C'est un point juste. Et ce n'est pas parce que quelque chose n'utilise pas OO que c'est mauvais. Je vais éditer.
Bernard Dy

Ce n’est pas non plus seulement une procédure / procédure / OOP, il existe également des paradigmes fonctionnels.
alternative le

J'ai travaillé sur des applications OO non maintenables dans lesquelles des objets étaient dispersés comme des confettis. La POO n'est pas une solution miracle, c'est simplement une manière plus définie d'organiser votre code.
gbjbaanb

2
Oui, oui, mille fois oui! S'il vous plaît voir l'édition. Mon commentaire concernait davantage les nombreuses occurrences de code hérité médiocre sur lequel j'ai eu le plaisir de travailler que la suppression de procédures ou d'OO. Mais si j'avais le choix, je préférerais travailler sur un système OO bien conçu plutôt que sur un système procédural bien conçu. et un système bien conçu par rapport à un système mal conçu tous les jours.
Bernard Dy

1

OO est une base fondamentale sur laquelle d'autres techniques sont construites. Un point clé est d’abord de bien comprendre la différence entre un type (classe) et une instance de ce type. N'essayez pas de continuer à lire sans comprendre cela (pensant que cela deviendra clair plus tard), car vous devrez relire le reste une fois que vous aurez saisi la vision.

Une fois que vous aurez compris, vous ne voudrez plus vous en passer. Je ne suis pas un puriste en matière d'encapsulation, de motifs, de frameworks ou autres. Au travail, vous devrez vous adapter à divers points de vue et concepts. Je vais énumérer quelques expériences de travail de mes propres:

Dans une entreprise, mes collègues souhaitaient autant que possible un chargement paresseux (constructeurs vides, propriétés volumineuses qui devaient vérifier les valeurs nulles partout). Ils construisaient des objets Web côté serveur qui vivaient peu de temps.

Le travail suivant était totalement opposé. Objets vécus dans une application de bureau (basée sur Excel). Le constructeur doit être initialisé autant que possible (ou l'une des nombreuses surcharges du constructeur). Les constructeurs vides n'étaient pas autorisés car les objets vides n'avaient aucun droit d'existence (ce qui faisait de la persistance un défi). De plus, je devais m'adapter à leurs "normes de style de codage" (où ouvrir une parenthèse, ajouter des espaces après des commentaires, etc.), car mon code ne pourrait pas être archivé s'il ne passait pas par style-cop.

Actuellement, je travaille dans une entreprise où aucun des développeurs n'a jamais essayé de comprendre OO. Il est difficile d’exprimer à quel point cela a été extrêmement frustrant. J'ai dû améliorer mes compétences en Grep. En fait, une macro HotScripts a été affectée à la touche F12 afin de créer un grep sur le texte sélectionné. Je vais épargner les autres frustrations ...

Une fois que vous aurez acquis les compétences requises pour devenir OO, vous serez presque allergique aux spaghettis! Cependant, dans tous les cas, OO-ou pas, soyez patient et adaptez-vous. Soyez réticent à "le jeter et recommencer". Votre patron préférera vous choisir quand il s’agit de jeter. Malheureusement, "faire de l'argent" est plus important qu'un code élégant.

Désolé pour la longue réponse mais j'ai essayé de couvrir la plus grande partie de votre question :-)


Merci beaucoup pour vos histoires .. J'ai bien aimé les lire! Actuellement, je travaille sur un projet C ++ et j'utilise cette opportunité pour réfléchir aux différentes manières dont je pourrais utiliser les techniques OO. Ça va bien pour le moment :). +1 pour vous répondre. Je vous remercie.
ale

1

La POO n'est pas importante pour elle-même, mais pour ce qu'elle implique. Quelque chose qui traite de la capacité d’abstraction et d’isolement, de regrouper des éléments et d’exposer uniquement les éléments nécessaires pour interagir ensemble.

Il s'agit d'une technique d'ingénierie courante appelée "modularisation", qui permet de créer des systèmes complexes en tant qu'agrégation de systèmes simples, sans s'occuper de tous les détails à un niveau élevé, et qui exigent que les composants soient remplaçables, même sans qu'ils soient exactement les mêmes. même.

On a essayé de garder ces "concepts d'ingénierie" dans le développement logiciel à partir du moment où le produit logiciel lui-même était devenu plus grand que la "capacité de développeur unique", exigeant donc un moyen de faire en sorte que les développeurs travaillent sur des pièces indépendantes, interagir ensemble.

Cela dit, ces principes ne se retrouvent pas nécessairement uniquement dans la programmation orientée objet (si la théorie du calcul est valide, il existe une infinité de méthodes pour obtenir ces résultats).

La programmation orientée objet est simplement une tentative réussie de regrouper ces éléments, en donnant à ces termes généraux (tels que modules, encapsulation, substitution) des définitions plus précises et une conceptualisation élaborée de ces définitions (modèles) pouvant s'intégrer dans les langages de programmation.

Pensez d'abord à la programmation orientée objet, non pas comme une " fonctionnalité linguistique ", mais comme un " lexique commun " " permettant aux ingénieurs en logiciel de se familiariser avec la conception du logiciel.

Le fait qu’une langue donnée ait ou non des primitives qui appliquent directement ce lexique garantissant, par exemple, qu’une "capsule" n’est pas ouverte par inadvertance par celui qui n’est pas censé le faire est un aspect secondaire de la conception de la programmation orientée objet. C'est pourquoi même les grands projets C sont souvent "gérés en tant que" POO, même si le langage lui-même n'offre aucun support direct à cela.

L’avantage de tout ce qui n’est pas reconnaissable jusqu’à ce que la taille d’un projet reste inchangée est la capacité d’un développeur unique à comprendre et à suivre tout ce qu’il fait (en fait, dans une telle situation, cela peut même être perçu comme un "frais généraux"), ou encore à un petit groupe une courte période. Et c’est la raison principale pour laquelle les juniors qui ont étudié la POO en terme de "fonctionnalité de langage" l’interprètent souvent mal en produisant un code mal conçu.

La manière dont la POO s’intègre dans les langues dépend de la façon dont les concepteurs de langue interprètent le principe de la POO dans leur propre construction.

Ainsi, "encapsulation" en C ++ devient "membres privés" (et une "capsule" devient une classe), "substitution" devient une fonction virtuelle annulant ou paramétrisation / spécialisation de modèle, etc., tandis qu'en D une capsule est un "module" (et la substitution va etc.), rendant ainsi certains paradigmes ou modèles directement disponibles dans une langue donnée et non dans une autre, etc.

Ce que les recruteurs cherchent en posant la question de la programmation orientée objet, c’est simplement vérifier votre capacité à résumer et à concevoir des logiciels pour les futurs grands projets et développements. OOP, pour eux, ce n’est qu’un "dictionnaire", ils ont supposé que vous et eux le saviez afin que vous puissiez parler d’autres choses plus générales ou se concrétiser dans une implémentation spécifique.


0

Un langage orienté objet vous aide à conserver une conception orientée objet dans votre code, ce qui est bien. Mais il est également vrai qu’une telle conception peut être obtenue avec n’importe quel autre langage de paradigme: la raison de la popularité (en particulier parmi les entreprises) des langages OO tient probablement au succès commercial de java et de c #.

Si M. Gates avait créé sa société de la bonne manière, nous étudierions probablement SCHEME avant de postuler à un emploi.


Scheme est apparu la même année que Microsoft (bien qu'il y ait certainement eu auparavant d'autres LISPs). De plus, Java et C # doivent beaucoup de leur succès à Alan Kay, en particulier Smalltalk, et à Simula auparavant, ainsi qu’au succès de C ++.
JasonTrue

0

Réponse courte est oui

La version longue pourquoi vous croyez que le problème est important ou qu’il vous semble difficile de le comprendre est uniquement due au fait que vous n’avez pas travaillé sur des projets ou des implémentations ayant une utilité quelconque. Il est parfaitement valable dans les salles de classe d’avoir des exemples sur l’automobile, puis de les étendre à des voitures, des camions ... mais lorsque vous vous lancez dans le développement de logiciels, c’est une solution visant à faciliter certaines tâches. Maintenant, si ce n'était pas étaient pourOO , tout le monde écrirait des codes similaires dans la base de codes ouréinventer les roues tous les jours. Imaginez quel gâchis ce serait si on devait plonger dans une telle base de code pour réparer quelque chose. Les exemples en classe sont pour une définition vague ou une représentation de comment / pourquoi cela est fait. Le vrai test est lancé lorsque vous commencez à créer votre application, sans aucun doute parce que tout ce qui est utilisé pourrait être terriblement utilisé, mais il pèse de loin sur la santé mentale en raison de son utilisation claire et concise. Il est donc préférable de commencer à travailler sur ces points faibles et de réduire les codes de cauchemar.


0

Ça dépend. Une des raisons pour lesquelles vous devez connaître OO est la lingua franca du monde de la programmation. Comme le souligne une autre réponse, presque toutes les langues principales sont OO, ce qui signifie que toute entreprise susceptible de vous engager utilise un langage OO. Avez-vous déjà essayé d’embaucher des programmeurs OCaml? C'est impossible; le bassin de talents est trop petit. Si vous avez démarré votre entreprise avec OCaml et que celle-ci connaît du succès, vous ne pourrez pas embaucher des programmeurs assez rapidement et vous ferez faillite. Par conséquent, presque toutes les entreprises comptant plus de 3 programmeurs utilisent un langage OO. Pour communiquer avec vos collègues et utiliser les bibliothèques de votre plate-forme, vous devez comprendre OO.

Selon la langue utilisée par la société, l'héritage et le polymorphisme sont extrêmement importants ou modérément pertinents. Vous ne pouvez rien faire en Java sans sortir 10 modèles de conception GoF et un framework d'injection de dépendance. Java est l’un des langages les plus largement utilisés. Par conséquent, les principes d’utilisation directe sont vraiment importants pour les nombreuses entreprises utilisant Java.

Si la société utilise un langage OO / fonctionnel hybride moderne comprenant des lambdas et des pointeurs de fonction, tels que Scala ou C #, l'héritage devient alors soudainement moins important, car vous disposez de fonctions d'ordre supérieur pour gérer beaucoup de choses très simples qui nécessiteraient autrement beaucoup la cérémonie. Cependant, vous devez toujours être capable de travailler avec des objets OO car la plupart des bibliothèques que vous utilisez seront écrites de manière OO.

Si l'héritage et le polymorphisme ne sont pas importants pour l'entreprise, vous risquez toujours de recevoir des questions sur OO pour les raisons suivantes:

  • Vous êtes interrogé par une personne des ressources humaines qui ne connaît rien à la programmation et pose des questions sur une liste de contrôle. Avez-vous 3 ans de X, faites-vous plusieurs tâches, etc.
  • Vous êtes interviewé par un ingénieur qui veut s'assurer que vous ne vivez pas sous un rocher. OO est la lingua franca, on vous posera donc quelques questions superficielles à ce sujet.
  • Vous êtes interrogé par un ingénieur peu apte à l’interview. En général, les ingénieurs adorent les anecdotes et la complexité. Vous poserez donc de nombreuses questions sur le polymorphisme, l'héritage et les modèles de conception GoF uniquement parce que ces informations intéressent l'intéressé.

pourquoi le vote négatif?
dan

-1

En un mot "oui".

Vous pensez peut-être connaître la théorie, mais vous devez écrire du code et le mettre en pratique. Il existe littéralement des milliers d'exemples et d'exercices disponibles en ligne.

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.