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

Algorithmes et structures de données Discussion :

Conception OO avec des dates


Sujet :

Algorithmes et structures de données

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut Conception OO avec des dates
    Bonjour à tous !

    J'ai un petit problème de conception que je vais essayer de vous présenter le plus simplement possible :

    J'ai dans mon programme une classe Agenda qui contient plusieurs objets de type Tache. La classe Tache a un attribut de type Date qui est la date à laquelle la tâche est prévue.

    Or dans ma classe Agenda j'ai une méthode getFreeDate(echeance, duree) qui renvoit la première date qui a au moins autant de temps libre que la durée passée en paramètre, à partir de la date du jour jusqu'à l'échéance passée en paramètre.

    Ainsi cette fonction, sans rentrer dans les détails, exécute l'algo suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pour chaque date d jusqu'à échéance
    <div style="margin-left:40px">pour chaque tache t de l'agenda
    <div style="margin-left:40px">si t.date = d alors
    <div style="margin-left:40px">// traitement...</div></div></div><div style="margin-left:40px">fin pour</div>fin pour
    C'est à dire que n'ayant aucun lien entre une date et les tâches, je suis obligé de parcourir toutes les tâches pour chacune des dates jusqu'à échéance... Pas très optimisé !

    J'ai dans mon diagramme de classes un lien de navigation de Tache vers Date et il me faudrait le contraire pour cet algo mais je vois mal une classe Date qui aurait un attribut de type liste de Tache, et mon Agenda composé d'objets Date. Surtout que ça m'obligerait à repenser tout mon programme !

    Y aurait-il un moyen de conserver une architecture proche de celle que j'ai actuellement en optimisant la recherche de date ?

    Merci d'avoir lu jusque là, j'espère que quelqu'un aura la solution à mon problème, surtout qu'il me semble que c'est un problème connu mais je n'arrive pas à me rappeler comment le résoudre !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    ca doit etre la fatigue mais j'ai un peu de mal a comprendre à quoi sert getFreeDate en fonction de ses paramètres...

    je vais donc voir si j'ai bien compris.

    tu souhaite récupérer une première date libre, où tu peux placer une nouvelle tache ayant pour durée la durée que tu as déterminé et la date d'échéance que tu as indiquée ?

    Si c'est cela... ce n'est pas à ta classe Tâche de faire cette recherche mais à sa collection... donc Agenda. D'ailleurs ca tombe bien ce traitement est dans Agenda.

    Si c'est cela il n'y pas de vraie solution élégante qui soit à la fois peu consomatrice en mémoire et en temps de calcul.
    Si tu veux optimiser le temps de recherche... il faut envisager de faire des sacrifices... et c'est donc la mémoire qui trinque.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    Ce n'est pas la fatigue, c'est moi qui m'explique mal... Malgré tout tu as bien compris...

    Acutellement j'ai ça :

    Agenda ----> Tache

    Un agenda contient plusieurs tâches.

    La classe Agenda contient une méthode getFreeDate qui doit chercher une date à laquelle on peut rajouter une tâche d'une certaine durée avant une certaine échéance.

    Pour cela, je dois forcément parcourir chaque date afin de tester si le temps libre est suffisant. Ce temps libre je le connais en récupérant pour chaque date les taches qui sont prévues à cette date.
    Donc pour chaque date jusqu'à échéance, je parcours TOUTES les taches de mon agenda en testant si elle appartient ou non à cette date. C'est le seul moyen avec le diagramme de classes que j'utilise actuellement.

    Donc si j'ai par exemple 100 taches dans mon agenda et que je dois chercher une date libre avant une échéance dans 100 jours, ça fait un parcours de 10000 taches...

    J'aurais donc voulu savoir si je pouvais agencer mes classes différemment, ou à défaut si un algo me permettait d'éviter ces boucles !

    J'ai pensé dans un premier temps à ça :

    Agenda ----> Date ----> Tache

    Un agenda contient des dates qui elles-mêmes contiennent des tâches...

    Ainsi, pour ma fonction getFreeDate j'aurais juste à parcourir chaque date et pour chaque date j'aurais déjà les taches qui sont prévues, donc pas de parcours supplémentaires...

    Mais ça ne me plait pas du tout de manipuler une telle architecture !

    Donc si quelqu'un a une autre idée ?

    Merci d'avance !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 75
    Par défaut
    Salut,

    Ne peux-tu pas ajouter un tableau (ou list ou ...) de disponibilité avec comme info (date, temps libre) ? (pas besoin de dire qu'a telle date, il y a la tache x ou y).
    j'imagine qu'une tache peut etre mis sur plusieurs jours : a chaque ajout de tache tu mets a jour les dates concernées.

    Tu n'aurais plus alors qu'a faire un parcours sur ce tableau/list (ordonné par date).
    Ce qui donne
    Agenda
    --> Liste_Dates
    --> Tache

    Nil

Discussions similaires

  1. [VBA-E] Problème avec des dates !
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/03/2006, 13h12
  2. Chart mettre un axe avec des dates
    Par rvzip64 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 07/10/2005, 11h36
  3. [VB.NET] Requete avec des dates dans un DataSet
    Par leSeb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/10/2005, 14h30
  4. Requetes avec des dates
    Par PrinceMaster77 dans le forum SQL
    Réponses: 1
    Dernier message: 22/11/2004, 17h46
  5. [Requête] Difficile (impossible ?) avec des dates
    Par starch dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/04/2004, 11h26

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