2

現在、アカデミック オブジェクト指向ミニ プログラミング言語のコンパイラの実装に関する学士論文を書いています。

ドキュメントを正確に記述したいと考えており、現在、コンストラクターがルーチンであるかどうかについて議論しています。

コンストラクターがルーチンであると私たちが指摘しているのは、コンストラクターがコマンド、パラメーター、およびローカル変数のブロックを持っているということです。名前が欠落しているにもかかわらず、他のルーチンの他のすべての属性が示されています。

コンストラクターがルーチンではないことを指摘しているのは、インスタンスごとに 1 回しか呼び出せないことです。

この質問に明確な答えがあるのか​​ 、それとも理論ごとに定義が異なるのかはわかりません.

誰かがこの意味論的な質問についての文献へのポインタを与えることができれば幸いです.

一番

編集:私たちの言語で特定のものに名前を付ける方法に関するいくつかの情報:

  • 機能と手順があります。関数には戻り値がありますが、プロシージャにはありません。
  • コンストラクターは、名前のないプロシージャのようなものです (明示的な戻り値はありません)。
  • コンストラクターは暗黙的と呼ばれ、Java のように:x := new X(1, new Y())
  • パラメーターは、コンストラクターの定義中に定義されます。独自のインスタンス ( this) はパラメーターとは見なされませんが、暗黙的に提供されます

これまでの回答に感謝します。彼らはプロセスを支援しています。

4

6 に答える 6

2

コンストラクターは特別なセマンティクスを持つ関数ですが (オブジェクト構築の一部として特定のコンテキストで呼び出されるなど)、とにかく関数です。パラメーターを持つことができ、通常の制御フローを持ち、ローカル変数を持つことができます。など。他の機能よりも優れているわけでも悪いわけでもありません。ルーティンと言っていいでしょう。

于 2013-06-27T10:40:27.260 に答える
2

コンストラクターはコンストラクターです。

これは、関数 (値を返す: 新しいオブジェクト)、プロシージャ (ルーチン、戻り値のない関数、初期化されていないオブジェクトで呼び出される) のようなものかもしれません。オブジェクトはその後同じIDになります..)、名前がある場合とない場合、または名前がクラスに一致するように強制される場合などがあります。コンストラクターは「存在しない」か、さまざまな散在するイニシャライザーからコンパイラーによって暗黙的に作成される場合もあります。それ以外の場合は、式/ルーチン/whatchamacallit になります。

それはすべて、コンパイルする言語と、「関数」、「ルーチン」、さらには「パラメーター」が何を意味するかによって異なります (つまり、「これ」はパラメーターですか?)。

そのようなことについて質問したい場合は、最初に言語と使用したいすべての用語を説明/定義してください (クラスとは? メソッド? 関数? ルーチン? パラメーター? コンストラクターとは? ...) そして、まあ、ほとんどのおそらく、オントロジーに一致する答えを自動的に推測するでしょう。

于 2013-06-27T10:33:10.757 に答える
1

外部から見ると、コンストラクターは、そのクラスのインスタンスを戻り値とするクラス メソッドと見なすことができます。その限りでは、「インスタンスごとに 1 回しか使用できない」という主張は、コンストラクターが使用されるときにまだインスタンスがないため、根拠がありません。

内部から、「this」のような特別なキーワード名が、初期化されていないインスタンスにバインドされます。

通常、新しいキーワードのように、構文糖衣があります。また、コンパイラは、インスタンスが適切に初期化されていることを確認するのに役立つ場合があります。

新しいオブジェクトを作成する機能が他に提供されていない限り、これは特別です。しかし、その使用法に関する限り、コンストラクターは、たまたまクラスのインスタンスを返す他のクラス メソッドとは異なりません (または、少なくとも異なるべきではありません)。

ところで、「ルーチン」は OOP で確立された用語ですか?

于 2013-06-27T10:50:24.460 に答える
-1

コンストラクター (名前のとおり) は、そのクラスの新しいインスタンスを作成するときにのみ、コンパイラーによって実行されます。

一般的な考え方は次のとおりです。起動時に実行する必要がある一連の操作を配置し、それがコンストラクターで行われます。つまり、クラスの他のメソッドと同じようにコンストラクターを呼び出すことはできません。

于 2013-06-27T10:25:59.950 に答える