Explications sur certains points de Ruby

Bonjour :slight_smile: ,

Voilà je me suis mis récemment à Ruby et j’avance à grand pas car je
suis déjà programmeur depuis 5 ans en langage C. Cependant, la
programmtion orienté objet reste un domaine assez large pour moi étant
donnée que je ne pratique que la programmation impérative.

Globalement j’assimile assez vite mais ici, 2 points me fait tourner en
rond et j’aimerai avoir quelques explications les voici :

  • J’ai vu qu’il y avait (pour les classes) les variables d’instance et
    les variables de classes. En revanche, pour moi, d’aprés ce que j’ai lu,
    la POO est fondé sur 3 principes dont l’une d’elle est l’encapsulation
    et donc, aucune donnée membre ne doit être accessible sauf par l’aide
    d’ascesseur (des méthodes). Ainsi j’en conclu que la variable d’instance
    et de classe sont 2 variables dont leurs porté est uniquement a travers
    la classe entière (utilisation de ces variables dans les méthodes). Donc
    c’est flou pour moi ces 2 types de variables et j’aimerai bien que
    quelqu’un puisse m’éclaircir un peu ce problème.

  • Autre point, en regardant la documentation sur les classes, j’ai vu
    qu’il y avait les méthodes de classes et les méthodes d’instance. Tout
    comme pour les variables, j’ai du mal a différencier ces 2 derniers.

Merci à vous.

GarulfoUnix

Le 13/07/07, philippe lachaise[email protected] a écrit :

(Bon, ça pourrait être exposé plus clairement mais il est tard :wink:

Heu O_o
On va mettre ça sur le dos de la fatigue, j’avoue ne pas avoir compris
le but, le sens, de ce morceau d’explication. Ou alors j’ai raté un
épisode (ce qui est probable).


Yannick “Pouype” Francois
http://www.typouype.org
http://www.rubyfrance.org

Bonjour,

On ne peut pas comparer avec le C puis qu’il n’est pas objet, par comtre
une
rapide comparaison avec C++ peut t’éclairer sur les variables/méthodes
de
classe et d’instance.

En C++ les variables et méthodes de classe sont délarées avec le mot clé
“static” et sont partagées par toutes les instances de la classe et de
ses
descendantes.

La grosse distinction c’est que pour l’instance on est rattaché au
“this”
(“self” en Ruby) et qu’on ne le connait pas au niveau de la classe.

(Bon, ça pourrait être exposé plus clairement mais il est tard :wink:

Le 13/07/07, Yannick F.[email protected] a écrit :

Le 13/07/07, philippe lachaise[email protected] a écrit :

(Bon, ça pourrait être exposé plus clairement mais il est tard :wink:

Heu O_o
On va mettre ça sur le dos de la fatigue, j’avoue ne pas avoir compris
le but, le sens, de ce morceau d’explication. Ou alors j’ai raté un
épisode (ce qui est probable).

Mes plates excuses, effectivement j’avais le 1er épisode (le mail de
Garulfo) dans mes spam :-/ Je comprend un poil mieux
là.

Sinon, l’encapsulation dont tu parles qui vise a ne pas toucher
directement les attributs d’un objet (d’une classe) prend son
importance en java (je connais java, pas c++ mais je pense que c’est
presque pareil ,-)). En java on peut dire qu’un attribut est publique,
et c’est presque mal :-p.
En Ruby les attributs, même si tu as l’impression de les atteindre
directement, ne le sont pas. tu peut par exemple surcharger l’accès a
un de tes attributs:

class Klass
attr_accessor :test
end

Là tu peux acceder directement en “lecture ecriture” a l’attribut.
Mais en fait, ça reviens a écrire:

class Klass
attr :test
def test=(something)
@test=something
end
end test
@test
end
end

Donc ça ne se voit pas, mais y’a des “getter et setter” sur tout les
attributs que l’on utilise. On peut même les surcharger ;-))

Pour ce qui est des atrtibuts de class, oui c’est des attribut dont la
valeur sera la même pour toute les instance.

Pour les methode de class c’est l’équivalent java du static. Une sorte
de singleton de méthode.


Yannick “pouype” Francois
http://www.typouype.org
http://www.rubyfrance.org

Je vous remercis beaucoup pour ces bonnes explications :slight_smile: .

Par contre j’ai posté dans ce forum “Rails France” car je cherchais
justement un forum pour poser mes 2 questions mais je ne sais pas si
c’est correct. En d’autre terme, je ne sais pas si ce forum est réservé
uniquement pour RoR ou pour l’ensemble de Ruby.

Encore merci.

GarulfoUnix.

On 7/13/07, Garulfo G. [email protected] wrote:

Bonjour :slight_smile: ,

Voilà je me suis mis récemment à Ruby et j’avance à grand pas car je
suis déjà programmeur depuis 5 ans en langage C. Cependant, la
programmtion orienté objet reste un domaine assez large pour moi étant
donnée que je ne pratique que la programmation impérative.

Un domaine plutôt flou, j’imagine.
Tu sais déja, je pense, qu’il existe dans le monde de la programmation
objet des classes, qui sont comme des structures C auxquelles le
développeur peut ajouter des fonctions qui travaillent dans le
contexte de cette structure (en C, on dirait qu’elles recoivent en
premier paramètre un pointeur vers une instance de la structure).

  • J’ai vu qu’il y avait (pour les classes) les variables d’instance et
    les variables de classes.

Pour faire très simple, une variable d’instance est associée à une
instance définie de ta structure, alors qu’une variable de classe est
partagée par toutes les instances.

En revanche, pour moi, d’aprés ce que j’ai lu,
la POO est fondé sur 3 principes dont l’une d’elle est l’encapsulation
et donc, aucune donnée membre ne doit être accessible sauf par l’aide
d’ascesseur (des méthodes).

Ca, ça se discute pas mal. En réalité, on considère que les variables
membres (qui représententt en quelque sorte l’état interne de ton
objet) sont uilisables dans l’objet sans faire appel aux accesseur (ce
qui peut poser un problème lorsqu’on souhaite surcharger certaines de
ces variables membres, mais je m’égare).
Donc en fait, les accesseurs, c’est utilisé surtout pour accéder aux
variables membres depuis “l’extérieur” de l’objet.

  • Autre point, en regardant la documentation sur les classes, j’ai vu
    qu’il y avait les méthodes de classes et les méthodes d’instance. Tout
    comme pour les variables, j’ai du mal a différencier ces 2 derniers.

Une méthode d’instance est associée directement à une instance,
c’est-à-dire qu’elle a dans son contexte d’exécution un pointeur vers
un objet de la classe, ce qui n’est pas le cas de la méthode de
classe.


Nicolas D.
N’imprimez ce mail que si vous ne savez pas le lire sur l’écran : les
électrons se recyclent bien, le papier, beaucoup moins bien.

On 7/13/07, Garulfo G. [email protected] wrote:

Je vous remercis beaucoup pour ces bonnes explications :slight_smile: .

Par contre j’ai posté dans ce forum “Rails France” car je cherchais
justement un forum pour poser mes 2 questions mais je ne sais pas si
c’est correct. En d’autre terme, je ne sais pas si ce forum est réservé
uniquement pour RoR ou pour l’ensemble de Ruby.

Ce forum/Mailling-List/Google Groupe est effectué principalement dédié
à Ruby On rails. Pour ruby, il y a le site de RubyFr[1] où tu pourras
trouvé un Google Groupe et un forum je crois.

[1] :rubyfr.org


Cyril M.

Sinon je trouve que tout ça est assez clairement expliqué ici :
http://www.ruby-doc.org/docs/ProgrammingRuby/
(au cas où tu n’aurais pas commencé par là )

ceci dit la perspective n’est pas la même suisvant qu’on est ou non
passé
avant par plusieurs languages objet.