Frage

Was eine Art unterscheidet sich von Klasse und umgekehrt macht?

(In dem allgemeinen sprachunabhängig Sinne)

War es hilfreich?

Lösung

Die folgende Antwort von Gof Buch ( Design Patterns )

  

eines Objekts Klasse legt fest, wie die   Objekt ist.Die Klasse implementiert   definiert Objekts interner Zustand und   die Umsetzung ihrer   Operationen.

     

Im Gegensatz dazu ein Objekt    Typ bezieht sich nur auf seine Schnittstelle - ein   Satz von Anforderungen zu dem es   reagieren.

     

Ein Objekt kann viele Arten haben,   und Objekte verschiedener Klassen können   hat die gleiche Art.

//example in c++
template<typename T> 
const T & max(T const & a,T const &b)
{
return a>b?a:b;  //> operator of the type is used for comparison
}

Max-Funktion erfordert einen Typ mit Betrieb> mit seiner eigenen Art als einer der es jede Klasse eine Schnittstelle, die die oben genannten Anforderungen erfüllt, verwendet werden, können bestimmte max für diese Klasse zu erzeugen.

Andere Tipps

Ich denke immer an einem ‚Typ‘ als Oberbegriff für ‚Klassen‘ und ‚Primitiven‘.

int foo; // Type is int, class is nonexistent.

MyClass foo; // Type is MyClass, class is MyClass

Inspiriert von Wikipedia ...

In Typentheorie Begriffe;

  • Typ ist eine abstrakte Schnittstelle.
    Typen im Allgemeinen darstellen Substantive, wie eine Person, einen Ort oder eine Sache, oder etwas nominalisierte,

  • Klasse stellt eine Implementierung des Art.
    Es ist eine konkrete Datenstruktur und Sammlung von Subroutinen

    Verschiedene konkrete Klassen können Objekte des gleichen abstrakten Typs produzieren (je nach Typ-System).

    * Zum Beispiel könnte man die type Stack mit zwei Klassen implementieren : SmallStack (schnell für kleine Stapel, aber skaliert schlecht) und ScalableStack (Skalen gut, aber hoch oben für kleine Stapel). *

    In ähnlicher Weise eine bestimmte Klasse kann mehr verschiedenen Konstrukteuren .

  

eingeben Bild Beschreibung hier

     

Die Banane Beispiel.

     
      
  • A Banana type , um die Eigenschaften und Funktionen von Bananen im Allgemeinen darstellen würde.

  •   
  • Die ABCBanana und XYZBanana Klassen würden Wege zur Herstellung von Bananen vertreten.
      (Verschiedene Bananenlieferanten im wirklichen Leben oder unterschiedlichen Datenstrukturen und Funktionen darzustellen und Bananen in einem Videospielen zu ziehen).

         

    Die ABCBanana Klasse könnte dann insbesondere Bananen erzeugen, die    Instanzen der ABCBanana Klasse , würden sie Objekte von type sein Banana .

  •   

Es ist nicht selten der Programmierer eine einzige und einzige Implementierung für einen Typen liefern. In diesem Fall wird die Klasse Name ist häufig identisch mit dem type name . Aber es gibt noch eine Art (die in einer Schnittstelle extrahiert werden könnte, falls erforderlich), und eine Implementierung (die die separate Schnittstelle implementieren würde), die Instanzen (Objekte) der Klasse aufbaut.

Typ ist der Oberbegriff für alle verfügbaren Objektvorlagen oder Konzepte. Eine Klasse ist eine solche Objektschablone. So ist der Strukturtyp, der Integer-Typ, der Schnittstellentyp usw. Diese sind alle Typen

Wenn Sie möchten, können Sie es betrachten diese Art und Weise: Eine Art ist die Mutter Konzept. Alle anderen Konzepte: Klasse, Schnittstelle, Struktur, Integer usw. erben von dieser concept.i.e Sie Typen

Typ enthält Beschreibung der Daten (d.h. Eigenschaften, Operationen, usw.),

Klasse ist eine bestimmte Art - es ist eine Vorlage Instanzen von Objekten erstellen .

Genau genommen Klasse ist ein spezielles Konzept, kann es als Paket Teilmenge von Metadaten gesehen werden beschreibt einige Aspekte eines Objekts.

Zum Beispiel in C # können Sie Schnittstellen und Klassen finden. Beide sind Typen, aber Schnittstelle kann nur einigen Vertrag definieren und kann nicht anders als Klassen instanziiert werden.

Einfach gesagt Klasse ist ein spezielle Art verwendet Eigenschaften und das Verhalten eines Objekts zu verkapseln.

Wikipedia kann Ihnen eine vollständigere Antwort:

Um es den schnellsten Weg zu zeigen:

Ein Struct ist ein Typ, aber ein Struct ist keine Klasse.

Wie Sie sehen können, ein Typ ist ein „abstrakt“ Begriff nicht nur für Definitionen von Klassen, sondern auch Strukturen und primitive Datentypen wie float, int, bool.

Typ ist vom Konzept her ein Superset der Klasse. Im weiteren Sinne ist eine Klasse, eine Form der Art.

In engen Zusammenhang mit Klassen bezogen sind Schnittstellen, die als eine ganz besondere Art von Klasse gesehen Biene können - rein abstrakt ein. Auch diese sind Typen.

So „Typ“ umfasst Klassen, Interfaces und in den meisten Sprachen zu Primitiven. Auch Plattformen wie der Dot-net CLR haben Strukturtypen zu.

Meine Gedanken so ziemlich im Einklang mit aku Antwort.

Ich sehe Klassen als Vorlage für Objekte bauen, während Arten eine Art und Weise sind diese Objekte zu klassifizieren, und teilen Sie uns mit einer Schnittstelle zu ihnen.

Python fügt auch metaclasses, die nur ein Mechanismus sind Klassen zu bauen, in der gleichen Weise wie Klassen Objekte bauen (und gut, Klassen und metaclasses sind beide Objekte).

Diese Antwort auf die gleiche Frage in lamba scheint die ultimative ich wie eine perfekte Erklärung.

Genommen von dem GoF Zitat von unten:

  

Eine Objekte Klasse legt fest, wie die   Objekt ist.Die Klasse implementiert   definiert den internen Zustand des Objekts und   die Umsetzung ihrer   Operationen.

     

Im Gegensatz dazu ein Objekt der    Typ bezieht sich nur auf seine Schnittstelle -das   Satz von Anforderungen zu dem es   reagieren.

Ich möchte ein Beispiel schaffen mit Hilfe von Java:

public interface IType {
}

public class A implements IType {
public A{};
}

public class B implements IType {
public B{};
}

Beide Klassen A und B die Schnittstelle implementieren und somit sind vom Typ IType. Zusätzlich in Java, produzieren beide Klassen ihre eigene Art (jeweils mit ihren Klassennamen). So ist die Klasse A ist vom Typ A und IType und die Klasse B ist vom Typ B und IType befriedigend:

  

Ein Objekt kann viele Arten haben,   und Objekte verschiedener Klassen können   hat die gleiche Art.

Der Unterschied zwischen Subtypen und Unterklasse hilft wahrscheinlich, diese Frage zu verstehen, auch:

https: //www.cs.princeton. edu / Kurse / Archiv / fall98 / cs441 / Mainus / node12.html

Um ein anderes Beispiel der Unterscheidung hinzuzufügen. In C ++ Sie Zeiger und Referenztypen haben, die auf Klassen beziehen, sind aber nicht Klassen an und für sich

Bar b; // b is of type "class Bar"
Bar *b2 = &b; // b2 is of type "pointer to Class Bar"
Bar &b3 = b; // b3 is of type "reference to Class Bar"
Bar *b4[7]; // b4 is of type "7-element array of pointers to Class Bar"
Bar ***b5; //b5 is of type "pointer to a pointer to a pointer to Class Bar"

Beachten Sie, dass nur eine Klasse beteiligt ist, sondern eine nahezu unendliche Anzahl von Arten verwendet werden. In einigen Sprachen werden Funktion „First-Class-Objekte“ betrachtet, in dem Fall der Typ einer Funktion ist eine Klasse. In anderen Ländern ist der Typ einer Funktion lediglich ein Zeiger. Klassen haben in der Regel die Konzepte der Lage zu sein, Daten zu halten, sowie Operationen auf diesen Daten.

Ich denke an eine Art als die Menge der Dinge, die Sie mit einem bestimmten Wert zu tun. Zum Beispiel, wenn Sie einen Integer-Wert haben, können Sie es auf andere ganze Zahlen addieren (oder andere arithmetische Operationen durchführen), oder sie Funktionen übergeben, die ein Integer-Argument akzeptieren. Wenn Sie ein Objekt Wert besitzen, können Sie Methoden auf sie aufrufen, die durch seine Klasse definiert sind.

Da eine Klasse definiert, was Sie mit Objekten dieser Klasse tun kann, definiert eine Klasse einen Typ. Eine Klasse ist mehr als das obwohl, da es bietet auch eine Beschreibung, wie die Methoden implementiert werden (was nicht durch die Art impliziert) und wie die Felder des Objekts angelegt.

Beachten Sie auch, dass ein Objektwert kann nur eine Klasse, aber es kann mehrere Typen hat, da jede übergeordnete Klasse in der Klasse des Objekts eine Teilmenge der Funktionalität zur Verfügung stellt.

Obwohl also Objekte und Typen eng miteinander verwandt sind, sind sie wirklich nicht das Gleiche.

Typ bezieht sich allgemein auf die Klassifizierung von Grundwerten -. Zahlen, Strings, Arrays, booleans, null, etc. In der Regel können Sie keine neue Typen erstellen

Klasse bezieht sich auf die benannte Gruppe von Eigenschaften und Methoden, die ein Objekt zugeordnet ist, wenn es erstellt wird. Sie können in der Regel so viele neue Klassen definieren, wie Sie wollen, obwohl einige Sprachen Sie ein neues Objekt erstellen und dann Methoden anhängen, um es.

Diese Definition meist wahr ist, aber einige Sprachen haben versucht, Typen und Klassen auf verschiedene Weise zu kombinieren, mit verschiedenen vorteilhaften Ergebnissen.

Typen und Klassen sind verwandt, aber nicht identisch. Meine Meinung ist, dass Klassen für die Umsetzung Vererbung verwendet werden, während Typen zur Laufzeit Substitution verwendet werden.

wikipedia Seite auf Kovarianz und Kontra hat weitere Informationen über diese Auszeichnung.

Interessante Frage. Ich denke, aku Antwort ist vor Ort auf. Nehmen Sie die Java ArrayList Klasse als Beispiel

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

Eine Instanz der ArrayList Klasse gesagt wird, vom Typ einer jeder übergeordneten Klasse sein, es erweitert und jede Schnittstelle bereitstellt. Daher hat eine Instanz der Klasse ArrayList einen Typ ArrayList, RandomAccess, Cloneable, und so weiter. Mit anderen Worten, Werte (oder Instanzen) gehören zu einem oder mehreren Typen, Klassen definieren, was diese Typen sind.

Verschiedene Klassen können den gleichen Typ beschreiben.

Typ besteht aus folgenden Teilen:

  1. Operationen = Syntax
  2. Beschreibung von Operationen = Semantik

Klasse besteht aus folgenden Teilen:

  1. Operationen = Syntax
  2. Implementierung (= verschiedene Implementierungen beschreiben gleiche Semantik)

Einige Hinweise:

  • Interface (wie in Java) Typ ist nicht, weil es Semantik nicht beschreiben (beschreibt nur Syntax)

  • Unterklasse nicht Subtyp ist, weil Unterklasse Semantik in Superklasse definiert ändern kann, Subtyp nicht übergeordnete Typ Semantik ändern kann (siehe Liskov Substitutionsprinzip, zB dieses LSP Beispiel ).

Natürlich, da gibt es Sprachen mit Typ-System, das nicht OO Programmiersprachen sind, type muss ein breiteres Konzept als Klasse

Auch in Sprachen wie Java, int ist ein (primitiver) Typ, aber keine Klasse.

Also: Jede Klasse ist ein Typ, aber nicht jede Art ist eine Klasse

.

Wenn wir auf diese Frage in C # Kontext denken, erreichen wir unten Antwort.

C # Typ-System ist in folgende Kategorien unterteilt:

Werttypen:

  • Einfache Typen: wie int, long, float, usw.
  • Enum-Typen
  • Struct-Typen
  • Nullable Typen

Referenztypen:

  • Klassentypen
  • Schnittstellentypen
  • Array-Typen
  • Delegattypen

Wie Sie sehen, gibt es viele Arten in C #, die Klasse nur einer von ihnen ist. Es gibt nur ein wichtiger Hinweis: C #‘s-Typ-System ist so vereinigt, dass ein Wert von jedem Typ kann als ein Objekt behandelt werden. Jede Art in C # direkt oder indirekt ergibt sich aus dem Objektklassentyp und Objekt ist die ultimative Basisklasse aller Art. Werte der Referenztypen werden als Objekte einfach durch Betrachten der Werte als Typ Objekt behandelt. Werte der Werttypen werden als Objekte behandelt durch Boxen und Unboxing-Operationen.

so wie ich sehe, Typ ist ein Regenschirm über viele Elemente, welche Klasse ist einer von ihnen.

Referece: CSahrp Language Specification doc, Seite 4

In allgemeine sprachunabhängig Sinn -. Klasse ist eine Realisierung des Typ

Oft, wenn dies ist die nur Realisierung dieses Typs können Sie beiden Begriffe verwenden Sie es in einem bestimmten Kontext zu verweisen.

Im Gegensatz zum Beispiel in C # Kontext - Klasse ist nur ein der viele mehr Implementierungen von Typ Konzept wie Primitiven, structs, Zeiger etc.

Das war eine gute Frage für mich, die mich hart gemacht denken. Ich würde es wagen, dass die Klasse zu sagen, ist ein compiletime Dingen und Typ ist ein Runtime-Dingen. Ich sage das, weil Sie Klassen nicht Typen schreiben. Der Compiler dann Typen von Klassen erstellt, und die Runtime-Nutzungstypen Instanzen von Objekten zu erstellen.

Typen in C, wie Int Float, char etc definieren, mit Daten, die auf spezifische Verfahren beaufschlagt werden kann, die auf ihnen arbeiten kann. Es ist nicht komplizierter als das. Wie für int kann ich addieren, subtrahieren multiplizieren und vielleicht teilen. Das sind meine Methoden (oder Operationen) für int. Eine Klasse ist einfach eine Definition eines neuen Typs. Ich zuerst definieren, was die Daten aussehen. Vielleicht ist es ein einzelnes Bit. Vielleicht ist es zwei Worte wie ein Komplex mit einem realen und imaginären Teil. Oder vielleicht ist es diesen Komplex Dingen mit 309734325 Bytes, die die Atom Make-up von einer seltsamen Teilchen auf Jupiter darstellen. Ich interessiere mich nicht. Genau wie eine ganze Zahl ist, bekomme ich die Operationen bildet ich mit diesem neuen Datentyp zu tun. Im Fall der ganzen Zahl hatte ich addiert, subtrahiert, usw. Mit diesem neuen Datentyp kann ich, was ich denke, Operationen sinnvoll definieren. Sie könnten hinzufügen usw. abziehen, aber sie können auch andere Dinge hinzufügen. Diese sind, was auch immer Methoden, die ich entscheiden, meine Klasse hinzuzufügen.

Das Endergebnis ist, dass mit einem Typ in C, haben Sie eine Definition dessen, was die Daten, das heißt; ein Byte, Wort, float, char usw. Aber jeder von ihnen impliziert auch, welche Operationen der geltenden Rechtslage und zuverlässige Ergebnisse liefern.

Eine Klasse ist es nicht anders, außer es liegt an Ihnen, die Schnittstelle und akzeptabel Operationen zu definieren. Die Klasse definiert diese Dinge und wenn Sie es in einem Objekt instanziiert definiert sie das Verhalten des Objekts wie eine Typdefinition das Verhalten einer ganzen Zahl definiert, wenn Sie darauf arbeiten.

Klassen geben Sie einfach die Flexibilität, neue Arten und alles über zu definieren, wie sie funktionieren.

Sobald dies definiert ist, jedes Mal wenn ich ein Objekt der Klasse „Dingens“ instanziiert, hat es die Datenstruktur I definiert und die Operationen (Methoden), die ich sagte, Sie damit machen können. Die Klasse „Ding“ ist eindeutig nicht mehr und nicht weniger als eine neue Art, die C ++ läßt mich definieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top