Conception orientée objet tirée de la «capture approfondie de la collecte des problèmes Java SE 11 Silver»

Préface

Je serai impliqué dans un projet Java sur le site auquel je participe actuellement. Cependant, malgré ma 15e année en tant qu'ingénieur, je n'ai traité que des technologies autour de .NET, c'est donc mon premier projet Java. Par conséquent, afin d'apprendre les connaissances de base de Java sur une base zéro, j'ai décidé de commencer à apprendre dans le but d'acquérir Java SE 11 Silver / Gold.

Pour commencer à apprendre, j'ai d'abord acheté Thorough Strategy Java SE 11 Silver Problem Collection (appelé "Kuromoto".

Étant donné que l'explication de la réponse est écrite très soigneusement, j'ai senti que c'était le meilleur matériel pédagogique non seulement pour la préparation aux examens, mais aussi pour l'apprentissage des connaissances de base, mais dans le livre, j'ai dit "Référence (pas directement liée à la préparation aux examens) Cependant, j'ai fait attention à la partie qui dit "C'est une information utile à savoir)".

Même dans la section "référence", il y a des descriptions qui sont très importantes, surtout si vous allez creuser plus profondément dans "orienté objet" à l'avenir, je vais donc les résumer dans cet article.

De P51: Objet immuable

Ceci provient de l'explication du problème lié à l'objet String dans le "Chapitre 2 Types de données Java de base et opérations sur les chaînes". Un exemple d'implémentation d'un "objet immuable" est fourni pour empêcher une modification incorrecte des données. Ce sont des connaissances essentielles pour implémenter "Value Object" dans DDD (Domain Driven Design).

Référence: Bombardement d'une classe à faible agrégation avec ValueObject avec des exigences de conception très strictes

À partir de P203: Plus il y a d'arguments, plus la méthode est difficile

De la réponse à la question sur le nombre d'arguments définis dans la méthode appelante et la déclaration de méthode au "Chapitre 6 Instances et méthodes".

Informations de référence telles que décrites.

Un exemple concret que j'ai vu récemment Introduction à la conception basée sur le domaine de bas en haut! Principes de base de la conception basée sur le domaine Je pense que la stratégie "objet de commande", qui définit l'objet "~ Commande" qui a un argument dans le champ dans l'exemple de code de, est un exemple très facile à comprendre.

Exemple d'objet "~ Command" qui a un argument dans le champ

https://github.com/nrslib/itddd/blob/master/Layered/SnsApplication/Users/Get/UserGetCommand.cs

Exemple de méthode qui appelle l'objet "~ Command"

https://github.com/nrslib/itddd/blob/master/Layered/WebApplication/Controllers/UserController.cs#L36

Dans cet exemple de code, la valeur de retour est également résumée en tant qu'objet «~ Result», de sorte que la conception est simple et résistante aux modifications, ce qui est également utile.

De P220: Encapsulation

De l'explication du problème concernant le concept d'encapsulation dans "Chapitre 6 Instances et méthodes". Le problème ici est: "Le code est présenté et je souhaite lui appliquer une encapsulation. Choisissez le meilleur code parmi les suivants." Par conséquent, la connaissance de «l'encapsulation» est indispensable pour la préparation aux examens, mais elle semble être la même connaissance pour l'orientation objet. L'encapsulation est expliquée comme suit.

L'encapsulation est une «classe pour quoi» en combinant les données liées et le traitement qui nécessite ces données en une seule lors de la division du logiciel, et en excluant de la classe celles qui ne sont pas pertinentes et non pertinentes. Il est fait pour clarifier le but de la classe "Est-ce que c'est?", Et vise un état où il n'y a pas de données en double ou de traitement dans d'autres classes.

L'objet de valeur mentionné ci-dessus n'est qu'une des méthodes pour réaliser «l'encapsulation». Ensuite, pour implémenter l'objet "encapsulé", "masquage de données", en Java, les champs de l'objet sont qualifiés (masqués) par private, et la méthode utilisant la valeur du champ est rendue publique (publique). , Etc. sont également décrits.

De P244: "Héritage" n'est plus utilisé

De l'explication du problème lié à l'héritage de classe dans "Chapitre 7 Héritage de classe, interface, classe abstraite". L'héritage de classe est une connaissance essentielle des langages orientés objet

Récemment, il a été souligné que l'utilisation de l'héritage est plus susceptible de réduire la maintenabilité.

Il est décrit comme. Le post suivant explique de manière facile à comprendre ce qui se passe si vous essayez d'hériter facilement.

Votre héritage n'est pas utilisé correctement

Le système que vous maintenez a-t-il également une "classe dieu / base" qui implémente de nombreux processus courants tels que "AbstractController" et "AbstractService"?

La méthode d'implémentation peut être plus difficile que l'héritage, mais si vous souhaitez utiliser l'héritage, il peut être la meilleure pratique de la conception moderne orientée objet d'envisager un «transfert» ou une «synthèse».

[Ce que j'ai appris après avoir combattu l'orientation objet pendant 10 ans] (https://qiita.com/tutinoco/items/6952b01e5fc38914ec4e)

À partir de la page 259: le principe de remplacement de Liskov

De l'explication du problème de la substitution de méthode dans "Chapitre 7 Héritage de classe, interface, classe abstraite". Pour référence, le principe selon lequel «les sous-classes doivent être remplaçables par des superclasses» et le «principe de substitution de Liskov (LSV)» sont introduits. Il existe de nombreux autres principes dans l'orientation objet, et il est recommandé de bien étudier ces principes pour une meilleure conception. Des exemples typiques de ces principes sont les cinq principes, le soi-disant «principe SOLID», y compris le «principe de remplacement Riskov».

Le post suivant explique le principe SOLID d'une manière facile à comprendre avec un exemple de code.

Écrivez simplement sur le principe SOLID

À partir de P283: Modèle de conception et modèle de stratégie

Ceci provient de l'explication du problème concernant la méthode de déclaration de base des expressions lambda dans "Chapitre 8 Interface fonctionnelle, Expressions Lambda". Le code lui-même de cette question est une réalisation du modèle de stratégie à l'aide d'une expression lambda, à partir de laquelle le modèle de conception du GoF est introduit et le modèle de stratégie est expliqué.

En parlant de Java et des modèles de conception, c'est déjà une publication vieille de 15 ans. Introduction aux modèles de conception appris en langage Java Je me suis souvenu. À ce moment-là, je n'avais pas affaire à Java, mais les exemples d'implémentation de modèles de conception étaient publiés avec des exemples de code, ce qui était une excellente expérience d'apprentissage. Des critiques bien notées ont été publiées sur les critiques d'Amazon au cours des 1 à 2 dernières années, il semble donc qu'elles soient toujours considérées comme des chefs-d'œuvre.

Résumé

Comme mentionné ci-dessus, je l'ai résumé sous une forme qui sera un supplément pour en apprendre plus sur la conception orientée objet à partir des informations de «référence» de «Thorough Strategy Java SE 11 Silver Problem Collection». Nous espérons que les débutants en Java et en programmation (ou même les vétérans?) Qui ont lu ce recueil de questions pourront venir à cet article et en savoir plus sur l'orientation objet.

Recommended Posts

Conception orientée objet tirée de la «capture approfondie de la collecte des problèmes Java SE 11 Silver»
Importance de l'interface apprise de la collection Java
Java SE8 Silver réussi
[java] Java SE 8 Silver Note
Ce que vous avez appris lors de l'acquisition de Java SE 8 Silver and Gold
[Expérience] Java SE 8 Silver réussi
Expérience de passage Java SE8 Silver
Comment étudier Java Silver SE 8
Programmation orientée objet apprise de Dragonball
[Note] Qualification Java Silver SE 8 acquise
En route vers l'acquisition de Java SE 11 Silver
Ce que j'ai appris avec Java Silver
Agenda pour la qualification Java SE 8 Silver
[Qualification] Expérience de réussite Java Silver SE11