12
votes

Pouvez-vous suggérer une bonne introduction à la conception de philosophie et de programmes Scala?

Dans Java et C ++, la hiérarchie des objets du programme de conception est assez évidente. Mais Début Scala, je me suis retrouvé difficile de décider des classes de définir pour mieux utiliser les installations de sucre syntaxiques de Scala (une idéale même sur la façon dont devrais-je concevoir une meilleure performance). Toute bonnes lectures sur cette question?


1 commentaires

Je dirais n'importe quelle hiérarchie de classe qui est "évidente" en Java ou C ++ devrait être également tellement à Scala. Cependant, ce n'est pas vraiment une question de notation, ce qui n'est pas si radicalement différent de l'un d'eux.


4 Réponses :


7
votes

J'ai lu 4 livres sur Scala, mais je n'ai pas trouvé ce que vous demandez. Je suppose que vous avez lu "la programmation à Scala" de Odersky (Artima) déjà. Sinon, il s'agit d'un lien vers la version en ligne:

http://www.docstoc.com/docs/8692868/programmation- In-scala

Ce livre donne de nombreux exemples comment construire des modèles orientés objet dans Scala, mais tous les exemples sont très petits en nombre de classes. Je ne connais aucun livre qui vous apprendra comment structurer des systèmes à grande échelle à l'aide de Scala.

  • orientation impérative-orientation a été autour depuis Smalltalk, alors nous En savoir beaucoup sur ce paradigme.
  • orientation fonctionnelle-orientation sur le d'autre part, est un concept assez nouveau, Donc, dans quelques années, je m'attends aux livres décrivant des systèmes FOO à grande échelle à apparaître. Quoi qu'il en soit, je pense que les pis livre vous donne une très bonne image Comment vous pouvez assembler le basique blocs de construction d'un système, comme Modèle d'usine, comment remplacer le Modèle de stratégie avec fonction littéraux et ainsi de suite.

    Une chose que Viktor Klang m'a dit une fois (et quelque chose que je suis vraiment d'accord sur) est qu'une différence entre C ++ / Java et Scala Oo est que vous définissez beaucoup plus (plus petites) classes lorsque vous utilisez Scala. Pourquoi? Parce que vous pouvez! Le sucre syntaxique pour la classe de cas entraîne une très petite pénalité pour définir une classe, à la fois en tapant et en lisibilité du code. Et comme vous le savez, de nombreuses petites classes signifie généralement mieux OO (moins de bugs) mais pire performance.

    Une autre chose que j'ai remarquée, c'est que j'utilise le modèle d'usine beaucoup plus lorsqu'il s'agit d'objets immuables, puisque tous les "changements" d'une instance permettent de créer une nouvelle instance. Dieu merci pour la méthode copie () sur la classe de cas . Cette méthode rend les méthodes d'usine beaucoup plus courtes.

    Je ne sais pas si cela vous a aidé du tout, mais je pense que ce sujet est très intéressant moi-même, et moi aussi j'attends plus de la littérature sur ce sujet. Bravo!


0 commentaires

1
votes

Je ne pense pas qu'il y a beaucoup de tutoriels pour cela. Je suggérerais de rester avec la façon dont vous le faites maintenant, mais de rechercher un code Scala "idiomatique" et de payer une attention particulière dans les cas suivants:

  • Utilisez des classes de cas ou des objets de cas au lieu d'énums ou de «objets de valeur»
  • Utilisez des objets pour singletons
  • Si vous avez besoin de comportement "en fonction du contexte" ou de la fonctionnalité de type dépendance, utilisez implicite
  • Lors de la conception d'une hiérarchie de type ou si vous pouvez extraire des choses d'une classe de béton, utilisez des traits lorsque cela est possible
  • Les hiérarchies héritables à grain fin vont bien. Gardez à l'esprit que vous avez le motif correspondant à
  • connais le modèle "Pimp Ma bibliothèque"

    Et posez autant de questions que vous jugez que vous devez comprendre un certain point. La communauté Scala est très sympathique et serviable. Je suggérerais la liste de diffusion Scala, Scala IRC ou SCALA-FORUM.ORG


0 commentaires

4
votes

Ceci reste une matière évolutive. Par exemple, le Scala 2.8.0 Just Scala 2.8.0 a apporté son soutien de Type Constructor Inference , qui a permis un modèle de classes de type dans Scala. La bibliothèque Scala elle-même vient de commencer à utiliser ce modèle. Juste hier, j'ai entendu parler d'un nouveau module de levage dans lequel ils vont essayer d'éviter l'héritage en faveur des classes de type.

Scala 2.8.0 a également introduit des implications de priorité inférieure, plus les paramètres par défaut et nommé, qui peuvent tous deux être utilisés, séparément ou ensemble, pour produire des conceptions très différentes que ce qui était possible avant.

Et si nous allons Retour dans le temps , nous notons que d'autres caractéristiques importantes sont pas si vieux non plus:

  • Extractor Méthodes sur les classes de cas Compagnons d'objet Si introduit en février 2008 (avant cela, le seul moyen de faire de l'extraction sur les classes de cas était à travers la correspondance des motifs).
  • valeurs paresseuses et types de structure où introduits juillet 2007.
  • Types abstraits Support pour Type Constructeurs a été introduit en mai 2007.
  • Les extracteurs pour les classes non cas ont été introduits en janvier 2007.
  • Il semble que les paramètres implicites n'étaient introduits que en mars 2006, lorsqu'ils ont remplacé la voie Vues ont été mises en œuvre.

    Tout ce qui signifie que nous apprenons tous à concevoir un logiciel Scala. Assurez-vous de faire appel à des conceptions testées de paradigmes fonctionnels et orientés objet, afin de déterminer la manière dont les nouvelles fonctionnalités de Scala sont utilisées dans d'autres langues, telles que HASKELLL et Type Classes ou Python et par défaut (en option) et les paramètres nommés.

    Certaines personnes n'aiment pas cet aspect de Scala, d'autres l'aiment. Mais d'autres langues le partagent. C # ajoute des fonctionnalités aussi vite que SCALA. Java est plus lent, mais cela passe aussi des changements. Il a ajouté des génériques en 2004 et la version suivante doit apporter des modifications à une meilleure programmation concomitante et parallèle.


3 commentaires

Heureux d'entendre votre avis dans cette affaire, c'est vraiment un moment excitant à temps! Il n'y a qu'une seule chose qui m'a rendu inquiet, la partie sur le remplacement de l'héritage avec des classes de type. En utilisant l'héritage comme méthode «standard» pour la construction de systèmes Scala, nous construisons un modèle bien connu des programmeurs aujourd'hui. S'absenter vers des classes de type ferait la pas de Java à Scala Harder ou?


@Olle Héritage est bien connu et largement mal utilisé. Ce n'est pas seulement moi dire que - tous les gurus de OO ont de fortes recommandations sur la manière d'utiliser l'héritage. L'utilisation de classes de type n'est pas très différente de l'utilisation d'interfaces, et personne n'avait le moindre problème avec eux.


Vous avez probablement raison d'être mal utilisé et tout. Mais je ne suis pas convaincu que les classes de types n'apporteront pas plus de bois au feu "Scala est trop difficile".