Comment puis-je m'améliorer à la POO? [fermé]

Cela pourrait être une question étrange pour beaucoup d'entre vous, et je ne sais pas s'il est correct de dire OOP dans ce contexte, parce que OOP (la programmation orientée objet ) est généralement associée à des langages de programmation tels que c++ et Java, et non à des langages de programmation légers, ou langages de script . Ma question, cependant, est dans la catégorie de JavaScript , qui est également orienté objet. Jeconnais les objets, les propriétés, méthodes, prototypes et constructeurs, Je n'arrive tout simplement pas à me rappeler quand utiliser des objets.

Lorsque j'écris mes applications web, Je n'utilise jamais d'objets pour une raison quelconque. Cela m'agace, parce que quand je lis sur les objets dans une variété de livres et d'articles en ligne, les objets rendent tout tellement plus simple et, juste pour le mettre là-bas, je déteste me répéter, et c'est pourquoi j'aimerais savoir quand utiliser des objets.

Je veux vraiment devenir meilleur à utiliser des objets et quand utiliser des objets.

Pouvez-vous mentionner quelques situations que les objets seraient bons? Ce serait vraiment bien d'avoir écrit quelque chose que vous savez que vous pouvez revenir en arrière et regarder quand vous êtes confus sur le moment d'utiliser ces objets sacrément:)

J'aimerais des réponses simples expliquant pourquoi et quand les objets doivent préférer.
Je voudrais aussi si vous pouviez me dire si je dois utiliser des objets quand je suis dans des situations spéciales généralement adaptées aux objets c'est à dire chaque fois que vous voulez _________ ensuite, vous utilisez un objet...


J'espère vraiment que vous comprenez ma question et vous considérerez que je suis un peu nouveau sur ce site et nouveau sur JavaScript

Merci!

27
demandé sur Latze 2010-08-23 16:42:52

12 réponses

Vous utilisez probablement des objets sans même vous en rendre compte.

Si vous écrivez du Javascript qui interagit avec le DOM, vous utilisez des objets.

Si vous utilisez L'un des frameworks Javascript (jQuery, MooTools, etc.), vous utilisez des objets.

L'utilisation d'objets sera utile lorsque vous devez encapsuler un code couramment utilisé afin qu'il puisse être facilement réutilisé (dans une seule application ou dans plusieurs applications comme les plugins jQuery...qui sont des objets dans et d'eux-mêmes).

Et pour répondre à la question dans le titre de votre message...la seule façon de vraiment s'améliorer à la POO est de pratiquer! Lire et étudier le sujet ne peut que vous amener jusqu'à présent.

10
répondu Justin Niessner 2010-08-23 13:45:38

Tout d'Abord, vous n'avez pas besoin d'utiliser des objets pour éviter de vous répéter. Si vous devez faire la même chose à deux points de votre code, vous pouvez écrire une fonction non-POO vanille simple pour le faire et l'appeler deux fois.

Pour résumer les avantages de la POO sans écrire un livre ici, la POO fait essentiellement trois choses pour vous:

  1. Regrouper les données connexes. Les programmes Non-POO ont souvent tout un tas de variables flottant dans le programme principal qui ne sont que vaguement concerner. Avec la POO, vous mettez des variables connexes dans un objet.

  2. Associer des fonctions avec des données. En mettant des fonctions dans un objet avec les données sur lesquelles elles fonctionnent (les puristes diront qu'elles sont alors des " membres "plutôt que des" fonctions"), vous faites comprendre au lecteur que celles-ci vont de pair.

La combinaison de #1 et # 2 vous permet de masquer les détails d'implémentation d'autres objets. Vous créez l '"interface publique" pour une classe, l'ensemble des fonctions que les autres objets doivent appeler et cela représente les choses logiques que cette classe fait, et toutes les autres fonctions dont vous avez besoin peuvent être cachées. (Plus explicitement dans certaines langues que dans d'autres, mais ce n'est pas le point ici.)

  1. Les Classes peuvent hériter et muter. Si vous avez deux classes similaires A et B qui devraient être la plupart du temps les mêmes mais avec quelques différences mineures, vous pouvez faire une superclasse C avec toutes les choses communes, puis A et B héritent de cela et chacun ajoute dans ses propres choses uniques. C'est ce qui est habituellement annoncé comme la puissance de la POO. Franchement, Oui, c'est très cool, et dans certaines situations peut être très pratique, mais je n'utilise sa vraie puissance que de temps en temps, et je soupçonne la même chose de la plupart des programmeurs. (Les amateurs de poo se sentent libres de sauter avec comment et pourquoi vous utilisez l'héritage tout le temps.)

Quand OOP il? Chaque fois que vous avez plusieurs données qui vont logiquement ensemble, il est logique de créer une classe pour les contenir. Comme les coordonnées X et Y; ou le nom du client, l'adresse, et Code postal; ou Phaser gamme et phaser consommation d'énergie; ou quoi que ce soit.

Chaque fois que vous avez des fonctions qui fonctionnent logiquement sur ces données connexes, placez - les dans la classe avec les données. Comme "capitaliser le nom du client", "calculer la distance de ce point par rapport à l'origine", etc.

Comment et quand utiliser l'héritage est plus compliqué. Je vais laisser ça pour une autre fois.

9
répondu Jay 2010-08-23 14:00:48

La première chose à retenir, c'est que beaucoup de code Javascript simple n'a vraiment pas besoin de définir des objets (les utiliser est inévitable, car toutes les choses que le DOM vous donne sont des objets). Ne panique pas trop.

Une des bonnes choses à propos de Javascript est qu'il supporte beaucoup de styles différents; POO, impératif et fonctionnel.

L'une des mauvaises choses à propos de L'utilisation de Javascript est que, parce qu'il supporte beaucoup de styles différents, il est difficile d'apprendre un autre style, au moins jusqu'à ce que vous soyez forcé à un moment "a-ha" par quelque chose d'autre.

Passer du temps dans des langues qui sont plus enclines à vous forcer à la POO (même quand certains diront qu'ils ne devraient pas) est utile ici. C# et Java en forcent un le long des lignes de POO, bien que C++ Ne le fasse pas (avec la même force et la même faiblesse ici qu'avec Javascript).

Essayez de penser aux "choses" dans votre programme. Certaines de ces choses seront déjà modélisées par des objets (ceux que le DOM vous donne). Certains seront vraiment juste nombres et chaînes et ne vaut pas la peine de composer au-delà de cela (bien qu'apprendre à ajouter des fonctionnalités à ces types à travers prototype soit une bonne idée aussi). Certaines seront des "choses" plus compliquées qu'un simple type et naturellement adaptées à la modélisation en tant qu'objet.

Regardez également la programmation fonctionnelle en Javascript (par exemple, passer une fonction en tant que paramètre à une autre fonction est l'exemple le plus simple), car l'interaction entre ceci et la POO est l'un des éléments les plus forts de Javascript, et essentiel dans la définition des méthodes sur les objets étant donné le modèle de POO basé sur un prototype qu'il a.

8
répondu Jon Hanna 2010-08-23 15:29:17

Mon expérience personnelle avec la POO en JavaScript est positive, une fois que j'ai compris pour le faire faire ce que je voulais bien sûr, je l'utilise habituellement en combinaison avec jQuery afin que le code résultant puisse sembler un peu.... bizarre.

function BlogPost(id,title,content)
{
    this.id = id;
    this.title = title;
    this.content = content;

    function display()
    {
        var post = $('<div class="blogpost"></div>');
        $(post).append('<h2>' + this.title + '</h2>');
        $(post).append('<p>' + this.content + '</p>');
        var deleteButton = $('<span class="deletePost">delete</span>')
        $(post).append(deleteButton);
        $(deleteButton).click(this.delete)

        $('#postcontainer').append(post);
    }


    function delete()
    {
        $.post('some/xhr/handeler',{id:this.id});
    }
}

C'est une classe rapide (non testée) qui peut être utilisée pour ajouter dynamiquement blogposts à un div avec ID postcontainer' et gère les clics sur un bouton de suppression.

3
répondu Kristoffer Sall-Storgaard 2010-08-23 13:54:53

Réfléchissez à la façon dont vous pouvez utiliser des objets pour organiser et simplifier votre application. J'ai trouvé deux métaphores utiles:

  • Une montre mécanique est constitué d'un nombre d'engins, dont chacun vise un seul but dans le fonctionnement global de la machine. Si vous pensez à votre application comme une montre, alors les objets sont ses engrenages.

  • Un groupe de travail est composé d'un certain nombre de personnes, chacun d'entre eux effectue un travail spécifique. Les gens communiquent entre eux dans l'exécution de leur travail, et les emplois tombent selon deux lignes-ceux qui exécutent des tâches (travailleurs), et ceux qui organisent et dirigent le travail d'autres personnes (gestionnaires).

Vous pouvez utiliser ces métaphores pour organiser le travail de votre application. Commencez par diviser l'application en couches fonctionnelles; interface utilisateur, couche métier et persistance, par exemple. Prenez chacun de vos cas d'utilisation, et distribuez le travail qu'il fait parmi ces couches. Cela devrait vous donner un point de départ pour les cours que vous aurez besoin.

Rendre chaque classe comme autonome possible. vous voulez le sceller quand c'est fait, comme un contrôle.net. Les Classes ne doivent communiquer entre elles que via leurs interfaces, composées de propriétés et de méthodes. Ces interfaces devraient avoir la plus petite empreinte (moins de propriétés publiques et de méthodes) que vous pouvez trouver. L'idée est d'isoler les effets secondaires d'un changement de classe pour la classe seul.

Si vous faites ces choses, vous serez devant 80% de tous les programmeurs. Vous trouverez beaucoup plus facile de développer et de maintenir même de grandes applications, car vous serez en mesure de résoudre les problèmes complexes jusqu'à des composants simples.

3
répondu David Veeneman 2010-08-23 14:39:41

Javascript est juste un langage terrible pour apprendre la POO. Je recommanderais d'apprendre la POO dans une autre langue (comme Java ou C++), puis d'apprendre la syntaxe orientée objet en Javascript. À ce moment-là vous avez tous les ingrédients.

C'est à ce moment que vous pouvez décider si vous voulez ou non utiliser un objet pour une tâche en Javascript ou s'il suffit d'utiliser uniquement des fonctions.

Personnellement, j'écris surtout du javascript non-objet et laisse des objets quand une tâche se sent orientée objet pour moi. Par exemple, j'ai utilisé un design orienté objet pour un script de glisser-déposer, dans lequel vous avez simplement créé un objet DragNDrop avec les paramètres corrects et les éléments de votre page peuvent être traînés à partir de ce moment, ou lorsque je voulais simplifier certaines fonctions de gestion XML javascript, j'ai écrit un objet qui enveloppait les objets xml normaux.

2
répondu Jasper 2010-08-23 13:36:33

Justin Niessner l'a dit et je ne peux qu'ajouter à sa réponse...

En plus de la pratique, je trouve la lecture du code des autres très instructive. Vous devez être prudent car tout le code n'est pas exemplaire (c'est le moins que l'on puisse dire), mais le développement de compétences critiques fait partie de l'amélioration.

1
répondu 2010-08-23 14:42:42

À mon avis, je pense qu'il est préférable de penser à la POO dans le contexte d'un domaine particulier ou d'un problème commercial. Par exemple, JavaScript utilise des objets pour modéliser le comportement et les attributs du navigateur, par exemple, fenêtre, cadre, historique...

Un modèle de domaine d'un problème métier contiendra des objets qui seront reflétés dans le code de programmation écrit POO. Par exemple, une application d'étudiant universitaire aura des objets pour les étudiants, les professeurs, les cours, les programmes d'études, les salles et ainsi de suite. Par conséquent, commencez par votre problème d'entreprise et modélisez le domaine. Votre code POO doit avoir des objets modélisés à partir de votre domaine. le texte d'alt

Source:http://csci.csusb.edu/dick/samples/uml0.html

1
répondu johnnieb 2010-08-23 14:44:25

Vous pourriez être intéressé par les modèles de conception (livre, Wikipedia), qui vous disent, comment résoudre les problèmes courants en utilisant la POO. De nombreux modèles de conception classiques peuvent ne pas être si pertinents pour JavaScript, car dans JavaScript il y a d'autres éléments non POO (par exemple des fonctions), ce qui peut résoudre certains problèmes encore plus élégants.

Quelques modèles de conception simples que je peux recommander pour commencer:

  • usine abstraite: reporter l'instanciation des objets. En JavaScript dans la plupart des cas une fonction fera le travail.
  • décorateur: ajoute de manière transparente des fonctionnalités à un objet lors de l'exécution. Peut également être imbriqué. Exemple d'utilisation: journalisation
  • Composite: traiter un arbre / graphique d'objet comme un seul objet.
1
répondu nang 2010-08-23 14:59:14

Je pense que l'utilisation de classes en général et de principes OOP rend votre code plus propre, plus lisible et vous rend plus productif .

1
répondu George 2010-08-23 17:53:23

Récemment, j'ai travaillé sur une application web qui nécessiterait un Javascript lourd côté client.

Venant de l'arrière-plan C#/Java, j'ai réalisé que Javascript nécessiterait un changement de pensée, mais je voulais toujours appliquer de bons principes oo si possible, en particulier pour contrôler la complexité probable de l'application.

Après un peu de recherche, j'ai trouvé un grand livre appelé Object Oriented Javascript par Stoyan Stefanov. Cela m'a vraiment ouvert les yeux sur le pouvoir de cette souvent appelé "langage de jouet". Certaines sections sur les concepts de programmation fonctionnelle, la portée variable et les fermetures peuvent même être un peu plus avancées que vous le souhaitez.

Cependant, lire et appliquer beaucoup de ces concepts de ce livre (fermetures, fonctions anonymes, etc.) en Javascript, m'a même aidé à revenir en C# land où ces concepts ne font que devenir plus traditionnels.

Compte tenu de votre situation et de votre objectif, je peux fortement recommander ce livre comme l'un des meilleurs moyens pour en savoir plus sur faire OO en Javascript.

1
répondu Ash 2010-08-24 12:34:26

Javascript est beaucoup, beaucoup moins orienté objet que c# ou Java; ne vous inquiétez pas si votre Javascript ne semble pas orienté objet.

-1
répondu Dean J 2010-08-23 13:44:09