[Java] Une classe est un système d'exploitation et une instance est un ordinateur virtuel.

0. "Nouveau concept" d'orientation des objets

Il est plus difficile que vous ne le pensez d'enseigner Java à quiconque est nouveau dans la programmation et n'a l'expérience du codage qu'avec C. (En supposant une université d'information. Il semble que vous faites souvent C la première année et Java la deuxième année.) </ Sub> </ sub> Lorsqu'on me demande "Qu'est-ce qu'une classe?", J'explique qu'elle est "orientée objet". Et si on vous demandait "Qu'est-ce que l'orientation objet?"

«Il existe différents monogoto dans le monde, et monogoto a un état et un comportement. Par conséquent, pour divers monogoto, nous collectons des états et des comportements et les codons dans la classe. Ceci est orienté objet. " L'autre partie peut être convaincue. Cependant, l'autre partie peut être déconcertée par l'explication des termes «encapsulation» et «héritage» qui suit. Si vous avez soudainement appris que "collecter des états et des comportements pour exprimer monogoto", alors vous devez vous rappeler que "confiner l'état dans le comportement" et "monogoto concret est un monogoto abstrait". Il y a beaucoup de. Ce serait de la «douleur» pour ceux qui sont «la pratique plutôt que la théorie». De cette façon, il semble qu'il n'y ait pas de fin au nombre de personnes qui ne sont pas douées pour le codage orienté objet et s'éloignent de la zone de programmation.

La vraie nature de la «douleur» est que «ce qui est orienté objet, c'est-à-dire ce» n'est pas expliqué en un mot.

C'est de la spéculation, mais les gens pensent à de nouveaux concepts en les comparant à des concepts existants et apprennent l'erreur par la pratique. À Laputa, un château dans le ciel, les personnages principaux Pazu et Theta suivent l'avion gouvernemental Goliath pour découvrir la légendaire île Laputa flottant dans le ciel, et ils perdent presque de vue Goliath. À ce moment-là, la collaboratrice Dora tente de continuer la poursuite en utilisant un cerf-volant appelé «stand de montre». À ce moment, Pazu reçoit les instructions suivantes.

Vous pouvez apprendre à voler (un cerf-volant) avec votre corps!

Bien que ce soit une scène où se distingue la bravoure de Pazu qui gère sans difficulté son caractère déraisonnable mettant sa vie en danger, Dora n'a pas instruit Pazu sans réfléchir. Avant la queue de Goliath, Dora a mis un petit bateau sur les allées et venues de Theta avec Pazu pour sauver Theta, qui était à moitié menaçante et emmenée au gouvernement. À ce moment-là, Dora s'est évanouie en raison de l'impact de l'accident et le petit bateau était sur le point de s'écraser, mais Pazu a soudainement repris la manœuvre et il est mort dans neuf morts. Les instructions pour manoeuvrer le cerf-volant (nouveau concept) auraient attendu le palmarès de Pazu de manoeuvrer correctement de petits bateaux (concept existant) dans des situations extrêmement tendues.

L'orientation des objets n'est-elle pas la même? Si vous comparez l'orientation de l'objet avec quelque chose que tout le monde sait, et la différence est que chaque personne apprend en se basant sur la pratique. Au moins, c'est mieux que de ne pas pouvoir saisir l'image et même bouger les mains. Dans cet article, je vais expliquer la programmation Java et l'orientation des objets avec cette approche.

Enfin, si vous revenez à la définition de "qu'est-ce qu'un programme" et "qu'est-ce qu'un ordinateur (ou un ordinateur)" ** Il peut être logiquement prouvé que la classe est un "programme qui peut configurer un ordinateur" et que l'instance est un ordinateur **.

1. Java est "un langage qui crée des" ordinateurs virtuels ""

** Pour décrire une classe en un mot, c'est un "programme qui peut configurer un ordinateur". ** ** Cela peut être prouvé logiquement.

De même, il peut être prouvé que * une instance est un "ordinateur virtuel" *.

1-1. Preuve que la classe est un "programme capable de configurer un ordinateur"

Premièrement, les trois éléments du programme dans le théorème de Boehm-Yakopni [1] «Séquentiel», «itération» et «branche» peuvent tous être effectués avec les méthodes de la classe. Bien entendu, les ** méthodes peuvent aussi être appelées programmes **, Malheureusement, la méthode n'a pas de "stockage". (Jabashi: Une "variable locale" qui n'est valide que dans une méthode ne peut pas être dite "mémorisée" car elle expire à la fin de la méthode) </ sub> Par conséquent, il n'est pas possible de créer un "en-tête" dans la machine de Turing [2]. ** Les méthodes peuvent être des programmes, mais pas des ordinateurs **. À cet égard, une classe a un "champ" (appelé "propriété" dans une langue autre que java), et cela peut être utilisé comme zone de stockage. ** Les classes peuvent construire des ordinateurs **. (Fin de la certification) En d'autres termes, une classe est un dessin de conception d'un ordinateur.

1-2. Preuve que l'instance est un "ordinateur virtuel"

La classe elle-même est un type pour créer une "entité" appelée instance. Parce que l'instance est créée en fonction du dessin de conception appelé classe Une instance est «quelque chose créé à partir d'un dessin de conception appelé classe». En appliquant ce que nous avons prouvé dans la section 1-1 ici, Qu'est-ce qu'une instance? "Quelque chose fait à partir d'un dessin de conception appelé" Dessin de conception par ordinateur "" Est. C'est un ordinateur (s'il est fabriqué selon le dessin de conception). (Fin de la certification)

2. Créez un système d'exploitation et un ordinateur virtuel et jouez

Depuis le chapitre 1, une classe est un "programme qui peut configurer un ordinateur". Il s'avère qu'une instance est un "ordinateur". Le "programme qui peut configurer un ordinateur" est exactement le système d'exploitation. Cela peut être étrange, mais chaque fois que vous programmez avec java, le programmeur crée un système d'exploitation, et chaque fois que vous «nouveau», vous créez un ordinateur virtuel.

Par exemple, considérez le code suivant.

Système d'exploitation «Windows» et ordinateur «ordinateur»


public class Mindows
{
    private byte[] ram;
    public byte getRam(int address){return this.ram[address];}
    public void setRam(int address, byte value){this.ram[address]=value;}
    public Mindows(int ram_size){this.ram = new byte[ram_size];}
}

class Main{ public static void main(String...args)
{
    Mindows computer = new Mindows(64);//Création d'un ordinateur avec 64 octets de RAM
    int i=0;
    for(char each_char : "hello world".toCharArray())
        computer.setRam(i++, (byte)each_char);
        //0~Écrivez "bonjour le monde" à l'adresse 10

    for(int j=0; j<11; j++)
        System.out.print((char)computer.getRam(j));
        //0~Adresse 10(Comme char)afficher
        //→ "hello world" s'affiche sur la console.
}}

Ce code définit Mindows OS, crée un ordinateur virtuel ordinateur qui contient ce système d'exploitation, Vous manipulez la RAM. C'est le système d'exploitation (classe) qui définit ce qui peut être fait en utilisant ordinateur (instance), mais le système d'exploitation ne fait rien directement, et l'entité d'exploitation réelle est l'ordinateur` (instance). y a-t-il.

Mis-à-part, Faire une ROM avec le champ constant final, Créez un BIOS avec la méthode finale Il est envisageable d'avoir du stockage en utilisant la fonction d'entrée / sortie de fichier.

3. Pensez en appliquant au "réel" de java

3-1. Classe ArrayList

Les instances de type ʻArrayList sont des ordinateurs virtuels qui peuvent stocker des objets de type T` dans l'ordre dans la zone de stockage.

3-2. Interface de liste

L'interface List <T> est juste une "déclaration" du programme qui stocke l'objet de type T dans la zone de stockage. ** On peut dire que cela détermine "grossièrement" comment utiliser la zone de stockage **. ʻArrayList et LinkedList " implémentent "cette interface. Ce fait signifie que ʻArrayList <T> etLinkedList <T>déclarent que" la zone de stockage sera utilisée pour stocker des objets de type "T`". La classe word ... </ sub> </ sub> qui implémente l'interface doit surcharger les méthodes vides définies dans l'interface et les définir spécifiquement. ... exécuter </ sub> </ sub>

La déclaration par l'interface est facile à comprendre si vous imaginez un appareil électroménager. Les cuiseurs à riz et les machines à laver (et les aspirateurs à cette époque) peuvent tous être appelés ordinateurs. Le cuiseur à riz calcule la dureté et le temps restant du riz cuit à partir du poids du riz et de l'eau. Il y a aussi des scènes où la machine à laver prend une décision automatique. Vous pouvez voir l'aspirateur en regardant Rumba. Il est important d'indiquer clairement si la classe (programme) que vous vous apprêtez à faire est un cuiseur à riz, une machine à laver ou un aspirateur. Dans certains cas, il est possible de dire: "Seule la classe qui implémente une interface spécifique est autorisée à l'utiliser spécialement." (Par exemple, une classe d'exception.)

3-3. Encapsulation

"Je ne veux pas montrer aux clients les circuits à l'intérieur de l'ordinateur" - c'est l'encapsulation. Jetons à nouveau un coup d'œil au code présenté au chapitre 2. Lors de l'écriture dans la RAM de computer, j'appelle volontairement une méthode appelée setRam (adresse, valeur à écrire). Même si je ne fais pas cela, est-ce que «ram [adresse] = valeur à écrire» est inutile? Bien sûr, c'est bien en principe, mais c'est en fait plus difficile à faire. Les développeurs de "Mindows" ont créé setRam (adresse, valeur à écrire) comme fonction pour écrire en mémoire, mais ils n'ont pas exposé la mémoire elle-même. L'ordinateur actuel place le modificateur d'accès «private» dans le code java afin que la mémoire soit verrouillée à l'intérieur du fer. Ce faisant, ** la zone de stockage n'est pas altérée par l'utilisateur ** et le risque de dysfonctionnement est réduit.

4. La programmation orientée objet est possible si l'OS et l'ordinateur peuvent être librement créés.

Malheureusement, OS ne peut pas toujours être considéré comme une classe. En effet, il existe (ou la plupart) des systèmes d'exploitation qui ont des concepts que les classes n'ont pas. (Exemple: OS multi-tâches, mémoire virtuelle, etc. De plus, si vous devez penser à l'horloge et au processeur, il sera difficile de l'exprimer dans une classe (pratiquement)) Par conséquent, appelons le système d'exploitation qui peut exprimer une classe «OS de classe» et l'ordinateur qui peut exprimer une instance «ordinateur d'instance» ou «ordinateur de classe OS».

Au contraire, il n'y a pas d'OS qui ne possède aucun des concepts de la classe (uniquement des champs et des méthodes). (Clair d'après la preuve qu'une classe peut être considérée comme un OS)

** Dans un environnement où vous pouvez librement concevoir un système d'exploitation et générer et utiliser un ordinateur virtuel contenant ce système d'exploitation, le développement orienté objet est possible au moins partiellement **. (Appelons cela le "théorème orienté semi-objet") Ce n'est pas surprenant car chaque OS a tous les concepts de classes. Lorsqu'une erreur se produit, il est facile de l'identifier car il suffit de confirmer quel ordinateur (OS) a un problème et il est possible de répondre de manière flexible aux modifications de spécification. Cependant, l'encapsulation ne peut pas être utilisée sans mécanisme de restriction d'accès, et l'héritage est impossible sans mécanisme de copie.

<! - Implémentation de champs privés avec md5->

n. Référence

[1]http://s150001.skr.u-ryukyu.ac.jp/lectures/index.php?ProgrammingAbility [2]http://e-words.jp/w/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%9E%E3%82%B7%E3%83%B3.html

Recommended Posts

[Java] Une classe est un système d'exploitation et une instance est un ordinateur virtuel.
Qu'est-ce qu'une classe en langage Java (3 /?)
[Java] Différences entre les variables d'instance et les variables de classe
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
Comment vérifier si une variable d'instance est définie dans une classe Ruby
Ecrire une classe en Kotlin et l'appeler en Java
[Java Silver] Que sont les variables de classe, les variables d'instance et les variables locales?
[Ruby] Est-ce que self fait référence à une classe ou à une instance?
Qu'est-ce qu'une classe wrapper?
À propos des instances Java
Qu'est-ce que la classe LocalDateTime? [Java débutant] -Date et classe d'heure-
Définition et instanciation de classe Java
Qu'est-ce qu'une collection Java?
[Ruby] Qu'est-ce qu'une instance?
Différence entre classe et instance
Quelle est la différence entre une action et une méthode d'instance?
[Java] Qu'est-ce que l'héritage de classe?
[Notions de base Java] Qu'est-ce que la classe?
[Java] Structure d'introduction Définition de classe Relation entre classe et instance Format de définition de méthode
Quelle est la différence entre un serveur Web et un serveur d'applications?
Qu'est-ce que JVM (Java Virtual Machine)?
Créer une classe immuable avec JAVA
Différence entre la méthode d'instance et la méthode de classe
Quelle est la lenteur du scanner Java?
Différence entre la variable d'instance et la variable de classe
[Java] Déclarer et initialiser un tableau
Classe StringBuffer et StringBuilder en Java
Le calendrier Java n'est pas un singleton.
Qu'est-ce qu'une expression lambda (Java)
[Java] Le branchement conditionnel est une instruction if, mais il existe également un opérateur conditionnel.
Transition d'activité avec refactoring de classe JAVA et instance expérimentée côté Android
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
Comment créer une application avec un mécanisme de plug-in [C # et Java]
Ubuntu 18 est le système d'exploitation qui ajoute une carte réseau à une instance de serveur dans le cloud de Sakura et attribue une adresse IP locale.
[Java] Créer et appliquer un masque des diapositives
Un regard sur Jenkins, OpenJDK 8 et Java 11
Qu'est-ce que Java et l'environnement de développement (MAC)
Pourquoi Java appelle-t-il un fichier une classe?
Un ingénieur Java a comparé Swift, Kotlin et Java.
Programmation Java (clause statique et "variables de classe")
Création d'une classe de matrice dans Java Partie 1
[Java] Méthode d'instance, champ d'instance, méthode de classe, champ de classe, résumé du constructeur
[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
Lors de l'utilisation d'une liste en Java, java.awt.List sort et une erreur se produit