意味の種類、クラス、インターフェイス?
-
26-09-2019 - |
質問
多くの著者interchangablyのタイプやクラスです。特定の教科書を覆オブジェクトベースモデルカバーの長期インターフェイスも.
が誰か教えてくださいこれらのシンプルに基づくオブジェクト指向プログラミング全般およびC++/Java/オブジェクト指向データベースです。
解決
A タイプ 分類のデータではないことがおわかり頂けど、その許容値は、許容運営す。(ほとんどの方は?) すべてのプログラミング言語タイプは、タイピング規律などによって大きく異なりから一言語ます。
A クラス ある特定の 種類 のタイプOOP言語定義される特定の構文の言語そのものではない、いわゆる"ネイティブの種類"のようなJavaの int
または float
のように定義される言語ます。クラスは一般に定義されるメモリレイアウト、エンコーディングデータ(いわゆる メンバ変数 の機能をしっかり取り組み(いわゆる 会員機能 または 方法).
An インタ*仕様の作業タイプ実装する必要のある一定の類型が指定されていない許容値、メモリレイアウト等
これは、非常に簡単な概要では、簡体字"形状""複数の言語にローされます。無視する複数のエッジケースのようにC++の"力"もう一方の間のインタフェースとクラスです。また無視可能なクラスを教えてください言語のようなウが損傷を与える脳遠く、これなんじゃないかな。;)
編集中の追加例
ここではJava-のように 宣言をセメントの概念なのだ。
int myVariable1;
この変数は—myVariable1
—ネイティブ(またはプリミティブ型の32ビット符号付き整数値で符号化された2s-補数表記です。●で知られる範囲(約-2億円+2億円)と既知の設業(積算、追加、部弾性係数、減算、各種の変換など) る可能性があります。
class MyClass
{
int myMemberVariable;
int myOtherMemberVariable;
int myMethod(int p) { myMemberVariable += p; myOtherMemberVariable = p; }
}
MyClass myVariable2 = new MyClass();
こちらの myVariable2
タイプ定義され クラス MyClass
. MyClass
を定義するメモリレイアウト(この場合の32ビットの署名の整数で2s-補数表記してい単操作 myMethod()
るその引数 myMemberVariable
を設定し myOtherMemberVariable
この引数に使います。
interface MyInterface
{
int myInterfaceMethod(int p, int q);
}
こちらの MyInterface
のみを宣言すると設定の業務(この場合の単機能 myInterfaceMethod()
無料メンバ変数とせずに実装されます。すばるクラスを実装するこのインタフェースは、証明方法とその特定の署名の名前+戻り値+論争することができます。ご利用いただきインタフェースを実装するクラス.
class MyOtherClass implements MyInterface
{
int myMember1;
int myMember2;
int myMember3;
int myInterfaceMethod(int p, int q) { myMember1 = p; myMember2 = q; myMember3 = p - q; }
int myNonInterfaceMethod() { return myMember1; }
}
MyOtherClass myVariable3 = new MyOtherClass();
現在 myVariable3
に定義される型のメモリレイアウトで構成される符号付き32ビット整数、両事業です。この操作はで 必要 実施のための全 implements MyInterface
部分です。このようなことになる期待、(要旨) MyInterface
型を使用できるコンクリート) MyOtherClass
ドライバは、各アクチュエータの動作保証するものではあります。その他の方法—myNonInterfaceMethod()
—な ない からMyInterfaceいるものは見込み MyInterface
使用できませんのでできなか世界最大の国際人権ngoです。
更に 編集を加え現実世界のものによる請求
ませんか?使う整数値を浮動小数点値は、文字列または何でもこのようなプログラムだけを使用。型は世の中のものの,全ては操作の価値に与えられた。して行きたいと思っているのOOP特有の概念のクラスおよびインタフェース.
きないデータの操作データの可能性クラスです。例えば、銀行口座に振り込みます。銀行口座においては、口座番号、電流バランス取引限度額等クラス代表(ひどくとるようにして説明概念)このような
class BankAccount
{
String accountNumber;
float balance; /* DO NOT USE FLOATING POINT IN REAL FINANCIAL CODE! */
int transaction_limit;
float transaction(float change) {
balance += change > transaction_limit ? transaction_limit : change;
return balance;
}
}
現在までの変数のことを知ることで、持ち運び口座数(それ自体が String
タイプ)は、バランス(それ自体が float
タイプが な浮動小数点実世界金融コード! との取引制限は、 int
タイプ)です。あなたも知を行うことができる取引を創造的にという transaction
)をチェックの変更に対する取引制限を変更します。(実際の授業のためにこの多くが含まれていますが含まれますのobfuscatory保護するもんで削除された教育目的)
今ましょうと言うんで、より高度な金融環境はいくつか種類がありますが取引だけでなく、銀行勘定の合計。うにさんもあるコード研修事業サポート,中国ビジネスのおそれのある取引 なケアの具体的な基礎の種類.オフラインバッチプロセッサーの取引、その対象は、銀行口座受取手形及び売掛金たな味するものとします。ずに取り出すことができるようにで知ら各種の取引にのることができま替り:
interface Transactable
{
float transaction(float change);
}
class BankAccount implements Transactable
{
/* interior is identical */
}
class ReceivablesAccount implements Transactable
{
float balance;
float transaction(float change) { balance += change; }
}
今そのことを知ってい Transactable
種類もも BankAccount
's"インスタンスなどをご ReceivablesAccount
'sう場合がございます。思っている銀行口座取引を制限が債権の座になります。いての知識がないの内部表現データです。いかに特別な場合のものです。かを知る一つの機能名称transaction()
)ことになるのです。(たい場合は具体的な実世界の使い方について知る方法は、どのようにコレクションクラスにはならないし、"ためる"ループ利用の Iterable
インタフェースJava.)
他のヒント
でO.O.Pの用語は、いくつかのJavaのような言語および/またはC ++の話をする場合は特に、同義的に規約タイプとクラスを使用することは非常に一般的です。
一般的に、あなたがクラスを使用すると、実際のタイプのテンプレートを、作成されるのタイプを使用すると、定義しているのどのオブジェクトから、と定義している定義するときに、話します/またはインスタンス化。
インタフェースの概念では、インターフェイスを定義するとき、のあなたは基本的にの使用をして、オブジェクトのいずれかのタイプに対処するための特定の方法を指定している、もう少し複雑です。つまり、あなたのオブジェクトは、そのインターフェイスクラスからその実装を来なければなりません。インタフェースは、元のクラス/タイプの仕様に含まれていない追加の動作を指定することで、あなたのクラス/タイプを向上させる方法です。
それは長期的なインターフェースは長期的なタイプと交換可能に使用されている理由はおそらくですインターフェイスタイプ、あったかのように多くの実用的な目的のためには、オブジェクト徹底的にそれのインターフェイスを扱うことができます。
href="http://en.wikipedia.org/wiki/Abstract_data_type" rel="nofollow">抽象データ型は、さらなる洞察のためを
個人的に、私はそれはあなたが具体的にそれを記述する場合は理解しやすいと思います。例えば、我々は台所で物事の在庫を追跡するためのプログラムを構築したいとしましょう。
ほとんどの言語では、整数のみ、文字、バイトのようなものの程度は非常に簡単で、原始的な「タイプ」を知っています。我々は完全に台所で物事の種類を記述するために、これらのプリミティブ型を使用することができます。たとえば、配列内の各インデックスは、何かの属性を表し、文字の配列の配列を構築することができます。同様に、多分、インデックス0は、あなたが記述しようとしている事の「タイプ」を表します。しかし、当然のことながら、この技術は非常に非常に迅速に複雑になるだろう。
だから、オブジェクト指向技術を使用して、我々は簡単にプリミティブ型を組み合わせることによって、新しい型を定義することができます。あなたがそれを行うことの方法は、クラス定義を作成することです。新しいタイプのための青写真としてクラスを考えます。
台所の例では、「食」タイプ、「アプライアンス」タイプ、および「家具」タイプのコンセプトを持っています。プログラムではこれらの新しいタイプを使用するために、我々はこれらのそれぞれのクラス定義を作成する必要があると思います:
public class Food {...}
public class Appliance {...}
public class Furniture {...}
アン・インターフェースは、私たちが何かと対話する方法について説明します。たとえば、私たちは台所で物事のインベントリを作成したいです。私たちは、インベントリから物事を、私たちのインベントリに「追加」「削除」することができ、そして私たちの在庫を超えるかもしれない「反復」になりたいでしょう。アクションは、「削除」を「追加」と「反復」は何も(私たちの在庫だけではなく)のほとんどすべてのリストに適用されます。 Javaは、のために「リスト」の名前のインターフェイスを提供しますこの目的のため。非常に人気があり、一般的なリストは、「インターフェイス」とインベントリオブジェクトを作成することにより、我々は無料で、他のプログラマのためのすべてのアクションは、私たちのプログラムを見て、「インベントリ」オブジェクトと対話するために正確にどのように知ることができます取得ます:
...
java.util.List inventory = new ArrayList();
...
//later in our program, we can interact with inventory
// with any of methods on the list interface (because ArrayList "implements" List)
inventory.add(new Furniture("chair"));
inventory.add(new Appliance("refrigerator"));
inventory.add(new Food("ice cream"));
...
はしたがって、上記の例では、在庫は、型のArrayListのインスタンスを含む変数です。 ArrayListのクラス定義を実装、「リスト」インターフェースので、タイプのArrayListのすべてのインスタンスは、「リスト」インタフェースで定義された契約に従わなければなりません。言い換えれば、我々はこのような(代わりのArrayListの)LinkedListのと同じくらい簡単に作成inventory
を持つことができます:
java.util.List inventory = new LinkedList();
アクションの特定のセットは、予め形成されるように公開する契約としてインターフェイスを考えることを忘れないでください。 LinkedListのとArrayListのは、両方の「リスト」インタフェースを実装しているので、彼らは両方の契約上、「リスト」のインターフェイスのすべてのメソッドを実装することが義務付けられています。
これについての素晴らしいところは、私たちの「在庫」変数を使用してに興味を持っている任意のコードがをどのようにの「追加」、または「削除」についてのがらくた、または「イテレータを与えないということです「アクションが実装されています。彼らは気にすべてが変数「在庫」は「リスト」インターフェースに従うことです。
は換言すれば、LinkedListの器具は、ArrayListの若干異なる方法を「追加します」。しかし、それは私たちの「在庫」変数を使用したい任意のコードに問題ではありません。
店舗リストへの画期的な方法を思い付く達人いくつかの数学の場合。おそらく彼らは、月ではなく、内部のコンピュータメモリ上のリストを格納し、アウトそのターンは10倍速いのArrayListよりもする方法を見つけ出します。そして、すべて私たちが行う必要があると思いますが、この次のとおりです。
java.util.List inventory = new CrazyMoonList();
CrazyMoonListがなど、「追加」、「削除」を提供することが保証されているため、用途の在庫がまったく同じ滞在することができますことを他のすべてのコードます。
希望、これは概念を明確にするのに役立ちます!
クラスは、オブジェクトのテンプレート、変数、プロパティ、メソッドが含まれているユーザ定義データ型である。
//defines a simple class describing all types of fruit
public class Fruit {
//insert fields here...
Fruit(){//constructor method
//insert constructor code here...
}
//insert class methods here....
}
我々が対象とする、このクラスをインスタンス化するとは、我々はあることを行っているオブジェクトの種類のコンパイラを知ることができるようにする必要があります。この場合、私たちのオブジェクトは、種類の果物になるだろう。
//The initialisation might look something like this.
Fruit myFruit = new Fruit();
のコードの前の行は、タイプフルーツの新しいオブジェクトを構築するようにコンパイラに指示します。
だから、簡単な言葉で「クラス」とは、「タイプ」と呼んでいるオブジェクトの特性(そのデータ)を、定義されて我々はそれがインスタンス化されたとき、それがあるかどうかフルーツ、車、または見ているオブジェクトの種類机!
このコンセプトは継承とポリモーフィズムのトピックにさらに読み取ることによって、時に拡張することができます。
私は、これは助けにあると思います。