Чем отличается тип данных от класса?
primitive type - это вшитая в язык конструкция
не было бы примитивного инта, нельзя было бы написать класс-обертку
примитивные типы быстрее из-за отсутствия наворотов от класса
и совместимы
речь идёт о MC++? Насколько я понимаю, так int и System::Int32 - это одно и то же, и Int32 является не классом (который - reference-type а value-type
В Haskell есть деление на классы и экземпляры (instance которого нет в ООП. Класс только определяет набор и сигнатуры методов, экземпляр только реализует их. Т. о. автоматически отпадает проблема множественного наследования. Классы не наследуют и не переопределяют методы других классов — каждый метод принадлежит только одному классу. Такой подход проще, чем сложная схема взаимоотношений классов в ООП. Некоторый тип данных может принадлежать нескольким классам; класс может требовать, чтобы каждый его тип обязательно принадлежал к другому классу, или даже нескольким; такое же требование может выдвигать экземпляр. Это аналоги множественного наследования. Есть и свойства, не имеющие аналогов в ООП. Например, реализация списков как экземпляра класса сравнимых величин требует, чтобы элементы списка также принадлежали к классу сравнимых величин.%
class type и data type не перепутал?
Ч0?
но типы и классы в хаскелле же правда отличаются. я от этого офигел, когда узнал.
ну да, а в жаве/шарпе классы и интерфейсы отличаются. Чудеса, да?
а класс там что такое?
Очень удобно, но язык довольно-таки прожорливый (я про память).
в хаскелле тип объекта получается композицией классов, которым он принадлежит.
Да вот ситуацияпочти такая же, как в Хаскеле, только терминология другая. Интерфейс задаёт контракт, класс - определяет реализацию.
http://en.wikipedia.org/wiki/Type_class
Короче, хаскеловские классы - это совсем не то, что в ООП привыкли называть классами. Это классы типов, а не классы объектов. Нечто, напоминающее интерфейсы в языках типа джавы.
Кроме того, ООП-теоретики указывали на различия между понятиями класса и типа, которые
проявляются при сравнении subtyping и subclassing..
в джаве вроде похоже, потому что объединять интерфейсы в одной реализации можно с помощью наследования.
(там цитата не моя а с викибукс. сорри, если там что-то не так, я ее понял именно так, как ты потом объяснил).
А есть в каком-нибудь ещё языке кроме питона такое понятие как метаклассы? Это типа конструктор классов, ну что-то вроде класса, объекты которого - классы.
template в C++? Generics в Java/C#? System.Type в .NET?
ну вот в хаскелле классы — это такие штуки, объекты которых — типы.
В Руби есть нечто похожее, вроде.
Правда, сходство в основном в названии. Тут подробности:
http://mobcode.com/2006/12/22/charting-ruby-class-and-metacl...
Про остальное вообще в первые слышу, надо будет почитать.
В языках типа С++, джавы и шарпа так сложилось исторически - есть примитивные заранее определенные типы, и есть более сложные сущности - классы.Untrue в отношении шарпа (и, практически наверняка, жавы).
typeof(int) == typeof(System.Int32)
Это просто алиас.
При этом System.Int32 есть структура, состоящая ровно из четырёх байтов и являющаяся сишным четырёхбайтным интом for all conceivable purposes. К этой структуре приписаны методы, как статические, так и instance. Static typing в сочетании с правилом structures are sealed (final) (в шарпе есть специальное словосочетание: value type) позволяет реализовать это без дополнительных затрат памяти на classId.
В жаве долгое время не было автоматического боксинга/анбоксинга, поэтому использовались два разных объявления, просто int, который попадал на стек (при объявлении локальной переменной) или непосредственно в структуру encapsulating class (при объявлении члена и другое, боюсь неправильно написать, которое описывало указатель на класс, содержащий инт. В шарпе как-то без этого обошлись, причём забавно, бокснутые инты в принципе существовали, а описывающий их тип появился только во второй версии.
Оставить комментарий
zrab
В С++ можно написатьSystem::Int32 i = 1;
а можно
int i = 1;
чем эти 2 объявления отличаются? И зачем вообще тип данных, если есть классы (кроме удобства)?