Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB
MATLAB Forum d'entraide sur MATLAB. Avant de poster -> FAQ MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2012, 12h02   #1
Membre du Club
 
Inscription : janvier 2012
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 59
Points : 41
Points : 41
Par défaut POO sous MATLAB 7

Bonjour,

Suite à cette discussion, j'ai tenté de faire un exemple d'implémentation du "pseudo POO". Une calculatrice qui doit pouvoir faire la somme de deux nombres, afficher le résultat en cours, donner le résultat en paramètre de sortie, et enregistrer ce même résultat dans une variable interne à ma "pseudo-classe". Implémentation :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function [this] = calculatrice
  % Propriétés internes
  r = 0;

  % Méthodes (définition)
  this = struct(...
    'somme'   , @additionner, ...
    'resultat', r);

  % Méthodes (implémentation)
  function [sortie] = additionner(a, b)
    r = a + b;
    sortie = r
  end
end
Tests :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>> ma_calculette = calculatrice

ma_calculette = 

      somme: @calculatrice/additionner
   resultat: 0

>> ma_variable = ma_calculette.somme(1,2)

sortie =

   3

ma_variable = 

   3

>> ma_calculette

      somme: @calculatrice/additionner
   resultat: 0
Ah ben non ! Moi, je veux que "resultat" vaille 3 et non 0 là... pas bon !

Je ne maîtrise pas la programmation matlab à fond... pouvez-vous me dire où est mon erreur svp ?

Cordialement,
tachmou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 14h15   #2
Modérateur
 
Avatar de duf42
 
Homme
Formateur en informatique
Inscription : novembre 2007
Messages : 2 538
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

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

Informations forums :
Inscription : novembre 2007
Messages : 2 538
Points : 3 253
Points : 3 253
Bonjour,

Pour que resultat vaille la valeur de r "en temps réel", il ne faut pas que la structure contienne la variable r mais une fonction qui renvoie sa valeur:
Code :
1
2
3
4
5
6
7
8
9
this = struct(...
    'somme'   , @additionner, ...
    'resultat', @getR);

...
function [val] = getR
val = r;
end
Duf
__________________
Modérateur MATLAB

Au boulot : Windows 7 , MATLAB 7.14 (r2012a)
A la maison : ArchLinux mais pas MATLAB
duf42 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/01/2012, 14h46   #3
Membre du Club
 
Inscription : janvier 2012
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 59
Points : 41
Points : 41
Excellent ! Merci beaucoup !

Code final :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function [this] = calculatrice
  % Propriétés internes
  r = 0;

  % Méthodes (définition)
  this = struct(...
    'somme'   , @additionner, ...
    'resultat', @getR);

  % Méthodes (implémentation)
  function [sortie] = additionner(a, b)
    r = a + b;
    sortie = r;
  end
  function [val] = getR
    val = r;
  end
end
Tests :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>> ma_calculette = calculatrice

ma_calculette = 

      somme: @calculatrice/additionner
   resultat: 0

>> ma_variable = ma_calculette.somme(1,2)

ma_variable = 

   3

>> ma_calculette.resultat()

   3
Problème résolu. Merci encore,

Cordialement,
tachmou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 16h31   #4
Membre du Club
 
Inscription : janvier 2012
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 59
Points : 41
Points : 41
Bonjour,

Après implémentation pour analyser des résultats (concerne directement ma thèse : donc cas d'application concret), je dirais que cet "outil" (la pseudo-POO décrite ci-dessus) présente des avantages et des inconvénients...

Inconvénients :
- un poil plus complexe à mettre en place que si on utilise des fonctions basiques... et encore, ceci n'est valable que si on fait des programmes basiques
- ennuyeux à écrire car assez répétitif par moments

Avantages :
- très simple à l'utilisation tout en restant puissant et efficace
- code clair et facile à maintenir et à améliorer pour celui qui s'occupe de développer telle ou telle "classe"
- une nouvelle personne qui arrive dans le projet, selon son niveau d'implication, n'a besoin de savoir que ce dont il a besoin, à savoir : "help nom_de_la_classe" s'il est "utilisateur" (ce qui renvoie les commentaires du début du fichier) ; les commentaires dans le fichier lui-même s'il est "programmeur" de la classe
- permet de développer des "grosses" applications (chose difficilement imaginable en n'utilisant que de simples fonctions) - rapidement en plus puisque de nombreux outils existent déjà sur matlab.

Après l'avoir montré à mes collègues, la plupart ont l'air "pour".

Conclusion : j'utiliserai cette méthode pour programmer dorénavant.

Cordialement,

ps: désolé pour le "up", mais j'estimai intéressant de conclure pour les futurs lecteurs du post.
tachmou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 17h12   #5
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 909
Points : 15 909
Citation:
Envoyé par tachmou Voir le message
- permet de développer des "grosses" applications (chose difficilement imaginable en n'utilisant que de simples fonctions)
Mouais... l'informatique n'a pas attendu le paradigme de la POO pour faire de "grosses" applications (et continue d'en produire aujourd'hui encore).

Chaque méthode a ses qualité et ses défauts...

Le principal est que ton choix corresponde aux attentes de ton équipe et puisse vous faire développer vos applications en toute sérénité.
__________________
Mes contributions MATLAB (R2009a - Windows & Linux)

• J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
• Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel)

• Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 11h35   #6
Membre du Club
 
Inscription : janvier 2012
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 59
Points : 41
Points : 41
Bonjour,

Cette méthode est cruellement efficace... Je pense qu'il serait intéressant pour tout le monde de proposer cette méthode dans "Sources MATLAB".

La paternité de cette méthode appartenant à Duf42, je lui laisse bien évidemment l'honneur de le faire. Je suis tout de même prêt à entièrement rédiger un programme simple et rapidement compréhensible par tout le monde. Je voudrais juste dans ce cas qu'on me donne les directives principales.

Cordialement,
tachmou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h53.


 
 
 
 
Partenaires

Hébergement Web