web-dev-qa-db-fra.com

Quelle est la particularité de Smalltalk?

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?

68
Steve

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:

  • Tout est un objet et les objets ne sont communiqués qu'avec l'envoi de messages
  • Pas de primitives (pas de ints, booleans etc.)
  • Aucune structure de contrôle (pas de for, while, if etc). Cela semble impossible mais c'est vrai!
  • Pas de statique

Il a également ouvert la voie à d'autres choses, désormais courantes:

  • la machine virtuelle (et la compilation JIT)
  • Débogage par inspection
  • Code courant "Hotswapping"
  • l'IDE moderne
  • Fermetures
  • Dactylographie de canard
  • Architecture Model-View Controller (MVC) pour les interfaces utilisateur
  • Développement piloté par les tests (TDD) et méthodologie agile

Et il y a d'autres choses liées à Smalltalk qui ne sont pas vraiment entrées dans le courant dominant:

  • Système basé sur "image" plutôt que sur fichier.
  • Bases de données orientées objet

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.

88
oxbow_lakes

Smalltalk a de nombreuses innovations brillantes - des choses que nous tenons tous pour acquises aujourd'hui, notamment:

  • étant le le premier IDE
  • fournir un support programmatique pour une interface graphique avec une souris Si vous apprenez la programmation de Smalltalk GUI, vous aurez vraiment bien compris MVC correctement.
  • étant construit à partir d'un petit nombre d'idées puissantes qui fonctionnent très bien ensemble
  • La la manière Smalltalk n'est pas de se plier à un comportement inattendu - c'est de s'adapter. Si vous envoyez un message à un objet qui ne le comprend pas, le débogueur apparaît et vous invite à écrire cette méthode ... donc il fournit excellent support pour le développement incrémentiel.
  • L'IDE, l'application que vous écrivez et vos données font toutes partie du même système - donc vous pouvez écrire vos propres outils et déboguer l'instrumentation beaucoup plus facilement.
  • Le le jeu d'outils TDD dans Smalltalk est toujours meilleur que toute autre langue (voir ci-dessous).
  • Squeak Smalltalk a un peu de recherche de conception de pointe:
    • I morphique - vous pouvez vous familiariser avec le concept de "vivacité"
    • le framework web bord de mer - découvrez ce qu'est un serveur de continuation et comment il est radicalement différent
    • Squeak a un projet forte connexion avec le projet OLPC software (un ordinateur portable par enfant)) et pourrait encore avoir une grande influence sur le monde.
    • Découvrez ce qu'est un "trait" ...
    • Jouez avec le environnement immersif radical 3D appelé Open Croquet.
  • Parce que Smalltalk est un langage plus petit, plus simple et plus cohérent, avec son propre environnement intégré, c'est un endroit beaucoup moins déroutant pour commencer à enseigner la POO. Les gens qui empruntent cette voie finissent par être de meilleurs Java, Ruby et programmeurs C # parce qu'ils peuvent apprendre les bases OOP sans toutes les incohérences désordonnées des langages traditionnels).
  • Certains Smalltalks commerciaux ont des environnements incroyables, multi-nœuds distribués OO. Je pense à Gemstone.
  • Vous voulez connaître la différence entre Model-View-Controller et Model-View-Presenter - regardez Dolphin Smalltalk ...

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.

48
Dafydd Rees

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!

21
Norman Ramsey

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.

18
Pavel Minaev

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.

11
James Foster

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:

  • comment les applications web doivent être construites
  • comment le débogage est censé fonctionner
8
Stephan Eggermont

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.

6
Chuck

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 ...

6
Brian Postow

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.

5
Bob Jarvis

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:

  • Environnement de développement hautement productif
  • Prise en charge intégrée des méthodologies de programmation Agile/Extreme
  • Modèle objet "pur"
  • Cadre graphique facile à utiliser

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.

4
techn0mad

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.

3
APC

Juste deux commentaires:

  1. Smalltalk n'est pas un objet "orienté", ce sont des objets réels, seulement des objets et des messages dans l'environnement.

  2. 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).

2
Germán Arduino