[Java] Eine Klasse ist ein Betriebssystem und eine Instanz ist ein virtueller Computer.

0. Das "neue Konzept" der Objektorientierung

Es ist schwieriger als Sie denken, Java jedem beizubringen, der neu in der Programmierung ist und nur Erfahrung mit dem Codieren mit C hat. (Angenommen, eine Informationsuniversität. Es scheint, dass Sie häufig C im ersten Jahr und Java im zweiten Jahr machen.) </ Sub> </ sub> Auf die Frage "Was ist eine Klasse?" Erkläre ich, dass sie "objektorientiert" ist. Was wäre, wenn Sie gefragt würden: "Was ist Objektorientierung?"

"Es gibt verschiedene Monogoto auf der Welt, und Monogoto hat einen Zustand und ein Verhalten. Daher sammeln wir für verschiedene Monogotos Zustände und Verhaltensweisen und codieren sie in der Klasse. Das ist objektorientiert. " Die andere Partei kann überzeugt sein. Die andere Partei kann jedoch durch die folgende Erklärung von "Kapselung" und "Vererbung" verwirrt sein. Wenn Sie plötzlich lernen, "Zustände und Verhaltensweisen zu sammeln, um Monogoto auszudrücken", lernen Sie, "den Zustand auf Verhalten zu beschränken" und "konkretes Monogoto, um abstraktes Monogoto zu zeigen". Es gibt viele. Es wäre "Schmerz" für diejenigen, die "eher Praxis als Theorie" sind. Auf diese Weise scheint es kein Ende für die Anzahl der Personen zu geben, die nicht gut in objektorientierter Codierung sind und sich vom Programmierbereich entfernen.

Die wahre Natur von "Schmerz" ist, dass "was objektorientiert ist, das heißt was" nicht in einem Wort erklärt wird.

Es ist Spekulation, aber die Leute denken an neue Konzepte, indem sie sie mit bestehenden vergleichen, und lernen den Fehlerteil durch Übung. In Laputa, einer Burg am Himmel, folgen die Hauptfiguren Pazu und Theta dem Regierungsflugzeug Goliath, um die legendäre Insel Laputa zu entdecken, die am Himmel schwebt, und sie verlieren Goliath fast aus den Augen. Zu dieser Zeit versucht die Mitarbeiterin Dora, die Jagd mit einem Drachen fortzusetzen, der als "Uhrenständer" bezeichnet wird. Zu diesem Zeitpunkt wird Pazu wie folgt angewiesen.

Sie können lernen, wie man mit Ihrem Körper fliegt (einen Drachen)!

Obwohl es eine Szene ist, in der die Tapferkeit von Pazu, der seine lebensbedrohliche Unvernünftigkeit ohne Schwierigkeiten bewältigt, auffällt, Dora unterrichtete Pazu nicht ohne nachzudenken. Vor Goliaths Schwanz setzte Dora mit Pazu ein kleines Boot zu Thetas Aufenthaltsort auf, um Theta zu retten, der halb bedrohlich war und zur Regierung gebracht wurde. Zu diesem Zeitpunkt fiel Dora aufgrund der Auswirkungen des Unfalls in Ohnmacht und das kleine Boot war kurz vor dem Absturz, aber Pazu übernahm plötzlich das Manöver und starb bei neun Todesfällen. Die Anweisungen zum Manövrieren des Drachens (neues Konzept) hätten Pazu's Erfolgsbilanz beim richtigen Manövrieren kleiner Boote (bestehendes Konzept) in extrem angespannten Situationen erwartet.

Ist die Objektorientierung nicht gleich? Wenn Sie die Objektorientierung mit etwas vergleichen, das jeder kennt, und der Unterschied darin besteht, dass jede Person basierend auf der Praxis lernt. Zumindest ist es besser, als das Bild nicht erfassen und sogar die Hände bewegen zu können. In diesem Artikel werde ich die Java-Programmierung und Objektorientierung mit diesem Ansatz erläutern.

Wenn Sie schließlich zur Definition von "Was ist ein Programm" und "Was ist ein Computer (oder ein Computer)" zurückkehren, ** Es kann logisch bewiesen werden, dass die Klasse ein "Programm ist, das einen Computer konfigurieren kann" und dass die Instanz ein Computer ist **.

1. Java ist "eine Sprache, die" virtuelle Computer "erstellt"

** Um eine Klasse in einem Wort zu beschreiben, handelt es sich um ein "Programm, das einen Computer konfigurieren kann". ** ** ** Dies kann logisch bewiesen werden.

Ebenso kann nachgewiesen werden, dass * eine Instanz ein "virtueller Computer" * ist.

1-1. Beweis, dass die Klasse ein "Programm ist, das einen Computer konfigurieren kann"

Erstens die drei Elemente des Programms in Boehm-Yakopnis Theorem [1] "Sequential", "Iteration" und "Branch" können alle mit den Methoden in der Klasse durchgeführt werden. Natürlich können ** Methoden auch als Programme ** bezeichnet werden. Leider hat die Methode keinen "Speicher". (Jabashi: Eine "lokale Variable", die nur innerhalb einer Methode gültig ist, kann nicht als "gespeichert" bezeichnet werden, da sie am Ende der Methode abläuft.) </ sub> Daher ist es nicht möglich, einen "Header" in der Turing-Maschine zu erstellen [2]. ** Methoden können Programme sein, aber keine Computer **. In dieser Hinsicht hat eine Klasse ein "Feld" (in einer anderen Sprache als Java als "Eigenschaft" bezeichnet), das als Speicherbereich verwendet werden kann. ** Klassen können Computer bauen **. (Ende der Zertifizierung) Mit anderen Worten, eine Klasse ist eine Konstruktionszeichnung eines Computers.

1-2 Beweis, dass die Instanz ein "virtueller Computer" ist

Die Klasse selbst ist ein Typ zum Erstellen einer "Entität", die als Instanz bezeichnet wird. Weil die Instanz basierend auf der Konstruktionszeichnung namens class erstellt wird Eine Instanz ist "etwas, das auf der Grundlage einer Konstruktionszeichnung erstellt wurde, die als Klasse bezeichnet wird." Wenden wir an, was wir hier in Abschnitt 1-1 bewiesen haben. Was ist eine Instanz? "Etwas, das auf einer Konstruktionszeichnung namens" Computer-Konstruktionszeichnung "basiert." Ist. Es ist ein Computer (wenn gemäß der Konstruktionszeichnung hergestellt). (Ende der Zertifizierung)

2. Erstellen Sie ein Betriebssystem und einen virtuellen Computer und spielen Sie

Ab Kapitel 1 ist eine Klasse ein "Programm, das einen Computer konfigurieren kann". Es stellt sich heraus, dass eine Instanz ein "Computer" ist. Das "Programm, das einen Computer konfigurieren kann" ist genau das Betriebssystem. Es mag seltsam sein, aber jedes Mal, wenn Sie mit Java programmieren, erstellt der Programmierer ein Betriebssystem und jedes Mal, wenn Sie "neu" sind, erstellen Sie einen virtuellen Computer.

Betrachten Sie beispielsweise den folgenden Code.

"Windows" Betriebssystem und "Computer" Computer


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);//Erstellen eines Computers mit 64 Byte RAM
    int i=0;
    for(char each_char : "hello world".toCharArray())
        computer.setRam(i++, (byte)each_char);
        //0~Schreiben Sie "Hallo Welt" an Adresse 10

    for(int j=0; j<11; j++)
        System.out.print((char)computer.getRam(j));
        //0~Adresse 10(Als char)Anzeige
        //→ "Hallo Welt" wird auf der Konsole angezeigt.
}}

Dieser Code definiert Mindows OS, erstellt einen virtuellen Computer "Computer", der dieses Betriebssystem enthält. Sie manipulieren RAM. Es ist das Betriebssystem (Klasse), das definiert, was mit dem "Computer" (Instanz) getan werden kann, aber das Betriebssystem führt nichts direkt aus, und die eigentliche Betriebseinheit ist der "Computer" (Instanz). Gibt es.

Außerdem Erstellen Sie ein ROM mit dem letzten konstanten Feld. Erstellen Sie ein BIOS mit der endgültigen Methode Es ist denkbar, Speicher mithilfe der Datei-Eingabe- / Ausgabefunktion zu haben.

3. Denken Sie, indem Sie sich auf das "tatsächliche" von Java anwenden

3-1. ArrayList-Klasse

Eine Instanz vom Typ "ArrayList " ist ein virtueller Computer, der Objekte vom Typ "T" in der angegebenen Reihenfolge im Speicherbereich speichern kann.

3-2. Listenschnittstelle

Die Schnittstelle "List " ist nur eine "Deklaration" des Programms, das das Objekt vom Typ "T" im Speicherbereich speichert. ** Es kann gesagt werden, dass es "grob" bestimmt, wie der Speicherbereich verwendet wird **. ArrayList und LinkedList implementieren diese Schnittstelle. Diese Tatsache bedeutet, dass "ArrayList " und "LinkedList " deklarieren, dass "der Speicherbereich zum Speichern von Objekten vom Typ" T "verwendet wird". Die Klasse word ... </ sub> </ sub>, die die Schnittstelle implementiert, muss die in der Schnittstelle definierten leeren Methoden überladen und spezifisch definieren. ... </ sub> </ sub> ausführen

Die Deklaration durch die Schnittstelle ist leicht zu verstehen, wenn Sie sich ein Haushaltsgerät vorstellen. Reiskocher und Waschmaschinen (und Staubsauger in dieser Zeit) können alle als Computer bezeichnet werden. Der Reiskocher berechnet die Härte und Restzeit von gekochtem Reis aus dem Gewicht von Reis und Wasser. Es gibt auch Szenen, in denen die Waschmaschine eine automatische Entscheidung trifft. Sie können den Staubsauger sehen, indem Sie sich Rumba ansehen. Es ist wichtig, klar anzugeben, ob es sich bei der Klasse (Programm), die Sie erstellen möchten, um einen Reiskocher, eine Waschmaschine oder einen Staubsauger handelt. In einigen Fällen kann man sagen: "Nur die Klasse, die eine bestimmte Schnittstelle implementiert, darf diese speziell verwenden." (Zum Beispiel eine Ausnahmeklasse.)

3-3 Kapselung

"Ich möchte dem Kunden die Schaltung im Computer nicht zeigen" - das ist die Kapselung. Schauen wir uns noch einmal den in Kapitel 2 gezeigten Code an. Beim Schreiben in den RAM von "Computer" rufe ich absichtlich eine Methode namens "setRam (Adresse, zu schreibender Wert)" auf. Auch wenn ich das nicht tue, ist "ram [address] = value to write" nutzlos? Natürlich ist das im Prinzip in Ordnung, aber es ist tatsächlich schwieriger zu tun. Die "Mindows" -Entwickler haben "setRam (Adresse, Wert zum Schreiben)" als Funktion zum Schreiben in den Speicher erstellt, aber sie haben den Speicher selbst nicht verfügbar gemacht. Der eigentliche Computer fügt den Zugriffsmodifikator "privat" in den Java-Code ein, sodass der Speicher im Bügeleisen gesperrt ist. Auf diese Weise ** wird der Speicherbereich vom Benutzer nicht manipuliert ** und die Möglichkeit einer Fehlfunktion wird verringert.

4. Objektorientierte Programmierung ist möglich, wenn Betriebssystem und Computer frei erstellt werden können.

Leider kann das Betriebssystem nicht immer als Klasse angesehen werden. Dies liegt daran, dass es (oder die meisten) Betriebssysteme Konzepte gibt, die Klassen nicht haben. (Beispiel: Multitask-Betriebssystem, virtueller Speicher usw. Wenn Sie über Uhr und CPU nachdenken müssen, ist es (praktisch) schwierig, dies in einer Klasse auszudrücken.) Nennen wir daher das Betriebssystem, das eine Klasse ausdrücken kann, "Klassenbetriebssystem" und den Computer, der eine Instanz ausdrücken kann, "Instanzcomputer" oder "Computer des Klassenbetriebssystems".

Im Gegenteil, es gibt kein Betriebssystem, das keines der Konzepte der Klasse enthält (nur Felder und Methoden). (Aus dem Beweis hervorgeht, dass eine Klasse als Betriebssystem betrachtet werden kann)

** In einer Umgebung, in der Sie ein Betriebssystem frei entwerfen und einen virtuellen Computer generieren und verwenden können, der dieses Betriebssystem enthält, ist eine objektorientierte Entwicklung zumindest teilweise möglich **. (Nennen wir es den "semi-objektorientierten Satz") Dies ist nicht überraschend, da jedes Betriebssystem alle Konzepte von Klassen hat. Wenn ein Fehler auftritt, ist es einfach, den Fehler zu identifizieren, da es ausreicht, zu bestätigen, auf welchem Computer (OS) ein Problem auftritt, und flexibel auf Änderungen der Spezifikationen reagieren kann. Die Kapselung kann jedoch nicht ohne einen Zugriffsbeschränkungsmechanismus verwendet werden, und eine Vererbung ist ohne einen Kopiermechanismus nicht möglich.

<! - Implementierung von privaten Feldern mit md5->

n. Referenz

[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] Eine Klasse ist ein Betriebssystem und eine Instanz ist ein virtueller Computer.
Was ist eine Klasse in der Java-Sprache (3 /?)
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
So überprüfen Sie, ob eine Instanzvariable in einer Ruby-Klasse definiert ist
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
[Java Silver] Was sind Klassenvariablen, Instanzvariablen und lokale Variablen?
[Ruby] Bezieht sich self auf eine Klasse oder eine Instanz?
Was ist eine Wrapper-Klasse?
Über Java-Instanzen
Was ist die LocalDateTime-Klasse? [Java-Anfänger] -Datum und Zeitklasse-
Definition und Instanziierung von Java-Klassen
Was ist eine Java-Sammlung?
[Ruby] Was ist eine Instanz?
Unterschied zwischen Klasse und Instanz
Was ist der Unterschied zwischen einer Aktion und einer Instanzmethode?
[Java] Was ist Klassenvererbung?
[Java-Grundlagen] Was ist Klasse?
[Java] Einführungsstruktur Klassendefinition Beziehung zwischen Klasse und Instanz Methodendefinitionsformat
Was ist der Unterschied zwischen einem Webserver und einem Anwendungsserver?
Was ist JVM (Java Virtual Machine)?
Erstellen Sie mit JAVA eine unveränderliche Klasse
Unterschied zwischen Instanzmethode und Klassenmethode
Wie langsam ist Javas Scanner?
Unterschied zwischen Instanzvariable und Klassenvariable
[Java] Deklarieren und initialisieren Sie ein Array
StringBuffer- und StringBuilder-Klasse in Java
Java Calendar ist kein Singleton.
Was ist ein Lambda-Ausdruck (Java)
[Java] Bedingte Verzweigung ist eine if-Anweisung, es gibt jedoch auch einen bedingten Operator.
Aktivitätsübergang mit JAVA-Klassen-Refactoring und Instanz-Experimentieren auf Android-Seite
Ich habe eine Klasse erstellt, die JUMAN und KNP aus Java verwenden kann
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
Ubuntu 18 ist das Betriebssystem, das einer Serverinstanz in der Sakura-Cloud eine Netzwerkkarte hinzufügt und eine lokale IP zuweist.
[Java] Erstellen und Anwenden eines Folienmasters
Ein Blick auf Jenkins, OpenJDK 8 und Java 11
Was ist Java und Entwicklungsumgebung (MAC)
Warum nennt Java eine Datei eine Klasse?
Ein Java-Ingenieur verglich Swift, Kotlin und Java.
Java-Programmierung (statische Klausel und "Klassenvariablen")
Erstellen einer Matrixklasse in Java Teil 1
[Java] Instanzmethode, Instanzfeld, Klassenmethode, Klassenfeld, Konstruktorzusammenfassung
[Java] Unterschied zwischen gleich und == in einer Zeichenfolge, die ein Referenztyp ist
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
Bei Verwendung einer Liste in Java wird java.awt.List ausgegeben und ein Fehler tritt auf