オブジェクトとインスタンスの違い


83

私は質問のこの種がされています知って尋ね 前に把握する(拡張子によって、いくつかの/ほとんどの初心者は、と)、私はまだ答えは私にとってあまりにも曖昧であると感じています。

私は、手続き型および基本的なOOPよりも幅広いプログラミングの概念を自分自身に教えようとしてきました。OOPの具体的な概念を理解しています(データ(メンバー)と関数(メソッド)を持つクラスを作成し、実行時にそのクラスをインスタンス化して、実際に何かを実行します)。

私はクラスが何であるかについてのハンドルを持っていると思います(コンパイル時にそのように作成されるインスタンスの一種の設計青写真)。しかし、その場合、オブジェクトとは何ですか?また、プロトタイプベースの言語では、これが事態をさらに混乱させる可能性があることも知っていますが、おそらくこれが、私の頭の中でオブジェクトとインスタンスを明確に区別する必要がある理由です。

それを超えて、私は「オブジェクト」と「インスタンス」の概念に苦労しています。私が読んだ多くのリソース(SOでの回答を含む)は、それらはほぼ同じであり、違いはセマンティクスにあると述べています。他の人々は、2つの間に真の概念的な違いがあると言います。

ここSOの専門家は、初心者がOOPの世界で前進するための「あはは」の瞬間を持つのを助けることができますか?

注:これは宿題ではありません。私は学校に行きませんが、宿題の助けを探している人には役立つと思います。


1
「すべてのインスタンスはオブジェクトですか?」などの質問を追加しますか?、および、「すべてのオブジェクトはインスタンスですか?」両方が「はい」の場合、それらが同じであることを確認できます。
WesternGun 2017

(newを使用して)クラスをインスタンス化すると、そのインスタンス化されたものがオブジェクトになります。オブジェクトは、オブジェクト指向プログラミングのカプセル化、ポリモーフィズム、抽象化の原則、およびクラスで定義されたインスタンスメンバーを消費するためにプログラムが対話する実際のものに準拠できるものです。オブジェクトにはインスタンスメンバー(非静的メンバー)が含まれます。したがって、クラスのインスタンスはオブジェクトです。「インスタンス」という言葉は、それが生まれた場所からの起源を指すときに使用されます。「クラスのインスタンス」と言うと、「クラスのオブジェクト」と比較してより明確になります
p_champ

回答:


131

家の設計の青写真は、クラスの説明のようなものです。その青写真から建てられたすべての家は、そのクラスのオブジェクトです。特定の家はインスタンスです。


6
また、同じように建てられたレンガ造りの家が8つ並んでいるので(「住宅開発」の概念が生まれる前に)、地元の名声が少しある私の故郷の通りがあります。だから私はそれを非常にうまく視覚化することができます。「クラス」は建築家が作成したものです。完成した家はすべて同じように建てられているため、「オブジェクト」です。それぞれの家には、[今1は、サイディングています。o(]を彼らが持っている(とし続けることができる)ので、「インスタンス」され、すべてのそれ以来、異なる扱い。
TCCV

16
そして静的メソッドは、すべての家が共有するユーティリティのようなものです。
WOPR 2010

2
しかし、青写真から建てられた家はインスタンスではありませんか?
ホットリック2014

1
つまり、クラス定義が最初に占めるメモリはインスタンスです。作成されるすべてのオブジェクトはオブジェクトと呼ばれます。
Hafiz Shehbaz Ali 2015

6
オブジェクトとインスタンスはまったく同じではありませんか?
Praveen Kumar 2015

42

真実は、オブジェクト指向プログラミングは、開発の哲学的側面とコンピューターの実際の機械的動作との間に断絶を生み出すことによって、しばしば混乱を引き起こすということです。私はあなたのために2つを対比しようとします:

OOPの基本的な概念は次のとおりです。クラス>>オブジェクト>>インスタンス。

クラス=青写真。オブジェクトは、(家のように)「青写真」に基づいて構築された実際のものです。インスタンスは、オブジェクトの仮想コピーです(実際のコピーではありません)。

「インスタンス」のより技術的な説明は、それが「メモリ参照」または参照変数であるということです。「インスタンス」は、メモリ内の変数があることをこの意味それだけオブジェクトのメモリアドレスが含まれています。それがアドレス指定するオブジェクトは、インスタンスが「のインスタンス」と呼ばれるのと同じオブジェクトです。オブジェクトのインスタンスが多数ある場合、実際には、メモリ内のさまざまな場所に多くの変数があり、それらはすべて同じ正確なメモリアドレスを持っています。これらはすべて同じ正確なオブジェクトのアドレスです。コードで変更できるように見えますが、インスタンスを「変更」することはできません。インスタンスを「変更」するときに実際に行うことは、元のオブジェクトを直接変更することです。電子的には、プロセッサは、元のオブジェクトのデータを変更する前に、メモリ内の1つの余分な場所(参照変数/インスタンス)を通過します。

プロセスは次のとおりです。プロセッサ>>インスタンスのメモリ位置>>元のオブジェクトのメモリ位置。

どのインスタンスを使用するかは問題ではないことに注意してください。最終結果は常に同じになります。すべてのインスタンスは、メモリ位置(オブジェクトのメモリアドレス)に同じ正確な情報を保持し続け、オブジェクトのみが変更されます。

クラスとオブジェクトの関係は、哲学的には最も理解しやすいものですが、もう少し混乱します(青写真>>家)。オブジェクトがメモリのどこかに保持されている実際のデータである場合、「クラス」とは何ですか?機械的には、オブジェクトはクラスの正確なコピーであることがわかります。したがって、クラスは、オブジェクトとまったく同じ情報を保持する、メモリ内の別の場所にある別の変数です。関係の違いに注意してください。

オブジェクトはクラスのコピーです。インスタンスは、オブジェクトのメモリアドレスを保持する変数です。

同じクラスの複数のオブジェクトを作成してから、それらの各オブジェクトの複数のインスタンスを作成することもできます。このような場合、各オブジェクトのインスタンスのセットの値は同等ですが、オブジェクト間のインスタンスは同等ではありません。例えば:

クラスAをクラスAから、Object1、Object2、およびObject3とします。

// Object1はobject2およびobject3とまったく同じ値を持ちますが、メモリ内の異なる場所にあります。

Object1から>> obj1_Instance1、obj1_Instace2、obj1_Instance3を許可します

//これらのインスタンスはすべて、値が同等であり、メモリ内のさまざまな場所にあります。それらの値= Object1.MemoryAddress。

タイプを導入し始めると、物事は厄介になります。これは、c#の型を使用した例です。

//クラスPersonが存在すると仮定しますPersonjohn = new Person();

実際、このコードを2つの部分に分割すると、分析が容易になります。

Person john;
john = new Person();

技術的に言えば、最初の行は '型の変数を宣言します人。しかし、それはどういう意味ですか?一般的な説明は、Personオブジェクトのみを保持できる空の変数があるということです。しかし、ちょっと待ってください-それは空の変数です!その変数のメモリ位置には何もありません。「タイプ」は機械的に無意味であることがわかります。タイプは元々、データを管理する方法として考案されたものであり、他には何もありません。int、str、chr(初期化なし)などのプリミティブ型を宣言しても、コンピューター内では何も起こりません。プログラミングのこの奇妙な構文的側面は、クラスがオブジェクトの青写真であるという考えを人々が得る場所の一部です。OOPは、デリゲート型やイベントハンドラーなどの型とさらに混同されています。私はそれらにあまり焦点を当てないようにし、それらはすべて誤った名称であることを覚えておいてください。

2行目も、2つのことを同時に実行するため、少し混乱します。

右側の「newPerson()」が最初に評価されます。Personクラスの新しいコピーを作成します。つまり、新しいオブジェクトを作成します。

その後、左側の「john = "」が評価されます。johnを参照変数に変換して、同じ行の右側に作成されたばかりのオブジェクトのメモリアドレスを指定します。

優れた開発者になりたいのであれば、哲学的な理想に基づいて機能するコンピューター環境はないことを理解することが重要です。コンピューターはそれほど論理的ではありません。実際には、基本的なブール回路(主にNANDとOR)を使用して接着されたワイヤーの大きなコレクションにすぎません。


32

単語クラスから来ているの分類カテゴリー何かが置かれているには)、今、私たちはすべてのことを聞いたことがあるクラスは青写真のようなものですが、これは正確に何を意味するのでしょうか?これは、クラスが特定のカテゴリの説明を保持していることを意味します(Javaを使用した例でクラス、オブジェクト、インスタンスの違いを示したいので、読者にそれを読んでいる間、ストーリーのように視覚化するように要求します。問題ないJavaに精通していない)だから、私たちはメイクを始めましょうカテゴリー呼ばHumanBeing次のようにJavaプログラムがそれを表現しますので、

class HumanBeing{ 
   /*We will slowly build this category*/ 
}

さて、HumanBeingが一般的に持っている属性は、名前年齢身長体重です。今のところ、これらの4つの属性に限定して、カテゴリに追加しましょう。

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight; 

   /*We still need to add methods*/

}

これで、すべてのカテゴリに動作があります。たとえば、カテゴリ犬には吠える、フェッチする、転がすなどの動作があります。同様に、カテゴリHumanBeingにも特定の動作があります。たとえば、HumanBeingにあなたの名前/年齢/体重/を尋ねると、高さ?名前/年齢/体重/身長がわかるはずなので、Javaでは次のようにします

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight;  

    public HumanBeing(String Name,int Age,float Height,float Weight){
       this.Name = Name;
       this.Age  = Age;
       this.Height = Height;
       this.Weight = Weight;
    }

    public String getName(){
      return this.Name;
    }

    public int getAge(){
      return this.age;
    }

    public float getHeight(){
      return this.Height;
    }

    public float getWeight(){
      return this.Weight;
    }
}

これで、カテゴリHumanBeingに動作が追加されたので、名前、年齢、身長、体重を尋ねることができますが、これらの詳細は誰から尋ねますか。これclass HumanBeingは単なるカテゴリであるため、たとえば建築家が設計図を作成します。彼が建てたい建物の紙、今は青写真(建物の説明)に住むことはできません私たちは建物が建てられて初めて住むことができますそれでここで私たちは私たちのカテゴリーから人間を作る必要があります上記で説明したので、Javaでそれを行うにはどうすればよいですか

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);    
  }
}

上記の例では、age age height weightという名前の最初の人間を作成したので、上記のコードで正確に何が起こっているのでしょうか。。私たちはされているインスタンス化私たちのカテゴリHumanBeing私たちのクラスのすなわちアンオブジェクトが作成されます

注: オブジェクトとインスタンスは同義語ではない場合によっては、オブジェクトとインスタンスは同義語のように見えますが、そうではありません。両方の場合を示します。

ケース1:オブジェクトとインスタンスは同義語のようです
少し詳しく説明します。カテゴリHumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90); のオブジェクトヒープメモリ上に作成され、それにアドレスが割り当てられ、firstHumanそのアドレスへの参照を保持している場合、このオブジェクトは次のようになります。HumanBeingのオブジェクトともHumanBeingのアンインスタンス。ここでは、オブジェクトとインスタンスは同義語のようです。繰り返しますが、これらは同義語ではありません。

ストーリーを再開しましょう。firstHumanを作成しました。名前、年齢、身長、体重を尋ねることができます。これがJavaでの方法です。

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
    System.out.println(firstHuman.getName());
    System.out.println(firstHuman.getAge());
    ...
    ...  
  }
}

だから私たちは最初の人間を持っていて、最初の人間にいくつかの資格を与えることによって羽を動かします、彼を医者にしましょう、それで私たちは医者と呼ばれるカテゴリーを必要としそして私たちの医者にいくつかの行動を与えます、それでjavaでは次のようにします

class Doctor extends HumanBeing{
   public Doctor(String Name,int Age,float Height,float Weight){
      super(Name,Age,Height,Weight);
   }
   public void doOperation(){
    /* Do some Operation*/ 
   }

   public void doConsultation(){
    /* Do so Consultation*/
   }
}  

ここでは、コードに再利用性をもたらす継承の概念を使用しました。すべての医師は常に最初にHumanBeingになるため、Doctorには名前、年齢、体重、身長があり、再度書き込む代わりにHumanBeingから継承されます。まだ作成していない医師の説明を書いたばかりなので、で医師を作成しましょう。class Birth

class Birth{
  public static void main(String [] args){
    Doctor firstDoctor = new Doctor("Strange",40,6,80);
    .......
    .......
    /*Assume some method calls , use of behaviour*/
    .......
    .......    
  }
}

ケース2:オブジェクトとインスタンスが同義語ではない
上記のコードでは、カテゴリDoctorをインスタンス化し、それを実現していることを視覚化できます。つまり、カテゴリDoctorのオブジェクトを作成しているだけです。すでにわかっているように、オブジェクトはヒープメモリに作成されます。そしてfirstDoctor、ヒープ上のオブジェクトへの参照を保持しています。

この特定のオブジェクトfirstDoctorは次のとおりです(firstDoctorオブジェクトへの参照を保持していることに注意してください。オブジェクト自体ではありません)。

  1. firstDoctorオブジェクトclass DoctorAのアンインスタンスclass Doctor
  2. firstDoctorのオブジェクトでclass HumanBeingなくのインスタンスですclass HumanBeing

したがって、特定のオブジェクトは特定のクラスのインスタンスになることができますが、その特定のクラスのオブジェクトである必要はありません。

結論:

オブジェクトが特定のカテゴリのすべての特性を満たしている場合、そのオブジェクトは特定のカテゴリのインスタンスであると言われます。

実世界の例は次のようになります、私たちは最初に人間として生まれたので、私たちを人間のオブジェクトとしてイメージします、今私たちが成長するとき、私たちは責任を負い、新しいスキルを学び、人生の例でさまざまな役割を果たします息子、兄弟、娘、父、母は今私たちは実際に何ですか?私たちは人間のオブジェクトであると言うことができますが、兄弟、娘、...などのインスタンス

これがお役に立てば幸いです

ありがとうございました


5
...そして、なぜこの回答に3つの賛成票しかないのですか?
Pratik Ambani 2017

13

ここに画像の説明を入力してください

オブジェクトはメモリ内のものであり、インスタンスはそれらを参照するものです。上の写真:

  • std(インスタンス)->学生オブジェクト(右)
  • std1(インスタンス)->学生オブジェクト(左)
  • std2(インスタンス)->学生オブジェクト(左)
  • std3(インスタンス)->オブジェクトなし(null)

4
それは素晴らしい。低レベルになるのが本当に好きです。私はこれがアナロジーよりも好きかどうかについて行き来しています。2つを一緒に知ることが本当に必要だったと思います。賛成ですが、すでにジョーに与えられているので、私があなたに答えを与えることができるかどうかはわかりません。ありがとう、結構です。これは多くをクリアします。
TCCV 2010

さて、インスタンスはオブジェクトへのポインタですか?(インスタンス==メモリアドレスを持つ変数?)
Stano 2013年

6
Truong、あなたの答えは間違っていて混乱しています。実際、インスタンスは基本クラスオブジェクトから派生したオブジェクトです。インスタンス==オブジェクト。この用語は、例えば説明良いです、このまたはこの答え。
スタノ2013年

@jww:この画像はmath.hws.edu/javanotes/c5/objectsInHeap.pngへのリンクです。現在は404です。おそらく投稿時に表示されていました。
マットバーランド2015

6

オブジェクトはクラスのインスタンスです(クラスベース言語の場合)。

これが私が思いつくことができる最も簡単な説明だと思います。


1
あなたの説明は私が読んでいる方法とほぼ同じであることに同意しますが、2つを区別するオンラインのエントリがたくさんあります。この種の質問に言語を意識せずに答えられないかどうかはわかりません(メタ質問です。この質問は、言語でインスタンス化しないと使用できないクラスです、笑)。
TCCV 2010

6

クラスはオブジェクトを定義します。多くの言語でさらに進んで、インターフェースがオブジェクト間の共通の属性とメソッドを定義すると言うことができます。

オブジェクトは、現実の世界で何かを表すことができるものです。オブジェクトが実際に現実世界の何かを表現するようにしたい場合は、そのオブジェクトをインスタンス化する必要があります。インスタンス化とは、通常はコンストラクターを使用して、この特定のオブジェクトの特性(属性)を定義する必要があることを意味します。

これらの特性を定義すると、オブジェクトのインスタンスが作成されます。

これで問題が解決することを願っています。


それは基本的にジョーが言ったことを言っていると思います。私が間違っている場合は私を訂正してください。
TCCV 2010

3
ジョーの上に、青写真から建てられたすべての家はオブジェクトであると言います。本当。そして彼は、与えられた家は実例であると言います。本当。ただし、すべての家はインスタンスであり、特定の家もオブジェクトです。彼は何もないところに違いをもたらしていました。コードでは、オブジェクトを作成するときに、オブジェクトとインスタンスを区別する必要があります。実際に構築されたときにインスタンス化されると言います。よくある質問は次のとおりです。オブジェクトをインスタンス化することを覚えていますか?すなわち。オブジェクトを宣言した後でコンストラクターを呼び出すのを忘れた場合。
デレクリッツ2010

1
ああ、それは良い違いです。つまり、インスタンスとは、構築された(つまり、コンストラクターが呼び出された)オブジェクトのことです。
TCCV 2010

3

「クラスは、そのインスタンスと呼ばれるオブジェクトのセットを記述します。」-Xerox Learning Research Group、「The Smalltalk-80 System」、Byte Magazine Volume 06 Number 08、p39、1981。


2

オブジェクトとは何ですか?

オブジェクトはクラスのインスタンスです。オブジェクトは、あなたの周りの実世界の例を見つけることによって最もよく理解できます。あなたの机、あなたのラップトップ、あなたの車はすべて、オブジェクトの良い実例です。

実世界のオブジェクトには2つの特性があり、それらはすべて状態と動作を持っています。人間もオブジェクトの良い例です。私たち人間には、状態/属性(名前、身長、体重、行動)があります。歩く、走る、話す、眠る、コード:P。

クラスとは何ですか?

クラスは、オブジェクトの詳細を説明する青写真またはテンプレートです。これらの詳細は、つまり

名前属性/状態操作/メソッド

class Car 
{
    int speed = 0;
    int gear = 1;

    void changeGear(int newGear)
    {
        gear = newGear;
    }

    void speedUp(int increment) 
    {
        speed = speed + increment;
    }

    void applyBrakes(int decrement) 
    {
        speed = speed - decrement;
    }
}

上記の例を考えてみましょう、フィールドspeedgearオブジェクトの状態、およびメソッドを表しますchangeGearspeedUpそしてapplyBrakes外の世界とのCarオブジェクトの動作を定義します。

参照:


1

一般的に2つのことがあることを指摘することが重要だと思います。設計図とコピー。人々はこれらの異なるものに名前を付ける傾向があります。クラス、オブジェクト、インスタンスは、人々がそれらに使用する名前のほんの一部です。重要なことは、それらの名前に関係なく、青写真とそのコピーがあるということです。これら2つについてすでに理解している場合は、混乱を招く他のことは避けてください。


0

アップルとアップルを比較してみましょう。私たちは皆、リンゴが何であるかを知っています。それはどのようなものか。どんな味。それはクラスです。それは物事の定義です。それは私たちが物事について知っていることです。

さあ、リンゴを探しに行きましょう。それはインスタンスです。私たちはそれを見ることができます。味わえます。私たちはそれで物事を行うことができます。それが私たちが持っているものです。

クラス=何かについて私たちが知っていること。定義。

オブジェクト/インスタンス=私たちが持っているその定義に適合し、何かを行うことができるもの。


0

「オブジェクト」という用語は、インスタンスを説明するために使用される場合もあります、インスタンス参照を説明するために使用される場合もあります。「インスタンス」という用語は、実際のインスタンスのみを指します。

たとえば、リストはオブジェクトのコレクションとして記述される場合がありますが、実際に保持されるのはオブジェクトインスタンスへの参照です。


したがって、この場合、参照はインスタンスへのリンクを含む単なるプレースホルダーですか?リンクはメモリアドレスのようなものである可能性がありますか?
TCCV 2010

0

私はいつも、クラスの定義を「抽象データ型」の定義と同じにするという考えが好きでした。つまり、クラスを定義すると、新しいタイプの「何か」、プリミティブやその他の「何か」に関するデータ型の表現、および関数やメソッドに関する動作を定義することになります。(一般性と形式主義については申し訳ありません)

あなたがクラスを定義したときはいつでも、あなたは新しい開く可能性あなたがインスタンス化および/またはそれから特定のオブジェクトを作成するときに、あなたが実際にしている、その性質や振る舞いを持つ特定のエンティティを定義するためのマテリアライズその可能性を。

オブジェクトとインスタンスという用語は互換性がある場合があります。一部のOOP純粋主義者は、すべてがオブジェクトであると主張します。私は文句を言いませんが、実際のOOPの世界では、開発者は2つの概念を使用します。

  1. クラス:他のADTを派生させ、オブジェクトを作成できる抽象データ型のサンプル。
  2. オブジェクト:インスタンスとも呼ばれ、特定の抽象データ型によって表されるデータ構造と関数の特定の例を表します。

0

オブジェクト指向プログラミングは、プログラムの開発を容易にする方法で、プログラムが処理する必要のある知識を整理するのに役立つシステムメタファーです。OOPを使用してプログラミングすることを選択すると、OOP-Googleを選択し、メッセージを送信することで、多くのオブジェクトが相互にコラボレーションするため、現実世界の問題が発生することになります。ガイが車を運転しているのを見る代わりに、ガイが車に何をしてほしいかを示すメッセージを車に送信しているのが見えます。車は大きな物体であり、ドライバーがメッセージで行うように指示したことなどに適切に応答できるように、エンジンまたはホイールにメッセージを送信することでそのメッセージに応答します...

システムのメタファーを作成し、メッセージを送信するオブジェクトとしてすべての現実を見た後、問題のドメインに関連するすべてのものをPCに配置することにします。そこには、異なるカードを運転している人がたくさんいることに気づきました。彼らはすべて同じように振る舞うので、それぞれの振る舞いを別々にプログラムするのは無意味です...つまり、2つのことを言うことができます。

  • それらはすべて同じように動作するので、世界中のすべてのドライバーが同じように動作するため、誰が動作するかを指定するDriverというクラスを作成します。(そしてあなたはクラスベースのOOPを使用しています)
  • またはあなたはねえと言うことができます!2番目のドライバーは、最初のドライバーと同じように動作しますが、少し速く進むのが好きです。そして、3番目のドライバーは最初のドライバーと同じように動作しますが、運転するときのジグザグが好きです。(そして、プロトタイプベースのOOPを使用します)。

次に、すべてのドライバーがどのように動作するか(または、最初のドライバーがどのように動作するか、2番目と3番目がそのドライバーとどのように異なるか)の情報をコンピューターに入力し始め、しばらくするとプログラムが作成され、コードを使用してそのPC内で使用しているモデルである3つのドライバーを作成して、現実の世界で見たドライバーを参照します。PC内で作成した3つのドライバーは、プロトタイプ(実際には最初のドライバーはプロトタイプであり、最初のドライバーはモデルの作成方法によってはプロトタイプ自身である可能性があります)または作成したクラスのインスタンスです。インスタンスとオブジェクトの違いは、オブジェクトは現実の世界で使用するメタファーであるということです。あなたは、男と車をオブジェクトとして見ることを選択します(それらをインスタンスとして見ると言うのは誤りです)。そして、それをインスピレーションとして使用してコードを作成します。インスタンスは、プロトタイプまたはクラスを作成した後、プログラムにのみ存在します。「オブジェクト」は、実世界をプログラムと統合するために使用するマッピングであるため、PCの外部に存在します。これは、PCで作成したドライバーのインスタンスとGuyを結合します。したがって、オブジェクトとインスタンスは非常に関連していますが、完全に同じではありません(インスタンスはプログラム内のオブジェクトの「レッグ」であり、もう1つの「レッグ」は実世界にあります)。


0

最良の答えはすでに与えられていると思います。

クラスは青写真であり、オブジェクトは建物であるか、その青写真の例が私にとってもうまくいきました。

クラスは(MS Wordのように)テンプレートであり、オブジェクトはテンプレートを使用するドキュメントであると考えたい場合があります。


0

このスレッドで前述の例の1つを拡張しています...

シナリオを考えてみましょう-住宅用に近隣に5軒の家を建てる必要があるという要件があります。5軒の家はすべて共通の建築建築を共有しています。建設建築はクラスです。家はです。そこに人が滞在している各家はインスタンスです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.