Si j'ai bien compris l'utilité de la POO, à savoir :
Wam a écrit:
La programmation fonctionnelle utilisant un emboîtement de fonctions que l'on peut imbriquer les unes dans les autres, une modification du programme implique souvent une remise en question de l'ensemble des fonctions et sous-fonctions impliquées.
Une modification des données entraîne donc une modification d’un nombre important de fonctions éparpillées et difficiles à identifier.
En Programmation Orientée Objet, lors d'une modification des données, seul l’objet incriminé (encapsulant les données) est modifié.
Toutes les fonctions à modifier sont alors bien identifiées car elles se trouvent dans ce même objet : ce sont ses méthodes.
Pourtant, en Linotte, les méthodes ne sont pas clairement identifiées, pour deux raisons :
La première concerne le déclaration des espèces.
En effet, lorsque l'on déclare une espèce, comme ceci :
[php]
Espèces
nom est un texte
numéro est un texte
adresse est un texte valant "adresse inconnue"
espèce contact contient nom, numéro, adresse
[/php]
On ne voit que ses attributs.
On ne voit pas les méthodes de l'espèce.
Car, pour créer une méthode fonctionnelle, on doit "l'attacher" à notre espèce et ceci peut être fait dans n'importe quelle partie de notre code.
La solution pour le Linottien consiste alors à "attacher" toutes ses méthodes fonctionnelles au sein d'une même fonction.
Mais ne pourrait-on pas déclarer les méthodes fonctionnelles directement lors de la déclaration d'une espèce ?
En C++ par exemple, les méthodes fonctionnelles sont visibles dans le header, grâce aux prototypes.
La seconde raison concerne l'écriture des méthodes fonctionnelles.
En effet, en Linotte, on écrit une méthode fonctionnelle comme n'importe quelle fonction récursive : rien ne les différencie.
En c++, on précéde le nom de la méthode par le nom de la classe, suivit de deux points, comme ceci :
[php]
void Personnage::recevoirDegats(int nbDegats)
{
}
[/php]
Ainsi, à la lecture de notre code, on sait tout de suite que la fonction RecevoirDegats est une méthode de la classe Personnage.
Mais en Linotte :
[php]
attaquer :
*moi :: stormtrooper
force :: nombre <
- 100
début
mélange force
énergie@moi vaut énergie@moi - force * 10
retourne force
[/php]
Ceci est une fonction récursive ou une méthode fonctionnelle appartenant à l'espèce stormtrooper ?
Réponse :
[php]
principale :
armée :: casier de stormtrooper
début
si vivant(armée{i}), lis
dégât :: nombre
affiche ">
>
Attaque du stormtrooper n° " + i + " :"
dégât vaut attaquer(armée{i})
[/php]
C'est une fonction récursive.
En modifiant ces deux points, les méthodes fonctionnelles seraient ainsi plus visibles et l'intérêt de la POO face aux fonctions récursives serait alors plus explicite...
Car ainsi les méthodes fonctionnelles d'une espèce seraient clairement identifiées et toutes modifications de cette espèce serait donc facilitées.