L'un des nombreux chefs-d'œuvre des livres "Why Series", [** Why make it object-orienté **](https://www.amazon.co.jp/%E3%82%AA%E3%83%] 96% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88% E6% 8C% 87% E5% 90% 91% E3% 81% A7% E3% 81% AA% E3% 81% 9C% E3% 81% A4% E3% 81% 8F% E3% 82% 8B% E3% 81% AE% E3% 81% 8B-% E7% AC% AC2% E7% 89% 88-% J'ai lu E5% B9% B3% E6% BE% A4-% E7% AB% A0 / dp / 4822284654 /), j'ai donc résumé les points qui m'ont été utiles et que j'aimerais utiliser pour l'éducation.
La question qui est aussi le titre du livre.
Il y a plusieurs choses, mais si vous l'écrasez un peu, vous pouvez dire ** pour rendre le logiciel plus facile **.
L'orientation des objets est difficile et est parfois considérée comme difficile à comprendre. Les raisons en sont les suivantes.
"Héritage, superclasses, interfaces, attributs, remplacements ..." Il y a tellement de termes qu'il est difficile de se souvenir au début. Cependant, l'orientation de l'objet couvre une grande surface, on peut donc dire qu'elle ne peut pas être aidée. Cela semble être mauvais si vous ne vous en souvenez pas.
"Les animaux sont en super classe, les chiens sont en sous-classe ..." "Envoyez un message à l'objet humain pour me dire votre âge ..." Je pense que vous voyez souvent de tels exemples. Cependant, la métaphore reste comme une impression forte et est mal interprétée par le mécanisme réel et les croyances de l'apprenant.
"Humain, entreprise, ordinateur, distributeur automatique, bouteille en PET, événement ..." Tant qu'il existe dans ce monde, il peut être exprimé comme un objet. Une abstraction aussi extrême crée l'idée fausse que le monde réel peut être exprimé dans un programme tel qu'il est.
L'orientation objet est parfois considérée comme «une représentation directe du monde réel dans le logiciel». Cette idée est déroutante en retour. ** Orienté objet et le monde réel sont similaires et différents **.
-** Dans le monde réel ** Lorsque vous recevez le message "Cry!", Vous pouvez entendre "Meow" ou "One", mais vous pouvez l'ignorer. Vous pouvez mordre. Dans le monde réel, c'est contre les ordres.
Le logiciel ne doit pas représenter le monde réel, mais couvrir une partie du travail humain. Il s'agit de laisser l'ordinateur faire le ** «se souvenir» et le «travail fixe» ** pour lequel l'ordinateur est bon.
La technologie de programmation a été conçue et améliorée à de nombreuses reprises et l'orientation objet est née. L'histoire de l'évolution de la technologie de programmation est la suivante.
L'ordinateur ne comprend que le ** langage machine **. Au début, les humains écrivaient des programmes en langage machine.
A10010
8B160210
01D0
A10410
** Le langage d'assemblage ** a été introduit pour rendre le langage machine un peu plus facile à comprendre. Dans le langage d'assemblage, le langage machine est remplacé par un symbole facile à comprendre pour les humains.
MOV AX, X
MOV DX, Y
ADD AX, DX
MOV Z, AX
** Des langages de haut niveau ** sont apparus pour rendre l'expression encore plus conviviale. Avec l'avènement des langages de haut niveau, la productivité et la qualité de la programmation se sont considérablement améliorées. Cependant, avec la croissance explosive des ordinateurs, les besoins ne se sont pas réunis. Cela s'appelait la ** crise du logiciel **.
Z = X + Y
Pour répondre à la crise du logiciel, la ** programmation structurée ** a été introduite par ** Dyxtra ** aux Pays-Bas. L'idée de la programmation structurée est qu'il est important d'avoir une structure facile à comprendre afin de créer un programme qui fonctionne correctement. Pour faciliter la compréhension, les méthodes suivantes ont été spécifiquement mentionnées.
** Déclaration GOTO supprimée ** La logique n'est représentée que par trois structures: la progression séquentielle, la ramification conditionnelle et la répétition. Pour cette raison, les langages de programmation structurés sont également appelés ** langages de programmation sans GOTO **.
** Augmenter l'indépendance des sous-programmes ** Le sous-programme lui-même était déjà inventé, mais lors de l'utilisation du sous-programme, il était courant de passer des valeurs à l'aide de variables globales. Les variables globales réduisent la maintenabilité et le débogage du programme. Afin de traiter ce problème et de rendre le sous-programme plus polyvalent, un mécanisme pour ** les variables locales ** et ** passer des arguments par valeur ** a été conçu.
Bien que les langages de programmation structurés soient devenus monnaie courante pour les programmeurs, il existe encore deux problèmes que les langages de programmation structurés ne peuvent pas résoudre.
-** Variables globales ** Les variables locales disparaissent après l'appel du sous-programme. Les données qui doivent être conservées au sein de l'agence d'exécution du sous-programme doivent être gérées par des variables globales.
L'orientation objet est apparue pour résoudre le problème des variables globales et de la mauvaise réutilisation. Dans l'orientation objet, trois nouveaux mécanismes «classe», «polymorphisme» et «héritage» ont été ajoutés.
C'est un mécanisme pour combiner des variables et des sous-programmes avec des liens forts en une seule classe. Ce mécanisme peut réduire le nombre de lignes dans un code source (partie). De plus, comme les classes sont regroupées, il est plus facile de nommer les sous-programmes.
<Avant orienté objet>
・ TextFileOpen()
・ TextFileClose()
・ TextFileRead()
・ JsonFileOpen()
・ JsonFileClose()
・ JsonFileRead()
<Dans le cas de l'orientation objet>
■ Classe de texte
・ FichierOpen()
・ FichierFermer()
・ FichierLire()
■ Classe Json
・ FichierOpen()
・ FichierFermer()
・ FichierLire()
C'est un mécanisme pour cacher les variables et les sous-programmes définis dans une classe des autres classes (privé). En le cachant, il l'empêche d'être utilisé involontairement de l'extérieur.
En définissant une classe, vous pouvez créer autant d'instances que vous le souhaitez. Puisque l'utilisateur appelle le sous-programme en spécifiant l'instance, il est possible de spécifier quelle instance doit être traitée.
Le polymorphisme signifie "se transformer en diverses formes".
Le sous-programme est un mécanisme pour normaliser la logique du côté appelé, tandis que le polymorphisme est un mécanisme pour normaliser le côté appelant.
Plus précisément, jetons un œil à l'exemple suivant. Avec le mécanisme de polymorphisme, vous pouvez utiliser GetNameCount ()
et Special Attack ()
pour Human
et Monster
. De plus, si de nouvelles créatures sont ajoutées, ces méthodes n'ont pas du tout besoin d'être modifiées.
hoge.cs
//Compter les noms
public int GetNameCount(Creature creature)
{
return creature.GetName().Length;
}
//Tout le monde attaque spéciale!
public void AllSpecialAttack(IEnumerable<Creature> creatures)
{
foreach (var creature in creatures)
{
creature.SpecialAttack();
}
}
C'est un mécanisme pour créer une autre classe en collectant les points communs des classes de personnes similaires (bien que cela ait été aperçu dans l'exemple du polymorphisme). En d'autres termes, vous pouvez éliminer la duplication de code.
Des programmes tels que Java et C # ont fourni des fonctionnalités encore plus avancées. Des exemples typiques sont les "packages", les "exceptions" et les "garbage collections".
C'est un mécanisme pour organiser les classes, comme un dossier. Il est également possible de créer une structure hiérarchique en imbriquant des packages.
C'est un mécanisme qui renvoie une erreur spéciale de la méthode sous une forme différente de la valeur de retour. Les exceptions sont souvent utilisées pour les «échecs de réseau», «échecs d'accès au disque», «blocage de la base de données», etc. Dans le passé, la méthode d'utilisation d'un code d'erreur était courante, mais il y avait les problèmes suivants.
--Il est nécessaire que l'application effectue un traitement de détermination de code d'erreur. Si vous oubliez d'écrire le processus de jugement, il sera difficile d'identifier la cause lorsqu'un bug survient.
Dans le cas d'une exception, si vous oubliez d'écrire le post-traitement (catch) de l'exception, une erreur d'exécution se produira. De plus, pour les méthodes qui ne nécessitent pas de post-traitement, il vous suffit de déclarer qu'une exception se produira. Le mécanisme d'exception a deux effets: éliminer les déchets et éviter les erreurs.
C'est un mécanisme qui supprime automatiquement les instances inutiles et libère de la mémoire. Il est inclus dans Java et C #. Si vous ne disposez pas d'un garbage collection, vous devez libérer explicitement la mémoire. Si vous supprimez accidentellement l'instance requise, cela conduira à un bogue, et si vous oubliez de la supprimer, cela entraînera une fuite de mémoire. Le Garbage Collection peut vous aider dans ce domaine.
L'orientation objet a engendré deux technologies de réutilisation. C'est la «réutilisation des logiciels» et la «réutilisation des idées».
C'est une collection de classes avec des fonctions générales. Dans les langages de programmation traditionnels, la seule partie réutilisable était un sous-programme, mais l'orientation objet vous permet de:
--Créez une instance à partir d'une classe dans la bibliothèque et utilisez des méthodes et des variables. ···classe --Remplacez la logique appelée depuis la bibliothèque par un traitement spécifique à l'application. ・ ・ ・ Polymorphisme --Créez une nouvelle classe à partir de la classe de bibliothèque et ajoutez des méthodes et des variables. ・ ・ ・ Héritage
Ce sera une image d'un produit semi-fini de l'application. Il est utilisé pour appeler une application depuis le framework, par opposition à une bibliothèque. Le flux de base est fourni par le framework et l'application incorpore son propre traitement.
C'est une collection de bonnes idées de design. Créé par ** Eric (Erich) Gamma **, ** Richard Helm **, ** Ralph Johnson **, ** John Brisidis **. Ils s'appelaient ** GoF ** et les 23 modèles de conception qu'ils ont élaborés s'appelaient ** Modèles de conception GoF **. Voir ci-dessous pour plus d'informations sur les modèles de conception du GoF.
UML est utilisé pour représenter des structures et des comportements de programme orientés objet. Il convient au cerveau humain car il capture visuellement une figure en deux dimensions. En bref, UML est un ** outil de visualisation de logiciels immatériels **. Les diagrammes typiques incluent le ** diagramme de classes **, le ** diagramme de séquence ** et le ** diagramme de communication **. * L'explication détaillée de chaque figure est omise ici. Dans le développement de logiciels, il est utilisé dans la conception.
Les informations qui ne peuvent pas être exprimées de manière orientée objet sont également exprimées en UML. Les diagrammes typiques incluent ** diagrammes de cas d'utilisation **, ** diagrammes d'activité ** et ** diagrammes de machine d'état **. * L'explication détaillée de chaque figure est omise ici. En développement logiciel, il est utilisé pour l'analyse commerciale (organisation du travail dans le monde réel) et la définition des exigences (détermination de la gamme de travail à confier à l'ordinateur).
Le langage naturel est utilisé pour la communication entre les humains et le langage informatique est utilisé pour les humains pour donner des commandes aux ordinateurs. Puisque les langages naturels et les langages informatiques sont exprimés à l'aide de lettres, les expressions sont compliquées et la quantité est énorme. D'autre part, UML est exprimé à l'aide de diagrammes, de sorte qu'il peut être compris de manière intuitive. UML est également un langage qui compense les lacunes des langages naturels et informatiques. Par conséquent, n'essayez pas de tout exprimer en UML, n'hésitez pas à l'utiliser comme un moyen de communication!
Les points clés pour créer un logiciel facile à entretenir et à réutiliser sont les suivants.
Plus il y a de doublons, plus il est difficile de comprendre, de modifier et de tester le programme. Les doublons ont tendance à entraîner davantage de copier-coller. En d'autres termes, soyez prudent si vous avez beaucoup de copies. Des précautions doivent être prises pour éviter les doubles emplois pendant la phase de conception.
L'astuce pour rendre les choses complexes plus faciles à comprendre est de «diviser». Un degré élevé d'indépendance rend la fonction de la pièce plus claire et plus facile à comprendre. L'idée d'augmenter l'indépendance est la suivante.
** Agrégation ** Indique le degré de cohésion des fonctions. Plus la conception est solide, meilleure est la conception.
** Degré de couplage ** Indique le degré de connexion entre les pièces. Plus la conception est faible, meilleure est la conception.
Voici quelques conseils pour accroître votre indépendance.
Les dépendances se produisent lorsqu'une partie en utilise une autre. Aucun des exemples ci-dessous ne peut être compilé indépendamment. De plus, si vous modifiez l'un d'entre eux, vous devez vérifier tous les autres composants.
Dans l'exemple ci-dessous, le «composant C» peut être utilisé seul. De plus, si vous utilisez "Composant A", vous n'avez pas besoin de vérifier les autres composants.
Je suis le genre de personne qui a appris l'orientation objet à travers le projet, donc ce livre m'a aidé à organiser les bases. Dans le livre, la mémoire et le processus de développement sont également décrits d'une manière facile à comprendre, mais je voulais en faire un article séparé, alors je l'ai omis ici. Si vous êtes intéressé par l'orientation des objets, veuillez consulter les livres.
J'espère également que vous pourrez également lire les articles suivants dans la même série de raisons.
Recommended Posts