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

JavaScript Discussion :

POO - Comment bien faire un setter et getter


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 116
    Points
    116
    Par défaut POO - Comment bien faire un setter et getter
    Bonjour à toutes et à tous,

    Voilà, je me dis que je dois me mettre à la POO pour des questions de connaissances, maintenances et de vitesse (selon mon code )

    J'ai donc fait un petit exemple avec une class Client comme suit :

    Code : 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
     
    function Client(){
    	var vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts;
     
    	this.setClientInfos = function(vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts){
    		this.vID = vID;
    		this.vPolitesse = vPolitesse;
    		this.vActif = vActif;
    		this.vName = vName;
    		this.vFirstName = vFirstName;
    		this.vSociete = vSociete;
    		this.vType = vType;
    		this.vTelPrive = vTelPrive;
    		this.vTelPro = vTelPro;
    		this.vTelMob = vTelMob;
    		this.vFax = vFax;
    		this.vMail = vMail;
    		this.vIDRue = vIDRue;
    		this.vRue = vRue;
    		this.vCP = vCP;
    		this.vLocalite = vLocalite;
    		this.vPays = vPays;
    		this.vCommentaire = vCommentaire;
    		this.vContacts = vContacts;
    	}
     
    	this.getClientInfos = function(){
    		return	{"client":[
    					{
    						"id":vID,
    						"politesse":vPolitesse,
    						"actif":vActif,
    						"nom":vName,
    						"prenom":vFirstName,
    						"societe":vSociete,
    						"type":vType,
    						"telprive":vTelPrive,
    						"telpro":vTelPro,
    						"telmob":vTelMob,
    						"fax":vFax,
    						"mail":vMail,
    						"idrue":vIDRue,
    						"Rue":vRue,
    						"cp":vCP,
    						"localite":vLocalite,
    						"pays":vPays,
    						"commentaire":vCommentaire,
    						"contacts":vContacts
    					}
    				]};
    	}
     
    }
    Comme j'ai encore un peu de peine, j'aurais voulus savoir une chose.

    J'ai donc mon getter qui s'occupe de récupérer les variables locales à la class et qui me les renvoient en JSON. Comment dois-je procéder au mieux pour récupérer ce JSON ?

    Dois-je faire la requête vers ma BDD dans le getter ou faudrait-il plutôt faire une autre méthode qui s'occupe des requêtes pour ensuite setter les valeurs?

    Cela peut paraitre bête peut-être... Mais je ne vois pas qu'es ce qui serait le plus efficace avec une BDD qui tourne derrière...


    Merci d'avance pour vos lumières

    [EDIT]
    Désolé j'ai oublié de préciser. Ma question s'applique aussi au setter. Es-ce qu'il vaut mieux travailler avec les variables de la class pour, par la suite, enregistrer dans la BDD ou vaut-il mieux que je set directement les valeurs dans ma BDD ?

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je ne sais pas trop ce que tu veux faire mais ta méthode getClientInfo ne retourne pas le json de ton objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var client = new Client();
    client. setClientInfos(...);
    //get JSON for client
    var txt = JSON.stringify(client);
    je crois qu'il te faut lire la doc sur JSON car pour affecter le contenu d'un JSON à un objet il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var client2 = JSON.parse(txt);
    pour ce qui est de la base de donnée il va te faloir être plus précise
    s'agit-il d'un datastore HTML5 côté client ou un e base relationnelle côté serveur ?

    A+JYT

  3. #3
    Membre régulier Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 116
    Points
    116
    Par défaut
    Bonjour,


    Tout d'abord merci de la réponse . Pour ce qui est du code, je n'ai pas encore pris le temps de le corriger pardon , je me posais surtout la question et voulait me clarifier dans ma tête avant d'avancer.

    Pour ce qui est des requêtes, il s'agit d'un serveur MySQL par exemple. Enfin une BDD relationnelle serveur.

    Un ami à moi m'a indiqué une chose. Normalement un getter et un setter ne doivent jamais faire de requête directement. Cela devrait-être la fonction d'autres méthodes.

    Es-ce correcte ?

    D'après la documentation que j'ai pus trouver, j'ai vus certaines personnes faire des requêtes directement dans le setter et getter et d'autres qui séparaient les requêtes en méthodes. Donc je peine à savoir la meilleure solution en terme de développement

    [EDIT]
    Merci pour la fonction JSON au faite Je ne la connaissait pas vais lire la docs de ce pas

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je ne comprend rien

    ton javascript s’exécute sur le serveur ?
    Car dans ce cas je ne vois pas ce que vient faire JSON dans l'affaire

    et si ton javascript s’exécute sur le client il n'a pas accès à la base mais au serveur http il n'a pas à faire de requêtes sur la base c'est au serveur de s'en charger.

    A+JYT

  5. #5
    Membre régulier Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 116
    Points
    116
    Par défaut
    Non je penses qu'il y a un malentendu.

    J'ai du javascript exécuté sur un poste client. J'utilise du PHP, MySQL et du javascript par exemple. Donc javascript exécuté côté client.

    Du coup, il peut m'arriver d'avoir à faire des requêtes asynchrone (AJAX) vers la BDD MySQL.

    Donc du coup, lorsque je code en javascript pour faire une class, j'aimerais savoir si je doit faire un setter dans lequel je met ma requête ajax ou si je dois faire une autre méthode que j'appel pour effectuer la requête.

    Un exemple sera plus parlant peut-être...

    Vaut-il mieux faire :
    Code : 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
     
    function Client(){
    	var vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts;
     
    	this.setClientInfos = function(vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts){
    		this.vID = vID;
    		this.vPolitesse = vPolitesse;
    		this.vActif = vActif;
    		this.vName = vName;
    		this.vFirstName = vFirstName;
    		this.vSociete = vSociete;
    		this.vType = vType;
    		this.vTelPrive = vTelPrive;
    		this.vTelPro = vTelPro;
    		this.vTelMob = vTelMob;
    		this.vFax = vFax;
    		this.vMail = vMail;
    		this.vIDRue = vIDRue;
    		this.vRue = vRue;
    		this.vCP = vCP;
    		this.vLocalite = vLocalite;
    		this.vPays = vPays;
    		this.vCommentaire = vCommentaire;
    		this.vContacts = vContacts;
    	}
     
    	this.getClientInfos = function(){
    		return	{"client":[
    					{
    						"id":vID,
    						"politesse":vPolitesse,
    						"actif":vActif,
    						"nom":vName,
    						"prenom":vFirstName,
    						"societe":vSociete,
    						"type":vType,
    						"telprive":vTelPrive,
    						"telpro":vTelPro,
    						"telmob":vTelMob,
    						"fax":vFax,
    						"mail":vMail,
    						"idrue":vIDRue,
    						"Rue":vRue,
    						"cp":vCP,
    						"localite":vLocalite,
    						"pays":vPays,
    						"commentaire":vCommentaire,
    						"contacts":vContacts
    					}
    				]};
    	}
     
    this.RequeteGetClient = function(){
    //Requête qui récupère les informations du client pour que je puisse ensuite faire un setClientInfos(.....);
    }
     
    this.RequeteSetClient = function(){
    //Requête qui vas envoyer les informations du client pour les enregistrer
    }
     
    }
    Ou ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function Client(){
    	var vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts;
     
    this.setClientInfos = function(){
    //Requête qui vas envoyer les informations du client pour les enregistrer
    }
     
    this.getClientInfos= function(){
    //Requête qui récupère les informations du client pour que je puisse ensuite faire un setClientInfos(.....);
    }
     
    }
    Donc je n'ai pas de question sur JSON ni sur comment faire les requêtes AJAX. Je veux juste savoir qu'es ce qui est le plus propre à faire entre les deux exemples.

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Moi je pense deux choses. Ouaip, ça arrive des fois.

    1. Si tu veux faire de la POO propre, quitte JavaScript. Mets-toi à Python, C++, Java ou que sais-je, mais la philosophie de JavaScript, ce n'est pas de la POO - du moins, pas au sens classique.

    2. Ta méthode setClientInfos a beaucoup trop de paramètres ! Tu devrais plutôt offrir un setter par propriété. Ou alors, utilise une map, ça rend les paramètres facultatifs et permet à l'utilisateur de les passer dans n'importe quel ordre :
    Code : 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
    this.setClientInfos = function( map ){
    		map = map || {};
    		// si rien n'a été passé en paramètre, on a map === undefined,
    		// donc l'opérateur || choisit l'opérande de droite, {}
    		// c'est-à-dire une map vide
     
    		this.vID = map.vID;	// si pas de vID dans la map, on aura undefined
    					// c'est au moment de l'utilisation qu'il faut tester si la propriété est bien définie
    		this.vPolitesse = map.vPolitesse;
    		this.vActif = map.vActif;
    		this.vName = map.vName;
    		this.vFirstName = map.vFirstName;
    		this.vSociete = map.vSociete;
    		this.vType = map.vType;
    		this.vTelPrive = map.vTelPrive;
    		this.vTelPro = map.vTelPro;
    		this.vTelMob = map.vTelMob;
    		this.vFax = map.vFax;
    		this.vMail = map.vMail;
    		this.vIDRue = map.vIDRue;
    		this.vRue = map.vRue;
    		this.vCP = map.vCP;
    		this.vLocalite = map.vLocalite;
    		this.vPays = map.vPays;
    		this.vCommentaire = map.vCommentaire;
    		this.vContacts = map.vContacts;
    	}
    Sinon pour ta dernière question, je penche pour la première solution. C'est une sorte de système de commit, tu modifies en volatile puis quand tu es prêt, tu rends les modifications permanentes. Ça me paraît plus robuste… Mais je n'ai pas d'arguments pour appuyer mon opinion. Juste une chose à prendre en compte : quand on nomme une méthode « setQuelqueChose », on s'attend à ce qu'elle ait un effet immédiat quand on l'appelle. Or avec Ajax, même synchrone (horreur !), il y aura une latence. Donc une méthode qui s'appelle « RequeteQuelqueChose » ça raconte un peu mieux ce qu'elle fait. Je trouve.


    Oh, encore une chose. Je ne sais pas si tu vas tomber dans le piège, mais je te le dis tout de suite : JavaScript ne doit pas assurer la sécurité de l'application. Si tu fais des vérifications côté client, il faut les faire aussi côté serveur.

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    ce n'est pas un pb de POO mais de design pattern

    la question est où placer la persistence d'un type d'objet
    c'est une question de design pattern et cela reste vrais même avec d'autre type de programmation que la POO

    un client reste un client et n'a pas à définir la façon dont le systeme enregistre ou pas les données.

    pour ça il faut mettre en place une couche DAO
    est c'est elle et elle seule qui s'occupe de persister/lire les données.

    si tu cherche de la littérature sur les design pattern tu en trouveras plusieurs répondant à plusieurs type de besoin en terme de percistance.

    mais ce n'est jamais un setter ou un getter qui persiste un objet.

    quant à ta fonction setClientInfo qui a effectivement beaucoup trop de paramètres elle n'a pour moi pas de raison d'exister.
    c'est au constructeur d'initialiser tout les membres
    Un getter ou un setter ne porte toujours que sur un seul membre.

    quant à la remarque 1 de waiting sur la POO je ne suis absolument pas d'accord
    On peu très bien faire de la POO avec n'importe quel language (même en assembleur)
    et faire du pur procedural en C++ ou consors


    pour info voici la page qui décrit le pattern persistence de sencha
    http://docs.sencha.com/ext-js/4-1/#!/guide/data
    A+JYT

  8. #8
    Membre régulier Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 116
    Points
    116
    Par défaut
    @Watilin : Merci beaucoup pour ta réponse. Pour ce qui est du langage, en faite je me suis mis à l'Objectiv-C pour apprendre la POO. Mais comme je connais "mieux" Javascript, je préfère comprendre en premier lieu la façon dont il faut travailler avec des Objets avant de me lancer complètement dans l'ObjC.

    Pour le map c'est une super solution C'est vrai que ce n'est pas propre du tout d'envoyer 200 paramètres et je n'avais pas pensé à faire ça de cet façon .

    Au niveau de la sécurité, je sais très bien qu'il ne faut pas s'attendre à une grande sécurité avec un code exécute sur les postes clients donc quand je programme je sécurise au niveau de mon serveur (PHP ou autre).


    @sekaijin : Merci beaucoup pour ta réponse, je vais chercher de la documentation sur le design pattern (dont celle que tu m'as fournie) pour mieux comprendre les principes/concepts de bases.

    Pour ce qui est de ta phrase :
    Un getter ou un setter ne porte toujours que sur un seul membre.
    Tu voudrais dire par la que si j'ai 50 attributs dans une class, il faudrait que j'ai en tout 50 setter et 50 getter ?

    Merci encore pour vos réponses, je m'excuse mais c'est un peu le début d'une nouvelle logique pour moi, alors c'est pas simple de s'y mettre seul

  9. #9
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par tidus_6_9_2 Voir le message
    Tu voudrais dire par la que si j'ai 50 attributs dans une class, il faudrait que j'ai en tout 50 setter et 50 getter ?
    ...
    exactement

    Mais les getters et les setters ne sont pas une obligation en POO
    cela dépend en fait des capacité du langage que tu utilise

    par exemple en Eifel tu peux faire quelque chose comme
    Code eifel : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Class Client {
      private String nom;
      setNom (String nom) {
        if (nom == null) throw Exception("le nom ne peux pas être null");
        this.nom = nom;
      }
    }
     
    Client aClient = new Client();
    aClient.nom = "Dupont"; //appel du setter setNom
    en javascript tous les membres sont public donc les setters et getters n'apporte pas grand chose. (il ne te garantissement pas que le membre ne sera pas accédé directement.)

    PHP permet lui de définir un setter et/ou un getter générique
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Class Client {
      private String nom;
      __set (String key, Object Value) {
        if ....;
      }
    }
    lorsque tu appellera setNom(value) si la méthode n'est pas définie il utilisera __set('Nom', value)
    ObjectiveC supporte (et apple en fait grand usage) le design pattern KVC: Key Value Codding
    Comme dans l'exemple de PHP on voit que javascript fonction lui aussi sur la notion de couple clef valeur.
    en ObjectiveC tu as en plus des facilités
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @interface MyClass
    @property NSString *stringProperty;
    @property NSInteger integerProperty;
    @property MyClass *linkedInstance;
    @end
    le simple fait d'utiliser @property pour définir un membre de la classe tu as les getters et setters
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MyClass *myInstance = [[MyClass alloc] init];
    NSString *string = [myInstance valueForKey:@"stringProperty"];//ici un getter
    [myInstance setValue:@2 forKey:@"integerProperty"];//ici un setter
     
    MyClass *anotherInstance = [[MyClass alloc] init];
    myInstance.linkedInstance = anotherInstance;//ici un setter
    myInstance.linkedInstance.integerProperty = 2;//ici un setter
    [myInstance setValue:@2 forKeyPath:@"linkedInstance.integerProperty"];// le même setter que la ligne au dessus

    enfin quelque soit le langage un getter et un setter ne porte que sur un seul attribut d'un objet
    leur nom n'est qu'une convention . mais suivant les langage si on la respecte les éditeurs ou certains utilitaire peuvent faciliter la vie.
    généralement il sont définis Ainsi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MyClass attribute;
    MyClass getAttribute();
    void setAttribute(MyClass object);
    où attribute est le nom du membre et MyClass sont type.
    Une particularité pour les bouléens.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Boolean attribute;
    Boolean isAttribute();
    //or
    Boolean hasAttribute();
    void setAttribute(Boolean object);
    Mais ce ne sont que des conventions.
    Ceci est aussi un getter sur attribute.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyClass attribute;
    MyClass maMethodeAMoiQuiMePermetDAccederAuMembreAttributeCOmmeJeVeux();

    Une méthode qui accède à plusieurs membre n'est pas un setter.

    enfin une petite remarque sur l'utilisation d'un argument "entre accolade" comme le suggère waiting
    lorsque tu choisit de passer par un objet "config" pour passer tes paramètres à ta méthode tu laisse libre l'utilisateur de ta méthode de te passer n'importe quoi. ça facilite bien des chose mais ce n'est pas toujours très simple.

    il faut savoir aussi que tu crée de fait un objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFoction ({a:12, b: 45});
    dans ce code tu créé un objet que tu passe en paramètre à ta fonction.
    en réalité ce que tu fait c'est ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var obj = new Object();
    obj.a=12;
    obj.b=45;
    maFoction (obj);
    J'utilise beaucoup cette façon de faire. mais par rapport à waiting je définit des valeurs par défaut quand le l'utilise
    Je merge ma map de valeur par defaut avec celle passé en paramètres
    j'ai ainsi tout mes paramètres de définis
    A+JYT

  10. #10
    Membre régulier Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 116
    Points
    116
    Par défaut

    Merci pour tous ces détails ! Je restes impressionné de tout ce qui me reste à apprendre (et de tout ce que tu connais aussi du coup )

    Pour le javascript je sais pertinemment qu'il ne s'agit pas d'un langage full POO, donc il n'y a pas de notion de class public ou private ou autre. Mais je voulais surtout comprendre le fonctionnement des setter et getter au préalable. Car, il me semble, qu'il s'agit d'une notion importante tout de même du fait qu'on touche les attributs d'une class.

    Pour ce qui est des conventions, merci beaucoup j'aime bien suivre les normes, ça peut n'apporter qu'un plus à mon développement.

    Merci beaucoup pour tes précisions par rapport à :

    dans ce code tu créé un objet que tu passe en paramètre à ta fonction.
    en réalité ce que tu fait c'est ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var obj = new Object();
    obj.a=12;
    obj.b=45;
    maFoction (obj);
    J'utilise beaucoup cette façon de faire. mais par rapport à waiting je définit des valeurs par défaut quand le l'utilise
    Je merge ma map de valeur par defaut avec celle passé en paramètres
    j'ai ainsi tout mes paramètres de définis
    Je trouves très instructif Je ne pensais pas que simplement le fait de passer un objet dans une fonction revenait au même cas que de définir chaque ligne. C'est plus simple à lire mais pas forcément plus efficace


    En tout cas merci beaucoup pour votre aide qui m'a été très utile et instructive

    Je vais clore la discussion car j'ai la réponse à ma question donc merci encore

  11. #11
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par tidus_6_9_2 Voir le message
    ...
    Pour le javascript je sais pertinemment qu'il ne s'agit pas d'un langage full POO, donc il n'y a pas de notion de class public ou private ou autre. Mais je voulais surtout comprendre le fonctionnement des setter et getter au préalable. Car, il me semble, qu'il s'agit d'une notion importante tout de même du fait qu'on touche les attributs d'une class.
    Javascript est bien un langage FULL POO
    C'est simplement que beaucoup (trop) de personnes pensent que la POO C'est obligatoirement des classes des restriction d'accès etc.

    la POO est bien plus vaste que la notion de classe.

    quant aux notions de getters, setters, restrictions d'accès et autre ce n'est pas dans la POO. Ce n'est pas parce que la majorité des langages à base de classes y associe ces notions que c'est de la POO.

    La notion de restriction d'accès existe en procédural tout comme la notions de setters et getters (ADA avant la version objet possédait ces notions par exemple)
    ce n'est donc pas propre à la POO et certains langage à objet ne les implémente pas.

    en résumé
    un getter est une méthode qui retourne la valeur d'un attribut. rien de plus
    cela n'implique pas qu'il existe un membre dans la classe qui porte la valeur de cet attribut (ce peut être une valeur calculée)

    un setter est une méthode qui fixe la valeur d'un attribut. là encore il n'est pas nécessaire qu'un membre porte cette valeur.

    les restrictions qui là encore n'est pas propre à la POO est un élément important dans les langage à base de classes cars ces dernier utilise la notion de classe pour définir les restriction d'accès.
    ça ce résume ainsi

    Private : la donnée ou la méthode n'est accessible que par les méthodes de la classe qui la définie.
    Protected: la donnée ou la méthode n'est accessible que par les méthodes des classes qui dérivent (elle-même comprise) de la classe qui la définie.
    Public: la donnée ou la méthode est accessible par toutes les méthodes de toutes les classes.

    Cette façon de faire est donc très liée à la notion de classes. Mais java par exemple utilise aussi une autre forme de restriction
    (la même qu'en ADA vieille version) qui est une restriction au niveau du package
    en java si tu ne définit pas la restriction d'accès sur un membre d'une classe toute les classe du même package y ont accès comme s'il était public. mais les classes hors du package n'y on pas accès.
    on voit clairement là que la notion de restriction n'est pas nécessairement une affaire de POO

    souvent les langages interprétés permettent de gérer la notion de restriction au travers de la portée on retrouve cette approche dans ce qu'on appelle les "closures" et Javascript le gère ainsi. une définition n'est accessible que dans la closure qui l'a définie.
    c'est ainsi qu'on peut aussi gérer des membres privés en javascript.

    Pour conclure
    Javascript est un vrais langage à objet il permet donc une vrai POO
    A+JYT

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debutant] comment bien faire une variable ?
    Par nighthammer dans le forum iReport
    Réponses: 2
    Dernier message: 27/05/2008, 11h56
  2. comment bien faire organiser ses header
    Par DEVfan dans le forum C++
    Réponses: 43
    Dernier message: 29/04/2008, 11h58
  3. Class de mesh, comment bien faire ?
    Par Tosh dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 24/04/2007, 12h24
  4. [MS/SQL 2K][Securité][Restauration]Comment bien faire ?
    Par jbat dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/04/2007, 11h18
  5. POO : comment bien sous-classer ?
    Par Invité1 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/04/2005, 12h20

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