Alexander
нет конечно
Alexander
и как может быть ФП против ООП
Alexander
это вообще ортогональные вещи
Валерий
Задачи решают функции, а не объекты
sleeping
OOP was good back in the days, and it still has its uses today, but now everyone is realising modifying states is equivalent to kicking babies, so now everyone is moving to immutable objects and functional programming
доня.
вот как раз в другой чят писал я бы фп определил как парадигму, ориентированную на создание чистых (не эксплуатирующих сайд-эффекты) абстракций, на которых хорошо работает композиция, как-то так наверное
доня.
тому що всё фп оно о какой-нибудь композиции функций, трансдьюсеров, монад, функторов и т.д.
Alexander
альтернатива для ФП это императивное программирование
Alexander
их можно сравнивать
Alexander
ООП это о представлении данных и связанных с ними функциях
доня.
тогда уж правильнее будет декларативное vs императивное, не?
Alexander
ООП сочетается как с ФП, так и с иммутабельностью
Alexander
@KolesnichenkoDS согласен
Валерий
См. скала?))0)
доня.
ООП это о представлении данных и связанных с ними функциях
вот а можно об этом поподробнее? а то я уже столько разных определений ООП встречал, совершенно разных интересно ещё одно мнение выслушать
sleeping
вы же знаете про featherweight java?
sleeping
эта милота у Пирса в книжке есть
sleeping
начинается с лямбда-инсчисления
доня.
вот а можно об этом поподробнее? а то я уже столько разных определений ООП встречал, совершенно разных интересно ещё одно мнение выслушать
потому что если инкапсуляция, наследование, полиморфизм, то если допустить что под наследованием можно понимать наследование поведения, а не реализации, то Haskell очень даже ОО-язык
Alexander
классическое mainstream определение это про то, что система работы с данными где данные образуют иерархию со свойствами инкампуляция, наследование, subtype полиморфизм 😏
sleeping
и на каком-то моменте реализуется маленькая джава
Alexander
впрочем последние 2 можно объединить в 1 =)
Vasiliy
вот а можно об этом поподробнее? а то я уже столько разных определений ООП встречал, совершенно разных интересно ещё одно мнение выслушать
> OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
Alexander
это про Алана Кея, альтернативный вариант
Alexander
это как доказывать что синглетоны это такая штука у которой есть взаимнооднозначное соотвествие между значением и типом
Alexander
это определение ещё из 60х =)
Евгений
ООП сочетается как с ФП, так и с иммутабельностью
ООП это про пи калькулюс, а ФП про лямбду. Конечно ща лямбда стала опять непопулярной и даже текущая семантика хаскеля про пи-калькулюс, но разницы это не отменяет
Alexander
ООП по Клею это про pi
Alexander
ООП в меинстриме ничего про calculus нижележащий не говорит
Vasiliy
так называемые три кита мейнстрима - инкапсуляция, наследование, полиморфизм - настолько, мне кажется, абстрактны, что адепты понимают их как хотят
Vasiliy
из самого близлежащего - геттеры-сеттеры по мнению одних нарушают инкапсуляцию, по мнению других настолько важны, что для них делают хоткеи в IDE
Aragaer
"А расскажите своими словами, что такое полиморфизм" - "Я конечно могу рассказать, но честно говоря за те пять лет, что я работаю программистом, я еще ни разу не сталкивался с необходимостью пользоваться полиморфизмом." - ".... наверно на этом нам стоит прекратить собеседование. До свидания."
Aragaer
хотя сейчас, еще через 6 лет, я могу сказать, что таки да, кое-где мне полиморфизм тогда все-таки попадался, просто я его не узнал
Alexander
полиморфизм это когда один метод может работать с данными разного типа
Alexander
т.е. написал один раз и потом применяешь к разному не меняя код
Alexander
хм.. не совсем точно, но ладно
Aleksei (astynax)
Точнее, когда разные данные подходят для одного метода
Alexander
и его полиморфизма много видов
Aleksei (astynax)
Если просто с разными типами работает метод, то это перегрузка
Alexander
параметрический - когда в одну функцию можно пихать разные данные
Alexander
ад-хок - когда функция с одним именем по разному работает с разными данными (не точное определение, но мне лень думать или доставать пирса)
Alexander
subtype - когда метод может работать со вмести подтипами (наследниками) данного типа
Alexander
dynamic - то что в динамических языках, и там несколько подклассов
Alexander
можно открыть книжку пирса и посмотреть, там доступно
Alexander
parametric это то что в меинстриме называют Generic
Aleksei (astynax)
Вон в смолтолке нет перегрузки по типам. Просто те объекты, которые принимают некое сообщение - "утки"
Зигохистоморфный
это вообще ортогональные вещи
а скала как то объединила в себе все это) (но скорее всего это уже обсудили)
Aragaer
так вот да, я к тому моменту сталкивался с полиморфизмом в том же ядре линукса - когда драйвер это структура с 5 указателями на функции
Aragaer
но это наверно единственный пример, который я к тому моменту видел в реальной жизни
Aleksei (astynax)
Где тут полиморфизм?
Aragaer
что не важно, что за драйвер, у него есть open, read, write, close и ioctl
Aleksei (astynax)
Полиморфизм, это возможность взять некий признак (поведение), присущий разным объектам и сгруппировать эти разные объекты по данному принзаку: "плавают и лодки и рыбы - плавание полиморфно"
кана
а скала как то объединила в себе все это) (но скорее всего это уже обсудили)
если я правильно понял, ортогонально в том плане, что не противоречат друг другу и нет причин не использовать ооп в фп
Aleksei (astynax)
Но как подход, а не конкретику типа "состояние+поведение и классы в придачу"
Aragaer
соответственно все character device drivers с точки зрения операционки выглядят одинаково
Зигохистоморфный
вопросик если койонеда дает бесплатный функтор, то что делает йонеда?
Aleksei (astynax)
соответственно все character device drivers с точки зрения операционки выглядят одинаково
значит произошло абстрагирование от конкретной реализации, т.е. именно то, для чего ООП и нужно
Andrew
чморить объектно-ориентированных
Звучит как заднеприводных
Aleksei (astynax)
Не, "заднеприводных", это не в этот чятик, это к Платову
Andrey
Объекты - это замыкания для бедных. Поэтому ООП есть и в Схеме и даже у меня в языке.
Andrey
А искаропки они в Скале и Фшарпе из-за платформ реализации и интеропом с жвм и нетом
Misha
Скала согласно одерскому- ООП язык
Misha
"С элементами"
Andrey
примерно так-же искусственно, как С++ впитал в себя чисто сишные вещи типа указателей - ради полной обратной совместимости.
Andrew
А можно ли назвать тип допустим data Person = Person String Person "Lisa Hacker" , объектом типа Person?
Andrey
иммутабельный дто ака структура
Alexey
примерно так-же искусственно, как С++ впитал в себя чисто сишные вещи типа указателей - ради полной обратной совместимости.
мож я чего не понимаю, но в скала-мире дофига объектов с конструктором, состоянием и методами
Alexey
Что в общем-то слабо напоминает чистую функциональщину с функциями, которые группируются в модули
Anonymous
мож я чего не понимаю, но в скала-мире дофига объектов с конструктором, состоянием и методами
если такие возможности есть то довольно логично их использовать во многих ситуациях, нет?
Andrey
ты еще ленивость приплети. чистота, группировка функций в модули и ленивость - это про сабж. а фп - оно не обязано, вообще говоря.
Alexey
Ну я скорее к тому, что аналогия с указателями не совсем корректная
Andrey
аналогия не про указатели, а про вынужденную поддержку платформы - что нет в фшарпе, что жвм в скале, что сишные примитивы в плюсах
Andrey
хаскель родился сам по себе, ему ни с чем вынужденно совмещаться не надо
Danila Matveev
аналогия не про указатели, а про вынужденную поддержку платформы - что нет в фшарпе, что жвм в скале, что сишные примитивы в плюсах
подцепить готовую инфраструктуру - это практическая целесообразность, чтобы язык не пропал в тоннах других языков
Andrey
так я не говорю что это плохо. именно поэтому скала с кложей едут на готовом наследии жвм. просто ради этого приходится впиливать поддержку концепций платформы - как получится
Andrey
кстати, именно поэтому я в свое время начав с Фшарпа все равно смотрел на сабж - потому что он в этом смысле горд и не идет на подобные компромиссы )))