LINUX.ORG.RU

Классы и типы

 , , ,


0

2

Мне кажется, что если мы введем следующие ограничения для классов:

1 иммутабельность

2 запрет суперклассов

, то мы получим типы. Иными словами, типы, с точки зрения семантики, являются частным случаем классов. Разумеется, я тут не рассматриваю вопросов статической проверки, только семантика. Так ли это?

Тип «с точки зрения семантики» это вообще банальный ярлычок с названием, приклеенный к кусочку данных. Важен весь остальной аппарат.

buddhist ★★★★★
()
Последнее исправление: buddhist (всего исправлений: 2)

Хм… Ты только что понял что класс типов — иммутабельный словарь функций? Ну… Примерно так.

KblCb ★★★★★
()

если мы введем следующие ограничения для классов

Для «классов» из какого языка? По тегам не ясно.

sf ★★★
()

Круг нарисовал уже?

anonymous
()

Мне кажется, что если мы введем следующие ограничения для круга:

1 круг это круглый эллипс

2 запрет некруглых эллипсов

, то мы получим круг. Иными словами, круг, с точки зрения семантики, является частным случаем эллипса. Разумеется, я тут не рассматриваю вопросов здравого смысла, только семантику. Так ли это? Смогу ли я тогда нарисовать круг?

Virtuos86 ★★★★★
()
Ответ на: комментарий от hateyoufeel

Дай сначала с кругами разобраться.

Stil ★★★★★
()
Ответ на: комментарий от hateyoufeel

Читайте внимательнее. Если квадрат это эллипс с углами, значит он некруглый. А некруглые эллипсы мы договорились запретить, согласно пункту 2. Поэтому рисовать квадрат не нужно.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Читайте внимательнее. Если квадрат это эллипс с углами, значит он некруглый.

Почему нет? Чтобы квадрат был круглым, у него должны быть круглые углы.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Квадрат с круглыми углами, очевидно, является кругом, что сводит задачу к изначальной - как нарисовать круг?

Virtuos86 ★★★★★
()

типы, с точки зрения семантики, являются частным случаем классов

Т.е. если классов нет в языке нет, то с точки зрения семантики типов нет?

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Т.е. если классов нет в языке нет, то с точки зрения семантики типов нет

С точки зрения семантики классы есть всегда. И типы тоже. То, что в языке программирования они синтактически не выделяются, несущественно.

monk ★★★★★
()
Ответ на: комментарий от monk

С точки зрения семантики классы есть всегда. И типы тоже. То, что в языке программирования они синтактически не выделяются, несущественно.

Воу воу, давай оперировать таки контекстными терминами, а то всё перепутается.

Класс это херня у которой есть конструктор и у которого есть инстансы с торчащими методами. Его действительно может не быть.

Тип — Классы и типы (комментарий)

Debasher ★★★★★
()
Последнее исправление: Debasher (всего исправлений: 1)
Ответ на: комментарий от Debasher

Класс это херня у которой есть конструктор и у которого есть инстансы с торчащими методами. Его действительно может не быть

Ну и чем тебе, например, https://developer.gnome.org/gtk3/unstable/GtkWidget.html не класс? А эту структуру + набор функций можно написать на любом (полном по Тьюрингу) языке.

monk ★★★★★
()
Ответ на: комментарий от Debasher

Класс это херня у которой есть конструктор и у которого есть инстансы с торчащими методами.

Структура и набор функций это не класс.

Чем тебе структура не херня и набор функций не торчащие методы?

monk ★★★★★
()
Ответ на: комментарий от dave

Это потому, что в посте ничего не написано кроме воды.

Aswed ★★★★★
()
Ответ на: комментарий от Debasher

расширим определение вспомнив что такое инкапсуляция.

Так в

https://developer.gnome.org/gtk3/unstable/GtkWidget.html

она есть.

И в части сокрытия данных в GtkWidget* и в части объединения данных (GtkWidget) и функций (gtk_widget_*) в единый компонент.

А учитывая, что мы говорим только о семантике, а не синтаксисе, то инкапсуляция, ака «упаковка данных и/или функций в единый компонент» существует везде, где программист несколько функций и структур данных выделил в отдельный раздел спецификации. Например int 33h в MS DOS :-)

monk ★★★★★
()
Ответ на: комментарий от Debasher

А учитывая, что мы говорим только о семантике

Ни к чему полезному не придём

Ну почему же? Полезной является мысль о том, что программа вместе с её артефактами (классами, типами, событиями, сообщениями, ...) находится не в языке программирования, а в голове программиста (ну и немножко на бумаге). Язык программирования может только помогать (в фатальных случаях, заставлять) программировать в определённом стиле. Но, в целом, «настоящий программист может написать программу на Фортране на любом языке»©.

monk ★★★★★
()
Ответ на: комментарий от monk

Ну почему же?

Потому что нужно найти баланс между абстракцией и реализацией, перекос в любую из сторон и забывание о рядом лежащих вещах делает нас похожими на anonimous'a.

а в голове программиста

Да, но ему же надо это логически оформить чтобы перевести в кот, а для этого надо немного думать на языке программирования.

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Да, но ему же надо это логически оформить чтобы перевести в кот, а для этого надо немного думать на языке программирования

Нет. Думать надо в терминах математики, алгоритмов и структур данных. А уже потом переводить на язык программирования. Иначе будут рождаться фабрики фабрик классов и прочие чудовища, порождённые сном разума.

А если абстрактного мышления не хватает, тогда хотя бы выучить по языку на каждую возможную концепцию: ассемблер, Си++, форт, лисп, схема, хаскел, пролог, тсл, перл, ...

monk ★★★★★
()
Ответ на: комментарий от Hertz

Это Царь что-ли?

Нет, царь матан ботанит. Ждите убийцу теории множеств.

anonymous
()
Ответ на: комментарий от Debasher

Причём тут она

Например, пишешь ты на Perl программу, удаляющую комментарии из HTML/JS. С точки зрения терминов языка программирования естественным решением будет попытка написать на регулярных выражениях и построчная обработка (это шаблон большинства программ на Perl). А с точки зрения математики, во-первых, очевидно, что в терминах регулярных выражений строгого решения данная задача не имеет, во-вторых, для разбора (парсинга) разбивка на строки будет скорее мешать, чем помогать.

monk ★★★★★
()
Ответ на: комментарий от monk

Например, пишешь ты на Perl программу

Уже маловероятно :-) Но допустим.

А с точки зрения математики

Почему именно математики? Здравый смысл не всегда математика.

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Здравый смысл не всегда математика.

Математика — это типовые алгоритмы. Здравый смысл, конечно, вещь хорошая, но не всегда достаточная. Скажем, для сортировки массива большинство могут с точки зрения здравого смысла придумать (не зная заранее) прямую сортировку, или сортировку пузырьком, но не быструю.

А без понимания математики, с точки зрения «здравого смысла», люди считают, что

qsort [] = []
qsort (x:xs) = qsort [y | y <- xs, y < x ] ++ [x] ++ qsort [y | y <- xs, y >= x]
является реализацией быстрой сортировки

То, что в данной сортировке вместо массива список и вместо сортировки на месте данные многократно копируются, остаётся незамеченным.

monk ★★★★★
()
Ответ на: комментарий от monk

То, что в данной сортировке вместо массива список и вместо сортировки на месте данные многократно копируются, остаётся незамеченным.

Казалось бы, причем здесь математика?

Ну и ждем от тебя «строгое решение» задачи по удалению комментариев из HTML/JS.

anonymous
()
Ответ на: комментарий от anonymous

Казалось бы, причем здесь математика?

При области определения алгоритма. Также как тут на ЛОРе люди то путаются с бесконечностями и арифметикой, то с вероятностями, так как пытаются определять операции с точки зрения «здравого смысла».

Ну и ждем от тебя «строгое решение» задачи по удалению комментариев из HTML/JS.

О, боги! Ну ладно

машина состояний

для всех состояний
"читаем символ" = 
   если файл закончился
   тогда выйти из программы
   иначе получаем символ из файла, запоминаем в буфер
"вывести буфер" =
   записать буфер в выходной файл
   очистить буфер
состояние HTML: 
    читаем символ
    если в конце буфера "<!--", 
    тогда
        вывести буфер без последних "<!--"
        перейти HTMLComment
    если в конце буфера без учёта регистра 
        '<SCRIPT type="text/javascript">'
         или '<SCRIPT>',
    тогда
        вывести буфер 
        перейти JS
состояние HTMLComment: 
    читаем символ
    если в конце буфера "-->", тогда
        очистить буфер
        перейти HTML
состояние JS:
    читаем символ
    если в конце буфера без учёта регистра "</SCRIPT>", тогда
        вывести буфер
        перейти HTML
    если в конце буфера "//", тогда
        вывести буфер без последних "//"
        перейти JSLine
    если в конце буфера "/*", тогда
        вывести буфер без последних "/*"
        перейти JSBlock
состояние JSLine:
    читаем символ
    если в конце буфера конец строки, тогда
        очистить буфер
        перейти JS
    если в конце буфера без учёта регистра "</SCRIPT>", тогда
        очистить буфер
        перейти HTML
состояние JSBlock:
    читаем символ
    если в конце буфера "*/", тогда
        очистить буфер
        перейти JS
    если в конце буфера без учёта регистра "</SCRIPT>", тогда
        очистить буфер
        перейти HTML

monk ★★★★★
()
Ответ на: комментарий от Debasher

Тут именно отсутствие здравого смысла

Значит тебе повезло, и математические конструкции ты понимаешь интуитивно.

P.S. Алгоритмы и структуры данных — это именно математические конструкции, а не конструкции языка программирования.

monk ★★★★★
()
Ответ на: комментарий от monk

При области определения алгоритма.

А если ты в борщ вместо свеклы положил капусту, то это тоже про математику?

Включить огонек.
Налить водичку.
Положить свеколку.
Посолить.
Помешать.

Ну круто, пойду расскажу бабушке, что она крутой математик оказывается.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.