2009-12-30 5 views
0

J'essaie d'apprendre mon premier langage de programmation. Malheureusement, j'ai choisi l'Iphone pour commencer. J'ai pensé que ce serait facile ... ooops. Quoi qu'il en soit, 4 semaines plus tard, j'ai quelques apps de travail! genre de ...Configuration correcte de l'application orientée objet

Une de mes applications qui avait quelques boîtes de texte et quelques étiquettes. Chaque personne a un bouton has qui démarre une minuterie qui décrémente le texte d'une étiquette pour un compte à rebours.

J'ai deux minuteries séparées qui lancent deux méthodes distinctes qui incrémentent les variables, jouent un morceau, mettent à jour certaines étiquettes, etc., par rapport à chaque personne. Pas la guerre et le morceau sur la quantité de code, mais assez pour ne pas vouloir changer les deux ensembles chaque fois que je trouve comment faire quelque chose de nouveau.

Quelle est la meilleure façon de configurer ceci afin que je puisse travailler avec un seul ensemble de code par personne? Je reçois l'ensemble de la «personne» comme une idée d'objet et cela devrait être sa propre classe et je devrais probablement la sous-classer de toutes les lectures que j'ai faites. Je ne sais tout simplement pas comment l'appliquer avec du code réel.

Répondre

2

Je pense que le premier point de départ est de réaliser que les temporisateurs font (presque toujours) partie de l'interface et ne font pas partie du modèle de données. Sauf si vous avez un ensemble d'exigences très étrange, les minuteurs ne doivent pas être liés aux objets de données de votre personne.

Vous souhaitez maintenir une séparation stricte entre les données et l'interface. C'est l'idée clé derrière le motif mal nommé Model-View-Controller. Il devrait s'appeler Model-Controller-View pour indiquer que le contrôleur intervient entre le modèle et la vue.

Dans votre cas, il semble que vous ayez un objet personne qui est votre modèle de données. Idéalement, ce modèle fonctionnera sans lien direct avec une interface particulière. Un bon modèle de données fonctionnera avec des vues standard, une vue Web ou même une interface de ligne de commande basée sur du texte. Cela ne devrait pas avoir d'importance pour votre modèle, car il ne concerne que le stockage ou la manipulation de données sans tenir compte de la façon dont il sera affiché ou utilisé.

Les temporisateurs qui mettent à jour l'interface appartiennent au contrôleur car ils n'ont rien à voir avec les données. Les mêmes données affichées dans différentes interfaces nécessiteraient des minuteurs différents. Vous n'avez probablement besoin que d'une minuterie qui appelle simplement une méthode dans le contrôleur qui met à jour tous les éléments de l'interface si nécessaire. Dans cette méthode, le contrôleur extrait ensuite les données dont il a besoin d'afficher à partir des objets appropriés dans le modèle de données (Instances de la classe de personne dans votre cas). Par exemple, supposons que vous ayez plusieurs objets personne avec chacun son propre compte à rebours. Vous auriez la valeur de compte à rebours stockée dans l'objet personne en tant que propriété. Une seule minuterie dans le contrôleur se déclenche une fois par seconde et appelle une méthode dans le contrôleur. Cette méthode demanderait alors à chaque objet personne sa valeur de compte à rebours. Lorsque la valeur est demandée, l'objet personne décrémente automatiquement la valeur du compte à rebours.Avec cette conception, vous pouvez gérer un nombre arbitrairement grand d'objets personnels, chacun avec son propre attribut de compte à rebours, avec juste un seul temporisateur et une méthode dans le contrôleur.

+0

Voilà la réponse que je recherche! Merci beaucoup! –

+1

Si c'est la réponse, vous devez cocher la case pour que le système sache que la question est répondue. – TechZen

+0

Merci pour les heads up! C'est la première question que j'ai posée à un site technique! J'aurais dû venir ici il y a des semaines! –

0

Nous pourrions parler de conception orientée objet pendant des heures, peut-être des mois et des années. Les principes de conception existent, ils sont mieux appris et maîtrisés par l'expérience et beaucoup de pratique.

Si vous avez besoin de 2 temporisations appelant chacune une méthode qui joue un rôle unique, vous êtes probablement bloqué avec les 2 temporisateurs. S'il existe des tâches/responsabilités communes dans vos deux minuteurs, vous pouvez créer un minuteur abstrait qui implémente ces tâches communes et l'étend pour un comportement plus spécifique (implémentation de méthode). J'ai trouvé la conception basée sur les rôles utile dans de nombreuses situations, mais comme je l'ai dit, vous devrez pratiquer et bien sûr connaître les bases de l'orientation objet et de l'héritage.

Questions connexes