IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[POO] [ADAPTABLE][SRC]Gestion de la POO en JavaScript


Sujet :

Contribuez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut [POO] [ADAPTABLE][SRC]Gestion de la POO en JavaScript
    Voici un systeme de gestion de la POO en Javascript

    auteur : FremyCompany

    Télécharger le code complet

    Utilisation :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    // Ajout d'un sous espace de nom à System
                with(System.addNameSpace("My")) {
                    // Ajoute d'une classe
                    with(addClass("MyClass", /* Constructeur, argument facultatif */ function() {
                        /* Cet appel est requis par le Designer de classe */
                        this.getType().New(this);
     
                        /* Vous pouvez ajouter ici tout autre appel prévu par votre fonction */
                        // Utilisation d'un Evenement (créé ici par la propriété)
                        this.onFieldChange.addHandler(function(sender, e) {
                            sender.Field=sender.getField();
                        });
                    })) {
                        addProperty("Field"); // Ajoute une propriété public à la classe (n'a aucun rapport avec le champ Field, le rapport officieux est effectué ligne 11)
                        addSub("resetField", function() { this.setField(null); }) // Ajoute une fonction à la classe
                        /*
                            addEvent("X") // Ajoute l'evenement onX à la classe
                            addClass("subClass") // Ajoute une sous classe
                        */
                    }
                }
     
                // Instanciation de la classe
                var MCI=new System.My.MyClass();
     
                // Invocation d'une propriété (get/setP)
                MCI.setField("value");
     
                // Création d'un délégué
                var getMCIField=CreateDelegate(MCI.getField, MCI);
     
                // Utilisation du délégué, le lien avec l'objet est fait par JavaScript
                alert("getMCIField:"+getMCIField());
     
                // Invocation d'une fonction (F)
                MCI.resetField();
                alert("MCI.getType().getPath():"+MCI.getType().getPath());
     
                // Destruction partielle de l'objet (pour prendre de vitesse le Garbage Collector)
                // MCI.dispose();
     
                // Test de getType()
                try { alert("document.getType():" + document.getType().getPath()); } catch (ex) {} //(IE:Erreur; FF:System.Object)
                alert("getTypeOf(document):" + Object.getTypeOf(document).getPath()) //(IE:System.XMLNode; FF:Idem)
                alert("getTypeOf(document.firstNode):" + Object.getTypeOf(document.firstNode).getPath()) //(IE:System.Undefined; FF:Idem) ((PS::document.firstNode doesn't exist))
                alert("getTypeOf(null):" + Object.getTypeOf(null).getPath()) //(IE:System.Undefined; FF:Idem)
                alert("getTypeOf(Function):"+getTypeOf(function() {}).getPath());
     
                // Test de isSubClassOf
                with(System.addClass("TestEventArgs")) {
                    inherits(System.EventArgs);
                }
                with(System.addClass("TestEventArgs2")) {
                    inherits(System.TestEventArgs);
                }
                var T=new System.TestEventArgs2();
                alert("SubClassOf(T,EventArgs&Object):"+isSubClassOf(T, System.EventArgs) + "&" + isSubClassOf(T, System.Object))
                alert("InstanceOf(T,TestEventArgs2):"+isInstanceOf(T, System.TestEventArgs2))
                alert("InstanceOf(T,TestEventArgs):"+isInstanceOf(T, System.TestEventArgs))
                alert("SubClassOf(T,Event):"+isInstanceOf(T, System.Event))
                alert("SubClassOf(3,Number):"+isSubClassOf(3, System.Number))
                alert("SubClassOf(false,Boolean):"+isSubClassOf(false, System.Boolean))
                alert("SubClassOf(Type,Function):"+isSubClassOf(T.getType(), System.Function))
                // Test forEach
                var t1={"value":true,"value2":false}
                alert("forEach: all")
                t1.forEach(function(o,k) { alert (k) })
                alert("forEach: ownPropertiesOnly")
                t1.forEach(function(o,k) { alert (k) }, true)
                t1=["value","value2"];
                alert("Array; forEach: all")
                t1.forEach(function(o,k) { alert (k) })

    Remarques :
    Ce code n'en est qu'à ses débuts. Il gère IE+FF+Opéra.
    Il gère actuellement :
    - Espaces de noms
    --- Importation
    --- Sub NameSpace
    - Classes
    --- Création simple
    --- Propriétés (r/w) avec champs privés
    --- Gestion poussées des evenements
    --- Héritages
    --- Réflection (Début)
    - Add-ins et interfaces (déjà implémenté, mais pas d'exemple)
    - Meilleurs performances du code
    - Fonctions de base implémentées (returnNull, returnFalse, emptyConstructor)
    - Création de délégués (lier une fonction à un objet)
    - ...
    Dans le futur, je projète de pouvoir ajouter du commentaire à une fonction (ou propriété). Je vais aussi faire un exemple pour ce qui est de l'utilisation d'Add-In ou d'interface

  2. #2
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Petite mise à jour (2 --> 2.1) [AJOUT: 2.1-->2.4]
    - Amélioration de la réflection :
    --- getType().name ==> getType().objectName;
    --- getType().parent ==> renvoie l'objet parent dans l'arborescence (System pour System.Class1)
    --- getType().parentType renvoie "namespace" ou "class" selon les cas ==> decrapted, utilisation déconseillée, mieux vaut utilier parent.getType().objectName ("Type" ou "NameSpace")
    --- getType().getPath() ==> renvoie l'arborescence de la classe (System.MyClass);
    --- getType().getType() renvoie System.Type ou System.NameSpace;
    --- Les objets créés autrement que par le framework sont automatiquement considérés comme des System.Object et sont donc pris en charge
    PS1 : Sous IE, les objets comme window et document N'héritent PAS de System.Object mais bien de System.ActiveXObject et ne possèdent pas les fonctions de réflections normales
    PS2 : les objets par valeurs (nombres, boolean, ...) sont pris en charge artificiellement par le framework via System.Number, System.Boolean et System.Undefined. Néamoins, ils restent des objets par valeur. Prière donc d'utiliser getTypeOf pour en objtenir le type managé.

    --- Ajout de getTypeOf, isInstanceOf et isSubClassOf comme méthodes assurées de réflection
    - Corrections de qques bugs

    Up : 2.4.1
    - Correction de qques bugs
    - Ajout de Throw() pour utiliser la console FF
    Fichiers attachés Fichiers attachés

  3. #3
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Oui, alors là, c'est .... adaptable

    Franchement, c'est une bonne idée, mais c'est vraiment très vaste comme champ. A mon avis, ça vaut largement le coup d'en faire un article. Ca te dit de passer redac, Fremy

  4. #4
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Citation Envoyé par denisC
    Oui, alors là, c'est .... adaptable
    lol, si je te le dis, c'est que ca a du vrai
    Franchement, c'est une bonne idée, mais c'est vraiment très vaste comme champ. A mon avis, ça vaut largement le coup d'en faire un article. Ca te dit de passer redac, Fremy
    Ben oui si j'arrive à avoir le temps de m'y mettre (vive les vacances de noël!)... Ben pk pas... d'un autre coté, je ne vois pas pk je devrais changer de statut pour écrire un tutoriel...
    Je resterait tjrs Fremy, et ce avec une deux ou trois étoiles

    Lol, allez, moi je file, j'ai un CS en Géographie demain !

  5. #5
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par FremyCompany
    Je resterait tjrs Fremy, et ce avec une deux ou trois étoiles
    Pas d'étoiles pour les auteurs. Tu auras juste des plumes Jaunes. Et effectivement, ça ne changera rien d'autre.

    C'est pas le fait que j'ai plein de plumes rouges et d'étoiles qui change qui je suis : toujours assez irresponsable

  6. #6
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Citation Envoyé par denisC
    Pas d'étoiles pour les auteurs. Tu auras juste des plumes Jaunes...
    Mouais, t'auras compris ce que je voulais dire
    C'est pas le fait que j'ai plein de plumes rouges et d'étoiles qui change qui je suis : toujours assez irresponsable
    Mdrr

Discussions similaires

  1. [POO] PHP 5 - gestion de la persistance
    Par BRAUKRIS dans le forum Langage
    Réponses: 12
    Dernier message: 07/07/2010, 13h34
  2. POO MVC2 et gestion des droits des utilisateurs sur les modèles.
    Par Dankin dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 02/06/2009, 21h26
  3. [POO] Classes de gestion d'un blog
    Par M3hdi dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2009, 09h37
  4. [POO] Adapter un script d'autocompletion pour plusieurs champs texte
    Par tusssss dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 14/04/2008, 17h18
  5. [POO] Objet et gestion de BDD
    Par hush dans le forum Langage
    Réponses: 9
    Dernier message: 16/06/2007, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo