?

Log in

No account? Create an account
функции, рождающие классы - dz

> Свежие записи
> Архив
> Друзья
> Личная информация
> DZ Online

Апрель 14, 2009


Previous Entry Поделиться Next Entry
07:19 am - функции, рождающие классы
Здравствуй, мой необъектный друг. Я, наверное, уже тебя задолбал своими письмами программистам. Извини. Следующее - под катом, чтобы не смущать нормальных людей странными текстами. :)


Мне тут, опять же, в комментах выкатили, что определение "каждая функция порождает класс" неконструктивно, абстрактно, и не радует глаз функционального программиста. Ну, радовать глаз я не нанимался, а в остальном отвечу. Ни фи га. Очень конструктивно и конкретно. Давайте посмотрим, какой же ИМЕННО класс порождает функция. (Смотрите - я даже методом её не называю, вот как я бережно к вам отношусь!:)

Давайте рассмотрим функцию, которая передвигает свой аргумент 1 в позицию аргумента 2:

void f(w, x) { w.x = x; }
ну или для фп это будет функция, которая вернёт новый инстанс w такой, что в нём какая-то хрень, хранящая функцию для вычисления x, будет заменена на новую, которую передали в параметре x. это, в данном случае, монофигственно.

какой же такой класс она вводит? Ох, какой-то странный абстрактный непонятный, да? Чёрт, ни фига не вкуриваю, что ж за такой класс. Глупый какой-то. Никому не нужный вредный странный класс. Э. Или нет? Ой. Да это же класс "объекты, имеющие координату x". Типа, любые, какие спозиционированы в некотором, по крайней мере, одномерном пространстве. Странно, да? Неожиданно как-то. И куда ж такие годятся? Ох, чёрт - да это ж всякие окна, кнопки, виджеты... Или типа объекты на игровом поле - ну, то есть, вроде, вполне понятные вещи.

Если добавить y и z, то получается и вообще понятный класс - совершенно осмысленный класс "объекты, имеющие координаты в трёхмерном пространстве".

Это потому, что функция вводит класс не абы как - вот тут я такая родилась, и какой-то класс ввела, а какой - неясно. Она вводит класс в силу факта взаимодействия со свойствами своих аргументов. Функция требует аргументов x, y и z, и ТРАКТУЕТ их как координаты объекта. Тем самым фактом она вводит - требует от нас - наличия класса объектов "объекты с координатами в трёхмерном пространстве", коий совершенно конкретен и осмыслен.

Требует в силу СМЫСЛА производимого ей действия. Не абстрактно, а совершенно конкретно. Если вы хотите иметь функцию "двигать шкафы", то уже помыслив (!) это желание вы определили класс "шкафы" и уточнили, что они обладают свойством "быть двигаемыми", к коему ваша функция и будет аппелировать в процессе работы.

А реализовать его можно и функционально тоже, это да. И даже к-мерно. О, тема: к-мерный конь в вакууме.
 

(18 комментариев | Оставить комментарий)

Comments:


From:growler
Date:Апрель 14, 2009 05:38 am
(Link)
:)
Какой класс вводит Y-комбинатор?
[User Picture]
From:dz
Date:Апрель 18, 2009 10:23 pm
(Link)
спасибо. изящно. :)

Хотя это можно было и проще спросить. какой класс вводит функция int isOne() { return 1; }

вырожденные случаи - бывают.

между прочим, это ещё раз двигает меня к мысли, что фп - это такая математика от программирования - чем ближе к полной абстракции, тем уместней.
[User Picture]
From:voidex
Date:Апрель 14, 2009 06:05 am
(Link)
Я отчаянно пытаюсь понять Ваше понимание ОО, а потом сравнить его с общепринятым в современных языках и с классическим. Боюсь, что общего не будет почти ничего, кроме терминов.

Класс в Вашем представлении, это явно не тип, а скорее интерфейс, соответствие которому можно "дописать потом". А у объекта есть ещё тип (ну нужно же его как-то создать, не напишешь же "new ТоЧтоМожноЖарить", тем более, что класса такого пока и не написано. Поэтому должен быть тип, а классу "ТоЧтоМожноЖарить" мы отнесём потом.
Тогда что может содержать этот тип внутрях? Данные, да. Функции? Но любая функция неизбежно класс вводит. В вырожденном случае функция вводит класс "ПринадлежащийКТипуХ".

У меня тут Хаскель получился, в общем.

Сложно это назвать ориентированностью на объекты, когда классы крутятся вокруг функций, а вокруг классов крутятся типы данных, содержащие только другие типы данных. Хотя Вам удаётся.

Называть это можно хоть горшком, лишь бы в печь не ставили.
[User Picture]
From:dz
Date:Апрель 18, 2009 10:21 pm
(Link)
меня мало волнует название. меня интересует суть. вы её уже увидели, и уже поняли, о чём я, но не хотите признать. :) этот этап мне уже неинтересен. :)
[User Picture]
From:voidex
Date:Апрель 18, 2009 11:43 pm
(Link)
Признать что? Что вы способны пост-фактум придумывать теорию, подходящую под все варианты? Так в этом я не сомневаюсь. Я сомневаюсь, что эта теория во-первых существует где-то ещё, кроме вашей головы, а во-вторых имеет какое-то отношение к ОО. В этом очень сомневаюсь.
Название здесь как раз самое главное. Потому что вы вводите людей в заблуждение, пытаясь указать какую-то связь между вашим ОО (которое по определению везде) и ОО общепринятым. Это разные вещи. Фактически, это терминологическая демагогия — использовать в тезисе одно общеизвестное название, а потом искажать его смысл до неузнаваемости, чтобы невозможно было данный тезис оспорить. Ну и в конце заявить "я под этим подразумевал другое, название тут не главное". И главное, вроде как не поспоришь уже.
Вот если бы вы написали "я тут придумал модель мышления человека DZ" и далее описали бы, что она присуща всему, о чем способен помыслить человек, только вот не реализована нигде, никто и возражать не стал бы. Но вы же приписываете ко всему этому реально существующее ООП, которое к тому же и отношения к вашему уже не имеет в силу разности определения.
[User Picture]
From:dz
Date:Апрель 18, 2009 11:56 pm
(Link)
ок, не увидели и не поняли. или я плохо объясняю. или вообще идиот и гоню херню. whatever.
[User Picture]
From:thesz
Date:Апрель 14, 2009 06:35 am
(Link)
ТРАКТУЕМ мы, читатели программы.

Если честно, я вообще утерял мысль. Ну, функция вводит связь между аргументами и результатом.

Ну, и что?

Объектность-то здесь где?

Наличие классов, которые у тебя синоним типов, ещё не объектность.
[User Picture]
From:blacklion
Date:Апрель 14, 2009 08:09 am
(Link)
Наличие классов, которые у тебя синоним типов, ещё не объектность.
Ну, вот Дмитрий утверждает — что это и есть объектность :) Как только поделили мы нашис сущности на овнов и козлищ — так сразу у нас объектность, два класса — овен и козёл, набор действий — пасти и стричь одних и ругать и гнать нах других… Вся такая объектность.
[User Picture]
From:voidex
Date:Апрель 18, 2009 11:53 pm
(Link)
Объектность в названии.
[User Picture]
From:unreal_undead
Date:Апрель 14, 2009 07:04 am
(Link)
Обычно систему типов Хиндли-Милнера объясняют без всяких ссылок на ОО...
[User Picture]
From:dz
Date:Апрель 14, 2009 10:43 am
(Link)
И?
[User Picture]
From:unreal_undead
Date:Апрель 14, 2009 11:34 am
(Link)
Я к тому, что здесь описание мира в терминах ООП, хотя и применимо, но искусственно. Особенно если посмотреть, во что это выливается на практике - параметрический полиморфизм в ML никакого отношения к полиморфизму в ООЯ не имеет (он ближе к плюсовым шаблонам - которые, в общем то, тоже неявно вводят "классы" объектов, для которых они применимы, но к тому, на чём строится стандартное "инкапсуляция-полиморфизм-наследование", скорее ортогональны).
[User Picture]
From:dz
Date:Апрель 14, 2009 12:36 pm
(Link)
inferred types можно и в с++ воткнуть - не курю связи.
[User Picture]
From:den_parnovsky
Date:Апрель 14, 2009 08:17 am
(Link)
Дмитрий, в этом и суть отличия и суть общности.
Можно строить отношения между типами графом, а можно матрицей преобразований.
Как только мы записываем граф матрицей, а отношение "принадлежит" функцией - опа, родился объектный верблюд.
А вообще какое отношение к "Теории типов"?
[User Picture]
From:dz
Date:Апрель 14, 2009 11:10 am
(Link)
Да это, в общем, не важно, как его записать. Важно, что оно не перестаёт быть. Ну - то есть - я говорю о сути явления, а не о форме его записи или преобразования. Что запись этого в Яве ущербна - очевидно.
(Удалённый комментарий)
[User Picture]
From:nw_wind
Date:Апрель 14, 2009 08:28 am
(Link)
Физик изучает явление. Выводит формулы его как-то описывающие оное.
Тупит над формулами.
Зовёт математика.
Математик вкуривает, что всё можно решить через его новый метод ххх, применяет его, что-то там как-то курчит с формулами, играет с ними и, удовлетворённый результатом, отдаёт физику взад.
Физик тупит над новыми формулами какое-то время и вдруг вкуривает их физическую интерпретацию.
Оба молодцы и получают гранты и премии.
Мораль: Математику пофиг физическая интерпретация формул. А физик в восторге от результата абстрактных преобразований их математиком.

Программист моет, наверно, и не задумываться о объекте "шкаф" и наличии у него метода "двигать". Можно обозвать их x и y - какая разница?
[User Picture]
From:dz
Date:Апрель 14, 2009 11:07 am
(Link)
да-да. я тоже уже чувствую эту аналогию. более того, фактически, о ней и говорю. классы - это физический смысл.

> Go to Top
LiveJournal.com