, benwit Dans mes billets précédents, je ne sais pas si vous avez remarqué, j'ai mis "gratuit" entre guillemets parce que je ne pense pas qu'il existe de produit/service gratuit en soi !
En revanche, il y a bien des produits/services gratuits pour une cible donnée.
Un des mérites de Google (qui est et demeure une entreprise commerciale, rappelons le) est de fournir des services gratuits pour les utilisateurs.
Cependant, au final, il ne faudrait pas oublier qui paye ces services et pourquoi ?
Google App Engine n'échappe pas à cette règle. Je vais donc vous parler de la raison des quotas, de leurs valeurs, vous expliquer pourquoi c'est une bonne chose selon moi, qu'est ce qu'il se passe lorsqu'ils sont atteints et comment aller au delà ...
Vous devez être identifié pour poster un commentaire.
J'ai conclu l'article précédent en me déclarant de type Homme.
La classe EtreHumain est cependant conservée :
Homme et FemmePeutMettreAuMonde<E> implémentée par Femme.Soit f une instance de Femme que l'on supposera enceinte et dont le bébé arrive à terme.
Considérons l'instruction EtreHumain e = f.metAuMonde();
e est donc une instance d'EtreHumain et plus spécifiquement une instance d'Homme ou une instance de Femme.
Le mystère de la création enfin résolu ? Pas vraiment ! une question se pose : D'où vient f ? Si f = (Femme) mf.metAuMonde(), d'où vient alors mf ? ...
L'histoire de la poule et de l'œuf : une régression infinie ?
Dans l'histoire de la poule et de l'œuf où on cherche qui précède qui ?
Dans notre cas, si on met également de côté le mâle qui participe de manière indirecte à la création, la question est similaire : "Quelle est la femme qui a fait la femme ?"
Créationniste VS Évolutionniste ?
A la question "Quelle est la femme qui a fait la femme ?", je ne vois que deux réponses :
Comment modéliser ?
Femme eve = Femme.getPremiereFemme();) puis je ferai des appels à la méthode metAuMonde() de chaque femme de sa descendance ... On devrait bien tomber sur ma mère ! Du coup, on voit que dans cette modélisation, quelque soit la position adoptée, on part d'un état initial où préexistent certaines entités.
C'est d'ailleurs souvent le cas en POO, c'est pourquoi il existe des librairies qui initialise un graphe d'objets (Comme Spring dans le monde Java).
La réponse à la question posée en introduction est donc : La femme f vient d'un état initial.
A suivre ...
Vous devez être identifié pour poster un commentaire.
Si j'étais un objet, je serai une instance d'EtreHumain (voir les épisodes précédents)
Comment je viens au monde ?
Un développeur Java pourrait suggérer : new EtreHumain();
Si vous avez lu mon article précédent, vous aurez compris que cette réponse est loin de me satisfaire.
Dans le cas contraire, je vais vous expliquer pourquoi cette réponse ne me convient pas vraiment alors qu'au final, il y aura bien cette instruction quelque part !
Vous vous doutez bien que l'appel à ce constructeur ne crée pas un un être humain mais une structure de données représentant un être humain. Le problème n'est donc pas là.
Le problème, c'est que cette instruction appartient au niveau technique et non au niveau fonctionnel.
Elle ne devrait donc pas être accessible directement depuis n'importe quelle classe cliente, surtout si on ne souhaite pas modéliser la création d'EtreHumain !
Et même dans le cas où on souhaite la modéliser, comment rendre applicable les règles fonctionnelles concernant cette création si on ne l'encapsule pas dans une méthode de création ?
Voyons donc quelle pourrait être cette méthode fonctionnelle ?
Le plus naturellement possible !
Et si la classe EtreHumain avait une méthode : public EtreHumain metAuMonde()
Bien vu mais non ! Ce qui me dérange, c'est que cette méthode soit dans la classe EtreHumain alors qu'elle ne concerne même pas la moitié d'entre eux.
Remarquons au passage que c'est un problème typique de POO ! Certains s'en satisfont très bien en disant qu'une méthode qui ne s'applique pas à toutes les instances retournera null ou lancera une Exception pour les cas inappropriés. Personnellement, cela ne me satisfait pas.
Le choix de la classe EtreHumain montrerait t'elle ses premières limites dans le cadre de ma modélisation ? Les deux classes Homme/Femme ne sont t'elles pas plus justifiées tout à coup ? Classes où seule la classe Femme contiendrait cette méthode :
public class Femme extends EtreHumain implements PeutMettreAuMonde<EtreHumain>
où l'interface générique PeutMettreAuMonde<E> aurait la méthode public E metAuMonde().
On pourrait hésiter à placer cette méthode dans cette classe en faisant remarquer une fois de plus que toutes les instances ne sont pas forcément concernées (Toutes celles qui ne sont pas enceintes). Toutefois, la différence avec précédemment, c'est que potentiellement, elles pourraient l'être !
Conceptuellement, je trouve cela beaucoup plus satisfaisant ! Surtout que mine de rien, l'interface a été travaillée :
metAuMonde renvoit un E et pas une List<E> car c'est le cas le moins général et même dans ce cas, ils viennent au monde un après l'autre ...Avec une telle modélisation, je suis donc une instance d'Homme !
A suivre ...
Vous devez être identifié pour poster un commentaire.
Un système informatique ne modélise pas la réalité. Au mieux, il modélise un modèle d'une partie d'une réalité.
Ainsi, je suis en train de modéliser une vision de ce que je peux être.
Une des difficultés est de ne pas mélanger les niveaux, surtout si on parle à la fois de modèle pour désigner ma représentation mentale et de modèle pour désigner la représentation informatique de ma représentation mentale.
Appelons donc fonctionnel le premier modèle et technique le second.
La première étape de la modélisation est de créer au niveau technique des objets (des structures de données) qui vont représenter des entités du niveau fonctionnel.
Cette distinction est nécessaire lorsqu'on aborde la phase de création :
Il est important de noter que la création d'entité :
On peut également en profiter pour faire d'autres remarques :
Ces précisions étant faites, on pourra passer à la phase de création dans un prochain article ...
Vous devez être identifié pour poster un commentaire.
Etre ou avoir ?
C'est une question qui se pose souvent en POO.
Ai-je une relation d'héritage ? (classe parente, sous classes, héritage multiple, interfaces, ...)
ou une relation de client ? (agrégation, composition, dépendance, ...)
Je suis un corps qui a une âme ...
Est-ce que je suis un corps ou est-ce que j'ai un corps ?
Si j'ai un corps ? Qui possède ce corps ?
A part la classe PersonnePhysique qui pourrait avoir un attribut corps, je ne vois pas bien dans l'immédiat d'autres candidats. De plus, il faudrait créer une classe pour cet attribut.
Avoir quelque chose m'évoque le fait que je ne pourrai ne plus avoir cette chose. Or si je ne devais plus avoir de corps, je crois que je ne pourrai pas continuer d'exister. Ce qui me prouve qu'on est plus ce corps qu'on ne le possède. Il me paraît donc beaucoup plus naturel de dire que je suis un corps d'où mon choix de la classe EtreHumain qui représente des corps physiques particuliers.
De la même manière, suis-je une âme ou ai-je une âme ? Aussi étrange qu'il me semble de l'écrire, je crois que je possède plus une âme (au sens conscience) que je n'en suis une. En reprenant mon argument sur le fait d'avoir, je conçois très bien l'idée de mon corps sans âme. C'est juste que je ne n'en aurai pas conscience.
Dois-je pour autant dans ma classe EtreHumain ajouter un attribut âme ? et créer une classe pour cet attribut ? Non, si je crois que la conscience est une faculté émergente d'une partie de mon corps.
... ou une âme qui a un corps ?
La solution matérialiste me séduit. Pour autant, j'imagine bien une solution duale. On ne pourrait être qu'informations, des objets abstraits, des âmes qui élaborent tout un monde physique et qui se perçoivent dans ce monde comme des entités. Là, c'est le corps qui serait une propriété émergente de l'esprit. Je reconnais que cette idée me donne le vertige ... Rien n'existe en dehors de mon regard ?
Pourquoi choisir ?
Ne peut on pas concilier ces deux idées ? Un corps physique a jamais inconnu dont émerge une conscience qui se représente son propre corps et son environnement ?
De toute manière, dans le cadre de mon exercice, quelque soit la position philosophique que l'on choisit, j'aurai besoin d'une part de modéliser un corps et d'autre part, je ne vois pas comment modéliser une âme.
A ce stade, je suis toujours une instance d'EtreHumain. Ce choix sera peut être remis en cause ultérieurement, mais dans l'immédiat, je pense que c'est le plus justifié.
A suivre ...
Vous devez être identifié pour poster un commentaire.
Je ne sais pas vous, mais moi, même une fois qu'une solution a été trouvée, dans les jours qui suivent, je ne peux pas m'empêcher d'avoir de nouvelles idées. Comme si les processus lancés en arrière plan dans ma boite crânienne continuaient de tourner ...
Je suis conscient que pour avancer, il ne faut pas toujours remettre en cause ses premières solutions mais lorsqu'on peut se le permettre, autant laisser s'exprimer ce petit côté perfectionniste. Je vois un avantage à confronter les idées : Soit elles fragilisent mon choix initial et le remplacent avantageusement, soit elles le renforcent.
J'ai imaginé d'autres classes candidates qu'EtreHumain : Individu, Personne, EtrePensant...
- Individu :
Soit cela me fait pensé à un élément d'une population et je trouve ça un peu trop général,
Soit cela me fait pensé à Personne.
- Personne :
C'est une classe candidate qui me séduit assez. Pour une application de gestion ou application juridique, c'est assurément elle que je choisirai pour me représenter. J'irai même jusqu'à en faire deux sous classes : PersonnePhysique et PersonneMorale. Cela à l'avantage de pouvoir gérer à la fois des gens et des entreprises.
En revanche, dans le cadre de mon problème (Si j'étais un objet ...), modéliser une personne morale ne m'intéresse pas.
- EtrePensant :
C'est une classe qui me caractérise bien, comme EtreHumain et EtreVivant. Parfois, lorsque certains de mes congénères me disent "Tu penses trop, tu te poses trop de questions", j'ai l'impression qu'ils sous-exploitent cette capacité unique. Le problème, c'est que c'est une notion assez flou, plus flou encore que celle d'EtreVivant.
Pourquoi EtreHumain demeure ma meilleure classe ?
Cela ressortira prochainement lorsque j'aborderai la phase de création mais sans présumer de la suite, on peut déjà remarquer ce qui distingue EtreHumain de ces trois classes.
Un être humain, c'est d'avantage concret non ? Si on le voit comme un "animal" particulier, si on imagine son corps, on en voit les contours.
Alors qu'individu, personne, etre pensant, c'est plus abstrait, cela se rapproche plus d'esprit, d'âme, de conscience ...
En écrivant "Si j'étais un objet ...", par objet, je pensais au sens informatique de la POO, à une instance d'une classe.
Maintenant, je suis arrivé à un autre niveau : savoir si cet objet informatique modélise un objet concret (un corps) ou un objet abstrait (une âme) ?
Là encore, cela dépend de ce que veut modéliser le client (pour peu qu'il le sache).
Je vous expliquerai pourquoi j'ai choisi le premier cas dans un prochain article...
Vous devez être identifié pour poster un commentaire.
Le problème à modéliser est dans le titre ! Je ne sais pas trop où ça va me conduire mais on verra bien ... (non, non, pas la camisole !!!)
Si je suis un objet, je suis une instance mais une instance de quoi ? Informaticien/Informaticienne, Homme/Femme, EtreHumain, Mammifère, EtreVivant, Etre ... ?
Les idées de classes jetées en pâtures indiquent déjà une potentielle chaîne d'héritage mais laissons la de côté pour l'instant.
Quelle classe choisir ? A quel niveau je me situe ?
Pour moi, c'est le problème qu'on veut modéliser qui doit trancher.
Le plus général : Je dirai que c'est en faire un peu trop !!!
Dans l'esprit du client, c'est ni un problème de philosophie, ni un problème de biologie !
Le plus spécialisé : Je dirai que c'est un peu trop limitatif au goût du client !
- Si je veux changer de profession, comment je fais ?
- Si j'étais amené à choisir les deux sous classes Homme / Femme, à quoi rattacher Informaticien ? A Homme ? Dans ce cas, il me faudrait une sous classe Informaticienne et donc potentiellement, une explosion du nombre de classes ...
Doit-on avoir deux sous classes d'EtreHumain : Homme & Femme ou est-ce que l'ajout d'un attribut sexe à la classe EtreHumain ne suffit-il pas ?
Cette question de modélisation entre l'ajout d'un attribut ou la création de sous classes se pose très souvent en POO.
On peut d'ailleurs le voir pour de nombreux attributs (pour ne pas dire tous) :
Personnellement, j'ai pour règle de ne pas créer de sous classes tant que le comportement ne diffère pas et que les attributs en question ne sont pas complètement inappropriés.
Dans mon exemple flou, deux sous classes ne se justifient pas pour l'instant, optons donc pour l'attribut sexe.
Aujourd'hui, je suis donc un objet de classe EtreHumain qui aura son attribut booléen "sexe" à 1 !
A suivre ...
Vous devez être identifié pour poster un commentaire.
Je vais m'exercer dans des articles à venir à ce que j'appellerai de la "modélisation agile".
La "bonne modélisation" ...
Je lisais sur un forum de POO un dialogue étudiant/prof sur un problème de modélisation d'un péage d'autoroute :
- L'étudiant : Quels sont les objets ?
- Le prof : Tout est objet !
- L'étudiant : Quoi ? Même les atomes de la carte de crédit ?
- Le prof : Non, pas à ce point !
Je pense qu'il n'y a pas une unique solution pour modéliser un problème. Cependant, comme l'illustre bien l'exemple précédent, il y a des solutions meilleures que d'autres car il existe un niveau où il faut savoir s'arrêter. Pour moi, la bonne modélisation, c'est celle qui répond à un objectif, qui est assez souple pour être étendue si le besoin s'en fait sentir mais ne part pas trop loin et trop vite pour traiter des cas exotiques.
Cela me fait donc inévitablement penser à la programmation agile où on commence par du code simple qu'on retravaille au fil du temps en fonction de l'évolution du périmètre !
... à l'épreuve du temps
Je distingue trois cas de modélisation de difficulté croissante :
Modélisation agile ?
Ce que je nomme "Modélisation agile", c'est en fait le processus qui me conduit vers la "bonne modélisation" par essais/erreurs ...
Avec l'expérience, je me suis rendu compte qu'il m'était impossible de concevoir la bonne solution du premier coup, surtout quand le problème évolue avec le temps !!!
Ce que je vous propose, c'est de prendre un exemple et de modéliser en "live", de montrer comment je m'y prend ...
Si cela vous intéresse, je vous invite à me suivre et à intervenir pour me faire part de vos critiques, remarques, commentaires ...
A bientôt ...
Vous devez être identifié pour poster un commentaire.
Sur ce blog, je vais vous parler de ma veille technologique, de mon expérience, de mes coups de cœur et de mes coups de gueule.
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Copyright © 2000-2012 - www.developpez.com