Типы данных по сравнению с объектами ООП - PullRequest
1 голос
/ 21 декабря 2009

Является ли тип данных частью кода? Другими словами, это программное обеспечение? Я говорю о фундаментальных типах данных, таких как integer, char и т. Д. Если это так, означает ли это, что объекты в ООП-программировании являются расширениями типов данных? То есть, в основном, программисты подняли типы данных на другой уровень при создании объектов?

Ответы [ 5 ]

2 голосов
/ 21 декабря 2009

Если вы готовы к действительно мощному мозговому питанию, вам стоит посетить OOPSLA Onward этого года! эссе Уильяма Кука: О понимании абстракции данных, вновь . Он обсуждает абстрактные типы данных и объекты.

1 голос
/ 21 декабря 2009

Да, это код. Да, это программное обеспечение. Вы можете думать о всех «фундаментальных» типах данных как об абстракциях функций, которые происходят в битах внутри вашего процессора. Для выполнения этой абстракции куда-то нужен программист - программист языка или компилятор и т. Д. Насколько далеко эта абстракция от того, что происходит в процессоре электрически, зависит от языка. Например, «фундаментальный» тип данных, такой как «целое число» в C #, на самом деле довольно сложен в том, как он перемещается в памяти. Например, есть понятие под названием «бокс», которого нет в языке, подобном Си. Реализация этой функциональности требует программиста, следовательно, это программное обеспечение.

1 голос
/ 21 декабря 2009

Вопрос о том, являются ли типы данных «кусочком кода»: в конечном счете, да. если не на самом языке, то на языке, который использовался для создания языка, на котором вы программируете.

Относительно "фундаментальных типов данных": я думаю, что вы имеете в виду "примитивные типы". То, что является и не считается примитивным типом, полностью зависит от вашего языка программирования. Вы упомянули integer и char, но их нет на многих языках. Многие языки объединяют все виды числовых типов в один числовой тип. Некоторые языки различают целые числа со знаком и без знака. Языки, в которых отсутствует отдельный тип символа, могут вместо этого использовать число или строку символов.

Независимо от того, какие типы примитивов определяет язык, вы не можете иметь «черепашек на всем пути» - в языках всегда есть некоторая встроенная «магия» (типы данных, операторы), на которой вы можете построить свой код. И иногда язык может поддерживать добавление новых типов или даже изменение встроенных типов.

Относительно «объектов в ООП как расширения типов данных»: я бы определенно рассматривал классы и интерфейсы в языках ООП как типы . Но я думаю, что говорить о том, что они являются типами данных, не значит, что они тоже могут определять поведение. И возможно, что класс OO определяет только статические методы, позволяя данным проходить через него, не сохраняя сами данные.

Кроме того, это зависит от того, что вы подразумеваете под "расширяет". Во многих языках ООП вы действительно можете расширить существующие классы с помощью наследования, но это может оказаться невозможным для расширения примитивных типов. Наконец, многие языки позволяют вам определять новые типы данных посредством композиции. Например, структура C является таким составным типом. Я бы никогда не назвал такую ​​структуру расширением составляющих ее типов, это просто совершенно новый тип.

Я бы согласился сказать, что некоторые языки имеют расширяемую систему типов: то есть, она позволяет программисту создавать свои собственные типы. Но, как только что проиллюстрировано для структур Си, это не ограничивается ОО-языками.

Если вам интересна эта тема, вы можете прочитать о ней много в википедии: http://en.wikipedia.org/wiki/Primitive_data_type http://en.wikipedia.org/wiki/Type_theory http://en.wikipedia.org/wiki/Type_system

0 голосов
/ 21 декабря 2009

Объекты - это способ реализации абстрактных типов данных (для формального определения см. Абстрактный тип данных в WikiPedia ), но абстракция данных - это только один из компонентов, составляющих ООП (см. Объект -ориентированный язык программирования в Википедии ). Другими важными компонентами ООП являются инкапсуляция, наследование и полиморфизм.

0 голосов
/ 21 декабря 2009

Согласно определению webopedia , это действительно программное обеспечение. Я думаю, что «расширение» - не то слово, но вы можете заявить (с некоторой тщательностью и в правильном контексте), что все объекты существуют вне фундаментальных типов данных. И все основные типы данных существуют из единиц и нулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...