[GO] Modèle de conception qui commence par "Je peux le faire à cause des spécifications du langage" ①-Bases-

Au début

Diverses personnes ont écrit des articles sur les modèles de conception du GoF et j'étudie toujours. Cependant, d'un autre côté, ces articles s'adressent à des personnes de haut niveau telles que «Il y a de tels avantages à concevoir cette classe» et «La méthode conventionnelle pose de tels problèmes», ceux qui peuvent partager les hypothèses dans une certaine mesure. J'ai eu l'impression que c'était un article pour, et en premier lieu, les débutants comme moi ne comprennent pas: "Je peux écrire comme ça à cause des spécifications du langage", "Si vous concevez une classe comme celle-ci, le programme fonctionnera comme ça" Je ne pense pas pouvoir trouver un article qui se concentre sur "ce qui peut être fait en premier".

Donc, cette fois, j'ai utilisé Design pattern appris en langage Java comme thème, et d'abord conçu du point de vue de "Java peut le faire grâce aux spécifications du langage". Regardons le modèle.

C'est une longue introduction, mais commençons. Connaissances de base (1) Types de variables Les variables gérées dans le modèle de conception du GoF peuvent être grossièrement divisées en les trois types suivants. De plus, les avantages et inconvénients de chacun sont considérés comme suit. Avantages de l'utilisation des variables デC'est une longue introduction, mais commençons. Connaissances de base (1) Types de variables Les variables gérées dans le modèle de conception du GoF peuvent être grossièrement divisées en les trois types suivants. De plus, les avantages et inconvénients de chacun sont considérés comme suit. Avantages de l'utilisation des variables
Type entier (int,booléen etc.) 8 8 8
Classe officielle ou type de base
(double,Chaîne etc.)
5 6 3
Cours sur mesure 2 3 3

Connaissances de base ② Comment gérer les variables

Il existe quatre façons de gérer les variables dans une méthode: La plage qui peut être manipulée et les points à noter lors de la manipulation de chacun sont décrits. En ce qui concerne les points à noter, je pense que cela s'écarte du sujet principal de l'article, mais d'un autre côté, je pense que les mérites du modèle de conception ne seront visibles que si je comprends les caractéristiques, donc je le posterai pour le moment.

Type de variable Gamme maniable point important
Variables locales Dans la méthode C'est l'utilisation la plus recommandée, mais d'un autre côté, si vous sécurisez dynamiquement une grande classe avec du nouveau à chaque fois, le coût de calcul peut augmenter, veuillez donc consulter les performances.
Variables de membre Dans des instances individuelles
staticSi vous ajoutez, toutes les classes seront partagées)
C'est une variable globale dont l'accès est limité, alors ne la créez pas inutilement. Ne réutilisez jamais les variables de compteur.
argument Fonction côté utilisateur Essayez de ne pas changer l'état de la fonction autant que possible (si attaché)const修飾子を付ける).また,複数ステータスを持つような大きなクラスをargumentにするのはなるべくやめましょう.
Valeur de retour Fonction côté utilisateur Comme pour l'argument, ne le renvoyez pas dans une très grande classe.

Connaissances de base ③ Variable membre / modificateur de fonction

Qualificatif Modifiable Comment utiliser
static Variables de membre/une fonction 2
public Variables de membre/une fonction 2
plivate Variables de membre/une fonction 2
protected Variables de membre/une fonction 2
@Override Fonction membre 2
abstract Fonction membre Ah
final Fonction membre Ah

Connaissances de base ④ Modificateur de classe

Qualificatif Position d'insertion Comment utiliser
extends Après la déclaration de classe Il s'agit d'un modificateur pour hériter de la classe suivante extend. est-Soyons conscients de la relation d'un. Une seule classe peut être héritée.
abstract Avant la déclaration de classe Il s'agit d'un modificateur qui vous empêche de créer une instance d'une classe avec abstract. Vous pouvez en hériter sans cela, mais ajoutez-le si nécessaire pour réduire les erreurs.
final Avant la déclaration de classe Les classes avec final ne peuvent pas être héritées. Il n'y a pas de problème si vous n'ajoutez pas ceci, mais ajoutons-le à la toute dernière classe que vous ne voulez pas écraser.
implements Après la déclaration de classe Un modificateur pour implémenter l'interface. pouvez-Soyons conscients de la relation de faire. Contrairement à extend, plusieurs interfaces peuvent être implémentées (héritage multiple).
inteface Au lieu de la déclaration de classe En fait, ce n'est pas un modificateur de classe, mais il est bien arrangé, donc ici. Un type qui peut être écrit à la place de la classe et ne peut définir que des méthodes. La différence avec la classe abstraite est que vous ne pouvez pas définir de variables membres.

Vous pouvez le faire (2) Changement dynamique de méthodes utilisant l'héritage

baseA.java


public class baseA {
	public void func() {}
}

A.java


public class A extends baseA {
	public void func() {System.out.println("A");}
}

A_.java


public class A_ extends baseA {
	public void func() {System.out.println("A_");}
}

Main.java


public class Main {
	public static void main(String[] args) {
		
		baseA a;				
		a = new A();
		a.func();
		
		baseA a_;
		a_= new A_();
		a_.func();
	}
}

Résultat d'exécution


A
A_

Je ne peux pas faire ça ① Appelez une méthode qui n'est pas implémentée dans la classe parent

Mettez en commentaire la func implémentée dans la précédente baseA.

baseA.java


public class baseA {
	//public void func() {}
}

Ensuite, cela compilera, mais

OK.java


A a;				
a.func();

Cela entraînera une erreur de compilation.

NG.java


baseA a;				
a = new A();
a.func();

Depuis lors en cours de création

Désolé, j'ai publié un brouillon en cours de création en raison d'une erreur d'opération. Après vérification, il semble qu'une fois posté, il ne peut plus être rédigé, je vais donc compléter l'article au plus vite. D'ici là, ce sera un désordre pour tout le monde, mais merci pour votre coopération.

Recommended Posts

Modèle de conception qui commence par "Je peux le faire à cause des spécifications du langage" ①-Bases-
Récapitulatif du format des formats qui peuvent être sérialisés avec gensim
J'ai étudié le prétraitement qui peut être fait avec PyCaret
J'ai créé un plug-in qui peut faire "Daruma-san tombé" avec Minecraft