2010-08-19 6 views
4

J'ai une compréhension très limitée de la POO. Je fais de la programmation en .Net depuis un an ou deux, mais je suis entièrement autodidacte, donc certaines des utilisations des subtilités de la POO sont perdues pour moi.Programmation orientée objet au-delà des méthodes simples?

Encapsulation, héritage, abstraction, etc. Je sais ce qu'ils signifient (superficiellement), mais quelles sont leurs utilisations?

J'ai seulement utilisé la POO pour mettre du code réutilisable dans les méthodes, mais je sais que beaucoup de fonctionnalités me manquent.

Même les classes - J'ai seulement fait une classe réelle deux ou trois fois. Au lieu de cela, j'inclue généralement toutes mes méthodes avec le formulaire principal.

+8

En fonction de votre description, vous n'avez pratiquement pas effectué de * OOP *. Mettre du code réutilisable dans des méthodes, quand tout est dans le même objet (MainForm) est juste une programmation procédurale régulière. –

+3

@Tyler McHenry: "juste une programmation procédurale régulière" avec des décorations de classe. –

+1

Ces autres questions peuvent vous aider à démarrer: http://stackoverflow.com/questions/2235986/how-can-i-think-in-oop http://stackoverflow.com/questions/2688910/learning-to-think -in-the-orient-way-way http://stackoverflow.com/questions/293152/best-way-to-learn-net-oop-best-practices – Jeff

Répondre

2

Vous pouvez essayer ceci: http://homepage.mac.com/s_lott/books/oodesign.html Il pourrait vous aider à voir comment concevoir des objets.

+0

Salut Steve, je viens de remarquer que c'est * votre * livre! ;) – FrustratedWithFormsDesigner

+0

Euh oh. Maintenant, nous devons baisser le score de S.Lott et le signaler comme spam à moins qu'il ne mette un gros avertissement sur la façon dont c'est * son * livre! –

+0

@Jon B: Non, cela semble dire.Je n'essayais pas de lui causer des ennuis, j'ai juste remarqué qu'il était l'auteur. – FrustratedWithFormsDesigner

0

OOP peut être utilisé pour modéliser des choses dans le monde réel que votre application traite. Par exemple, un jeu vidéo aura probablement des classes pour le joueur, les badguys, les PNJ, les armes, les munitions, etc ... tout ce que le système veut traiter comme une entité distincte.

Quelques liens que je viens de découvrir qui sont intros à OOD:

http://accu.informika.ru/acornsig/public/articles/ood_intro.html

http://www.fincher.org/tips/General/SoftwareEngineering/ObjectOrientedDesign.shtml

http://www.softwaredesign.com/objects.html

0

Garder très bref: au lieu des opérations faisant des données un tas d'endroits différents , vous demandez à l'objet de faire sa chose, sans se soucier de comment il le fait. Polymorphisme: différents objets peuvent faire des choses différentes mais en leur donnant le même nom, de sorte que vous pouvez simplement demander à n'importe quel objet (d'un supertype particulier) de faire son truc en demandant à n'importe quel objet de faire cette opération nommée.

4

OOP est trop impliqué pour expliquer dans une réponse StackOverflow, mais l'objectif principal est la suivante:

La programmation procédurale est d'écriture de code qui exécute des actions sur les données. La programmation orientée objet consiste à créer des données qui effectuent des actions sur elle-même.

En programmation procédurale, vous avez des fonctions et vous avez des données. Les données sont structurées mais passives et vous écrivez des fonctions qui effectuent des actions sur les données et les ressources.

Dans la programmation orientée objet, les données et les ressources sont représentées par des objets possédant des propriétés et des méthodes. Ici, les données ne sont plus passives: la méthode est un moyen d'ordonner aux données ou à la ressource d'effectuer une action sur elle-même.

La raison pour laquelle cette distinction est importante est que dans la programmation procédurale, toute donnée peut être inspectée ou modifiée de manière arbitraire par n'importe quelle partie du programme.Vous devez faire attention aux interactions inattendues entre différentes fonctions qui touchent les mêmes données, et vous devez modifier un tas de code si vous choisissez de changer la façon dont les données sont stockées ou organisées. Mais en programmation orientée objet, lorsque l'encapsulation est utilisée correctement, aucun code sauf celui de l'objet ne doit savoir (et ne dépendra donc pas de) comment l'objet de données stocke ses propriétés ou se mute lui-même. Cela contribue grandement à modulariser votre code, car chaque objet a maintenant une interface bien définie, et tant qu'il continue à supporter cette interface et que d'autres objets et fonctions libres l'utilisent via cette interface, les fonctionnements internes peuvent être modifiés sans risque.

De plus, les concepts d'objets, ainsi que l'utilisation de l'héritage et de la composition, vous permettent de structurer structurellement vos données dans votre code. Si vous avez besoin de données représentant un employé, vous créez une classe Employee. Si vous devez travailler avec une ressource d'imprimante, vous créez une classe Printer. Si vous devez dessiner des boutons-poussoirs dans une boîte de dialogue, vous créez une classe Button. De cette façon, non seulement vous obtenez une plus grande modularisation, mais vos modules reflètent un modèle utile des choses du monde réel avec lesquelles votre programme est censé fonctionner.

0

J'ai appris la POO en utilisant Turbo Pascal et je l'ai trouvé immédiatement utile lorsque j'ai essayé de modéliser des objets physiques. Les exemples typiques incluent un objet Circle avec des champs pour l'emplacement et le rayon et des méthodes pour dessiner, vérifier si un point est à l'intérieur ou à l'extérieur, et d'autres actions. Je suppose que vous commencez à considérer les classes comme des objets, et les méthodes comme des verbes et des actions. La programmation procédurale est comme écrire un script. C'est souvent linéaire et il suit étape par étape ce qui doit être fait. Dans le monde de la POO, vous créez un répertoire d'actions et de tâches disponibles (comme des morceaux de lego) et vous les utilisez pour faire ce que vous voulez faire.

L'héritage est utilisé. Le code commun devrait/peut être utilisé sur plusieurs objets. Vous pouvez facilement aller dans l'autre sens et créer trop de classes pour ce dont vous avez besoin. Si j'ai affaire à des formes, j'ai vraiment besoin de deux classes différentes pour les rectangles et les carrés, ou puis-je utiliser une classe commune avec des valeurs différentes (champs).

La maîtrise vient avec l'expérience et la pratique. Une fois que vous commencez à vous gratter la tête pour résoudre des problèmes particuliers (surtout quand il s'agit de rendre votre code réutilisable à l'avenir), vous gagnerez en confiance pour commencer à inclure de plus en plus de fonctionnalités POO dans votre code.

Bonne chance.

Questions connexes