Bonsoir, quel langage conseillerez vous à une personne qui désire se mettre sérieusement à la POO?
N'hésitez pas à argumenter
C++
C#
D
Delphi
Eiffel
Groovy
Java
Lisaac
Python
Ruby
Simula
Smalltalk
Visual Basic
WLangage
autre(précisez)
Bonsoir, quel langage conseillerez vous à une personne qui désire se mettre sérieusement à la POO?
N'hésitez pas à argumenter
Le meilleur langage pour assimiler le paradigme OO pur c'est le Smalltalk.
Cependant, est-ce vraiment ça que tu veux ?
Sinon tu pourrais apprendre Python ou du Ruby qui sont plus « simples » d'accès.
Smalltalk. Dans Smalltalk, quasiment tout est un objet, presque toutes les actions (sauf deux) sont des méthodes, etc. C'est l'endroit idéal.
Si Smalltalk t'intéresse moins, Python a un bon modèle objet et le langage est facile et pratique.
Il y a aussi Objective-C.
J'avais oublié celui-ci.
Pas du tout d'accord, C++ ajoute juste une couche objet un langage impératif déjà existant... Il est trop facile de faire de l'impératif en pensant faire de l'objet...
Non, pour faire de l'objet pur, le mieux est sans doute Smalltalk, mais faut pas trop espérer s'en servir en entreprise après...
j'ai dit apprendre à faire de la POO... pas un pseudo C encapsulé dans des classes (que certains considèrent comme du C++)
si l'on reçoit un cours de POO en C++, et que le prof ne fait pas cette erreur, je pense sincèrement qu'on est ensuite apte à passer sur n'importe quelle autre langage objet
exemple d'un cours d'introduction à la POO avec C++ http://www.ensta.fr/~bmonsuez/Cours/doku.php?id=in204
Il a été un peu méchant avec la programmation modulaire dans le cours introductif : l'exemple avec les compteurs est pas très convaincant, parce que je vois pas pourquoi la programmation modulaire ne permet pas de réaliser son exemple (voir OCaml).
Par contre ce qui est bien c'est que les références utilisées pour le cours sont récentes, donc le prof est à jour vis-à-vis du C++.
je pense qu'il a voulu dire qu'avec des "modules C" ce ne serait pas possible
un truc dans ce style
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 /* fichier compteur.c */ int cpt; void initialize() { cpt = 0; } int value() { return cpt; } // ... /* main.c */ #include "compteur.h" int main(int argc, char** argv) { initialize(); // ... return 0; }
pas trop dur pour lui d'être à jour sur C++ ^^
Moi je vote pour Java.
disons que la "sûreté" d'utilisation ne serait pas assurée
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 type struct { int limit; int valeur; } str_cpt; typedef str_cpt* compteur; compteur creerCompteur(int N) { compteur* res = malloc(sizeof(str_cpt)); res->limit = N; return res; } int incrementerCompteur(compteur cpt) { if (cpt->valeur == cpt->limit) return -1; cpt->valeur++; return cpt->valeur; }
comparé à
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 template<class T,T N> class Compteur { protected: const T limit; T valeur; public: Compteur : limit(N), valeur(0) { } T incrementer() { if (valeur == N) return -1; // a améliorer, mais c'est l'idée ;) valeur++; return valeur; } };
y a pas photos, je crois bien
C'est sûr, mais on est bien d'accord que l'exemple du cours est mauvais .
Tu peux réaliser l'encapsulation en ne mettant que la déclaration anticipée de la structure dans le .h, puis en déplaçant la définition de la structure dans le fichier .c.
Après, les problèmes dus à la manipulation par pointeurs, c'est la faute du C .
Effectivement, si tu reçois un bon cours de paradigme OO alors le fait qu'il soit en C++ n'est pas un mauvais. Mais c'est vrai pour tous les langages ce que tu dis: quand le cours de POO est bon, le langage n'est nullement important.
Python, Ruby, Java, C++, Objective-C, Delphi, Smalltalk, Ocaml, Eiffel, Ada, quelle différence si le cours est bon ?
Mais je ne pense pas que c'était la question à prime abord. Le langage qui « fit » (excusez l'anglicisme) le mieux dans la pensée OO est Smalltalk parce que c'est lui qui l'a inventé cette pensée (enfin peu ou prou).
En ce qui me concerne on m'avait conseillé de commencer par Java ou Python, plus simples à aborder que le C++ donc sans doute meilleurs pour se concentrer uniquement sur l'aspect 'objet' du langage...
ca dépend si c'est pour utiliser ou pour apprendre.
pour apprendre, sans hésitations Smalltalk ; tout y est objet, même les blocs, les classes etc.
à utiliser, par contre, mieux vaut s'orienter vers Java, Python, voir C++ selon les besoins.
Java a beaucoup d'avantages par rapport aux autres langages OO
- Simple et facile à prendre en main
- Elimination des pointeurs que l'on retrouve beaucoup en C++ et C
- Java a introduit un nouveau concept qui est les interfaces ce qui permet de remplacer le multi héritage en C++ par exemple.
- L'allocation mémoire est automatique.
- En java, on est sur qu'il n'y aura pas de problème de désallocation de mémoire grace au Garbage collector
- En java, tout est objet donc plus facile à modéliser.
- portabilité : Program once, Run anywhere
- etc
Voici en gros les avantages de Java
On peut également ajouter le fait que les types primitifs ne sont pas des objets (int, char...). (peut être que c'est ce que tu as voulu dire avec : les types ne sont pas des objets)
Je pense que si un langage permet de faire tous les principes de bases de la POO, c'est à dire :
- de l'encapsulation
- de l'héritage
- du polymorphisme
- notion de classe
Après ça roule.
De toute façon, un cours de programmation orienté objet ou de conception orienté objet ne va en général pas trop insister sur les spécificité du langage. Les cours utilisent en général très peu les bibliothèques standards (juste pour un peu d'affichage) mais utilisent énormément les principes de POO du langage.
Un langage comme C++ "peut" éventuellement amener des difficultés avec des mots clefs comme virtual (bien qu'une fois assimilée, ce ne soit pas vraiment une difficulté)
Partager