10

クラスはオブジェクト指向言語のオブジェクトですか??の名前だけでクラスメソッドにアクセスするにはどうすればよいclass.method nameですか?(内部作業)。これは?と同じobject.methodですか?

そして、クラスがオブジェクトと同じであり(OO内のすべてのもののスーパークラスであるオブジェクトクラスに属している)、それをインスタンス化する(オブジェクトを作成する)場合、オブジェクトクラス以外のクラスのインスタンスのインスタンスを作成できますか?

(実際には必要ない場合でも、主に理論的な観点に関心があります)

4

4 に答える 4

7

まあ、それはあなたが使用している言語に依存します。すべてがオブジェクトである純粋なオブジェクト指向言語(Smalltalkなど)では、クラスも例外ではなく、オブジェクトでもあります。クラスが第一級市民と見なされない他の言語では、それらは単なる特別な言語構造またはプリミティブ型です。これからは、リフレクションのサポートと同種のスタイルにより、Smalltalkをターゲット言語として使用します。

class.method名の名前だけでClassメソッドにアクセスするにはどうすればよいですか?(内部作業)。これはobject.methodと同じですか?

クラスはオブジェクトであるため、クラス(メタクラス)のインスタンスになります。したがって、クラスにメッセージを送信することは、クラスの動作を表す役割を持つオブジェクトにメッセージを送信することです。そこにはたくさんの文献があります、あなたはいくつかの紹介のためにここここで例えば見ることができます。

そして、クラスがオブジェクトと同じであり(OO内のすべてのもののスーパークラスであるオブジェクトクラスに属している)、それをインスタンス化する(オブジェクトを作成する)場合、オブジェクトクラス以外のクラスのインスタンスのインスタンスを作成できますか?

ここであなたをフォローするかどうかはわかりませんが、明確にするためにObject、すべてのクラスのスーパークラスであるとは限りません。問題は、クラスとメタクラスの間の関係を追跡し始めると、一種の無限ループに到達する可能性があるということです。さまざまな言語がさまざまな方法でこれを実行します。たとえば、VisualWorks Smalltalkでは、Objectのサブクラスですnil。それnilはオブジェクトでもあり(すべてがオブジェクトであることを忘れないでください)、実際には「何もない」ことを表しています。ご想像のとおり、nilはクラス()のインスタンスでありUndefinedObject、クラスプロトコルの一部も実装しています。結果として、何も継承されないクラス形式を表すために使用できます:)。

最後に、これがあなたの質問に答えるかどうかはわかりませんが、はい、その場で新しいクラスを作成したり、既存のクラスを再形成したりするなど、完全な反射機能で多くのクールなことを行うことができます。このトピックに関して興味深いと思われるドキュメントをいくつかここに残しておきます。

于 2013-02-07T14:29:13.247 に答える
2

クラスはオブジェクトではありません。オブジェクトの「青写真」と考えることができます。そのオブジェクトの形状と動作を説明します。オブジェクトはクラスのインスタンスです。

詳細については、こちらをご覧ください。

于 2013-02-07T14:06:26.920 に答える
1

クラスはオブジェクト指向言語のオブジェクトですか?

クラスの概念は、何よりもまず理論的です。言語が「クラス」の正式な概念(Javascriptなど)をサポートしていない場合でも、「クラス」セマンティクスを使用してThingを定義できます。クラスはオブジェクトのテンプレートであり、そこからインスタンスを作成します。

class.method名の名前だけでClassメソッドにアクセスするにはどうすればよいですか?

どういう意味かよくわかりません。一部の言語は、クラスのインスタンスのコンテキスト内で呼び出されないメソッドである「静的」または「クラス」メソッドをサポートします。したがって、「this」(または同等のもの)がメソッドが呼び出されるインスタンスになるクラスの通常のメソッドである「object.method」と同じではありません。

Java(コメントから)

Javaの場合、Objectと呼ばれるクラスと。と呼ばれるクラスがありClassます。 これを参照してください。これらのJava構造は、クラスおよびオブジェクトの概念とは別のものです。前者は実装の詳細です。設計者が言語を構築する方法であり、後者は一般的な概念です。したがって、Javaでは、オブジェクトのインスタンスをObject持つことができます。この場合、インスタンスはタイプ(Java構造)のオブジェクト(概念)です。

于 2013-02-07T14:06:52.267 に答える
0

オブジェクトの基本的な概念は、メモリが割り当てられていることを意味します。devdigitalが言ったように、クラスは、必要最低限​​の構造を保持し、インスタンス化されるときにオブジェクトがどのように動作するかを決定するオブジェクトの青写真にすぎません。

クラスは単なる体(魂なし)であり、オブジェクトは環境と相互作用する、または生物学的には生命哲学と同様に外部刺激(公的な方法と特性)に反応する生体(魂を持っている)です:)

技術的には、クラスはメモリ内にあるマシンで解釈可能なコードです(メインメモリやレジスタは必要ありません)。オブジェクトは、実行可能メモリ(レジスタ/メインメモリ)にコードロードされます

于 2013-02-07T14:39:12.267 に答える