Dans chaque publication technique, et sur ce site aussi, les gens comparent toujours OO langues à Smalltalk . Mon expérience est en Java: est Smalltalk donc important que je l'étudie?
Smalltalk était l'un des premiers langages orientés objet (OO) (avec d'autres comme Simula et Eiffel ) et peut être considéré comme extrêmement "pur" dans un OO sens:
int
s, boolean
s etc.)for
, while
, if
etc). Cela semble impossible mais c'est vrai!Il a également ouvert la voie à d'autres choses, désormais courantes:
Et il y a d'autres choses liées à Smalltalk qui ne sont pas vraiment entrées dans le courant dominant:
Et il est juste de dire que l'API Java collections et l'API Apache-commons sont fortement influencées par Smalltalk.
Je ne dirais pas que vous devriez apprendre Smalltalk en soi, mais une familiarité avec les principes fondamentaux de ces fonctionnalités ( présent dans de nombreuses autres langues) vous est sûrement avantageux.
Notez qu'il y a actuellement seulement 123 questions ici sur la langue, qui était à l'origine conçue comme une langue éducative (c'est-à-dire destinée aux enfants) par son créateur, Alan Kay. Il n'est plus particulièrement utilisé. Cela ne veut pas dire qu'il n'est pas utilisé. JPMorgan, par exemple, contient un grand système de gestion des risques liés aux dérivés exotiques.
Smalltalk a de nombreuses innovations brillantes - des choses que nous tenons tous pour acquises aujourd'hui, notamment:
La raison la plus importante pour apprendre Smalltalk aujourd'hui est que la programmation extrême et la mêlée ont toutes deux été inventées dans la communauté Smalltalk ... et le style de programmation hautement interactif que vous expérimentez dans Smalltalk est plus simple, plus puissant et direct que tout ce que vous pouvez faire avec = Java ou C # ou Ruby ... et vous ne pouvez pas vraiment comprendre à quel point les méthodes agiles peuvent fonctionner jusqu'à ce que vous ayez essayé de faire une programmation extrême dans Smalltalk. Peu d'autres les langues (pas les plus courantes de toute façon) ont un ensemble de fonctionnalités comparable.
... pour vraiment comprendre ce que le TDD peut être, vous devez utiliser SUnit. JUnit vous montre simplement où vos tests ont échoué. SUnit vous permet en fait de cliquer dans le débogueur au point où le test a échoué et de voir les objets réels et comment ils sont connectés afin que vous puissiez voir, vivre dans le débogueur comment le code a échoué et le corriger directement.
Oui, Smalltalk est si important que vous devriez l'étudier. Pourquoi? Vous pouvez comprendre la programmation orientée objet sous une forme pure et simple. Ce que les gens oublient, c'est que le "Blue Book" Smalltalk-80 ne compte qu'environ 90 pages consacrées à la langue - la langue est aussi simple que cela. Les 300 autres pages parlent de la hiérarchie de classes prédéfinie, qui est un chef-d'œuvre de conception pour un langage orienté objet basé sur les classes qui utilise l'héritage unique. Vous obtiendrez une compréhension beaucoup plus profonde des objets (par exemple, les classes sont des objets, et ils ont des métaclasses, et ainsi de suite à l'infini ... sauf que le nœud est soigneusement attaché pour garder le système fini) que vous n'auriez jamais obtenu en étudiant un langage hybride comme Java ou C++. Smalltalk importe non seulement à cause de son histoire mais aussi à cause de sa simplicité:
Assez simple pour que vous puissiez comprendre la langue entièreet les bibliothèques
Affiche une idée (les objets sont tout ce dont vous avez besoin) poussée à son extrême logique
Tout le monde a quelque chose à apprendre de Smalltalk!
Smalltalk est l'une des deux premières langues OOP, l'autre étant Simula-67. Par conséquent, il existe deux grandes familles - le modèle de type statique centré autour de l'invocation de méthodes, mis au point par Simula (C++, Java, C # appartiennent tous ici) et le modèle typé dynamiquement centré sur le passage de messages, lancé par Smalltalk (Python, Ruby appartient ici)).
Aujourd'hui, Smalltalk n'est pas particulièrement important en soi - il y a des gens qui l'utilisent encore pour écrire des trucs, mais ce n'est certainement pas courant. L'apprentissage vous donnera un aperçu de comment et pourquoi OOP évolué, cependant.
J'ai passé environ 5 minutes dans une présentation lors d'une conférence le mois dernier sur l'histoire et l'influence de Smalltalk. Voir Développement basé sur l'image avec Smalltalk . L'un des concepts les plus étrangers aux programmeurs d'aujourd'hui est le développement "basé sur l'image". Il existe de bonnes analogies, notamment un SGBD et une feuille de calcul.
Oui. Téléchargez l'image en un clic en bord de mer , commencez à l'utiliser avec le tutoriel de James Foster et vous apprendrez au moins:
Non seulement était-il l'un des premiers, Smalltalk reste à ce jour un modèle de conception de langage OO. Les langages les plus populaires qui sont venus plus tard - C++, Java, même Objective-C - ont tous plus orientée objet primitive et sont plus restrictives que le bon vieux Smalltalk. Smalltalk avait des objets de première classe omniprésents, un grand support pour l'introspection d'exécution, une utilisation très naturelle du typage de canard et des fermetures qui fonctionnaient mieux que ce que j'ai vu dans n'importe quel langage non fonctionnel. Je veux dire, nous parlons d'un langage qui n'avait pas de structures de contrôle natives (if, while, etc.) mais qui était capable de les créer à partir de son système d'objets d'une manière qui fonctionnait de manière transparente.
Je ne recommanderais pas Smalltalk pour tout développement intensif d'applications de bureau de nos jours (il n'y a tout simplement pas d'IMO d'implémentation viable), mais si vous voulez voir comment OO était censé être et peut-être choisir quelques idées que vous pouvez utiliser dans vos applications, Smalltalk est un excellent endroit pour chercher.
Je suis d'accord avec les autres. Je ne sais pas si c'est important en soi, mais c'est COOL (à mon humble avis).
J'aime qu'il n'y ait pas de boucles ou de conditions dans la langue. If-then-else est un message envoyé à un objet booléen. Les objets de type True font une chose, les objets de type False en font une autre. (Oui, True et False sont des sous-types de booléens, avec une seule valeur chacun, true et false respectivement).
Cela commence par être un peu contre-intuitif, mais cela vous donne une vue très intéressante et approfondie de la façon dont la programmation OO devrait fonctionner ...
Si vous ne connaissez qu'un seul langage orienté objet, vous devriez envisager d'en apprendre un deuxième, un troisième et un quatrième afin d'avoir une perspective plus large sur la programmation avec des objets. Apprendre Smalltalk va étirer votre cerveau car beaucoup de concepts familiers auxquels nous sommes habitués dans d'autres langues (par exemple, si-alors-sinon, pour (;;), tandis que (), etc.) ne sont pas là dans Smalltalk. Il y a des équivalents, évidemment, mais Smalltalk fait les choses différemment, et apprendre des façons différentes de faire est toujours une bonne idée.
Bonne chance.
Je viens de commencer à raviver mon intérêt pour Smalltalk, et à mon avis, il y a quelques choses intéressantes qui sont spéciales à propos de Smalltalk:
Rien de tout cela ne le rend particulièrement utile pour les personnes qui ne sont pas dans le domaine du développement logiciel. Ma première exposition a été lorsque j'ai vu une interface utilisateur pour un périphérique intégré prototypé sur un PC utilisant Smalltalk. Cela a permis à l'interface utilisateur d'être modifiée et testée très rapidement et, une fois terminée, a fourni aux développeurs intégrés une "spécification exécutable" qui était beaucoup plus précise que n'importe quel document. Je suis surpris de ne pas avoir vu cette technique utilisée beaucoup plus souvent que ce que j'ai observé au cours de mes voyages au cours des 20 dernières années.
J'utilise Smalltalk comme outil de prototypage: je pense que face à un nouveau problème, différentes approches pour le résoudre peuvent être essayées et validées très rapidement et facilement dans un environnement Smalltalk, et une fois la solution souhaitée trouvée, elle devrait être relativement mécanique pour le convertir en Java/C++/C # etc. etc. En fait, pour des choses répétitives, il pourrait être possible d'utiliser Smalltalk pour générer du code pour des parties de la solution dans un autre langage cible.
L'autre chose à propos de Smalltalk est que ses anciens élèves comprennent Kent Beck et Ward Cunningham. Leur travail avec Smalltalk a engendré tests automatisés de xUnit , modèles de conception de logiciels , cartes CRC et d'autres pratiques qui se sont transformées en XP/Agile, etc. pourrait faire valoir que Smalltalk a été un contributeur majeur au paysage de la programmation moderne.
Juste deux commentaires:
Smalltalk n'est pas un objet "orienté", ce sont des objets réels, seulement des objets et des messages dans l'environnement.
Smalltalk n'est pas un langage, c'est un environnement qui a un langage (du même nom), mais l'essentiel de la "magie" ici est dû à l'environnement (l'image).