OVH Cloud OVH Cloud

Usage des classes

14 réponses
Avatar
Patrick Fredin
Bonjour,

J'aimerais créer une classe avec la collection qui ;uicorrespond dont
certaines propriétés font référence à d'autres classes que j'ai aussi créées.
Est-ce possible ?

Concrètement, la classe est une rue et la collection est un ensemble de
rues. Une rue a la propriété "adresses" qui correspond à l'ensemble des
adresses de la rue (1, 2, 3, 4, ...). Je voudrais mettre comme propriété une
référence à la collection "Adresses".

Si ce n'est pas clair, je peux donner plus d'information.

Merci pour votre aide.

--
Patrick

10 réponses

1 2
Avatar
FL
Salut,

Voici la méthode :

Il faut créer une classe nommée "Rues" avec les déclarations suivantes :

Private MaCollection As New Collection

Public Sub Add(ByVal NouvelleRue As Rue)
MaCollection.Add NouvelleRue, MaCollection.Count
End Function

Public Sub Delete(ByVal Index As Long)
MaCollection.Remove (Index)
End Sub

Public Function Count() As Long
Count = MaCollection.Count
End Function

Public Function Item(ByVal Index As Long) As Rue
Set Item = MaCollection.Item(Index)
End Function

Public Function NewEnum() As IUnknown
Set NewEnum = MaCollection.[_NewEnum]
End Function


Voila, tu as ainsi créé une classe nommée Rues qui servira de colllection
d'objets "Rue".
Tu peux ensuite l'utiliser comme une collection :

' Ajout
Dim MesRues as Rues
Dim UneRue as Rue

Set UneRue = New Rue
UneRue.Adresse = "..."
...
MesRues.Add UneRue
Set UneRue = Nothing

' Lecture
For i = 0 to MesRues.Count
MsgBox MesRues.Item(i).Adresse
Next


Voilà un début non testé !
Espérant que ça aidera





"Patrick Fredin" a écrit dans le message
de news:
Bonjour,

J'aimerais créer une classe avec la collection qui ;uicorrespond dont
certaines propriétés font référence à d'autres classes que j'ai aussi


créées.
Est-ce possible ?

Concrètement, la classe est une rue et la collection est un ensemble de
rues. Une rue a la propriété "adresses" qui correspond à l'ensemble des
adresses de la rue (1, 2, 3, 4, ...). Je voudrais mettre comme propriété


une
référence à la collection "Adresses".

Si ce n'est pas clair, je peux donner plus d'information.

Merci pour votre aide.

--
Patrick


Avatar
Patrick Fredin
Merci pour ta réponse. Il faut que j'y réfléchisse sérieusement. En fait, le
truc c'est que chaque numéro d'une rue pourra être une maison (donc avec une
seule porte) ou un immeuble (donc avec plusieurs portes).

Ainsi une ville aura plusieurs rues, une rue aura plusieurs numéros (ou
adresses) et chaque numéro aura 1 ou plusieurs portes.

D'où ma question. Je vais tâcher d'adapter ton code à mon cas.

Encore merci d'avoir pris de ton temps pour m'expliquer tout cela.

--
Patrick


"<pas-despam> @Bwanadoo.fr>" <" wrote:

Patrick Fredin a écrit :

>Bonjour,
>
>J'aimerais créer une classe avec la collection qui ;uicorrespond dont
>certaines propriétés font référence à d'autres classes que j'ai aussi créées.
>Est-ce possible ?
>
>Concrètement, la classe est une rue et la collection est un ensemble de
>rues. Une rue a la propriété "adresses" qui correspond à l'ensemble des
>adresses de la rue (1, 2, 3, 4, ...). Je voudrais mettre comme propriété une
>référence à la collection "Adresses".
>
>Si ce n'est pas clair, je peux donner plus d'information.
>
>Merci pour votre aide.
>
>
>
Bonjour

*"Si ce n'est pas clair, je peux donner plus d'information."*

Ce qui se conçoit bien s'ennonce clairement ... :-)

Ton problème est un problème de modélisation et je crois que tu ne vois pas trop encore comment ça marche.

Un très bon lien pour ce genre de choses:
http://linuxalpha1.eicn.ch/OReilly_books/others_books/Modelisation_objet_avec_UML.pdf

Ceci dit:


*Concrètement, la classe est une rue et la collection est un ensemble de
rues. Une rue a la propriété "adresses" qui correspond à l'ensemble des
adresses de la rue (1, 2, 3, 4, ...). Je voudrais mettre comme propriété une
référence à la collection "Adresses".*

Il y a un pb de modèle:
En fait l'objet (ou classe) Rue possède une collection d'objet "Numero", que l'on nommera Numero*s.
*Et l'adresse est une propriété d'un autre objet, une maison par exemple

On peut ecrire ça comme suit: (en l'état de ce que tu as expliqué)*

*'Classe Numero

Private numero as string

Private sub Class_Initialize()
End Sub

Private Sub Class_Terminate
end sub

'*************************************

'
'collection Numeros

Private m_col as Collection

Public Function Add( Num as Numero) as Numero
end function

etc ... (item, remove)


' Classe Rue

Private NomRue as string
Private mNumeros as Numeros

Private sub Class_Initialize()
End Sub

Private Sub Class_Terminate
end sub

'classe Rues
Private m_col as Collection

Public Function Add( laRue as Rue) as Rue
end function

' Classe Maison

Private mAdresseKey as Long
Priavte mRueKey as long

Public Property Get Adresse() As string

Adresse = Rues(mRuekey).Numeros(mAdresseKey) & Rues(mRueKey).NomRue

End Property


A+

Christophe







Avatar
Patrick Fredin
Merci pour ta réponse. Je vais y réfléchir.

Merci encore d'avoir pris le temps de me répondre.

--
Patrick


"FL" wrote:

Salut,

Voici la méthode :

Il faut créer une classe nommée "Rues" avec les déclarations suivantes :

Private MaCollection As New Collection

Public Sub Add(ByVal NouvelleRue As Rue)
MaCollection.Add NouvelleRue, MaCollection.Count
End Function

Public Sub Delete(ByVal Index As Long)
MaCollection.Remove (Index)
End Sub

Public Function Count() As Long
Count = MaCollection.Count
End Function

Public Function Item(ByVal Index As Long) As Rue
Set Item = MaCollection.Item(Index)
End Function

Public Function NewEnum() As IUnknown
Set NewEnum = MaCollection.[_NewEnum]
End Function


Voila, tu as ainsi créé une classe nommée Rues qui servira de colllection
d'objets "Rue".
Tu peux ensuite l'utiliser comme une collection :

' Ajout
Dim MesRues as Rues
Dim UneRue as Rue

Set UneRue = New Rue
UneRue.Adresse = "..."
....
MesRues.Add UneRue
Set UneRue = Nothing

' Lecture
For i = 0 to MesRues.Count
MsgBox MesRues.Item(i).Adresse
Next


Voilà un début non testé !
Espérant que ça aidera





"Patrick Fredin" a écrit dans le message
de news:
> Bonjour,
>
> J'aimerais créer une classe avec la collection qui ;uicorrespond dont
> certaines propriétés font référence à d'autres classes que j'ai aussi
créées.
> Est-ce possible ?
>
> Concrètement, la classe est une rue et la collection est un ensemble de
> rues. Une rue a la propriété "adresses" qui correspond à l'ensemble des
> adresses de la rue (1, 2, 3, 4, ...). Je voudrais mettre comme propriété
une
> référence à la collection "Adresses".
>
> Si ce n'est pas clair, je peux donner plus d'information.
>
> Merci pour votre aide.
>
> --
> Patrick





Avatar
Patrick Fredin a écrit :

Merci pour ta réponse. Il faut que j'y réfléchisse sérieusement. En fait, le
truc c'est que chaque numéro d'une rue pourra être une maison (donc avec une
seule porte) ou un immeuble (donc avec plusieurs portes).

Ainsi une ville aura plusieurs rues, une rue aura plusieurs numéros (ou
adresses) et chaque numéro aura 1 ou plusieurs portes.

D'où ma question. Je vais tâcher d'adapter ton code à mon cas.

Encore merci d'avoir pris de ton temps pour m'expliquer tout cela.





Tu serais pas en train de faire un S.I.G. ?

Pour ton cas raisonne en terme de local. En fait il faut que tu trouve
la plus petite unité non divisible qui te permettra de déterminer ce
qu'est l'objet de base.
Pour le cadastre Français(et les SIG qui vont avec) on utilise la
notion fiscale de partie d'évaluation (PEV) .

Prend la peine de lire le chapitre 1 et 2 du lien sur UML ça te donnera
de bonne bases pour l'analyse objet.

Christophe
Avatar
Patrick Fredin
C'est quoi un S.I.G. ?

--
Patrick


"<pas-despam> @Bwanadoo.fr>" <" wrote:

Patrick Fredin a écrit :

>Merci pour ta réponse. Il faut que j'y réfléchisse sérieusement. En fait, le
>truc c'est que chaque numéro d'une rue pourra être une maison (donc avec une
>seule porte) ou un immeuble (donc avec plusieurs portes).
>
>Ainsi une ville aura plusieurs rues, une rue aura plusieurs numéros (ou
>adresses) et chaque numéro aura 1 ou plusieurs portes.
>
>D'où ma question. Je vais tâcher d'adapter ton code à mon cas.
>
>Encore merci d'avoir pris de ton temps pour m'expliquer tout cela.
>
>
>
Tu serais pas en train de faire un S.I.G. ?

Pour ton cas raisonne en terme de local. En fait il faut que tu trouve
la plus petite unité non divisible qui te permettra de déterminer ce
qu'est l'objet de base.
Pour le cadastre Français(et les SIG qui vont avec) on utilise la
notion fiscale de partie d'évaluation (PEV) .

Prend la peine de lire le chapitre 1 et 2 du lien sur UML ça te donnera
de bonne bases pour l'analyse objet.

Christophe




Avatar
Patrick Fredin a écrit :

C'est quoi un S.I.G. ?





Système d'Information Géoraphique

En gros un moteur graphique et une base de donnée, là non seulement tu
as les adresses de tes bâtiments mais en plus la carte pour le situer.

Christophe
Avatar
Patrick Fredin
Est-ce qu'il ne vaudrait pas mieux que je prenne le problème dans l'autre
sens en disant que chaque porte appartient à une adresse d'une rue et à une
rue ?

Merci.

--
Patrick


"<pas-despam> @Bwanadoo.fr>" <" wrote:

Patrick Fredin a écrit :

>Merci pour ta réponse. Il faut que j'y réfléchisse sérieusement. En fait, le
>truc c'est que chaque numéro d'une rue pourra être une maison (donc avec une
>seule porte) ou un immeuble (donc avec plusieurs portes).
>
>Ainsi une ville aura plusieurs rues, une rue aura plusieurs numéros (ou
>adresses) et chaque numéro aura 1 ou plusieurs portes.
>
>D'où ma question. Je vais tâcher d'adapter ton code à mon cas.
>
>Encore merci d'avoir pris de ton temps pour m'expliquer tout cela.
>
>
>
Tu serais pas en train de faire un S.I.G. ?

Pour ton cas raisonne en terme de local. En fait il faut que tu trouve
la plus petite unité non divisible qui te permettra de déterminer ce
qu'est l'objet de base.
Pour le cadastre Français(et les SIG qui vont avec) on utilise la
notion fiscale de partie d'évaluation (PEV) .

Prend la peine de lire le chapitre 1 et 2 du lien sur UML ça te donnera
de bonne bases pour l'analyse objet.

Christophe




Avatar
Fregoli
Il faut imbriquer plusieurs classes
Je ferai deux modules de classe:
Une classe Adresse
Une classe Rue

la classe Rue possédant une propriété Item qui est une collection:

La classe Rue possède une propriété Name (nom de la rue)
une propriété Count (le nombre d'acresse)
une Propriété Item (qui renvoie l'adresse
N° i)
une méthode AddNum (qui ajoute une adresse
à la rue)
La Classe Adresse possède une propriété Num (le N° dans la rue)

----- Classe Rue --------------

Private LNom as string
Private MaCollection As New Collection

Public Sub AddNum (ByVal Addr As Adresse)
MaCollection.Add Addr
End Function

Public Property Get Count() As Long
Count = MaCollection.Count
End Function

Public Property Get Item(ByVal Index As Long) As Adresse
if Index > MaCollection.count then
Set Item=Nothing
else
Set Item = MaCollection.Item(Index)
end if
End Function

Public Property Let Name(Nom as string)
LNom = Name
End Property

Public Property Get Name() as String
Name = LNom
end Property

-------- Classe Adresse ---------------
Private Numero as string

Public Property Get Num() as string
Num = Numero
end Property

Public Property Let Num(NumAddr as string)
Numero = Num
End Property

-------------------------------------------------

et dans le programme, exemple d'utilisation

Dim MonAdresse as Addresse
Dim MaRue as Rue
Dim MesRues as new collection

Set MonAdresse = New Addresse
Monadresse.Num = "2 Bis"
Set MaRue = New Rue
MaRue.AddNum MonAdresse
Set MonAdresse = New Addresse
MonAdresse.Num = "4"
MaRue.AddNum MonAdresse
Set MonAdresse = New Addresse
MonAdresse.Num = "6"
MesRues.Add MaRue


etc ...

Ensuite, dans la classe Adresse, tu peux ajouter une collection de portes,
d'escalier etc... qui seront eux aussi des classes.

Tu fais autant de module de classe qu'il y a d'entité à gérer.
A toi d'ajouter de nouvelles méthode ou propriétés aux classes définies
Avatar
Fregoli a écrit :

Il faut imbriquer plusieurs classes
Je ferai deux modules de classe:
Une classe Adresse
Une classe Rue






Bonjour à tous,

Je me répète lisez lee chapitre 1 et 2 du lien que j'ai indiqué c'est
vraiment instructif, et pas que pour VB, pour l'approche objet en
général, personnellement ça a changé radicalement ma façon d'approcher
la programmation, (je ne suis pas un pro, mais un audotidacte qui fait
ça "à coté et en plus").
Avatar
<pas-despam> a écrit :

Fregoli a écrit :

Il faut imbriquer plusieurs classes
Je ferai deux modules de classe:
Une classe Adresse
Une classe Rue






Bonjour à tous,

Je me répète lisez lee chapitre 1 et 2 du lien que j'ai indiqué c'est
vraiment instructif, et pas que pour VB, pour l'approche objet en
général, personnellement ça a changé radicalement ma façon d'approcher
la programmation, (je ne suis pas un pro, mais un audotidacte qui fait
ça "à coté et en plus").




:-! Partit trop vite,

Désolé je reprend:

En fait, dans les SIGs pour ceux que je connais et pour celui que je
conçoit, l'adresse est un MetaObjet (ou classe) et il a une relation 1
à 1 (en général) avec d'autres objets (multiples: terrain , bâtiment ,
appartement, personne: et oui la personne qui habite un appartement peut
avoir une adresse différente de celui-ci).

On peut la définir comme suit

'Classe MetaAdresse
mRivoliCode ' identifiant unique normalisé des fichier d'adresse
mCodePostal as string
mNumRue
mDeNom '(nom de rue lieu dit etc...)

Qui peut se dériver (ou hériter enfin implementer pour VB)

En
Classe AdressePerso:
ou on intégre le numéro de téléphone
Classe AdresseUtil
où l'utilsateur de la classe introduit ses propres champs (N° client par
exemple)

Après l'autre problématique est de définir les Objets qui auront une
adresse: Les bâtiments ou porte ou enfin le truc que veut faire Patrick
et la nature du lien (1 à 1 ou 1 à n, une personne à une ou plusieur
adresse ? un bâtiment composer de plusieur locaux a une adresse propre
(1-1) et chaque local a une AdresseLocal (1-1), celle-ci étant dérivée
de adresse, ajout de la propriété N°Porte par exemple ....).

Ensuite les relations qu'ont ces objets entre eux c'est une autre
affaire, indépendante des adresses.

Une ville, qui a des maisons
Une ville qui a des rues (une rue c'est pas une adresse)

Ils y a aussi les relations de dépendances: une rue exsite elle sans
maisons? et sans ville ?
Une maison sans rue ?

Etc ......

Bref bonne lecture de Pierre et Nathalie.
( A noter que la version UML 2.0 est dispo en librairie)

Christophe



.
1 2