17 ответов:
следующий ответ из книги Gof (шаблоны проектирования)
объекта класс определяет, как объект реализован .Класс определяет внутреннее состояние объекта и реализация его оперативный.
напротив, объект тип относится только к его интерфейсу-a набор запросов, на которые он может отвечать.
объект может иметь много типов, и объекты разных классов могут есть такой же тип.
//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 comparision }функция max требует тип с операции > С его собственным типом в качестве одного из его интерфейсов любой класс, который удовлетворяет вышеуказанному требованию, может быть использован для создания конкретной функции max для этого класса.
Я всегда думаю о "типе" как о зонтичном термине для "классов" и "примитивов".
int foo; // Type is int, class is nonexistent.
MyClass foo; // Type is MyClass, class is MyClass
вдохновленный Википедия...
на теория условия;
A тип - это абстрактный интерфейс.
Типы обычно представляют существительные, такие как человек, место или вещь, или что-то номинированное,A класс представляет реализацию типа.
Это конкретная структура данных и набор подпрограммразличные конкретные классы могут создавать объекты того же абстрактного типа (в зависимости от типа системы).
*например, можно реализовать тип
Stackс классы:SmallStack(быстро для небольших стеков, но плохо масштабируется) иScalableStack(Весы хорошо, но высокие накладные расходы для малых стеков).*аналогично, данный класс может иметь несколько различных конструкторы.
примере банана.
A
Bananaтип будет представлять свойства и функциональность бананов в целом.The
ABCBananaиXYZBananaклассы будет представлять способы производства бананов.
(Различные поставщики бананов в реальной жизни, или различные структуры данных и функции для представления и рисования бананов в видеоигре).The
ABCBananaкласс может затем производить определенные бананы, которые являются экземпляров наABCBananaкласс они будут объекты на тип банан.не редко программист предоставляет единственную и единственную реализацию для типа. В этом случае класс имя часто совпадает с имя типа. Но есть еще тип (который может быть извлечен в интерфейсе, если требуется) и реализация (которая будет реализовывать отдельный интерфейс), которая строит экземпляры (объекты) класса.
тип-это общий термин для всех доступных шаблонов объектов или понятий. Класс является одним из таких шаблонов объектов. Так же как и тип структуры, целочисленный тип, тип интерфейса и т. д. Это все типы
Если вы хотите, вы можете посмотреть на это так: тип-это родительская концепция. Все остальные понятия: класс, интерфейс, структура, целое число и т. д. наследуются от этого понятия.я.есть несколько видов
тип содержит описание данных (т. е. свойства, операции и т. д.),
класс-это определенный тип - это шаблон для создания экземпляров объекты.
строго говоря, класс-это специальное понятие, его можно рассматривать как пакет, содержащий подмножество метаданных описание некоторых аспектов объекта.
например, в C# вы можете найти интерфейсы и классы. Оба они являются типами, но интерфейс может определить только некоторые контракт и не может быть создан в отличие от классов.
проще говоря класс это специализированного типа используется для описания свойств и поведения объекта.
Википедия может дать вам более полный ответ:
чтобы проиллюстрировать это самым быстрым способом:
структура-это тип, но структура-это не класс.
Как вы можете видеть, тип-это "абстрактный" термин не только для определений классов, но и для структур и примитивных типов данных, таких как float, int, bool.
тип концептуально является надмножеством класса. В более широком смысле класс - это одна из форм типа.
тесно связаны с классами интерфейсы, которые можно рассматривать как очень особый вид класса-чисто абстрактный. Это тоже типы.
Итак, "тип" охватывает классы, интерфейсы и в большинстве языков примитивы тоже. Также платформы, такие как dot-net CLR, также имеют типы структуры.
мои мысли в значительной степени соответствуют ответу Аку.
Я вижу классы как шаблон для построения объектов, в то время как типы-это способ классифицировать эти объекты и предоставить нам интерфейс к ним.
Python также добавляет метаклассы, которые являются просто механизмом для построения классов, так же, как классы строят объекты (и хорошо, классы и метаклассы-это оба объекта).
этот ответ на тот же вопрос в Ламба предельный кажется мне идеальным объяснением.
добавить еще один пример различия: в C++ у вас есть указатели и ссылочные типы, которые могут ссылаться на классы, но не классы сами по себе.
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"обратите внимание, что задействован только один класс, но можно использовать почти бесконечное число типов. В некоторых языках функции считаются "объектами первого класса", и в этом случае тип функции является классом. В других тип функции-это просто указатель. Классы обычно имеют понятия бытия возможность хранения данных, а также операций с этими данными.
взято из цитаты GoF снизу:
объекты класс определяет, как объект реализован .Класс определяет внутреннее состояние объекта и реализация его оперативный.
напротив, объекты тип относится только к его интерфейсу - набор запросов, на которые он может отвечать.
Я хочу привести пример использования Java:
public interface IType { } public class A implements IType { public A{}; } public class B implements IType { public B{}; }классы
AиBреализуют интерфейс и таким образом имеют типIType. Кроме того, в Java оба класса создают свой собственный тип (соответственно их имени класса). Таким образом, классAтипаAиITypeи классBтипаBиITypeудовлетворение:объект может иметь много типов, и объекты разных классов могут есть же тип.
разница между подтипами и подклассом, вероятно, помогает понять и эту проблему:
https://www.cs.princeton.edu/courses/archive/fall98/cs441/mainus/node12.html
Я думаю о типе как о наборе вещей, которые вы можете сделать с определенным значением. Например, если у вас есть целочисленное значение, вы можете добавить его к другим целым числам (или выполнить другие арифметические операции) или передать его в функции, которые принимают целочисленный аргумент. Если у вас есть значение объекта, вы можете вызвать на нем методы, определенные его классом.
поскольку класс определяет, что вы можете делать с объектами этого класса, класс определяет тип. Класс-это больше, чем это, хотя, поскольку он также предоставляет описание того, как реализуются методы (что-то не подразумевается типом) и как выкладываются поля объекта.
Обратите также внимание, что значение объекта может иметь только один класс, но может иметь несколько типов, поскольку каждый суперкласс предоставляет подмножество функций, доступных в классе объекта.
поэтому, хотя объекты и типы тесно связаны, они на самом деле не одно и то же.
тип обычно относится к классификации примитивных значений - целые числа, строки, массивы, логические значения, значения NULL и т. д. Как правило, вы не можете создавать новые типы.
класс относится к именованному набору свойств и методов, с которыми связан объект при его создании. Обычно вы можете определить столько новых классов, сколько хотите, хотя в некоторых языках вам нужно создать новый объект, а затем присоединить к нему методы.
этот определение в основном верно, но некоторые языки пытались комбинировать типы и классы различными способами, с различными полезными результатами.
типы и классы связаны, но не идентичны. Я считаю, что классы используются для наследования реализации, тогда как типы используются для замены времени выполнения.
здесь ссылка объяснением принцип замещения и почему подклассы и подтипы не всегда одно и то же (в Java, например). Элемент Википедия страница о ковариации и контравариации содержит дополнительную информацию об этом различии.
интересный вопрос. Я думаю, что ответ Аку на месте. Возьмите java
ArrayListкласс в качестве примераpublic class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializableэкземпляр
ArrayListкласс называется типом каждого суперкласса, который он расширяет, и каждого интерфейса, который он реализует. Следовательно, экземплярArrayListкласс имеет типArrayList,RandomAccess,Cloneableи так далее. Другими словами, значения (или экземпляры) принадлежат одному или нескольким типам, классы определяют, что это за типы.
разные классы могут описывать один и тот же тип.
тип состоит из следующих частей:
- операции = синтаксис
- описание операций = семантика
класс состоит из следующих частей:
- операции = синтаксис
- реализация (= различные реализации описывают одну и ту же семантику)
некоторые замечания:
интерфейс (как в Java) не является типом, потому что он не описывает семантику (описывает только синтаксис)
подкласс не является подтипом, поскольку подкласс может изменять семантику, определенную в суперклассе, подтип не может изменять семантику супертайпа (см. Принцип подстановки Лискова, например этот пример LSP).
очевидно, что существуют языки с системой типов, которые не являются языками программирования OO,тип должно быть более широкое понятие, чем класс
даже в таких языках, как Java,
intявляется (примитивным) типом, но не классом.следовательно: каждый класс является типом, но не каждый тип является классом.
Если мы думаем на этот вопрос в контексте C#, мы достигаем ниже ответа.
система типов C# делится на следующие категории:
значение типа:
- простые типы: как инт, длиной, поплавок, ЕТК.
- типы перечислимые
- типы структуры
- типы с нулевым значением
ссылка типа:
- типы класс
- типы интерфейсов
- массив типы
- типы делегата
Как вы можете видеть, в C# есть много типов, класс которых является только одним из них. Есть только одно важное замечание: Система типов C#унифицирована таким образом, что значение любого типа может рассматриваться как объект. Каждый тип в C# прямо или косвенно происходит от типа класса object, и object является конечным базовым классом всех типов. Значения ссылочных типов обрабатываются как объекты просто путем просмотра значений как объекта типа. Значения стоимости типы обрабатываются как объекты путем выполнения операций упаковки и распаковки.
Итак, как я вижу, тип-это зонтик над многими элементами, класс которых является одним из них.
Referece: csahrp Language Specification doc, page 4

Comments