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

MATLAB Discussion :

[POO] fonction delete nécessaire?


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut [POO] fonction delete nécessaire?
    Bonjour,

    je programme sous MATLAB en POO. J'ai créé un objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    classdef  objet1
    properties
    sousobj1
    sousobj2
    end
    les "properties" sousobj1 et sousobj2 sont des objets d'une classe héritant de la classe handle. POur ceux-ci, j'ai créé une fonction delete.

    Ma question est:
    Dois-je écrire une fonction delete pour la classe objet1?

    J'ai lu la doc et j'ai l'impression que seuls les objets héritant de la classe "handle" nécessitent une fonction delete. Puis-je donc en déduire que la commande
    appellera d'elle-même les fonctions delete des attributs sousobj1 et sousobj2 de l'objet myobjet1 de classe "objet1"?

    J'ai testé l'écriture d'une fonction delete ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    methods
    ...
    function delete(obj)
    delete(sousobj1)
    delete(sousobj2)
    end
    end
    Or, dans le "base" workspace de MATLAB, quand j'écris ensuite:
    les attributs sousobj1 et sousobj2 sont encore visibles et entiers.

    J'en déduis que je dois simplement écrire:
    ,
    mais je crains qu'ainsi, les attributs héritant de la classe handle traînent quelque part dans la mémoire et l'encombrent au fur et à mesure que je crée et détruis des objets de type "objet1". Ma crainte est elle justifiée?

    Merci d'avance pour votre aide.

    Cordialement,

    Oodbae

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut premier element de reponse
    Bon,
    un premier élément de réponse:

    Quand j'appelle la fonction delete:
    la fonction delete que j'ai écrite est effectivement appelée et retourne même une erreur quand je lui ai demandé de supprimer des éléments d'une classe ne dérivant pas de handle, tels que double

    Donc, même si l'objet objet1 n'est pas de type handle, il appelle quand même la fonction delete si je le lui demande.

    Après correction du code de la fonction delete, avec une boucle if qui vérifie si attributs sont de type handle, la commande
    ne retourne pas d'erreur.

    Mais ma question reste posée, puisque je ne comprends pas pourquoi un objet, ici de ma classe objet1, peut appeler sa fonction delete alors qu'il ne dérive pas de la classe handle.

    Cordialement

  3. #3
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Citation Envoyé par oodbae_adriano
    je ne comprends pas pourquoi un objet, ici de ma classe objet1, peut appeler sa fonction delete alors qu'il ne dérive pas de la classe handle.
    Pourquoi ton objet (objet1) ne pourrait-il pas appeler sa fonction DELETE si elle est définie dans la classe (qu'il hérite ou non de la classe handle)?

    Pour savoir si le DELETE est nécessaire, tu devrais peut-être tester avec des objets (sousobj1/2) de taille conséquente pour voir s'il libère effectivement la mémoire ou non lors de la suppression de ton objet parent.
    Je serais d'avis de laisser la fonction DELETE dans la classe objet1 et de supprimer ainsi les sous-objets, mais c'est dommage de le faire si MATLAB le fait tout seul.

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut suite
    bonjour duf,

    merci pour ta réponse. D'après ce que j'ai lu dans la doc, la fonction delete n'a de sens que pour les objets dérivant de la classe handle, car ceux-ci pointent vers d'autres objets et donc la fonction delete supprime les objets pointés par le handle, de même qu'un pointeur p=**double[4500] ne supprimera tout ce vecteur si on supprime p en C (j'espère que je ne raconte pas de bêtise, )
    par exemple, dans le cas d'une figure:
    si je fais:
    la fenête ne disparaît pas.

    par contre
    ferme la fenêtre

    puis
    efface la variable de type graphic handle h de l'espace de travail (workspace).

    Néanmoins, je relirai encore la doc pour vérifier.

    Tu me suggères d'étudier l'espace de mémoire avant et après. C'est justement ce que j'ai voulu faire et qui m'a mené vers developpez.com aujourd'hui!

    Mon problème est le suivant.
    J'ai créé un objet, de type objet1, comme décrit précédemment à ceci près que je le fais désormais dériver de la classe handle (comme ca, j'ai l'impression d'utiliser la fonction delete comme il faut
    la fonction whos affiche pour cette variable une taille de 60 bytes. Normal, c'est juste un handle. Comment connaître la taille de l'objet vers lequel ce handle pointe? On ne peut pas utiliser la fonction memory à chaque fois et créer un historique de memory pour déduire la taille de tous les objets créés au cours d'une journée de travail, non?

    Pour ce qui est de memory justement, la taille de "memory used by MATLAB" augmente sensiblement de 1 ou 2 Mb, mais j'ai du mal à comprendre si c'est à cause des calculs effectués dans le constructeur de l'objet ou si c'est à cause de l'objet. (valeur autour de 250MB après un redémarrage Matlab) En effet, lors d'essais précédents, j'ai supprimé des objets (dérivant de handle) à l'aide de delete, de sorte que je ne pouvais plus accéder aux sous-objets, et la "memory used by matlab" est restée identique. (valeur autour de 650 MB après quelques heures de travail mais à peu près les mêmes variables affichées dans le workspace).

    Peux tu (ou un autre visiteur) m'aider à répondre à la question soulignée, stp?

    Cordialement,

    oodbae

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

Discussions similaires

  1. [POO] Fonction à nombre de paramètres dynamique
    Par Digimag dans le forum Langage
    Réponses: 13
    Dernier message: 14/02/2008, 22h32
  2. [POO] Fonction Affichage OBjet Javascript!
    Par lekunfry dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 20/07/2007, 06h28
  3. La fonction Delete
    Par shayologo dans le forum SQLite
    Réponses: 1
    Dernier message: 11/07/2007, 11h38
  4. [POO] Fonctions dans une classe abstraite
    Par Seth77 dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2006, 13h21
  5. [POO] fonction toUpperCase : Objet attendu
    Par LineLe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/04/2005, 16h51

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