Je suis en 4e année dans une université informatique maintenant, et quand je parle avec mon professeur de ce sujet, il rejette mon opinion et me fait une critique très lourde (dans mon université, on nous enseignait le C (ANSI) (en procédural) Cours de programmation - en 1ère année à l'université) avant C ++ (en classe OOP en 2ème année) et autres ...
Mais à 13 ans, mon frère a appris, par moi, Java d'abord et rien d'autre. Maintenant, il peut faire presque tout ce qu'un étudiant normal de 2e année peut faire avec Java.
Pour vous, pros, j'aimerais savoir pourquoi vous pensez que nous devrions d'abord apprendre la programmation procédurale.
Réponses:
Résumé rapide:
Parce que dans le monde réel, tôt ou tard, vous devez travailler avec du code procédural.
Parce que les langages procéduraux peuvent fonctionner comme une extension ou une introduction aux langages orientés objet, au lieu d'être simplement une alternative.
Complément à la réponse 2. Parce que la POO est plus complexe que la programmation procédurale, il est donc préférable d'apprendre la programmation procédurale en premier.
Parce que dans le monde réel, les programmeurs travaillent avec et combinent plusieurs façons de résoudre les problèmes, la "programmation multiparadigm" AKA, pas seulement un seul paradigme.
La plupart des langages de programmation sont multiparadigm, à un certain niveau, même si leurs concepteurs ou développeurs communs disent le contraire.
[NOUVEAU] Parce que la programmation modulaire qui est généralement mélangée et confondue avec la programmation procédurale, peut être appliquée à la POO. Par conséquent, la question peut être lue comme "Pourquoi devons-nous apprendre la programmation modulaire avant d'apprendre la programmation orientée objet"
Description détaillée de l'ennui:
Le point 1 est très clair, pas d'explication supplémentaire.
Point 2, classes, héritage, polymorphisme, interfaces, etc.
Point 3, je code du Pascal procédural avant d'apprendre le Pascal orienté objet, quand je suis arrivé, j'ai dit: "regardez, les classes sont comme de petits programmes procéduraux ... ... et vous pouvez les faire parler entre elles, cool !!! ".
J'ai entendu la même chose de la part de gens qui sont passés du simple C au C plus plus.
Point 4, La plupart du temps, les programmeurs combinent plusieurs techniques ou paradigmes de programmation ou façons de résoudre un problème. Fonctionnel, procédural, POO, logique.
Même Java "Pure OO" n'est pas aussi simple que la programmation d'objets.
+1 point pour dire "Programmation procédurale" au lieu de "Programmation structurée". Ou programmation modulaire. C'est important.
Cependant, ces termes sont souvent enseignés ensemble et utilisés de manière interchangeable, ils ne le sont pas. La programmation structurée comprend de nombreux concepts, pas seulement l'utilisation de procédures, et l'un d'eux fait en sorte que le programme ne ressemble pas à du "code spaghetti".
Aujourd'hui, j'ai lu plusieurs programmes OO «purs» qui ressemblent à du «code orienté objet spaghetti», ce qui signifie que le programmeur a utilisé la POO, mais son code ressemble à un gâchis.
Plusieurs fois, je peux lire un code OO et dire que le programmeur a appris la programmation structurée avant la POO, car le code est clair et organisé.
Et pour la programmation modulaire, j'ai vu plusieurs applications. en C ++ et PHP qui n'utilise pas de modules. *
la source
Je pense que l'analogie serait similaire aux mathématiques. Vous devez d'abord apprendre quelques concepts de base (addition / soustraction / ...) puis passer à des sujets plus complexes (algèbre / calcul). Le programme procédural est très linéaire et il est plus facile de saisir le flux de contrôle pendant que vous apprenez la syntaxe. La POO est peut-être considérée comme plus complexe, elle s'appuie sur les constructions plus simples utilisées dans les langages procéduraux mais est plus abstraite et plus difficile à comprendre. Commencer avec des langages tels que C vous rapproche également du matériel et vous fait face à des problèmes d'allocation de mémoire et de pointeurs, que vous devez comprendre mais que vous n'avez pas vraiment à utiliser dans des langages tels que Java / C #. Il y a une réelle valeur à y être exposé à l'école, que cela arrive en premier ou en deuxième.
FWIW, il est appelé à changer éventuellement. Quand j'ai commencé l'école, nous avons appris en Pascal et PL / 1. Nous ne sommes pas arrivés à C jusqu'à la classe de langues avancées (qui me date). Je n'ai pas pris Java avant les études supérieures - il n'avait pas encore été inventé!
la source
La programmation orientée objet est une collection d'extraits de procédure de manière organisée. Je pense que la leçon que vous apprenez est que la méthodologie orientée objet aide à maintenir l'organisation et la maintenabilité. Il y a beaucoup de programmeurs qui ne peuvent pas faire cette distinction et prétendront que leurs programmes sont orientés objet lorsqu'ils sont plus procéduraux.
la source
Non.
Nous avons d'abord appris la programmation fonctionnelle , avec Scheme. Ensuite, nous sommes passés à la procédure, puis à la POO, puis à la programmation déclarative. Et croyez-le ou non, alors que je connaissais déjà la programmation, je pense que c'était aussi plus facile pour les autres: parce que la FP, c'est comme les mathématiques! Vous connaissez donc déjà les bases.
J'ai discuté de cela avec moi-même à plusieurs reprises, et j'ai finalement conclu que cela dépend vraiment de la façon dont votre professeur vous enseigne les concepts.
Il n'y a pas de réponse unique car:
Commencer par quelque chose de procédural comme C (ou même un assemblage) peut être un bon choix, car vous apprenez comment les ordinateurs fonctionnent vraiment
Commencer avec quelque chose de Java orienté objet peut être un bon choix, car il est relativement facile d'apprendre et d'appliquer la POO à la vie réelle, et parce qu'il vous apprend à ** former
Commencer avec une programmation fonctionnelle comme Scheme pourrait être un bon choix car il vous apprend à penser de manière plus abstraite (en termes de fonctions plutôt que de variables), ce qui fait de vous un meilleur programmeur
Si votre professeur ne l'enseigne pas bien, alors peu importe avec quoi vous commencez; ils seront à peu près les mêmes.
la source
Un langage peut être orienté objet comme C ++, Java ou C #. Et vous pouvez commencer avec ces langues. Mais le fait est que, même avec ces langages OO, vous devez d'abord apprendre la programmation procédurale, puis la POO. Je pense que vous avez fait la même chose à votre frère.
la source
=
affectation,if
,for
, etc) en gros morceaux (méthodes), comment pouvez - vous espérer comprendre POO. Comme pour la plupart des compétences, être très intelligent, motivé et / ou avoir accès à un enseignement individuel peut vous permettre d'apprendre simultanément plusieurs sujets connexes.La programmation procédurale, au moins dans un langage comme C, dépouille la programmation à une pratique très simple: les algorithmes et les structures de données, et à un niveau d'abstraction qui est un juste milieu entre le code source compréhensible par l'homme et le code assembleur.
De cette façon, les étudiants peuvent apprendre un peu de science (algorithmes, structures de données) et un peu d'ingénierie (source-> objet-> compilation de la machine, architecture von-neuman (probable)) en même temps.
La POO, via C ++ / obj-C, introduit un modèle d'organisation de code, ce qui est juste une chose de plus à apprendre. Cela pourrait rendre l'apprentissage des concepts ci-dessus un peu plus difficile.
La POO via Java (entre autres) va encore plus loin en faisant abstraction du matériel et de l'environnement. Maintenant, le produit sous-jacent n'est pas du code machine, mais une sorte d'intermédiaire qui ne révèle pas le fonctionnement du matériel sous-jacent, mais l'effet est qu'il permet à l'étudiant de se concentrer sur les modèles d'organisation du code.
En fin de compte, je pense que c'est un compromis entre apprendre comment fonctionne le matériel ou apprendre un modèle d'organisation de code. Quant à ce qui est le plus important, je ne sais pas vraiment. Le monde réel nécessite la connaissance des deux, au moins dans une certaine mesure.
Je vais supposer qu'un programme de premier cycle qui commence par une programmation procédurale de bas niveau produit probablement des informaticiens / ingénieurs en informatique, et un programme qui commence par des concepts de niveau supérieur produit des ingénieurs / développeurs / programmeurs en logiciels.
la source
Les entrailles des objets POO sont constituées de programmation procédurale.
Si vous ne pouvez pas faire de boucle for, utilisez correctement les pointeurs, déclarez vos types et fonctions, vous ne pourrez pas écrire d'interfaces pour vos classes et encore moins faire faire à l'intérieur quelque chose qui en vaille la peine.
De toute façon, vous n'apprendriez vraiment pas la POO dans une classe d'introduction, ce serait juste de la syntaxe - sauter directement dans la POO rendrait les choses plus compliquées à saisir (au début) qu'elles ne le sont déjà.
La POO ne concerne pas la déclaration de syntaxe pour former des classes, elle concerne les structures de données, les modèles de conception, le polymorphisme, l'héritage et la composition.
Pour faire toutes ces choses dont vous avez besoin de connaître la programmation procédurale, quelque chose de facile à faire en C. Vous pouvez tout de même transporter presque tout ce que vous apprenez avec C en Java ou C ++, vous devrez peut-être repenser certaines choses que vous teniez pour acquises en C, MAIS ... Vous devez connaître la grammaire (où vous en êtes dans l'introduction C) pour écrire des phrases (vous devez écrire des procédures pour définir les interfaces) puis des paragraphes (vous devez connaître les structures de données), puis connaître certains modèles de conception (tragédie, comédie, défauts) héros, comment ils interagissent et quand ne pas les utiliser) avant de pouvoir écrire des romans complets (système OOP complet).
Si j'étais vous, je prendrais certains des livres suivants: Le langage de programmation C , le langage de programmation Java , les modèles de conception , le gang des quatre et les hachures de modèle . Je prendrais certainement une copie du langage de programmation C si j'étais sérieux au sujet de C / C ++.
Si vous voulez simplement aller jusqu'à Java (et le faire pour l'ID $), prenez quelques livres sur les modèles de conception Java et comment utiliser Java avec les serveurs Web Apache et Tomcat et quelques livres sur la programmation de base de données SQL. Java botte tellement de fesses sur le web, je suis désolé, mais PHP a eu une histoire de tonnes de failles de sécurité, ce qui rend la tâche aussi difficile que Windows pour empêcher le rootage de votre serveur ou l'injection de vos bases de données SQL.
Vous devriez également prendre le temps d'apprendre SQL, Oracle MySQL Postgresql et MSSQL ont beaucoup en commun en ce qui concerne la syntaxe, mais si je devais simplement en choisir un pour moi, choisissez Postgresql simplement parce qu'il est sous licence BSD au lieu de GPL (vous devriez rechercher une comparaison et le contraste sur les licences GPL / BSD aussi)
la source
Je dois dire que la plupart du code écrit dans des langages orientés objet comme Java n'est pas réellement orienté objet. Il est difficile de vraiment comprendre les idées derrière OO, par conséquent, le code OO est censé être essentiellement procédural.
Cependant, cela n'a rien de mal à écrire du code procédural en Java. Oui, il y a des avantages à faire OO, mais ce n'est pas quelque chose que je voudrais confondre avec un programmeur débutant. Donc, sur cette base, je ne vois rien de mal à enseigner Java. Ne vous attendez pas à de vrais OO, mais cela fonctionne.
Cependant, Java cache beaucoup de détails de bas niveau sur ce qui se passe à l'intérieur de l'ordinateur. C laisse ces éléments beaucoup plus à découvert. On peut démontrer que les élèves devraient apprendre comment fonctionnent ces détails de bas niveau avant d'utiliser un langage qui s'en occupe pour eux. Mais vous pouvez également faire valoir que vous devez ignorer ces détails et les apprendre plus tard.
la source
Plusieurs autres ont déjà répondu sur ce thème, mais je pense qu'il vaut la peine de le dire plus explicitement.
Même si vous commencez à apprendre la programmation avec un langage orienté objet comme Java, vous commencez par apprendre les techniques de programmation procédurale avant d'arriver aux concepts OO . Lorsque vous enseignez un nouveau programmeur Java, vous ne les introduisez pas d'abord aux objets et aux classes, vous les introduisez aux instructions et aux variables. Au moment où l'étudiant est en mesure d'apprendre beaucoup sur les objets et les classes, ils ont déjà au moins les bases de la programmation procédurale.
Donc, au moins, vous devez apprendre la programmation procédurale en Java, puis apprendre la programmation orientée objet en Java. Que vous passiez une année entière à la programmation procédurale ou que vous passiez simplement les premières semaines du cours de programmation, et que vous utilisiez ou non un langage différent, vous vous contentez de discuter des détails.
la source
Pour être trop brutal à ce sujet, je pense que l'élan pour cela vient principalement des anciens programmeurs qui souhaitent les temps anciens.
Avant de dire quoi que ce soit d'autre, je n'ai absolument aucune contention pour les programmeurs plus âgés, beaucoup d'entre eux sont tout simplement incroyablement qualifiés. Malheureusement, parfois, ceux qui ne le sont pas, qui s'échouent et qui n'ont jamais vraiment été vraiment bons en programmation pour commencer ... deviennent des professeurs quand ils ne peuvent pas le pirater dans le «monde réel». (Pas tous les professeurs non plus ... mais ... BEAUCOUP)
La POO n'est pas le Saint Graal de la programmation qu'elle est censée être, la programmation procédurale n'est pas non plus une relique. Il est bon de connaître au moins certains des deux, mais je pense que la pratique générale de ce qui finit par être enseigné en tant que programmation procédurale a tendance à être une énorme perte de temps et d'efforts. Nous devons apprendre la programmation dans le monde universitaire, pas seulement un style ou l'autre. J'attribue un peu de code terrible et d'idées fausses à cela, y compris le mien.
la source
Deux raisons pour moi: une programmation OO est venue résoudre des problèmes de programmation procédurale. Ainsi, en écrivant du codage procédural puis les mêmes choses dans OO, il est plus facile de comprendre la différence.
Il y a également un élément supplémentaire ici: Les deux approches pour éduquer sur des sujets de programmation. On peut commencer aussi bas que possible (exemple d'assemblage, dans de nombreux endroits procéduraux, d'autres commencent par des circuits) puis remonter (vers OO / Functional / Managed). L'autre approche consiste à partir du monde physique (par exemple, navigateur / Windows 7, etc.), puis à approfondir. Il y a des avantages et des inconvénients à chaque approche. Votre université a choisi la première et commencer par la procédure. Il pourrait y avoir une justification ou ils ont juste copié quelqu'un d'autre :-).
la source
Il n'y a pas d'autre raison que l'inertie institutionnelle. Regardez CMU, ils ont jeté tout leur programme OOP et l'ont remplacé par une programmation fonctionnelle. Encore une fois, la réponse à votre question est que c'est un choix arbitraire fait par les administrateurs de l'école que vous fréquentez. Au cas où quelqu'un s'interrogerait sur les déclarations factuelles que j'ai faites ici, c'est le post sur la modification du programme d'études à la CMU par un professeur / administrateur: Enseigner la PF aux étudiants de première année .
la source