JeuWeb - Crée ton jeu par navigateur
Aide à l'apprentissage de la POO - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Aide à l'apprentissage de la POO (/showthread.php?tid=6355)

Pages : 1 2 3 4


RE: Aide à l'apprentissage de la POO - Maks - 29-08-2012

Je commencerais avec un framework plus léger pour commencer, Code Igniter me parait être le plus simple. CakePHP je l'ai toujours trouvé plus compliqué (je me trompe peut être) ^^

Au sujet de la bonne POO, je suis pas un expert mais je pense qu'un des points importants c'est de garder les choses DRY. Faut vraiment factoriser le code quoi. Les classes qui ont des points communs doivent hériter d'une classe mère abstraite (si le modèle objet le permet). Par exemple, si dans ton jeu tu as des joueurs humains et des bots, tu peux faire une classe mère Character où tu auras des propriétés et méthodes partagées par les classes Mob et Player.

J'ai un prof de Java comme ça qui hésite pas à créer d'autres classes intermédiaires qui héritent entre elles juste parce qu'elle ont la propriété "prénom" en commun. C'est un peu extrême je trouve mais bon.

Pour ça tu peux t'aider de logiciels de modélisation UML ou d'une feuille de papier par exemple.

Un autre point c'est de ne pas faire des méthodes trop longues ce qui revient un peu à encaspuler du code procédural dans des méthodes . Il faut créer de nouvelles méthodes qui en appellent d'autres ect et qui pourront être rappelées ailleurs afin de factoriser le code encore une fois.
D'ailleurs je dis ça mais c'est des trucs que je fais pas souvent, ça me soule toujours d'avoir trop de méthodes Big Grin


RE: Aide à l'apprentissage de la POO - Ter Rowan - 29-08-2012

(28-08-2012, 11:26 PM)Damocorp a écrit : Je sais que les commentaires sont inutiles, pour vous en tout cas. C'est une habitude chez moi qui me permet de faire défiler le défilement vertical très vite dans mes longs scripts, et d'accéder à ce que je souhaite très rapidement.

pourquoi te flagelles tu la dessus

Le commentaire ça sert a aider
Si ces commentaires aident, alors ils sont pertinents


RE: Aide à l'apprentissage de la POO - Sephi-Chan - 29-08-2012

Au regard de ton exemple d'inscription, voilà un exemple de ce que tu pourrais faire avec Ruby on Rails.

Dans le contrôleur, on a des actions (chaque méthode). Ces actions sont comme tes scripts PHP : elles peuvent renvoyer du contenu HTML (ou même des images, du JSON, du XML, etc.) ou rediriger l'utilisateur.



class UsersController < ApplicationController
# Page qui présente le formulaire d'inscription, servie via l'URL `/users/new`.
# Le contenu HTML de la page est issu du fichier `app/views/users/new` (que je montre plus bas).
def new
@user = User.new
end


# Page de traitement du formulaire d'inscription, appelée via l'URL `/users` en POST.
def create
@user = User.new(params[:users])

# On sauvegarde l'utilisateur, si ça marche on crée un cookie et on
# renvoie l'utilisateur sur la page d'accueil avec un message.
if @user.save
cookies.permanent[:user_id] = @user.id

@user.create_station!(cristal: 3000, mineral: 1000)
@user.create_talent!

redirect_to '/', notice: 'Bienvenue !'

# Sinon, la validation échoué on affiche le formulaire avec les
# données déjà remplies et les messages d'erreurs.
else
render :new
end
end
end


Ensuite on a les modèles, qui définissent les relations, les règles de validation, etc.


# Implique qu'une table `users` existe, avec des colonnes `email`, `login`, `password_digest` et `faction_id`.
class User < ActiveRecord::Base
has_secure_password

validates_uniqueness_of :email
validates_email_format_of :email

validates_uniqueness_of :login
validates_length_of :login, within: 3..25
validates_format_of :login, with: /^[A-Z]+/

validates_inclusion_of :faction, in: Faction.all

belongs_to :faction
has_one Confusedtation
has_one :talent
end


# Implique qu'une table `factions` existe.
class Faction < ActiveRecord::Base
has_many :users
end

# Implique qu'une table `talents` existe, avec une colonne `user_id`.
class Talent < ActiveRecord::Base
belongs_to :user
end


# Implique qu'une table `stations` existe, avec une colonne `user_id`.
class Station < ActiveRecord::Base
belongs_to :user
end

Comme tu peux le voir, j'ia beaucoup moins de code et le peu que j'écris est très explicite et concis. Et je ne m'embête pas avec la sécurité des requêtes : tout est fait pour moi.

Et tu n'as pas encore vue la vue, avec des outils pour générer des formulaires, avec messages d'erreurs, remplissage automatique, etc.


<%= form_for @user do |form| %>
<div>
<%= form.label :login %><br />
<%= form.text_field :login %>
</div>

<div>
<%= form.label :email %><br />
<%= form.email_field :email %>
</div>

<div>
<%= form.label :password %><br />
<%= form.password_field :password %>
</div>

<div>
<%= form.label :password_confirmation %><br />
<%= form.password_field :password_confirmation %>
</div>

<div>
<%= form.submit %>
</div>
<% end %>


Donc voilà. L'OO on s'en fout un peu en fait. Ce qui importe, c'est d'utiliser les frameworks… Qui sont en OO. :p


RE: Aide à l'apprentissage de la POO - Damocorp - 29-08-2012

Citation :pourquoi te flagelles tu la dessus
Le commentaire ça sert a aider
Si ces commentaires aident, alors ils sont pertinents
J'ai déjà entendu qu'un commentaire qui décris ce qui se passe en dessous est un commentaire qui sert à rien.
Ce qui est le cas pour tous ces types de commentaires. Sauf que je m'en sers comme support visuel, rien d'autre ( sinon ils serait pas en majuscule ).
Depuis donc, je précise Wink


Je vais tester d'autre framework plus léger. Trouver de quoi faire ma première classe et je reviendrai la poster ici.


RE: Aide à l'apprentissage de la POO - Sephi-Chan - 29-08-2012

Ben c'est ça, ignore ce que je te montre ! -.-


RE: Aide à l'apprentissage de la POO - Damocorp - 29-08-2012

Citation :Ben c'est ça, ignore ce que je te montre ! -.-
Heu non j'ai rien ignoré, me faut juste le temps d'assimiler. Puis la c'est en ruby, faudrait déjà que je m'en sorte en php pour pouvoir travailler l'idée en ruby. Je connais pas la syntaxe ruby et je comprend pas tout ce que tu as écrit.

Exemple :
Citation :Et tu n'as pas encore vue la vue, avec des outils pour générer des formulaires, avec messages d'erreurs, remplissage automatique, etc.
Si ce que j'ai lu raconte pas de connerie. C'est gérer par le framework et la configuration qu'on en fait. Hors j'en suis pas encore la.
Je t'ignore donc pas, je ne le comprend pas encore, je vais donc en lire encore plus, faire des tests et je reviendrai quand je comprendrai mieux ce que tu raconte.


Il est clair que je vais me baser sur ce que tu as montré pour faire ma prochaine classe.


Autant pour moi, j'aurai peut-être du le préciser


RE: Aide à l'apprentissage de la POO - Sephi-Chan - 29-08-2012

Tu peux aussi changer de langage. Quitte à réapprendre, autant utiliser un bon langage, lui même objet (ce que n'est pas PHP).

Pour les vues, c'est à toi de les écrire (sauf avec certains outils de génération, mais là c'est spécifique) comme je l'ai fais pour la vue du formulaire.

Tu ne peux pas t'inspirer de ce que je te montre pour tes prochaines classes car ça dépend entièrement du framework. Tu pourras t'approcher de ça avec CakePHP car il s'inspire de Rails, voir un peu avec Symfony, mais c'est tout.


Mais mon conseil tient toujours : n'écris pas de classes pour apprendre, utilise des classes qui existe. Donc utilise un framework, ça t'apprendra l'objet. Arès tu pourras t'émanciper et écrire tes propres classes comme tu le voudras. Smile

Des gens dans ton cas, on en voit passer plein sur JeuWeb, et c'est illusoire de penser que tu peux te mettre à la POO comme ça. Tu as tout à gagner à profiter de l'expérience de ceux qui sont passés avant toi (notamment nous)… Wink


RE: Aide à l'apprentissage de la POO - Damocorp - 30-08-2012

Pour le moment je vais rester sur le php, j'ai consulté les écoles du coin et j'ai réussi à me choper des cursus sur la POO ( mais avec php ). Dans le cas ou y'a de trucs que j'assimilerai pas, j'ai une quelques adresses de personne qui peuvent m'aider, un peu comme le principe de parrain-linux Et quand je vois qu'il y'a 3 modules de 80 à 120 h qui traitent de la POO sur 3 ans, c'est clair que je vais pas l'apprendre sur quelques semaines.

Pour Symfony je l'ai tout simplement effacé de mon serveur. Ça m'a sérieusement saoulé. Une moyenne de 2 à 3 sec pour le premier affichage de chaque page, non merci. Surtout quand il s'agit de simplement faire une requête, sortir le résultat sous forme de liste... C'est tout bonnement insupportable et je compte pas payer un plus gros serveur pour avoir quelque chose de rapide.
La vitesse pour moi est quelques chose de crucial. Je le fais même pas pour les visiteurs, c'est uniquement pour moi ( oui je sais j'suis égoïste pour cela Tongue ) Par contre j'ai garder activé l'APC demandé pour Symfony, j'suis occupé de faire des tests, et ça me plait ça Wink

Je me doute bien que mon MVC va être pourri. Mais avec le pseudo-frame et tous mes répertoires, j'étais finalement pas loin d'un MVC très basique.
Puis c'est pas comme si je devais partager mon code ou travailler à plusieurs dessus. Donc au final si ça merde, ça n'embête que moi Smile

J'vais aller tester d'autres frameworks, car cela me parait vraiment trop bizarre.
Ou c'est normal qu'un framework mette autant de temps à afficher les pages ?


RE: Aide à l'apprentissage de la POO - niahoo - 30-08-2012

Non c'est pas normal Smile


RE: Aide à l'apprentissage de la POO - Sephi-Chan - 30-08-2012

Non, ce n'est pas normal. Même si le mode de développement des frameworks est généralement lent dû au rechargement des nombreuses classes à chaque chargement de page, 2 à 3 secondes, c'est vraiment très lent.

Attention à l'obsession pour les performances : une phrase célèbre explique que l'optimisation prématurée est la source de très nombreux problèmes. Inutile de courir après les performances si tu n'en as pas besoin. Ce serait bien
Ce serait bien de savoir pourquoi Symfony est si long à réagir, car ce n'est pas normal. Ça le fait aussi en local sur ta machine ? Ou seulement sur ton serveur (mutualisé ou dédié ?) ?

Courage ! Smile