julia: POO ou pas
Je suis en train de travailler sur Juno avec Julia.
Je ne sais pas si Julia suports de la POO ou pas.
Par exemple, est-il quelque chose comme class
ou struct
de c++?
Comment déclarer avec les membres de données, par exemple) ou une fonction?
Quand je Google
Cette question est le premier résultat qui s'affiche quand je regarde que sur google ;). En tout cas, il est assez difficile lorsque vous passez de python ou c++ pour obtenir que dans votre esprit et de le faire fonctionner. Dans ma propre expérience =)
Does Julia support OOP
je reçois beaucoup d'articles connexes. Ne sont-ils pas utiles? Vraiment?Cette question est le premier résultat qui s'affiche quand je regarde que sur google ;). En tout cas, il est assez difficile lorsque vous passez de python ou c++ pour obtenir que dans votre esprit et de le faire fonctionner. Dans ma propre expérience =)
OriginalL'auteur Yves | 2015-11-17
Vous devez vous connecter pour publier un commentaire.
En cas de doute, lisez la documentation...
https://docs.julialang.org/en/v1/manual/types/#Composite-Types-1
Longue histoire courte:
EDIT: Méthodes sont définies à l'extérieur la définition de type, par exemple
Méthodes ne pas vivre à l'intérieur de la type, comme il le ferait en C++ ou en Python, par exemple. Cela permet à l'une des principales caractéristique de Julia, la répartition multiple, de travailler également avec des types définis par l'utilisateur, qui sont exactement sur le même niveau que définis par le système de types.
double()
sera juste une fonction, et non une méthode. détails: stackoverflow.com/questions/20981789/...Le point est qu'en Python vous souvent de définir x.double(), c'est à dire une double méthode de l'objet.
Hmm, donc pas d'encapsulation, ni public/protected access. Ils ne peuvent donc pas être de la POO, c'est intéressant. (Note de côté - c'est-partielle d'un problème avec la partie Python a aussi bien fait, mais au moins, Python pauvres performances par défaut gardé à l'écart des grands systèmes, avec Julia qui m'inquiète)
OriginalL'auteur David P. Sanders
Julia n'est pas orienté objet, au sens plein parce que vous ne pouvez pas joindre des méthodes de Julia objets ("types"). Les types ne semblent très similaires à des objets. Cependant, puisqu'ils ne disposent pas de leurs propres méthodes et il n'y a pas d'héritage les objets eux-mêmes ne font pas le jeu. Au lieu de cela, vous avez des fonctions qui agissent sur les objets.
La différence, c'est de la balle.checkCollision() vs checkCollision(balle,Murs). En réalité, ce n'est pas que les grandes d'un accord. Vous pouvez faire quelque chose comme héritage par la présence d'un type de disposer d'un champ d'un autre type et la répartition multiple vous permet d'écrire des fonctions qui font des choses différentes en fonction des objets que vous leur donnez, qui peut être presque comme des méthodes de l'objet. La vraie différence est l'endroit où vous enregistrez la fonction et types dans un fichier. Vous pouvez donc faire une sorte de quasi-objecté-style orienté dans Julia, mais c'est encore très différent de celui de la POO langues.
Oui, et le fait que vous pouvez étendre les méthodes à d'autres colis est devenue une caractéristique majeure de Julia, qui permet de très chouettes trucs. DiffEq/Saut de confédérées package Api de l'utiliser. Mettre le double des nombres dans des équations différentielles et les optimiseurs pour l'optimisation multi-niveau est de l'utiliser. C'est vraiment un bel avantage sur la programmation orientée objet, il a fallu quelques années afin de développer un facteur très utile de style. Maintenant, il est difficile de revenir à la programmation orientée objet compte tenu de la perte de fonctionnalité.
Chris, vous êtes en tirant dans la direction d'une langue argument, je vais aller avec vous, mais juste pour un peu, car je ne pense pas que c'est un grand Chemin: Ok, donc, dans la pratique, vous parlez de l'héritage multiple combiné avec capsulées méthodes de dogme. Vous pouvez utiliser l'héritage virtuel et les "amis" de le faire en POO langs facilement, mais pourquoi les gens choisir pour l'éviter? Parce que ce dogme nous ramène à l'époque de tables de recherche en C. C'est amusant pour un script, et un désastre, même médiocre, 1M de lignes de code système. C'est l'histoire de la même façon d'écraser le code de la mémoire est, il a été difficile à maintenir.
Les multiples d'expédition mécanisme et de dessins autour de ont été trouvés à être maintenues dans mon et l'expérience de l'autre. J'ai donné quelques exemples de certains "fonctionne" le comportement de Julia qui compte pour cela, et il y a beaucoup plus, par exemple SymEngine.jl types agissant comme des nombres et de la quantification de l'incertitude dans les grands codes via des Mesures surcharges. Il possède à la fois des avantages et des inconvénients, et si le génie des compromis sont bonnes/mauvaises peut être discuté longuement ailleurs. Nous pouvons discuter en privé au sujet de nos opinions, mais je ne suis pas sûr que ce soit pertinent pour la réponse plus.
OriginalL'auteur Chris Rackauckas
Je tiens à mentionner cette worthfull conversation au sein de Julia groupe d'utilisateurs Julia et Programmation Orientée Objet.
Pour moi, Julia n'est pas comme un classique de langage OO, et j'ai toujours aimé penser de Julia, comme plus d'un Méthode Orientée langue qu'un Orientée Objet, c'est parce que si vous essayez de créer un structure de données encapsulées et la fonctionnalité dans Julia, bientôt vous aurez des ennuis.
OriginalL'auteur Reza Afzalan
Je ne suis pas spécialiste de la langue, mais ma compréhension est: Oui ... et non.
Il a l'équivalent de classes et de structures, cependant il n'existe pas de méthodes sur les objets autres que d'un seul constructeur.
OriginalL'auteur Tim B
Oui. Il juste ne peut pas hériter de béton "classes", seulement de l'abstrait.
Fonctions avec plusieurs d'envoi sont à un strict de la généralisation de méthodes avec un seul envoi et sont strictement plus polymorphes. Vous avez juste à les définir en dehors d'une définition de classe, parce qu'ils "appartiennent" à plusieurs objets.
Méthodes traditionnelles dans un langage OO sont un cas particulier de Julia fonctions où vous n'avez expédition basé sur le premier argument.
OriginalL'auteur saolof
La réponse est que Julia est plus proche de c au lieu de c++. Ainsi, la programmation orientée objet est limité à Julia d'avoir seulement c::struct plutôt que c++::classe. Donc, c'est juste l'encapsulation de données ou structure de données ou de personnalisation des Types plutôt qu'une véritable programmation orientée objet, les objets, dans le sens strict du terme.
OriginalL'auteur geekborj