[JAVA] Résumé des "différences d'interface abstraites"

«La conclusion est la suivante.

  1. résumé a été utilisé pour économiser de la mémoire. Cependant, le degré de liberté était trop élevé, et c'est devenu une opportunité de fournir une interface.
  2. L'interface a été créée pour fournir le polymorphisme (celui qui implémente ArrayList ou LinkedList).
  3. L'interface par défaut a été créée pour répondre à la loi de Moore.

Comment le résumé a été fourni

Tout d'abord, je vais expliquer la fonction d'héritage à partir de l'histoire de base. (Je suis désolé si vous le savez.)

Les programmes plus anciens avaient peu de valeur commerciale et n'avaient que de petits développements. À partir de là, c'est devenu un développement à grande échelle, et il y avait un problème que nous voulions rendre le code à grande échelle plus facile à lire et manquait également de mémoire. Donc, en essayant d'économiser de la mémoire, je veux une réutilisation ou une abstraction! C'est comme ça que ça va être.

(Reconfirmer le sens de l'abstraction) Par exemple, lorsque nous expliquons aux autres "le baseball, le football, le tennis, etc. sont amusants!", En un mot, "les sports sont amusants!"

Dans l'ancien temps, la programmation n'avait pas le pouvoir (l'abstraction) de rassembler de telles significations en double. C'est là que le résumé orienté objet (Java), qui peut également exprimer la classe parent (abstract), est entré en jeu. (Il n'y avait pas d'interface à ce moment-là.)

Le résumé était si flexible qu'il était difficile à lire. La méthode (fonction) et la variable globale (état) sont sorties, et elles n'ont pas été intuitivement comprises. Eh bien, je pourrais toujours l'utiliser.

Comment l'interface a été fournie

À un moment donné, il y a eu une demande de développement orienté objet utilisant abstrait. Je veux le faire avec le polymorphisme. Et je veux faciliter la lecture en définissant un peu plus de restrictions.

En parlant de polymorphisme, c'est un type List. Par exemple, vous voulez que le type List puisse gérer à la fois ArrayList et LinkedList, et vous voulez pouvoir gérer .size () et .add () avec n'importe quel type.

Si vous pouvez gérer les relations d'héritage à de telles fins, écrivez-les soigneusement dans l'interface pour les rendre plus faciles à lire! L'interface a donc été fournie à Java.

Comment l'interface par défaut a été fournie La racine de la "différence d'interface abstraite"

Au fil du temps, il est devenu Java8 et l'interface elle-même avait des fonctions. C'est la fonction par défaut. Je suis sûr que cette histoire est un problème dont je ne comprends pas vraiment la différence entre l'abstrait et l'interface.

La raison pour laquelle cette fonction par défaut a été fournie est différente de la demande d'abstraction jusqu'à présent. Je pense que c'était une mesure contraire à la loi de Moore. Il y avait une demande de parallélisation approfondie parce que nous voulions économiser autant que possible les ressources des semi-conducteurs existants afin d'être en mesure de faire face au problème de pénurie de ressources autant que possible.

Par conséquent, une API de flux a été créée pour rendre le traitement parallèle facile et sûr, et une simple expression lambda a été introduite car elle est difficile à comprendre car elle est pleine de classes anonymes.

En d'autres termes, default a été créé pour fournir une API de flux pour les contre-mesures d'effondrement de la loi de Moore, il n'y a donc actuellement aucune règle selon laquelle la valeur par défaut peut être utilisée librement.

Résumé

Comment utiliser default est fondamentalement une fonction requise pour l'expression API / lambda de flux, et je n'étais pas sûr de pouvoir utiliser la fonction par défaut librement. Ce sera bien d'attendre un moment.

À part 1

Vous ne pouvez pas hériter de plusieurs résumés comme l'interface. Il semble qu'il existe également une histoire de création d'une autre interface de fonction d'abstraction, car elle souhaite hériter plusieurs fois. (Si l'héritage multiple est possible, il sera difficile de suivre les bogues, et il semble que dans le passé, on disait que c'était une personne interdite ou une boîte de Pandore et qu'on s'y opposait.)

Autre histoire orientée objet

L'ordinateur est un passe-temps ↓ Les ordinateurs sont une source d'affaires! ↓ Les ordinateurs sont une excellente industrie! Je veux gérer la programmation à plus grande échelle! Au moins, je veux que la programmation ait une fonction d'abstraction! Donc je veux aussi économiser de la mémoire! ↓ Java haute performance émerge. Un résumé est également fourni. ↓ Il est difficile de lire un résumé. Je veux aussi du polymorphisme. ↓ Fournir une interface ↓ La loi de Moore est en danger ...? Je ne peux pas rire ... Saya! Puisque nous voulons gérer efficacement les ressources de semi-conducteurs existantes, fournissons une fonction qui nous permet d'écrire un traitement parallèle approfondi de manière concise! ↓ Fournir une API de flux ou une expression lambda

Je pense que c'était comme ça.

Coin QA

Q. Quel est le but de la fonction de coercition de la réification (remplacement)?

A. Si vous voulez faire abstraction des choses, vous devez incarner le contraire. Par exemple, lorsque vous essayez de mettre en œuvre "jouer avec le baseball", "jouer avec le football" et "jouer avec le tennis"

(Langage fictif)

abstract sports
do (play with ??)

Je pense qu'il sera conçu. N'est-il pas plus facile de forcer cette réification à chaque fois?

@Override
do (play with "baseball")
@Override
do (play with "soccer")
@Override
do (play with "tennis")

Je pense que ce sera. Donc, la réponse à votre question est: "Je voulais concevoir avec abstraction, donc c'était facile d'avoir une fonction concrète."

Recommended Posts

Résumé des "différences d'interface abstraites"
interface et résumé
Utilisation correcte de l'interface et de la classe abstraite
Résumé des sources OpenJDK
vue d'ensemble du fichier jar
Résumé sur la sécurité de l'information
Résumé de l'utilisation de FragmentArgs
Résumé de l'utilisation de DBFlow
Résumé du support Java 2018
Interface / classe abstraite / remplacement
Utilisation correcte de la classe abstraite et de l'interface en Java
Résumé d'héritage avancé, interface -java
Résumé de FileInputStream et BufferedInputStream
[Java11] Résumé du flux -Avantages du flux-
Résumé de l'utilisation de ButterKnife
[Java] Résumé des opérateurs (opérateur)
Résumé des bases du langage Java
Résumé de la classe Java Math
Résumé des fonctions de base d'ImageJ
[Java] Résumé de la syntaxe de contrôle
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Résumé des opérations mathématiques
Différence entre interface et classe abstraite
Spring Framework 5.0 Résumé des principaux changements
[Pour les débutants] Résumé du constructeur java
Résumé du package [Java Silver Study]
[Rails] Résumé de la configuration de routage compliquée
Résumé de l'état initial du contrôleur de l'appareil
Résumé des commandes Docker fréquemment utilisées
[Rails] Différences et utilisation de each_with_index et each.with_index
Résumé de la programmation orientée objet utilisant Java